bwmorph3

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

Синтаксис

J = bwmorph3(V,operation)

Описание

пример

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

Примеры

свернуть все

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

Входные параметры

свернуть все

Введите объем, заданный как действительный, неразреженный, числовой или логический массив. bwmorph3 принимает 1D, 2D, или трехмерные массивы. Если вы задаете 1D или 2D входные массивы, bwmorph3 выполняет morphogical операцию, как задано для 3-D объема. Если вы хотите 2D поведение, используйте bwmorph вместо этого.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический

Морфологическая операция, чтобы выполнить, заданный как один из следующих векторов символов или представить скаляр в виде строки. Для примеров этих операций см. Рисунки Морфологических Операций.

Операция

Описание

Рисунок

'branchpoints'

Найдите точки разветвления скелета. Точки разветвления являются вокселами на перекрестке, где несколько ответвлений встречаются.

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

'clean'

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

'endpoints'

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

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

'fill'

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

'majority'

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

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

'remove'

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

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

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

свернуть все

Выведите объем, возвращенный как логический массив.

Советы

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

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

Введенный в R2018a