Algorithmus um Bildausschnitt zu suchen

Hallo,

angenommen, ich habe zwei ähnliche Bilder und möchte einen _beliebigen_ quadratischen Bildausschnitt, der sich im ersten Bild befindet, im zweiten Bild automatisch suchen lassen.
Kennt jemand ein Algorithmus für eine solche Bewertungsfunktion? Mir sind nur „Grauwertunterschied“ und „Kreuzkorrelation“ bekannt.

Danke!
MOD: E-Mail-Adresse auf Anfrage geändert

Moien

angenommen, ich habe zwei ähnliche Bilder und möchte einen
_beliebigen_ quadratischen Bildausschnitt, der sich im ersten
Bild befindet, im zweiten Bild automatisch suchen lassen.

Wie sind die Bilder entstanden ? Wenn das normale Fotos sind geht man anders ran als bei künstlich erzeugten Bildern.

Welche Transformationen können die 2 Bilder durchgemacht haben ? Von unterschiedlichen Stellen aufgenommen oder nur Rauschen oder jpg-Artefakte…?

Kennt jemand ein Algorithmus für eine solche
Bewertungsfunktion?

Dutzende. Aber um was geht es genau?

cu

Hallo,

ohne inime Kenntnisse von Bildanalytik würde ich so vorgehen:

Vorgabe: minimalen Größe des (identischen) Ausschnittes [minX/minY] (je ein Pixel wird sehr oft in zwei beliebigen Bildern gleich sein; aber 1 Pixel ist ja auch kein sinnvoller „Bildausschnitt“).

Gehe jeden Punkt (xA/yA) von Bild A durch:
{
 Gehe jeden Punkt (xB/yB) von Bild B durch:
 {
 Wenn die Farbwerte gleich sind:
 {
 xA1 = xA und yA1=yA
 xB1 = xB und yB1=yB
 Gehe solange in X-Richtung in beiden Bildern weiter 
 (xA++, xB++)
 bis die Pixelfarben unterschiedlich sind 
 oder der rechte Bildrand erreicht ist.
 xA2=xA und xB2=xB
 Wenn die Minimalbreite überschritten ist [(xA2-xA1)\>minX]:
 {
 Gehe solange in Y-Richtung in beiden Bildern weiter,
 (yA++, yB++)
 bis die Pixelfarben unterschiedlich sind.
 Wenn die Minimalhöhe überschritten ist [(yA2-yA1)\>minY]:
 {
 Möglicher Bildausschnitt gefunden;
 Gehe jeden Punkt im Ausschnitt 
 xA1-xA2 / yA1-yA2 von Bild A durch:
 {
 Gehe jeden Punkt im Ausschnitt 
 xB1-xB2 / yB1-yB2 von Bild B durch:
 {
 Wenn Pixelfarben unterschiedlich: Abbruch
 } 
 Wenn nicht abgebrochen wurde:
 {
 Bildausschnitt gefunden! 
 }
 }
 }
 }
 }
 }
}

LG
Jochen

Hi Jo,

danke für deine Antwort. Aber ich suche nur Namen für solche Algorithmen, implementieren brauche ich die nicht.

Gruß,
Mac

MOD: E-Mail-Adresse auf Anfrage geändert

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Pumpkin,

Wie sind die Bilder entstanden ? Wenn das normale Fotos sind
geht man anders ran als bei künstlich erzeugten Bildern.

Es handelt sich um zwei ganz normale RGB Bilder, die dasselbe Motiv aus einer leicht unterschiedlichen Perspektive zeigen.
Wie ich schon Jo geantwort habe, ich brauche nur einige Algorithmen-Namen, keinen konkreten Implementierungen. Sollten diese nicht optimal geeignet sein, wäre das auch nicht weiter tragisch.

Gruß,
Mac
MOD: E-Mail-Adresse auf Anfrage geändert

Moien

Es handelt sich um zwei ganz normale RGB Bilder, die dasselbe
Motiv aus einer leicht unterschiedlichen Perspektive zeigen.

Da würde ich ein 0 order IDM (image distortion model) drauf ansetzten und die Abweichung von der 1:1 Abbildung als Maß für die Übereinstimmung nehmen. Evtl. könnte man was mit 1 order IDM machen wenn die Perspektiven immer nur um eine Achse gedreht sind. 2 order IDMs (genauer 2DW) könnte man nur machen wenn die Bilder sehr klein sind (Laufzeit).

Dann gibt es Schlüsselpunkte wie SIFT, SURF & Co. Arbeiten von Haus aus aber nicht auf Rechtecken sondern mehr golbal. Kann man aber clever einschränken.

hab Spass.

1 Like

Huhu,

Da würde ich ein 0 order IDM (image distortion model) …

Kannst du mir als Laien in einfachen Worten das Prinzip erklären, nach dem die Algorithmen arbeiten?

Ich finde das faszinierend; so wie ich das verstanden habe, finden die wohl auch (beliebig) verzerrte und gedrehte Ausschnitte?

LG
Jochen

Moien

Da würde ich ein 0 order IDM (image distortion model) …

Kannst du mir als Laien in einfachen Worten das Prinzip
erklären, nach dem die Algorithmen arbeiten?

Ich finde das faszinierend; so wie ich das verstanden habe,
finden die wohl auch (beliebig) verzerrte und gedrehte
Ausschnitte?

