Verfasst am: 08.12.2014, 02:10
Titel: Red Obj. finden u. rückgabewert falls rotes Objekt gefunden
Hey ho.
ich habe hier diesen Algorithmus der mir alles rote in einem Bild anzeigt und den rest einfach schwarz macht.
wie im anhang das bild ( da zeigt er mir mein rotes feuerzeug bzw die roten elemente daraus.) vll noch ein bisschen unsauber aber darum gehts nicht. Ich bin wie immer gesagt ein matlab newbie und deswegen komm ich auch nun nicht weiter.
ich brauche nun( wie schonmal bei einem algorithmus ) einen RÜCKGABEWERT wenn er was rotes gefunden hat. ich habe sch0n mit allen variablen aus diesem c0de versuch was zu machen aber ich bek0mme es nich hin =(
Code:
obj = videoinput('winvideo', 1);
pause(2);
a = getsnapshot(obj);
subplot(3,4,1);
imshow(a);
% Konvertieren zu HSV
hsvImage = rgb2hsv(a);
% h,s und v extrahieren und individuell anzeigen
hImage = hsvImage(:,:,1);
sImage = hsvImage(:,:,2);
vImage = hsvImage(:,:,3);
irgendwie finde ich deinen Code sehr "mühsam" um ein rotes Objekt zu detektieren. Wenn ich das Bild in ycbcr wandel, dann erwarte ich im Chromakanal-Rot hohe Werte, also mind. über 240. Auf diese Werte kann man einen Rückgabewert festlegen. Oder benötigst du die imhist-Werte für andere Zwecke?
Ja genau sowas suche ich . Ich denke, das der code so muehselig ist liegt daran das ich wirklich noch ziemlich unerfahren bin. ich dachte mir auch die ganze zeit, das es doch noch leichtere wege geben muesste um ein rotes objekt zu finden.
nein die histogramme brauche ich eigentlich nicht. ich habe mir den wissensstand so wie er jetzt da steht ergoogelt und ehrlich gesagt selber keine bessere variante gefunden. ich hatte halt versucht aus den histogramm werten irgendeine loesung zu finden aber das geht glaub ich nicht.
Haben sie vll irgendeinen link oder wissen Sie ein tutorial mit einer einfacheren loesung ? also vll mit einem generell einfacheren loesungsweg wie Sie ihn angesprochen haben ?
a1=rgb2ycbcr(a);
y=a1(:,:,1);
cb=a1(:,:,2);
cr=a1(:,:,3); % Chroma Rot
ind=(cr<240); % Schwelle bei Dichte 240 (an Originalbild anpassen)
cr(ind)=0; % alles unter 240 wird zu schwarz figure; imshow(cr)% zeigt nur noch Rot if cr(cr>240) display 'Rot gefunden'
end
Ich kenne dein Eingangsbild nicht und versuche daher, über Bilder mit eindeutigem "Rot" eine Lösung herbeizuführen. Besser wäre es, dieses Bild anzuhängen, damit man gezielter einen Lösungsweg vorbereiten kann.
Rot wird in ycbcr, zumindest bei meinen Vergleichsbildern, deutlich differenzierter dargestellt als in Lab oder RGB. Rotwerte sollten im "cr-Kanal" deutlich heller sein als nichtrote Werte. Alle anderen "nichtroten" Werte können auf Null reduziert werden. Damit das gelingt, musst du die gesuchten Rotwerte in ihrer Dichte messen. Ich habe das extra vermerkt:
Zitat:
ind=(cr<240); % Schwelle bei Dichte 240 (an Originalbild anpassen)
Dann kann kein schwarzes Bild entstehen, weil der gesuchte Rotbereich nicht reduziert wird!! Die Dichtewerte müssen natürlich auch zur Meldung passen, sonst wird diese auch nicht ausgegeben.
Ich habe nun bei den werten mal 150 eingetragen nun zeigt er mir auch wirklich nur die roten sachen an !!! (anhang)
aber "farbe gefunden gibt er mit immer noch nich aus
oh jaaa da hatte ich mich vertippt danke ich mache ungerne einfach copy paste und schreibe das lieber ab danke ich hoffe nun klappt alles =)
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.