Морфологические операции на двоичном объеме
Загрузите 3-D объемные данные МРТ и создайте двоичный объем. Использование 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 cuboid 0s, который содержит куб 1 с 3 на 3 на 3 в ее центре.
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
Установка пикселей на On с операцией заливки
Установите центральный воксель внутреннего куба равным 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
Используйте '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
принимает 1-D, 2-D или трехмерные массивы. Если вы задаете 1-D или 2-D входных массивов, то bwmorph3
выполняет морфологическую операцию, заданную для объема 3-D. Если вы хотите 2-D поведения, используйте bwmorph
вместо этого.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
operation
- Морфологическая операцияМорфологическая операция для выполнения, заданная как один из следующих векторов символов или строковый скаляр. Для примеров этих операций смотрите Рисунки морфологических операций.
Операция | Описание | Рисунок |
---|---|---|
| Найти точки ветви каркаса. Точки ветви являются вокселями в месте соединения, где встречаются несколько ветвей. Чтобы найти точки ветви, изображение должно быть скелетировано. Чтобы создать скелетированное изображение, используйте |
|
| Удалите изолированные воксели, установив их на 0. Изолированный воксель является индивидуальным 26-связным вокселем, который установлен в |
|
| Найти конечные точки каркаса. Конечные точки являются вокселями в концах ветвей. Примечание.Чтобы найти конечные точки, изображение должно быть скелетировано. Чтобы создать скелетированное изображение, используйте |
|
| Заполните изолированные внутренние воксели, установив для них значение |
|
| Сохраните значение воксель в | См. рисунки морфологических операций. |
| Удалите внутренние воксели, установив для них значение |
|
Типы данных: 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.