我正在尝试在两个图像上实现仿射变换。首先,我在两个图像中找到匹配对。其中一个是缩放图像,另一个是参考图像。这些对返回给我的系数为:
|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
我已经更改了代码并且得到了这个结果而没有任何黑色像素。我有点倾斜..虽然已经删除了给定图像中的缩放效果。