求问基于双目重建的代码解析

肖蜗牛 2017-04-25 08:59:46
下载网址:http://download.csdn.net/detail/aichipmunk/9073499
blog:http://blog.csdn.net/qq_26499769/article/details/51817254#comments
在上面这个网址下载了基于opencv3.0的双目重建代码。自己用的opencv3.1重配置了下。
主函数:
void main()
{
string img1 = "0004.png";
string img2 = "0006.png";
vector<string> img_names = { img1, img2 };
vector<vector<KeyPoint>> key_points_for_all;
vector<Mat> descriptor_for_all;
vector<vector<Vec3b>> colors_for_all;
vector<DMatch> matches;
//本征矩阵
Mat K(Matx33d(
2759.48, 0, 1520.69,
0, 2764.16, 1006.81,
0, 0, 1));
//提取特征
extract_features(img_names, key_points_for_all, descriptor_for_all, colors_for_all);
//特征匹配
match_features(descriptor_for_all[0], descriptor_for_all[1], matches);
//计算变换矩阵
vector<Point2f> p1, p2;
vector<Vec3b> c1, c2;
Mat R, T; //旋转矩阵和平移向量
Mat mask; //mask中大于零的点代表匹配点,等于零代表失配点
get_matched_points(key_points_for_all[0], key_points_for_all[1], matches, p1, p2);
get_matched_colors(colors_for_all[0], colors_for_all[1], matches, c1, c2);
find_transform(K, p1, p2, R, T, mask);
//三维重建
Mat structure; //4行N列的矩阵,每一列代表空间中的一个点(齐次坐标)
maskout_points(p1, mask);
maskout_points(p2, mask);
reconstruct(K, R, T, p1, p2, structure);
//保存并显示
vector<Mat> rotations = { Mat::eye(3, 3, CV_64FC1), R };
vector<Mat> motions = { Mat::zeros(3, 1, CV_64FC1), T };
maskout_colors(c1, mask);
save_structure(".\\Viewer\\structure.yml", rotations, motions, structure, c1);
system(".\\Viewer\\SfMViewer.exe");
}
我做出来结果是在viewer文件夹生成了\structure.yml文件。代码主人说打开viewer下的SfMViewer.exe就可以显示出structure。然后我很好奇这个SfMViewer.exe怎么写出来的??viewer文件夹里还包含了很多opencv的dll。有大神知道怎么写出来的吗??
...全文
417 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_43445817 2019-05-08
  • 打赏
  • 举报
回复
你好,想问下本征矩阵k的参数是怎么确定的
F_L_Y_ing 2018-07-30
  • 打赏
  • 举报
回复
hi,我用了同样的代码,但是在生成viewer目录有问题。首先我的文件存储目录是在C盘下,无法直接写文件。其次,我在D盘下按上述代码生成viewer目录下的yml同样出错,但是去掉viewer直接生成yml是可以的。但是也就无法找到sfm viewer. exe。所以我想请问您是怎么做的,是不是环境还是有问题。我用的是OpenCV3.2,链接了OpenCV contrib库。谢谢您了
F_L_Y_ing 2018-07-30
  • 打赏
  • 举报
回复
hi,我用了同样的代码,但是在生成viewer目录有问题。首先我的文件存储目录是在C盘下,无法直接写文件。其次,我在D盘下按上述代码生成viewer目录下的yml同样出错,但是去掉viewer直接生成yml是可以的。但是也就无法找到sfm viewer. exe。所以我想请问您是怎么做的,是不是环境还是有问题。我用的是OpenCV3.2,链接了OpenCV contrib库。谢谢您了
shengdewu 2018-01-15
  • 打赏
  • 举报
回复
抱歉,我不是专业的,我只是做双摄,通过一些简单的例子,了解三角测量而已, 本专业是C++,抱歉。
本资源聚焦于基于MATLAB平台的双目立体视觉技术在面部三维建模中的算法实现与仿真分析。双目立体视觉的核心机制在于通过双摄像头同步采集场景信息,利用两幅图像间的空间差异推算目标物体的三维几何数据。该技术体系在机器感知、智能系统定位及生物特征识别等前沿领域具有重要应用价值。 双目立体视觉的理论基础建立在立体匹配与深度计算原理之上。系统通过左右相机获取的成对图像可生成视差分布图,视差反映了同一空间点在两幅图像中的像素位移量,其数值与目标物体的实际距离存在数学关联。依据立体几何模型,通过解析视差数据可重构物体的深度信息,最终实现三维空间坐标的恢复。 MATLAB平台凭借其完善的数值计算能力和专业的图像处理工具箱,为双目视觉算法的开发提供了有力支持。本资源包可能包含以下核心内容: 1. 理论指导材料:系统阐述立体匹配原理、视差计算方法和深度信息重构技术,详细说明MATLAB中相关视觉工具箱的函数应用规范 2. 算法实现代码:提供完整的MATLAB程序实例,展示图像预处理、特征点匹配、视差图生成及三维点云重构的全流程实现方案,涵盖SIFT、SURF等经典特征匹配算法 3. 实验验证数据:包含多组成像角度各异的面部图像样本,这些经过标定的图像数据可用于算法验证与性能评估 4. 三维建模成果:呈现通过算法重建的面部三维结构模型,以点云数据或曲面网格形式展示立体重构效果 5. 扩展参考资料:补充面部特征检测、关键点定位、匹配度评估等辅助技术文档,构建完整的知识体系 使用本资源需具备MATLAB基础编程能力及数字图像处理相关知识。通过系统学习与实践操作,研究者可深入掌握双目立体视觉的技术原理,提升在三维重建、面部特征分析及虚拟现实等领域的应用能力。本资源适用于计算机视觉领域的学习者与工程师,为其开展相关学术研究及工程实践提供重要技术参考。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

4,269

社区成员

发帖
与我相关
我的任务
社区描述
OpenCV相关技术交流专区
计算机视觉人工智能opencv 技术论坛(原bbs) 广东省·深圳市
社区管理员
  • OpenCV
  • 幻灰龙
  • OpenCV中国团队
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

OpenCV中国团队官方博客:https://blog.csdn.net/opencvchina

试试用AI创作助手写篇文章吧