我有以下代码试图找出图片的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]
答案 0 :(得分:1)
图像可以量化为8位,但您仍在使用ImageMagick的内部格式。内部格式的深度在Magick::QuantumDepth
:
QuantumDepth
量子中的位数。
和AFAIK,它是底层ImageMagick库的编译时常量。如果您愿意,QuantumDepth为16对应于Magick::QuantumRange
65535(或0 ... 2**16
或0 .. (2**16 - 1)
。快速查看Magick::Pixel
可能是追踪所有这些内容的良好起点。
如果您希望自己的值在[0, 1]
区间内,请使用Magick::QuantumRange
缩小它们:
p.channel_mean(Magick::GrayChannel).map { |x| x / Magick::QuantumRange }