应用背景:二值图像的初等形态学运算中的腐蚀操作是表示用某种结构元素对图像进行探测,以便找出在图像内部可以放下该结构元素的区域。
基本原理:腐蚀操作是结构原中心在被腐蚀图像中平移填充的过程。图像A被结构元B腐蚀,用集合论来表示如下式:
其中x是平移量,上式表示腐蚀结果集合中的元素是结构元的中心平移x后仍然包含在集合A内,还可用E(A,B)表示腐蚀。
c++实现:
void Morphology::ImgErosion(unsigned char *imgBufIn,unsigned char *imgBufOut,int imgWidth,
int imgHeight,int *TempBuf, int TempW, int TempH)
{
int lineByte=(imgWidth+3)/4*4;
memcpy(imgBufOut,imgBufIn,lineByte*imgHeight);
int i,j,k,l;
int flag;
for(i=TempH/2;i<imgHeight-TempH/2;i++)
{
for(j=TempW/2;j<imgWidth-TempW/2;j++)
{
flag=1;
for(k=-TempH/2;k<=TempH/2;k++)
{
for(l=-TempW/2;l<=TempW/2;l++)
{
if(TempBuf[(k+TempH/2)*TempW+l+TempW/2])
{
if(!*(imgBufIn+(i+k)*lineByte+j+l))
flag=0;
}
}
}
if(flag)
*(imgBufOut+i*lineByte+j)=255;
else
*(imgBufOut+i*lineByte+j)=0;
}
}
}
运行结果:在VS2010中运行MFC多文档程序得到结果如下图
腐蚀前的二值图像
腐蚀后的二值图像
从腐蚀后的结果来看,图像前景区域缩小,区域边界变模糊,同时一些比较小的孤立的前景区域被完全腐蚀掉,达到了滤波的效果。