我希望使用MATLAB找到仿射变换矩阵的“一半”。是的,我理解,“一半”矩阵并不是真的正确,但我正在寻找的确实在这里得到了很好的解释:stackexchange mathematics
所以我正在寻找仿射变换矩阵(B),当对我的图像应用两次时,它会产生与应用我的初始矩阵(A)一次相同的结果。
反射不会成为A的一部分,否则找不到B。
我的初始矩阵(A)是使用A = estimateGeometricTransform(movingPoints,fixedPoints,'affine')
计算的,它给了我一个affine2d对象。
如果无法从初始矩阵中找到“半”矩阵,可能会以某种方式操纵匹配点阵列以从中找到B。
干杯
答案 0 :(得分:1)
我认为有可能找到你所说的 half 矩阵。它被称为矩阵平方根。假设你有matrixa A
。在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
完全相同。在这里,我们可以使用我之前谈论的内容。 {em> affhom
的半可以使用
affhomhalf = @(x) normalize(sqrtm(M)*[x; 1])
,其中
affhomhalf(affhomhalf(y)) - aff(y)
如果y
和A
表现良好,对所有b
都很小。
我不确定这一点,但我认为你甚至可以将sqrtm(M)
分解为线性和翻译部分。