exponenta event banner

bwmorph

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

Описание

пример

BW2 = bwmorph(BW,operation) применяет определенную морфологическую операцию к двоичному изображению BW.

Примечание

Для выполнения морфологических операций на 3-D объемном изображении используйте bwmorph3.

BW2 = bwmorph(BW,operation,n) применяет операцию n времена. n может быть Inf, в этом случае операция повторяется до тех пор, пока изображение больше не изменится.

Примеры

свернуть все

Прочитать двоичное изображение и отобразить его.

BW = imread('circles.png');
imshow(BW);

Figure contains an axes. The axes contains an object of type image.

Удалите внутренние пикселы, чтобы оставить контур фигур.

BW2 = bwmorph(BW,'remove');
figure
imshow(BW2)

Figure contains an axes. The axes contains an object of type image.

Получить скелет изображения.

BW3 = bwmorph(BW,'skel',Inf);
figure
imshow(BW3)

Figure contains an axes. The axes contains an object of type image.

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

свернуть все

Двоичное изображение, указанное как 2-D числовая матрица или 2-D логическая матрица. Для числового ввода любые ненулевые пикселы считаются 1 (true).

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

Морфологическая операция, указанная как одно из следующих.

Операция

Описание

'bothat'

Выполняет морфологическую операцию «нижняя шапка», возвращая изображение минус морфологическое закрытие изображения (расширение с последующей эрозией).

'branchpoints'

Найдите точки ответвления скелета. Например:

0  0  1  0  0           0  0  0  0  0
0  0  1  0  0  becomes  0  0  0  0  0
1  1  1  1  1           0  0  1  0  0
0  0  1  0  0           0  0  0  0  0
0  0  1  0  0           0  0  0  0  0

Примечание.Чтобы найти точки ответвления, изображение должно быть скелетизировано. Чтобы создать скелетированное изображение, используйте bwmorph(BW,'skel').

'bridge'

Соединяет неподключенные пикселы, то есть устанавливает 0-значные пикселы в 1 если они имеют два ненулевых соседей, которые не подключены. Например:

1  0  0           1  1  0 
1  0  1  becomes  1  1  1 
0  0  1           0  1  1

'clean'

Удаляет изолированные пикселы (отдельные 1, окруженные 0), такие как центральный пиксель в этом массиве.

0  0  0 
0  1  0 
0  0  0

'close'

Осуществляет морфологическое закрытие (расширение с последующей эрозией).

'diag'

Использование диагональной заливки для устранения 8-связности фона. Например:

0  1  0           0  1  0 
1  0  0  becomes  1  1  0 
0  0  0           0  0  0

'endpoints'

Поиск конечных точек скелета. Например:

1  0  0  0           1  0  0  0
0  1  0  0  becomes  0  0  0  0
0  0  1  0           0  0  1  0
0  0  0  0           0  0  0  0

Примечание.Чтобы найти конечные точки, изображение должно быть скелетизировано. Чтобы создать скелетированное изображение, используйте bwmorph(BW,'skel').

'fill'

Заполняет изолированные внутренние пикселы (отдельные 0, окруженные 1), такие как центральный пиксель в этом шаблоне.

1  1  1 
1  0  1 
1  1  1

'hbreak'

Удаление пикселов, соединенных по оси H. Например:

1  1  1           1  1  1 
0  1  0  becomes  0  0  0 
1  1  1           1  1  1

'majority'

Устанавливает пиксель в значение 1 если пять или более пикселей в его окрестности 3 на 3 равны 1 с; в противном случае для пикселя устанавливается значение 0.

'open'

Осуществляет морфологическое вскрытие (эрозию с последующим расширением).

'remove'

Удаляет внутренние пикселы. Этот параметр задает пиксель равным 0 если все его 4-подключенные соседи 1, оставляя включенными только граничные пикселы.

'shrink'

С n = Infсжимает объекты до точек. Он удаляет пикселы, так что объекты без отверстий сжимаются до точки, а объекты с отверстиями сжимаются до соединяемого кольца на полпути между каждым отверстием и внешней границей. Эта опция сохраняет число Эйлера (также известное как признак Эйлера).

