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

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

Смотрите также

Похожие темы