Oriented FAST and Rotated BRIEF ,定向 FAST 和旋转 BRIEF (ORB)
ORB特征检测算法
- ORB 代表定向 FAST 和旋转 BRIEF 。这个缩写的第一层意思表示关键点检测,第二层意思表示 ORB 算法提供的描述子。
- ORB 首先创建一个图像金字塔。它由一系列图层组成,每个图层都是用固定的缩放因子对前一个图层下采样得到的(典型情况是用 8 个尺度,缩放因子为 1.2 ;这是创建cv::ORB 检测器的默认参数)。
- 在具有关键点评分的位置接受 N 个强度最大的关键点,关键点评分用的是 Harris 角点强度衡量方法(这个方法的作者发现,衡量强度时用 Harris评分比用常规的 FAST 角点强度更准确)。
- ORB 检测器的原理基于一个现象,即每个被检测的兴趣点总是关联了一个方向。这个信息可用于校准不同图像中检测到的关键点描述子。
- ORB 算法建议使用关键点周围的圆形邻域的重心的方向。因为根据定义, FAST 关键点肯定有一个偏离中心点的重心,中心点与重心连线的角度总是非常明确的。
示例程序
#include <iostream>
#include <vector>
#include <opencv2/core/core.hpp>
#include </home/jlm/3rdparty/opencv/opencv_contrib/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
int main(int argc, char** argv) {
if(argc != 2)
{
cerr << "don't get the right numbers of image" << endl;
return -1;
}
cv::Mat image = cv::imread(argv[1],cv::IMREAD_GRAYSCALE);
if(image.empty())
{
cout << "don't get the data of the argv[1]" << endl;
return -1;
}
cv::imshow("Original", image);
cv::waitKey(0);
cv::Ptr<cv::ORB> ptrORB = cv::ORB::create(10,
1.2,
8);
vector<cv::KeyPoint> Keypoints;
ptrORB-> detect(image, Keypoints);
cv::Mat outImage;
cv::drawKeypoints(image,
Keypoints,
outImage,
cv::Scalar(255,255,255),
cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS
);
cv::imshow("OutImage",outImage);
cv::waitKey(0);
return 0;
}