我一直在阅读Jan Erik Solem 的Programming Computer Vision with 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 图书中找到此代码的相关部分。从第 67 页底部开始。