Морфологические операции на двоичном объеме
Загрузите 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.