我一直在阅读Jan Erik Solem的使用Python进行计算机视觉编程,这是一本相当不错的书,但是我还无法澄清有关图像配准的问题。
基本上,我们有一堆需要对齐一点的图像(面孔),因此首先需要通过相似变换执行刚性变换:
x' = | sR t | x
| 0 1 |
其中x是向量(在这种情况下是一组坐标),通过旋转R、平移t和可能的缩放s转换为x'。
Solem为每个图像计算这个刚性变换,返回旋转矩阵R和一个平移向量tx和ty:
R,tx,ty = compute_rigid_transform(refpoints, points)
然而,他出于某种原因重新排列了R的元素:
T = array([[R[1][1], R[1][0]], [R[0][1], R[0][0]]])
然后他执行了一个仿射变换:
im2[:,:,i] = ndimage.affine_transform(im[:,:,i],linalg.inv(T),offset=[-ty,-tx])
在这个例子中,对每个通道执行了仿射变换,但这并不重要。
im[:,:,i]
是要处理的图像,此过程返回另一幅图像。
T
是什么,为什么我们要反转仿射变换中的矩阵?实现图像配准的常规步骤是什么?
更新
在这里你可以在Google Books中找到此代码的相关部分。从第67页底部开始。
T
不仅仅是R
的转置。现在我比以往任何时候都更加困惑了。您尝试运行过这段代码吗? - aganders3