位移向量使图像变形

时间:2019-04-05 16:18:35

标签: python image-processing

我需要找到一种通过位移矢量使图像变形的方法。我发现类似的东西,但是不能应用于我的问题。

这是我要变形的示例图像:

source image

现在,我在PIL中找到了一种方法,这是示例代码:

from PIL import Image

image = Image.open('Untitled.tif')
grid = [
    [
        # 1
        [0, 0, 300, 300],
        [0, 0, 0, 300, 400, 400, 300, 0]
    ],
    [
        # 2
        [300, 0, 600, 300],
        [300, 0, 400, 400, 500, 400, 600, 0]
    ],
    [
        # 3
        [600, 0, 900, 300],
        [600, 0, 500, 400, 900, 300, 900, 0]
    ],
    [
        # 4
        [0, 300, 300, 600],
        [0, 300, 0, 600, 400, 500, 400, 400]
    ],
    [
        # 5
        [300, 300, 600, 600],
        [400, 400, 400, 500, 500, 500, 500, 400]
    ],
    [
        # 6
        [600, 300, 900, 600],
        [500, 400, 500, 500, 900, 600, 900, 300]
    ],
    [
        # 7
        [0, 600, 300, 900],
        [0, 600, 0, 900, 300, 900, 400, 500]
    ],
    [
        # 8
        [300, 600, 600, 900],
        [400, 500, 300, 900, 600, 900, 500, 500]
    ],
    [
        # 9
        [600, 600, 900, 900],
        [500, 500, 600, 900, 900, 900, 900, 600]
    ]
]
result = image.transform(image.siresultingage.MESH, grid)

这是结果图像:

result image

问题在于,在这种方法中,我需要指定矩形区域和另一个四边形区域以适合第一个区域。我的移位向量只是坐标([x1, y1, x2, y2],其中x1y1是源坐标,x2y2是目标坐标)所以我需要是一种在不同网格上进行变形的方法,例如:

grid = [
#    x1   y1   x2   y2
    [300, 300, 200, 200],
    [600, 300, 700, 200],
    [300, 600, 200, 700],
    [600, 600, 700, 700]
]

结果(如果我没有记错的话)将完全相同,但是输入数据与我所拥有的相似。重要的是我需要使用TPS作为插值方法。我试图在opencv,PIL,scikit映像和GDAL中找到解决方案,但到目前为止没有成功。有人知道这种方法吗?

我可能没有完整描述问题,所以请问是否有不清楚的地方。

0 个答案:

没有答案