java opencv orb_OpenCV提取ORB特征并匹配

一、什么是特征?

图像的特征(Feature),是图像上最具代表性的一些点。所谓最具代表性,就是说这些点包含了图像表述的大部分信息。即使旋转、缩放,甚至调整图像的亮度,这些点仍然稳定地存在,不会丢失。找出这些点,就相当于确定了这张图像,它们可以用来做匹配、识别等等有意义的工作。

通常来说,角点容易成为特征点。角点是指图案中处于角落的点,这些点附近像素值变化剧烈,因而容易被检测出。

特征点由关键点(Key-point)和描述子(Descriptor)两部分组成。比如,提取ORB特征其实包括了提取关键点和计算描述子两件事情。

历史上,SIFT特征和SURF特征都是非常常用的特征,SIFT特征以精确著称,但计算量极大,无法在CPU上实时计算。SURF特征降低了SIFT的精确度,但提高了性能。而ORB特征是目前计算最快的特征,非常适合于实时SLAM,因此受到广大研究者的喜爱。

二、ORB特征

ORB全名为Oriented FAST and Rotated BRIEF,它采用改进的FAST关键点检测方法,使其具有方向性,并采用具有旋转不变性的BRIEF特征描述子。FAST和BRIEF都是非常快速的特征计算方法,因此ORB具有非同一般的性能优势。

1.FAST关键点

要想判断一个像素点p是不是FAST关键点,只需要判断其周围的16个像素点中是否有连续N个点的灰度值与p的差超出阈值。16个点的位置如下图所示。N一般取12,称为FAST-12,常用的还有FAST-9,FAST-11。阈值一般为p点灰度值的20%。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,我可以为您提供一些思路和代码实现。 首先,您需要使用 OpenCV 库中的 ORB 特征点检测和匹配算法,对两张待比对的图片进行特征提取匹配。 以下是一个简单的示例代码,展示了如何使用 ORB 算法进行特征提取匹配。我们假设您已经安装了 OpenCV 库,并且已经将图像加载到了 Mat 对象中。 ```java // 创建 ORB 特征点检测器 ORB orb = ORB.create(); // 检测特征点并计算特征描述子 MatOfKeyPoint keypoints1 = new MatOfKeyPoint(); MatOfKeyPoint keypoints2 = new MatOfKeyPoint(); Mat descriptors1 = new Mat(); Mat descriptors2 = new Mat(); orb.detectAndCompute(img1, new Mat(), keypoints1, descriptors1); orb.detectAndCompute(img2, new Mat(), keypoints2, descriptors2); // 匹配特征点 DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING); MatOfDMatch matches = new MatOfDMatch(); matcher.match(descriptors1, descriptors2, matches); // 计算匹配度 double max_dist = 0; double min_dist = 100; List<DMatch> good_matches = new ArrayList<>(); for (DMatch match : matches.toArray()) { double dist = match.distance; if (dist < min_dist) min_dist = dist; if (dist > max_dist) max_dist = dist; } for (DMatch match : matches.toArray()) { if (match.distance <= 2 * min_dist) { good_matches.add(match); } } double match_percent = (double) good_matches.size() / (double) keypoints1.size().height; ``` 在上面的代码中,我们首先创建了一个 ORB 特征点检测器,并使用 detectAndCompute 方法计算了两张图片的特征点和特征描述子。然后,我们使用 DescriptorMatcher 进行特征匹配,并计算了匹配度。 最后,我们将匹配度 match_percent 返回给您,您可以根据需要进行格式化和输出。 希望这个示例对您有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值