SUSAN算法思想:

SUSAN算法采用圆形模板,其目的是使检测达到各向同性;

在实际应用中,由于图像的数字化,无法实现真正的原型模板,往往采用近似圆代替;

圆形模板在图像上使用,模板内部每个图像像素点的灰度与模板中心像素的灰度进行比较;

若模板内某个像素的灰度与模板中心像素灰度的差值小于一定值,则认为该点与核具有相同或相似的灰度。

由满足这样条件的像素组成的区域称为吸收核同值区(Univalue Segment Assimilation Nucleus,USAN);

当圆形模板完全在背景或目标中时,USAN区面积最大;

当圆形模板向边缘移动时,USAN区面积减少;

当圆心处于边缘时,USAN区面积很小;

当圆心在角点处时,USAN区面积最小;

故将图像每点上的USAN区面积作为该处特征的显著性度量,USAN区面积越小,特征越显著;

②确定USAN区域:

用这个圆形模板扫描整个图像,模板内部的每个像素的灰度与模板中心像素的灰度进行比较,并且给定阈值,确定像素是否属于USAN区域;

判断方法如下式:

式中,为USAN判别函数,r0为模板中心点,r为模板内部点;t为灰度差阈值,一般取25;

当然,也可以用平滑的线来代替这种直接的分割方式(如下图b线),这样可以获得更稳定而敏感的结果,虽然计算复杂但是可以通过查找表来获得较快的速度。

公式如下:

④信息提取:

USAN特征图像可以通过下式求得:

其中,g为几何门限,在进行边缘提取时,g的取值要大一些,一般设为3nmax/4,表示边缘响应,USAN区域的面积越小,则边缘相应就越大;

4、SUSAN阈值的分析:

在SUSAN检测中,有两种阈值:

一种用来约束角点的数量;

一种用来约束角点的质量;

当然,一个阈值不能完全做到只影响质量或数量,只会有一个侧重点;

那么,SUSAN中的两个阈值t和g在特征检测中起到一个什么样的作用呢?

很明显,

阈值g是角点质量,尽管也会影响数量,但是相对来说更侧重于影响质量;

例如,g值减小,那么SUSAN会更加侧重于检测到更加“尖锐”的角点;

阈值t是角点数量,当t减小时,会检测到更多的角点;

所以,阈值t可以在不影响角点质量的情况下,控制检测到的角点的数量;

在大多数情况下,设t为25比较合适,如果图像的对比度比较低,可以修改t值以适应变化。

6、opencv:susan边缘检测程序:

//

//susan边缘检测

//

Mat SusanFun(Mat img)

{

//susan模板

int OffSetX[37] = { -1, 0, 1,

-2,-1, 0, 1, 2,

-3,-2,-1, 0, 1, 2, 3,

-3,-2,-1, 0, 1, 2, 3,

-3,-2,-1, 0, 1, 2, 3,

-2,-1, 0, 1, 2,

-1, 0, 1 };

int OffSetY[37] = { -3,-3,-3,

-2,-2,-2,-2,-2,

-1,-1,-1,-1,-1,-1,-1,

0, 0, 0, 0, 0, 0, 0,

1, 1, 1, 1, 1, 1, 1,

2, 2, 2, 2, 2,

3, 3, 3 };

int mHeight = img.rows;

int mWidth = img.cols;

unsigned char *ucDataImg = (unsigned char *)img.data;

Mat nImg(img.rows,img.cols,CV_8UC1);

unsigned char *ucDatanImg = (unsigned char *)nImg.data;

int k,pixelSum,thresh,sameNum;

for(int i=3;i<mHeight-3;i++)

{

for (int j=3;j<mWidth-3;j++)

{

pixelSum = 0;

sameNum = 0;

for (k=0;k<37;k++)

{

pixelSum += ucDataImg[(i+OffSetY[k])*mWidth+(j+OffSetX[k])];

thresh = pixelSum/37;//数量

if (abs(ucDataImg[(i+OffSetY[k])*mWidth+(j+OffSetX[k])]-ucDataImg[i*mWidth+j])<=thresh)

{

sameNum ++;

}

}

if (sameNum<33)//质量34

{

ucDatanImg[i*mWidth+j] = 0;

}

else

{

ucDatanImg[i*mWidth+j] = 255;

}

}

}

return nImg;

}