如何使用矩阵对图像进行几何变换

如何使用矩阵对图像进行几何变换

如何使用自定义数学 2x2 矩阵转换图像?要清楚的是,数学不是问题;我已经有了我想要的矩阵。我只是想知道如何使用软件将转换应用于图像。

我在 Google 上搜索过 GIMP 插件(因为我知道它使用 3x3 矩阵来实现透视,但它不允许我输入 3x3 矩阵)。有一个名为“Mathmap”的插件,但它对我来说不起作用,因为它支持旧版本的 GIMP。我也搜索过能够做到这一点的程序,但没有找到。

该变换是几何变换,而不是过滤器变换。

如果有人能帮助我,我将不胜感激。

答案1

有一个 GIMP 过程调用,旨在由脚本和插件使用,可以直接从交互式提示中调用。

这是一个示例 Python 会话,它检索 GIMP 中打开的最后一个图像的引用,并对其应用 [2, 0, 0, 0, 2, 0, 0, 0, 1] 变换。

您可以在 GIMP 中访问 Python 控制台 filters->python-fu->console

GIMP 2.8.14 Python Console
Python 2.7.5 (default, Jun 25 2014, 10:19:55) 
[GCC 4.8.2 20131212 (Red Hat 4.8.2-7)]
>>> img = gimp.image_list()[0]
>>> img
<gimp.Image '[Untitled]'>
>>> matrix = [2,0,0, 0,2,0, 0,0,1]
>>> more_parms = [True, TRANSFORM_RESIZE_ADJUST]
>>> drawable = pdb.gimp_drawable_transform_matrix_default(img.layers[0], *(matrix + more_parms))

我可以通过单击 Python 会话对话框底部的“浏览”按钮来找到“gimp_drawable_transform_matrix_default 过程”,搜索“matrix”,当我找到合适的调用时,单击“应用”:将函数调用粘贴到带有模拟参数的 Python 会话中,我想替换它。

然后,我利用 Python 的“语法糖”将序列元素作为单独的参数传递给函数调用 - 这就是“*”的作用。为了使其工作,我必须将 2 个额外参数(插值和剪辑模式)附加到矩阵系数。

这实际上与以下调用相同

pdb.gimp_drawable_transform_matrix_default(img.layers[0], matrix[0], matrix[1], matrix[2], ...., matrix[9], True, TRANSFORM_SIZE_ADJUST)将会。

答案2

值得一提的是,我正在运行一个支持 GEGL 的 GIMP v2.9,安装并通过    Ubuntu 特有

sudo add-apt-repository ppa:otto-kesselgulasch/gimp-edge
sudo apt-get 更新
sudo apt-get 安装 gimp gimp-resynthesizer

我不知道是否:
Menu: Filters > Generic > Convolution Matrix
...可能是你所追求的?

答案3

如果您不介意商业用途,我可以使用一个不错的应用程序来完成各种图像处理任务:批量图像调整器(尽管它不仅仅是一个调整大小工具)

它有一个专门的操作,专门用于执行您描述的任务:

在此处输入图片描述

您可以从命令行、作为 GUI、按计划或在后台连续运行它,因此它非常灵活。

由于某种原因,他们似乎没有在主页上提供下载,但我能够从他们网站的其他地方找到免费版本的链接,希望它能起作用:BIR 下载

相关内容