首页 > 解决方案 > 基于3点的图像变换

问题描述

我想根据两个重叠图像上识别的 3 个点来转换(平移、旋转和缩放)图像。基于 3 个点的像素坐标,我想创建一个合并两者的大 tiff。对于下一次重叠,我想做同样的事情等,直到我得到一个结合所有图片的大 tiff。这有点像地理配准,但没有使用坐标。问题是我没有经验 matplotlib。到目前为止,我已经创建了一个脚本,它并排显示每对重叠的图像,当我关闭窗口时,下一对会打开等等。我还设法从这些图像上的点击点获取像素坐标。但现在我必须根据 3 点开始转换,我只是不知道从哪里开始。对可用功能等有任何帮助吗?

编辑:图像是低分辨率热图像,所以我认为自动转换不会起作用

标签: python-3.xmatplotlibimage-processing

解决方案


您可以使用wand哪个 Python 绑定到ImageMagick。所以,从这张图片开始:

在此处输入图像描述

我们可以将红色顶点 (138,80) 扭曲到左上角,绿色 (43,22) 扭曲到左下角,蓝色 (49,125) 扭曲到右下角,如下所示(图像为 152x152):

#!/usr/bin/env python3

from wand.image import Image

# Open image and distort, giving start x,y and end x,y for 3 points
with Image(filename='start.png') as img:
    points = (138, 80, 0, 0,        # Red vertex
               43, 22, 0,152,       # Green vertex
               49,125, 152,152)     # Blue vertex
    img.distort('affine',points)

    # Save result
    img.save(filename='result.png')

在此处输入图像描述


您也可以从命令行在终端中执行相同的操作:

magick start.png -distort affine "138,80 0,0 43,22 0,152 49,125 152,152" result.png

关键词:图像处理、Python、扭曲、变形、仿射变换、变换、缩放、旋转、ImageMagick。


推荐阅读