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

in Bild plotten und darin Speichern

 

Lawrence

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.04.2012, 20:09     Titel: in Bild plotten und darin Speichern
  Antworten mit Zitat      
Hallo zusammen,

Ich habe einiges in dem Forum gefunden, aber irgendwie nicht genau dass was ich suche...

Mein Problem:
Ich möchte gerne ein bestehendes Bild nehmen, darin ein Viereck zeichnen und diese Linien ins Bild reinspeichern. Was ich bis jetzt gemacht habe:

Code:

Bild=imread('rice.png');
imagesc(Bild);
[x,y]=ginput(4);
x1=[x;x(1)]; %damit ich das Viereck schliessen kann
y1=[y;y(1)];
hold on
plot(x1,y1);
 


Jetzt wird das Bild mit den Linien angezeigt. Jetzt möchte ich dieses Bild wieder in eine Variable speichern. Die grösse des Orginalbildes sollte erhalten bleiben.
Code:

bietet sich irgendwie nicht an, weil das ganze mit einem erheblichen qualitätsverlust verbunden ist.
Im idealfall würde ich das viereck noch ausfüllen wollen. In einem weiteren Schritt soll dann eine weitere Funktion die Kante des Vierecks erkennen und daraus eine Transformationmatrix berechnen (dieser Teil des Programms steht schon).

Kann mir jemand einen Tipp geben, wie ich das Bild abspeichern kann. Möglicherweise ist es auch recht einfach? Komme jetzt aber nach einem langen Arbeitstag ech nicht mehr drauf...

Danke im Voraus
lawrence


Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 23.04.2012, 04:56     Titel:
  Antworten mit Zitat      
Moin,

alles was du in einem Bild einfügst kannst du wie folgt speichern:

Code:
frame=getframe(gcf);
I=frame2im(frame);
imwrite(I,'Test.jpg','Quality',100); % oder: ...Test.tif,'Resolution',300)


Wenn dich der weiße Rahmen noch stört mache einfach einen Bildausschnitt und speicher den neu.

Eine erfolgreiche Woche

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Lawrence

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2012, 16:19     Titel:
  Antworten mit Zitat      
Vom Prinzip her ist es genau dass was ich suche.
Das Problem ist jetzt aber, dass die Bildgrösse nicht dieselbe bleibt. Ich habe das Gefühl, dass die Pixelgrösse verändert wird und ausserdem bekomme ich immer nur einen Viertel des Bildes abgespeichert....
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 23.04.2012, 16:40     Titel:
  Antworten mit Zitat      
Ja, du hast recht. Das Bild wird nicht nur größer sondern auch dreidimensional (Colorbild). Du kannst auch über:

Code:
print -dtiff -r50 test.tif


speichern, aber dann hast du einen weißen Rahmen. Wenn es unbedingt die gleiche Größe sein muß, dann müßtest du es nach dem Laden des Bildes noch einmal ändern.

Die Funktion macht letztlich ein Bildschirmfoto. Wenn du die Figur vor ginput manuell verkleinerst, wird auch das gespeicherte Bild kleiner.
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: 23.04.2012, 16:55     Titel:
  Antworten mit Zitat      
Heute gibt es die Infos Scheibchenweise Embarassed

Du kannst natürlich die Größe der figur anpassen:

Code:
Bild = imread('rice.png');
scrz=get(0,'ScreenSize');
figure('Resize','off','Position',[50 50 scrz(3)*0.21 scrz(4)*0.21]);
imagesc(Bild)
Private Nachricht senden Benutzer-Profile anzeigen
 
Lawrence

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2012, 18:06     Titel:
  Antworten mit Zitat      
Habs jetzt mit der Brechstangenmethode gemacht, indem ich durch die ausgelesenen Punkte die Geradengleichung bestimmt habe und damit direkt Pixel in der Bildmatrix gefärbt habe....

wenns interessiert... Punkte müssen von links unten beginnend im Uhrzeigersinn gewählt werden...

Code:

Bild=imread('rice.png');
imagesc(Bild);
[x,y]=ginput(4);
b=size(Bild,1);

x1=x;
y1=b-[y;y(1)];
B=zeros(size(Bild,1),size(Bild,2));


S1=(x1(2)-x1(1))/(y1(2)-y1(1));

for i=1:y1(2)-y1(1)
    Bild(b-round(y1(1)+i),round(x1(1)+S1*i))=256;
end


S2=(y1(3)-y1(2))/(x1(3)-x1(2));

for i=1:x1(3)-x1(2)
    Bild(b-round(y1(2)+i*S2),round(x1(2)+i))=256;
end

S3=(x1(3)-x1(4))/(y1(3)-y1(4));

for i=1:y1(3)-y1(4)
    Bild(b-round(y1(4)+i),round(x1(4)+S3*i))=256;
end

S4=(y1(4)-y1(1))/(x1(4)-x1(1));

for i=1:x1(4)-x1(1)
    Bild(b-round(y1(1)+S4*i),round(x1(1)+i))=256;
end

imagesc(Bild);
 


sicherlich nicht speziell elegant aber es funktioniert für mich
Danke trotzdem für die schnelle Antwort

Gruss Lawrence
 
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 - 2025 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.