Verfasst am: 13.05.2013, 09:34
Titel: Label von S/W Bild auf RGB Bild legen
Hallo,
Ich habe eine Kamera, die mir ein Bild von verschiedenen Objekten liefter ( Rechteck- und Kreisförmige ) dazu kann es sein dass zb 2 Rechtecke unterschiedliche farben haben.
Das RGB-Bild binarisiere ich mithilfe von
Code:
I = Bild(:,:,1);
threshold = graythresh(I);
BW = im2bw(I,threshold);
for
k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1),'w', 'LineWidth', 2) end
stats = regionprops(L,'Area','Centroid','EquivDiameter');
Das funktioniert auch super, nur jetzt möchte ich gerne die Farbe erkennen, weis aber nicht weiter. Die einzelnen Labes die ich habe beziehen sich alle auf das s/w - Bild, wie kann ich diese jetzt mit dem Farbbild in verbindung bringen ?
eine Möglichkeit wäre, die Funktionen von vornherein auf ein n*m*3 Bild anzuwenden. Mit einer Schleife über die 3 Farblayer werden in jedem Durchlauf die einzelnen Farbauszüge als m*n-Bild bearbeitet.
Einige Funktionen lassen sich ja nur auf m*n Bilder anwenden. Jeder Farbauszug ist ein m*n Bild. Somit kann man Farbbilder bearbeiten, in dem man die Funktionen auf jeden Farbauszug anwendet. Es gibt 2 Möglichkeiten:
Code:
for c=1:3;
I2=I(:,:,c); % I ist dein Bild ....deine Funktionen
x= ... letzte Funktion;
end figure; imshow(x)
"R" ist zu behandeln wie ein ganz normales Schwarz-/Weiß Bild. Es gibt einige Funktion, da hatte ich mit der Schleife Probleme (Fehlermeldungen). Wenn du deine Funktionen auf die einzelnen Farbauszüge anwendest, gibt es mit Sicherheit keine Probleme
Wenn du dir nicht sicher bist, ob du einen Wert in einer Matrix mit den richtigen Koordinaten beschrieben hast, dann gibt es eine schnelle Hilfe, um das zu kontrollieren. Lese zunächst den Wert in der Matrix an der gesuchten Stelle aus und setze ihn dann zwangsweise auf einen anderen Wert und vergleiche ihn mit der vorherigen Matrix.
Durch Doppelklick auf die Variable "boundary" im Workspace öffnet sich über dem Command Window ein Fenster mit den Werten von boundary. In meinem Beispiel ist an der Stelle X(1,1) ein Wert von 255. Den setze ich mit:
den Wert zwangsweise um (oder "indiziere" den Wert)und vergleiche, ob sich der Wert geändert hat. Gleichzeitig wird im Workspace auch der gesuchte Wert für "length" angezeigt oder du suchst ihn, wie du selber beschrieben hast.
Ich will noch einmal nachhaken, ob das mit deiner Frage:
Zitat:
wenn ich mir jetzt die erste XKoordinaten von boundary herausgreiffen will, muss ich bei 0 oder 1 beginnen?
klar geworden ist. Die einfachste Art, das herauszufinden ist, wenn man
X(0,1) abfragt. Dann gibt es eine Fehlermeldung. Also kann nur X(1,1) richtig sein.
Einstellungen und Berechtigungen
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.