読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

画像内で使用されている色の統計を取るサンプル

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%以下かー。ある程度色数を絞るというか、近似色をまとめて統計するような工夫が必要だな。