exponenta event banner

bwmorph3

Морфологические операции с двоичным объемом

Описание

пример

J = bwmorph3(V,operation) применяет морфологическую операцию, заданную строковым или символьным вектором operation в двоичный том V. bwmorph3 возвращает результаты операции в логическом томе J.

Примеры

свернуть все

Загрузите 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

Входные аргументы

свернуть все

Входной том, указанный как числовой или логический массив. Для числового ввода любые ненулевые пикселы считаются 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

Выполняемая морфологическая операция, заданная как один из следующих векторов символов или скаляр строки. Примеры этих операций см. в разделе Иллюстрации морфологических операций.

Операция

Описание

Иллюстрация

'branchpoints'

Найдите точки ответвления скелета. Точки ответвления - это воксели на стыке, где встречаются несколько ответвлений.

Чтобы найти точки ответвления, изображение должно быть скелетизировано. Чтобы создать скелетированное изображение, используйте bwskel.

'clean'

Удалите изолированные воксели, установив для них значение 0. Изолированный воксель - это индивидуальный 26-подключенный воксель, который установлен в 1 которые окружены вокселами, установленными на 0.

'endpoints'

Найдите конечные точки скелета. Конечными точками являются вокселы на концах ветвей.

Примечание.Чтобы найти конечные точки, изображение должно быть скелетизировано. Чтобы создать скелетированное изображение, используйте bwskel.

'fill'

Заполните изолированные внутренние воксели, установив для них значение 1. Изолированные внутренние воксели - это отдельные воксели, для которых установлено значение 0 которые окружены (6-соединенные) вокселами, установленными на 1.

'majority'

Сохранить для вокселя значение 1 если 14 или больше voxels (большинство) в его 3 на 3 на 3, связанный с 26 район установлен в 1; в противном случае установите воксель в значение 0.

См. иллюстрации морфологических операций.

'remove'

Удалите внутренние воксели, установив для них значение 0. Внутренние воксели - это отдельные воксели, для которых установлено значение 1 которые окружены (6-соединенные) вокселами, установленными на 1.

Типы данных: char | string

Выходные аргументы

свернуть все

Том после морфологических операций, возвращаемый как логический массив того же размера, что и входной том V.

Совет

  • Для выполнения морфологических операций эрозии или расширения 3-D объемов используйте imerode или imdilate функции, определение элемента структурирования ones(3,3,3).

  • Чтобы выполнить морфологическое закрытие, открытие, фильтрацию верхней шляпы или фильтрацию нижней шляпы для 3-D объемов, используйте imclose, imopen, imtophat, или imbothat функции, определение элемента структурирования ones(3,3,3).

Представлен в R2018a