给老板写的,再一次懒得翻译成中文了……
==========================================================
先放结果!
(左右两幅原始图像)显然不是我的特斯拉……
-----------------------------------------------------------------------------------------------------------------------------------
(disparity map)
-------------------------------------------------------------------
(点云/ point cloud)
==== 概括 ===========================================================================================================
主要的意思就是,其实opencv的reprojectImageTo3D没有问题。
(很多网上说这个function有问题, 比如这个stackoverflow的链接, 我遇到了和作者一摸一样的问题。他最后通过自己写了一遍reprojectImageTo3D函数就好了。http://stackoverflow.com/questions/22418846/reprojectimageto3d-in-opencv ,我也尝试自己写这个function但还是结果不理想,最后绕了一圈再用这个函数结果就对拉)
个人觉得这部分要注意的三点是:
1. 得到disparity map的过程中,参数要调对(texture treshold设大, 这样减少很多噪声。噪声太多的话点云就算对了也看不出来是什么)disparity map看上去一定要很好很好。噪声越少越好。我的uniqueRatio倒是很小……目测只有1~2的样子。
2. Q 矩阵要对~ 这个基本好好做calibration应该没大问题。我直接用了openCV 中的stereo calibration,并没有分别先做monocular calibration,效果依旧很不错。
3. 用reprojectImageTo3D之后,我用meshlab显示出来,zoom in 一下就好啦。
==== 正文 ==================================================================================================================
1. get good disparity map, play with the parameters of block matching algorithm
my experience is:
-
for closer object to be detected, NumofDisparities should be large, and vice versa
-
set SADWindowSize to be big
-
set UniqueRatio to 1~10
-
set TextureTreshold to be large enough (try 400~500)
2. Use ReprojectImageTo3D()
Suppose we get such disparity map:
use:
reprojectImageTo3D(disparity, XYZ,