【问题标题】:Image transformation based on 3 points基于3点的图像变换
【发布时间】:2020-03-06 23:58:29
【问题描述】:

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

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

【问题讨论】:

  • 我假设您需要对原始数据进行一些数学运算,可能使用类似numpy
  • OpenCV 是您正在寻找的。我不记得确切的功能,但是如果您知道两个图像上的 3 个点,它可以计算仿射变换(平移+旋转+缩放,不要误认为需要更多点的透视图)并变换图像并将其覆盖在目标图像上一行。
  • @IcedLance 非常感谢队友,会调查的!!
  • @OferSadan 也许在该过程的稍后阶段我将能够使用它,但对于转换它似乎不是正确的库。谢谢

标签: python-3.x matplotlib image-processing


【解决方案1】:

您可以使用wand,它是一个与 ImageMagick 的 Python 绑定。所以,从这张图片开始:

我们可以像这样将红色顶点 (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。

【讨论】:

  • 看起来很有前途,我也去试试!非常感谢!
  • 我有一个问题,如果我从一个小范围内翻译坐标,例如1,1 到更大的,例如40,40;它会用像0这样的nodata值填充较低的值吗?这就是我需要的。图片可能更容易理解:drive.google.com/file/d/1TIv31ws0-k05vSIXYV8vwTqwYQMIaqKl/…
  • 我不明白你的意思。我提供了代码,所以也许只是尝试一下——ImageMagick 安装在大多数 Linux 发行版上,并且可以在 macOS 和 Windows 上免费使用。或者将您的图片添加到您的问题中,以便我可以尝试您想做的任何事情。谢谢。
  • 在 Imagemagick 中,您可以控制输入图像之外的像素值,因为它们使用 -virtual-pixel xxx 转换为输出。您有很多选择:颜色值或重复或镜像或平铺等,以了解如何在输出中填充缺失的数据。
  • 您还可以在 Python/OpenCV 中从 3 个点进行仿射变换。见opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/…
猜你喜欢
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 2010-10-14
  • 2020-03-12
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多