exponenta event banner

obliqueslice

Извлеките наклонную часть из 3D объемных данных

Описание

пример

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

Сведения о том, как извлекается фрагмент относительно заданной точки и нормали, см. в разделе Косое разрезание. Ориентация извлеченного фрагмента в плоскости изображения зависит от его положения в 3-D координатном пространстве. Дополнительные сведения см. в разделе Ориентация фрагмента в плоскости изображения.

пример

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

пример

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

Примеры

свернуть все

Загрузите в рабочую область 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];

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

[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. Извлеченные фрагменты перпендикулярны нормальному вектору и проходят через указанную точку.

  • Просмотрите извлеченные фрагменты.

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

Нормальный вектор, указанный как 3-элементный вектор строки формы [a b c].

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

  • [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. Для изменения размера изображения граница извлеченного фрагмента 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