LoginSignup
2
1

More than 3 years have passed since last update.

2つの画像をイメージハッシュで比較する

Last updated at Posted at 2020-08-13

はじめに

2つの画像の同一性をイメージハッシュで比較方法を確認する。

イメージハッシュについて

一般にハッシュは、文字列からハッシュ関数を使って得られた値を指す。
画像でも同じようなことができて、要約した値が生成できる。
そのため大量にある画像をイメージハッシュを使うことで、類似したパターンの画像を絞り込むことが可能。

ハッシュ関数は複数あるので、比較するためには1つに絞りこむ必要がある。
参照:
https://qiita.com/mamo3gr/items/b93545a0346d8731f03c

2つのイメージハッシュを比較する

ハッシュの距離を計算するには、排他的論理和(XOR)をとり、「1」をカウントする。

ソースコード例(Python)

sample.py
hash_a = 'b69cbd89090b8f8e'
hash_a_value = int(hash_a, 16)
hash_b = 'b69c3d89090b0f8e'
hash_b_value = int(hash_b, 16)

hamming_distance = bin(hash_a_value ^ hash_b_value).count('1')
print(hamming_distance)

上記ソース内のハッシュのハミング距離を計算する。

hash_aを2進数に変換すると 1011011010011100101111011000100100001001000010111000111110001110
hash_bを2進数に変換すると 1011011010011100001111011000100100001001000010110000111110001110
排他的論理和をとると   0000000000000000100000000000000000000000000000001000000000000000 となる。
1の数は2となり、ハミング距離は 2 になる。

ハミング距離による画像の類似度

ハミング距離が10以下の場合、ほぼ同一画像となるが確実に同一とは言えない。
もし同一であることを確定させるのであれば、別の処理で確定させる必要がある。

まとめ

画像の同一性を保証するには、イメージハッシュのみでは不足している。
画像の特徴量などを使う必要がある。

比較する画像数が少なければ、画像の特徴量を使って比較で事足りるが、
数千万画像などに対して比較するのであれば、イメージハッシュで比較対象を絞り込むのも有りではないかとおもう。

特徴量などの記事
https://qiita.com/hmichu/items/f5f1c778a155c7c414fd
https://qiita.com/hitomatagi/items/caac014b7ab246faf6b1

2
1
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
2
1