web-dev-qa-db-ja.com

ピクセル化が異なる2つの画像の類似性を確認する方法

QuoraとTwitterユーザーのプロフィール写真の類似性をチェックするためのpython=コードを実行していますが、画像が同じであるときに肯定的な結果が得られません。

これは、2つの画像を比較するためのコードです。

path_photo_quora= "/home/yousuf/Desktop/quora_photo.jpg"
path_photo_Twitter="/home/yousuf/Desktop/Twitter_photo.jpeg"
if open(path_photo_quora,"rb").read() == open(path_photo_Twitter,"rb").read():
     print('photos profile are identical')

画像は同じですが、コンソールに「写真のプロファイルが同じです」と表示されません。どうすればよいですか?

6
Youcef

imagehash ライブラリを使用して、類似した画像を比較できます。

from PIL import Image
import imagehash
hash0 = imagehash.average_hash(Image.open('quora_photo.jpg')) 
hash1 = imagehash.average_hash(Image.open('Twitter_photo.jpeg')) 
cutoff = 5

if hash0 - hash1 < cutoff:
  print('images are similar')
else:
  print('images are not similar')

画像は完全に同じではないため、いくつかの違いがあります。しかし、imagehashは、画像のサイズが変更されたり、圧縮されたり、異なるファイル形式であったり、コントラストや色が調整されていたりしても機能します。

ハッシュ(実際には指紋)は、画像の8x8モノクロサムネイルから取得されます。しかし、このようにサンプル数を減らしても、類似性の比較により非常に正確な結果が得られます。許容できる偽陽性と偽陰性のバランスを見つけるためにカットオフを調整します。

2
Håken Lid

2つのイメージは同じではありません。イメージされたものだけです。お気づきのように、画像は明らかに異なるサイズです。したがって、比較は失敗するはずです。

何らかの類似性チェックを使用する必要があります。最初のステップは、小さい画像を大きい画像に拡大することです。次に、類似性を検出および定義する何らかの手段を採用する必要があります。これにはさまざまな方法と方法があり、それらの任意の組み合わせが有効な場合があります。

たとえば、 OpenCV を使用して画像の類似性を確認するを参照してください

1
planetmaker