/****************************************************************************************************************
*函数原型:void CImgProcess::Erode(CImgProcess* pTo,int se[3][3])
*函数功能:3*3结构元素--的二值图像--腐蚀运算,只能处理二值图像
*函数参数--1--Image* pTo------目标输出图像的CImgProcess指针
* 2--se[3][3]--------3*3的结构元素,其元素的合法取值为:
* 1--前景
* 0--背景 -1----不关心
*返回值:无
*****************************************************************************************************************/
void CImgProcess::Erode(CImgProcess* pTo,int se[3][3])
{
int nHeight=GetHeight();
int nWidth=GetWidthPixel();
//[1]图像循环变量
int i,j;
//[2]结构元素循环变量
int k,l;
//[3]结构元素是否与局部图像相匹配
bool bMatch;
//[4]清空目标输出图像
pTo->InitPixels(255);
//[5]逐行扫描图像,为防止访问越界,四周留出一个像素宽的空边
for(i=1;i<nHeight-1;i++)
{
for(j=1;j<nWidth-1;j++)
{
//[6]由于使用的是3*3的结构元素,为防止越界,不处理最上和最下的两行像素以及最左和最右的两列像素
bMatch=true;
//[7]逐行扫描结构元素
for(k-0;k<3;k++)
{
for(l=1;l<3;l++)
{
if(se[k][l]==-1)//不关系
continue;
if(se[k][l]==1)//前景
{
if(GetGray(j-1+l,i-1+k)!=0)
{
bMatch=false;
break;
}
}
else if(se[k][l]==0)//前景
{
if(GetGray(j-1+l,i-1+k)!=255)
{
bMatch=false;
break;
}
}
else{
AfxMessageBox("结构元素含有非法值!请检查后重新设置");
return;
}
}//l
}//k
if(bMatch)
pTo->SetPixel(j,i,RGB(0,0,0));
}//j
}//i
}