|
|
3D Objekte anhand von Grauwerten zusammenfassen |
|
Fiana |
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 07.07.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2011, 12:25
Titel: 3D Objekte anhand von Grauwerten zusammenfassen
|
|
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!
|
|
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 07.07.2011, 14:13
Titel:
|
|
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.
|
|
|
Fiana |
Themenstarter
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 07.07.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2011, 16:50
Titel:
|
|
|
|
|
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? Sonst versuch ich es morgen nochmal besser zu erklären
Beschreibung: |
|
Download |
Dateiname: |
schicht.jpg |
Dateigröße: |
23.31 KB |
Heruntergeladen: |
681 mal |
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 07.07.2011, 17:22
Titel:
|
|
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ß?
|
|
|
Fiana |
Themenstarter
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 07.07.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2011, 23:41
Titel:
|
|
|
|
|
Also eine Schicht will ich aus meinen 4 Bildern nicht machen. Das sollen eher mehr Schichten werden.
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ß...
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 08.07.2011, 07:50
Titel:
|
|
|
|
|
Wenns das nicht gibt, muss man es eben selber schreiben
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
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
|
|
|
Fiana |
Themenstarter
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 07.07.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.07.2011, 10:48
Titel:
|
|
Wäre nur einfacher, wenns das schon gäbe
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 Ich hab noch bisschen Zeit, drüber nachzudenken.
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 08.07.2011, 10:56
Titel:
|
|
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.
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 09.07.2011, 16:50
Titel:
|
|
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?
|
|
|
Fiana |
Themenstarter
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 07.07.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.07.2011, 10:27
Titel:
|
|
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...
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 11.07.2011, 15:40
Titel:
|
|
Dann packe sie doch in ein .rar oder .zip Archiv...dann kannst du sie auch hier anhängen
|
|
|
Fiana |
Themenstarter
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 07.07.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.07.2011, 17:00
Titel:
|
|
|
|
|
Ja, aus packen hätte ich auch kommen können...
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.
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
Beschreibung: |
|
Download |
Dateiname: |
scheiben.rar |
Dateigröße: |
13.89 KB |
Heruntergeladen: |
535 mal |
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 17.07.2011, 22:22
Titel:
|
|
mmh..schön länger keine Meldung mehr
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
Beschreibung: |
|
Download |
Dateiname: |
bone_layers.GIF |
Dateigröße: |
14.38 KB |
Heruntergeladen: |
645 mal |
|
|
|
Fiana |
Themenstarter
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 07.07.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.07.2011, 11:30
Titel:
|
|
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
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 20.07.2011, 11:34
Titel:
|
|
Das Verfahren funktioniert bei allen Objekten/Schichten
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.
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|