Операции заливки

imfill функция выполняет операцию заливки двоичных и полутоновых изображений. Эта операция может быть полезна при удалении нерелевантных программных продуктов с изображений.

  • Для бинарных изображений, imfill изменение связанных фоновых пикселей (0s) в пиксели переднего плана (1s), остановка при достижении контуров объекта.

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

Определение связности

Для двоичных и полутоновых изображений контур операции заливки определяется заданной связностью пикселей.

Примечание

imfill отличается от других объектных операций тем, что он работает на фоновых пикселях. Когда вы задаете связь с imfill, вы задаете связь для фона, а не для переднего плана.

Последствия связности могут быть проиллюстрированы с помощью этой матрицы.

BW = logical([0     0     0     0     0     0     0     0;
              0     1     1     1     1     1     0     0;
              0     1     0     0     0     1     0     0;
              0     1     0     0     0     1     0     0;
              0     1     0     0     0     1     0     0;
              0     1     1     1     1     0     0     0;
              0     0     0     0     0     0     0     0;
              0     0     0     0     0     0     0     0]);

Если фон соединен 4, это бинарное изображение содержит два отдельных элемента фона (часть внутри цикла и часть снаружи). Если фон 8-соединен, пиксели соединяются по диагонали, и существует только один элемент фона.

Определение начальной точки

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

Для примера, если вы звоните imfill, определение пикселя BW(4,3) в качестве начальной точки, imfill заполняет только внутреннюю часть цикла, потому что по умолчанию фон 4-соединен.

imfill(BW,[4 3])

ans =
    0     0     0     0     0     0     0     0
    0     1     1     1     1     1     0     0
    0     1     1     1     1     1     0     0
    0     1     1     1     1     1     0     0
    0     1     1     1     1     1     0     0
    0     1     1     1     1     0     0     0
    0     0     0     0     0     0     0     0
    0     0     0     0     0     0     0     0

Если вы задаете ту же начальную точку, но используете 8-подключенное фоновое соединение, imfill заполняет все изображение.

imfill(BW,[4 3],8)

ans =
    1     1     1     1     1     1     1     1
    1     1     1     1     1     1     1     1
    1     1     1     1     1     1     1     1
    1     1     1     1     1     1     1     1
    1     1     1     1     1     1     1     1
    1     1     1     1     1     1     1     1
    1     1     1     1     1     1     1     1
    1     1     1     1     1     1     1     1

Заполнение отверстий

Обычно операция заливки-заливки используется для заливки отверстий на изображениях. Например, предположим, что у вас есть изображение, двоичное или полутоновое, в котором объекты переднего плана представляют сферы. На изображении эти объекты должны появляться как диски, но вместо этого имеют форму пончика из-за отражений на исходной фотографии. Прежде чем выполнять любую дальнейшую обработку изображения, вы можете сначала заполнить «пончик отверстий», используя imfill.

Поскольку использование заливки для заливки отверстий так распространено, imfill включает специальный синтаксис для поддержки двоичных и полутоновых изображений. В этом синтаксисе вы просто задаете аргумент 'holes'; вы не должны задавать начальные местоположения в каждом отверстии.

Чтобы проиллюстрировать, этот пример заполняет отверстия в полутоновом изображении позвоночника столбца.

[X,map] = imread('spine.tif');
I = ind2gray(X,map);
Ifill = imfill(I,'holes');
imshow(I);figure, imshow(Ifill)

См. также

Похожие темы