使用Matlab识别图像中特定颜色阴影项的最有效方法是什么?

时间:2018-11-21 11:36:54

标签: matlab image-processing image-thresholding

im试图从附加的图像中识别出特定的绿色叶子阴影(例如海军蓝)。我如何以最有效的方式做到这一点?到目前为止,我将RGB转换为HSV,然后根据某些特定的饱和度和值范围(将隔离所需的阴影)对图像进行阈值处理。它正在处理某些图像,而到处都是其他图像。我想要可以在饱和度和值略有不同的任何其他图像中隔离绿色的特定阴影的东西(例如,如果照片是用太多的光线拍摄的) Image link

            Open_time        Open        High         Low       Close  Volume  \
0 2018-11-21 03:13:00  0.00000121  0.00000121  0.00000121  0.00000121    7231   
1 2018-11-21 03:14:00  0.00000121  0.00000121  0.00000121  0.00000121   22162   
2 2018-11-21 03:15:00  0.00000120  0.00000120  0.00000120  0.00000120    1000   
3 2018-11-21 03:16:00  0.00000121  0.00000121  0.00000120  0.00000120   83247   
4 2018-11-21 03:17:00  0.00000120  0.00000121  0.00000120  0.00000121  960188   

               Close_time    Quote_AV  TradesNo  Taker_base  Taker_quote  \
0 2018-11-21 03:13:59.999  0.00874951         1        7231   0.00874951   
1 2018-11-21 03:14:59.999  0.02681602         3       22162   0.02681602   
2 2018-11-21 03:15:59.999  0.00120000         1           0   0.00000000   
3 2018-11-21 03:16:59.999  0.10062838         7       73198   0.08856958   
4 2018-11-21 03:17:59.999  1.15235355         5       12795   0.01548195   

   Ignore  
0       0  
1       0  
2       0  
3       0  
4       0  

%然后我尝试在图像上显示一些指针,以告诉我Matlab在哪里标识了阴影。     m = regionprops(w,'centroid');

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)

我们将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

此答案说明了如何针对HSV:Segment pixels in an image based on colour (Matlab)

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