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)