一、腐蚀中心
腐蚀与膨胀,二值图像的腐蚀和膨胀图像数字处理中应用相当广泛,代码处理也很简单。为看懂本文的关键。
相应的代码及原理在此处省略,或另外开文。
二、颜色匹配中几个重要的函数算法
//搜索腐蚀中心
/*函数引入目标条件,和搜索的区域
从而返回了腐蚀中心x,y
*/
static int SearchCentre(unsigned int *x,unsigned int *y,const TARGET_CONDI *Condition,const SEARCH_AREA *Area)
{
unsigned int SpaceX,SpaceY,i,j,k,FailCount=0;
COLOR_RGB Rgb;
COLOR_HSL Hsl;
SpaceX = Condition->WIDTH_MIN/3; //X间隔
SpaceY = Condition->HIGHT_MIN/3;//Y间隔,将区域矩形化,方便表示腐蚀中心
for(i=Area->Y_Start;i<Area->Y_End;i+=SpaceY)
{
for(j=Area->X_Start;j<Area->X_End;j+=SpaceX)
{ //遍历区域搜索
FailCount=0;
for(k=0;k<SpaceX+SpaceY;k++)
{
if(k<SpaceX) //每一分块进行横扫
ReadColor(j+k,i+SpaceY/2,&Rgb);
else //每一分块进行竖扫
ReadColor(j+SpaceX/2,i+(k-SpaceX),&Rgb);
RGBtoHSL(&Rgb,&Hsl);//将读取的颜色格式转换
if(!ColorMatch(&Hsl,Condition))//颜色范围匹配
FailCount++;
if(FailCount>((SpaceX+SpaceY)>>ALLOW_FAIL_PER))
break;
}
if(k==SpaceX+SpaceY)
{
*x = j+SpaceX/2;
*y = i+SpaceY/2;//腐蚀中心的确认,假设矩形,
//则得腐蚀中心的表达式
return 1;
}
}
}
return 0;
}
//从腐蚀中心向外腐蚀,得到新的腐蚀中心
static int Corrode(unsigned int oldx,unsigned int oldy,const TARGET_CONDI *Condition,RESULT *Resu)
{
unsigned int Xmin,Xmax,Ymin,Ymax,i,FailCount=0;
COLOR_RGB Rgb;
COLOR_HSL Hsl;