使用imagemagick

时间:2016-01-27 15:49:04

标签: image imagemagick blur standard-deviation

我想评估图片是否模糊。 实际上使用imagemagick 6.7.7-10 我已经看到识别命令提供了一些可能有趣的信息,并命令:

identify  -format "%[filename] sd:%[standard-deviation]\n" floue1.jpg

答案> floue1.jpg sd:7876.9

似乎是一个好的开始。 但是,如果我使用:

identify -verbose floue1.jpg | grep stan

  standard deviation: 34.8189 (0.136545)
  standard deviation: 26.7428 (0.104874)
  standard deviation: 29.8434 (0.117033)
  standard deviation: 30.6494 (0.120194)

我看到4个标准偏差值,一个是全局的,每个颜色通道一个,这些值与我用第一个命令得到的单个值不同。

这些结果来自/是什么意思,我如何选择(打印)其中任何一个?

1 个答案:

答案 0 :(得分:2)

它的工作原理如下:

identify -verbose floue1.jpg | grep stan
  standard deviation: 39.0047 (0.15296)
  standard deviation: 36.45 (0.142941)
  standard deviation: 37.9805 (0.148943)
  standard deviation: 37.8263 (0.148339)

该行的第一个数字在0-255范围内缩放,第二个数字标准化为0到1的范围。

第一行是红色标准偏差,第二行是绿色,第三行是蓝色,而最后一行是所有通道的平均值。

如果您想单独访问它们,请使用:

convert floue1.jpg -format "%[filename] sd:%[fx:standard_deviation.blue]\n" info:
floue1.jpg sd:0.148943

或者,您可以选择不同的一个并进行缩放:

convert floue1.jpg -format "%[filename] sd:%[fx:int(standard_deviation.green*255)]\n" info:
floue1.jpg sd:36

如果你想要一次性使用bash,你可以这样做:

read sdr sdg sdb <<< $(convert floue1.jpg -format "%[fx:int(standard_deviation.red*255)] %[fx:int(standard_deviation.green*255)] %[fx:int(standard_deviation.blue*255)]" info: )

echo $sdr, $sdg, $sdb
39, 36, 37