用OpenCV 4.2.0进行立体整流

问题描述 投票:0回答:1

我已经用自己的代码做了整流。现在我想让 cv2.stereoRectify 工作。

假设我有以下代码。

import numpy as np
import cv2

img1 = cv2.imread(IMG_LEFT) # Load image left
img2 = cv2.imread(IMG_RIGHT) # Load image right

A1 = np.array(A1) # Left camera matrix intrinsic
A2 = np.array(A2) # Right camera matrix intrinsic

RT1 = np.array(RT1) # Left camera extrinsic (3x4)
RT2 = np.array(RT2)  # Right camera extrinsic (3x4)

# Original projection matrices
Po1 = A1.dot( RT1 )
Po2 = A2.dot( RT2 )

# Camera centers (world coord.)
C1 = -np.linalg.inv(Po1[:,:3]).dot(Po1[:,3])
C2 = -np.linalg.inv(Po2[:,:3]).dot(Po2[:,3])

# Transformations
T1to2 = C2 - C1 # Translation from first to second camera
R1to2 = RT2[:,:3].dot(np.linalg.inv(RT1[:,:3])) # Rotation from first to second camera (3x3)

然后,我想找到整流变换(3x3)。按照 OpenCV文档 我正在尝试。

Rectify1, Rectify2, Pn1, Pn2, _, _, _ = cv2.stereoRectify(A1, np.zeros((1,5)), A2, np.zeros((1,5)), (img1.shape[1], img1.shape[0]), R1to2, T1to2, alpha=-1 )


mapL1, mapL2 = cv2.initUndistortRectifyMap(A1, np.zeros((1,5)), Rectify1, Pn1, (img1.shape[1], img1.shape[0]), cv2.CV_32FC1)
mapR1, mapR2 = cv2.initUndistortRectifyMap(A2, np.zeros((1,5)), Rectify2, Pn2, (img2.shape[1], img2.shape[0]), cv2.CV_32FC1)

img1_rect = cv2.remap(img1, mapL1, mapL2, cv2.INTER_LINEAR)
img2_rect = cv2.remap(img2, mapR1, mapR2, cv2.INTER_LINEAR)

总之,我得到的图像完全是乱七八糟的,肯定无法纠正。我到底做错了什么?我猜是关于rotationstranslations的东西,但我想不通。

另外,OpenCV是不是有点过于复杂了?反正应该是个简单的操作。

非常感谢。

EDIT:你可能会注意到,我把失真参数设置为零。这是因为我使用的是电脑生成的立体图像,没有镜头失真。

opencv computer-vision stereo-3d
1个回答
1
投票

在OpenCV的文档中,我发现了以下原因 stereoRectify() 似乎不起作用。

大部分的研究论文经常提到 同域变换 而OpenCV则是在计算将应用于图像的 物体空间的旋转 如上所述 cv2.initUndistortrectifyMap() 文件(见 此处).

所以在调用之后。

R1, R2, Pn1, Pn2, _, _, _ = cv2.stereoRectify(A1, np.zeros((1,5)), A2, np.zeros((1,5)), (img1.shape[1], img1.shape[0]), R1to2, T1to2, alpha=-1 )

为了得到整流变换,我使用:

Rectify1 = R1.dot(np.linalg.inv(A1))
Rectify2 = R2.dot(np.linalg.inv(A2))

其中 R1R2 是OpenCV的变换输出,而 A1A2 是3x3相机矩阵(内在)。

似乎效果还不错。如果你有什么更好的想法,请评论。

希望这对大家有用。

© www.soinside.com 2019 - 2024. All rights reserved.