Функция 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)