Морфологические операции на бинарном объеме
Загрузите 3-D MRI объемные данные и создайте бинарный объем. Используйте volshow просмотреть объемные данные.
load mristack;
BW1 = mristack > 127;
volshow(BW1);
Чтобы удалить воксели, которые установлены в 1 и которые также окружаются набором вокселей к 0, выполните 'clean' операция на объемных данных. При определении, который воксели удалить, 'clean' операция рассматривает 26 соседних вокселей. Используйте volshow просмотреть результаты.
BW2 = bwmorph3(BW1,'clean');
volshow(BW2);
Для сравнения выполните 'majority' операция на объемных данных. 'majority' операция выполняет подобную задачу к 'clean' операция, но только сохраняет воксели, если больше чем половина (большинство) вокселей в окружении целевого вокселя установлена в 1. При определении, который воксели сохранить, 'majority' операция также рассматривает 26 соседних вокселей. Используйте volshow просмотреть результаты.
BW3 = bwmorph3(BW1,'majority');
volshow(BW3); 
В этом примере показано, как каждая из морфологических операций поддержана bwmorph3 работает над простыми томами.
Сделайте 9 9 3 кубоидами 0s, который содержит 3 3х3 кубом 1 с в ее центре.
innercube = ones(3,3,3);
cube_center = padarray(innercube,[3 3],0,'both')cube_center =
cube_center(:,:,1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_center(:,:,2) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_center(:,:,3) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Превращение пикселей долой удалить операцию
Установите центральный воксель внутреннего куба к 0 использование 'remove' операция. Эта операция устанавливает значение любого 'on' воксель полностью окружается 'on' воксели к 'off'.
remove_center = bwmorph3(cube_center,'remove')remove_center = 9x9x3 logical array
remove_center(:,:,1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
remove_center(:,:,2) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 0 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
remove_center(:,:,3) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Установка пикселей к на с операцией заполнения
Установите центральный воксель внутреннего куба к 1 использование 'fill' операция. Эта операция устанавливает значение любого 'off' воксель полностью окружается 'on' воксели к 'on'.
fill_center = bwmorph3(remove_center,'fill')fill_center = 9x9x3 logical array
fill_center(:,:,1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
fill_center(:,:,2) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
fill_center(:,:,3) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Удаление несвязанных пикселей с чистой операцией
Используйте 'clean' операция, чтобы удалить любые случайные воксели, которые установлены в 1 но не соединяются с компонентом в объеме. Пример создает случайный воксель путем установки случайного вокселя на второй плоскости к 1 и затем использует 'clean' операция, чтобы удалить его.
cube_center(2,2,2) = 1
cube_center =
cube_center(:,:,1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_center(:,:,2) =
0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_center(:,:,3) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_cleaned = bwmorph3(cube_center,'clean')cube_cleaned = 9x9x3 logical array
cube_cleaned(:,:,1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_cleaned(:,:,2) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_cleaned(:,:,3) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Нахождение большинства
Найдите большинство cube_center использование 'majority' операция. Эта операция сохраняет воксель, только если больше чем половина (большинство) вокселей в связанном с 26 окружении вокруг вокселя установлена в 1.
cube_major = bwmorph3(cube_center,'majority')cube_major = 9x9x3 logical array
cube_major(:,:,1) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_major(:,:,2) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
cube_major(:,:,3) =
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Создание формы Подобно скелету
Чтобы проиллюстрировать точки разветвления и опции конечных точек, создайте другую небольшую матрицу, на этот раз с линейной формой, как скелет.
x1 = eye(5); x2 = zeros(5); x2(3,3) = 1; x3 = x2; shape = cat(3,x1,x2,x3)
shape =
shape(:,:,1) =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
shape(:,:,2) =
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
shape(:,:,3) =
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
Нахождение конечных точек
Найдите конечные точки формы с помощью 'endpoints' операция. Форма имеет три конечных точки, один в каждом конце диагонали в первой плоскости и один в конце линии через центр, на третьей плоскости.
shape_endpts = bwmorph3(shape,'endpoints')shape_endpts = 5x5x3 logical array
shape_endpts(:,:,1) =
1 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 1
shape_endpts(:,:,2) =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
shape_endpts(:,:,3) =
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
Нахождение точек разветвления
Найдите точки разветвления формы с помощью 'branchpoints' операция. Форма имеет одну точку разветвления, где диагональная линия и горизонтальная линия встречаются.
shape_brpts = bwmorph3(shape,'branchpoints')shape_brpts = 5x5x3 logical array
shape_brpts(:,:,1) =
0 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 0
shape_brpts(:,:,2) =
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
shape_brpts(:,:,3) =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
V — Введите объемВведите объем в виде числового или логического массива. Для числового входа любые ненулевые пиксели считаются 1 TRUE).
bwmorph3 принимает 1D, 2D, или трехмерные массивы. Если вы задаете 1D или 2D входные массивы, то bwmorph3 выполняет морфологическую операцию, как задано для 3-D объема. Если вы хотите 2D поведение, используйте bwmorph вместо этого.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
operation — Морфологическая операция, чтобы выполнитьМорфологическая операция, чтобы выполнить в виде одного из следующих векторов символов или строкового скаляра. Для примеров этих операций см. Рисунки Морфологических Операций.
Операция | Описание | Рисунок |
|---|---|---|
| Найдите точки разветвления скелета. Точки разветвления являются вокселями на перекрестке, где несколько ветвей встречаются. Чтобы найти точки разветвления, изображение должно быть skeletonized. Чтобы создать изображение skeletonized, используйте |
|
| Удалите изолированные воксели, установив их на 0. Изолированный воксель является отдельным, связанным с 26 вокселем, который установлен в |
|
| Найдите конечные точки скелета. Конечные точки являются вокселями в концах ветвей. Примечание: Чтобы найти конечные точки, изображение должно быть skeletonized. Чтобы создать изображение skeletonized, используйте |
|
| Заполните изолированные внутренние воксели, установив их на |
|
| Сохраните набор вокселя к | См. рисунки морфологических операций. |
| Удалите внутренние воксели, установив его на |
|
Типы данных: char | string
J — Объем после морфологических операцийОбъем после морфологических операций, возвращенных как логический массив одного размера с входным объемом V.
Чтобы выполнить морфологическую эрозию операций или расширение на 3-D объемах, используйте imerode или imdilate функции, указывая элемент структурирования ones(3,3,3).
Чтобы выполнить морфологическое закрытие, открытие, фильтрация цилиндра или фильтрация нижней шляпы на 3-D объемах, использует imclose, imopen, imtophat, или imbothat функции, указывая элемент структурирования ones(3,3,3).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.