全く同じ画像だけではなく、より幅広く'似てそう'な画像を探します。
OpenCVのインストール
OpenCVのインストールに関するページがネット上に多数あることから、OpenCVのインストールの難しさ(というより、やっかいさ?)が伺えますが、例に違わず僕もOpenCVのインストールに手間取ってしましました。
最終的には、
・brewでインストールしたnumpy
, opencv3
をアンインストールした上で、
・pip3 install opencv-python
でopencvがpyhtonで使えるようになりました、のでご参考までに。
画像類似度計算
ヒストグラムの類似度により、画像の類似度を計算します。
ヒストグラムとは画像の明度の分布のことです。(ヒストグラム - CyberLibrarian)
OpenCVのcalcHist()
関数で画像のヒストグラムを計算できます。
またヒストグラムの比較はcompareHist()
関数でできます。((’ω')便利ニナッタヨネー)
ヒストグラムの比較には4つの手法があり、それぞれ特徴があります。(参考ページ)(Histograms — OpenCV 2.4.13.7 documentation)(ヒストグラムの比較 - にのせき日記)
各手法に対し閾値(threshold)を設定してやり、類似度が閾値以上(手法によっては以下)の画像グループを抜き出して、表示するプログラムを作成しました。画像が入ったフォルダを指定すると、そのフォルダの画像の中で類似しているものを探します。
プログラムの__doc__に説明を書いてありますが、
METHODに0~3を入れて手法を選択、THRESHOLDに数字を入れて閾値を設定してやるとプログラムが動きます。(それぞれデフォルトを一応用意しました) <--- あくまで僕の経験則なので、自分でどんどんいじってください。
プログラム中の連結成分の計算のところは、例えば画像Aと画像Bが類似度が高く、かつ、画像Bと画像Cも類似度が高い時に、類似度が高い画像グループとしてA, B, Cを出力するためのデータ整理をしています。
実行結果
ネッコ
フォルダを作成します。
python3 image_compare.py ~/ネッコ/
で上のスクリプトを実行すると
4つの類似画像グループができました。それぞれ
確かに類似度が高そうなグループになっているな〜という感じですね。
METHOD=0 python3 image_compare.py ~/ネッコ/
で手法を変更したり、
MEDHOD=3 THRESHOLD=0.12 python3 image_compare.py ~/ネッコ/
などと閾値を変更すると結果も変わってきます。
色々試してみてください。
【送料無料】 機械学習スタートアップシリーズ これならわかる深層学習入門 KS情報科学専門書 / 瀧雅人 【本】 |