仿射变换矩阵

时间:2016-03-29 20:39:13

标签: python matrix transformation affinetransform coordinate-transformation

我正在尝试对一组图像执行图像稳定。我已经确定了每个图像中匹配的角点对,并且我正在尝试为每组匹配对(源与目标)计算仿射变换矩阵。但是,当我这样做时,使用最小二乘法,得到的变换矩阵会产生不稳定的图像。我正在遵循这个过程:

source_points = [[219, 187], [221, 387], [347, 31], [135, 311], [296, 615], [86, 417]]
dst_points = [[221, 187], [222, 387], [348, 30], [137, 310], [299, 615], [88, 417]]

transform_mat, res, rank, s = np.linalg.lstsq(source_points, dst_points)

#looping through all dst_coordinates in a blank array of size = source image
transformed_coor = np.dot(transform_mat,dst_coordinate)

循环遍历空白数组中的坐标后,我从源图像中获取transformed_coor的插值,并将该值放在空白数组中的dst_coordinate中。当这个过程完成时,我会得到一个变换后的图像,但是当我将它与源图像进行比较时它并不稳定。

这个过程是否正确?我错过了一步吗?

1 个答案:

答案 0 :(得分:0)

我认为你的点对应关系source_points和dst_points不匹配。对于这个输入,我计算了仿射变换矩阵

T = [0.9997   -0.0026   -0.9193
     0.0002    0.9985    0.7816
          0         0    1.0000]

导致

的个别转换误差(欧几里德距离)
errors = [0.7592    1.0220    0.2189    0.6964    0.4003    0.1763]

为6点对应。那些相对较大,特别是在考虑

的source_points和dst_points之间的距离时
move_dist = [2.0000    1.0000    1.4142    2.2361    3.0000    2.0000]