我们被要求进行3D重建(博士硕士课程),我把头发拉出来。我不确定我是否错过任何步骤,或者我是否错误地做错了。我试图谷歌代码,并用我的功能替换他们的功能,只是为了看看我是否可以从中得到正确的结果,我无法做到。
我只是完成了我到目前为止所做的步骤,我希望你们中的一个能告诉我,我错过了一些明显的事情:
图片我正在使用:http://imgur.com/a/UbshI
加载校准左右图像,点击相应的点以获得P1和P2
使用RQ分解获得K1& K2(以及R1,R2,t1,t2,但我似乎没有在任何地方使用它们。最初我尝试做R = R1 * R2',t = t2-t1设置P1后创建我的新P2是规范的(I | 0),但那也不起作用。
将P1设置为规范(I | 0)
使用RANSAC计算基本矩阵F和对应点im1,im2。
获取点上的像素颜色
通过做K2'获得基本矩阵E. * F * K1
从E中获取4个不同的投影矩阵,然后选择正确的
使用P1,P2,im1,im2进行三角测量匹配以获得3D点
使用散点图绘制3D点,为其提供该点像素的RGB值。
我的结果令人不满意:
目前,由于我没有得到任何地方,我想选择最简单的方案并继续努力。仅供参考,我使用的是matlab。如果有人有任何提示,我真的很想听到他们的意见。
答案 0 :(得分:1)
原来是一个奇怪的原因,为什么它不起作用。我使用的是matlab detectSURFFeatures
,它提供了不准确的匹配对。我从来没有认为这是错的,但我的一个同学也有同样的问题。我把它更改为使用detectEigenMinFeatures
代替,它工作正常!现在这是我的结果,它并不完美,但它更好,更好:
答案 1 :(得分:0)
如果您已经有P1和P2,那么您可以简单地对两个图像中的匹配点对进行三角测量。没有必要估计基本矩阵。
如果你只有内在函数(单个摄像头的K,或两个不同摄像头的K1和K2),那么你的方法是有效的:
此方法在计算机视觉系统工具箱中的example中进行了说明。
在任何一种情况下,您都应该仔细检查您的代码,并确保所有矩阵都有意义。 MATLAB的惯例是将行向量乘以矩阵,而许多教科书将矩阵乘以列向量。所以矩阵可能需要转换。
在此之前,使用showMatchedFeatures
绘制您的点数匹配,以确保它们有意义。