【发布时间】:2015-02-25 13:00:50
【问题描述】:
使用 ImageMagick 的 convert 对照片进行桶形失真以校正明显可见的枕形失真,我提供了正的 a、b 或 c 值(来自我的镜头 + 焦距的数据库)。这导致图像经过校正,具有原始宽度和高度,但包括非矩形、弯曲/扭曲的边界,因为图像向其中心进行了校正。简化示例:
convert rose: -virtual-pixel black -distort Barrel '+0.0 +0.1 +0.0' out.png
如何自动将黑色、弯曲的边框裁剪为玫瑰内原始纵横比中可能最大的矩形?
ImageMagick 网站说,参数“d”是自动计算的,可以做到这一点(导致线性失真有效地放大图像并将弯曲的边框推到图像边界之外),但是 imagemagick 计算的值似乎针对不同的东西(ubuntu 12.04上的v6.6.9)。如果我猜测并手动指定一个“d”,我可以得到预期的结果:
convert rose: -virtual-pixel black -distort Barrel '+0.0 +0.1 +0.0 +0.6' out.png
对于我的裁剪案例,给定的公式 a+b+c+d=1 似乎不是合适的 d。此外,d 似乎取决于图像的纵横比,而不仅取决于 a/b/c。如何让 ImageMagick 裁剪图像,或者如何计算合适的 d?
更新
我发现 Fred 的 ImageMagick 脚本 innercrop (http://www.fmwconcepts.com/imagemagick/innercrop/index.php) 可以满足我的需要,但有缺点,对我来说没有解决方案。它假定任意外部区域,因此需要很长时间才能找到裁剪矩形。它在 Unix 管道中不起作用,并且不保持原始纵横比。
更新 2
考虑这个问题让我认为计算“d”不是解决方案,因为更改 d 会引入或多或少的弯曲,并且似乎不仅仅是缩放。由 imagemagick 计算的 d=1-(a+b+c) 导致弯曲图像接触上/下界(对于横向图像)或左/右边界(对于纵向图像)。所以我认为正确的解决方案是计算新的 4 个角之一将被赋予 a/b/c/d 的位置,然后裁剪到这些新角。
【问题讨论】:
-
由于我昨晚的第一条评论似乎消失了,让我重复一遍:您能否提供您要处理的示例图像,以及
a、@987654328 的值@ 和c对您的相机/镜头/变焦组合有效? -
我当然可以,但我不明白这对这个问题有何影响。
rose:与任何图片一样好,并且完美地显示了问题,您的跳棋也是如此 - 动机发生的事情不是这里的问题。在我找到上传位置之前,您可以在玫瑰上使用 3 种扭曲“0.1 0 0”、“0 0.1 0”和“0 0 0.1”。现在您已经模拟了不同的(简化的)扭曲并具有不同的弯曲黑色边框。问题是,在每种情况下,黑色区域“缩小”的原因是什么。
标签: command-line imagemagick crop photos distortion