画像内で使用されている色の統計を取るサンプル
RMagickを使って、画像内で使用されている色の統計を取得するサンプルを書いてみました。使用されている色ごとに割合を算出し、使用量の多い順に出力します。
require 'rubygems' require 'RMagick' imgs = Magick::Image.read("./kitten.jpg") img = imgs.first # 画像内で使用されている色の一覧を集計 histogram = img.color_histogram.inject({}) {|h,pair| color = pair[0].to_color( Magick::AllCompliance, false, 8, true ) h[color] ||= 0 h[color] += pair[1] h }.sort_by {|pair| pair[1]*-1 } #使用されている順にソート #割合を算出 pixel_count = img.rows * img.columns histogram = histogram.map {|i| {:color=>i[0], :rate=>(i[1].to_f/pixel_count*10000).to_i/100.0 } }.reject {|i| i[:rate] <= 0 } # 0.01%未満は除外 #色の一覧を表示 histogram.each {|color| puts "#{color[:color]} : #{color[:rate]}%" }
#E7E8E3 : 2.1% #E8E9E4 : 1.45% #E5E6E0 : 1.02% #E6E7E1 : 0.93% #E6E7E2 : 0.82% #E4E5DF : 0.7% #E2E3DD : 0.61% #E4E5E0 : 0.43% #E3E4DE : 0.42% #E1E2DC : 0.4% #C9C9BD : 0.37% #E0E1DB : 0.33% #E3E4DF : 0.31% #E7E8E2 : 0.3% ... 略
んー、ほとんど1%以下かー。ある程度色数を絞るというか、近似色をまとめて統計するような工夫が必要だな。