我正在使用python中OpenCV中的标准方法计算两个图像img1
和{cv2.findHomography
。在
为了加快计算速度,我将两幅图像缩小为small1
和{H
,它将small1
映射为small2
。
然而,在最后,我想使用计算单应矩阵将一个全尺寸图像img1
投影到另一个全尺寸图像{
我想我可以简单地将单应矩阵H
转换成H_full_size = A * H * A_inverse
,其中A
是表示从img1
到{A_inverse
是它的逆矩阵。
然而,这并不奏效。如果我将cv2.warpPerspective
应用于按比例缩小的图像small1
,则一切如预期,结果(很大程度上)与small2
重叠。如果我将cv2.warpPerspective
应用于带有H_full_size
的全尺寸图像img1
,则结果不会映射到img2
。在
但是,如果我使用A
(使用类似projected_pts = cv2.perspectiveTransform(pts, A)
)投影点匹配(在缩小的图像上检测到),然后我从中计算H_full_size
,一切都很好。在
你知道我在这里做错了什么吗?在
我认为你在这篇文章中的假设是错误的
源于人类“爱”的对称性。开玩笑吧,你的公式是正确的,在我将要揭露的一种低血压。 如果我从这个角度出发(这相当于cv2函数cv2,warpPerspective-对于比例因子,公式是正确的)
你可以推导出你自己的公式。在
^{pr2}$这是相当等价的(如果B是可逆的)
问题变成了
所以问题变成了:你确定从}的比例矩阵等于从}的比例矩阵吗?(或至少它们与恒定比例因子值不同)?在
img1
到{img2
到{如果是你的情况,请记住,在你写的时候,同音图只在平面图像之间起作用(或者在纯旋转的情况下)。假设在一个平面上有80%的SIFT点,在这个平面上有20%的点,同应法将所有这些点都视为在一个平面上,并找到使误差最小化的变换H(,而不是平面上80%点的完美变换)。 另外,1080p分辨率图像中明显的错误在320p分辨率图像中可能不那么明显(您没有指定图像减少的程度!)在
在我看来,问题是单应性应用的透视投影是一种非线性变换(只有在使用齐次坐标时才是线性的),不能用法向变换矩阵表示。因此,将这种透视投影矩阵与其他一些变换相乘会产生不理想的结果。在
您可以尝试将原始矩阵H元素乘以:
S=[1,1,标度;1,1,标度;1/标度,1/标度,1]
全尺寸=S*H
其中scale为例2,如果将原始图像的大小减小了2。在
相关问题 更多 >
编程相关推荐