Морфологические операции на бинарном объеме
J = bwmorph3(V,operation)
Загрузите 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
Введите объемВведите объем, заданный как действительный, неразреженный, числовой или логический массив. bwmorph3
принимает 1D, 2D, или трехмерные массивы. Если вы задаете 1D или 2D входные массивы, bwmorph3
выполняет morphogical операцию, как задано для 3-D объема. Если вы хотите 2D поведение, используйте bwmorph
вместо этого.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический
operation
— Morphological, чтобы выполнитьМорфологическая операция, чтобы выполнить, заданный как один из следующих векторов символов или представить скаляр в виде строки. Для примеров этих операций см. Рисунки Морфологических Операций.
Операция | Описание | Рисунок |
---|---|---|
| Найдите точки разветвления скелета. Точки разветвления являются вокселами на перекрестке, где несколько ответвлений встречаются. Чтобы найти точки разветвления, изображение должно быть skeletonized. Чтобы создать изображение skeletonized, используйте |
|
| Удалите изолированные вокселы, установив их на 0. Изолированный воксел является отдельным, связанным с 26 вокселом, который установлен в |
|
| Найдите конечные точки скелета. Конечные точки являются вокселами в концах ответвлений. Примечание: Чтобы найти конечные точки, изображение должно быть skeletonized. Чтобы создать изображение skeletonized, используйте |
|
| Заполните изолированные внутренние вокселы, установив их на |
|
| Сохраните набор воксела к | См. рисунки морфологических операций. |
| Удалите внутренние вокселы, установив его на |
|
Типы данных: char | string
J
Выведите объемВыведите объем, возвращенный как логический массив.
Чтобы выполнить морфологическую эрозию операций или расширение на 3-D объемах, используйте imerode
или функции imdilate
, указывая элемент структурирования ones(3,3,3)
.
Чтобы выполнить морфологическое закрытие, открытие, фильтрация цилиндра или фильтрация нижней шляпы на 3-D объемах, использует imclose
, imopen
, imtophat
или функции imbothat
, указывая элемент структурирования ones(3,3,3)
.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.