尝试仅使用图像导出二维变换矩阵

Mik*_*ike 3 transformation matrix

我不知道这是否应该放在数学论坛或编程论坛中,但我会将其发布在两个论坛中,看看我得到了什么。

我有两张计算机图像...其中一张是“原始”图像(一个大的 TIF 文件)。另一张是原始图像的转换版本……它在软件程序中经过旋转、剪切和翻译。我需要对转换后的图像进行一些处理,但我需要原始图像中每个像素的 (xy) 坐标才能完成计算。

我知道图像是通过 3x3 变换矩阵进行旋转和剪切的。如果我有矩阵,我可以自己从第一张图像中导出第二张图像(反之亦然)。我不知道它到底旋转、剪切或平移了多少,所以我不能仅仅从一组已知的变换中导出矩阵。我所拥有的是每个图像中的一组对应点(角点等)及其对应的(x,y)坐标。所以这是我的困境:

使用一组相应的变换点((x,y) -> (x',y'),其中三个或更多),我可以导出用于将一个图像转换为另一个图像的变换矩阵吗?如果我可以导出矩阵,我就可以求解所有像素(所有 1800 万个像素)的原始坐标,并完成我需要做的计算。

有人可以帮忙吗?我熟悉线性代数……只是不够熟悉,无法在不费尽心思的情况下推导出这个代数。任何事情都值得赞赏!

  • 麦克风

Fra*_*ger 5

不确定你想要手动还是自动

手动的

如果指定矩形四个角的变换坐标,则可以导出变换方程:

x' = c1 * x + c2 * y + c3 * x * y + c4
y' = c5 * x + c6 * y + c7 * x * y + c8
Run Code Online (Sandbox Code Playgroud)

(摘自 Pierre Wellner 的《在 DigitalDesk 上与纸张交互》,第 67 页)

现在您只需求解方程的系数即可。

对于四个点对,可以通过高斯消元法快速求解两组四个联立线性方程,从而找到 c1-8 的值。

最后,您可以将这些方程转换为您想要的 3x3 矩阵。上述方程足够强大,可以进行非线性变换,您可以将其简化为 3x3 仿射剪切矩阵。

但我会坚持使用非线性方程(上面),因为它们可以处理透视变形

自动的

方法相同,但您可以使用边缘检测器与线条检测算法相结合来查找构成矩形的一组 4 条左右的线条。

如果您的图像矩形确实很突出(深色背景上的白色图像),那么您可以使用OpenCV 的特征检测等库中提供的角点检测(请参阅 参考资料)。cv::cornerHarris

您可以将这些线相交以找到四个角并使用变换方程。