Python中的图像配准与仿射变换

2024-05-19 03:02:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在读Jan Erik Solem的Programming Computer Vision with Python,这是一本相当不错的书,但是我还没有能够澄清一个关于图像注册的问题。在

基本上,我们有一组需要对齐的图像(面),因此首先需要通过相似性变换执行刚性变换:

x' = | sR t | x
     | 0  1 |

在这种情况下,可以把坐标变换成向量

Solem计算每个图像的刚性变换,该图像返回旋转矩阵R和平移向量tx和ty:

^{pr2}$

然而,出于某种原因,他重新排列了R的元素:

T = array([[R[1][1], R[1][0]], [R[0][1], R[0][0]]])

后来他做了一个affine transformation

im2[:,:,i] = ndimage.affine_transform(im[:,:,i],linalg.inv(T),offset=[-ty,-tx])

在这个例子中,仿射变换是在每个通道上执行的,但这并不相关。im[:,:,i]是要处理的图像,此过程返回另一个图像。在

什么是T,为什么我们要在仿射变换中反转这个矩阵?实现图像配准的一般步骤是什么?在

更新

Here你可以在谷歌图书中找到这段代码的相关部分。从67页的底部开始。在


Tags: 图像with矩阵刚性向量jancomputerprogramming
2条回答

在我看来这是代码中的一个错误。T似乎只是R的转置,对于旋转矩阵而言,这与逆矩阵相同。然后他在调用ndimage.affine_transform时(再次)取逆。我认为应该将T或{}传递给该函数。在

我会尽力回答你的问题并指出一个错误(?)在书中。 (1) 为什么使用T=array([[R[1][1],R[1][0]],[R[0][1],R[0][0]]])? 因为R,tx,ty=计算刚性变换(refpoints,points)计算旋转矩阵 以及翻译形式:

|x'| = s|R[0][0] R[0][1]||x| + |tx|             Equation (1)
|y'|    |R[1][0] R[1][1]||y|   |ty|

但是,OUT=nImage.affine_变换(IN,A,b)要求坐标的形式为(y,x),而不是(x,y)的顺序。因此,上述方程式(1)将变成

^{pr2}$

那么,在功能上nImage.affine_变换()矩阵将是利纳格投资公司(T) ,不是利纳格投资公司(R) 一。在

(2)仿射变换输出=nImage.affine_变换(IN,A,b)实际上是A*OUT+b=>;IN。 根据式(2),改写为

|y| = inv(T)|y'| - inv(T)|ty|
|x|         |x'|         |tx|

所以函数中的偏移量nImage.affine_变换()是inv(T)[-ty,-tx],不是[-ty-tx]。 我认为这是原始代码中的一个错误。在

相关问题 更多 >

    热门问题