使用RANSAC提纯ORB和BRISK特征点,达到鲁棒匹配的效果(OpenCV 2.4.13下,源码)
2016-12-25 16:44
876 查看
#include
#include
#include
#include
#include
using namespace std;
using namespace cv;
int main() {
//Read images
Mat graf_1, graf_3;
graf_1 = imread("../data/vggAffineDataset/graf/img1.ppm");
graf_3 = imread("../data/vggAffineDataset/graf/img3.ppm");
if (graf_1.empty() || graf_3.empty()){
cerr<<"No images"< kp1, kp3;
orb.detect(graf_1,kp1);
orb.detect(graf_3,kp3);
//brisk.detect(graf_1,kp1);
//brisk.detect(graf_3,kp3);
cout<<"The number of keypoints of graf_1 is "< matches;
matcher.match(desc_1,desc_3,matches);
double max_dist = 0;
double min_dist = 10000;
for (int i = 0; i < matches.size(); ++i) {
if (matches[i].distance < min_dist)
min_dist = matches[i].distance;
if (matches[i].distance > max_dist)
max_dist = matches[i].distance;
}
vector goodMatches;
for (int j = 0; j < matches.size(); ++j) {
if (matches[j].distance < 4*min_dist)
goodMatches.push_back(matches[j]);
}
cout<<"Matches is "<(k,0) = pt1.x;
p1.at(k,1) = pt1.y;
pt3 = kp3[goodMatches[k].trainIdx].pt;
p3.at(k,0) = pt3.x;
p3.at(k,1) = pt3.y;
}
vector m_RANSACStatus;
findHomography(p1,p3,CV_RANSAC,3,m_RANSACStatus);
int inlinerCount = 0;
for (int l = 0; l < ptCount; ++l) {
if (m_RANSACStatus[l] != 0)
inlinerCount++;
}
cout<<"inlinerCount is "< inlierMatches;
for (int i=0; i
实验效果图:
(kp_graf_1)
(kp_graf_3)
(不经过任何处理的图像匹配)
(使用距离小于最小距离10倍时的匹配效果)
(使用RANSAC算法提纯后的图像匹配效果)
#include
#include
#include
#include
using namespace std;
using namespace cv;
int main() {
//Read images
Mat graf_1, graf_3;
graf_1 = imread("../data/vggAffineDataset/graf/img1.ppm");
graf_3 = imread("../data/vggAffineDataset/graf/img3.ppm");
if (graf_1.empty() || graf_3.empty()){
cerr<<"No images"< kp1, kp3;
orb.detect(graf_1,kp1);
orb.detect(graf_3,kp3);
//brisk.detect(graf_1,kp1);
//brisk.detect(graf_3,kp3);
cout<<"The number of keypoints of graf_1 is "< matches;
matcher.match(desc_1,desc_3,matches);
double max_dist = 0;
double min_dist = 10000;
for (int i = 0; i < matches.size(); ++i) {
if (matches[i].distance < min_dist)
min_dist = matches[i].distance;
if (matches[i].distance > max_dist)
max_dist = matches[i].distance;
}
vector goodMatches;
for (int j = 0; j < matches.size(); ++j) {
if (matches[j].distance < 4*min_dist)
goodMatches.push_back(matches[j]);
}
cout<<"Matches is "<(k,0) = pt1.x;
p1.at(k,1) = pt1.y;
pt3 = kp3[goodMatches[k].trainIdx].pt;
p3.at(k,0) = pt3.x;
p3.at(k,1) = pt3.y;
}
vector m_RANSACStatus;
findHomography(p1,p3,CV_RANSAC,3,m_RANSACStatus);
int inlinerCount = 0;
for (int l = 0; l < ptCount; ++l) {
if (m_RANSACStatus[l] != 0)
inlinerCount++;
}
cout<<"inlinerCount is "< inlierMatches;
for (int i=0; i
实验效果图:
(kp_graf_1)
(kp_graf_3)
(不经过任何处理的图像匹配)
(使用距离小于最小距离10倍时的匹配效果)
(使用RANSAC算法提纯后的图像匹配效果)
相关文章推荐
- 使用RANSAC提纯SIFT和SURF特征点,达到鲁棒匹配的效果(OpenCV 2.4.13下,源码)
- 使用RANSAC提纯KAZE和AKAZE特征点,达到鲁棒匹配的效果(OpenCV 3.2.0下,源码)
- SIFT特征点匹配中KD-tree与Ransac算法的使用
- 使用Opencv2.4.9进行SIFT特征点提取和匹配
- Android上使用ASIFT实现对视角变化更鲁棒的特征匹配
- 【特征匹配】RANSAC算法原理与源码解析
- SIFT特征点匹配中KD-tree与Ransac算法的使用
- Opencv——新版本2.4.2简介&FREAK和ORB特征描述子效果对比features2d
- WindowsMobile上使用ASIFT实现对视角变化更鲁棒的特征匹配
- WindowsMobile上使用ASIFT实现对视角变化更鲁棒的特征匹配
- OpenCV 使用 FLANN 库实现特征匹配
- 【OpenCV】 基于 ransac 算法的 sift 特征匹配程序(开发环境为OpenCV2.3.1+VS2010)
- Android上使用ASIFT实现对视角变化更鲁棒的特征匹配
- [转] 最新版的OpenCV中新增加的ORB特征的使用 - merlin_q的专栏 - 博客频道 - CSDN.NET
- 使用Opencv进行图像特征点检查与匹配
- 9.4 【OpenCV】 基于 ransac 算法的 sift 特征匹配程序(开发环境为OpenCV2.3.1+VS2010)
- 【特征匹配】ORB原理与源码解析
- opencv-基于ORB特征点匹配
- OpenCV】 基于 ransac 算法的 sift 特征匹配程序(开发环境为OpenCV2.3.1+VS2010)
- 【特征匹配】RANSAC算法原理与源码解析