Если вы выполняете какую-либо цветовую сегментацию изображений, вам может быть проще сначала преобразовать в цветовое пространство HSV , чтобы выбрать определенные цветовые диапазоны.Я обрисую, как вы можете делать такие вещи в ответе, который я дал на аналогичный вопрос .Шаги, которые вы, вероятно, захотите выполнить, будут следующими:
- Преобразовать в HSV и создать двоичную маску, выбрав пиксели с оттенками в диапазоне зеленого цвета и с минимальным количеством насыщенности и значения.
- Удалите результирующую маску на определенную величину, чтобы удалить маленькие паразитные кластеры.
- Расширьте размытую маску, чтобы вернуться к более плавному краю для выбранных пикселей.
Я не могу привести точный пример того, как вы применили бы этот анализ к своим данным, поскольку изображение, которое вы предоставляете в вопросе, на самом деле имеет более высокое разрешение, чем данные, которые оно отображает, но вот общее решение, котороеиспользует функции RGB2HSV , IMERODE и IMDILATE (последние две из Toolbox Toolbox ):
rgbImage = imread('data.jpg'); %# Load the RGB image
hsvImage = rgb2hsv(rgbImage); %# Convert to HSV color space
hPlane = 360.*hsvImage(:,:,1); %# Get the hue plane, scaled from 0 to 360
vPlane = hsvImage(:,:,3); %# Get the value plane
mask = (hPlane >= 80) & (hPlane <= 140) & (vPlane >= 0.3); %# Select a mask
SE = strel('disk',10); %# Create a disk-shaped element
mask = imdilate(imerode(mask,SE),SE); %# Erode and dilate the mask
А вот некоторый код для визуализации ребер, созданных в результате вышеуказанного анализа:
edgeMask = mask-imerode(mask,strel('disk',1)); %# Create an edge mask
edgeImage = zeros([size(edges) 3]); %# Create an RGB image for the edge
edgeImage(find(edgeMask)) = 1; %# that's colored red
image(rgbImage); %# Plot the original image
hold on;
image(edgeImage,'AlphaData',edgeMask); %# Plot the edge image over it