susan算法
A. 计算机视觉教程的目 录
第1章绪论1
1.1计算机视觉1
1.1.1视觉1
1.1.2计算机视觉概述2
1.1.3相关学科3
1.1.4应用领域4
1.2图像基础4
1.2.1图像4
1.2.2图像表达和显示6
1.2.3图像存储8
1.3像素间联系10
1.3.1像素邻域11
1.3.2像素间距离12
1.4本书内容提要14
1.4.1计算机视觉系统及模块15
1.4.2如何学习使用本书16
总结和复习18
第2章视觉和视知觉20
2.1视觉过程和特性20
2.1.1视觉过程20
2.1.2视觉的时间特性22
2.1.3视觉的空间特性24
2.2形状知觉25
2.2.1形状的感知25
2.2.2轮廓26
2.2.3图形和背景28
2.3空间知觉30
2.3.1非视觉性深度线索30
2.3.2双目深度线索31
2.3.3单目深度线索33
2.4运动知觉35
总结和复习36
第3章图像采集38
3.1采集模型38
3.1.1几何成像模型38
3.1.2亮度成像模型43
3.2采集装置44
3.2.1采集装置及性能指标44
3.2.2空间和幅度分辨率46
3.3采集方式47
3.3.1成像方式一览47
3.3.2结构光法48
3.4摄像机标定50
3.4.1标定程序和步骤50
3.4.2两级标定法52
总结和复习55
第4章图像预处理57
4.1坐标变换57
4.1.1基本坐标变换57
4.1.2几何失真校正59
4.2灰度映射61
4.2.1灰度映射原理62
4.2.2灰度映射示例62
4.3直方图修正64
4.3.1直方图均衡化64
4.3.2直方图规定化66
4.4空域滤波70
4.4.1原理和分类70
4.4.2线性平滑滤波71
4.4.3线性锐化滤波72
4.4.4非线性平滑滤波73
4.4.5非线性锐化滤波74
总结和复习74
第5章基元检测77
5.1边缘检测77
5.1.1检测原理77
5.1.2一阶导数算子78
5.1.3二阶导数算子80
5.1.4边界闭合82
5.2SUSAN算子83
5.2.1USAN原理83
5.2.2角点和边缘检测84
5.3哈夫变换87
5.3.1基本哈夫变换原理87
5.3.2广义哈夫变换原理88
5.3.3完整广义哈夫变换90
5.4位置直方图技术92
总结和复习94
第6章目标分割96
6.1轮廓搜索96
6.1.1图搜索96
6.1.2动态规划98
6.2主动轮廓模型99
6.2.1主动轮廓99
6.2.2能量函数100
6.3基本阈值技术103
6.3.1原理和分类103
6.3.2全局阈值的选取104
6.3.3局部阈值的选取106
6.3.4动态阈值的选取109
6.4特色阈值方法110
6.4.1多分辨率阈值110
6.4.2过渡区阈值111
总结和复习114
第7章目标表达和描述116
7.1基于边界的表达116
7.1.1链码116
7.1.2边界段和凸包118
7.1.3边界标记119
7.2基于区域的表达121
7.2.1四叉树121
7.2.2围绕区域122
7.2.3骨架122
7.3基于边界的描述125
7.3.1边界长度和直径125
7.3.2边界形状数126
7.4基于区域的描述127
7.4.1区域面积和密度127
7.4.2区域形状数128
7.4.3不变矩129
7.4.4拓扑描述符131
总结和复习132
第8章形状特性分析135
8.1形状紧凑性描述符135
8.2形状复杂性描述符141
8.3基于多边形的形状分析143
8.3.1多边形的获取143
8.3.2多边形描述145
8.4基于曲率的形状分析146
8.4.1轮廓曲率146
8.4.2曲面曲率149
总结和复习151
第9章立体视觉153
9.1立体视觉模块153
9.2双目成像和视差155
9.2.1双目横向模式155
9.2.2双目横向会聚模式157
9.2.3双目纵向模式158
9.3基于区域的立体匹配159
9.3.1模板匹配160
9.3.2双目立体匹配161
9.4基于特征的立体匹配165
9.4.1点对点的方法165
9.4.2动态规划匹配167
总结和复习168
第10章三维景物恢复171
10.1由光移恢复表面朝向171
10.1.1表面反射特性172
10.1.2目标表面朝向174
10.1.3反射图174
10.1.4光度立体学求解176
10.2从明暗恢复形状177
10.2.1明暗与形状177
10.2.2求解亮度方程180
10.3纹理变化与表面朝向182
10.3.1三种典型变化182
10.3.2确定线段的纹理消失点184
10.4根据焦距确定深度185
总结和复习187
第11章运动分析189
11.1运动分类和表达189
11.2全局运动检测193
11.2.1利用图像差的运动检测193
11.2.2基于模型的运动检测196
11.3运动目标分割197
11.4运动光流和表面取向198
11.4.1光流约束方程199
11.4.2光流计算199
11.4.3光流与表面取向203
总结和复习205
第12章景物识别207
12.1统计模式分类207
12.1.1模式分类原理208
12.1.2最小距离分类器208
12.1.3最优统计分类器209
12.2感知机213
12.3支持向量机216
12.4结构模式识别219
12.4.1字符串结构识别219
12.4.2树结构识别222
总结和复习224
第13章广义匹配226
13.1目标匹配227
13.1.1匹配的度量227
13.1.2字符串匹配229
13.1.3惯量等效椭圆匹配231
13.2动态模式匹配233
13.3关系匹配235
13.3.1关系表达和距离235
13.3.2关系匹配模型237
13.4图同构匹配238
13.4.1图论基础238
13.4.2图同构和匹配241
总结和复习242
第14章场景解释245
14.1线条图标记解释245
14.2体育比赛视频排序248
14.3计算机视觉系统模型252
14.3.1多层次串行结构252
14.3.2以知识库为中心的辐射结构253
14.3.3多模块交叉配合结构254
14.4计算机视觉理论框架255
14.4.1马尔视觉计算理论256
14.4.2对马尔理论框架的改进258
14.4.3新理论框架的研究259
总结和复习262
部分练习题解答263
参考文献273
索引282
B. susan算子的susan算子边缘检测
当圆形模板完全处在背景或目标中时,USAN 区域面积最大;当模板移向目标边缘时,USAN 区域逐渐变小;当模板中心处于边缘时,USAN 区域很小;当模板中心处于角点时,USAN 区域最小。
因此,可以通过计算每 1 个像素的 USAN 值,并与设定的门限值进行比较, 如果该像素的 USAN 值小于门限
值,则该点可以认为是 1 个边缘点。这就是 SUSAN 算法思想。
C. 苏氏三父子代表作
1、苏轼《贾谊论》
《贾谊论》是北宋文学家苏轼创作的一篇人物评论文,评论对象为西汉初年文帝时期的政治家贾谊。全文紧扣贾谊失意而终展开,对贾谊的人格特质进行了深入分析,同时剖析当时的历史背景,虚实结合、正反对比,用逐层推进的方式与坚定的语气来凸显贾谊的个性。
该文章劝说人君遇到贾谊这样的人才,要大胆使用,不要错过时机;劝解贾生式的人,要自爱其身,要善于自用其才。论证有理有据、层次分明。
2、苏轼《题西林壁》
《题西林壁》是宋代文学家苏轼的诗作。这是一首诗中有画的写景诗,又是一首哲理诗,哲理蕴含在对庐山景色的描绘之中。前两句描述了庐山不同的形态变化。
庐山横看绵延逶迤,崇山峻岭郁郁葱葱连环不绝;侧看则峰峦起伏,奇峰突起,耸入云端。从远处和近处不同的方位看庐山,所看到的山色和气势又不相同。后两句写出了作者深思后的感悟:之所以从不同的方位看庐山,会有不同的印象,原来是因为“身在此山中”。
也就是说,只有远离庐山,跳出庐山的遮蔽,才能全面把握庐山的真正仪态。全诗紧紧扣住游山谈出自己独特的感受,借助庐山的形象,用通俗的语言深入浅出地表达哲理,故而亲切自然,耐人寻味。
3、苏辙《栾城集》
这是北宋苏辙所着的诗文别集。《栾城集》早在宋代就早多种版本,有《应诏集》并多书章疏三十七篇的本子,现今见到最早的是宋刻《苏文定公文集》,分《前集》五十卷,《后集》二十四卷、《三集》十卷,《应诏集》十二卷,共九十六卷。现存四十六卷。
其次是明清梦轩刻本《苏文定公栾城集》,四卷数同上。再次是清道光壬辰眉州三苏祠刻本,但卷数、文字与清梦轩本皆有出入。《前集》才四十八卷。中有清宛陵贡刻本,系清梦轩本的翻刻本。
4、苏洵《权书》
《权书》由宋代苏洵所撰,虽经年月,但仍为世人所用。其中精髓,如下言述:人有言曰:“儒者不言兵。”仁义之兵,无术而自胜。使仁义之兵无术而自胜也,则武王合用乎太公?而牧野之战,“四伐攻、五伐、六伐、七伐乃止齐 焉。”又何用也?
《权书》,兵书也,而所以用仁济义之术也。吾疾夫世之人不究本末,而妄以我为孙武之徒也。夫孙氏之言兵为常言也,而我以此书为不得已而言之之书也。故仁义不得已,而后吾《权书》用焉。然则《权书》,为仁义之穷而作也。
5、苏轼《后赤壁赋》
《后赤壁赋》是北宋文学家苏轼创作的一篇赋,作于宋神宗元丰五年(1082)贬谪黄州(今湖北黄冈)时,是《赤壁赋》的姊妹篇。与前篇纯写江上泛舟不同,后篇记游,以登岸履险为主,也无谈玄说理的内容。
文章前面记真景真情,通过毫不雕琢的天然佳句,给人一种壮阔的美感;中间对踞石攀木、俯江长啸的细致描写,真切地表达了作者月夜登临的情趣。最后写梦见道士化鹤,纯属幻境幻觉,空灵奇幻,迷离恍惚,从中表现了作者内心怅然若失的苦闷。
D. susan算子的susan算子原理
SUSAN 算子的模板与常规卷积算法的正方形模板不同, 它采用一种近似圆形的模板, 用圆形模板在图像上移动, 模板内部每个图像像素点的灰度值都和模板中心像素的灰度值作比较, 若模板内某个像素的灰度与模板中心像素(核)灰度的差值小于一定值, 则认为该点与核具有相同(或相近)的灰度, 如下图所示。由满足这一条件的像素组成的区域称为吸收核同值区(Univalue Segment Assimilating Nucleus, USAN)。
E. susan算子的susan算子特点
与其他边缘和角点检测算子相比,SUSAN 算子有一些独特的地方。
(1)在用SUSAN算子对边缘和角点进行检测时不需要计算微分,这使得SUSAN算子对噪声更加鲁棒。
(2)SUSAN检测算子能提供不依赖于模板尺寸的边缘精度。换句话说,最小USAN区域面积的计算是个相对的概念,与模版尺寸无关,所以SUSAN边缘算子的性能不受模版尺寸影响。
(3)控制参数的选择很简单,且任意性小,容易实现自动化选取。
F. susan算子的介绍
SUSAN ( Small univalue segment assimilating nucleus) 算子是一种基于灰度的特征点获取方法, 适用于图像中边缘和角点的检测, 可以去除图像中的噪声, 它具有简单、有效、抗噪声能力强、计算速度快的特点。
G. 角点检测的几种基本方法
也称为特征点检测。角点通常被定义为两条边的交点,更严格的说,角点的局部邻域应该具有两个不同区域的不同方向的边界。而实际应用中,大多数所谓的角点检测方法检测的是拥有特定特征的图像点,而不仅仅是“角点”。这些特征点在图像中有具体的坐标,并具有某些数学特征,如局部最大或最小灰度、某些梯度特征等。现有的角点检测算法并不是都十分的鲁棒。很多方法都要求有大量的训练集和冗余数据来防止或减少错误特征的出现。角点检测方法的一个很重要的评价标准是其对多幅图像中相同或相似特征的检测能力,并且能够应对光照变化、图像旋转等图像变化。 Moravec角点检测算法Moravec角点检测算法是最早的角点检测算法之一。该算法将角点定义为具有低“自相关性”的点。算法会检测图像的每一个像素,将像素周边的一个邻域作为一个patch,并检测这个patch和周围其他patch的相关性。这种相关性通过两个patch间的平方差之和(SSD)来衡量,SSD值越小则相似性越高。如果像素位于平滑图像区域内,周围的patch都会非常相似。如果像素在边缘上,则周围的patch在与边缘正交的方向上会有很大差异,在与边缘平行的方向上则较为相似。而如果像素是各个方向上都有变化的特征点,则周围所有的patch都不会很相似。Moravec会计算每个像素patch和周围patch的SSD最小值作为强度值,取局部强度最大的点作为特征点。 Harris角点检测算法Moravec角点检测算法有几个很明显的缺陷:1,强度值的计算并不是各向同性的,只有离散的8个45度角方向被考虑。因为patch的评议比较最多只有8个方向;2,由于窗口是方形并且二元的,因此相应函数会有噪声;3,对边缘的相应太简单,因为强度值尽取SSD的最小值; FAST角点检测算法Smith 和 Brady在1997年提出了一种完全不同的角点提取方法,即“SUSAN (Smallest UnivalueSegment AssimilatingNucleus)”提取算子。SUSAN 提取算子的基本原理是,与每一图像点相关的局部区域具有相同的亮度。如果某一窗口区域内的每一像元亮度值与该窗口中心的像元亮度值相同或相似,这一窗口区域将被称之为“USAN”。计算图像每一像元的“USAN”,为我们提供了是否有边缘的方法。位于边缘上的像元的“USAN”较小,位于角点上的像元的“USAN”更小。因此,我们仅需寻找最小的“USAN”,就可确定角点。该方法由于不需要计算图像灰度差,因此,具有很强的抗噪声的能力。Edward Rosten and TomDrummond 在2006年提出了一种简单快速的角点探测算法,该算法检测的角点定义为在像素点的周围邻域内有足够多的像素点与该点处于不同的区域。应用到灰度图像中,即有足够多的像素点的灰度值大于该点的灰度值或者小于该点的灰度值。考虑下图中p点附近半径为3的圆环上的16个点,一个思路是若其中有连续的12个点的灰度值与p点的灰度值差别超过某一阈值,则可以认为p点为角点。这一思路可以使用机器学习的方法进行加速。对同一类图像,例如同一场景的图像,可以在16个方向上进行训练,得到一棵决策树,从而在判定某一像素点是否为角点时,不再需要对所有方向进行检测,而只需要按照决策树指定的方向进行2-3次判定即可确定该点是否为角点。
H. 求助VB高手!!有关图象锐化的问题
事实上有大量的边缘提取算法,这里介绍几种常用的比较简单的边缘提取算法.其实边缘提取算法也可以算是图像二值化算法,只是更突出图像中拐点的地方.
图像边缘的种类可以分为两种:一种称为阶跃性边缘,它两边像素的灰度值有着显着的不同;另一种称为屋顶状边缘,它位于灰度值从增加到减少的变化转折点。对于阶跃性边缘,二阶方向导数在边缘处呈零交叉;而对于屋顶状边缘,二阶导数在边缘处取极值。 通常的边缘提取方法是先通过边缘算子找到图像中可能的边缘点,再把这些点连接起来形成封闭的边界。 边缘检测困难在于物体之间相接触、互遮挡或者由于噪声等原因引起的边缘间断。
其中susan和canny算法我用过,可以结合两种算法的结果使用...
1.susan算子
SUSAN算子是一种基于图像局部灰度特征的算法,利用一个圆形的模板对图像进行扫描,比较模板内部的点与模板中心点的灰度值,如果灰度差值小于一定的阈值,就认为该点与中心点的灰度相同。统计模板内部与中心点灰度相同的点的个数,与一个阈值进行比较,判断该点是否属于某个区域的边缘点,从而实现对图像的分割。
//-----------------------------------------------------------------------
//c/c++描述
/**************************************************
SUSAN边缘检测
parameter: HDIB
return: HDIB
**************************************************/
HDIB SUSANEdgeDetectDIB(HDIB hDib){
SetCursor(LoadCursor(NULL, IDC_WAIT));
DWORD dwDataLength = GlobalSize(hDib);
HDIB hNewDib = GlobalAlloc(GHND,dwDataLength);
if(!hNewDib){
SetCursor(LoadCursor(NULL, IDC_ARROW));
return NULL;
}
LPBYTE lpDIB = (LPBYTE)GlobalLock(hNewDib);
if(lpDIB == NULL){
SetCursor(LoadCursor(NULL, IDC_ARROW));
return NULL;
}
LPBYTE lpDIBSrc = (LPBYTE)GlobalLock(hDib);
memcpy(lpDIB, lpDIBSrc,
sizeof(BITMAPINFOHEADER)+PaletteSize(lpDIBSrc));
DWORD lSrcWidth = DIBWidth(lpDIBSrc);
DWORD lSrcHeight = DIBHeight(lpDIBSrc);
WORD wBitCount = ((LPBITMAPINFOHEADER)lpDIBSrc)->biBitCount;
DWORD lSrcRowBytes = WIDTHBYTES(lSrcWidth*((DWORD)wBitCount));
LPBYTE lpOldBits = FindDIBBits(lpDIBSrc);
LPBYTE lpData = FindDIBBits(lpDIB);
//图像变换开始//////////////////////////////////////////
DWORD i, j, h, k, offset;
int NearPoint[37];
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 };
if(wBitCount == 8){
int thre, same, max, min;
//统计象素亮度最大值和最小值
max = min = 0;
for(i=0;i<lSrcHeight;i++)
for(j=0;j<lSrcWidth;j++){
offset = lSrcRowBytes*i+j;
if(max < (int)(*(lpOldBits+offset)))
max = (int)(*(lpOldBits+offset));
if(min > (int)(*(lpOldBits+offset)))
min = (int)(*(lpOldBits+offset));
}
//相似度阈值为最大值和最小值差的1/10
thre = (max-min)/10;
for(i=3;i<lSrcHeight-3;i++)
for(j=3;j<lSrcWidth-3;j++){
//统计圆形邻域内相似的点的个数
same = 0;
for(h=0;h<37;h++)
NearPoint[h] = (int)(*(lpOldBits+lSrcRowBytes*(i+OffSetY[h])+(j+OffSetX[h])));
for(h=0;h<37;h++)
if(((int)abs(NearPoint[h]-NearPoint[18])) <= thre) same ++;
if(same > 27)
*(lpData+lSrcRowBytes*i+j) = 255;
else *(lpData+lSrcRowBytes*i+j) = 0;
}
}
if(wBitCount == 24){
int theSame[3], theMax[3], theMin[3], theThre[3];
memset(theMax, 0, sizeof(int)*3);
memset(theMin, 0, sizeof(int)*3);
for(i=0;i<lSrcHeight;i++)
for(j=0;j<lSrcWidth;j++){
offset = lSrcRowBytes*i+j*3;
for(k=0;k<3;k++){
if(theMax[k] < (int)(*(lpOldBits+offset+k)))
theMax[k] = (int)(*(lpOldBits+offset+k));
if(theMin[k] > (int)(*(lpOldBits+offset+k)))
theMin[k] = (int)(*(lpOldBits+offset+k));
}
}
for(k=0;k<3;k++)
theThre[k] = (theMax[k]-theMin[k])/10;
for(i=3;i<lSrcHeight-3;i++)
for(j=3;j<lSrcWidth-3;j++){
memset(theSame, 0, sizeof(int)*3);
for(k=0;k<3;k++){
for(h=0;h<37;h++)
NearPoint[h] = (int)(*(lpOldBits+lSrcRowBytes*(i+OffSetY[h])+(j+OffSetX[h])*3+k));
for(h=0;h<37;h++)
if(((int)abs(NearPoint[h]-NearPoint[18])) <= theThre[k]) theSame[k] ++;
}
if((theSame[0] > 27) && (theSame[1] > 27) && (theSame[2] > 27))
memset(lpData+lSrcRowBytes*i+j*3, 255, 3);
else
memset(lpData+lSrcRowBytes*i+j*3, 0, 3);
}
}
GlobalUnlock(hDib);
GlobalUnlock(hNewDib);
SetCursor(LoadCursor(NULL, IDC_ARROW));
return hNewDib;
}
2.canny算子
Canny边缘检测基本原理
(1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。
(2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。
(3)类似与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。
算法比较内容比较多,有需要的朋友可以到这儿看(http://www.pcdog.com/e/develop-tools/2005/08/f067918.html).
3.sobel算子
Sobel 算子有两个,一个是检测水平边沿的 ;另一个是检测垂直平边沿的 。与 和 相比,Sobel算子对于象素的位置的影响做了加权,因此效果更好。
Sobel算子另一种形式是各向同性Sobel(Isotropic Sobel)算子,也有两个,一个是检测水平边沿的 ,另一个是检测垂直平边沿的。各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。由于建筑物图像的特殊性,我们可以发现,处理该类型图像轮廓时,并不需要对梯度方向进行运算,所以程序并没有给出各向同性Sobel算子的处理方法。
由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数,简单有效,因此应用广泛。美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。 在观测一幅图像的时候,我们往往首先注意的是图像与背景不同的部分,正是这个部分将主体突出显示,基于该理论,我们给出了下面阈值化轮廓提取算法,该算法已在数学上证明当像素点满足正态分布时所求解是最优的。
/// <summary>
/// 按 Sobel 算子进行边缘检测
/// </summary>
/// <param name="b">位图流</param>
/// <returns></returns>
public Bitmap Sobel(Bitmap b)
{
Matrix3x3 m = new Matrix3x3();
// -1 -2 -1
// 0 0 0
// 1 2 1
m.Init(0);
m.TopLeft = m.TopRight = -1;
m.BottomLeft = m.BottomRight = 1;
m.TopMid = -2;
m.BottomMid = 2;
Bitmap b1 = m.Convolute((Bitmap)b.Clone());
// -1 0 1
// -2 0 2
// -1 0 1
m.Init(0);
m.TopLeft = m.BottomLeft = -1;
m.TopRight = m.BottomRight = 1;
m.MidLeft = -2;
m.MidRight = 2;
Bitmap b2 = m.Convolute((Bitmap)b.Clone());
// 0 1 2
// -1 0 1
// -2 -1 0
m.Init(0);
m.TopMid = m.MidRight = 1;
m.MidLeft = m.BottomMid = -1;
m.TopRight = 2;
m.BottomLeft = -2;
Bitmap b3 = m.Convolute((Bitmap)b.Clone());
// -2 -1 0
// -1 0 1
// 0 1 2
m.Init(0);
m.TopMid = m.MidLeft = -1;
m.MidRight = m.BottomMid = 1;
m.TopLeft = -2;
m.BottomRight = 2;
Bitmap b4 = m.Convolute((Bitmap)b.Clone());
// 梯度运算
b = Gradient(Gradient(b1, b2), Gradient(b3, b4));
b1.Dispose(); b2.Dispose(); b3.Dispose(); b4.Dispose();
return b;
} // end of Sobel
4.还有Laplace,Gobar,Roberts等等... 没有详细了解过,也不介绍了.
I. moravec算子,susan算子,css算子,fast算子,harris算子哪个对模糊的鲁棒性好
Harris算子介绍:
该算子是C.Harris和M.J.Stephens在1988年提出的一种点特征提取算子。这种算子受信号处理中自相关函数的启发,可以给出图像中某一像素点的自相关矩阵肘,其特征值是自相关函数的一阶曲率,如果算,Y两个方向上的曲率值都高,那么就认为该点是角点。Harris角点检测算子
Harris[2]角点检测算子是Moravec角点检测算子的改进.
(1)算子用高斯函数代替二值窗口函数,对离中心点越近的像素赋于越大的权重,以减少噪声影响。
图1-3高斯函数
(2)算子只考虑了每隔45度方向,Harris算子用Taylor展开去近似任意方向。
写成矩阵形式: :
式子(1-2)
式子(1-3)
式中,Ix为x方向的差分,Iy为y方向的差分,w(x,y)为高斯函数。
(3)Harris采用了一种新的角点判定方法。矩阵M的两个特征向量l1和l2与矩阵M的主曲率成正比。Harris利用l1, l2来表征变化最快和最慢的两个方向.若两个都很大就是角点,一个大一个小就是边缘,两个都小就是在变化缓慢的图像区域.
来自文献[11]
图1- 4用矩阵M的特征向量分类图像像素点
但是解特征向量需要比较多的计算量,且两个特征值的和等于矩阵M的迹,两个特征值的积等于矩阵M的行列式。所以用(1-4)式来判定角点质量。(k常取0.04-0.06)
(1-4)
(4) Harris算法总结
Step 1:对每一像素点计算相关矩阵M。
Step 2:计算每像素点的Harris 角点响应。
Step 3.在w*w范围内寻找极大值点,若Harris 角点响应大于阀值,则视为角点。
Harris算子对灰度的平移是不变的,因为只有差分,对旋转也有不变性,但是对尺度很敏感,在一个尺度下是角点, 在在另一个尺度下可能就不是了.
图1- 5harris算子对尺度的敏感性
图1- 6harris算子对简单图像的响应
Harris 算子是一种有效的点特征提取算子,其优点总结起来有:
①计算简单:Harris 算子中只用到灰度的一阶差分以及滤波,操作简单。
②提取的点特征均匀而且合理:Harris 算子对图像中的每个点都计算其兴趣值,然后在邻域中选择最优点。实验表明,在纹理信息丰富的区域,Harris 算子可以提取出大量有用的特征点,而在纹理信息少的区域,提取的特征点则较少。
③稳定:Harris算子的计算公式中只涉及到一阶导数,因此对图像旋转、灰度变化、噪声影响和视点变换不敏感,它也是比较稳定的一种点特征提取算子。
Harris 算子的局限性有:
①它对尺度很敏感,不具有尺度不变性。
②提取的角点是像素级的。
[2]Chris Harris, Mike Stephens, A Combined Corner and Edge Detector, 4th Alvey Vision Conference, 1988, pp147-151
J. SUSAN算子的特点
SUSAN算子是一种基于图像局部灰度特征的算法,利用一个圆形的模板对图像进行扫描,比较模板内部的点与模板中心点的灰度值,如果灰度差值小于一定的阈值,就认为该点与中心点的灰度相同。统计模板内部与中心点灰度相同的点的个数,与一个阈值进行比较,判断该点是否属于某个区域的边缘点,从而实现对目标的检测。与传统的全局阈值相比,该算法抗干扰能力较强,实时性较好,能够快速、可靠地检测出标。