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)