これは、大まかに 2 つの手順で行うことができます。
まず、RMagick を使用して画像のヒストグラムを取得します。
http://www.simplesystems.org/RMagick/doc/image1.html#color_histogram
次のステップは、数式を適用することです。以下に提供するものは、頭のてっぺんから思いついたものです。ただし、他にもいくつかあります。
http://en.wikipedia.org/wiki/Contrast_(vision)#Formula
次に、各ピクセルにその重みを掛けてから、ピクセルの総数で割って、平均色を計算します。このようなもの:
color_histogram.each do |pixel, count|
total_red += pixel.red*count
total_blue += pixel.blue*count
total_green += pixel.green*count
end
average_red = total_red / pixel_count average_blue = total_blue / pixel_count average_green = total_green / pixel_count
「平均色」を取得したら、各ピクセルと平均の間の合計距離を決定します。
color_histogram.each do |pixel, count|
distance_red += Math.abs(average_red - pixel.red)
distance_blue += Math.abs(average_blue - pixel.blue)
distance_green += Math.abs(average_green - pixel.green)
end
合計distance_red + distance_blue + distance_green
は、画像の「コントラスト」にほぼ等しくなるはずです。