python+OpenCV笔记(三十三):特征检测——基于FSAT特征和BRIEF描述符的ORB

目录

一、FAST

二、BRIEF

三、ORB

代码编写


ORB发布于2011年,作为SIFT和SURF的一个快速替代品。ORB融合了FAST关键点检测器BRIEF关键点描述符,所以我们先要了解 FAST 和 BRIEF。

一、FAST

        加速分割测试特征(FAST)算法是通过分析16个像素的圆形领域来实现的,FAST算法把邻域内每个像素标记为比特定阈值更亮或更暗,该阈值是相对于圆心定义的。如果邻域包含若干标记为更亮或更暗的一系列连续像素,那么这个邻域就被视为角点。

        FAST还使用了一种高速测试,有时可以通过只检查2个或者4个像素(而不是16个像素)来确定邻域不是角点。要了解这个测试如何工作,请看下图:

python+OpenCV笔记(三十三):特征检测——基于FSAT特征和BRIEF描述符的ORB

在两个不同的放大倍数下,我们可以看到一个16像素的邻域。位于1、5、9和13处的像素对应于圆形邻域边缘的4个方位基点。如果邻域是一个角点,那么预计在这4个像素中,刚好有3个像素或者1个像素比阈值亮。(另一种说法是刚好有1个或者3个像素比阈值暗。)如果其中刚好有2个比阈值亮,那么该领域是一条边,而不是一个角点,如果其中刚好有4个或者0个比阈值亮,那么该领域相对一致,既不是角点也不是边。

二、BRIEF

        二值鲁棒基本独立特征(BRIEF)并非特征检测算法,而是一个描述符。

        我们先来了解什么是描述符:

        在前面用SIFT和SURF分析图像时,整个过程的核心是调用detectAndCompute函数。此函数执行两个不同的步骤—检测和计算,它们返回2个不同的结果(耦合到一个元组中)。

        检测结果是一组关键点,计算结果是这些关键点的一组描述符。这意味着OpenCV的cv2.SIFT和cv2.SURF类都实现了检测和描述算法。请记住,原始的SIFT和SURF不是特征检测算法。OpenCV的cv2.SIFT实现了DoG特征检测和SIFT描述,而OpenCV的cv2.SURF实现了快速Hessian 特征检测和SURF 描述。

        关键点描述符是图像的一种表示,充当特征匹配的通道,因为你可以比较两幅图像的关键点描述符并发现它们的共性。

        BRIEF是目前最快的描述符之一。BRIEF背后的理论相当复杂,但是可以这样说,BRIEF采用一系列优化,使其成为特征匹配的一个非常好的选择。

三、ORB

        ORB选择FAST和BRIEF算法作为ORB的基础的目的是:优化和加速操作,包括非常重要的以旋转感知的方式利用BRIEF的步骤,这样匹配就得以改善,即使在训练图像与查询图像有非常不同的旋转状态的情况下也是如此。

代码编写

import cv2
import numpy as np

img = cv2.imread('E:/test2.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

orb = cv2.ORB_create()
kp, des = orb.detectAndCompute(gray, None)  # 找到关键点

img = cv2.drawKeypoints(gray, kp, img)  # 绘制关键点

cv2.imshow('ORB', img)
cv2.waitKey(0)

原图:

python+OpenCV笔记(三十三):特征检测——基于FSAT特征和BRIEF描述符的ORB

 ORB检测结果:

python+OpenCV笔记(三十三):特征检测——基于FSAT特征和BRIEF描述符的ORB


【参考】:OpenCV 4计算机视觉 Python语言实现(原书第三版) 作者:Joseph Howse

上一篇:Oracle使用小记


下一篇:javascript去除空格回车符