obliqueslice

Извлечение косого среза из 3-D объемных данных

Описание

пример

B = obliqueslice(V,point,normal) извлекает 2-D наклонный срез из 3-D объемных данных V. Срез извлекается со ссылкой на заданную точку на объёме и нормальный вектор. Плоскость нарезки перпендикулярна вектору нормали и проходит через заданную точку.

Для получения информации о способе извлечения среза относительно заданной точки и нормали см. раздел «Наклонное срезание». Ориентация извлеченного среза в плоскости изображения зависит от его положения в 3-D координатном пространстве. Для получения дополнительной информации см. раздел «Ориентация среза в плоскости изображения».

пример

B = obliqueslice(___,Name,Value) задает опции, использующие один или несколько аргументов имя-значение в дополнение к входным параметрам в предыдущем синтаксисе.

пример

[B,x,y,z] = obliqueslice(___) также возвращает 3-D Декартовы координаты извлеченного среза в вход объеме.

Примеры

свернуть все

Загрузите 3-D набор объемных данных в рабочую область.

load mri

Удалите синглтонные размерности при помощи squeeze функция.

V = squeeze(D);

Отобразите горизонтальные срезы данных при помощи montage функция.

montage(V,map,'Size',[3 9]);

Figure contains an axes. The axes contains an object of type image.

Задайте точку в объеме, через которую будет проходить срез.

point = [73 50 15.5];

Задайте вектор нормы в 3-D координатном пространстве.

normal = [0 15 20];

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

[B,x,y,z] = obliqueslice(V,point,normal);

Отобразите извлеченный срез в 3-D координатном пространстве.

figure
surf(x,y,z,B,'EdgeColor','None','HandleVisibility','off');
grid on
view([-38 12])
colormap(gray)
xlabel('x-axis')
ylabel('y-axis');
zlabel('z-axis');
title('Slice in 3-D Coordinate Space')

Постройте график точки и вектора нормали.

hold on
plot3(point(1),point(2),point(3),'or','MarkerFaceColor','r');
plot3(point(1)+[0 normal(1)],point(2)+[0 normal(2)],point(3)+[0 normal(3)], ...
    '-b','MarkerFaceColor','b');
hold off
legend('Point in the volume','Normal vector')

Figure contains an axes. The axes with title Slice in 3-D Coordinate Space contains 2 objects of type line. These objects represent Point in the volume, Normal vector.

Отобразите извлеченный срез в плоскости изображения.

figure
imshow(B,[])
title('Slice in Image Plane')

Figure contains an axes. The axes with title Slice in Image Plane contains an object of type image.

Загрузите 3-D набор объемных данных в рабочую область.

s = load(fullfile(toolboxdir('images'),'imdata','BrainMRILabeled','images','vol_001.mat'));
V = s.vol;

Отобразите горизонтальные срезы данных при помощи montage функция.

montage(V,'Indices',12:118,'Size',[8 12],'DisplayRange',[]);

Figure contains an axes. The axes contains an object of type image.

Задайте вектор нормали к плоскости в 3-D координатном пространстве.

normal = [20 0 10];

Извлеките несколько срезы вдоль направления вектора нормали с помощью for цикл. В каждой итерации:

  • Укажите точку, через которую должен пройти срез.

  • Извлеките срез, задав размер выходного сигнала 'Full' и значение заливки для пикселей заполнения как 255. Извлеченные срезы перпендикулярны вектору normal и проходят через заданную точку.

  • Отобразите извлеченные срезы.

sliceIdx = 10:5:180;

figure
for s = 1:length(sliceIdx)
    
    pt = [sliceIdx(s) 150 80];
    [B,x,y,z] = obliqueslice(V,pt,normal,'OutputSize','Full','FillValues',255);

    Bslices(:,:,s) = B;

    % Display the slice in 3-D coordinate space
    subplot('Position',[0.11 0.36 0.38 0.5])
    surf(x,y,z,B,'EdgeColor','None','HandleVisibility','off');
    grid on
    view([-24 12])
    colormap(gray)
    xlabel('x-axis')
    ylabel('y-axis');
    zlabel('z-axis');
    zlim([0 155]);
    ylim([0 250]);
    xlim([0 250]);
    title('Slice in 3-D Coordinate Space') 
    % Plot the point and the normal vector.
    hold on
    plot3(pt(1),pt(2),pt(3),'or','MarkerFaceColor','r')
    plot3( ...
        pt(1)+[-normal(1) normal(1)], ...
        pt(2)+[-normal(2) normal(2)], ...
        pt(3)+[-normal(3) normal(3)], ...
        '-b','MarkerFaceColor','b')
    legend('Point in the volume','Normal vector','Position',[0.1 0.12 0.3 0.08])
    hold off   
    % Display the extracted slice.
    subplot('Position',[0.6 0.37 0.34 0.49])
    imshow(B,[])
    title('Slice in Image Plane')
    pause(0.5);  
