0

我正在尝试在两个图像上实现仿射变换。首先,我在两个图像中找到匹配对。其中一个是缩放图像,另一个是参考图像。这些对返回给我的系数为:

     |1   0 |      | x |       |  1  |
A  = |      |  X = |   |   B = |     |
     |0   0 |      | y |       | 221 |   

The equation formed is X' = AX + B;

x_co_efficients[2] = (((x_new_Cordinate[2]-x_new_Cordinate[0])*(xCordinate[1]- xCordinate[0])) - ((x_new_Cordinate[1]-x_new_Cordinate[0])*(xCordinate[2] - xCordinate[0])))/
    (((xCordinate[1]-xCordinate[0])*(yCordinate[2]-yCordinate[0])) - ((xCordinate[2]-xCordinate[0])*(yCordinate[1]-yCordinate[0])));

x_co_efficients[1] = ((x_new_Cordinate[1]-x_new_Cordinate[0]) - (yCordinate[1]-yCordinate[0])*(x_co_efficients[2]))/(xCordinate[1]-xCordinate[0]);

x_co_efficients[0] = x_new_Cordinate[0] - (((x_co_efficients[1])*(xCordinate[0])) + ((x_co_efficients[2])*(yCordinate[0])));



y_co_efficients[2] = (((y_new_Cordinate[2]-y_new_Cordinate[0])*(xCordinate[1]- xCordinate[0])) - ((y_new_Cordinate[1]-y_new_Cordinate[0])*(xCordinate[2] - xCordinate[0])))/
    (((xCordinate[1]-xCordinate[0])*(yCordinate[2]-yCordinate[0])) - ((xCordinate[2]-xCordinate[0])*(yCordinate[1]-yCordinate[0])));

y_co_efficients[1] = ((y_new_Cordinate[1]-y_new_Cordinate[0]) - (yCordinate[1]-yCordinate[0])*(y_co_efficients[2]))/(xCordinate[1]-xCordinate[0]);

y_co_efficients[0] = y_new_Cordinate[0] - (((y_co_efficients[1])*(xCordinate[0])) + ((y_co_efficients[2])*(yCordinate[0])));

这些是我用来确定使用匹配对的系数的方程。这些方程对于相同的图像工作正常,对于缩放图像,它给了我那些系数。现在的问题是我有一个 24 位二进制图像,我想在该图像上实现关于参考的仿射变换。现在,当我尝试找到该图像的新坐标并将其当前值更改为该坐标时,我得到了一个非常失真的图像。如果转换正确,则不应该得到其他结果。有人可以看看方程式,并解释一下如何在第二张图像上实现这些方程式。我的代码是 C++。谢谢你。 这是我的参考图片

我的参考图像在上面..我的比较图像是 在此处输入图像描述

我得到的结果是只有线条的扭曲图像。 在此处输入图像描述

编辑 1

我现在已将求解方法更改为矩阵。现在我得到了正确的输出,但是注册后得到的图像是这样的。我还必须在新坐标中应用 0 到 320*240 的限制才能获得像素值。现在我的结果有点像这样。 在此处输入图像描述

编辑 2

我已经更改了代码并且得到了这个结果而没有任何黑色像素。我有点倾斜..虽然已经删除了给定图像中的缩放效果。在此处输入图像描述

4

1 回答 1

0

您的转换矩阵 A 有问题。它破坏y坐标值并将221分配给所有y坐标

您可以将 A 中 (2,2) 处的元素设为 1,问题应该得到解决。

于 2013-03-22T06:27:40.407 回答