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

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

Типичные скалярные данные об объеме состоят из трехмерного массива данных и трех координатных массивов тех же размерностей. Координатные массивы задают 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).

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

  • Установите соотношение сторон данных (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, axis, daspect).

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

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

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

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

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

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

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