Das Beispielbild, das Sie gepostet haben, weist eine relativ starke Perspektive auf (es wird nicht direkt aus der Richtung der Oberflächennormalen abgebildet), was zu Problemen mit den Vorlagenanpassungstechniken führen kann, die die Blockverarbeitung verwenden. Ich gehe davon aus, dass Sie das Bild mit starker Perspektive aufnehmen müssen, also wollen wir zuerst die Bildtransformation abschätzen, die die perspektivische Projektion entfernt und ein gleichgerichtetes Bild ergibt ("gerades Bild").
Korrektur der perspektivischen Projektion, wenn die Form bekannt ist
Das ultimative Ziel der Vorverarbeitung ist es, die Ecken des grauen Rechtecks zu finden, das der Hintergrund der Farbkarte ist. Ich habe einfach mit einem Schwellenwert mit konstantem Wert begonnen. In der Literatur / im Internet finden Sie viele Informationen zur Schwellenwertberechnung, wenn das Bild ungleichmäßig beleuchtet ist. Versuchen Sie jedoch, die Bildeinstellung so zu korrigieren, dass die Beleuchtung relativ gleichmäßig ist.
Ich nahm an, dass die Farbkarte einen ziemlich großen Teil des Bildschirms einnimmt, so dass es wahrscheinlich der größte zusammenhängende Bereich des Bildes ist. Es gibt viele Schwarz-Weiß-Beschriftungsfunktionen (MATLABs bwlabel, IPPs LabelMarkers, OpenCV hat eine externe Bibliothek cvblob), die jeder einzelnen verbundenen Region einen eigenen Index geben. Nach der Beschriftung können Sie anhand eines Histogramms die Flächen der angeschlossenen Komponenten berechnen und anschließend die flächengrößte Komponente auswählen.
Es ist in der Regel sinnvoll, die Komponenten so zu füllen, dass sie keine Löcher aufweisen. Dadurch wird die Anzahl der Kantenpixel verringert.
Jetzt können wir Kantenfindungsoperatoren verwenden (ich habe eine gradientenbasierte Methode verwendet, aber Sie können die Kante auch verfolgen, indem Sie weißen Pixeln folgen, die mit schwarzen Pixeln verbunden sind), um Pixel zu erhalten, die zur Grenze gehören.
Da es sich bei dem interessierenden Objekt um ein Rechteck handelt, habe ich vier Linien mithilfe der robusten Linienanpassung (RANSAC) an die Kantenpixel angepasst. Nachdem ich eine neue Linie gefunden hatte, entfernte ich alle Punkte, die sich in der Nähe der gefundenen Linie befanden. Dies zwingt nachfolgende Anpassungsoperationen dazu, andere Kanten des Objekts zurückzugeben. Als schließlich alle Kanten gefunden wurden, berechnete ich alle möglichen Schnittpunkte zwischen den Linien. Aus der Menge der resultierenden Punkte habe ich alle Punkte außerhalb des Bildes entfernt.
HH
x =HX
Diese Transformationsmatrix kann dann verwendet werden, um das Originalbild so zu transformieren, dass das Farbdiagramm direkt aus der Richtung der Oberflächennormalen abgebildet wird.
H
Wenn wir dennoch einen Vorlagenabgleich durchführen möchten, können wir eine beliebige Methode für den Vorlagenabgleich verwenden. Die Methode muss nicht rotations- / skalierungsinvariant sein, da das Bild bereits korrigiert ist.