计算两幅图的单应矩阵,实现图像拼接

更新时间:2023-07-14 07:37:09 阅读: 评论:0

计算两幅图的单应矩阵,实现图像拼接
单应矩阵是⼀个3x3的矩阵,它有着特殊的属性可⽤于特定条件下的双视⾓图像。
我们知道,3D点与它在相机图像中像素点之间存在的关系可以⽤3x4矩阵表⽰。设想⼀下,同⼀场景中的两个视图的区别仅仅是⼀个纯粹的的旋转,那么可以发现这个矩阵的第4列都是由0组成的,没有平移向量。因此投影关系变成了3x3矩阵,即单应矩阵。
逝语
也意味着,在特殊情况下,同⼀个点在不同的视图中存在线性关系。
测试1:图像的拼接
1 #include<iostream>
2 #include<opencv2/core/core.hpp>
3 #include<opencv2/highgui/highgui.hpp>
4 #include<opencv2/features2d/features2d.hpp>
5 #include<opencv2/calib3d/calib3d.hpp>
6 #include<opencv2/opencv.hpp>
泡菜盐水比例
7 #include<opencv2/stitching/stitcher.hpp>
廷巴特尔
8using namespace cv;
9int main(int argc, char* argv[]){
10
11if (argc!=3){
12    std::cout << "usage: feature_extraction imge1 image2" << std::endl;
13return1;
14 }
15//read image
16 Mat image1 =imread(argv[1],CV_LOAD_IMAGE_COLOR);
17 Mat image2 = imread(argv[2],CV_LOAD_IMAGE_COLOR);
18//keypoint descriptor
19 vector<KeyPoint> keypoint1,keypoint2;
20 Mat descriptor1,descriptor2;
21 ORB orb;
小学必读书目
22 orb(image1,cv::Mat(),keypoint1,descriptor1);
23 orb(image2,cv::Mat(),keypoint2,descriptor2);
24 Mat outimage;
25 drawKeypoints(image1,keypoint1,outimage);
26//match
27 vector<DMatch> matches;
28 BFMatcher matcher(NORM_HAMMING);
29 matcher.match(descriptor1,descriptor2,matches);
姬松茸的做法
30 vector<DMatch> good_matches;
31double mindist=1000,maxdist=0;
32for(int i=0;i<matches.size();i++){
33if(matches[i].distance <= max(2*mindist,30.0))
34    good_matches.push_back(matches[i]);
35 }
36 Mat good_matches_out;
37 drawMatches(image1,keypoint1,image2,keypoint2,good_matches,good_matches_out);
38 namedWindow("优化后匹配点",0);
39 resizeWindow("优化后匹配点",1241,376);
40 imshow("优化后匹配点",good_matches_out);
41 imwrite("优化后匹配点.png",good_matches_out);
42 std::vector<cv::Point2f> points1, points2;
43for (std::vector<cv::DMatch>::const_iterator it= matches.begin();
44          it!= d(); ++it) {
45
46// Get the position of left keypoints
47float x= keypoint1[it->queryIdx].pt.x;
48float y= keypoint1[it->queryIdx].pt.y;
49              points1.push_back(cv::Point2f(x,y));
50// Get the position of right keypoints
51              x= keypoint2[it->trainIdx].pt.x;
52              y= keypoint2[it->trainIdx].pt.y;
温柔短句>韩式新娘妆
53              points2.push_back(cv::Point2f(x,y));
54    }
55    std::cout << points1.size() << "" << points2.size() << std::endl;
56 Mat fundamental_matrix;
57 fundamental_matrix = findFundamentalMat (points1,points2,CV_FM_8POINT);
小学时代
58 std::cout <<"Fundamental matrix="<< fundamental_matrix<<std::endl;
59 std::vector<uchar>inliers(points1.size(),0);
60 Mat homography_matrix =findHomography(Mat(points1),Mat(points2),inliers,CV_RANSAC,1.);
61 std::cout << "homography_matrix="<<homography_matrix<<std::endl;
62 Mat result;
63 warpPerspective(image1,result,homography_matrix,Size(1.ws));
64 Mat half(result, Rect(0,ws));
pyTo(half);
66 namedWindow("result",0);
67 resizeWindow("result",640,320);
68 imshow("result",result);
69 imwrite("result.png",result);
70 waitKey(0);
71return0;
72 }

本文发布于:2023-07-14 07:37:09,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1080889.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:矩阵   图像   小学   单应   关系   视图   存在   平移
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图