先给出两组点作为对应的特性点,每一组各有五个点。
point1=np.uint8(np.random.random((5,2))*10)
point2=np.uint8(np.random.random((5,2))*10)
计较每一组特性点的重心坐标:
c1=np.mean(point1,axis=0)
c2=np.mean(point2,axis=0)
计较每组特性点坐标的尺度差:
s1 = np.std(point1)
s2 = np.std(point2)
把每组特性点的重心放到原点位置上,而且坐标值除以尺度差。
p1=(point1-c1)/s1
p2=(point2-c2)/s2
把p1转置,并和p2举行矩阵乘法:
A=np.matrix(p1.T)*np.matrix(p2)
对矩阵A举行奇异值分化:
u,v,w=np.linalg.svd(A)
机关变换矩阵:
R = (u*w).T
M=np.vstack([np.hstack(((s2 / s1) * R,
c2.T - (s2 / s1) * R * c1.T)),
np.matrix([0., 0., 1.])])
END0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!