ich beschäfftige mich schon seid geraumer Zeit mit Objekterkennung in Bilder.
Ich habe *.jpg's vorliegen die ich bearbeiten muss.
Nach einiger Recherche hab ich heraus bekommen da man Objkterkennung über den Canny-Algorithmus und der Houghtransformation machen kann.
Die mir vorliegenden Bilder hab ich erstmal vorbereitet, d.h. diese wurden im rgb-Farbraum linearisiert und die "Farbflecken" die mich interessieren wurden extrahiert. Ich habe also nun ein Bild mit weißen hintergrund und roten/blauen Flecken da drauf.
die Flecken entsprechen genau meinen gesuchten Fehlern.
bei mir im Programm sieht die Vorbereitung folgendermaßen aus:
Ich habe sozusagen nun ein schwarzes Bild auf den meine Fehler weiß umrandet zu sehen sind.
meine Frage ist, wie kriege ich da nun eine Formerkennung raus?
Angeblich soll das mit der Hough-Transformation funktionieren.
Kann mir wer eventuell erklären wie das Praktisch zu bewerkstelligen ist?
Ein Link oder Hinweise darauf wo ich eine Antwort finden könnte wären auch hilfreich.
Grüße,
Hurtz
Edit: es ist möglich, das die infos die in den Funktionen stehen nicht mehr ganz aktuell sind, also nicht wundern wenn da etwas steht das nicht ganz hin haut.
Das dumme ist nun das sich teilweise überlagernde Objekte nicht getrennt werden. Auf den Bild sind aber die beiden Objekte durch Kontrastunterschied gut aus zu machen, also man sieht das da 2 Objekte sind.
sie sind nur durch eine gemeinsame Hintergrund miteinander verbunden.
gibt es eine möglichkeit den detailgrad der segmentierung zu erhöhen?
Grüße
hurtz
_________________
"der Wolf,das Lamm ... auf der grünen Wiese ... HURTZ!"
ich hab mein filter etwas genauer eingestellt, so wie er gepostet ist sucht er nur nach Pixeln mit rot und blau anteilen und lässt die durch.
Das Ergebnis wird wesentlich besser wenn man zusätzlich noch nach Pixel mit Grünanteil filtert und Pixel mit ein zu hohen Anteil entfernt.
die einzelnen Objekte können dann auch besser getrennt werden.
praktisch sieht das bei mir so aus:
Code:
function C = rbFilter( img )
%filtert rot und blau und setzt rest weis
% gibt uint8 aus
%% variablen festlegen
der ansich dafür gedacht ist diesen Salzsstreuereffekt zu entfernen, nimmt aber leider zu viel raus. Zumindest soweit ich dies bisher aus probiert habe.
Gibt es eine andere möglichkeit, alternative Befehle oder ähnliches um einzelne Pixel zu entfernen?
Grüße,
Hurtz
_________________
"der Wolf,das Lamm ... auf der grünen Wiese ... HURTZ!"
ich weis nicht ob es wikrlich die Hough-Transformation ist, problem wurde aber gelöset. folgender Ablauf Segmentiert mein Bild. Leider gibt es noch Probleme wie: zwei nahe beieinander liegende Fehlerpunkte werden als einer erkannt.
Aber in Groben und Ganzen funktioniert dieser Ablauf.
ich habe ein ähnliches Problem und habe jetzt mal versucht deinen Code an mein Problem anzupassen leider hat das nicht funktioniert.
Im Anhang ist das Bild das ich nach meiner Filterung und Segmentierung erhalte und ist genau das was ich babsichtige.
Jetzt will ich die Mittelpunkte der Rechtecke finden um dann eine Kurve durch diese zu legen.
Jetzt müsste ich doch zuerst einmal diese Rechtecke mit Matlab erkennen und diese durch ihre Eckpunkte beschreiben um dann den Mittelpunkt zu berechnen ?!?!? ...
Und genau da liegt das Problem wie bekomme ich Daten der Rechtecke, habe es mit regionprops versucht, allerdings komme ich da nicht so wirklich weiter. Wie kann ich dann wenn ich damit dann die Rechtecke beschreiben um die Mittelpunkte zu finden ? ...
Hier mal mein Code ...
Code:
%% Bild einladen und Kontrast erhöhen, Alles außer schwarz ausblenden und Struktur suchen
Test=imread('Wasser_2.jpg'); % Bild einlesen
A=double(Test);
B=rgb2gray(A); % Graubild erstellen
C=imadjust(B,[0;1],[0;1]); % Kontrast von X erhöhen
C(C>10)=255; % Alle Werte oberhalb 30 auf 255 setzen
imcontour(C); % Sucht Kontur im Bild und plotted diese imfill(C,'holes');
C = edge(C,'canny'); % Canny-Edge Detector
C=~C; % Invertierung, d.h schwarz gegen weiß vertauscht imclearborder(C);
bwareaopen(C,15);
imshow(C);
%% Rechtecke finden [L Ne]=bwlabel(C); % Objekte "benennen"
C = bwareaopen(L, 15); % kleine Objekte filtern
A=regionprops(logical(C),'all'); % Werte berechnen
Zum Verständnis der Hough Transformation und deren Verwendung fand ich das folgenden Eintrag im File Exchange recht hilfreich. Allerdings ist er für große Bilder nicht sehr geeignet- bzw die Methode der Hough Transformation im Allgemeinen.
Zum neuen Anliegen sei gesagt, dass regionprops eine structure erstellt, in der die Eigenschaften deiner Regionen stehen. Ein Beispiel, dass ich mal zum Erkennen und Zentrieren von Ringen nutzte ist im folgenden Code zu finden. Vlt. kannst du es dir anhand dessen schon selbst erklären. Falls nicht, frage ruhig nach...
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.