Ich habe ein RGB-Bild mit verschiedenen Zeichen. Mein Hauptziel ist es, die Zeichen zu zählen, die mit den Bildrändern in Kontakt stehen.
Ansatz und Problem
Ich begann mit dem Laden des Bildes [Abb. 1], konvertierte es dann in Graustufen und wandte einen Medianfilter an, um etwas Rauschen zu beseitigen [Abb. 2]. Dann habe ich es mit einem Schwellenwert von 0,2 binärisiert, was zu Abbildung 3 führte. Zu diesem Zeitpunkt habe ich mein binärisiertes Bild erhalten, aber das Problem ist, dass einige Teile, die zum selben Zeichen gehören, in verschiedenen Regionen statt nur in einem angezeigt werden. Jetzt ist es mein Ziel, die Regionen, die zu demselben Objekt gehören, zusammenzuführen, damit ich bwlabel
zählen kann, wie viele Zeichen sich im Bild befinden, und die Zeichen imclearborder
im Rand entfernen und bwlabel
erneut verwenden kann, um den Unterschied zwischen den Objekten zu ermitteln die Zwei.
Mein Ansatz war es bwmorph
, Dilate
die Objekte zu verwenden , zu erweitern und dann zu versuchen, sie mit imfill
, holes
. Das Problem ist jedoch, dass wenn ich sie in einer kleinen Menge dehne [Abb. 4], das imfill
scheint sie nicht zu füllen, wenn ich sie um einen großen Betrag erweitere [Abb. 5], beginnen alle Objekte zu verschmelzen :(
Code
img=im2double(imread('image.png')); figure, imshow(img)
img_gray=rgb2gray(img); imshow(img_gray);
img_mediana=medfilt2(img_gray, [3 3]); figure, imshow(img_mediana);
img_bin=im2bw(img_mediana, 0.2); imshow(img_bin)
img_dilate=bwmorph(img_bin, 'Dilate', 10); imshow(img_dilate)
img_fill=imfill(img_dilate, 'Holes'); figure, imshow(img_fill)
Zahlen
Abb. 1 :
Abb. 1 http://dl.dropbox.com/u/5272012/1.png
Abb. 2 :
Abb. 2 http://dl.dropbox.com/u/5272012/2.png
Abb. 3 :
Abb. 3 http://dl.dropbox.com/u/5272012/3.png
Abb. 4 :
Abb. 4 http://dl.dropbox.com/u/5272012/4.png
Abb. 5 :
quelle
Antworten:
Meiner Meinung nach sind Dilatationserosion sehr grundlegende Werkzeuge. Sie haben eine sehr starke Informationsbasis und ein recht anständiges Eingabebild, um solche Entscheidungen zu treffen.
Hier ist meine Ansicht:
Bei einem vernünftigen Erfolg, den Sie von Abb. 1 bis 3 gezeigt haben, können Sie einzelne Zeichen identifizieren und segmentieren.
Angenommen, Sie kennen bereits Zeichen, können Sie einen anständigen schnellen Algorithmus anwenden, um den Mustervergleich durchzuführen. Falls die genauen Muster nicht bekannt sind, können Sie einfach die äußere Form des Musters identifizieren.
Basierend auf der Klassifizierung können Sie immer den Schwerpunkt jedes übereinstimmenden Musters und seine jeweilige Breite und Höhe definieren. Wenn sich die Position des Schwerpunkts X, Y zu nahe am Rand befindet - dh oder außerhalb des Randes, können Sie auch die Y-Achse anwenden.c e n t r o i d ( x ) > i m a g e w i d t h - s h a p e w i d t hcentroid(x)<0 centroid(x)>imagewidth−shapewidth
Da Sie sich nur Gedanken darüber machen, was auf die Kante fällt, sollten Sie nur mit jeder Kante beginnen und dort mit dem Mustervergleich beginnen. Starten Sie die Teilmuster / Formschluss und wenn das Teilmuster / Form Spiel macht das Objekt IS geschnitten auf dem Rand.
Hier sind einige Referenzen, die Ihnen helfen könnten, das Problem gut zu formulieren.
Dieses Papier ist sehr gut zu verstehen, viele Grundlagen über Zeichen / Token, mit denen Sie es zu tun haben.
Anil K. Jain und Aditya Vailaya Shape-Based Retrieval: Eine Fallstudie mit Markenbilddatenbanken Pattern Recognition 1998, vol. 31, Nr. 9, S. 1369-1390
Es gibt viele Forschungselemente, die sich mit partieller oder okkludierter Form- / Musterübereinstimmung befassen.
Eli Sabre, Yaowu Xu, A. Murat Tekalp Teilformerkennung durch Submatrixanpassung zur Teilanpassung geführte Bildbeschriftung Pattern Recognition 38 (2005) 1560 - 1573
Erweitert diese Antwort für spezifischere Fragen, wenn Sie diesen Ansatz wählen.
quelle
Hier ist eine kleine Inspiration, die das Gegenteil von dem zeigt, was Sie suchen.
Beginnen Sie mit Abb. 3.
quelle