2015-10-01 150 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