【问题标题】:How to calculate 'half' of an affine transformation matrix in MATLAB如何在 MATLAB 中计算仿射变换矩阵的“一半”
【发布时间】:2015-10-01 08:31:29
【问题描述】:

我正在寻找使用 MATLAB 的仿射变换矩阵的“一半”。是的,我明白,“一半”矩阵并不正确,但我正在寻找的内容实际上在这里得到了很好的解释:stackexchange mathematics

所以我正在寻找一个仿射变换矩阵 (B),当它对我的图像应用两次时,将得到与应用我的初始矩阵 (A) 一次时相同的结果。

反射不会成为 A 的一部分,否则就不可能找到 B。

我的初始矩阵 (A) 是使用 A = estimateGeometricTransform(movingPoints,fixedPoints,'affine') 计算的,它给了我一个 affine2d 对象。

如果无法从初始矩阵中找到“半”矩阵,也许可以对匹配点数组进行操作以从中找到 B。

干杯

【问题讨论】:

    标签: matlab matrix matlab-cvst affinetransform


    【解决方案1】:

    我认为有可能找到您所说的 half 矩阵。它被称为矩阵平方根。假设您有矩阵aA。在 Matlab 中你可以只做B=sqrtm(A),其中m 代表矩阵。然后你会得到一个矩阵B,其中norm(B*B - A) 非常小,如果矩阵A 表现良好的话。

    如果我理解正确,您想要 一半 仿射变换 aff = @(x) A*x + b。这可以使用齐次坐标来完成。每个变换aff 都可以用一个矩阵来表示 M = [A b; zeros(1,length(b)) 1],在哪里

    normalize = @(y) y(1:end-1)/y(end);
    affhom = @(x) normalize(M*[x; 1]);
    

    请注意,aff 和 affhom 做的事情完全相同。在这里,我们可以使用我之前所说的。 一半的affhom可以用

    表示
    affhomhalf = @(x) normalize(sqrtm(M)*[x; 1])
    

    在哪里

    affhomhalf(affhomhalf(y)) - aff(y)
    

    如果A 和b 表现良好,则对所有y 来说都是小号。

    对此我不确定,但我认为您甚至可以将sqrtm(M) 分解为线性和平移部分。

    【讨论】:

    • 感谢您的帮助。我会看看我是否可以实现它以及它的效果如何。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多