*g* Die Dinger sind wesentlich doofer als man auf den ersten Schlag denkt.

Eine IDM 0’ter Ordnung baut nur eine Zuordnung Koordinaten Bild 1 Koordinaten Bild 2 auf. Da wird eine grosse Tabelle angelegt mit allen Koordinaten des 2. Bild und ihren Zuordnungen im 1. Bild. Also in Code für Grauwertbilder:

int bild_1[][];
int bild_2[][];
int ZuordnungX[][];
int ZuordnungY[][];

Pixel x,y in der IDM:
bild_1[ZuordnungX[x][y]][ZuordnungY[x][y]];

Gefüllt werden die Tabellen auch sehr einfach (für jedes Pixel): man nimm den Farbwert des Pixel im Bild 2 und sucht nach einem Pixel gleicher/ähnlicher Farbe im Bild 1. Die Koordianten des Pixel aus Bild 1 trägt man in der Tabelle für Bild 2 ein.

Irgendwann gehen einem die Pixel mit ähnlicher Farbe aus. Wenn das öfter vorkommt sieht das Resultat der IDM dem Bild 2 unähnlich. Wenn nicht so oft vorkommt sehen sich IDM und Bild 2 sehr ähnlich.

Das kann man jetzt mit Randbedingungen belegen. Je nach Bedingung kommt man zu 1’ter und 2’ter Ordnung. 2’ter Ordung bedeutet: es werden keine Pixel aus ihrem Kontext geholt. 2 in Bild 1 benachbarte Pixel sind auch im IDM Nachbarn. Nachteil: der Algo ist NP-vollständig.

Die beste 0.5’ter die ich kenne nimmt nicht den Farbwert von einem Pixel sondern die Ableitung der 8 Pixel rundum nach X und nach Y (16 Werte). Diese Vektoren vergleicht man mit der euklidischen Distanz. Kommt sehr nahe an 2’ter Ordnung ran, ist aber sauschnell zu rechnen.

IDM ist ein lustiges Thema, aber da braut echt jeder seine eigene Suppe.

cu

1 Like

Hallo pumpkin,

erstmal danke für deine Antwort.

Da würde ich ein 0 order IDM (image distortion model) drauf
ansetzten und die Abweichung von der 1:1 Abbildung als Maß für
die Übereinstimmung nehmen. Evtl. könnte man was mit 1 order
IDM machen wenn die Perspektiven immer nur um eine Achse
gedreht sind. 2 order IDMs (genauer 2DW) könnte man nur machen
wenn die Bilder sehr klein sind (Laufzeit).

Dann gibt es Schlüsselpunkte wie SIFT, SURF & Co. Arbeiten von
Haus aus aber nicht auf Rechtecken sondern mehr golbal. Kann
man aber clever einschränken.

Könntest du mir bitte noch ganz kurz sagen, wie sich die Algorithmen IDM, SIFT und SURF bzgl. Performance und und Treffergenauigkeit verhalten? Nur ganz grob (gut, mittel, schlecht) für den Fall zwei relativ ähnlicher Bilder. Haben sie vielleicht sonst noch einen entscheidenden Vor- oder Nachteil?

Danke,
Mac
MOD: E-Mail-Adresse auf Anfrage geändert

Moien

Könntest du mir bitte noch ganz kurz sagen, wie sich die
Algorithmen IDM, SIFT und SURF bzgl. Performance und und
Treffergenauigkeit verhalten?

Wann must den Vortrag halten und gehst du immer so ran ?

cu

Hi,

Wann must den Vortrag halten und gehst du immer so ran ?

Das ist eine 1 Punkt Aufgabe einer Hausaufgabe für die Uni. Für den einen Punkt hänge ich mich nicht voll in dieses Thema rein (zumal die anderen Aufgaben viel schwieriger sind).

Gruß,
Mac
MOD: E-Mail-Adresse auf Anfrage geändert

Moien

Für den einen Punkt hänge ich mich nicht voll in dieses Thema
rein (zumal die anderen Aufgaben viel schwieriger sind).

SIFT und SURF sind Varianten der gleichen Idee. SIFT ist älter, langsamer und 10-15% genauer. SURF ist 1-2 Grössenordnungen schneller und halt 10% ungenauer.

IDM 0 order ohne besondere Zusätze ist etwa 50% schneller als SURF. Allerdings sehr viel ungenauer. Mit Zusätzen entspricht die Geschwindigkeit SURF, die Genauigkeit erreicht bei der Anwendung 80% von SURF.

cu

1 Like

Hi,

SIFT und SURF sind Varianten der gleichen Idee. SIFT ist
älter, langsamer und 10-15% genauer. SURF ist 1-2
Grössenordnungen schneller und halt 10% ungenauer.

IDM 0 order ohne besondere Zusätze ist etwa 50% schneller als
SURF. Allerdings sehr viel ungenauer. Mit Zusätzen entspricht
die Geschwindigkeit SURF, die Genauigkeit erreicht bei der
Anwendung 80% von SURF.

Super, danke!

Zwischenzeitlich habe ich recherchiert, dass SIFT Invariant ist gegen Skalierung, Rotation und Beleuchtung.
SURF ist schneller und robuster gegen Bildtransformationen als SIFT, aber auch etwas ungenauer.

Gruß,
Mac
MOD: E-Mail-Adresse auf Anfrage geändert