44

私はもともとcstheory.stackexchange.comでこの質問をしましたが、 stats.stackexchange.comに移動するように提案されました。

2つのビットマップ画像間の類似度メトリックを返す既存のアルゴリズムはありますか?「似ている」とは、人間がこれら2つの画像を同じ写真から変更したと言うことを意味します。たとえば、アルゴリズムは、次の3つの画像が同じであると言う必要があります(元の画像、位置がずれている画像、縮小されている画像)。

同じ

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください

ゆがんだ画像や反転した画像を検出する必要はありません。また、同じオブジェクトが異なる方向にあるかどうかを検出する必要もありません。

違う

ここに画像の説明を入力してください ここに画像の説明を入力してください

このアルゴリズムを使用して、自分のWebサイトでのスパムを防止したいと思います。スパマーが怠惰すぎてスパム画像を変更できないことに気づきました。顔だけではありません。私はすでにそこに多くの素晴らしい顔認識アルゴリズムがあることを知っています。スパム画像は、URLからサッカー場、裸の体まで、何でもかまいません。

4

7 に答える 7

24

スタックオーバーフローでの画像類似性アルゴリズムについての議論があります。ゆがんだ画像や反転した画像を検出する必要がないため、画像のトリミングがそれほど厳しくない場合は、ヒストグラムのアプローチで十分な場合があります。

于 2011-04-20T09:57:02.027 に答える
11

VGGなどの既存の深層学習アーキテクチャを使用して画像から特徴を生成し、コサイン類似度などの類似度メトリックを使用して、2つの画像が本質的に同じであるかどうかを確認できます。

パイプライン全体のセットアップは非常に簡単で、ニューラルネットワークアーキテクチャを理解する必要はありません(ブラックボックスのように扱うことができます)。また、これらの機能は非常に一般的であり、顔だけでなく、あらゆる種類のオブジェクト間の類似性を見つけるために適用できます。

ここに、プロセスを順を追って説明するブログがいくつかあります。 http://blog.ethanrosenthal.com/2016/12/05/recasketch-keras/ https://erikbern.com/2015/09/24/nearest-neighbor-methods-vector-models-part-1.html

于 2017-06-28T13:39:23.877 に答える
5

AmazonにはRekognitionと呼ばれる新しいAPIがあり、顔の類似性について2つの画像を比較できます。APIは、各顔の相互の類似度と各顔のバウンディングボックスを返します。

Rekognitionには、顔分析(性別、おおよその年齢、その他の関連する顔の詳細を返す)とオブジェクトシーン検出(画像内にあるオブジェクトのタグを返す)の両方のAPIも含まれています。

于 2017-02-12T23:28:43.190 に答える
4

画像の類似性を計算するための優れた手法の1つは、「平均構造類似性」です。

import cv2
from skimage import compare_ssim


img = cv2.imread('img_1.png')
img_2 = cv2.imread('img_2.png')

print(compare_ssim(img, img_2))
于 2019-12-25T10:15:33.633 に答える
3

画像の類似性が必要な場合は1つですが、顔の類似性はまったく別のものです。2人の非常に異なる人物が同じ背景に表示され、画像の類似性の分析では同じであることが示され、同じ人物が2つの異なる設定で撮影され、類似性分析では異なることが示されます。

顔の分析を行う必要がある場合は、それに固有のアルゴリズムを検索する必要があります。相対的な目、鼻、口のサイズと位置の計算は、この種の分析でよく行われます。

于 2011-04-21T02:49:23.850 に答える
3

https://github.com/Netflix/vmafを使用して、2つの画像セットを比較します。

最初にffmpegを使用して画像をyuv422pに変換してから、テストを実行します。スコアの違いに注意してください。これは、画像が類似しているか異なるかを判断するために使用できます。このサンプルでは、​​どちらも非常によく似ています...

ffmpeg -i .\different-pose-1.jpg  -s 1920x1080 -pix_fmt yuv422p different-pose-1.yuv
ffmpeg -i .\different-pose-2.jpg  -s 1920x1080 -pix_fmt yuv422p different-pose-2.yuv
.\vmafossexec.exe yuv422p 1920 1080 different-pose-1.yuv different-pose-2.yuv vmaf_v0.6.1.pkl --ssim --ms-ssim --log-fmt json --log different.json
Start calculating VMAF score...
Exec FPS: 0.772885
VMAF score = 2.124272
SSIM score = 0.424488
MS-SSIM score = 0.415149

ffmpeg.exe -i .\same-pose-1.jpg  -s 1920x1080 -pix_fmt yuv422p same-pose-1.yuv
ffmpeg.exe -i .\same-pose-2.jpg  -s 1920x1080 -pix_fmt yuv422p same-pose-2.yuv
.\vmafossexec.exe yuv422p 1920 1080 same-pose-1.yuv same-pose-2.yuv vmaf_v0.6.1.pkl --ssim --ms-ssim --log-fmt json --log same.json
Start calculating VMAF score...
Exec FPS: 0.773098
VMAF score = 5.421821
SSIM score = 0.285583
MS-SSIM score = 0.400130

参考資料UbuntuでJPEGまたはその他の画像からYUV422フレームを作成するにはどうすればよいですか?

于 2019-02-11T06:30:01.900 に答える
2

堅牢なハッシュ関数がそれを行います。しかし、その領域ではまだ多くの研究が行われています。すでに使用可能なプロトタイプがあるかどうかはわかりません。

お役に立てば幸いです。

于 2011-04-21T06:15:16.730 に答える