bwmorph3

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

Синтаксис

Описание

пример

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

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

свернуть все

Введите объем, заданный как числовой или логический массив. Для числового входа любые ненулевые пиксели считаются 1 TRUE).

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

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

Операция

Описание

Рисунок

'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

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

свернуть все

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

Советы

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

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

Введенный в R2018a