2

如果我得到一个欧几里得重建结果或只是一个投影结果,我很难理解。所以首先让我告诉你我做了什么:

我有两个立体图像。这些图像是 SEM 图像并且是偏心倾斜的。倾斜度差为 5°。使用 SURF-correspondences 和 RANSAC,我使用归一化 8 点算法计算基本矩阵。然后对图像进行校正,然后进行密集的立体匹配:

minDisp = -16
numDisp = 16-minDisp
stereo = cv2.StereoSGBM_create(minDisparity = minDisp,
                               numDisparities = numDisp)
disp = stereo.compute(imgL, imgR).astype(np.float32) / 16.0

这给了我一个视差图,这个 5x5 矩阵(值范围从 -16 到 16)。我将坏像素屏蔽掉(-17),并使用展平的 disp 数组计算图像的 z 分量。

                -0.1875 -0.1250 -0.1250  0
                -0.1250 -0.1250 -0.1250 -17
    disp =      -0.0625 -0.0625 -0.1250 -17
                -0.0625 -0.0625  0       0.0625
                 0       0       0.0625  0.1250

#create mask that eliminates the bad pixel values ( = minimum values)
mask = disp != disp.min() 
dispMasked = disp[mask]

#compute z-component
zWorld = np.float32(((dispMasked) * p) / (2 * np.sin(tilt)))

它是使用三角方程假设平行投影的真实三角剖分的简化形式。使用校准对象计算像素常数。所以我得到了以毫米为单位的高度。视差以像素为单位计算。点云的结果看起来相当不错,但我的所有点都有一个小的恒定倾斜。所以创建的点云(-平面)有一个倾斜角。

我现在的问题是,这个点云是真实的欧几里得坐标还是我有一个投影重建(等于仿射重建?)结果仍然不同于欧几里得结果(欧几里得和投影结果之间的未知变换)?我问的原因是我没有真正的校准矩阵,也没有使用带有相机中心坐标、焦距和图像点坐标的中心投影的真正三角测量方法。

任何建议或文献表示赞赏。:)

提前致以最诚挚的问候和感谢!

4

0 回答 0