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

bmp Images importieren und als 3D surface Plot darstellen

 

pospiech
Forum-Century

Forum-Century


Beiträge: 130
Anmeldedatum: 03.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.09.2007, 16:46     Titel: bmp Images importieren und als 3D surface Plot darstellen
  Antworten mit Zitat      
Ich habe 127x127 8 bit Graystufen BMP Bilder die ich in 3D darstellen möchte.

Wenn ich diese mit Matlab importiere, dann bekomme ich ein CData 127x127x3 Array.

Nur wie ich dieses Plotten soll ist mir unklar, denn folgendes geht nicht:

Code:

>>surf(cdata(:,:,1))
Warning: CData must be double or single unless it is used only as a texture data.
Warning: CData must be double or single unless it is used only as a texture data.
Warning: CData must be double or single unless it is used only as a texture data.
Warning: CData must be double or single unless it is used only as a texture data.
 


Matthias
Private Nachricht senden Benutzer-Profile anzeigen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 03.09.2007, 18:39     Titel:
  Antworten mit Zitat      
Hallo Matthias,

wenn Du Bilder importierst, haben sie ein Integer-Datenformat, enthalten also bei 8 Bit Werte zwischen 0 und 255. Im Workspace wird das bei den Variablen in der Spalte "class" angegeben. Da steht wahrscheinlich uint8.

Um den surf-Befehl verwenden zu können, brauchst Du, wie die Fehlermeldung sagt, Daten im double- oder single-Format. Du kannst Deine Daten leicht umwandeln. Wenn Deine Variable X heißt, gibst Du ein:
Code:
X_double = double(X);


Mit der neuen Variable funktioniert der surf-Befehl, wie Du ihn verwendet hast. (Nur bei Graustufen, aber das ist Dir wohl klar.) Bei Verwendung von Farben braucht man, soweit ich weiß, den Befehl rgb2ind aus der Image Processing Toolbox, um aus den 3 Feldern einen Wert und die zugehörige colormap zu erzeugen. Aber das nur nebenbei. Wink

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
pospiech
Themenstarter

Forum-Century

Forum-Century


Beiträge: 130
Anmeldedatum: 03.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2007, 09:37     Titel:
  Antworten mit Zitat      
Code:

>> test=FRAME_0(:,:,1);
>> bild=double(test);
>> surf(bild);
 


liefert mir nur ein schwarzes bild, da LineStyle nicht auf None steht.
Nur wie stelle ich LineStyle auf None ?

Matthias[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 04.09.2007, 09:54     Titel:
  Antworten mit Zitat      
Versuch's mal mit
Code:
surf(bild,'LineStyle','none')


Das ist gemeint, wenn in der Hilfe steht:
Code:
surf(...,'PropertyName',PropertyValue)


Alle Eigenschaften (properties) findet man, wenn man unten auf der Hilfeseite für surf auf surfaceplot klickt.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
pospiech
Themenstarter

Forum-Century

Forum-Century


Beiträge: 130
Anmeldedatum: 03.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2007, 09:58     Titel:
  Antworten mit Zitat      
jetzt funktioniert alles soweit, nur bekomme ich noch eine Fehlermeldung bei colormap:
Code:

>> colormap(jet(256));
??? Subscript indices must either be real positive integers or logicals.
 


Was hat mir das jetzt zu sagen?

Matthias
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2007, 10:32     Titel:
  Antworten mit Zitat      
Frage zum Verständnis

Du lädst ein 2D-Bild(!) und willst es in 3D darstellen? Welches Erscheinungsbild erwartest Du? Willst Du Farbanteile (RGB) der Pixels grafisch (3D) darstellen? Oder sollte das Bild als Texture einer Fläche in 3D verpasst werden?

MfG
 
pospiech
Themenstarter

Forum-Century

Forum-Century


Beiträge: 130
Anmeldedatum: 03.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2007, 10:45     Titel:
  Antworten mit Zitat      
Anonymous hat Folgendes geschrieben:
Frage zum Verständnis

Du lädst ein 2D-Bild(!) und willst es in 3D darstellen? Welches Erscheinungsbild erwartest Du? Willst Du Farbanteile (RGB) der Pixels grafisch (3D) darstellen?

Ja, es ist sowieso ein Graustufenbild und damit R=G=B.

Matthias
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 04.09.2007, 12:57     Titel:
  Antworten mit Zitat      
pospiech hat Folgendes geschrieben:

Code:

>> colormap(jet(256));
??? Subscript indices must either be real positive integers or logicals.
 


Was hat mir das jetzt zu sagen?

Matthias


Hm, das kann ich mir nicht so recht erklären. 256 ist ja reell, positiv und ganzzahlig. Bei mir funktioniert der Befehl auch. Als Beispiel nehme ich
Code:
load durer
surf(X,'LineStyle','none')
colormap(jet(256))
 

und es gibt keine Fehlermeldung. Geht das Beispiel bei dir?

Grüße Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
pospiech
Themenstarter

Forum-Century

Forum-Century


Beiträge: 130
Anmeldedatum: 03.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2007, 13:39     Titel:
  Antworten mit Zitat      
Bijick hat Folgendes geschrieben:

... und es gibt keine Fehlermeldung. Geht das Beispiel bei dir?

Ja.

Matthias
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 04.09.2007, 18:36     Titel:
  Antworten mit Zitat      
Deine Fehlermeldung hat scheinbar keinen Sinn, weil, wie ich schon schrieb, 256 definitiv eine integer ist. jet(256) ist allerdings keine integer. Idea Die Lösung: Du hast wahrscheinlich eine Variable namens colormap angelegt und damit den Matlab-Befehl überschrieben! Smile Matlab versucht nun, die Variable colormap an der Stelle jet(256) auszuwerten, was aber nicht geht, da jet(256) Gleitkommazahlen enthält und keine ganzen Zahlen.

Da hätte ich ja auch gleich drauf kommen können...

Herzlichst Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.