Verfasst am: 12.08.2011, 11:08
Titel: Zeichnen von Rechteck in Matlab
Hallo,
ich glaube ihr werdet über die Frage schmunzeln, aber sie ist dennoch ernst gemeint.
Hier erstmal mein Problem:
In einem Video möchte ich Kreise erkennen. Hierzu hole ich mir jeden einzelnen Frame und bearbeite ihn:
1. Binärbild
2. Auf den Bereich zuschneiden, der mich interessiert (ist immer der gleiche)
3. Morphologische Operatoren
4. BoundingBox benutzen um die Koordinaten der einzelnen Segmente zu bekommen
Nun sollen ja Kreise gefunden werden, also:
Abfrage für jede Region, ob die Höhe gleich der Breite der BoundingBox ist.
Wenn dies der Fall ist, dann möchte ich gerne einen grünen Kasten direkt ins Bild malen, indem ich an den einzelnen Koordinaten den Farbwert veränder.
Und hier liegt das Problem!
Von der BoundingBox kriege ich ja die obere linke Ecke, Breite und Höhe und kann mir so dann das Rechteck berechnen.
Nun weiß ich aber leider nicht, wie ich den Farbwert an den entsprechenden Pixeln so ändern kann, dass ich in meinem S/W-Bild einen grünen Kasten habe vielleicht hat jemand von euch da ne Idee. Wenn jemand Verbesserungsideen zum Code hat, auch gerne genommen.
Code:
% Ein Teil meines bisherigen Ansatzes for m = 1 : num
% Bildregion im alten Bild ausgeben und BoundingBox einzeichnen % aber nur regionen, die gleich hoch und breit sind % => Kreisschilder if(width == height) for posLine=ULy:(ULy+height) if(posLine == ULy || posLine == ULy+height) for posCollumn=ULx:(ULx+width) % ganze Linie einfärben (waagerechte)
end else % nur linken und rechten Randpixel grün färben % (senkrechte)
Verfasst am: 13.08.2011, 18:54
Titel: Re: Zeichnen von Rechteck in Matlab
Hallo Gast,
In welchem Format ist denn das Original-Bild gespeichert?
Wenn es ein RGB-Bild ist, also [Breite x Höhe x 3], müssen einfach nur die entsprechenden Pixel-Werte gesetzt werden.
Code:
C = [0, 1, 0]; % Grün
RGB = rand(200, 400, 3);
x = 80;
y = 20
w = 100;
h = 80;
RGB(x:x+w, [y, y+h], 1) = C(1);
RGB(x:x+w, [y, y+h], 2) = C(2);
RGB(x:x+w, [y, y+h], 3) = C(3);
umgewandelt. Wenn ich das richtig sehe, ist es dann nurnoch ein [Breite x Höhe x 1] Format und da soll dann eben der Grüne Kasten eingezeichnet werden.
Problematisch sehe ich da ganz einfach [Breite x Höhe x 1] != [Breite x Höhe x 3].
Treffe mich morgen mit Freunden, die vielleicht ne Idee haben, aber bin trotzdem für Lösungen offen
Nätürlich könntest du dir es auch mit dem plot (oder patch) Befehl zeichnen und über das Binärbild legen, dann müsstes du eben zuvor die Eckpunkte bestimmen. Minimalbeispiel:
Ansonsten gibt es auch noch einige Beispiele in der Matlab Hilfe wie man die Ränder von Objekten farbig einzeichnet (also exakt und nicht nur das kleinst mögliche Rechteck drumherum).
Siehe hierfür z.B. die Hilfe (und Beispiele) von "bwboundaries":
Verfasst am: 15.08.2011, 03:45
Titel: Re: Zeichnen von Rechteck in Matlab
Hallo Gast,
Zitat:
Wenn dies der Fall ist, dann möchte ich gerne einen grünen Kasten direkt ins Bild malen, indem ich an den einzelnen Koordinaten den Farbwert verändere.
Hier liegt ein Problem: Wenn Du das Bild in ein BW-Bild umgewandelt hast, kannst Du nicht mehr einzelne Pixels grün färben. Aber Du könntest ein RGB-Bild verwenden, welches nur weiße und schwarze Pixel hat:
nun habe ich mich endlich mal angemeldet, also die vorherigen Beiträge waren von mir
habe eine Lösung gefunden, geht bestimmt einfachter, aber da das ein Prototyp ist, der mir zeigen soll, ob sich das ganze auf Hardware umsetzen lässt, reicht mir das aus.
trotzdem nochmal danke für eure Antworten.
Falls Interesse an meinem Code besteht, einfach per Mail melden.
@Jan S: genau so habe ich es gemacht, aber selbst geschrieben. Ging für mich schneller, als mich da rein zu lesen, sind ja auch nur 2 Schleifen
aber trotzdem danke für den Tip
_________________
"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." Albert Einstein
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.