LoginSignup
13
10

More than 5 years have passed since last update.

画像の同一性をHuモーメントで比較してみた

Last updated at Posted at 2015-05-28

概要

「Huモーメントという指標で艦これ画像を比較してみた。」

Huモーメントについて

画像を比較する指標は、Huモーメント不変量を使いました。
Image moment - Wikipedia(en)

Huモーメントは画像の回転や拡大縮小に対して不変な値を取ります。
実装はOpenCVに含まれているので、そのまま使うことができます。

またPython実装は下記を参考にしています。
画像読み込みはcv2.IMREAD_GRAYSCALE。
参考:Huモーメント不変量による類似画像検索

画像セットは@kiguchiyuraさんの艦これアイコンまとめ【フリーアイコン】からお借りしました。

matome.png

吹雪 熊野 時雨 時雨改二 大井改 大井改二 Z1 Z3
吹雪 0.00 12.45 5.78 5.02 12.63 12.94 9.07 9.02 3.94 4.04
熊野 12.45 0.00 8.08 9.76 0.73 0.94 3.71 3.72 9.02 9.29
5.78 8.08 0.00 9.32 8.14 8.08 4.82 4.76 9.67 9.66
5.02 9.76 9.32 0.00 10.03 10.07 6.40 6.33 1.73 8.47
時雨 12.63 0.73 8.14 10.03 0.00 0.46 4.15 4.16 9.13 9.13
時雨改二 12.94 0.94 8.08 10.07 0.46 0.00 4.54 4.55 9.53 9.53
大井改 9.07 3.71 4.82 6.40 4.15 4.54 0.00 0.08 5.53 12.41
大井改二 9.02 3.72 4.76 6.33 4.16 4.55 0.08 0.00 5.46 12.40
Z1 3.94 9.02 9.67 1.73 9.13 9.53 5.53 5.46 0.00 7.23
Z3 4.04 9.29 9.66 8.47 9.13 9.53 12.41 12.40 7.23 0.00

時雨や大井などの改二勢は改造前後の見た目もそっくりなので納得感がありますね。
一方で雷と電が一見良く似ているのに大きな差が出ているのは、髪の色の差を拾っているんじゃないかと思います。
時雨改二と吹雪でもっとも大きな差が検出されている理由も同様かもしれません。
今回はグレースケールで画像を読んでいるので、RGBなどを考慮すればもう少し近づくかもしれません。

色々な画像を比較

  • 回転変形、部分(台詞)変更、拡大縮小などの処理を通した場合

ikaduti.png ikaduti_r.png ikaduti_s.png ikaduti_sc.png ikaduti_sc2.png

雷(オリジナル) 雷(回転) 雷(台詞変更) 雷(縮小・余白透過) 雷(縮小・余白埋め)
雷(オリジナル) 0.00 0.16 0.29 0.03 5.88
雷(回転) 0.16 0.00 0.39 0.13 5.96
雷(台詞変更) 0.29 0.39 0.00 0.31 5.71
雷(縮小・余白透過) 0.03 0.13 0.31 0.00 5.90
雷(縮小・余白埋め) 5.88 5.96 5.71 5.90 0.00

縮小された余白を白で埋めたサンプルだけ異なる画像の判定がでています。なんでだろう。

  • waifu2x

AHDu0cq.png WJqqUHV.png
画像出典:Using Waifu2x to Upscale Japanese Prints

img1.png img2.png
img1.png 0.00 0.05
img2.png 0.05 0.00

waifu2xで変換した画像を比較したもの。元画像が同じなのでほぼ同値ですね。
余談ですが、この浮世絵の変換をレポートしているのはジョン・レシグ(jQueryの開発者)だったりします。(Wikipedia

手元でHuモーメントを比較する環境構築

サンプル次第ではもっと面白い結果が出ると思うので、Windows向けの実行手順をまとめておきます。
Python2、numpy、OpenCVを導入すれば同じ比較をすることができます。

インストールの準備

パッケージ管理ツールとしてChocolateyを使いました。Windows版のapt-getやyumのようなものです。
Nugetパッケージが登録されているソフトウェアはchocolateyコマンド1つで入り、一括管理できます。

OpenCVのインストール

公式配布ページからインストーラをダウンロードして展開するだけです。とても楽ですね。
今回は3.0.0-rc1をインストールしています。

Pythonのインストール

chocolateyを使います。
Python2系のパッケージは2つ(python2とpython2-x86_32)ありますが、chocolateyで配布されているnumpyと自動で連動してくれるPythonは下記のコマンドからインストールできます。

$ chocolatey install python2-x86_32
$ chocolatey install numpy

OpenCVのインポート

OPENCV_FILE_PATH\opencv\build\python\2.7\x64 にあるcv2.pydを
C:\Python27\Lib\site-packagesにコピーする。

sample.py
import cv2
#code
print "hoge"

これでPython上でcv2が使えるようになるはずです。簡単。
ぜひ色々やってみてください。

追記

インストール手順や環境によっては、PATHがうまく設定されない場合があるかもしれません。
その場合、
C:\OPENCV_FILE_PATH\opencv-3.0.0\build\x64\vc11\bin
C:\python2-x86_32
へのパスを通してみてください。

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10