2

我试图始终如一地检测同一场景的图像之间的某种颜色。这个想法是根据颜色配置文件识别一组对象。因此,例如,如果给定一个场景,其中有一个绿球,并且我选择该绿色作为调色板的一部分,我想要一个函数,它有一个反映它检测到球的矩阵。

任何人都可以为这个项目推荐一些matlab函数/插件/起点吗?理想情况下,颜色识别功能将采用一组颜色值,并将它们匹配在某个阈值内。

有点像这样: http: //www.mathworks.com/matlabcentral/fileexchange/18440-color-detection-using-hsv-color-space-training-and-testing

除了它有效(这个没有)

更新:

这就是我选择不使用上述工具包的原因。

我首先在图片中选择一些感兴趣的颜色

一切进行得都很顺利..

然后要求该功能在以后的图像中识别道路...

哦哦

并且绝对不会触发任何有用的东西。所以,是的,除了我在下载和修复的代码中遇到的几个错误之外,这有点令人兴奋。我没有尝试修复识别颜色的代码主体,因为......好吧,我不知道如何,这就是我来这里的原因。

4

1 回答 1

3

所以,让我首先说带有颜色配置文件的道路检测是一个病态问题。但是,如果道路的颜色是一致的,并且照明不会改变您尝试识别的对象的颜色,那么您可能会拍摄。(如果这是在室外拍摄的,或者使用不同的相机,或者如果出现阴影,或者它发生在任何类型的真实世界环境中,这将非常困难)

这里有几件事可能会有所帮助。

尝试事先对图像进行平滑处理,在第一张图像中得到不好结果的原因可能是道路上的小像素变化。如果你可以模糊它们,或者使用某种分水岭或局部平均,你可能会得到颜色更一致的区域。

您也可以考虑使用 LAB 颜色空间而不是 HSV 或 RGB。

使用边缘检测(参见 matlab 的 canny 边缘检测器)可能能够为您提供一些边界信息。如果你正在寻找一个光滑的物体,它里面不会有很多边。

编辑:我试图以最简单的方式遵守这个建议。这是生成的代码和一些示例。

im=rgb2gray(im) %for most basic color capturing.. using another color space is better practice
%imshow(im)
RoadMask=roipoly(im)%create mask 
RoadMask=uint8(RoadMask);%cast to so you can elementwise multiply
im=im.*RoadMask;%apply mask
[x y]=size(im);
for i=1:x
    for j=1:y
        %disp('here')
        if (im(i,j)<160 || im(i,j)>180) %select your values based on your targets range
            im(i,j)=0;                  %replace everything outside of range with 0
            %disp(im(x,y))              %if you'd like to count pixels, turn all values
        end                             %within range to 1 and do a sum at end
    end
end

首先从 RGB 转换为灰度 在此处输入图像描述 选择与道路灰度大致匹配的区域 在此处输入图像描述 注意部分道路没有被捕获并且块状边缘。比如这个------------^

这个实现又快又脏,但我想在忘记之前把它放上来。我将尝试使用实现平滑、采样和 LAB 颜色空间的代码进行更新。

于 2012-10-07T23:22:20.960 回答