0

我试图从所附图像中识别出特定的绿叶阴影(例如海军绿色)。我如何以最有效的方式做到这一点?到目前为止,我正在将 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,'质心');

boxes = cat(1, m.Centroid); 

imshow(pic) 

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

您的帮助将不胜感激。

4

1 回答 1

0

HSV 颜色空间(嘿,S 是饱和度和 V 值),其中 H 将为您提供色调,或 CIE-Lab 颜色空间,其中欧几里德距离将为您提供 2 个特定像素在颜色上彼此之间的接近程度。

这个答案解释了如何为 HSV 做到这一点:Segment pixel in an image based on color (Matlab)

如果颜色非常接近(如每片叶子中的绿色),与 CIE-LAB 结合使用可能会有所帮助,但您应该试一试 HSV

于 2018-11-21T11:50:24.620 回答