Какой самый эффективный способ определения элементов определенного оттенка цвета на изображении с помощью Matlab? - PullRequest
0 голосов
/ 21 ноября 2018

я пытаюсь определить определенный оттенок зеленых листьев (например, темно-зеленый) из прикрепленного изображения.Как мне сделать это наиболее эффективным способом?Пока что я конвертирую RGB в HSV и затем устанавливаю пороговое значение изображения на основе определенного диапазона насыщенности и значения, которое изолирует желаемый оттенок.он работает с некоторыми изображениями и просто повсеместно с другими.я хочу что-то, что может изолировать определенный оттенок зеленого на любом другом изображении, имеющем немного другую насыщенность и значение (например, если изображение было сделано при слишком большом освещении) Ссылка на изображение

pic=imread('image.jpg');
q=rgb2hsv(pic);
H=q(:,:,1);
S=q(:,:,2);
V=q(:,:,3);
thresh=S>0.6111 & S<0.6666 & V>0.3888 & V<0.4583;
st=strel('diamond',20);
w=imdilate(thresh,st);
comps=bwconncomp(w,8);
num=comps.NumObjects;
fprintf('The number of leaves is %i',num)

% тогда я пытаюсь иметь несколько указателей на изображении, чтобы показать мне, где Matlab определил тень.m = regionprops (w, 'centroid');

boxes = cat(1, m.Centroid); 

imshow(pic) 

hold on
plot(boxes(:,1),boxes(:,2), 'b*') 
hold off

Ваша помощь будет высоко оценена.

1 Ответ

0 голосов
/ 21 ноября 2018

Либо цветовое пространство HSV (эй, S - насыщенность и значение V), где H даст вам оттенок, либо цветовое пространство CIE-Lab, где евклидово расстояние покажет, насколько близко 2 конкретных пикселя друг к другу вcolor.

Этот ответ объясняет, как это сделать для HSV: Сегмент пикселей на изображении на основе цвета (Matlab)

Использование в сочетании с CIE-LAB может помочь, еслицвета очень близки друг к другу (как зелень в каждом листе), но вы должны дать HSV шанс

...