Ich habe mich gefragt, ob es eine einfache Möglichkeit gibt, eine Etikettenmatrix in eine Matrix zu konvertieren, in der Linien an zwei Stellen übereinstimmen und an anderen Stellen Nullen enthalten, sodass Sie die Grenzen von Regionen auf das Originalbild der Etiketten überlagern können generiert als eine weitere Visualisierungsalternative zu der beliebten Funktion label2rgb.
Der Grund, warum ich frage, ist, dass ich gerade mit etwas Superpixel-Code arbeite, also habe ich viele markierte Regionen (500 bis 5.000). Ich habe rgbabel benutzt, um die Superpixel-Beschriftungen in farbige Bereiche umzuwandeln, indem ich sie festhielt und sie dann über dem Originalbild mit 'AlphaData' nach unten zeigte, um sie halbtransparent zu machen. Bei so vielen Regionen ist es jedoch schwierig, diese visuell zu analysieren, und ich denke, dass einfache Grenzen der Regionen besser funktionieren würden. Danke.
[EDIT] @O_O: Ich habe eine Muster-Etikett-Matrix mit dem Ziel-Ergebnis angefügt, obwohl ich jetzt mit dem zweiten Vorschlag von Jonas ziemlich zufrieden bin. Will am nächsten Tag auch die Methode von user616736 ausprobieren. Ich habe auch hier die Beispielbilder im .mat-Format hochgeladen, falls jemand anders damit experimentieren möchte Sie.
Etikettenmatrix:
Gewünschtes Ergebnis:
Eine Möglichkeit besteht darin, alle Beschriftungen zu durchlaufen und alle außer dem Rahmen zu entfernen, wie dies hier der Fall ist (wobei lblImg
Ihre Beschriftungsmatrix ist)
BEARBEITEN
Eine schnellere Methode, um Grenzen zu finden, besteht darin, den Gradienten des beschrifteten Bildes zu verwenden
%Vor% Wenn Sie Zugriff auf die Toolbox für die Bildbearbeitung haben (ich nehme an, Sie tun dies, da Sie mit Label-Matrizen zu tun haben), können Sie die Funktion edge
verwenden. Hier ist ein einfaches Beispiel
rice.png
ist das Bild von Matlab, so dass Sie diesen Code auf Ihrem Computer ausführen können. Das Bild sieht so aus.
Bekommen Sie jetzt labelmatrix
%Vor% lblMatrix
sieht so aus
Jetzt erhalten wir die Kanten der Etikettenmatrix. Hier habe ich die Laplace-of-Gauss-Methode verwendet, aber Sie können einen beliebigen anderen Algorithmus wählen (weitere Informationen finden Sie in der Hilfe).
%Vor%
Damit werden alle Kanten gefunden, die größer sind als 0
, was Sie brauchen. Sie können dies dann beliebig in Ihrer Verarbeitung manipulieren und auf andere Figuren überlagern. In der Praxis benötigen Sie etwas, das etwas höher als Null ist, so dass Sie diese kleinen Kreise (die nur auf Rauschen zurückzuführen sind) nicht erhalten und nur wiederherstellen, was Sie wollen. Du kannst basteln und die Schwelle auf etwas anderes einstellen, bis du es genau richtig machst. Obwohl dies automatisiert werden kann, kann ich nicht viel sagen, ohne das eigentliche Problem zu kennen. Wie auch immer, das ist nur um dich in die richtige Richtung zu bringen.
Schnelle Folge:
Ich stellte diese Frage auch auf Steve Eddins Blog und angeboten eine sehr schnelle Möglichkeit, die Kanten des Etikettenbildes zu finden:
%Vor% Ich mag diese Option, weil mein Hauptgrund für die Suche nach den Grenzen Visualisierung ist, und dies gibt etwas dickere Grenzen. Außerdem ist seine Funktion imoverlay
eine praktische Möglichkeit, um die Grenzen anzuzeigen, die Sie über dem Original gefunden haben Bild, aus dem die Etiketten generiert wurden.
Tags und Links matlab image-processing label