2
我想做類似於圖像分析中使用特徵的標準「圖像配準」。使用python估計歐幾里德變換
我想找到轉換一組二維座標A在另一個B中的最佳轉換。但我想添加一個額外的約束,因爲轉換是'剛性/歐幾里德轉換'這意味着沒有縮放但只有翻譯和旋轉。 通常情況下,允許縮放,我會做:
from skimage import io, transform
destination = array([[1.0,2.0],[1.0,4.0],[3.0,3.0],[3.0,7.0]])
source = array([[1.2,1.7],[1.1,3.8],[3.1,3.4],[2.6,7.0]])
T = transform.estimate_transform('similarity',source,destination)
我相信estimate_transform
引擎蓋下只是解決了一個最小二乘問題。 但我想添加沒有縮放的約束。
有沒有在skimage或其他軟件包中解決這個問題的任何函數? 可能我需要用scipy,CVXOPT或cvxpy編寫我自己的優化問題。 任何幫助來短語/實現這個優化問題?
編輯: 我的實現得益於斯特凡範德沃爾特回答
from matplotlib.pylab import *
from scipy.optimize import *
def obj_fun(pars,x,src):
theta, tx, ty = pars
H = array([[cos(theta), -sin(theta), tx],\
[sin(theta), cos(theta), ty],
[0,0,1]])
src1 = c_[src,ones(src.shape[0])]
return sum((x - src1.dot(H.T)[:,:2])**2)
def apply_transform(pars, src):
theta, tx, ty = pars
H = array([[cos(theta), -sin(theta), tx],\
[sin(theta), cos(theta), ty],
[0,0,1]])
src1 = c_[src,ones(src.shape[0])]
return src1.dot(H.T)[:,:2]
res = minimize(obj_fun,[0,0,0],args=(dst,src), method='Nelder-Mead')
謝謝你的回答我實現它,它的工作原理。 – Gioelelm 2014-10-26 18:22:03
我忽略了一些細節,例如齊次座標等,所以很容易使它起作用的榮譽! – 2014-10-26 22:52:54