• 二值形态学腐蚀


        把结构元素B平移a后得到Ba,若Ba包含于X,我们记下这个a点,所有满足上述条件的a点组成的集合称做XB腐蚀(Erosion)的结果。

        用公式表示为:E(X)={a| Ba  X}=X  B,如图1所示。 

    1     腐蚀的示意图

    1X是被处理的对象,B是结构元素。不难知道,对于任意一个在阴影部分的点aBa 包含于X,所以XB腐蚀的结果就是那个阴影部分。阴影部分在X的范围之内,且比X小,就象X被剥掉了一层似的,这就是为什么叫腐蚀的原因。

        值得注意的是,上面的B是对称的,即B的对称集Bv=B,所以XB腐蚀的结果和X Bv腐蚀的结果是一样的。如果B不是对称的,让我们看看图2,就会发现XB腐蚀的结果和X Bv腐蚀的结果不同。

    2     结构元素非对称时,腐蚀的结果不同

        图1和图2都是示意图,让我们来看看实际上是怎样进行腐蚀运算的。

        在图3中,左边是被处理的图象X(二值图象,我们针对的是黑点),中间是结构元素B,那个标有origin的点是中心点,即当前处理元素的位置,我们在介绍模板操作时也有过类似的概念。腐蚀的方法是,拿B的中心点和X上的点一个一个地对比,如果B上的所有点都在X的范围内,则该点保留,否则将该点去掉;右边是腐蚀后的结果。可以看出,它仍在原来X的范围内,且比X包含的点要少,就象X被腐蚀掉了一层。

                              图3  腐蚀运算

      下面是腐蚀运算的C++代码

    /*
    * my_erode.cpp
    * 对二值图像进行腐蚀
    * Created on: 2011-10-8
    * Author: LiChanghai
    */
    // 假定背景为黑色---0,目标为白色---255
    // 结构元素---m×n的矩形,m,n为奇数
    // 结构元素的中心作为原点
    #include <string.h>
    #define M 3
    #define N 3
    #define M1 (M-1)/2
    #define N1 (N-1)/2
    bool my_erode(unsigned char *pImage, int width, int height, int biBitCount)
    {
    //定义相关变量
    int i, j, i2, j2;
    bool mark=0;
    //定义结构元素
    unsigned char element[M][N];
    memset(element,255,sizeof(element));

    //定义变量,计算图像每行像素所占的字节数(必须是4的倍数)
    int lineByte=(width * biBitCount/8+3)/4*4;

    //申请新的位图数据存储空间, 并拷贝原图像
    unsigned char *pImage2;
    pImage2=new unsigned char[lineByte*height];
    memcpy(pImage2, pImage, lineByte*height);

    //现在对pImage2进行判断,对pImage进行处理
    //为防止访问越界,最外面的一圈像素不作处理
    for(i=M1; i<height-M+1; i++)
    for(j=N1; j<width-N+1; j++)
    {
    if(*(pImage2+i*lineByte+j)==255) //只对目标像素处理
    {
    mark=0;
    for(i2=-M1; i2<M1+1; i2++)
    for(j2=-N1; j2<N1+1; j2++)
    if(*(pImage2+(i+i2)*lineByte+(j+j2)) != element[i2+M1][j2+N1])
    mark=1; //如果结构元素有一个点不在目标区域内,则标记
    //如果该目标像素被标记,则将该像素腐蚀掉
    if(mark==1)
    *(pImage+i*lineByte+j)=0;
    }
    }
    return 1;
    }

         该程序在Eclipse上调试通过,结果正确。


  • 相关阅读:
    mysql复制那点事
    全排列问题
    56. Merge Interval
    2. Add Two Numbers
    20. Valid Parentheses
    121. Best Time to Buy and Sell Stock
    120. Triangle
    96. Unique Binary Search Trees
    91. Decode Ways
    72. Edit Distance
  • 原文地址:https://www.cnblogs.com/haigege/p/2202178.html
Copyright © 2020-2023  润新知