Ruby Rmagick中的通道平均值?这些价值观是什么?

Ruby Rmagick中的通道平均值?这些价值观是什么?,ruby,imagemagick,rmagick,Ruby,Imagemagick,Rmagick,我有以下代码,试图找出图片灰度通道的标准偏差: 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

我有以下代码,试图找出图片灰度通道的标准偏差:

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.52560386473517142.094885263676]

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


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

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

QuantumDepth

量子中的位数

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

如果希望值在
[0,1]
间隔内,请使用
Magick::QuantumRange
将其缩小:

p.channel_mean(Magick::GrayChannel).map { |x| x / Magick::QuantumRange }
你有没有试过这一切#000,#fff,#888,#。。。查看是否有任何明显的关系?然后回到文档,看看是否有任何证据支持你的实证结果。是的。在8位pic中尝试使用#000和#fff,平均值为65535,标准偏差为0。所以我假设它不关心pic的位数,而是当前ImageMagick的位数,在我的例子中,它是16位相关的: