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