SUSAN算法是1997年牛津大学的Smith等人提出的一种处理灰度图像的方法,它主要是用来计算图像中的角点特征。SUSAN算法选用圆形模板(如图1所示)。将位于圆形窗口模板中心等待检测的像素点称为核心点。核心点的邻域被划分为两个区域:亮度值相似于核心点亮度的区域即核值相似区(Univalue SegmentAs-similatingNueleus,USAN)和亮度值不相似于核心点亮度的区域。

图1 圆形模板

USAN的典型区域如图2所示。模板在图像上移动时,当圆形模板完全在背景或者目标区域时,其USAN区域最大,如图2(a);当核心在边缘时,USAN区域减少一半,如图2(c);当核心在角点时, USAN区域最小,如图2(d)。基于这一原理, Smith提出了最小核值相似区角点检测算法。

图2 典型区域

SUSAN角点检测算法的具体步骤如下:
(1)在图像上放置一个37个像素的圆形模板,模板在图像上滑动,依次比较模板内各个像素点的灰度与模板核的灰度,判断是否属于USAN区域。判别函数如下:

(2)统计圆形模板中和核心点有相似亮度值的像素个数n(r0)。

其中,D(r0)是以r0为中心的圆形模板区域

(3)使用如下角点响应函数。若某个像素点的USAN值小于某一特定阈值,则该点被认为是初始角点,其中,g可以设定为USAN的最大面积的一半。

(4)对初始角点进行非极值抑制来求得最后的角点。

算法实现如下:

IplImage* SUSAN(IplImage* src)
{uchar *data0, *data1, *data2;int same, max, min, thresh;IplImage* img = cvCreateImage(cvGetSize(src), 8, 1); //中间图像IplImage* dst = cvCreateImage(cvGetSize(src), 8, 1); //结果图像int height = src->height;int width = src->width;int step = src->widthStep / sizeof(uchar);int channels = src->nChannels;data0 = (uchar*)src->imageData;data1 = (uchar*)img->imageData;data2 = (uchar*)dst->imageData;int  g = 18; //核值相似区域中点个数的阈值//模版 x 和 y的坐标的偏移量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};//求阈值max = min = data0[0];for (int i = 0; i < height; i++){for (int j = 0; j<width; j++){if (data0[i*step + j]>max) max = data0[i*step + j];if (data0[i*step + j]<min) min = data0[i*step + j];}}thresh = (max - min) / 10;//可选取其他方法for (int i = 3; i < height - 3; i++){for (int j = 3; j < width - 3; j++){same = 0;for (int k = 0; k < 37; k++){if (abs(data0[(i + OffSetY[k])*step + (j + OffSetX[k])] - data0[i*step + j]) < thresh)same++;}if (same < g)//g值可改 data1[i*step + j] = g-same;elsedata1[i*step + j] = 0;}}//非极大值抑制int i_s[8] = { -1, -1, -1, 0, 0, 1, 1, 1 };int j_s[8] = { -1, 0, 1, -1, 1, -1, 0, 1 };int flag;for (int i = 4; i < height - 4; i++){for (int j = 4; j < width -4; j++){flag = 0;for (int k = 0; k < 8; k++){if (data1[i*step + j] <= data1[ (i + i_s[k]) * step + (j + j_s[k]) ] ){flag = 1;break;}}if (flag == 0){data2[i*step + j] = 255;}else{data2[i*step + j] = 0;}}}return dst;
}

