首页 > 编程知识 正文

实对称矩阵求特征向量构造正交矩阵,矩阵的特征值与特征向量的应用

时间:2023-05-05 17:14:15 阅读:11822 作者:4813

单击上面的3358www.Sina.com/,然后选择lmdds学视觉或3358www.Sina.com/

重磅的干货,第一时间送到正文,然后从深度学习这件小事上转了过来

星标

前面写了一篇关于单应性矩阵的文章,最后论述了基于特征的图像拼接和目标检测单应性矩阵的应用场景。 从很多人那里得到了信息的反馈,让我继续写。 那里有这篇文章。 这里有两张照片。 背景是我老家的平房,周围是开阔的地带,都是麦子。 有图为证:

置顶

前言

图一:

这里是两幅图像的拼接,多幅图像与此类似。 主要是应用特征提取模块的AKAZE图像特征点和描述符提取,当然也可以选择ORB、SIFT、SURF等特征提取方法。 匹配方法主要基于暴力匹配/FLANN KNN完成,图像定位和定位通过RANSAC和透视变换实现,最后通过简单的权重图像叠加实现融合,得到拼接的全景图像。 其中发现单应性矩阵是重要的一步。 如果你不知道这是什么,请看这里:

OpenCV单应性矩阵发现参数估计方法细节

图二:

1 .加载输入映像

建立AKAZE特征提取机

3 .提取关键点和描述符的特征

4 .描述子匹配,提取匹配良好的关键点

5 .同型矩阵图像定位

6 .制作融合口罩层,准备开始融合

7 .图像透视转换与融合操作

8 .输出拼接后的全景图像

思路

在具体的代码实现步骤之前,谈谈软件版本

-VS2015-OpenCV4.2-Windows 10 64位基本流程

1//提取特征点和描述符2vectorKeyPointkeypoints_right,keypoints_left; 3Matdescriptors_right,descriptors_left; 4自动检测器=a kaze : create (; 5检测器-检测器计算(left,Mat )、keypoints_left、descriptors_left ); 6检测器-检测器计算(right,Mat )、keypoints_right、descriptors_right );关键代码

1//暴力匹配2vectorDMatchmatches; 3 auto matcher=descriptor matcher :3360 create (descriptor matcher 33603360 brute force ); 4//6STD :3360 vectors TD :3360 vectordmatchknn _ matches; 7 matcher-KNN match (descriptors _ left,descriptors_right,knn_matches,2 ); 8constfloatratio_thresh=0.7f; 9 STD :3360 vectordmatchgood _ matches; 10for(size_ti=0; iknn_matches.size (; I ) 11(12if ) KNN _ matches [ I ] [0].distance ratio _ thresh * KNN _ matches [ I ] [1].distance ] 13 ) 14good_ 18 STD :3360 cout STD 33603360 endl; 1920Matdst; 21drawMatches(left,keypoints_left,right,keypoints_right,good_matches,dst );代码实现:提取特征与描述子

1//createmask 2intwin_size=800; 3inth1=left.rows; 4intw1=left.cols; 5inth2=right.rows; 6intw2=right.cols; 7英寸=最大(h1,h2 ); 8intw=w1 w2; 9Matmask1

= Mat::ones(Size(w, h), CV_32FC1);10Mat mask2 = Mat::ones(Size(w, h), CV_32FC1);11Rect roi;12roi.height = h;13roi.width = win_size;14roi.y = 0;15roi.x = w1 - win_size;1617// left mask18Mat temp = mask1(roi);19linspace(temp, 1, 0, win_size);2021// right mask22temp = mask2(roi);23linspace(temp, 0, 1, win_size);

对齐生成全景图像

1// generate panorama 2Mat panorama_01 = Mat::zeros(Size(w, h), CV_8UC3); 3roi.x = 0; 4roi.y = 0; 5roi.width = w1; 6roi.height = h1; 7left.copyTo(panorama_01(roi)); 8Mat m1; 9vector<Mat> mv;10mv.push_back(mask1);11mv.push_back(mask1);12mv.push_back(mask1);13merge(mv, m1);14panorama_01.convertTo(panorama_01, CV_32F);15multiply(panorama_01, m1, panorama_01);161718Mat panorama_02;19warpPerspective(right, panorama_02, H, Size(w, h));20mv.clear();21mv.push_back(mask2);22mv.push_back(mask2);23mv.push_back(mask2);24Mat m2;25merge(mv, m2);26panorama_02.convertTo(panorama_02, CV_32F);27multiply(panorama_02, m2, panorama_02);

上述代码中panorama_01实现对第一张图像内容提取与mask权重生成混合,panorama_02完成对第二张图的内容透视变换与mask权重生成混合。特别注意的是顺序很重要。单应性矩阵发现代码可以看之前文章即可,这里不再赘述。

合并全景图像

1// 合并全景图2Mat panorama;3add(panorama_01, panorama_02, panorama);4panorama.convertTo(panorama, CV_8U);5imwrite("D:/panorama.png", panorama);

程序运行->特征点匹配如下:

最终拼接的全景图如下:

想知道如何改进这个输出结果,让输出结果融合的根据自然与真实,请听下回再说吧!过年了终于有点时间写点干货回报一下大家!请大家多多支持!多多反馈!

下载1:OpenCV-Contrib扩展模块中文版教程

在「lmdds学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「lmdds学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「lmdds学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”粗暴的世界 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。