Pythonで類似度検出② ヒストグラム比較
はじめに
類似度検出の第一歩としてヒストグラム検出から見ていきたいと思います。
いずれはディープラーニングなんかも駆使して認識とか類似度検出ができるといいのですが。
今回、基礎に使う画像はこちら。適当に選んだ東京の夜景です。
こちらと似た画像をヒストグラム比較で比べてみたいと思います。
ヒストグラム比較
まず、こちらの画像から比較してみます。
アメリカのサンフランシスコです。
まずは、わかりやすいようにヒストグラムを見比べてみます。
ソースは以下の通り。
import cv2 import matplotlib.pyplot as plt target_img_path = 'ファイルのパス' img = cv2.imread(target_img_path) plt.hist(img.ravel(),256,[0,256]) plt.show()
こちらが東京の夜景のヒストグラム
こちらがサンフランシスコの夜景のヒストグラム
いずれも左側が突き出た形になっているのがわかります。
こちらを比較してみます。
ソース
ヒストグラムを比較するだけなのでプログラムは大分雑です。
# -*- coding: UTF-8 -*- import cv2 import matplotlib.pyplot as plt def compare_by_hist(): TARGET_FILE = 'tokyo.jpg' COMPARING_FILE = 'san-francisco.jpg' IMG_DIR = '../images/' IMG_SIZE = (200, 200) #比較するイメージファイルを読み込み、ヒストグラムを計算 target_img_path = IMG_DIR + TARGET_FILE target_img = cv2.imread(target_img_path) target_img = cv2.resize(target_img, IMG_SIZE) target_hist = cv2.calcHist([target_img], [0], None, [256], [0, 256]) #比較されるイメージファイルを読み込み、ヒストグラムを計算 comparing_img_path = IMG_DIR + COMPARING_FILE comparing_img = cv2.imread(comparing_img_path) comparing_img = cv2.resize(comparing_img, IMG_SIZE) comparing_hist = cv2.calcHist([comparing_img], [0], None, [256], [0, 256]) #ヒストグラムを比較する result = cv2.compareHist(target_hist, comparing_hist, 0) print(result) if __name__ == '__main__': compare_by_hist()
結果
0.33651142534396467
この数字が類似度ということになります。まったく同じ画像だと1.0になります。
つまり、この画像の類似度は約33%ということになります。
思ったより低かったです。
他の画像と比較
東京の夜景と他の画像を比べてみました。
ダウンタウン
0.6971260649928982
別の東京の写真
0.6402893447411667
草原
0.12629908970839823
雪原
-0.43809553907956367
ダウンタウンや東京の夜景は60%の数値が出ましたが、まったく関係のない画像は低い数値が出ました。
ある程度は信用できるかと思いますが、まだまだ課題が多そうです。
まとめ
ヒストグラムを比較する手法では、色の割合を比較する。
人物を比較しなかったのは人物だと年齢や場所によって服や肌の色が変わってくるためです。
他の手法と併用して使えばある程度使えるのではないでしょうか。
参照サイト
引用サイト
- 無料の写真: 東京, 日本, 市, 都市, パノラマ, 泊, 夜, ライト - Pixabayの無料画像 - 2193354
- 無料の写真: サンフランシスコ, カリフォルニア州, 市, 都市, 都市の景観 - Pixabayの無料画像 - 1633202
- 無料の写真: 東京, 日本, 東京タワー, 夜, 夜の街, タワー, 高層ビル - Pixabayの無料画像 - 2138168
- 無料の写真: 空気, アーキテクチャ, 建物, ビジネス, 市, 都市の景観 - Pixabayの無料画像 - 1870010
- 無料の写真: ブリッジ, 川, 青い空, 緑, 草, 植物, カラフルです, 日没 - Pixabayの無料画像 - 2940113
- 無料の写真: 冬の, 雪, もみ, 雪の, 今年の時間, 冬, 冷, 雪の風景 - Pixabayの無料画像 - 2993370