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

3D Objekte anhand von Grauwerten zusammenfassen

 

Fiana
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 07.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2011, 13:25     Titel: 3D Objekte anhand von Grauwerten zusammenfassen
  Antworten mit Zitat      
Hallo zusammen!

Ich habe ein Problem, vielleicht habt ihr Anregungen für mich wie ich es lösen kann?

Und zwar ist es so, dass ich 2D Bilder manuell segmentiere und den Objekten Indizes zuordne. Es handelt sich um CT-Aufnahmen. Ich habe aus dem Körper nun aber mehrere Bilder und möchte ein 3D Modell erstellen. Dazu würde ich gerne in der 3. Dimension zwischen den Bildern interpolieren, was aber zu unschönen Kanten führt. Kann man Matlab sagen, dass alles mit einem Index zu einem Objekt gehört? Ich steh etwas auf dem Schlauch...

Würd mich freuen, wenn ihr mir helfen könntet!
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 07.07.2011, 15:13     Titel:
  Antworten mit Zitat      
Hallo Fiana,

kannst du die Struktur deiner Objekte (bzw. wie du das Bild segmentiert hast) hier nicht mal genauer darstellen, am Besten mit deinem bisherigen Code. Ich glaube sonst wird dir kaum jemand helfen können, da dein Problem wenig verständlich ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Fiana
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 07.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2011, 17:50     Titel:
  Antworten mit Zitat      
Also ich versuchs mal zu erklären: Ich erhalte ein Array, in dem z.B. 4 Graustufen-Bilder aus einem Körper gespeichert sind. Es sind aber nicht die echten Grauwerte gespeichert, sondern Wasser hat den Index 1, Knochen 9. Die anderen Organe 2 bis 8 (durch vorherige Segmentierung). Ich häng mal ein Bild von einer einzelnen Schicht an.
Jetzt habe ich in dem Array 4 Schichten, die ich weiter verwenden will in einem anderen Programm. Dazu brauche ich aber interpolierte Schichten zwischen den Originalschichten, möglichst so, dass in den Organen keine krassen Kanten vorkommen (sonst könnte ich die Schichten auch einfach stapeln).
Ziel ist, aus einem Array mit etwa 20 gespeicherten Schichten, ein Array mit etwa 300 Schichten zu erzeugen. Es dürfen da auch wieder nur die Zahlen 1 bis 9 enthalten sein, da die Organe klar erkennbar sein müssen...

Versteht man jetzt eher, was ich erreichen will? Confused Sonst versuch ich es morgen nochmal besser zu erklären Wink

schicht.jpg
 Beschreibung:
eine Schicht des Objekts

Download
 Dateiname:  schicht.jpg
 Dateigröße:  23.31 KB
 Heruntergeladen:  631 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 07.07.2011, 18:22     Titel:
  Antworten mit Zitat      
d.h. du willst aus den 4 Bildern eine Schicht machen, wobei alle gleichen Grauwerte zusammengefasst werden sollen. Nun suchst du eine Möglichkeit, wie du die einzelnen Objekte (Index = Graustufe) aus den den 4 Bildern heraussuchen kannst? Willst du dann jeden Grauwert unterschiedlich interpolieren?

Was ich aber nicht verstehe...ein Bild ist doch eine Matrix...oder meinst du einen mehrdims. Array? Nehmen wir mal an, ein Bild hat die Größe 100x100 Pixel. Der Array von dem du sprichst, ist dann bei 4 Schichten 4x100x100 groß?
Private Nachricht senden Benutzer-Profile anzeigen
 
Fiana
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 07.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2011, 00:41     Titel:
  Antworten mit Zitat      
Also eine Schicht will ich aus meinen 4 Bildern nicht machen. Das sollen eher mehr Schichten werden. Wink

Genau, mein Array ist 300 x 500 x 4 groß in etwa. Im Prinzip suche ich wahrscheinlich die Kanten der Objekte und will dann eine Verbindung zwischen den Kanten herstellen...
Wenn ich normal zwischen den Schichen interpoliere, bekomme ich Dezimalzahlen raus, was ich aber nicht gebrauchen kann, weil meine Organe eben durch die Zahlen 1 bis 9 charakterisiert werden. Mit der Nearest Neighbour Interpolation ist es so, als wenn ich die Schichten einfach mehrmals übereinander lege. Schön wäre es, wenn Matlab wüsste "oh, in der 1. Schicht ist das Organ X 5x5 Pixel groß, in der 2. 10x10 Pixel. Da mach ich das Organ in den (z.B.) 4 Zwischenschichten dazwischen mal in jede Richtung um einen Pixel größer" Damit da ein kontinuierliches Wachstum zu erkennen ist.
Ich habe gehofft, dass es vielleicht etwas passendes in Matlab gibt, was ich noch nicht gefunden habe. Vielleicht habe ich einfach Pech und das gibt es nicht...

