【笔记—特征点检测和匹配】

特征点检测和匹配

特征点检测和匹配

在这里插入图片描述在OpenCV中,已经封装好了FAST算法的API,也就是FastFeatureDetector这一个类。当我们使用这个算法时,需要先通过FastFeatureDetector::create()这个方法来创建一个FAST特征检测器,其参数含义如下:

第一个参数thresh:就是算法过程中的阈值t,默认值为10;

第二个参数nonmaxSuppresiion:布尔值,默认值为true,表示是否使用非极大值抑制,如果为true则当某个中心像素点的灰度值不是其邻域中的最大值时,则将其淘汰掉,只保留在邻域中是最大值的中心像素点;如果为false则表示不使用非极大值抑制;

第三个参数DetectorType:检测邻域类型,有TYPE_5_8 、TYPE_7_12 、TYPE_9_16这几种可选类型,默认值为TYPE_9_16。

当我们创建好FAST特征检测器后,就可以通过detect()方法来对图像进行FAST特征点检测,得到一幅图像的KeyPoint类型的FAST特征点。
演示代码:

 auto fast = FastFeatureDetector::create(20,true,FastFeatureDetector::DetectorType::TYPE_9_16);
    Mat image = imread("D:\\opencv_c++\\opencv_tutorial\\data\\images\\tem.jpg");
    vector<KeyPoint> keyPoints;
    fast->detect(image, keyPoints, Mat());//最新写法
    Mat result;
    drawKeypoints(image, keyPoints, result, Scalar::all(-1), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS);
    imshow("image", image);
    imshow("result", result);
RANSAC算法在特征匹配中的应用

参考:RANSAC算法在特征匹配中的应用

RANSAC原理

OpenCV中滤除误匹配对采用RANSAC算法寻找一个最佳单应性矩阵H,矩阵大小为3×3。RANSAC目的是找到最优的参数矩阵使得满足该矩阵的数据点个数最多,通常令h33=1来归一化矩阵。由于单应性矩阵有8个未知参数,至少需要8个线性方程求解,对应到点位置信息上,一组点对可以列出两个方程,则至少包含4组匹配点对。

RANSAC算法步骤:

      1. 随机从数据集中随机抽出4个样本数据 (此4个样本之间不能共线),计算出变换矩阵H,记为模型M;

      2. 计算数据集中所有数据与模型M的投影误差,若误差小于阈值,加入内点集 I ;

      3. 如果当前内点集 I 元素个数大于最优内点集 I_best , 则更新 I_best = I,同时更新迭代次数k ;

      4. 如果迭代次数大于k,则退出 ; 否则迭代次数加1,并重复上述步骤;

注:迭代次数k在不大于最大迭代次数的情况下,是在不断更新而不是固定的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aixiao_xiaoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值