2015-10-01 109 views
0

我正在寻找使用MATLAB找到仿射变换矩阵的'half'。是的,我明白,'一半'矩阵是不是真的正确,但我正在寻找的东西其实很好地解释了这里:stackexchange mathematics如何在MATLAB中计算仿射变换矩阵的'half'

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

反射将不会是一个的一部分,否则这将是不可能找到B.

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

如果没有办法从初始矩阵中找到'半'矩阵,也许可以通过一种方式来操作匹配点的数组,以从中找到B。

干杯

回答

1

我觉得这是找你说话的矩阵的可能性。它被称为矩阵平方根。假设你有矩阵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]); 

注意affaffhom做完全一样的东西来表示。在这里,我们可以使用我之前讨论的内容。的affhom可使用

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

其中

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

是小于所有y,如果Ab和均表现良好表示。

我不确定这一点,但我认为你甚至可以将sqrtm(M)分解成线性和平移部分。

+0

感谢您的帮助。我会看看我是否可以实施它,以及它的工作效果如何。 – Johannes