Vielen Dank schon mal, dass du versuchst mein Problem zu verstehen! Ich kanns schwer erklären, ich weiß... Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 08.07.2011, 08:50     Titel:
  Antworten mit Zitat      
Wenns das nicht gibt, muss man es eben selber schreiben Wink

Aber irgendwie hast du mich nun zum Teil wieder etwas verwirrt. Also mal ein einfaches Bsp. Ich habe eine Kugel und diese in mehrere Schichten zerlegt. Nun sind mir aber Schichten verloren gegangen...wenn ich nun meine Kugel wieder zusammen setze, habe ich keine Runde Form mehr, sondern Treppenstufen (ich hoffe das ist mit Kanten gemeint). Nun wollen wir durch Interpolation die fehlenden Schichten ergänzen...Richtig Question

Legen wir die Kugel mal mit 1 als Dunkelgrau und die Umgebung mit 8 als Weiß fest. Nun soll nicht zwischen diesen Werten interpoliert werden, sondern die Größe der neuen Schichten. Man kann aber auch sagen, dass es reicht immer zwischen 2 benachbarten Schichten eine neue Schicht zu erstellen. Das gehe ich dann solang durch, bis meine neuen Schichten so dünn sind, dass die Treppen verschwinden und man wieder eine Kugel hat.

Im Grunde genommen muss man also die Fläche der Objekte in den beiden vorhandenen Schichten bestimmen und dann die dazwischen liegende neuen Flächen der Objekte berechnen.

Ich werde mal drüber nachdenken, wie man das umsetzen kann. Ist auf jeden Fall eine interessante Aufgabe Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Fiana
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 07.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2011, 11:48     Titel:
  Antworten mit Zitat      
Wäre nur einfacher, wenns das schon gäbe Wink

Es ist genau wie du sagst, die Treppenstufen sollen vermieden werden; um genau die geht es mir. Und wir wollen die fehlenden Schichten durch Interpolation ergänzen, genau.

Klar, es würd auch reichen, immer zwischen zwei Schichten die Größe der Objekte zu interpolieren. Die Schichten selbst haben immer die gleichen Ausmaße, nur die Objekte darin nicht.
Wie viele Schichten man im Endeffekt erzeugt haben möchte, kann man ja sicher leicht festlegen. Es dürfen nicht zu viele werden, da eine bestimmte Voxelgröße vorgegeben ist und das Modell realitätsnah werden soll.

Ich finde die Aufgabe auch interessant, das stimmt!
Falls mir eine Lösung einfällt, werde ich sie posten Smile Ich hab noch bisschen Zeit, drüber nachzudenken.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 08.07.2011, 11:56     Titel:
  Antworten mit Zitat      
Ein Ansätz wäre, jeweils die einzelnen Spalten oder Zeilen der beiden vorhanden Schichten zu betrachten.

Bsp:
Zeile1_Schicht1 = 0 0 0 1 1 0 0 0
Zeile1_Schicht2 = 0 1 1 1 1 1 1 0

"Interpolieren" der Schicht dazwischen

Zeile1_Schicht12 = 0 0 1 1 1 1 0 0

Du kannst ja immer nur Pixelweise vergrößern. Da ein Objekt ja immer den gleichen Grauwert hat, kann man auch recht einfach in der Zeile nach dem Wert suchen. Es wird natürlich in deinem Fall schon deutlich aufwändiger, aber das wäre machbar. Es ist dann wohl eher die Frage, wie Lange man an den neuen Schichten rechnet.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 09.07.2011, 17:50     Titel:
  Antworten mit Zitat      
Hast du schon einen Ansatz oder sogar die Lösung gefunden? Du hast ja geschrieben, dass du bereits mit der Interplation gearbeitet hast, diese aber deine Objektindizes (1...9) interpoliert hat. Eigentlich müsstes du ja die Position und Größe der Objekte (= Indizes der Matrix) in der neuen Schicht interpolieren.

Kannst du nicht sonst mal zwei Schichten als .mat File hier anhängen und am Besten noch den Code, wo deine bisherige Interpolation ausgeführt wird?
Private Nachricht senden Benutzer-Profile anzeigen
 
