web-dev-qa-db-de.com

Vergleich der Bildähnlichkeit

Ich habe diese Frage ursprünglich auf cstheory.stackexchange.com gestellt, es wurde jedoch vorgeschlagen, sie nach stats.stackexchange.com zu verschieben.

Gibt es einen vorhandenen Algorithmus, der mir eine Ähnlichkeitsmetrik zwischen zwei Bitmap-Bildern zurückgibt? Mit "ähnlich" meine ich, ein Mensch würde sagen, dass diese beiden Bilder von derselben Fotografie verändert wurden. Der Algorithmus sollte beispielsweise sagen, dass die folgenden 3 Bilder gleich sind (Original, verschobene Position, geschrumpft).

Gleich

enter image description hereenter image description hereenter image description here

Ich muss keine verzerrten oder gespiegelten Bilder erkennen. Ich muss auch nicht feststellen, ob es sich um dasselbe Objekt in unterschiedlichen Ausrichtungen handelt. 

Anders

enter image description hereenter image description here

Ich möchte diesen Algorithmus verwenden, um Spam auf meiner Website zu verhindern. Mir ist aufgefallen, dass die Spammer zu faul sind, um ihre Spambilder zu ändern. Es ist nicht auf Gesichter beschränkt. Ich weiß bereits, dass es bereits viele tolle Gesichtserkennungsalgorithmen gibt. Das Spam-Bild kann alles von einer URL über ein Fußballfeld bis zu einem nackten Körper sein.

24
JoJo

Es gibt eine Diskussion über Bildähnlichkeitsalgorithmen bei Stapelüberlauf. Da Sie keine verzerrten oder umgedrehten Bilder erkennen müssen, reicht der Ansatz des Histogramms möglicherweise aus, sofern der Bildausschnitt nicht zu stark ist. 

14
Jim M.

Sie können vorhandene Deep-Learning-Architekturen wie VGG verwenden, um Features aus Bildern zu generieren, und dann eine Ähnlichkeitsmetrik wie Cosinus-Ähnlichkeit verwenden, um festzustellen, ob zwei Bilder im Wesentlichen gleich sind. 

Die gesamte Pipeline ist ziemlich einfach einzurichten und Sie müssen die Architektur des neuronalen Netzwerks nicht verstehen (Sie können sie wie eine Blackbox behandeln). Diese Funktionen sind ziemlich allgemein und können angewendet werden, um Ähnlichkeiten zwischen beliebigen Objekten, nicht nur Gesichtern, zu finden.

Hier sind ein paar Blogs, die Sie durch den Prozess führen . http://blog.ethanrosenthal.com/2016/12/05/recasketch-keras/https: // erikbern .com/2015/09/24/Nächste-Nachbarn-Methoden-Vektor-Modelle-Teil-1.html

6
Anvesh K

Amazon hat eine neue API namens Rekognition , mit der Sie zwei Bilder auf Ähnlichkeit im Gesicht vergleichen können. Das API-Element gibt für jedes Gesicht einen Ähnlichkeitsprozentsatz und die Begrenzungsrahmen für jedes Gesicht zurück.

Rekognition umfasst auch eine API für die Gesichtsanalyse (Rückgabe des Geschlechts, des ungefähren Alters und anderer relevanter Gesichtsdetails) und Objekterkennung (Rückgabe von Tags von Objekten, die sich im Bild befinden).

4
Aaron Landy

Wenn Sie nur eine Ähnlichkeit mit Bildern wünschen, ist dies eine Sache, aber eine Ähnlichkeit im Gesicht ist eine andere. Zwei sehr unterschiedliche Personen könnten im gleichen Hintergrund erscheinen und eine Analyse der Bildähnlichkeit zeigt, dass sie identisch sind, während dieselbe Person in zwei verschiedenen Einstellungen aufgenommen werden kann und die Ähnlichkeitsanalyse zeigt, dass sie unterschiedlich sind.

Wenn Sie eine Gesichtsanalyse durchführen müssen, sollten Sie nach speziellen Algorithmen suchen. Bei dieser Art von Analyse wird häufig die relative Augen-, Nasen- und Mundgröße und -position berechnet.

2
John

Robust Hash-Funktionen mach das. In diesem Bereich wird jedoch noch viel geforscht. Ich bin mir nicht sicher, ob es bereits brauchbare Prototypen gibt.

Hoffentlich hilft das.

2
philipp

Verwenden Sie https://github.com/Netflix/vmaf , um die beiden Bildsätze zu vergleichen.

Konvertieren Sie zuerst die Bilder mit ffmpeg in yuv422p und führen Sie dann den Test aus. Notieren Sie sich die Differenz. Dies kann verwendet werden, um festzustellen, ob das Bild ähnlich oder unterschiedlich ist. Für dieses Beispiel sehen die beiden ziemlich ähnlich aus ...

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

Referenzen Wie kann ich ein YUV422-Frame aus einem JPEG- oder anderen Bild auf Ubuntu erstellen

0
Fire