Laden...

Erkennen wo bei einem Bild oben ist

Erstellt von Christoph K. vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.592 Views
Christoph K. Themenstarter:in
821 Beiträge seit 2009
vor 10 Jahren
Erkennen wo bei einem Bild oben ist

Hi Leute,

gibt es einen einfachen Algorithmus, der erkennt, wo bei einem Bild oben ist?

Es würde mir schon eine Treffergenauigkeit von 80% genügen. Die Art der Bilder ist leider variablen.

Vielen Dank für eure Hilfe.

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo Christoph K.,

ohne die Art der Bilder zu kennen, wird es m.E. schwierig. Bei abstrakter Kunst werden für unbekannte Bilder vermutlich nicht mal Experten sagen können, wo oben, unten, rechts und links ist. Bei Landschaftsaufnahmen wäre vermutlich alleine über den geringeren Abstand der Durchschnittsfarbe der eine oder anderen Bildhälfte zu himmelblau eine gute möglich Trefferquote möglich. Wenn es Bilder aus Foto oder Handykameras geht, steht vielleicht sogar in den EXIF-Daten explizit die Orientierung.

herbivore

5.658 Beiträge seit 2006
vor 10 Jahren

Hi Christoph K.,

Bei Landschaftsaufnahmen wäre vermutlich alleine über den geringeren Abstand der Durchschnittsfarbe der eine oder anderen Bildhälfte zu himmelblau eine gute möglich Trefferquote möglich.

Ein interessanter Ansatz, der davon ausgeht, daß die Lichtquellen auf einem Foto (darüber reden wir doch, oder?) tendenziell eher oben zu finden ist. Bei Außenaufnahmen ist das der Himmel, bei Innenaufnahmen die Lampen. Man könnte es mal mit folgenden Ansatz versuchen:

  • Das Bild heruntersamplen auf 2 x 2 Pixel
  • Die Seite mit den helleren Pixeln ist oben
  • Bild dementsprechend um 90° oder 180° drehen

Bei einer durchschnittlichen Foto-Sammlung würde ich eine Trefferrate von > 50% erwarten, 80% klingt mir ein bißchen zu hoch.

Allerdings würde ich in jedem Fall wie von herbivore vorgeschlagen die EXIF-Daten auswerten.

Christian

Weeks of programming can save you hours of planning

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo Christoph K.,

eine Möglichkeit, um zu erkennen, ob das Bild Quer- oder Hochformat hat, wäre vielleicht noch, es auf Symmetrien zu untersuchen. Viele Bilder, allen voran Portraits, werden starke Symmetrien an der Hochachse aufweisen, jedenfalls viel mehr als an der Querachse. Wenn man also die Summe der Quadratischen Pixeldifferenzen aller Pixel, die den gleichen Abstand senkrecht zur Achse haben bildet, dürften zu der Achse symmetrische Bilder einen wesentlich geringeren Wert produzieren, als bei der anderen Achsel. Auch hier sollte man das Bild heruntersamplen. Ich würde es mit 8x8 bis 24x24 Pixeln probieren.

Damit weiß man allerdings nicht direkt, wo oben und wo unten ist, es sei denn, man kann voraussetzen, dass die meisten Bilder nur um 0° oder 90° gedreht sind. Oder um 0° oder 270°.

Das Bild heruntersamplen auf 2 x 2 Pixel.

Ich würde eher den Durchschnittswert alle oberen, unteren, rechten und linken Randpixel berechnen und dann den hellsten als oben annehmen.

Oder vielleicht würde man noch bessere Ergebnisse bekommen mit dem Durchschnitt von vier quadratischen Flächen, von jeweils 5-10% der Bildfläche einnehmen, die sich jeweils 5-10% vom jeweiligen Rand entfernt befinden.

Oder alle Verfahren anwenden und das Bild so drehen, wie die Mehrheit der Verfahren sagt. Oder du nimmst zuerst Bilder, deren Orientierung du kennst, und prüfst, welches der Verfahren im Schnitt die besten Treffer liefert.

Aber es bleibt dabei, wenn es EXIF-Daten über die Orientierung gibt, sind die die erste Wahl.

Bei einer durchschnittlichen Foto-Sammlung würde ich eine Trefferrate von > 50% erwarten

Bei einer durchschnittlichen Foto-Sammlung würde ich auch ohne jede Drehung eine Trefferquote von >80% erwarten. 😃 Je nach Quelle sogar nahe 100%.

herbivore

5.658 Beiträge seit 2006
vor 10 Jahren

Hi herbivore,

