В этом примере показано, как идентифицировать и сегментировать области на основе их структуры.
Считайте и отобразите полутоновое изображение текстурированных шаблонов на сумке.
I = imread('bag.png'); imshow(I) title('Original 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')
Этот пример продолжается путем обработки энтропийного изображения структуры Eim. Можно повторить подобный процесс для других двух типов изображений структуры с другими морфологическими функциями, чтобы достигнуть подобных результатов сегментации.
Порог перемасштабированное изображение Eim сегментировать структуры. Пороговое значение 0,8 выбрано, потому что это - примерно значение интенсивности пикселей вдоль контура между структурами.
BW1 = imbinarize(Eim,0.8);
imshow(BW1)
title('Thresholded Texture Image')
Сегментированные объекты в бинарном изображении BW1 являются белыми. Если вы сравниваете BW1 к I, вы замечаете, что главная структура чрезмерно сегментируется (несколько белых объектов), и нижняя структура сегментируется почти в целом. Удалите объекты в главной структуре при помощи bwareaopen.
BWao = bwareaopen(BW1,2000);
imshow(BWao)
title('Area-Opened Texture Image')
Используйте imclose сглаживать ребра и закрыть любые открытые отверстия в объекте в BWao. Задайте то же самое 9 9 окружение, которое использовалось entropyfilt.
nhood = ones(9);
closeBWao = imclose(BWao,nhood);
imshow(closeBWao)
title('Closed Texture Image')
Используйте imfill заполнять отверстия в объекте в closeBWao. Маска для нижней структуры не совершенна, потому что маска не расширяет к нижней части изображения. Однако можно использовать маску, чтобы сегментировать структуры.
mask = imfill(closeBWao,'holes'); imshow(mask); title('Mask of Bottom Texture')

Разделите структуры на два различных изображения.
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)')
Создайте матрицу метки, которая имеет маркировать 1, где маской является false и маркировать 2, где маской является true. Наложите матрицу метки на оригинальном изображении.
L = mask+1;
imshow(labeloverlay(I,L))
title('Labeled Segmentation Regions')
Обрисуйте в общих чертах контур между двумя структурами в голубом цвете.
boundary = bwperim(mask); imshow(labeloverlay(I,boundary,"Colormap",[0 1 1])) title('Boundary Between Textures')

bwareaopen | bwperim | entropyfilt | imbinarize | imclose | imfill | rangefilt