嗨!我是OpenCV和图像处理的新手。到目前为止,我已尝试过以下方法,但我相信必须采用更好的方法。
1)。使用GColor2 / Gimp工具/轨迹栏手动从包含单个水果(香蕉)的参考图像中查找颜色范围(HSV) 有白色背景。然后我用了inRange(),findContour(), drawContour()同时参考香蕉图像&目标 image(fruit-platter)和matchShapes()来比较中的轮廓 端。
只要选择的颜色范围合适,它就可以正常工作。 (见第2张图片)。但由于这些水果没有均匀的纯色,这种方法对我来说似乎不是一个理想的方法。我不想在inRange()中对颜色范围(标量值)进行硬编码。
2)。手动阈值处理和轮廓匹配。
与(1)相同的问题。不想硬编码阈值。
3)。 OTSU阈值和canny边缘检测。
对香蕉,苹果和柠檬不适用。
4)。动态查找颜色。我使用了裁剪的香蕉参考 图片。计算平均值&图像的标准偏差。
不知道如何忽略我的mean / std-dev计算中的白色背景像素而不循环遍历每个x,y像素。欢迎提出任何建议。
5)。哈尔级联训练给出了不准确的结果。 (见下图)。我相信适当的训练可能会带来更好的结果但现在对此并不感兴趣。
我正在考虑的其他方法:
6)。使用floodfill查找所有连接的像素和 计算 它的平均值和标准差。
在这方面没有成功。不知道如何获得所有连接的像素。我倾倒了面具(imwrite)并将香蕉(来自参考香蕉图像)放入黑色&白色的形式。欢迎提出任何建议。
7)。历史反投影: - 不确定它对我有什么帮助。
8)。 K-Means,尚未尝试过。让我知道,如果它比步骤更好 (4)。
9)。 meanshift / camshift→不确定它是否会有所帮助。欢迎提出建议。
10)。特征检测 - SIFT / SURF - 尚未尝试。
任何帮助,提示或建议都将受到高度赞赏。
答案 0 :(得分:4)
这类通用问题(对象检测)的答案,特别是对于那些非常活跃的研究主题的问题,基本上归结为偏好问题。也就是说,在您提到的10种“方法”中,特征检测/提取可能是值得关注的,因为它是各种计算机视觉问题的基本构建块,包括但不限于对象识别/检测。 / p>
您可以尝试的一种非常简单但有效的方法是Bag-of-Words模型,在早期快速物体检测尝试中非常常用,所有全局空间关系信息都会丢失。
我从年度计算机视觉会议论文中观察到的晚期对象检测研究趋势是,您通过图形对每个对象进行编码,该图形在节点中存储特征描述符并将空间关系信息存储在边缘,因此部分全局信息保留,因为我们现在不仅可以匹配要素空间中的要素描述符的距离,还可以匹配它们在图像空间中的空间距离。
您所描述的这个问题的一个常见缺陷是香蕉和苹果皮上的均匀纹理可能无法保证特征的健康分布,并且您检测到的大多数特征将位于(最常见)3个或更多个对象的交叉点上,这本身并不是一个普遍认为的“好”特征。出于这个原因,我建议研究超像素对象识别(Just Google it。认真。)方法,因此“Apple”或“Banana”类的数学模型将是一个互连的超像素块,存储在图形中,每个边缘存储空间关系信息和存储关于由超像素指定的邻域的颜色分布等的信息的每个节点。然后识别将成为(部分)图匹配问题或与概率graphical model相关的问题,并且已经进行了许多现有的研究。