Verfasst am: 16.05.2011, 14:57
Titel: Außenbereich eines Rahmens einfärben
Hallo zusammen,
ich möchte gerne über einen Plot einen Rahmen legen um nicht benötigte Bereiche des Figures auszublenden. Quasi eine Art Passepartout.
Diverse Versuche ein gif einzufügen das in der Mitte transparent ist, sind bislang immer daran gescheitert, dass das Auswirkungen auf den bestehenden Plot hat.
Nun hab ich mich dran gemacht über die Koordinaten eine Matrix zu erstellen, die einen Rahmen auf den Plot legt.
Nun würde ich gerne den Außenbereich dieses Rahmens, also den Bereich bis zu den Koordinatenachsen einfärben.
Patch und fill hab ich bereits ausprobiert, jedoch nicht den gewünschten Erfolg gehabt.
Vielleicht hat ja auf eurer Seite noch jemand Ideen. Ich wäre dafür sehr dankbar.
Das bringt mich leider nicht weiter, da ich den Bereich zwischen Rahmen und Korrdinatenachse einfärben möchte und nicht die Hintergrundfarbe des Figures ändern möchte.
Zur besseren Verständlichkeit hab ich mal den plot angehängt. Den Bereich zwischen der dünn (hoffentlich trotzdem noch sichtbar) eingezeichneten Linie und den Koordinatenachsen hätte ich gerne ausgeblendet bzw. durch die eine Farbe überdeckt.
I=imread(Dein Bild);
figure; imshow(I)
hFH=imfreehand(); % Rahmen um das ziehen, was weg soll
Mask=hFH.createMask();
Mask2=I;
Mask2(Mask)=255;
figure; imshow(Mask2)
I=imread(Dein Bild);
figure; imshow(I)
hFH=imfreehand(); % Rahmen um das ziehen, was weg soll
Mask=hFH.createMask();
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
Mask1=R;
Mask1(Mask)=255;
Mask2=G;
Mask2(Mask)=255;
Mask3=B;
Mask3(Mask)=255;
Result=cat(3,Mask1,Mask2,Mask3);
figure; imshow(Result)
Vielen Dank für deine Hilfe.
Hab mit dem Code auch mal mächtig gespielt.
Das ganze scheint im Moment allerdings wenig praktikabel weil das Programm dazu dienen soll einzelne Zustände zu visualisieren. Damit muss regelmäßig ein neues Bild erzeugt werden, dass dann so bearbeitet werden muss.
Ein weiteres Problem ist, dass imfreehand bzw. impoly nur auf Bilder anzuwenden sind und nicht auf den Plot. Dies macht dann jeweils noch das zwischenspeichern des Figures notwendig.
Da ich aber bislang noch keine bessere Idee habe werde ich erstmal weiterhin versuchen, mit deiner Idee zu experimentieren.
Das kann ich gut verstehen. Die "dünnen Linien" im Plot müßtest Du auch in der Plotfunktion entfernen können. Da ich Dein Plot nicht habe, ist folgendes nur auf dieses Beispiel bezogen:
Code:
Per=2*pi;
zahl=1;
Per2=0:0.1:zahl*Per;
Per3=sin(Per2);
plot(Per3)
Per3(25:30)=NaN; % Bereich des Vektors entfernen plot(Per3) plot(Per3); axis off
Die Idee könnte mir vielleicht tatsächlich weiterhelfen. Ich hab einen Rahmen als Bilddatei erzeugt.
Wenn ich diesen nun mit imread einlese würde ich gerne die Pixel die Schwarz sind einfach nicht mehr plotten lassen.
Wenn ich das richtig sehe, wäre hier NaN das Mittel der wahl. Das tuts aber leider auch nicht.
Jemand eine Idee wie ich diese Pixel auf eine andere Art und Weise transparent bekomme??
Das verstehe ich nun nicht mehr. Du bist ja wieder bei der Bildbearbeitung.
Hat mein Beispiel nicht funktioniert oder was funktioniert nicht? Nebenbei gesagt, bildet Matlab in m*n Matrizen(Bilder) NaN-Werte als schwarz ab, im Gegensatz zu Photoshop, das tatsächlich Transparenz erzeugt. Insofern würde Dir das nicht weiterhelfen. Tranzparenz erzeugt Matlab, wenn 2 Bilder übereinander liegen, durch unterschiedliche Gewichtung der Pixel. Es entstehen keine NaN-Werte. Beim Plotten sieht das wohl anders aus.
Ich bin wieder bei der Bildbearbeitung angekommen, weil es am einfachsten wäre wenn ich ein Bild, dass mir genau den gewünschten Rahmen erzeugt darüber legen könnte. Dafür notwendig: Transparenz innerhalb des Rahmens.
Wenns nicht geht, hab ich wohl wieder Pech .
Dein Beispiel hat mich insofern nicht weiter gebracht als nur das löschen der roten Linien ja nichts bringt.
Der Bereich bis zu den roten Linien von der y- bzw. x-Achse aus muss komplett weg.
danke für deine Vorschläge, mit dem letzen häng ich aber leider wieder an der Stelle der Bildbearbeitung.
Das ist so lange kein Problem, wie ich ein Bild bearbeite, dass hinterher quasi den Rahmen für den Plot darstellt.
Wird aber ein Problem wenn ich dabei eigentlich einen Plot verändern müsste, der dann wieder als Bild zu speichern wäre.
Der vorletzte könnte ne Chanche sein wenn ich ein schwarzes Bild über den eigentlichen Plot lege und dann die Fläche die durch den Vektor (der in der Zeichnung die rote Linie erzeugt) eingeschlossen ist ausschneide. Ähnlich wie das Polygon aus deinem Beispiel.
Allerdings bin ich da bislang auch noch nicht weit gekommen.
Leider reicht es eben auch nicht, wenn der Teil den ich drüber lege Rechteckig ist, sondern er muss ziemlich genau den roten Grenzen folgen.
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.