Imagemagickのidentifyコマンドで取れる統計値を使って、大雑把に画像を分類する。
機械学習とかディープラーニングとか、そういう高度な話ではない。
大量の画像があって、似通った画像を探したいときには役に立つかもしれない(おおざっぱだけど)。
identifyで画素平均値をとる
次のコマンドで画素平均とファイル名のリストを出力する。ついでに数字順ソートしておく
$ identify -format '%[mean], %f\n' *.png |sort -n > list.txt
$ head list.txt
7088.67, 574.png
7145.75, 387.png
7222.86, 318.png
7259.57, 084.png
7619.62, 155.png
7637.2, 158.png
7639.7, 177.png
7652.95, 305.png
7690.87, 519.png
7693.43, 364.png
似た画像順に並ぶようリネームする
ファイル名のprefixに画素平均順の連番を付け足して、ファイル名でソートすると似た画像が固まるようにする。
$ i=1; for f in `cat list.txt|cut -d',' -f2`; do g=m`printf '%03d' $i`_$f; mv $f $g; i=$((i+1)); done
確認
スライドショーを見てだいたい似た画像が固まっているか見てみてください。
identifyの統計値には %[mean]
のほかに %[entropy]
, %[standard-deviation]
などがありますが、実験した範囲では分類の大雑把さは似たり寄ったり。
画像全体の統計値だから、たまたま結果が近い画像同士は並んでしまう。ま、大雑把にやってるからしょうがないでしょう。
大雑把じゃなく分類したい人はディープラーニングとかを勉強しましょうね。
参考
ImageMagick: Command-line Tools: Identify
-format
で指定できる値
http://www.imagemagick.org/script/escape.php