这几天研究内容涉及双目视觉的内容,需要获取双目视差图 (Binocular Disparity map)。
直接从网上下载的双目视觉数据库,并已经给出单摄像机标定参数和双目标定参数。http://www.vision.ee.ethz.ch/~aess/dataset/
这样就不需要摄像机标定和采集环节。直接进行图像矫正和双目匹配。
相关内容可以参考 opencv 双目测距与三维重建的OpenCV实现问题集锦 http://www.opencv.org.cn/forum/viewtopic.php?f=10&t=11802
或者csdn chenyusiyuan的博文http://blog.csdn.net/chenyusiyuan/article/category/610983
在opencv中是通过cvInitUndistortMap计算出mapx和mapy,然后在利用cvRemap最后完成几何变换。
在程序编写中要尤其注意cvremap函数
void cvRemap( const CvArr* src, CvArr* dst,
const CvArr* mapx, const CvArr* mapy,
int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,
CvScalar fillval=cvScalarAll(0) );
const CvArr* mapx, const CvArr* mapy,
int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,
CvScalar fillval=cvScalarAll(0) );
要注意:(1)使用时必须保证src和dst都已经分配了内存
(2)cvRemap的前两个参数是源图像和目标图像,大小和通道数必须相同,但是可以是任意数据类型,且不一定是同一副图像
(3)mapx和mapy应该与源图像和目标图像大小相同,单通道,浮点类型(IPL_DEPTH_32F)
完成了双目矫正,就可以进行双目匹配和视差计算了。这是最后获得的结果。
其中,双目匹配和视差计算参照了网上朋友的代码。