目录
一. 概念
Fast角点检测内部实现:
优缺点:
二. 代码
三. 运行结果
四. 拓展对比_SUSAN算子
简介:
内部实现:
计算步骤:
优缺点:
一. 概念 Fast角点检测内部实现:cv:FastFeatureDectctor
Harris算法的一个简化: 利用少数像素比较数量,来确定是否接受一个特征点。
通过检测候选像素,周围一圈的像素 16个点来决定是否可以接受一个特征点,如果与中心点差异较大(阈值控制)的像素可以组成一个连续的圆弧,并且弧长大于圆周长的3/4,那么我们认为找到了一个特征点。
效率高的原因: 首先价检测周围 上下左右 4个点,如果至少有3个点的灰度值大于或小于中心像素,再去计算圆周上的其他点,如果不成立,直接舍弃。实践中,大部分像素点可以直接被舍弃,因此速度比较高。
优缺点:优点: 运算速度快,效率高。
缺点: 当图片中的噪点较多时,它的健壮性并不好
FAST不具备尺度不变特,
特征点没有方向信息,失去了旋转不变性
类似算法 susan算子
二. 代码#include "stdafx.h"
#include
#include
#include //引用cv::KeyPoint 特征检测器通用接口
int main()
{
cv::Mat image = cv::imread("../../aTestImage/Buildingsm.jpg", 0);
std::vector keypoints;
cv::FastFeatureDetector fast(40);
fast.detect(image, keypoints);
//检测中心点一圈圆周上16个像素 //与中心点差异较大的像素组成的圆弧 若能构成圆周的3/4,则认为找到了特征点
cv::drawKeypoints(image, keypoints, image,cv::Scalar(255, 255,255), cv::DrawMatchesFlags::DRAW_OVER_OUTIMG);
cv::namedWindow("FAST Features");
cv::imshow("FAST Features", image);
cv::waitKey(0);
return 0;
}
三. 运行结果
简称:Smallest Univalue Segment Assimilating Nucleus 最小核心值相似区域算子 ['suzn]
应用: 检测直线和角点
内部实现:opencv中: cvGoodFeaturesToTrack
用一个圆形模板在图像上移动,若模板内的像素灰度与模板中心(被称为“核”——Nucleus)的像素灰度值之差小于一定的阈值,则认为该点与核Nucleus具有相同的灰度,满足该条件的像素组成的区域就称为USAN。根据USAN区域的大小来检测边缘、角点等特征的位置和方向信息。
分析图像可知,边缘处的点的USAN值,小于或等于最大值一半。在边缘或角点处的USAN值最小
1. 根据相似度 (像素差值的大小),二值化圆形模板中(37个像素=6*6)的每个像素值
2. 统计USAN区域的值 我们可以称为USAN值,反映USAN区域的大小。
3. 使用非极大值抑制来寻找角点。计算边缘响应,通过设定一个阈值,确定边缘或角点
提取边 = 3/4 * 最大USAN值
角点 = 1/2 * 最大USAN值
优点:
运算量也比较小 (0 1 运算 )
抗噪声能力很强,基于对周边象素的灰度比较,完全不涉及梯度的运算
既能检测边缘,又能检测角点
缺点:
准确性受选择阈值的影响,选择合适的阈值需要功夫。
角点似乎比不过harris,边缘似乎比不过Canny。