end    

Figure contains 2 axes. Axes 1 with title Slice in 3-D Coordinate Space contains 2 objects of type line. These objects represent Point in the volume, Normal vector. Axes 2 with title Slice in Image Plane contains an object of type image.

Отобразите извлеченные срезы изображения при помощи montage функция.

figure
montage(Bslices,'Size',[5 7],'DisplayRange',[]);

Figure contains an axes. The axes contains an object of type image.

Входные параметры

свернуть все

Входной том, заданный как 3-D числовой или 3-D категориальный массив.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical | categorical

Точка в томе, заданная как 3-элементный вектор-строка вида [px py pz].

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Вектор Normal, заданный как 3-элементный вектор-строка формы [a b c].

Чтобы извлечь ортогональный срез, можно задать для вектора normal одно из следующих значений:

  • [1 0 0] - Извлечение среза в yz -плане.

  • [0 1 0] - Извлечение среза в xz -плане.

  • [0 0 1] - Извлечение среза в xy -плане.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: obliqueslice(V,point,normal,'OutputSize','Full')

Метод интерполяции, заданный как разделенная разделенными запятой парами, состоящая из 'Method' и одно из следующих значений:

  • 'linear' - линейная интерполяция

  • 'nearest' - интерполяция по ближайшему соседу

Если V является числовым, метод интерполяции по умолчанию равен 'linear' но также может быть задано как 'nearest'. Если V категориальна, тогда метод интерполяции должен быть 'nearest'.

Типы данных: char | string

Размер выходного изображения, заданный как разделенная разделенными запятой парами, состоящая из 'OutputSize' и одно из следующих значений:

  • 'limit' - Размер выходного изображения является фактическим размером 2-D среза относительно размерностей входного объема. Если извлеченная область среза не квадратная или прямоугольная, функция автоматически заполняет извлеченную область среза дополнительными пикселями, чтобы получить квадратное или прямоугольное изображение.

  • 'full' - Размер выходного изображения может быть не равен фактическому размеру 2-D среза. Размер выходного изображения устанавливается на максимальный размер среза, который может быть получен из объема входа относительно вектора normal normal. Чтобы изменить размер изображения, граница извлеченного среза 2-D заполняется дополнительными строками и столбцами.

    Значение заливки для заполненных пикселей по умолчанию 0. Можно использовать 'FillValuesАргумент в виде пары имя-значение для изменения значения.

Типы данных: char | string

Значение заливки для заполненных пикселей, заданное как разделенная разделенными запятой парами, состоящая из 'FillValues' и числовой скаляр, вектор символов или missing.

Когда V является числовым массивом, задайте

  • 0 для нулевого заполнения.

  • числовой скаляр для постоянного заполнения.

Когда V является категориальным массивом, задайте

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

  • missing, если категория во входных данных равна <undefined>.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char

Выходные аргументы

свернуть все

Вывод 2-D срез, возвращенный как числовая или категориальная матрица. Тип данных выходного среза совпадает с типом данных входного тома.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical | categorical

x -координаты выходного среза в объёме 3-D, возвращенные в виде числовой матрицы размера такой же, как выход срез, B.

Типы данных: single

y -координаты выходного среза в объёме 3-D, возвращенные в виде числовой матрицы размера такой же, как выход срез, B.

Типы данных: single

z -координаты выходного среза в объёме 3-D, возвращенные в виде числовой матрицы размера такой же, как выход срез, B.

Типы данных: single

Подробнее о

свернуть все

Наклонное нарезание

Учитывая точку (px, py, pz) и вектор нормали (a, b, c), функция решает плоское уравнение a (x - px) + b (y - py) + c (z - pz) = 0

Точка (px, py, pz) лежит в объемных данных. Плоскость нарезки перпендикулярна вектору нормали и проходит через заданную точку.

Ориентация среза в плоскости изображения

Ориентация извлеченного среза в плоскости изображения зависит от его угла наклона относительно горизонтальной и вертикальной плоскостей.

Угол среза, который находится близко к источнику последнего среза (0, 0, P), в объемных данных, составляет верхний левый пиксель в плоскости изображения. Чтобы заполнить пиксельные значения в плоскости изображения, начните с угла среза и считайте значения интенсивности в порядке слева направо, сверху вниз скан.

См. также

Функции

Объекты

Введенный в R2020a