微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > 算法(六):imglib之erode

算法(六):imglib之erode

时间:10-02 整理:3721RD 点击:

IMG的erode是形态学的腐蚀函数。它的输入数据也是二值化的数据,与前面的dilate

函数是一样的。


函数在工程中是调用了编译好的库,是无法查看源码的,这里就是erode的源码,从注释中不难看出它的原理,与dilate的函数是类似的。


下面是erode的源码实现。

  1. void IMG_erode_bin
  2. (
  3.     const unsigned char *restrict in_data,
  4.           unsigned char *restrict out_data,
  5.     const          char *restrict mask,
  6.     int                           cols
  7. )
  8. {
  9.   int i;
  10.   unsigned __int40_t p0l, p3l, p6l;
  11.   unsigned m0, m1, m2, m3, m4, m5, m6, m7, m8;
  12.   unsigned p0, p1, p2, p3, p4, p5, p6, p7, p8;
  13.   unsigned rA, rB, rC, result;

  14.   /* -------------------------------------------------------------------- */
  15.   /*  "Don't care" values in mask become '1's for the ORing step.  We     */
  16.   /*  do this by converting negative values to "-1" (all 1s in binary)    */
  17.   /*  and converting positive values to 0.                                */
  18.   /* -------------------------------------------------------------------- */
  19.   m0 = mask[0] > 1;       p2 = p0l >> 2;
  20.     p3 = p3l;       p4 = p3l >> 1;       p5 = p3l >> 2;
  21.     p6 = p6l;       p7 = p6l >> 1;       p8 = p6l >> 2;

  22.     /* ---------------------------------------------------------------- */
  23.     /*  Now sum the filtered pixels together by ANDing.                 */
  24.     /* ---------------------------------------------------------------- */
  25.     rA = p0 | m0;   rA &= p1 | m1;       if (!m2) rA &= p2;
  26.     rB = p3 | m3;   if (!m4) rB &= p4;   if (!m5) rB &= p5;
  27.     rC = p6 | m6;   if (!m7) rC &= p7;   if (!m8) rC &= p8;
  28.     result = rA & rB & rC;

  29.     /* ---------------------------------------------------------------- */
  30.     /*  Write the result as four bytes.                                 */
  31.     /* ---------------------------------------------------------------- */
  32.     _mem4(&out_data[i]) = result;
  33.   }
  34. }

复制代码


Erode的算法,与dilate是一样的,参考也是一样的,不同的是算子不同。


函数的使用方法如下:

IMG_erode_bin(Image,out,dmask3x3,lineByte*bmpHeight);


Image是bmp图片的数据区,等等其他参数也是与膨胀的那个函数的用法是一样的。

下面是这个函数的运行结果 。



最后和源码与二进制文件会在最后的结项中。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top