如果我得到欧几里德重建结果或只是一个投射结果我有问题。所以首先让我告诉你我做了什么:
我有两个立体图像。图像是SEM图像并且是以竖心方式倾斜的。倾斜的差异是5°。使用SURF对应和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
这给了我一个视差图,f.e。这个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)))
这是一个真实三角剖分的简化形式,假设使用三角方程进行平行投影。使用校准对象计算像素常数。所以我得到的高度为mm。差异以像素计算。 点云的结果看起来相当不错,但我的所有点都有一个小的不断倾斜。所以创建的pointcloud(-plane)有一个倾斜角。
现在我的问题是,这个点云是真正的欧几里德坐标还是我有一个投射重建(等于仿射重建?)结果仍然不同于欧几里德结果(欧几里德和投射结果之间的未知转换)? 我问的原因是我没有真正的校准矩阵,我没有使用真正的三角测量方法,使用中心投影和相机中心坐标,焦距和图像点坐标。
任何建议或文献都表示赞赏。 :)
提前致以最诚挚的问候和谢意!