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

标签 python opencv matrix homography

简而言之...分解单应性矩阵返回的平移矩阵实际上是一个 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/

相关文章:

python - Python 类型提示语法如何/为什么起作用?

此方法的 Python 2.5 版本

opencv - 识别图像中的长不规则图案

c++ - Go 中的 OpenCV(或类似库)

ruby - 提取二维子数组(不使用矩阵)

c - 如何计算二维矩阵中两点之间的距离

python - 导入错误 : No module named 'keras_contrib'

python - scipy 使用什么方法从连续分布中选择随机值?

python - (scikit-image) HOG 可视化图像在保存时显示为黑色

c++ - Eigen 和 glm 产品产生不同的结果