Script-Time: Bilder vergleichen ohne KI

Script-Time: Bilder vergleichen ohne KI
Photo by Mohammad Rahmani / Unsplash

Wie kann ich identische Bilder finden, auch wenn sie unterschiedliche Auflösungen haben?

Ansatzmöglichkeiten

Ich habe verschiedene Möglichkeiten ausprobiert. Darunter die folgenden:

Histogramm-Vergleich:

  • Histogramme erstellen für die Farbverteilung in den Bildern.
  • Vergleich der Histogramme, um festzustellen, wie ähnlich sich die Bilder sind.
  • Dieser Ansatz berücksichtigt die Farbinformationen und sollte auch bei unterschiedlichen Auflösungen funktionieren.

Skalierung und Vergleich:

  • Skaliere alle Bilder auf eine einheitliche Größe (z. B. 100x100 Pixel).
  • Vergleich der skalierten Bilder pixelweise. Wenn die Pixelwerte übereinstimmen (oder sehr ähnlich sind), sind die Bilder identisch.

OpenCV und Python:

  • Konvertieren in Graustufen und Template-Matching- oder Feature-Matching-Analyse.
  • Dies ermöglicht eine robustere Identifizierung von ähnlichen Bildern.

Der Vergleich der Histogramme hat sich als schnellste Variante herausgestellt.

Histogramm-Vergleich von Bildern in einem Ordner

Mittels des folgenden Scripts habe ich die Bilder in einem Ordner vergleichen. Dabei habe ich versucht, alles ohne temporäre Dateien mit möglichst wenig Rechenaufwand zu erledigen:

#!/bin/bash

# Pfade zu den Bildern und Ausgabedatei festlegen
BILDER_ORDNER="Pfad/zum/Bilderordner"

# Schleife über alle Bilder im Ordner
for BILD1 in "$BILDER_ORDNER"/*.jpg; do
    for BILD2 in "$BILDER_ORDNER"/*.jpg; do
        # Überspringe denselben Dateinamen
        if [ "$BILD1" != "$BILD2" ]; then
            # Histogramm-Vergleich mit ImageMagick
            HISTOGRAMM_DIFF=$(compare -metric RMSE "$BILD1" "$BILD2" null: 2>&1)
            if [ "$HISTOGRAMM_DIFF" == "0" ]; then
                # Bilder sind identisch
                echo "Identisches Bild gefunden: $BILD1 und $BILD2"
            fi
        fi
    done
done

Natürlich ist das Script nicht auf JPG-Files begrenzt. Möglicherweise weichen die Histogramme geringfügig voneinander ab. In diesem Fall ist $HISTOGRAMM_DIFF größer Null. Hier lässt sich also ein Schwellwert definieren.

Fazit

Zu Beginn meiner Erfahrungen mit KI habe ich bereits mit OpenCV experimentiert. Ohne GPU/TPU dauerte das jedoch recht lange. Neue Ideen mussten her. Und mittels Histogramm konnte ich die für mich schnellste Methode finden.