über Symmetrien hab ich auch nachgedacht, aber das ist wesentlich komplizierter als ein Algorithmus, der darauf basiert, in welchem Quadranten mehr Licht ist. Vertikale Symmetrieachsen kommen bei Portraitfotografie vor, wie du schon erwähnt hast, oder bei Architekturfotografie. Die sind aber meist nicht in der Mitte, und auch nicht immer senkrecht. Wenn das Portrait oder die Gebäudefassade aber nicht genau von vorne aufgenommen wurde, wird es schwierig. Dazu kommt, daß bei Landschaftsfotografien die Symmetrieachse genau andersherum liegen kann, z.B. wenn sich der Himmel oder die Landschaft auf einer Wasserfläche spiegelt. Ein Algorithmus, der darauf basiert, ist meiner Meinung nach nicht wirklich vielversprechend (vom Aufwand-Nutzen-Verhältnis).

Aber wenn wir schon bei Portraitfotografie sind, kann man auch Algorithmen zur Gesichtserkennung einsetzen, die sind heutzutage ziemlich ausgereift. Ebenso könnte man versuchen, im Foto Buchstaben zu finden (z.B. auf Hinweisschildern oder Reklame). Mit solchen Algorithmen hätte man sicherlich eine größere Trefferwahrscheinlichkeit bei Bildern, in denen Gesichter oder Buchstaben vorkommen.

Bezüglich Randpixel vs. Downsampling möchte ich noch anmerken, daß man gerade bei Landschaftsfotografien gerne eine "Bildbegrenzung" hat, wie z.B. einen Baum oder ein Haus, das am Rand leicht angeschnitten ist. Wenn man den Himmel oder die Lichtquellen finden will, sollte man daher nicht nur die Randpixel betrachten.

Christian

Weeks of programming can save you hours of planning

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo MrSparkle,

dass eine Symmetrieachse nicht in der Mitte sein muss, ist schon klar, und dass es nicht unbedingt um exakte Symmetrien geht, auch. Trotzdem denke ich, dass der von mir beschriebene Algorithmus zum Bewerten, in welcher Orientierung die Symmetrien ausgeprägter sind, weder kompliziert noch aussichtslos ist.

Bezüglich der Randpixel ist allerdings auch der umgekehrte Fall denkbar, dass nur ein sehr schmaler Streifen Himmel am oben Rand zu sehen ist, der bei der Durchschnittsbildung der Quadranten nicht stark genug ins Gewicht fällt. Dass am rechten und linken Rand Häuser und Bäume stehen mag sein, ich wäre aber zuversichtlich, dass der obere Rand, auf den es ja ankommt, relativ unverdeckt sein wird. Bei Bildern mit irgendeiner Form von Passepartout oder Vignettierung sieht das natürlich anders aus.

Unter anderem deshalb hatte ich vorgeschlagen, mehrere Verfahren zu kombinieren.

Trotzdem finde ich es interessant, wie die Ideen sprudeln, wenn man eine Weile diskutiert. Der Vorschlag, Gesichts- und Buchstabenerkennung zu verwenden, ist sicher eine gute Ergänzung. Vielleicht kommen noch weitere Vorschläge.

herbivore

5.658 Beiträge seit 2006
vor 10 Jahren

Hi herbivore,

ich finde das Thema interessant, und hab mal ein bißchen recherchiert. Man muß ja nicht das Rad neu erfinden, und es haben sich tatsächlich schon Leute Gedanken darüber gemacht. Aber wir waren mit unseren kombinierbaren Low-Level-Ansätzen gar nicht so weit weg.

Es gibt eine Menge High-Level-Ansätzen, die ich nicht verstehe, und deshalb auch nicht versuche, hier wiederzugeben 😉

Ein wirklich interessanter Ansatz wird hier beschrieben: Low complexity orientation detection algorithm for real-time implementation. Dort wird das Bild in verschiedene Bereiche aufgeteilt und in jedem Bereich die "Smothness" gemessen (also irgendeine Zahl, die angibt, die glatt die Textur in diesem Bereich ist). Das ganze beruht auf der Annahme, das gröber strukturierte Bereiche (Bodenbelag, Teppich, Gras, Bekleidung, Wasser usw.) immer unten, und weniger strukturierte Bereiche (Himmel, Decke, Hintergrund) oben sind. Anhand der Verteilung dieser Rauh/Glatt-Einteilung wird dann die Bildorientierung errechnet. Das dauert nach Angaben des Autors 10ms pro Bild.

Interessant finde ich auch die Auflistung einiger Fotos, die den Test nicht bestanden haben (auf der vorletzten Seite). Das vermittelt schon mal eine gute Vorstellung davon, wie zuverlässig solche Algorithmen überhaupt sein können.

Christian

Weeks of programming can save you hours of planning