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

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

Readimage

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

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

Figure contains an axes object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object with title Boundary Between Textures contains an object of type image.

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

| | | | | |