imfill
функция выполняет операцию заливки двоичных и полутоновых изображений. Эта операция может быть полезна при удалении нерелевантных программных продуктов с изображений.
Для бинарных изображений, imfill
изменение связанных фоновых пикселей (0
s) в пиксели переднего плана (1
s), остановка при достижении контуров объекта.
Для полутоновых изображений, 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)