LoginSignup
2
5

More than 1 year has passed since last update.

画像の類似度を測る楽な方法 imgsim

Posted at

画像の類似度を測りたいなーと思い、何か楽な方法はないかと調べるとimgsimというものがありました。

参考にしました方の記事を載せます。
参考元

インストール編

さっそく使おうと思い、インストール

pip install imgsim

で、さっそくインポート

import imgsim

動くか見てみると

Traceback (most recent call last):
省略
ModuleNotFoundError: No module named 'torchvision'

ありゃ、なんかエラー出る
torchvisionがないというのでインストール

pip install tourchvision

するとエラーが出る

ERROR: Could not find a version that satisfies the requirement tourchvision
ERROR: No matching distribution found for tourchvision

pip installじゃダメなのか、なぜだ、、
ではconda installで

conda install torchvision -c pytorch

これで入ったので、動くようになりました!

実行編

MNISTで挙動を見てみたいと思います。
(60000,28,28)から(60000,786)に変換して、正規化

def preprocess_images(images):
  images = images.reshape((images.shape[0], images.shape[1]*images.shape[2])) / 255.
  return images
train_images = preprocess_images(train_image)

さて類似度を測っていきます。結果をdistという変数に入れます。

dist = imgsim.distance(train_images[0], train_images[0])
print(dist)
結果:0

類似度が高ければ、値は小さく、類似度が低ければ、値は大きくなるようです。
これは同じ画像をみているので当然、値は0になりますね
次に、この0番目の画像に対して、一番似ている画像を探しましょう。

dist_list=[]
for number in range(train_images.shape[0]):
  dist = imgsim.distance(train_images[0], train_images[number])
  dist_list.append(dist)
np.where(dist_list==np.sort(dist_list)[1])[0][0]
結果:32248

np.whereを使って一番近い画像のナンバーを表示しました。(これ以外のやり方を知らない)
さて、一番近い画像の番号がわかったことですし、これを可視化してみましょう。

0番目の画像
image0.png
32248番目の画像
image1.png
ふむ、似てますね。これは信頼してもいいのでは。

以上です。
カラー画像もできるみたいですね。カラー画像を使う際は、参考元にやり方が載っています。

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