ImageMagick:寻找模糊图像的快速方法

时间:2016-02-26 10:35:25

标签: perl image-processing imagemagick gaussian gaussianblur

我正在寻找一种更快的模糊图像的方式,而不是使用 GaussianBlur 解决方案我正在寻找可以是命令行解决方案,但我更喜欢perl表示法中的代码。

实际上,我们使用Perl图像magick API来模糊图像:

# $image is our Perl object holding a imagemagick perl image
# level is a natural number between 1 and 10
$image->GaussianBlur('x' . $level);

这样可以正常工作,但随着关卡高度的增加,它消耗的时间似乎呈指数级增长。

问题:如何改善模糊操作所用的时间? 是否有另一种更快速的方法来模糊图像?

3 个答案:

答案 0 :(得分:4)

我发现用于模糊模仿的the suggested method调整大小的图像使得输出看起来非常像像是非常大的sigma值,如25或更多。所以我终于想到了缩减模糊 - 放大,这会产生非常好的结果(几乎与大西格玛的简单模糊无法区分):

# plain slow blur
convert -blur 0x25 sample.jpg blurred_slow.jpg
# much faster
convert -scale 10% -blur 0x2.5 -resize 1000% sample.jpg blurred_fast.jpg

在我的i5 2.7Ghz上,速度提升了10倍。

答案 1 :(得分:3)

documentation speaks of the difference between Blur and GaussianBlur

  

对于哪个运营商,“-blur”或者哪个运营商存在一些混淆   “-gaussian-blur”更适合模糊图像。首先是“-blur”   更快,但它使用两阶段技术。先进一个   轴,然后在另一个。另一方面是“-gaussian-blur”运算符   手在数学上更正确,因为它在所有方向上模糊   同时。两者之间的速度成本可能是巨大的   因子为10或更多,取决于所涉及的模糊量。

     

[...]

     

总之,两个运营商略有不同,但仅限于此   最低限度。因为“-blur”要快得多,所以请使用它。我做的几乎都是   涉及模糊的例子。大

那就是:

$image->Blur( 'x' . $level );

但是Perl ImageMagick documentationBlurGaussianBlur上都有相同的文字(强调我的)。我现在不能尝试,你必须自己做基准测试。

  

模糊:使用给定半径和标准差(sigma)的高斯算子降低图像噪声并降低细节水平。

     

GaussianBlur:使用给定半径和标准偏差(sigma)的高斯算子降低图像噪声并降低细节水平。

alternative that the documentation also lists正在将图像调整为非常小,然后再次放大。

  

使用大sigma值进行图像模糊非常慢。但是onw   技术可以用来加速这个过程。然而,这只是一个   粗糙的方法,可以使用一些数学上的严谨性来改进   结果。因此,大模糊的原因很慢是因为你   需要一个大窗口或'内核'来合并大量的像素,为   图像中的每个像素。然而调整大小(制作图像   更小的)做同样的事情,但产生更少的像素   处理。该技术基本上缩小了图像,然后将其放大   再次产生沉重的模糊结果。高斯滤波器是   对此特别有用,因为您可以直接指定高斯   Sigma定义。

示例命令行代码是:

convert  rose: -blur 0x5   rose_blur_5.png
convert rose: -filter Gaussian -resize 50% \
      -define filter:sigma=2.5 -resize 200%  rose_resize_5.png

答案 2 :(得分:1)

不确定是否仍然可以帮助OP,但是最近我对模糊的锁屏图片尝试了相同的操作。 我发现省略-blur 部分可以节省更多的计算时间,并且仍然可以为4K图片提供出色的结果:

convert in.png -scale 2.5% -resize 4000% out.png
# real: 0.174s user: 0.144s size: 1.2MiB

convert in.png -scale 10% -blur 0x2.5 -resize 1000% out.png
# real: 0.136s user: 2.117s size: 1.2MiB

convert in.png -blur 0x25 out.png
# real: 2.425s user: 21.408s size: 1KiB

但是,对于3840x2160,您不能低于2.5%。它将调整图像大小。我猜对于其他尺寸的图片,eps值会有所不同。

请注意,生成的图像大小明显不同!