'skel'

С n = Inf, удаляет пикселы на границах объектов, но не позволяет разорвать объекты. Оставшиеся пикселы составляют скелет изображения. Этот параметр сохраняет номер Эйлера.

При работе с 3-D томами или при необходимости обрезки каркаса используйте bwskel функция.

'spur'

Удаление пикселов шпоры. Например:

0  0  0  0           0  0  0  0
0  0  0  0           0  0  0  0
0  0  1  0  becomes  0  0  0  0
0  1  0  0           0  1  0  0
1  1  0  0           1  1  0  0

'thicken'

С n = Inf, утолщает объекты путем добавления пикселов к внешней стороне объектов до тех пор, пока это не приведет к тому, что ранее не подключенные объекты будут 8-соединенными. Этот параметр сохраняет номер Эйлера.

'thin'

С n = Inf, утончает объекты до линий. Он удаляет пикселы, так что объект без отверстий сжимается до минимально связанного штриха, а объект с отверстиями сжимается до соединенного кольца на полпути между каждым отверстием и внешней границей. Этот параметр сохраняет номер Эйлера. Дополнительные сведения см. в разделе Алгоритмы.

'tophat'

Выполняет морфологическую операцию «верхняя шляпа», возвращая изображение минус морфологическое отверстие изображения (эрозия с последующим расширением).

Пример: BW3 = bwmorph(BW,'skel');

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

Число операций, указанное как числовое значение. n может быть Inf, в случае чего bwmorph повторяет операцию до тех пор, пока изображение больше не изменится.

Пример: BW3 = bwmorph(BW,'skel',100);

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

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

свернуть все

Изображение после морфологических операций, возвращаемое в виде 2-D логической матрицы.

Типы данных: logical

Совет

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

Алгоритмы

свернуть все

При использовании с 'thin' опция, bwmorph использует следующий алгоритм [3]:

  1. В первой подитерации удалите пиксель p тогда и только тогда, когда все условия G1, G2 и G3 выполнены.

  2. Во второй подитерации удалите пиксель p тогда и только тогда, когда выполняются все условия G1, G2 и G3 ′.

G1 условий:

XH (p) = 1

где

XH (p) =∑i=14bi

bi = { 1, если x2i  1 = 0 и  ( x2i = 1 или  x2i + 1 = 1)                                           0, в противном случае

x1, x2,..., x8 - значения восьми соседей p, начинающиеся с восточного соседа и пронумерованные в порядке против часовой стрелки.

G2 условий:

2≤min{n1 (р), n2 (р)} ≤3

где

n1 (p) =∑k=14x2k−1∨x2k

n2 (p) =∑k=14x2k∨x2k+1

G3 условий:

(x2∨x3∨x¯8) ∧x1=0

Условие G3 ':

(x6∨x7∨x¯4) ∧x5=0

Две субитерации вместе составляют одну итерацию алгоритма прореживания. Когда пользователь задает бесконечное число итераций (n=Inf), итерации повторяются до тех пор, пока изображение не перестанет изменяться. Все условия проверяются с использованием applylut с предварительно вычисленными таблицами подстановки.

Ссылки

[1] Харалик, Роберт М. и Линда Г. Шапиро, Computer and Robot Vision, Vol. 1, Addison-Wesley, 1992.

[2] Конг, Т. Юнг и Азриэль Розенфельд, топологические алгоритмы обработки цифровых изображений, Elsevier Science, Inc., 1996.

[3] Лам, Л., Сон-Ван Ли и Чинг Юн Суэн, «Thinning Methodies-A Complex Survey», IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol 14, No. 9, September 1992, стр. 879, нижняя часть первой колонки - верхняя часть второй колонки.

[4] Пратт, Уильям К., Digital Image Processing, John Wiley & Sons, Inc., 1991.

Расширенные возможности

..

См. также

| | | | |

Представлен до R2006a