Rmagick的频道意味着什么?那些价值观是什么?

时间:2014-01-22 21:09:02

标签: ruby imagemagick rmagick

我有以下代码试图找出图片的GreyChannel的标准偏差:

images = Magick::ImageList.new('mypic.jpg')

images.each do |image|
  grey = image.quantize(number_colors=256, colorspace=Magick::GRAYColorspace)
  p grey.inspect # -> mypic.jpg JPEG 69x120 69x120+0+0 DirectClass 8-bit
  p "GREY CHANNEL DEPTH"
  p.grey.channel_depth(Magick::GrayChannel) # -> 16
  p.channel_mean(Magick::GrayChannel) # -> [26929.525603864735, 17142.094885263676]
end

我的问题是:为什么这些价值如此之大? [26929.525603864735, 17142.094885263676]

我的意思是,这些是平均值和标准偏差,但我如何将它们转换为0-1的范围?我应该除以2 ^ 16还是2 ^ 8?这很令人困惑,因为即使图片看起来是8位,通道深度也是16。

我还注意到,对于另一张图片,通道深度为8,但p.channel_mean的值为[35394.21133333333,30093.66624626083]

1 个答案:

答案 0 :(得分:1)

图像可以量化为8位,但您仍在使用ImageMagick的内部格式。内部格式的深度在Magick::QuantumDepth

  

QuantumDepth
  量子中的位数。

和AFAIK,它是底层Ima​​geMagick库的编译时常量。如果您愿意,QuantumDepth为16对应于Magick::QuantumRange 65535(或0 ... 2**160 .. (2**16 - 1)。快速查看Magick::Pixel可能是追踪所有这些内容的良好起点。

如果您希望自己的值在[0, 1]区间内,请使用Magick::QuantumRange缩小它们:

p.channel_mean(Magick::GrayChannel).map { |x| x / Magick::QuantumRange }