在立体视觉中将像素从一个图像映射到另一个图像

时间:2017-10-17 09:23:20

标签: opencv image-processing stereo-3d

现在我有两个摄像头并完成立体声校准步骤以获取内在和外在参数。我在左相机中提取了一些特征点,并想知道在右图上映射它们的方法。有人可以帮忙吗?

我试图通过每个相机的旋转和平移矩阵来计算它们。

SolvePnP中有openCV功能,左侧摄像头为R1 T1,右侧摄像头为R2 T2。

到同一个世界点[X,Y,Z],我可以得到

[x1,y1,z1] = R1[X,Y,Z]+T1

[x2,y2,z2] = R2[X,Y,Z]+T2 

相机在自己的坐标系中坐标。

当我尝试通过

映射[x1,y1,z1]和[x2,y2,z2]时
R2*inv(R1)[x1,x2,x3]+(T2-R2*inv(R1)*T1) = [x2,y2,z2]

我得到了这个结果。

左边的图像是通过上面的方法从左图像映射棋盘角的结果;右边的图像是findChessBoardCorner正确图像计算的角落: image on left is result of mapping chessboard corner from left image by method above; image on right is corners of right image computing by findChessBoardCorner

2 个答案:

答案 0 :(得分:0)

旋转和平移矩阵将世界坐标系中的3D坐标映射到摄像机本地 3D坐标为了找到 2D-2D 变换,我建议您使用单应性:

https://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html?highlight=findhomography#findhomography

答案 1 :(得分:0)

Results From function "findHomography"

通过" findHomography"计算点映射关系只适用于棋盘的平面(我从棋盘上的角落得到了关系)。然而,当我用H计算前景/背景点时,结果如上所示。

问题应该是&#34;矩阵H在2-D坐标系上工作(或像上面棋盘这样的平面上的物体,这就是为什么如果我将棋盘点反射到另一个图像上它的原因),对象前/后它们的坐标是在三维坐标系上,它在图像上映射,这意味着矩阵失效工作(实际上我认为它没有失败工作,它映射了棋盘延伸位置上的点)&#34; < / p>

为了解决上面提到的问题,我认为想法是将图像重新投影到三维坐标系(也许是借助于ToF相机或其他方式),调用“解决方案”和“解决方案”。在左右相机的世界点之间得到姿势关系R,T的函数。选择左图像上的任意点,重新投影回3D坐标系,然后通过R,T&#34;

重新投影到右图像