利用Matlab进行相机标定并使用openCV进行简单三维重建

注:本文主要针对Matlab和OpenCV跨平台进行相机标定、单相机三维重建工作的实现因为我发现网上竟然没有一篇博客径直指出这两者在进行图像处理时的巨大差异(坐标系完全不同),不然我也不会走了很多弯路(呜呜呜欲哭无泪~~~),先说最重要的点,“Matlab坐标系与OpenCV坐标系正好相反”,具体是怎么回事,继续往下看。

 

本文实现的是单相机的三维重建,也就是单个相机从不同角度对同一物体进行拍摄,最后进行建模,拍摄图像和结果类似于这样 利用Matlab进行相机标定并使用openCV进行简单三维重建_第1张图片

 

总体方法:

1. 利用Matlab标定,获取相机内参和每张图像对应的外参,关于Matlab的标定,可以参见这几篇博客:https://blog.csdn.net/KYJL888/article/details/81024822(主要是这篇),https://www.jianshu.com/p/7afd03fe7a60;需要强调的是,正如第一篇文章所说,Matlab的内参矩阵和openCV是反的,需要转置,因为它两的坐标系正好相反,一个的y是另一个的x,因此需要转置,所以,外参的旋转矩阵在具体使用时也需要转置

2. 完成参数获取以后,需要利用Matlab的畸变系数进行畸变矫正,畸变矫正还是参考上述博文https://blog.csdn.net/KYJL888/article/details/81024822,需要注意的是k3系数也可以试试,不一定他说的就对。后面我会附上我整个项目的具体代码,请勿担忧。

3. 利用HSV空间进行分割,确定重建目标的位置,关于HSV空间,可参考这几篇博文:https://blog.csdn.net/qq_34106574/article/details/85113424, https://blog.csdn.net/ColdWindHA/article/details/82080176(主要代码实现可参考这篇,同样源码我会给出)

4. 设置合理三维空间坐标,将三维点通过参数矩阵映射各个图像中,并通过检查此点是否在目标上,若在则保留此三维点,不在则丢弃,从而进行筛选,将三维空间中目标上的三维点保留下来,完成三维重建。映射的原理可参照这篇博文:https://blog.csdn.net/lql0716/article/details/71973318

5. 将保留的点绘制出来,即可完成简单三维重建。

 

关于具体的注意事项我在提供的资源中的报告中将给出,具体细节同样参见我的代码和报告。

链接:https://pan.baidu.com/s/1dzuhc-Sex5AwHC7hqQldgw 
提取码:he8l 

 

有关于代码中不懂的内容可以给我留言,不过我可能回复的比较慢,也可以发送邮件[email protected],如果看见我会尽快回复。另外,请您务必保护我的报告的个人信息,感谢。

你可能感兴趣的:(计算机视觉,三维重建,Matlab,OpenCV)