WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Label von S/W Bild auf RGB Bild legen

 

Mo1k
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2013, 09:34     Titel: Label von S/W Bild auf RGB Bild legen
  Antworten mit Zitat      
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);
 


Dann filtere ich störungen raus und fülle gegebenfalls meine Objekte
Code:

se = strel('square',15);
BW = imclose(BW,se);
% Objekte kleiner als 30 werden gelöscht
BW = bwareaopen(BW,30,4);
 


Dann extrahiere ich die Objekte und ermittle die Geometrie mithilfe von regionprops
Code:

[B,L] = bwboundaries(BW,'noholes');
imshow(label2rgb(L, @jet, [.5 .5 .5]))

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 ?

Mo1k
Private Nachricht senden Benutzer-Profile anzeigen


Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 13.05.2013, 09:53     Titel:
  Antworten mit Zitat      
Moin,

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.

Viele Grüße
Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Mo1k
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2013, 10:04     Titel:
  Antworten mit Zitat      
ich hätte noch erwähnen sollen, dass ich neu in matlab bin, kann mir gerade nicht vorstellen, wie du das meinst.

Meinst du zb sowas:
Code:

[rgbimage_array] = imread(Bild);
 


Hier wären jetzt alle Pixel mit 3 Werten hintereinander in einem Array oder ?

nur wie erfahre ich dann die Koordinaten von meinen Objekten in diesem RGB Bild ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 13.05.2013, 11:44     Titel:
  Antworten mit Zitat      
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)


oder du zerlegst das Bild in die Layer R,G und B:

Code:
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);


wendest die Funktionen einzeln auf die R,G und B Auszüge an und führst sie mit:

Code:
x=cat(3,R,G,B);


wieder zusammen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mo1k
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2013, 16:30     Titel:
  Antworten mit Zitat      
Ok,

Mal noch eine Frage:
Code:

R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
 

Wenn ich auf zb R dann zugreiffen will, muss ich dann die Zählvariable bei 0 oder bei 1 starten lassen ? Zb R(0) ist dann der Erste Wert in dem Array?
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 13.05.2013, 17:37     Titel:
  Antworten mit Zitat      
"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
Private Nachricht senden Benutzer-Profile anzeigen
 
Mo1k
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2013, 20:48     Titel:
  Antworten mit Zitat      
dann Frage ich nochmal anderst

Code:

[B,L] = bwboundaries(BW,'noholes');
for
  k = 1:length(B)
  boundary = B{k};
  plot(boundary(:,2), boundary(:,1),'w', 'LineWidth', 2)
end
 


wenn ich mir jetzt die erste XKoordinaten von boundary herausgreiffen will, muss ich bei 0 oder 1 beginnen?
Code:

x = boundary(0,1);
x = boundary(1,1);
 


und die Gesamtanzahl von Koordinaten in boundary kann ich auch mit length ermitteln:
Code:
anzahlkoordinaten = length(boundary);
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 14.05.2013, 06:22     Titel:
  Antworten mit Zitat      
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:

Code:


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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 14.05.2013, 15:38     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.