gpt4 book ai didi

python - 为什么OpenCV分解的单应性平移矩阵有三个值?

转载 作者:行者123 更新时间:2023-12-01 06:29:20 31 4
gpt4 key购买 nike

简而言之...分解单应性矩阵返回的平移矩阵实际上是一个 3X1 矩阵(实际上是一个向量)。然而,平移矩阵的每个描述都是一个 3X2 矩阵。

这是两个图像(红外摄像机),位置 1 图像(大约摄像机笛卡尔坐标 x = 0mm,y=300mm): initial image, x=0mm, y=300mm

这是位置 2 图像(大约相机笛卡尔坐标 x = 680mm,y=0mm): final image, x=680 mm, y=0mm

我使用以下+90个点来确定单应性矩阵(M):

M, mask = cv2.findHomography(source_pts, destination_pts, cv2.RANSAC,5.0)

这个过程挑选出了很多关键点: matching keypoints between the two images

如果将此单应性矩阵应用于原始图像 - 它会完美地工作:

im_out = cv2.warpPerspective(img1,M, (640,480) )

homography applied to original image

与输出点集的差值:

np.mean(dst_pts-src_pts , axis = 0)

array([[-305.16345, -129.94157]], dtype=float32)

非常接近单个点的单应性矩阵的点积......

np.dot(M,[1,1,1])

array([-293.00352303, -132.93478376, 1.00009461])

我使用以下命令分解了单应性矩阵:

num, Rs, Ts,Ns = cv2.decomposeHomographyMat(M, camera_matrix)

这将返回 4 个解(num)、一个旋转矩阵、一个平移矩阵和 Ns(不记得它是什么)。

我对翻译矩阵感兴趣。

首先...翻译矩阵列出了 4 个解决方案(这是正确的吗?):

 Ts =
[array([[-0.60978834],[-0.26268874],[ 0.01638967]]),
array([[ 0.60978834], [ 0.26268874],[-0.01638967]]),
array([[-0.19035409],[-0.06628793],[ 0.63284046]]),
array([[ 0.19035409], [ 0.06628793],[-0.63284046]])]

其次,也是最令人费解的一点每个解决方案都有 3 个值...

e.g., the first solution: [-0.6097, -0.2626, 0.01638967].

我的理解是平移矩阵的形式为: translation matrix

Here is my reference

如何将分解矩阵返回的值转换为上述形式的平移矩阵?**即...我如何转换它:[-0.6097、-0.2626、0.01638967]

转换为这种格式:** translation matrix

感谢您的帮助。

最佳答案

让我们采用您的第一个翻译向量:

np.array([-0.60978834, -0.26268874, 0.01638967])

对我来说,这些看起来像是您的 txtytz 估计的翻译组件。另外,当我查看带有绿点的图像时,这些数量是有意义的。所以我猜你的齐次坐标平移矩阵是:

M = np.array([[1, 0, 0, -0.60978834], [0, 1, 0, -0.26268874], [0, 0, 1, 0.01638967]])

或者简单地说:

M = np.array([[1, 0, -0.60978834], [0, 1, -0.26268874]])

如果忽略 tz 组件。这不是您要找的吗?

关于python - 为什么OpenCV分解的单应性平移矩阵有三个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59979341/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com