如果我使用以下方法变换图像:
此代码取自此处:https://stackoverflow.com/a/37350619/259757
im_transformed = im.transform(im.size, Image.MESH, mesh)
给定原始图像中的特定坐标(x,y),如何计算im_变换后的新坐标?基本上,我可以将相同的变换应用于特定的单点,就像仿射变换一样
我想这样做的原因是,假设我知道图像中一张笑脸的位置。在第二张经过变换/扭曲的图像中,我想预测笑脸的位置,并将预测结果与应该的位置进行比较。我知道这并不精确,但我的想法是,我可以用已知的笑脸位置生成干净的图像,扭曲它们,并在x,y中有一个新的位置,笑脸应该在扭曲的图像中。这将允许我为机器学习模型生成训练数据
对于仿射变换,这非常简单,但是对于网格变换,我不知道如何做到这一点
因此,在对PIL代码进行一点挖掘之后,我可以发现:
网格变换只是四边形变换的多种应用
每个四边形变换将源图像中的四边形映射到目标图像中的矩形
让我们看看什么是四元变换:PIL quad transform
这是一个反向映射,告诉如何对源图像中的点进行采样,以获得目标图像中位置xin、yin中的像素
参数是按以下方式计算的,我重写了它,使它看起来更漂亮:
问题是您需要从四边形中的点到矩形中的结果点的变换
所以你需要为x和y解以下方程(不是为x和y!!!!):
这个反演不是最好的,它给出了一个x和y的二次方程,所以你需要根据得到的坐标来决定采取哪种解决方案
有关详细解释,请参阅Answer
相关问题 更多 >
编程相关推荐