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

Bild in axes umwandeln

 

theresa
Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 23.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2020, 21:52     Titel: Bild in axes umwandeln
  Antworten mit Zitat      
Hallo,

ich würde gern wissen ob es einen Befehl gibt mit dem man ein Bild in einer axes in ein image umwandeln kann?

Grüße
Theresa
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2020, 11:26     Titel:
  Antworten mit Zitat      
Hallo,

was meinst du mit image? Eine Bilddatei? Das ginge mit imwrite.
Falls das nicht weiterhilft, ist mir das Problem noch nicht klar. Für mich sind Bild und image das gleiche, nur in unterschiedlichen Sprachen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
theresa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 23.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2020, 13:33     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe eine '*.txt' datei welche ich einlese. Diese enthält x und y koordinaten. Nach dem einlesen wird ein Schwarz/Weiß Bild in mehreren Axes erzeugt.

Ich möchte aus einem beliebigen axes (aus einem der Vier) ein Stück herausschneiden.
Der imcrop Funktion muss ich aber etwas übergeben...

ich weiß leider nicht wie ich das handles.axes1 oder handles.axes2 in dem die Bilder drin sind ansprechen soll?

Mein Gedanke war der, vielleicht das Bild in der handles.axes in ein image umzuwandeln und dieses dann unter einer Variable zu speichern welche ich an imcrop übergeben kann.

Vielleicht geht es auch viel einfacher und ich denke zu umständlich.

Ich bin für jede Hilfe dankbar.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2020, 13:56     Titel:
  Antworten mit Zitat      
Hallo,

in MATLAB gibt es ja an sich keine Bilder, sondern nur Arrays. Du brauchst also "nur" das, was du beim Visualisieren des Bildes übergeben hast, an imcrop zu übergeben.
Solltest du beim Visualisieren nur den Dateinamen angegeben haben, kannst du das mit imread einlesen. Da kannst du dich auch gut an den Beispielen in der Doku orientieren.

Bitte gib generell den verwendeten Code oder zumindest die Befehle an. Allein für das Darstellen eines Bildes fallen mir drei Befehle ein, die alle etwas anders arbeiten.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
theresa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 23.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2020, 14:17     Titel:
  Antworten mit Zitat      
Hallo Harald,

wäre es möglich ein Bsp zu zeigen wie das aussehen könnte

