3. Реализация алгоритма:
Шаг 1. Чтение изображения:
I = imread('D:\1.bmp');
figure, imshow(I), title('original image');
Изменения в контрасте могут быть определены с помощью операторов, которые вычисляют градиент изображения. В свою очередь градиент изображения может быть вычислен и на нём может быть выделена граница для построения бинарной маски. Для начала я использую метод edge и операцию Sobel, для вычисления порогового значения. Затем регулирую пороговое значение и опять использую методedgeдля получения бинарной маски.
[junk threshold] = edge(I, 'sobel');
fudgeFactor = .5;
BWs = edge(I,'sobel', threshold * fudgeFactor);
figure, imshow(BWs), title('binary gradient mask');
Шаг 2. Растягиваем изображение:
Бинарная градиентная маска показывает линии контраста в изображении. Эти линии не достаточно чётко обрисовывают границы объекта на изображении. Сравнивая начальное изображение с изображением градиентной маски исходного изображения, видим промежутки на контурах изображения. Это можно исправить с помощью линейного структурирования элементов, с помощью strelfunction.
se90 = strel('line', 3, 90);
se0 = strel('line', 3, 0);
Бинарная градиентная маска расширяется с помощью вертикально структурированных элементов. Функция imdilate расширяет изображение.
BWsdil = imdilate(BWs, [se90 se0]);
figure, imshow(BWsdil), title('dilated gradient mask');
Шаг 3. Заполняем внутренние промежутки:
Расширенная градиентная маска показывает границу достаточно хорошо, но всё же имеются промежутки в контурах, для исправляния этого недостатка мы функцию imfill.
BWdfill = imfill(BWsdil, 'holes');
figure, imshow(BWdfill);
title('binary image with filled holes');
BWnobord = imclearborder(BWdfill, 4);
figure, imshow(BWnobord), title('cleared border image');
seD = strel('diamond',1);
BWfinal = imerode(BWnobord,seD);
BWfinal = imerode(BWfinal,seD);
figure, imshow(BWfinal), title('segmented image');
BWoutline = bwperim(BWfinal);
Segout = I;
Segout(BWoutline) = 255;
figure, imshow(Segout), title('outlined original image');
4. Контрольный пример:
Тестирование метода проводилось на базе данных ORL_bmp:
Шаг 1. Чтение изображения:
Рис. 4.1
Бинарная маска:
Рис. 4.2
Шаг 2. Растягиваем изображение:
Рис. 4.3
Шаг 3. Заполняем внутренние промежутки:
Рис. 4.4
Рис. 4.5
Рис. 4.6
Рис. 4.7
5. Использование метода
Пример использования метода я прочла на сайте www.mathworks.comв разделе demos.
Его реализовал и представил Alan Partin для распознавания клетки.
6. Выводы:
Метод Собеля удобен для использования в задачах сегментации и распознавания изображения, прост в реализации и выдаёт нужные результаты при тестировании.
7. Источники информации:
Matlabhelp
http://www.mathworks.com/products/image/demos.html
http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=8031&objectType=file
http://matlab.exponenta.ru/imageprocess/book3/12/edge.php
Список функций Image Processing Toolbox: Сегментация изображений
http://www.INTUIT.ru
Интернет-Университет Информационных Технологий
Алгоритмические основы растровой графики
Image Processing Toolbox™
Прэтт У. Цифровая обработка изображений В 2 т. М: Мир, 1982.
Lim, Jae S. Two-Dimensional Signal and Image Processing// Englewood Cliffs. New Jersey: Prentice Hall, 1990.
Parker, James R. Algorithms for Image Processing and Computer Vision. New York: John Wiley & Sons, Inc., 1997.