|
Раздел "Обработка сигналов и изображений\Image Processing Toolbox"
И.М.Журавель "Краткий курс теории обработки изображений"
\ \
Обнаружение объектов с помощью сегментации изображений
Если контраст объект-фон является достаточным, тогда обнаружить такой объект не представляет труда. Применим средства выделения границ и морфологические функции для обнаружения некоторого медицинского объекта.
Ключевые слова: |
Обнаружение границ, структурный элемент, эрозия, морфологические операторы, сегментация |
Ключевые функции: |
edge, strel, imdilate, imerode, imfill, imclearborder |
Демонстрационный пример
Демонстрационный пример включает следующие шаги:
- Шаг 1: Считывание изображения.
- Шаг 2: Детектирование всего объекта.
- Шаг 3: Заполнение промежутков.
- Шаг 4: Морфологическое расширение изображений.
- Шаг 5: Заполнение внутренних промежутков.
- Шаг 6: Операции со связными объектами на границе.
- Шаг 7: Сглаживание объекта.
Шаг 1: Считывание изображения.
Считаем некоторое медицинское изображение из файла 'cell.tif'.
I=imread('cell.tif');
figure, imshow(I), title('original image');
Шаг 2: Детектирование всего объекта.
На изображении представлено два объекта и только один из них видно полностью. Наша задача заключается в выделении этого объекта. Другими словами этот объект необходимо сегментировать. Качество сегментации в большой мере зависит от того насколько сильно объект отличается от фона. Поэтому усиление контрастности изображения приводит к увеличению качества детектирования.
Одним их путей детектирования является применение оператора Собеля с использованием некоторого порогового значения. В данном случае пороговое значение определим с помощью функции graythresh. Создадим некоторую градиентную маску и применим ее в функции выделения края.
BWs=edge(I, 'sobel', (graythresh(I)*.1));
figure, imshow(BWs), title('binary gradient mask');
Шаг 3: Заполнение промежутков.
Бинарная градиентная маска отображает линии с высоким контрастом на изображении. Сравнивая исходное и обработанное изображения, можно сделать вывод, что эти линии вполне точно описывают контуры объекта интереса.
se90=strel('line', 3, 90);
se0=strel('line', 3, 0);
Шаг 4: Морфологическое расширение изображений.
Бинарная градиентная маска при выполнении морфологической операции расширения использует последовательно вертикальные и горизонтальные структурные элементы. Для выполнения операции морфологического расширения используется функция imdilate.
BWsdil=imdilate(BWs, [se90 se0]);
figure, imshow(BWsdil), title('dilated gradient mask');
Шаг 5: Заполнение внутренних промежутков.
Применение морфологической операции расширения для обработки контуров с помощью градиентной маски дает вполне приемлемый результат, который заключается в заполнении отверстий в середине исследуемого объекта. Для реализации данного шага используется функция imfill.
BWdfill=imfill(BWsdil, 'holes');
figure, imshow(BWdfill);
title('binary image with filled holes');
Шаг 6: Операции со связными объектами на границе.
На предыдущем этапе была проведена операция сегментации. Однако эта операция затронула не только исследуемый объект. Каждый объект, который имеет связные границы на изображении, может быть удален с помощью функции imclearborder. Связность в функции imclearborder устанавливается на уровне 4 по диагонали.
BWnobord=imclearborder(BWdfill, 4);
figure, imshow(BWnobord), title('cleared border image');
Шаг 7: Сглаживание объекта.
И наконец, чтобы проведенная обработка выглядела более натурально, необходимо провести сглаживание с помощью морфологической операции эрозии с использованием специального структурного элемента. Создадим этот элемент с использованием функции strel.
seD=strel('diamond', 1);
BWfinal=imerode(BWnobord, seD);
BWfinal=imerode(BWfinal, seD);
figure, imshow(BWfinal), title('segmented image');
Существуют также альтернативные методы отображения сегментированных объектов. Приведем пример с использованием функции bwperim.
BWoutline=bwperim(BWfinal);
Segout=I;
Segout(BWoutline)=255;
figure, imshow(Segout), title('outlined original image');
\ \
|
|