level 3
最近在学习双目摄像机立体标定、校正以及匹配的知识。查了很多资料,参考书籍是《学习opencv》,但关于立体匹配还是弄不明白。求教大神!!!!!
我先利用stereoCalibrate 立体标定,
接下来用stereoRectify、initUndistortRectifyMap 计算了旋转矩阵、投影矩阵还有左、右摄像机视图的映射查找表。
我想实现的功能是: 确定图片序列中运动物体的三维坐标运动轨迹(选择其上的一个点来代表整体)。
我的想法是先进行图像处理,标记处出运动物体的大致位置,然后进行立体匹配,在成功匹配的点中找出我想要的点,计算该点的三维坐标。
关于立体匹配,多在使用stereoBM类实现。经过学习,我知道在设置好匹配属性的参数后,可以调用函数 findStereoCorrespondenceBM 得到两幅图的视差映射disp,请问这个disp是什么东西?那么接下来我该怎么做呢??
感觉自己没什么头绪,希望大神能指教指教..
2016年08月09日 03点08分
1
level 1
看见了就回一下吧,视差的概念你百度下,大概的意思就是每一个像素代表的是左影像和有影像的匹配位置的差值。比如视差图第一个像素的像素值是5,意味着左影像上第一个点与右影像上第6个点匹配
2016年09月24日 05点09分
2
明白了,谢了~
2016年09月28日 01点09分
level 3
已解决问题,发一楼结贴:
问题:通过双目摄像机获取的视频(图片序列)确定运动物体三维坐标
解决过程:
1)双目摄像机立体标定,并完成立体校正初始化;
2)分别对两个摄像头获取的图片序列校正并图像处理(采用背景减除算法跟踪运动物体),获得物体二维坐标;
3)立体匹配(基于块的)初始化,进行立体匹配计算视差,获取三维坐标;
用到的与立体视觉相关OpenCV2(OpenCV3)的库函数:
1)立体标定
findChessboardCorners..........................................靶标处理
cornerSubPix...........................................................靶标处理
stereoCalibrate........................................................立体标定
2)立体校正
stereoRectify............................................................对已标定的摄像机校正
initUndistortRectifyMap............................................计算左右视图映射查找表
3)立体匹配
类BMState...............................................................块匹配
findStereoCorrespondenceBM................................计算视差图
reprojectImageTo3D................................................计算三维坐标
存在问题:
1)背景减除算法速度较慢,特别是对于大的图像
2)基于块的立体匹配部分,参数的设置要十分小心,对z坐标有较大影响
用上述方法最终基本解决了问题。与大家分享,希望能对还在学习的人有所帮助。欢迎大神指教,欢迎同学探讨。
2016年09月28日 02点09分
3
你好,首先采集的图片是带有棋盘格的图片(并没有包含待定点)用于立体标定,我用的是opencv中的stereo-calib中得到了畸变参数,同时在stereo-calib中也进行了立体校正,得到了矩阵p、Q。然后接下来就是采集待求目标点的图片,
2017年03月06日 02点03分
然后接下来是不是要对图片进行畸变矫正,立体校正,然后立体匹配得到待定点的左右图片中的二维坐标,再进行三维点坐标的计算。是这样一个流程吗?从采集图片以后的程序你有吗?我想做一下这方面的研究。
2017年03月06日 02点03分
level 4
楼主有学过官方stereomatch.cpp这个sample例子么,我一直在看这个代码,看了一周,学习了一段时间C++,有些代码还是看的不太懂,有空可以交流一下么
2018年03月11日 13点03分
5
并未。。。楼主已转行,视觉都忘得差不多了。加油
2018年03月12日 02点03分