用openCV检测均匀颜色的斑点

时间:2014-08-18 08:28:45

标签: opencv computer-vision

我正在开发一个程序,用于检测遥感的分割场(即每个图像中的多种颜色/场类型,其中图像对应于一个农民拥有的土地)并且一直试图找到解决方案通过读取图像并使用聚类算法对它们进行分色,然后分析存在的颜色和形状以尝试并评分'每个图像并确定是否存在多种类型的字段。我的程序工作得相当好,尽管还有很多明显的分裂无法检测到。

到目前为止,我一直只使用c ++中的标准库来做这个,但我现在认为我应该使用openCV或其他东西,我想知道哪些技术开始。我看到有一些图像分割和斑点检测算法,但我不确定它们是否适用,因为字段之间的边界往往模糊或对比度低。以下是一些示例图像,我希望我的程序可以检测到' split':

(真彩色Landsat)

http://imgur.com/m9qWBcq

enter image description here

http://imgur.com/OwqvUvs

enter image description here

对于如何以不同的方式解决这个问题有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

1)转换为HSV并采用H或采用灰度表格。应用中值滤镜来平滑场:如果图像是高分辨率,则为P.

2)提取直方图并找到所有峰值。这些峰值表示不同颜色的区域。

3)(A)现在你可以在这些峰值周围使用简单的阈值,然后找到梯形或类似形状的精细边缘。

- 或 -

(B)找到峰值周围的canny边缘,即对于具有最大值x的峰值,找到(x-dx)到(x + dx)范围的边缘,其中dx是要通过实验找到的小值。 / p>

4)现在,您可以提取不同级别/峰值的轮廓计数。

我还没有添加代码,因为没有指定语言,所有这些构造都可以在OpenCV中使用。学习很有趣。随意进一步询问。快乐的编码。

答案 1 :(得分:0)

尝试MserFeatureDetectorMSER algorithm的实施。

原始算法被认为是灰度图片,我对它的颜色版本没有很好的经验,所以尝试对原始帧进行一些预处理,以根据我们的需要生成灰度。