Verfasst am: 04.09.2008, 15:14
Titel: Schichtbilder in Array speichern
Hallo liebe Forum Nutzer,
nachdem ich nun den ganzen Tag schon suche und probiere bin ich zu keiner Lösung gekommen. Ich benutze Octave 3.0.0.
Mein Problem:
Ich möchte S/W Schichtbilder in ein Array speichern. Oder auch eine andere Struktur, falls diese performanter wäre.
Mein momentaner Testdatensatz hat die Dimensionen: 256x256x110. Ein Bild hat die Auflösung 256x256, insgesamt 110 Bilder.
Zum einlesen der Daten dient folgende Funktion:
Code:
function[data,x,y,z]=readaz(name);
%READAZ [data,x,y,z]=readaz(name) reads an analyze image to a
% two-dimensional array of data whose colums hold the % frames of the volume-data. % Image data are stored in the array 'data', the size % of the volume is stored in the parameters x=width, % y=height, z=number of images
%
% (c) Werner Backfrieder 1996 % Dept.Biomedical Engineering & Physics % University of Vienna
aber irgendwie bringt das nicht wirklich was. dachte ich kann dann recht simpel darauf zugreifen. habe das mal nur für schicht 55 gemacht.. bzw dreimal immer das gleiche bild...
bild ist ein 3D-Array, das alle Daten enthält. Die Schleife zeigt die Bilder der Schichten 5 bis 10 in jeweils eigenen figures an. 110 figures sollte man nicht unbedingt gleichzeitig aufmachen...
Ansonsten ist mir nicht ganz klar, was du drehen möchtest. Wenn Du das Ziel noch näher beschriebst, fällt auch das Helfen leichter.
wow vielen Dank schonmal. Gerade mal nachgelesen was die Befehle so machen. Leider kriege ich nur einfarbige Bilder. EDIT: Das gesamte Bild ist einfach blau.
eingelesen. Die Variablen x,y,z werden zuvor mit Informationen aus einer Header Datei belegt. Hierbei gehts um CT-Bilder im Analyze Format. Einlesen klappt, ein Bild alleine anschauen geht auch.
Ich möchte alle 110 Schichtbilder der Dimension 256x256 ablegen. Später sollen hier Raycasting Techniken angewandt werden (MW, Maximum Intensity Projection usw). Von daher auch der Wunsch, das ganze "drehen" zu können. Es soll möglich werden, Linienintegrale durch die Daten zu berechnen, um später eine 2D-Projektion des 3D-Datensatzes abbilden zu können....
Das nächste Ziel ist es, durch Angabe der X-Y Koordinaten komplett auf der Z Ebene durch die Daten zu laufen. Also alle Werte für ein Pixel der 2D-Projektion berechnen zu können.
ja, da waren so einige Fehler in meinem Code, sorry. Ich revidiere.
1. Schritt: Korrektur der Schleife. Die colormap muss nach dem image-Befehl gesetzt werden. Wie peinlich. Der Index in bild muss natürlich k sein, nicht z.
2. Schritt: Anpassen der Farbskala an den Wertebereich. Da Du keine RGB-Werte hast, sondern nur eine 256x256-Matrix pro Bild, ist die automatische Einstellung, dass die Werte direkt in die Farbskala übernommen werden. Richtig ist hier aber eine Skalierung, sodass die ganze Farbpalette ausgeschöpft wird (Hilfeseite zu image, der Kasten bei Remarks).
Soo nun habe ich herumprobiert, aber schaffe es schon wieder nicht so wie ich es gerne hätte.
Ich würde nun gerne die Daten in Z-Richtung (also über alle 110 Schichten) in eine Datenstruktur legen. Und zwar immer für einen Punkt X,Y. Also so dass ich alle Daten hintereinander in Z-Richtung für einen Bildpunkt X,Y habe...
Das müsste ja auch mit reshape funktionieren, allerdings habe ich es nicht hinbekommen :/
Das funktioniert auch schon so wie es soll. Gäbe es hier noch Optimierungsansätze? Oder lässt es sich hier nicht anders als mit den beiden Schleifen realisieren?
Viele Grüße
Simon
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.