Fiana
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 07.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2011, 11:27     Titel:
  Antworten mit Zitat      
Hallo!

Ich hatte am Wochenende leider keine Zeit weiter drüber nachzudenken. Einen wirklich guten Ansatz habe ich auch noch nicht. Vielleicht komme ich heute im laufe des Tages noch dazu.

Ganz am Anfang hatte ich mal versucht, .mat files anzuhängen, aber das ist vom Forum her verboten, hat es mir gesagt...
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 11.07.2011, 16:40     Titel:
  Antworten mit Zitat      
Dann packe sie doch in ein .rar oder .zip Archiv...dann kannst du sie auch hier anhängen Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Fiana
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 07.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2011, 18:00     Titel:
  Antworten mit Zitat      
Ja, aus packen hätte ich auch kommen können... Rolling Eyes

Also ich hab da jetzt 2 Scheiben in dem rar-Archiv als Array gespeichert. mater_name wird mir vorher durch die Segmentierung erzeugt. Das habe ich mla mit rein gepackt, weil ich das in meinem noch nicht vollständigen Code zur Interpolation benutze.

Code:

for k = 1:length(mater_name)    
    assignin ('base',['ind_' mater_name(k,:)], find(maus == k));
    assignin ('base', mater_name(k,:), zeros(size(maus)));
end

lung(ind_lung) = 1;
bloo(ind_bloo) = 1;
fett(ind_fett) = 1;
mscl(ind_mscl) = 1;
herd(ind_herd) = 1;
cont(ind_cont) = 1;
livr(ind_livr) = 1;
bone(ind_bone) = 1;

 


Damit schreibe ich mir Arrays, in denen nur die einzelnen Organe enthalten sind. Ich habe gedacht, die evtl durch morphologische Operatoren (Dilatation und Erosion) zu interpolieren und anschließend die Organe wieder zu einer ganzen Schicht zusammen zu packen. Ich habe aber keine Ahnung, ob das geht, so weit bin ich noch nicht. Bin noch nicht so die Heldin im programmieren...

In dem Code oben will ich die indizierung der einzelnen Bereiche eigentlich auch noch in die Schleife packen, aber das hab ich auch noch nicht hinbekommen...

Naja, jetzt ist erstmal Feierabend. Bis morgen Wink

scheiben.rar
 Beschreibung:

Download
 Dateiname:  scheiben.rar
 Dateigröße:  13.89 KB
 Heruntergeladen:  500 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 17.07.2011, 23:22     Titel:
  Antworten mit Zitat      
mmh..schön länger keine Meldung mehr Question

Hast du bereits eine Lösung gefunden? Ich denke, ich habe einen ganz vernünftigen Ansatz. Leider fehlt mir das Wissen, wie ich die ganzen Schichten darstellen kann, um die Interpolation genau begutachten zu können. Ich habe in dem Screen die Funktion contour() benutzt. Eigentlich müsste man aus den insgesamt 20 Layer (inkl. 2 original bone-layer) jetzt ein 3d Bild erstellen. Aber ich weiß nicht wie...evtl. mit meshgrid? Vielleicht hat da ja jemand eine Idee Idea

bone_layers.GIF
 Beschreibung:

Download
 Dateiname:  bone_layers.GIF
 Dateigröße:  14.38 KB
 Heruntergeladen:  613 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Fiana
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 07.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.07.2011, 12:30     Titel:
  Antworten mit Zitat      
Nein, ich habe noch keine Lösung gefunden.

Ich habe meine Simulation jetzt einfach so gemacht, dass ich jeweils 5 gleiche Schichten gestapelt habe. Soooo stark sind die Kanten nicht und da die Bildverarbeitung selbst nicht das Hauptthema ist, wollte ich da nicht zu viel Zeit drauf verwenden.

Deine Layer sehen ja echt gut aus! Das nächste Problem wäre aber ja, dass man das mit allen Organtypen machen müsste und das dann auch noch passend wieder zusammen setzen muss... Das gesamte Problem wäre wahrscheinlich eher ein Thema für eine komplette Arbeit Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 20.07.2011, 12:34     Titel:
  Antworten mit Zitat      
Das Verfahren funktioniert bei allen Objekten/Schichten Wink

Ich muss aber nochmal etwas ändern, da ich bei der einzelnen Betrachtung der neuen Schichten noch Fehler entdeckt habe. Ich habe aber schon eine Idee, wie ich die Fehler beseitigen kann. Die Umsetzung wird aber noch ein paar Tage dauern.
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.