Методы для визуализации скалярных данных объема

Что такое скалярные данные объема?

Типичные скалярные данные об объеме состоят из трехмерного массива данных и трех координатных массивов тех же размерностей. Координатные массивы задают x-, y-, и z-координаты для каждой точки данных.

Модули координат зависят от типа данных. Например, данные о потоке могут иметь координатные модули дюймов и модули данных фунта на квадратный дюйм.

Много функций MATLAB® полезны для визуализации скалярных данных:

  • Плоскости разбиения обеспечивают способ исследовать распределение значений данных в объеме путем отображения значений с цветами. Можно ориентировать плоскости разбиения под произвольными углами, а также использовать неплоские срезы. (Для рисунков того, как использовать плоскости разбиения, смотрите slice, пример разрезания объема и плоскости разбиения раньше показывали контекст.) Можно указать, что данные раньше окрашивали изоповерхности, позволяя вам отобразить различную информацию в цветной и поверхностной форме (см. isocolors).

  • Срезы контура являются контурными графиками, чертившими в определенных координатах в объеме. Контурные графики позволяют вам видеть, где в данной плоскости значения данных равны. Смотрите contourslice для примера.

  • Изоповерхности являются поверхностями, созданными при помощи точек равного значения как вершины patch графические объекты.

Способы отобразить данные MRI

Пример скалярных данных включает данные о магнитно-резонансной томографии (MRI). Эти данные обычно содержат много плоскостей разбиения, севших через объем, таких как человеческое тело. MATLAB включает набор данных MRI, который содержит 27 фрагментов изображения человеческой головы. Этот пример иллюстрирует, что следующие методы применились к данным MRI:

Изменение формата данных

Данные MRI, D, хранится как 128 128 1 27 массивами. Третье измерение массива обычно используется в данных о цвете изображения. Однако, поскольку они индексируются изображения (палитра, map, также загружается) в третьей размерности нет никакой информации, которая можно удалить использование squeeze команда. Результатом являются 128 128 27 массивами.

Первый шаг должен загрузить данные и преобразовать массив данных от 4-D до 3-D.

load mri
D = squeeze(D);

Отображение изображений данных MRI

Чтобы отобразить одно из изображений MRI, используйте image команда:

  • Создайте новый figure это использует палитру MRI, которая загружается с данными:

  • Индексируйте в массив данных, чтобы получить данные для восьмого изображения.

  • Настройте axis масштабирование.

figure
colormap(map)
image_num = 8;
image(D(:,:,image_num))
axis image

Сохраните x-и пределы оси Y для использования в следующей части примера:

x = xlim;
y = ylim;

Отображение 2D среза контура

Визуализируйте данные MRI как данные об объеме, потому что это - набор срезов, бравшихся прогрессивно через 3-D объект. Используйте contourslice отобразить контурный график среза объема. Создайте контурный график с той же ориентацией и размером как изображение, созданное в первой части этого примера:

  • Настройте направление оси Y (axis).

  • Установите пределы (xlimylim).

  • Установите соотношение сторон данных (daspect).

Чтобы улучшить видимость деталей, этот контурный график использует jet палитра. brighten функция уменьшает яркость значений цвета.

cm = brighten(jet(length(map)),-.5);
figure
colormap(cm)
contourslice(D,[],[],image_num)
axis ij
xlim(x)
ylim(y)
daspect([1,1,1])

Отображение 3-D срезов контура

В отличие от изображений, которые являются 2D объектами, срезы контура являются 3-D объектами, которые можно отобразить в любой ориентации. Например, можно отобразить четыре среза контура в 3-D представлении.

figure
colormap(cm)
contourslice(D,[],[],[1,12,19,27],8);
view(3);
axis tight

Применение изоповерхности к данным MRI

Можно использовать изоповерхности, чтобы отобразить полную структуру объема. Когда объединено с изодном, этот метод может показать информацию о данных по внутренней части изоповерхности.

Во-первых, сглаживайте данные с smooth3; затем используйте isosurface вычислить изоданные. Используйте patch отобразить эти данные в фигуре, которая использует исходную полутоновую карту цветов в изодне.

figure
colormap(map)
Ds = smooth3(D);
hiso = patch(isosurface(Ds,5),...
   'FaceColor',[1,.75,.65],...
   'EdgeColor','none');
   isonormals(Ds,hiso)

isonormals функционируйте к рендерингу изоповерхность с помощью нормалей вершин, полученных из сглаживавших данных, улучшая качество изоповерхности. Изоповерхность использует один цвет, чтобы представлять его изозначение.

Добавляющие изопрописные буквы показывают срезанную поверхность

Используйте isocaps вычислить данные для другой закрашенной фигуры, которая отображена в том же изозначении (5) как изоповерхность. Используйте не сглаживавшие данные (D) показать детали внутренней части. Вы видите это как далеко нарезанную макушку. Более низкое изодно не отображается в итоговом представлении.

hcap = patch(isocaps(D,5),...
   'FaceColor','interp',...
   'EdgeColor','none');

Определение представления

Задайте представление и установите соотношение сторон (viewосьdaspect).

view(35,30) 
axis tight 
daspect([1,1,.4])

Добавление подсветки

Добавьте подсветку и повторно вычислите поверхностные нормали на основе градиента данных об объеме, которые производят более сглаженную подсветку (camlightподсветкаизонормали). Увеличьте AmbientStrength свойство изодна украсить окраску, не влияя на изоповерхность. Установите SpecularColorReflectance из изоповерхности, чтобы сделать цвет зеркального отраженного света ближе к цвету изоповерхности; затем установите SpecularExponent уменьшать размер зеркального пятна.

lightangle(45,30);
lighting gouraud
hcap.AmbientStrength = 0.6;
hiso.SpecularColorReflectance = 0;
hiso.SpecularExponent = 50;

Изодно, объединенное с изоповерхностью, чтобы визуализировать данные MRI.

Использование изодна интерполировало окраску поверхности, что означает, что палитра фигуры определяет окраску закрашенной фигуры. Этот пример использует палитру, предоставленную данными.

Чтобы отобразить изодно в других значениях данных, попытайтесь изменить значение изоповерхности или используйте subvolume команда. Смотрите isocaps и subvolume страницы с описанием для примеров.