susan角点检测算法相关推荐

  1. SUSAN角点检测算法,及其Matlab实现

    1.SUSAN角点检测算法步骤 (1)在图像上放置一个37个像素的圆形模板,模板在图像上滑动,依次比较模板内各个像素点的灰度与模板核的灰度,判断是否属于USAN区域.判别函数如下: 其中,r⃗0{{\ ...

  2. SUSAN角点检测算法实现(详细版)

    前言 无 一.SUSAN算子是什么? SUSAN ( Small univalue segment assimilating nucleus) 算子是一种基于灰度的特征点获取方法, 适用于图像中边缘和 ...

  3. 基于光强的角点检测(SUSAN角点检测、FAST角点检测、FAST-ER角点检测)

    Corner Feature Detector(Intensity-Based) 基于光强比较的角点检测,直接比较光强(像素灰度值),而不计算梯度.所以实时性更好,所需的存储空间更小. SUSAN 角 ...

  4. SUSAN角点检测与匹配算法代码(OpenCV)

    SUSAN角点检测与匹配算法 测试环境Ubuntu+OpenCV2.4.3 SUSAN角点检测代码 SUSAN(Small univalue segment assimilating nucleus) ...

  5. Susan角点检测python实现 (边缘检测、角点检测、重心计算、非极大值抑制)

    Susan角点检测(边缘检测.角点检测.重心计算.非极大值抑制) 写在前面 黄宁然--看过你看过的算法,觉得好难. 参考文献镇楼 [1]https://blog.csdn.net/tostq/arti ...

  6. 【机器视觉学习笔记】Harris 角点检测算法(C++)

    目录 原理 算法步骤 优缺点 源码 效果 原图 输出 平台:Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文摘自2.Harris角点检测算法 -- ...

  7. Harris角点检测算法优化

    Harris角点检测算法优化 一.综述 用 Harris 算法进行检测,有三点不足:(1 )该算法不具有尺度不变性:(2 )该算法提取的角点是像素级的:(3 )该算法检测时间不是很令人满意. 基于以上 ...

  8. Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection)

    Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection) 理论 Feature Detection using FAST Select ...

  9. Harris角点检测算法手动实现

    算法流程: 将图像转换为灰度图像 利用Sobel滤波器求出 海森矩阵 (Hessian matrix) : 将高斯滤波器分别作用于Ix².Iy².IxIy: 计算每个像素的 R= det(H) - k ...

最新文章

  1. mysql emma 使用教材_emma的使用
  2. [ATF]-ATF的代码学习篇-一篇就够了
  3. hadoop的web ui的8088端口打不开一例
  4. 微型计算机用什么评价判断,环评中常用评价等级的判定
  5. 容器编排技术 -- Kubernetes kubectl rollout status 命令详解
  6. Linux里sra文件是什么,prefetch命令下载SRA文件
  7. 输出排列 递归、回溯法
  8. AsyncTask的理解和使用
  9. frok的一个Demo测试素数
  10. (1)封装JSON数据的三种方式
  11. 基于51单片机超声波测距仪设计倒车雷达防撞报警器
  12. 傻丫头字幕精灵(Sayatoo字幕精灵)2.3.9下载附教程
  13. 红旗河工程,南水北调西线工程,藏水入疆工程三合一
  14. BDF2各模块依赖关系
  15. IT蚁族:蜗居和逃离
  16. WORD两个表格合并为一个表格(删除两个表格之间多余的空格)
  17. Labview 版本控制
  18. Manifest merger failed : Attribute meta-data#android.support.VERSION@value..
  19. 68.168.16.153 forum index.php,Discuz1314首页版块N格 带数据缓存功能(study_forum_nge)_Discuz应用中心...
  20. 这边提供几个公共方法:MD5签名方法、获取时间戳、生成随机串、string转base64、base64转string

热门文章

  1. 简单使用 uwsgi + nginx 在本地 Ubuntu 成功部署 django 项目
  2. OPPO PUSH 配额
  3. 计算机科学之父(人工智能之父)-艾伦·麦席森·图灵
  4. Unity如何批量修改材质的属性
  5. 《纯技术分析阿里云OS和Android之间的关系》补充
  6. photoshop博客_在Photoshop中设计优雅的博客布局
  7. spark 2.3源码分析之SortShuffleWriter
  8. Platform Dependency
  9. Hello MySQL(三)——SQL语言
  10. 电池工况测试 matlab,一种电动汽车用动力蓄电池脉冲工况测试方法与流程