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