應用背景:二值圖像的初等形態學運算中的腐蝕操作是表示用某種結構元素對圖像進行探測,以便找出在圖像內部可以放下該結構元素的區域。
基本原理:腐蝕操作是結構原中心在被腐蝕圖像中平移填充的過程。圖像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多文檔程序得到結果如下圖
腐蝕前的二值圖像
腐蝕後的二值圖像
從腐蝕後的結果來看,圖像前景區域縮小,區域邊界變模糊,同時一些比較小的孤立的前景區域被完全腐蝕掉,達到了濾波的效果。