如何通过图像的比例来改变单应性?

9

我有两张平面图像 A 和 B,使用特征点计算出它们之间的单应性矩阵。我的问题是,如果 A 和 B 都放大到双倍大小,即 A' 和 B',那么新的单应性矩阵将会是什么样子?谢谢。

4个回答

14

这两个答案都是错误的!很抱歉!

正确的带有证明的答案如下:

在此输入图像描述


应用单应性是非线性的。这个证明是不充分的。假设你有比例尺s1和s2(s1 < s2),你有s1的单应性,你有想要投影的s2中的点。选项1:缩小点,应用s1中的单应性,然后将点放大回来。(可能是你的意思,但证明不正确)选项2:“放大单应性”,直接在s2中应用单应性。(我的答案) - jns
亲爱的@jns,如果您仔细阅读证明,您会注意到我没有改变任何图像(如您所提到的缩放和重新缩放),我只是推导出第二个图像的单应矩阵公式而没有做出任何假设,这个证明是通用的。 - schlodinger
你将H'定义为“反比例缩放”(S^-1),“应用单应性”(H),然后“缩放回去”(S)。问题在于,对2D点应用单应性不是线性变换。 - jns
我无法对JNS上面的反对发表评论,但是Schlodinger的答案在我的应用程序中有效,而JNS的答案则不行。也许我在实现JNS的时候犯了一个错误,但这就是我找到的结果。为了提供背景信息:在我的应用程序中,我将两个图像缩小并找到它们之间的关键点,并进行匹配(缩小图像可以加快速度),然后找到缩小图像之间的单应性变换。然后,我希望修改找到的单应性变换,使其适用于两个原始(全尺寸)图像之间。我会称之为“放大单应性变换”,但也许从技术上来说这个名称并不准确。 - KRA2008
这个解决方案对我来说非常有效。非常感谢。有人知道这个解决方案在哪些文献中提到吗?我需要一个可引用的来源。 - Michael
@Michael 我记得在文献中找不到这个公式,所以我自己进行了证明。 - schlodinger

9
我认为你可以修改单应性矩阵以获得正确的比例。假设对应关系用xy表示,单应性矩阵将x映射到y。如果我们考虑缩放后的点。

enter image description here

我们可以尝试将 s 因式分解出来,以便对涉及单应矩阵的变换进行处理:

enter image description here

其中大写希腊字母Π表示透视变换(简单地将3D向量的x和y分量除以其z分量)。当取消s时,我们会得到在不同比例下应用单应性所需的方程。在这里,H_s可以从前一个方程中读出:

enter image description here

如果你在不同于应用规模(例如可视化)的比例上计算单应性矩阵,你只需计算 H_s,其中s是从新规模(用prime表示)到旧规模的相对因子。例如,如果可视化比计算大两倍,则选择s = 0.5即可。

0

-1

单应性矩阵不会改变。只要两个图像经历了相同的线性缩放,它就会保持不变。

单应性矩阵是在三维空间中两个二维平面之间的映射。它将旋转和平移与相机矩阵结合起来。如果相机相对于物体的位置没有改变,则从物体平面到图像平面上等效点的映射计算出的单应性矩阵将是相同的(假设没有噪声),无论选择哪些点。


2
我不这么认为,单应性矩阵包括旋转和平移,我认为平移一定是不同的。 - binzhang
谢谢。现在假设单应性矩阵没有改变,即 H = [a11,a12,a13,a21,a22,a23,a31,a32,a33],那么从图像 B 到图像 A 的点映射将是: - binzhang
1
谢谢。现在假设单应性未改变,即H = [a11,a12,a13,a21,a22,a23,a31,a32,a33],那么从图像a(xa,ya)到图像B(xb,yb)的点映射将是: xb =(a11 * xa + a12 * ya + a13)/(a31 * xa + a32 * ya + a33),如果两个图像都扩大到双倍大小,则映射 将是(2xa,2ya) - >(2xb,2yb)2xb =(a11 * 2xa + a12 * 2ya + a13)/(a31 * 2xa + a32 * 2ya + a33)。它与(xa,ya) - >(xb,yb)的上述方程式冲突。 - binzhang
@binzhang 好的,我想我明白您的意思了。如果图像A围绕其中心缩放为双倍大小,则必须围绕图像A的投影中心将图像B缩放为双倍。这就是翻译偏移量出现的地方,对吗? - Roger Rowland
1
我想我也明白你的意思了。谢谢。 - binzhang
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接