Opencv学习之ORB算法

Opencv学习之ORB算法
ORB是ORiented Brief的简称,是brief算法的改进版,算法效率比SIFT高两个数量级,在计算速度上,ORB是SIFT的100倍,是SURF的10倍。
Brief描述子:Brief是Binary Robust Independent Elementary Features的缩写,主要思路就是在特征点附近随机选取若干点对,将这些点对的灰度值的大小,组合成一个二进制串,并将这个二进制串作为该特征点的特征描述子。
BRIEF的有点在于速度,缺点也很明显
*不具备旋转不变性
*对噪声敏感
*不具备尺度不变性
而ORB算法就是试图解决上述缺点中的1和2,对于3,在OPENCV中用了图像金字塔来进行改善。
与SURF类似,用了OrbFeatureDetector来提取关键点,用OrbDescriptorExtractor来提取特征向量。

 #include
#include

int main()
{
//载入原始图像和模版图像
    cv::Mat srcImage=cv::imread("/Users/new/Desktop/3.jpg");
    cv::Mat templaImage=cv::imread("/Users/new/Desktop/4.jpg");
//灰度化
cv::Mat dstImage,grayImage1,grayImage2;
    cv::cvtColor(srcImage, grayImage1, CV_BGR2GRAY);

    cv::cvtColor(templaImage, grayImage2, CV_BGR2GRAY);



//***************检测ORB特征点并在图像中提取物体的描述符***************8
//定义参数
cv::OrbFeatureDetector featureDetector;
std::vectorkeyPoints,keyPoints_templ;
cv::Mat descriptors,descriptors_templ;

//调用detect函数检测出特征关键点,保存在vector容器中
featureDetector.detect(grayImage1, keyPoints);
featureDetector.detect(grayImage2, keyPoints_templ);
//计算描述符(特征向量)
cv::OrbDescriptorExtractor featureExtractor;
featureExtractor.compute(grayImage1, keyPoints, descriptors);
featureExtractor.compute(grayImage2, keyPoints_templ, descriptors_templ);
//匹配和测试描述符,获取两个最近邻的描述符
cv::Mat matchIndex(descriptors.rows,2,CV_32SC1),matchDistance(descriptors.rows,2,CV_32FC1);
//基于FLANN的描述符对象匹配
cv::flann::Index flannIndex(descriptors_templ,cv::flann::LshIndexParams(12,20,2),cvflann::FLANN_DIST_HAMMING);
flannIndex.knnSearch(descriptors, matchIndex, matchDistance, 2,cv::flann::SearchParams());//调用k近邻算法
//根据劳氏算法,选出优秀的匹配
std::vectorgoodMatches;
for(int i=0;iif(matchDistance.at<float>(i,0)<0.6 * matchDistance.at<float>(i,1))
    {
        cv::DMatch dmatches(i,matchIndex.at<int>(i,0),matchDistance.at<float>(i,0));
        goodMatches.push_back(dmatches);

    }
}
//绘制并显示匹配窗口
cv::Mat resultImage;
drawMatches(srcImage,keyPoints,templaImage,keyPoints_templ,goodMatches,dstImage);
imshow("image[Orb]",dstImage);
    cv::waitKey(0);
    return 0;

}

Opencv学习之ORB算法_第1张图片

你可能感兴趣的:(编程学习)