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

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)

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

Похожие темы