gpt4 book ai didi

python - PIL透视变换,计算出(a, b, c, d, e, f, g, h)

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:01 27 4
gpt4 key购买 nike

我正在尝试使用 PIL 对图像进行透视变换,我有图像角的坐标和图像角应该结束的坐标。我不确定如何获取“数据”参数的(a、b、c、d、e、f、g、h)。

我知道这与此有关: http://bishopw.loni.ucla.edu/AIR5/2Dperspective.html但我不确定这个页面是什么意思。

最佳答案

您可以通过求解方程得到参数:T.x1 + v= x2 其中x1 是坐标系1(原始图片)中的点坐标,x2 是新坐标系(倾斜或旋转或3d)。 x1、x2、v 是 2 x 1 向量,T 是 2 x 2 矩阵。例如 x1 = (x1x, x1y), x2 = (x2x,x2y) , v = (c,f) 和

T = a b
d e

如果你不懂矩阵代数,你可以通过消去变量来解决这个问题。对于每个点,您都会得到两个方程式,例如:

a*x1x + b*x1y + c = x2x
d*x1x + e*x1y + f = x2y

如果您现在插入其中一个角点。假设 x1 = (0,1) 和 x2 = (0,4) 你得到:

a*0   + b*1   + c = 0
d*0 + e*1 + f = 4

从中你得到:

b = -c
e = 4-f

现在,如果您对其他角点重复此操作(并使用 b = -c 的知识)。您可以求解所有变量的数值。

提示,在计算变换之前,将原始图片坐标缩放到单位正方形 (0,0)、(0,1)、(1,0) 和 (1,1)。这样你就有很多 1 和 0。数学方法称为高斯消元法(使用google或wikipedia->高斯消元法->算法示例)。

注意im.tranform中的数据有六个参数(2d -> 2d变换):

Data is a 6-tuple (a, b, c, d, e, f) which contain the first two rows from an affine transform matrix. For each pixel (x, y) in the output image, the new value is taken from a position (a x + b y + c, d x + e y + f) in the input image, rounded to nearest pixel.

编辑: ups,上面是仿射变换。你问的是透视转换。功能相同,但参数不同。数据应该是这样的:

Data is a 8-tuple (a, b, c, d, e, f, g, h) which contains the coefficients for a perspective transform. For each pixel (x, y) in the output image, the new value is taken from a position (a x + b y + c)/(g x + h y + 1), (d x + e y + f)/(g x + h y + 1) in the input image, rounded to nearest pixel.

所以你的等式是 Q.x3 = x4,其中原始坐标 x3 是 (x3x, x3y,1),变换后的坐标 x4 是 (x4x, x4y, 1),对于 Q:

Q = a b c
d e f
g h 1

与 AFFINE 相比,您将常量 v 嵌入到矩阵中。现在你的方程变成:

a*x3x + b*x3y + c*1 = x4x    
d*x3x + e*x3y + f*1 = x4y
g*x3x + h*x3y + 1*1 = 1

通过高斯消元法作为仿射变换求解。

关于python - PIL透视变换,计算出(a, b, c, d, e, f, g, h),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19259331/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com