opencv特征点匹配_特征点匹配

本文介绍了OpenCV中的ORB特征点检测和匹配,并通过RANSAC算法进行优化,详细阐述了算法原理、步骤、代码实现及运行效果,展示了特征点匹配在图像匹配中的应用。
摘要由CSDN通过智能技术生成

如何从图像中提取特征点

 此篇介绍图像的特征点匹配算法,包括ORB特征点算法介绍、特征点匹配以及RANSAC优化

作者 | zhangJA来源 | 程序算法实验室

特征点匹配也可了解为角点匹配,角点匹配在上篇《Shi-Tomasi角点检测》和《Harris角点检测》已论述过。

图像匹配的应用场合有目标跟踪检测识别图像拼接等,这些应用的最核心技术即是特征点匹配,所谓特征点匹配是指寻找两张图像之间的特征像素点的对应关系,从而确定两张图像的位置关系。

特征点匹配一般分为四大步骤:

  1. 提取检测子:在两张待匹配的图像中寻找那些最容易识别的像素点(角点),比如纹理丰富的物体边缘点等。

  2. 取描述子:对于检测出的角点,用一些数学上的特征对其进行描述,如梯度直方图,局部随机二值特征等。检测子和描述子的常用提取方法有:sift,harris,surf,fast,agast,brisk,freak,brisk,bri、tef/orb等。

  3. 匹配:通过各个角点的描述子来判断它们在两张图像中的对应关系,常用方法如 flann等。

  4. 消噪:去除错误匹配的外点,保留正确的匹配点。常用方法有KDTREE,BBF,Ransac,GTM等。

以下对此详细说明:


01

特征点匹配

ORB特征点¹

 原理概述------------------------------------«1»

特征点是用于描述图像中含有特殊信息的一类点,包含像素点坐标、用于唯一的描述此像素点属性的一些特征。

特征点检测算法有SIFT、SURFT、ORB等,SIFT SURFT提取精度高,但消耗时间长;ORB提取特征点则耗时短。以下对仅对ORB展开赘述。

(base) zja@zja:~/Works/zja_Project/2-VisonProject/1-Cmake_Build/$ tree -L 2.├── CMakeLists.txt├── CMakeLists.txt.user├── main1.cpp├── main2.cpp├── main3.cpp├── ORB特征点.md├── ORB特征点匹配.md├── RANSAC优化.md├── _v_recycle_bin│   └── 20210117└── vx_images    ├── 3824741984446.png    └── 3955907518314.png(base)zja@zjaVirtualBox:~$ bash c++.shCV Runing......

算法步骤--------------------------------------«2»

1.ORB特征点求取

9929964e620f4383c70cb8bc93fbbb17.png

Step1:选择某个像素点作为中心点P,其像素值为I;Step2:设置判定FAST角点的像素阈值,例如:Tp=20%*Ip;Step3:比较中心点的像素值与半径为3的圆周上所有像素的像素值进行比较,如果存在连续N个像素的像素值大于(Ip+Tp)或者小于(Ip-Tp);Step4:遍历图像中的每个像素点,重复以上步骤,计算图像中的FAST角点;

2.ORB特征点方向计算步骤

Step1:计算图像矩;

$m_{pq}=\sum_{x,y\in B}x^py^qI(x,y),p,q=0,1$

e46d77238ed57725cd93c96e4a6fe2c9.png

Step2:计算矩形区域的质心;

$C=(m_{10}/m_{00} , m_{01}/m_{00})$

9db40794cc93418db173394e2156e8e5.png

Step3:连接FAST角点与质心得到方向向量;

$\theta=arctan(m_{01}/m_{10})$

d5f3b1860acd3542e5c73b348f58ca96.png

☢注意:ORB特征点描述子

  • 128维BRIEF描述子

  • 高斯金字塔(尺度特征不变)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一个功能强大的计算机视觉库,提供了很多用于图像处理和计算机视觉任务的函数和工具。其中一个重要的功能是特征点检测和匹配特征点是图像中的局部区域,具有独特的外观和几何结构。它们可以用于许多计算机视觉任务,如图像配准、目标跟踪和3D重建等。OpenCV提供了几种特征点检测算法,包括SIFT、SURF和ORB等。 特征点匹配是将两个图像中的特征点进行匹配的过程,以找出它们之间的对应关系。OpenCV提供了几种特征点匹配算法,包括暴力匹配和FLANN匹配等。 下面是一个使用OpenCV进行特征点检测和匹配的示例代码: ```python import cv2 # 读取两张图片 img1 = cv2.imread('img1.jpg') img2 = cv2.imread('img2.jpg') # 创建SIFT特征检测器 sift = cv2.xfeatures2d.SIFT_create() # 在两张图片中检测特征点 kp1, des1 = sift.detectAndCompute(img1, None) kp2, des2 = sift.detectAndCompute(img2, None) # 创建FLANN匹配器 FLANN_INDEX_KDTREE = 1 index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5) search_params = dict(checks=50) flann = cv2.FlannBasedMatcher(index_params, search_params) # 使用FLANN匹配器进行特征点匹配 matches = flann.knnMatch(des1, des2, k=2) # 筛选出优秀的匹配点 good_matches = [] for m, n in matches: if m.distance < 0.7 * n.distance: good_matches.append(m) # 在两张图片中绘制匹配点 img_matches = cv2.drawMatches(img1, kp1, img2, kp2, good_matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS) # 显示结果 cv2.imshow('Matches', img_matches) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上面的示例代码中,我们使用SIFT特征检测器检测两张图片中的特征点,并使用FLANN匹配器进行特征点匹配。最后,我们筛选出优秀的匹配点,并在两张图片中绘制它们。运行代码后,你将看到匹配点的图像显示在屏幕上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值