Eddie: Doppelte Bilder finden: mit Prüfsumme?

Hallo allerseits,

wie kann ich möglichst einfach überprüfen, ob sich zwei Bilder gleichen? Ich hätte gerne ein Verfahren, mit dem ich bei einem neuen Bild einfach in der Datenbank gucken kann, ob es da schon ein entsprechends Duplikat gibt - und zwar ohne alle Bilder einzeln zu vergleichen.

Spontan fallen mir da Dinge ein wie: Höhe, Breite, Dateigröße, Dateityp und vor allem Prüfsumme (MD5). Bin ich da auf dem richtigen Weg, oder kann das (trotz Prüfsumme) falsche Ergebnisse bringen?

Danke für eure Hilfe,
Eddie

--
Old men and far travelers may lie with authority.
  1. Hallo Eddie,

    wie kann ich möglichst einfach überprüfen, ob sich zwei Bilder gleichen? Ich hätte gerne ein Verfahren, mit dem ich bei einem neuen Bild einfach in der Datenbank gucken kann, ob es da schon ein entsprechends Duplikat gibt - und zwar ohne alle Bilder einzeln zu vergleichen.

    Spontan fallen mir da Dinge ein wie: Höhe, Breite, Dateigröße, Dateityp und vor allem Prüfsumme (MD5). Bin ich da auf dem richtigen Weg, oder kann das (trotz Prüfsumme) falsche Ergebnisse bringen?

    Zunächst müssen wir wissen, was du unter "gleich" verstehst.
    Wenn du absolute Dateiidentität meinst: Das geht einfach.
    "Gleiche" Bilder kann aber auch heißen: Die Bilder sind gleich, jedoch unterschiedlich skaliert, gedreht, geschnitten oder haben etwa andere Zusatzinformationen (EXIM etc.). Das ist dann nicht mehr so einfach.

    Wenn du nur gleiche Dateien haben willst: Die Prüfsumme (MD5) ist hier ein IMHO sehr gutes Merkmal. In einer SQL-Datenbank könntest du dem Feld für die Prüfsumme dann etwa ein UNIQUE-Attribut verpassen, und performant genug sollte das auch sein (die Prüfsumme wird nur bei neuen Bildern neu berechnet).

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    panic("Oh boy, that early out of memory?");
            linux-2.2.16/arch/mips/mm/init.c
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
  2. Hallo,

    wie kann ich möglichst einfach überprüfen, ob sich zwei Bilder gleichen?

    meinst du damit, ob sie *gleich* im Sinne von identisch sind? Das ist nicht weiter schwierig: Dann konvertiere beide Bilder in dasselbe Format und vergleiche die Dateien Byte für Byte.

    Oder willst du auch herausfinden, dass zwei Bilder einander ähnlich sind, also z.B. das gleiche Motiv darstellen, aber unterschiedlich groß sind, in der Farbsättigung etwas abweichen, ob sie am Rand etwas unterschiedlich beschnitten sind, ob sie sich in der Bildschärfe unterscheiden?
    Ich arbeite derzeit an einem Algorithmus, der solche "Ähnlichkeiten" von Bildern erkennen und bewerten soll. Ob am Ende das herauskommt, was ich erwarte, weiß ich noch nicht; es wird auch noch ein paar Wochen dauern, weil ich das als reines Hobbyprojekt mache. Aber die Aufgabenstellung ist klar ...

    So long,
     Martin

    --
    Das einzige Problem beim Nichtstun: Man weiß nie, wann man damit fertig ist.
    1. Hello Martin,

      meinst du damit, ob sie *gleich* im Sinne von identisch sind? Das ist nicht weiter schwierig: Dann konvertiere beide Bilder in dasselbe Format und vergleiche die Dateien Byte für Byte.

      Wie soll das funktikonieren?
      Ein Byte-für-Byte-Vergleich wird nach einer Konvertierung aus unterschiedlichen Quell-Formaten in ein Zielformat schon nach wenigen Bytes scheitern.

      Es gibt unterschiedlich verlustbehaftete Quellformate und außerdem auch unterschiedliche Konvertierungsalgorithmen, die die Bilder inzwischen hinter sich haben können.

      Ein harzliches Glückauf

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hallo Tom,

        meinst du damit, ob sie *gleich* im Sinne von identisch sind? Das ist nicht weiter schwierig: Dann konvertiere beide Bilder in dasselbe Format und vergleiche die Dateien Byte für Byte.
        Wie soll das funktikonieren?
        Ein Byte-für-Byte-Vergleich wird nach einer Konvertierung aus unterschiedlichen Quell-Formaten in ein Zielformat schon nach wenigen Bytes scheitern.

        nein, wenn die beiden Bilder in unterschiedlichen Formaten vorliegen, und dann in dasselbe Format konvertiert werden, sind sie auf Dateiebene identisch, wenn sie vorher wenigstens inhaltlich identisch waren. Eventuell in einem Format vorhandene Meta-Informationen wie z.B. EXIF-Header sind dann weg und stören beim Vergleich nicht mehr.

        Es gibt unterschiedlich verlustbehaftete Quellformate und außerdem auch unterschiedliche Konvertierungsalgorithmen, die die Bilder inzwischen hinter sich haben können.

        Ja - dann sind die Bilder aber auch nicht mehr identisch, sondern nur noch sehr ähnlich. Genau das möchte ich ja mit dem von mir umrissenen Algorithmus herausfinden. Wenn z.B. ein Bild a) in JPEG und b) in PNG umgewandelt wird, sind die beiden entstehenden Bilder eben nicht mehr Pixel für Pixel identisch, weil JPEG verlustbehaftet komprimiert, PNG nicht.

        Ciao,
         Martin

        --
        Es gibt Tage, da gelingt einem einfach alles.
        Aber das ist kein Grund zur Sorge; das geht vorbei.
        1. Hello,

          meinst du damit, ob sie *gleich* im Sinne von identisch sind? Das ist nicht weiter schwierig: Dann konvertiere beide Bilder in dasselbe Format und vergleiche die Dateien Byte für Byte.

          Wie soll das funktikonieren?
          Ein Byte-für-Byte-Vergleich wird nach einer Konvertierung aus unterschiedlichen Quell-Formaten in ein Zielformat schon nach wenigen Bytes scheitern.

          nein, wenn die beiden Bilder in unterschiedlichen Formaten vorliegen, und dann in dasselbe Format konvertiert werden, sind sie auf Dateiebene identisch, wenn sie vorher wenigstens inhaltlich identisch waren.

          Ich kann Dir bei Deiner Überlegung leider nicht folgen.

          Wenn ich je ein PNG und ein JPG in ein TIFF konvertiere, sind die entstehenden Tiffs doch nicht gleich, auch wenn es sich ursprünglich um dasselbe Bild gehandelt hat.

          Ein harzliches Glückauf

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Moin!

            Ich kann Dir bei Deiner Überlegung leider nicht folgen.

            Wenn ich je ein PNG und ein JPG in ein TIFF konvertiere, sind die entstehenden Tiffs doch nicht gleich, auch wenn es sich ursprünglich um dasselbe Bild gehandelt hat.

            Stimmt. Aber sie sind sich ähnlich (sofern sie ursprünglich mal dasselbe Bild waren).

            - Sven Rautenberg

            --
            "Love your nation - respect the others."
            1. Hi,

              Wenn ich je ein PNG und ein JPG in ein TIFF konvertiere, sind die entstehenden Tiffs doch nicht gleich, auch wenn es sich ursprünglich um dasselbe Bild gehandelt hat.

              Stimmt. Aber sie sind sich ähnlich (sofern sie ursprünglich mal dasselbe Bild waren).

              Ja, aber Der Martin sprach ja von "auf Dateiebene identisch" - und das bei Toms Szenario dieser Fall eintritt, dass wuerde ich doch fuer aeusserst unwahrscheinlich halten.

              MfG ChrisB

              1. Moin!

                Wenn ich je ein PNG und ein JPG in ein TIFF konvertiere, sind die entstehenden Tiffs doch nicht gleich, auch wenn es sich ursprünglich um dasselbe Bild gehandelt hat.

                Stimmt. Aber sie sind sich ähnlich (sofern sie ursprünglich mal dasselbe Bild waren).

                Ja, aber Der Martin sprach ja von "auf Dateiebene identisch" - und das bei Toms Szenario dieser Fall eintritt, dass wuerde ich doch fuer aeusserst unwahrscheinlich halten.

                "sind sie auf Dateiebene identisch, wenn sie vorher wenigstens inhaltlich identisch waren."

                Mach aus irgendwas ein PNG und ein JPG, so gilt: PNG != JPG (inhaltlich), also auf Dateiebene nicht identisch.

                Wenn man jedoch aus dem JPG ein PNG macht (24 Bit), dann sind die beiden Bilder inhaltlich identisch, weil die Kompressionsartefakte auch im PNG enthalten sind.

                - Sven Rautenberg

                --
                "Love your nation - respect the others."
                1. Hi,

                  Wenn man jedoch aus dem JPG ein PNG macht (24 Bit), dann sind die beiden Bilder inhaltlich identisch, weil die Kompressionsartefakte auch im PNG enthalten sind.

                  OK, ja - so herum stimmt's natuerlich.

                  MfG ChrisB

  3. Hallo allerseits,

    danke euch, das hat mir schon sehr geholfen! Ich will tatsächlich nur herausfinden, ob zwei Bilder (als Dateien) sich gleichen. Der Inhalt ist mir wurscht, es sollen nur gleiche und unveränderte Dateien gefunden werden! Sorry, dass das nicht ganz klar war!

    Werde es also mittels MD5 machen :-)

    Eddie

    --
    Old men and far travelers may lie with authority.