Создание 3D-объема из набора 2D-изображений в градациях серого - PullRequest
10 голосов
/ 31 июля 2011

Я хочу создать трехмерный том из набора изображений в градациях серого, используя Matlab. Набор содержит непрерывные и квантованные срезы 2D изображения в градациях серого. Я все еще считаю себя новичком в Matlab, но это то, что я сейчас думаю:

  • создать пустое пространство для трехмерного тома.
  • На каждом изображении мы выполняем все операции предварительной обработки, чтобы получить только ту часть, которая нам интересна. (В этом вопросе предположим, что эта часть предварительной обработки всегда работает безупречно)
  • Пройдя по изображению, координаты x и y каждого пикселя на 2D будут перенесены в пустое пространство. Для координаты z мы можем использовать номер среза относительно расстояния между срезами. Если пиксель находится рядом с другим пикселем, трехмерные точки будут соединены вместе.
  • Повторяйте предыдущие 2 шага, пока все кусочки не будут сделаны. Теперь у нас будут все точки, соединенные так же, как в 2D-срезах.

Но тут возникает проблема, как мы можем соединить точки между срезами, чтобы эти точки могли стать объемом? Или есть более надежный способ сделать это в Matlab? Любое предложение высоко ценится.

Ответы [ 2 ]

16 голосов
/ 01 августа 2011

Часть 0 - Допущения


  • все 2D-изображения имеют одинаковое измерение, поэтому ваш 3D-объем может содержать их все в прямоугольном кубе
  • Большинство пикселей в каждом из 2D-изображений имеют пространственные 3D-отношения (вы не можете много визуализировать, если пиксели в каждом из 2D-изображений имеют какое-то случайное распределение.)

Часть 1. Визуализация трехмерного тома из стопки 2D-изображений


Чтобы визуализировать или реконструировать трехмерный том из стопки 2D-изображений, вы можете попробоватьследующие наборы инструментов в Matlab.

1 Интерактивный просмотр изображений 3D CT / MRI http://www.mathworks.com/matlabcentral/fileexchange/29134-3d-ctmri-images-interactive-sliding-viewer

[2] Viewer3D http://www.mathworks.com/matlabcentral/fileexchange/21993-viewer3d

[3] Image3 http://www.mathworks.com/matlabcentral/fileexchange/21881-image3

[4] Surface2Volume http://www.mathworks.com/matlabcentral/fileexchange/8772-surface2volume

[5] SliceOMatic http://www.mathworks.com/matlabcentral/fileexchange/764

Обратите внимание, что если вы знакомы с VTK, вы можете попробовать это: [6] matVTKhttp://www.cir.meduniwien.ac.at/matvtk/

В настоящее время я придерживаюсь [5] SliceOMatic за его простоту и удобство использования.Однако по умолчанию рендеринг 3D в Matlab довольно медленный.Включение openGL даст более быстрый рендеринг.(http://www.mathworks.com/help/techdoc/ref/opengl.html) Или, проще говоря, set (gcf, 'Renderer', 'OpenGL') .


Часть 2. Интерполяция пикселей между срезами


Чтобы интерполировать пиксели между срезами, вам нужно указать метод интерполяции (некоторые из вышеуказанных наборов инструментов имеют такую ​​возможность / гибкость. В противном случае, чтобы дать вам преимущество, некоторые примеры для интерполяцииявляются бикубическими, сплайновыми, полиномиальными и т. д. (вы можете решить это, посмотрев в Google или Google / scholar методы интерполяции, более специфичные для вашей проблемной области).


Часть 3- 3D-предварительная обработка


Рассматривая свои процедуры, вы обрабатываете объемные данные, сначала обрабатывая каждое из 2D-изображений. Во многих продвинутых алгоритмах или в реальной 3D-обработке вы можетеДля этого сначала нужно обработать объемные данные в 3D-области (проще говоря, сначала вы берете на учет 26 или более соседей). После того, как этот шаг сделан, вы можете просто вывести объемныйданные в стопку двумерных изображений для просмотра в поперечном сечении или для подачи в один из вышеупомянутых наборов инструментов для просмотра 3D или вывода в сторонние приложения для просмотра 3D.


Я следовал приведенным выше концепциям для своих собственных исследовательских проектов в области медицинской визуализации, и приведенный выше вывод основан на моем опыте исследований, задокументированном здесь (с последними изменениями) .

3 голосов
/ 01 августа 2011

MATLAB обычно строит объемные данные, используя трехмерный массив.Точки данных пространственно равномерно разделены вдоль каждой оси.Если в 3d-массиве есть сайты, для которых у вас нет данных, обычно им присваивается значение NaN, и различные функции построения графиков обычно могут справиться с этим разумным образом (т. Е. Обычно ведут себя так, как вы предполагали).

Если вы загружаете срезы в трехмерный массив так, что смежные точки в направлении z данных также смежны в 3-м измерении массива, тогда у вас все будет в порядке.

...