Tha*_*ama 6 perl imagemagick image-processing gaussian gaussianblur
我正在寻找一种比使用GaussianBlur 更快的方法来模糊图像。我正在寻找
的解决方案可以是命令行解决方案,但是我更喜欢用perl表示法编写的代码。
实际上,我们使用Perl image 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);
Run Code Online (Sandbox Code Playgroud)
这可以正常工作,但是随着水平高度的增加,它消耗的时间似乎呈指数增长。
问题:如何改善模糊操作的时间?还有另一种更快的模糊图像方法吗?
关于哪个运算符“-blur”或“-gaussian-blur”更适合模糊图像存在一些混淆。首先,“-blur”更快,但它使用两阶段技术来做到这一点。首先在一个轴上,然后在另一个轴上。另一方面,“-gaussian-blur”运算符在数学上更正确,因为它同时在所有方向上模糊。取决于所涉及的模糊量,两者之间的速度成本可能是巨大的,可达 10 倍或更多。
[...]
总之,这两个运算符略有不同,但只是最小的。由于“-blur”要快得多,请使用它。我在几乎所有涉及模糊的例子中都做了。大的
那将是:
$image->Blur( 'x' . $level );
Run Code Online (Sandbox Code Playgroud)
但是Perl ImageMagick 文档在Blur和GaussianBlur(重点是我的)上都有相同的文字。我现在无法尝试,您必须自己进行基准测试。
模糊:使用给定半径和标准偏差 (sigma) 的高斯算子减少图像噪声并降低细节水平。
GaussianBlur:使用给定半径和标准偏差 (sigma) 的高斯算子降低图像噪声并降低细节水平。
使用较大的 sigma 值进行图像模糊非常慢。但是现在可以使用技术来加速这个过程。然而,这只是一种粗略的方法,可以使用一些数学上的严谨来改善结果。基本上,大模糊很慢的原因是因为您需要一个大窗口或“内核”来将图像中的每个像素的大量像素合并在一起。然而调整大小(使图像更小)做同样的事情,但在这个过程中产生更少的像素。该技术基本上是缩小图像,然后再次放大以生成严重模糊的结果。高斯滤波器对此特别有用,因为您可以直接指定高斯西格玛定义。
示例命令行代码是这样的:
Run Code Online (Sandbox Code Playgroud)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
我发现,为模仿模糊而调整图像大小的建议方法,对于非常大的sigma值(例如25或更大),输出看起来非常像素化。因此,我终于想到了下模糊模糊放大的概念,它的效果非常好(与具有大sigma的简单模糊几乎无法区分):
# 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
Run Code Online (Sandbox Code Playgroud)
在我的i5 2.7Ghz上,它显示的速度提高了10倍。
不确定我是否还能帮助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
Run Code Online (Sandbox Code Playgroud)
但是,对于 3840x2160,分辨率不能低于 2.5%。它将调整图像的大小。我猜其他尺寸的图片的 eps 值会有所不同。
应该注意的是,生成的图像大小明显不同!