我需要找到一种通过位移矢量使图像变形的方法。我发现类似的东西,但是不能应用于我的问题。
这是我要变形的示例图像:
现在,我在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)
这是结果图像:
问题在于,在这种方法中,我需要指定矩形区域和另一个四边形区域以适合第一个区域。我的移位向量只是坐标([x1, y1, x2, y2]
,其中x1
和y1
是源坐标,x2
和y2
是目标坐标)所以我需要是一种在不同网格上进行变形的方法,例如:
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中找到解决方案,但到目前为止没有成功。有人知道这种方法吗?
我可能没有完整描述问题,所以请问是否有不清楚的地方。