Erkennen eines Farbklecks in einem Bild

8

Ich habe ein Bild, bei dem es sich um eine Tiefenheatmap handelt, die ich weiter weg herausgefiltert habe als die ersten 25% des Bildes.

Es sieht ungefähr so ​​aus:

Es gibt zwei Farbkleckse im Bild, eines ist meine Hand (mit einem Teil meines Gesichts dahinter), und das andere ist der Schreibtisch in der unteren linken Ecke. Wie kann ich das Bild durchsuchen, um diese Blobs zu finden? Ich möchte, wenn möglich, ein Rechteck um sie herum zeichnen können.

Ich kann das auch tun (ignoriere Schatten und filtere zu schwarz oder weiß):

    
Malfist 24.01.2011, 19:46
quelle

5 Antworten

2

Es ist vielleicht zuviel für das, was Sie brauchen, aber es gibt einen großartigen Wrapper für C # für die OpenCV-Bibliotheken.

Ich habe OpenCV erfolgreich in C ++ für die Erkennung von Blobs verwendet, so dass Sie es möglicherweise für das, was Sie versuchen, nützlich finden.

Ссылка

und die Wiki-Seite auf OpenCV:

Ссылка

Bearbeitet zum Hinzufügen: Hier ist eine Blobs-Erkennungsbibliothek für Emgu in C #. Es gibt sogar einige nette Funktionen, um die Blobs nach absteigender Fläche zu sortieren (nützlich zum Ausfiltern von Rauschen).

Ссылка

Erneut bearbeiten:

Wenn Emgu zu schwergewichtig ist, enthält Aforge.NET auch einige Blob-Erkennungsmethoden

Ссылка

    
mfanto 24.01.2011, 19:56
quelle
3

Wählen Sie ein zufälliges Pixel als Startpixel aus. Dies wird zu Bereich A. Wiederhole A so lange, bis A nicht größer wird. Das ist deine Gegend.

Der Weg, A zu erweitern, besteht darin, nach benachbarten Pixeln zu A zu suchen, so dass sie eine ähnliche Farbe wie mindestens ein benachbartes Pixel in A haben.

Was "ähnliche Farbe" für dich bedeutet, ist etwas variabel. Wenn Sie genau zwei Farben machen können, wie Sie in einer anderen Antwort sagen, dann ist "ähnlich" gleich. Andernfalls würde "ähnlich" Farben bedeuten, die RGB-Werte oder was nicht haben, wo jede Komponente der zwei Farben innerhalb einer kleinen Menge voneinander ist (d. H. 255, 128, 128 ist ähnlich zu 252, 125, 130).

Sie können die ausgewählten Pixel auch so begrenzen, dass sie dem Seed-Pixel ähnlich sind, aber das funktioniert besser, wenn ein Mensch den Seed auswählt. (Ich glaube, das ist beispielsweise in Photoshop der Fall.)

Dies kann besser sein als die Kantendetektion, da Sie mit Gradienten arbeiten können, ohne sie auszufiltern, und Sie müssen die resultierenden erkannten Kanten nicht zu einem kohärenten Bereich verarbeiten. Es hat den Nachteil, dass ein Farbverlauf den ganzen Weg von Schwarz zu Weiß gehen kann und es wird als derselbe Bereich registriert, aber das mag das sein, was Sie wollen. Außerdem müssen Sie bei der Implementierung vorsichtig sein, sonst wird es zu langsam.

    
jprete 24.01.2011 19:55
quelle
2

Wenn das Bild wirklich nur aus zwei oder mehr verschiedenen Farben besteht (sehr wenig Unschärfe zwischen Farben), ist es ein einfacher Fall für eine Kante Erkennung -Algorithmus.

    
Femaref 24.01.2011 19:48
quelle
1

Sie können etwas wie das Codebeispiel aus dieser Frage verwenden: finden eine Farbe in einem Bild in c #

Es wird Ihnen helfen, das x / y bestimmter Farben in Ihrem Bild zu finden. Dann könnten Sie die Min x / Max x und die Min y / Max y verwenden, um Ihre Rechtecke zu zeichnen.

    
brendan 24.01.2011 19:55
quelle
0

Ermitteln Sie anhand der Objektfarbe anhand von C #

ein Objekt aus dem Bild

Um ein Objekt basierend auf seiner Farbe zu erkennen, gibt es einen einfachen Algorithmus dafür. Sie müssen eine Filtermethode wählen. Schritte sind normalerweise

Nimm das Bild Wenden Sie Ihre Filterung an Greyscalling anwenden Subtrahieren Hintergrund und erhalten Sie Ihre Objekte finde die Position aller Objekte Markieren Sie die Objekte Zuerst müssen Sie eine Filtermethode wählen, es gibt viele Filtermethoden für c #. hauptsächlich bevorzuge ich schmelzfilter, zu diesem zweck haben sie wenige filter sie sind

Farbfilterung Kanalfilterung HSL Filterung YCbCrFiltering Euklidische Farbfilterung Mein Favorit ist EuclideanColorFiltering ist es einfach und einfach. Für andere Filter können Sie hier mehr darüber erfahren. Sie müssen Aforge DLL herunterladen, um diese in Ihrem Code zu verwenden. Weitere Informationen zu den genauen Schritten finden Sie hier: Link

    
Kiva 20.11.2017 14:28
quelle

Tags und Links