Извлечение косого среза из 3-D объемных данных
извлекает 2-D наклонный срез из 3-D объемных данных B
= obliqueslice(V
,point
,normal
)V
. Срез извлекается со ссылкой на заданную точку на объёме и нормальный вектор. Плоскость нарезки перпендикулярна вектору нормали и проходит через заданную точку.
Для получения информации о способе извлечения среза относительно заданной точки и нормали см. раздел «Наклонное срезание». Ориентация извлеченного среза в плоскости изображения зависит от его положения в 3-D координатном пространстве. Для получения дополнительной информации см. раздел «Ориентация среза в плоскости изображения».
задает опции, использующие один или несколько аргументов имя-значение в дополнение к входным параметрам в предыдущем синтаксисе.B
= obliqueslice(___,Name,Value
)
Загрузите 3-D набор объемных данных в рабочую область.
load mri
Удалите синглтонные размерности при помощи squeeze
функция.
V = squeeze(D);
Отобразите горизонтальные срезы данных при помощи montage
функция.
montage(V,map,'Size',[3 9]);
Задайте точку в объеме, через которую будет проходить срез.
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
imshow(B,[])
title('Slice in Image Plane')
Загрузите 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',[]);
Задайте вектор нормали к плоскости в 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
Отобразите извлеченные срезы изображения при помощи montage
функция.
figure montage(Bslices,'Size',[5 7],'DisplayRange',[]);
V
- Входной объемВходной том, заданный как 3-D числовой или 3-D категориальный массив.
Типы данных: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
| categorical
point
- Точка в объемеТочка в томе, заданная как 3-элементный вектор-строка вида [px py pz].
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
normal
- Вектор NormalВектор 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'
Метод интерполяции, заданный как разделенная разделенными запятой парами, состоящая из 'Method'
и одно из следующих значений:
'linear'
- линейная интерполяция
'nearest'
- интерполяция по ближайшему соседу
Если V
является числовым, метод интерполяции по умолчанию равен 'linear'
но также может быть задано как 'nearest'
. Если V
категориальна, тогда метод интерполяции должен быть 'nearest'
.
Типы данных: char
| string
'OuputSize'
- Размер выходного изображения'limit'
(по умолчанию) | 'full'
Размер выходного изображения, заданный как разделенная разделенными запятой парами, состоящая из 'OutputSize'
и одно из следующих значений:
'limit'
- Размер выходного изображения является фактическим размером 2-D среза относительно размерностей входного объема. Если извлеченная область среза не квадратная или прямоугольная, функция автоматически заполняет извлеченную область среза дополнительными пикселями, чтобы получить квадратное или прямоугольное изображение.
'full'
- Размер выходного изображения может быть не равен фактическому размеру 2-D среза. Размер выходного изображения устанавливается на максимальный размер среза, который может быть получен из объема входа относительно вектора normal normal
. Чтобы изменить размер изображения, граница извлеченного среза 2-D заполняется дополнительными строками и столбцами.
Значение заливки для заполненных пикселей по умолчанию 0. Можно использовать 'FillValues
Аргумент в виде пары имя-значение для изменения значения.
Типы данных: char
| string
'FillValues'
- Значение заливки для заполненных пикселей0
(по умолчанию) | числовой скаляр | символьный вектор | missing
Значение заливки для заполненных пикселей, заданное как разделенная разделенными запятой парами, состоящая из 'FillValues'
и числовой скаляр, вектор символов или missing
.
Когда V
является числовым массивом, задайте
0
для нулевого заполнения.
числовой скаляр для постоянного заполнения.
Когда V
является категориальным массивом, задайте
вектор символов, который обозначает категорию во входных данных. Чтобы узнать категории, используйте categories
функция.
missing
, если категория во входных данных равна <undefined>
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
B
- Вывод 2-D срезВывод 2-D срез, возвращенный как числовая или категориальная матрица. Тип данных выходного среза совпадает с типом данных входного тома.
Типы данных: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
| categorical
x
- x -координаты выходного срезаx -координаты выходного среза в объёме 3-D, возвращенные в виде числовой матрицы размера такой же, как выход срез, B
.
Типы данных: single
y
- y -координаты выходного срезаy -координаты выходного среза в объёме 3-D, возвращенные в виде числовой матрицы размера такой же, как выход срез, B
.
Типы данных: single
z
- z -координаты выходного среза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), в объемных данных, составляет верхний левый пиксель в плоскости изображения. Чтобы заполнить пиксельные значения в плоскости изображения, начните с угла среза и считайте значения интенсивности в порядке слева направо, сверху вниз скан.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.