Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

類似度・hash化

同一の画像であることを判別したり、画像の類似度を測る方法について。

Average Hash

  1. 画像を8 x 8など小さいサイズに縮小し、グレースケールなど特定の色の輝度だけにする

  2. ピクセル全体の平均値と、各ピクセルの値とを判定し、平均以上なら1、以下なら0とする

  3. 2つの画像を比較する際は、各ピクセルの{0, 1}の値の不一致な数や比率(一致度)で判定

例

Source
<Figure size 800x600 with 2 Axes>

1. 画像を8 x 8など小さいサイズに縮小し、グレースケールなど特定の色の輝度だけにする

縮小してグレースケールにして輝度の分布だけにする

<Figure size 800x600 with 2 Axes>

2. ピクセル全体の平均値と、各ピクセルの値とを判定し、平均以上なら1、以下なら0とする

<Figure size 800x600 with 2 Axes>

3. 2つの画像を比較する際は、各ピクセルの{0, 1}の値の不一致な数や比率(一致度)で判定

array([[1, 0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 1, 0, 0, 0, 0, 0]])
不一致ピクセル数 : 7
一致度 : 89.1%

以上の処理がまとめられたものが imagehash パッケージの average_hash関数

imagehash/imagehash/init.py at master · JohannesBuchner/imagehash

別の画像と判定

Source
<Figure size 800x600 with 2 Axes>
不一致ピクセル数 : 44
一致度 : 56.0%

OpenCV

最近のopencvでも使えるらしい?

【Python】OpenCV img_hashモジュールで画像ハッシュ計算・比較

参考文献を探す場所としてOpenCVのドキュメントが有用

OpenCV: The module brings implementations of different image hashing algorithms.