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' воксели к '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

Установка пикселей на On с операцией заливки

Установите центральный воксель внутреннего куба равным 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

Используйте '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 или трехмерные массивы. Если вы задаете 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 или больше вокселей (большинство) в его 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