所以,让我首先说带有颜色配置文件的道路检测是一个病态问题。但是,如果道路的颜色是一致的,并且照明不会改变您尝试识别的对象的颜色,那么您可能会拍摄。(如果这是在室外拍摄的,或者使用不同的相机,或者如果出现阴影,或者它发生在任何类型的真实世界环境中,这将非常困难)
这里有几件事可能会有所帮助。
尝试事先对图像进行平滑处理,在第一张图像中得到不好结果的原因可能是道路上的小像素变化。如果你可以模糊它们,或者使用某种分水岭或局部平均,你可能会得到颜色更一致的区域。
您也可以考虑使用 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 颜色空间的代码进行更新。