exponenta event banner

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

В этом примере показано, как идентифицировать и сегментировать области на основе их текстуры.

Прочитать изображение

Чтение и отображение изображения текстурированных узоров в градациях серого на сумке.

I = imread('bag.png');
imshow(I)
title('Original Image')

Figure contains an axes. The axes with title Original Image contains an object of type image.

Создание изображения текстуры

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

Также можно использовать stdfilt и rangefilt для достижения аналогичных результатов сегментации. Для сравнения с текстурным изображением локальной энтропии создайте текстурные изображения S и R отображение локального стандартного отклонения и локального диапазона соответственно.

E = entropyfilt(I);
S = stdfilt(I,ones(9));
R = rangefilt(I,ones(9));

Использовать rescale для масштабирования изображений текстуры E и S чтобы значения пикселей находились в диапазоне [0, 1], как и ожидалось для изображений типа данных double.

Eim = rescale(E);
Sim = rescale(S);

Отображение трех текстурных изображений в монтаже.

montage({Eim,Sim,R},'Size',[1 3],'BackgroundColor','w',"BorderSize",20)
title('Texture Images Showing Local Entropy, Local Standard Deviation, and Local Range')

Figure contains an axes. The axes with title Texture Images Showing Local Entropy, Local Standard Deviation, and Local Range contains an object of type image.

Создать маску для нижней текстуры

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

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

BW1 = imbinarize(Eim,0.8);
imshow(BW1)
title('Thresholded Texture Image')

Figure contains an axes. The axes with title Thresholded Texture Image contains an object of type image.

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

BWao = bwareaopen(BW1,2000);
imshow(BWao)
title('Area-Opened Texture Image')

Figure contains an axes. The axes with title Area-Opened Texture Image contains an object of type image.

Использовать imclose для сглаживания кромок и закрытия любых открытых отверстий в объекте в BWao. Укажите тот же самый район 9 на 9, который использовался entropyfilt.

nhood = ones(9);
closeBWao = imclose(BWao,nhood);
imshow(closeBWao)
title('Closed Texture Image')

Figure contains an axes. The axes with title Closed Texture Image contains an object of type image.

Использовать imfill для заполнения отверстий в объекте в closeBWao. Маска для нижней текстуры не идеальна, поскольку она не распространяется на нижнюю часть изображения. Однако для сегментации текстур можно использовать маску.

mask = imfill(closeBWao,'holes');
imshow(mask);
title('Mask of Bottom Texture')

Figure contains an axes. The axes with title Mask of Bottom Texture contains an object of type image.

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

Разделите текстуры на два разных изображения.

textureTop = I;
textureTop(mask) = 0;
textureBottom = I;
textureBottom(~mask) = 0;
montage({textureTop,textureBottom},'Size',[1 2],'BackgroundColor','w',"BorderSize",20)
title('Segmented Top Texture (Left) and Segmented Bottom Texture (Right)')

Figure contains an axes. The axes with title Segmented Top Texture (Left) and Segmented Bottom Texture (Right) contains an object of type image.

Показать результаты сегментации

Создайте матрицу меток с меткой 1, где находится маска false и метка 2, где находится маска true. Наложение матрицы меток на исходное изображение.

L = mask+1;
imshow(labeloverlay(I,L))
title('Labeled Segmentation Regions')

Figure contains an axes. The axes with title Labeled Segmentation Regions contains an object of type image.

Очертить границу между двумя текстурами голубым цветом.

boundary = bwperim(mask);
imshow(labeloverlay(I,boundary,"Colormap",[0 1 1]))
title('Boundary Between Textures')

Figure contains an axes. The axes with title Boundary Between Textures contains an object of type image.

См. также

| | | | | |