MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем

Обработка сигналов и изображений\image Processing Toolbox

И.М.Журавель "Краткий курс теории обработки изображений"

В оглавление \ К следующему разделу \ К предыдущему разделу

Текстурная сегментация с использованием текстурных фильтров

Текстурная сегментация используется для идентификации областей на основе их текстуры. Рассмотрим задачу сегментации двух видов ткани на изображении с использованием текстурных фильтров.

Содержание:

  • Шаг 1: Считывание изображения.
  • Шаг 2: Выделение текстуры изображения.
  • Шаг 3: Создание грубой маски для выделения нижней текстуры.
  • Шаг 4: Использование грубой маски для сегментации верхней текстуры.
  • Шаг 5: Отображение результатов сегментации.
  • Использование других текстурных фильтров для сегментации.

Шаг 1: Считывание изображения.

Считаем изображение из файла bag.png.

I = imread('bag.png');
figure, imshow(I);

Шаг 2: Выделение текстуры изображения.

Используем функцию entropyfilt для выделения текстуры изображения. Функция entropyfilt возвращает массив, где каждый пиксель содержит значение энтропии в окрестности соответствующего пикселя. Размер окрестности составляет элементов. Энтропия является статистической характеристикой случайного процесса.

Eim = mat2gray(E);
imshow(Eim);

Шаг 3: Создание грубой маски для выделения нижней текстуры.

Пороговое масштабирование изображения Eim приводит к сегментации текстуры. Выбранное значение порога равно 0.8, поскольку это позволяет выделить границы текстуры.

BW1 = im2bw(Eim, .8);
imshow(BW1);
figure, imshow(I);

Сегментированные объекты представлены на бинарном изображении BW1. При сравнении изображений BW1 и I отметим, что верхняя текстура сегментирована слишком чрезмерно (много белых объектов), а нижняя текстура сегментирована почти нераздельно. Для выделения нижней текстуры можно использовать также функцию bwareaopen.

BWao = bwareaopen(BW1,2000);
imshow(BWao);

Для сглаживания границ можно использовать функцию imclose, а также морфологические операции открытия и закрытия объектов на изображении BWao. При обработке используются те же окрестности, что и в функции entropyfilt.

nhood = true(9);
closeBWao = imclose(BWao,nhood);
imshow(closeBWao)

Использование функции imfill для заполнения объектов в closeBWao.

roughMask = imfill(closeBWao,'holes');

Шаг 4: Использование грубой маски для сегментации верхней текстуры.

Сравним бинарное roughMask и исходное I изображения. Отметим, что маска для нижней текстуры не является наилучшей. Поэтому будем использовать roughMask для сегментации верхней текстуры.

imshow(roughMask);
figure, imshow(I);

Получим такое изображение верхней текстуры с использованием roughMask.

I2 = I;
I2(roughMask) = 0;
imshow(I2);

Использование функции entropyfilt для вычисления текстуры изображения.

E2 = entropyfilt(I2);
E2im = mat2gray(E2);
imshow(E2im);

Порог E2im с использованием graythresh.

BW2 = im2bw(E2im,graythresh(E2im));
imshow(BW2)
figure, imshow(I);

При сравнении изображений BW2 и I отметим наличие только двух сегментированных объектов на BW2. Используем функцию bwareaopen для получения маски для верхней текстуры.

mask2 = bwareaopen(BW2,1000);
imshow(mask2);

Шаг 5: Отображение результатов сегментации.

Используем mask2 для получения верхней и нижней текстуры изображения I.

texture1 = I;
texture1(~mask2) = 0;
texture2 = I;
texture2(mask2) = 0;
imshow(texture1);
figure, imshow(texture2);

Очертание границ между текстурами.

boundary = bwperim(mask2);
segmentResults = I;
segmentResults(boundary) = 255;
imshow(segmentResults);

Использование других текстурных фильтров для сегментации.

Взамен функции entropyfilt можно использовать функции stdfilt и rangefilt вместе с другими морфологическими функциями для получения аналогичных результатов сегментации.

S = stdfilt(I,nhood);
imshow(mat2gray(S));

R = rangefilt(I,ones(5));
imshow(R);

В оглавление \ К следующему разделу \ К предыдущему разделу


Поиск по сайту:

Система Orphus

Яндекс.Метрика