Meine Datei lese ich mit folgendem code ein
Code:
% --- Executes on button press in Einlesen_Pushbtn.
function Einlesen_Pushbtn_Callback(hObject, eventdata, handles)
% hObject    handle to Einlesen_Pushbtn (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

[FileName0, PathName0]=uigetfile({'*.txt'}, 'Pruefergebnis auswaehlen');  

if FileName0~=0
Ausgangsdaten= textread([PathName0 FileName0],'%s','delimiter','\n','whitespace','');

data=Ausgangsdaten(24:end-2);
 
 for i=1:(size(data,1)/2-1) % Anzahl Zeilen von X bzw. Y
     a=strsplit(data{i});
     b=strsplit(data{i+size(data,1)/2+1}); % Beginn von X
     if i~=size(data,1)/2-1 % Grenze zwischen Y und X
      if size(strsplit(data{i}),2)~=size(strsplit(data{i+1}),2)
          a(end)=[];
          b(end)=[];
      end
     end
           Matrix.Y(i,:)=a;
           Matrix.X(i,:)=b;
 end


Matrix.X=str2double(Matrix.X);
Matrix.Y=str2double(Matrix.Y);
X=Matrix.X(:,2:end-1);
Y=Matrix.Y(:,2:end-1);

Z=complex(X,Y);

handles.X=X;
handles.Y=Y;
handles.Z=Z;

Bereich_x=str2num(get(handles.Scale_X,'String'));
Bereich_y=str2num(get(handles.Scale_Y,'String'));

vektor_x=(0:(Bereich_x/size(handles.X,2)):(Bereich_x-(Bereich_x/size(handles.X,1))));
handles.vektor_x=vektor_x;
% Skalierung des Bereichs des Scans auf vorgegebene Werte
vektor_y=(0:(Bereich_y/size(handles.Y,1)):(Bereich_y-(Bereich_y/size(handles.Y,1))));
handles.vektor_y=vektor_y;

axes(handles.axes1)
imagesc(handles.vektor_x,handles.vektor_y,real(Z)) ;  % Realteil
ax = gca;
ax.YDir = 'normal' % Richtung vertikal korrigieren
title('Realteil')
%set(handles.axes1,'linewidth',3);
% xlabel('Horizontale Position in mm');
% ylabel('Vertikale Position in mm');
colormap gray;



axes(handles.axes2)
imagesc(handles.vektor_x,handles.vektor_y,imag(Z)) ;  % imaginary part
ax = gca;
ax.YDir = 'normal' % Richtung vertikal korrigieren
title('Imaginärteil','Interpreter','Latex')
% xlabel('Horizontale Position in mm');
% ylabel('Vertikale Position in mm');
colormap gray;

axes(handles.axes3)
imagesc(handles.vektor_x,handles.vektor_y,abs(Z)) ;  % Betrag
ax = gca;
ax.YDir = 'normal' % Richtung vertikal korrigieren
title('Betrag')
% xlabel('Horizontale Position in mm');
% ylabel('Vertikale Position in mm');
colormap gray;

axes(handles.axes4)
imagesc(angle(Z)) ;
imagesc(handles.vektor_x,handles.vektor_y,angle(Z)) ;  % Realteil
ax = gca;
ax.YDir = 'normal' % Richtung vertikal korrigieren
title('Phase')
% xlabel('Horizontale Position in mm');
% ylabel('Vertikale Position in mm');
colormap gray;

else
    errordlg('Es wurde keine Datei ausgewählt!','Interpreter','Latex')
end

guidata(hObject, handles);


Der Code für den Button mit dem ich aus einem "Bild" in einer axes meiner wahl einen Ausschnitt machen möchte sieht so aus
Code:
function SNR_Button_Callback(hObject, eventdata, handles)
% hObject    handle to SNR_Button (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
if isfield(handles,'X')==1
X=handles.X;
Y=handles.Y;
Z=handles.Z;

tmp = waitforbuttonpress;
point1 = get(gca,'CurrentPoint');
tmp = rbbox;
point2 = get(gca,'CurrentPoint');
%
p1 = min(point1(1,1:2),point2(1,1:2));
offset = abs(point1(1,1:2)-point2(1,1:2));
%code zum Ausschneiden des markierten Feldes

else
   errordlg('Laden Sie zuerst die Daten ein!')
end
 guidata(hObject, handles);

 


Allerdings funktioniert hier bisher nur das Auswählen des Bereichs welcher ausgeschnitten wird.

Aus diesem ausgeschnittenen Bereich soll danach noch einmal ein Ausschnitt gemacht werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2020, 15:39     Titel:
  Antworten mit Zitat      
Hallo,

Z ist doch das Bild? Du musst also mit Z bzw. einem Teil davon weiterarbeiten.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
theresa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 23.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2020, 16:26     Titel:
  Antworten mit Zitat      
Nach offset mach ich so weiter:

Code:
img1 = imcrop(Z,[p1 offset]);
figure
imshow(img1)


Der markierte Teil soll ausgeschnitten werden. Stattdessen bekomme ich aber eine Fehlermeldung.

Ich habe keine Ahnung was ich falsch mache, ich komme nicht weiter. Crying or Very sad

fehler.JPG
 Beschreibung:

Download
 Dateiname:  fehler.JPG
 Dateigröße:  73.48 KB
 Heruntergeladen:  146 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2020, 16:42     Titel:
  Antworten mit Zitat      
Hallo,

Z sind anscheinend komplexe Zahlen. Dann würde ich vorschlagen, mit real, imag, abs etc. zu arbeiten - so wie du es bisher auch gemacht hast.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
theresa
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 23.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2020, 16:55     Titel:
  Antworten mit Zitat      
Aber X und Y sind ja ebenfalls Bilder... und selbst da funktioniert es nicht... ich möchte einfach nur bei einer dieser Abbildungen in einer der Axes einen Bereich ausschneiden und das zu bearbeitende Bild wie in der MatlabDoc erklärt an die imcrop() übergeben...

Wenn ich an imcrop() abs(Z) oder angle(Z) übergebe macht das nur Sinn wenn ich auch das 3. oder 4. Bild bearbeiten möchte.

In Matlab wird mir dann zwar in diesem Fall ein neues Figure geöffnet es bleibt aber leer. Weder das Bild noch der Ausschnitt erscheint.

Code:
img=imag(real(X));
img1 = imcrop(img,[p1 offset]);
figure
imshow(img1)


Erwartet hätte ich, dass mir der von mir markierte Bereich im figure angezeigt wird. Bekomme aber nur ein leeres figure
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2020, 18:11     Titel:
  Antworten mit Zitat      
Hallo,

vorab: ich kenne mich mit Bildverarbeitung nicht aus.
Wenn ich mir das Beispiel "Crop Image By Specifying Crop Rectangle" ansehe, würde ich deine Erwartungen teilen.
Mein nächster Schritt wäre zu schauen, was die Beispiele unterscheidet.

Ist das Ergebnis von
Code:

Nicht lauter Nullen? Der Realteil ist ja reellwertig, der Imaginärteil davon also 0.

Für weitere Unterstützung bitte Beispieldaten zur Verfügung stellen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.