Opencv 用>;检测盘子上水果串中的香蕉或苹果;成功率90%。(见图)

Opencv 用>;检测盘子上水果串中的香蕉或苹果;成功率90%。(见图),opencv,image-processing,computer-vision,Opencv,Image Processing,Computer Vision,嗨!我对OpenCV和图像处理有点陌生。到目前为止,我一直在尝试以下方法,但我相信一定有更好的方法 1) 。使用GColor2/Gimp工具/轨迹栏从包含单个水果(香蕉)的参考图像手动查找颜色范围(HSV) 背景是白色的。然后我使用了inRange(),findContour(), 参考图像和目标上的drawContour() 图像(水果盘)和matchShapes()以比较 结束 只要选择合适的颜色范围,它就可以正常工作。(见第二幅图)。但由于这些水果没有统一的纯色,这种方法对我来说似乎不是一

嗨!我对OpenCV和图像处理有点陌生。到目前为止,我一直在尝试以下方法,但我相信一定有更好的方法

1) 。使用GColor2/Gimp工具/轨迹栏从包含单个水果(香蕉)的参考图像手动查找颜色范围(HSV) 背景是白色的。然后我使用了inRange(),findContour(), 参考图像和目标上的drawContour() 图像(水果盘)和matchShapes()以比较 结束

只要选择合适的颜色范围,它就可以正常工作。(见第二幅图)。但由于这些水果没有统一的纯色,这种方法对我来说似乎不是一种理想的方法。我不想在inRange()中硬编码颜色范围(标量值)

2) 。手动阈值和轮廓匹配

与第(1)款相同。不想硬编码阈值

3) 。OTSU阈值和canny边缘检测

不适合香蕉、苹果和柠檬

4) 。动态查找颜色。我用了修剪过的香蕉作为参考 形象。计算图像的平均值和标准偏差

我不知道如何在我的mean/std-dev计算中忽略白色背景像素,而不通过每个x,y像素循环。欢迎对此提出任何建议

5) 。Haar级联训练的结果不准确。(见下图)。我相信适当的训练可能会带来更好的结果。但是现在对这个不感兴趣

我正在考虑的其他方法:

6) 。使用泛光填充查找所有连接的像素和 精明的 平均值和标准偏差相同

我在这方面没有成功。不知道如何获得所有连接的像素。我扔掉了面具(imwrite),得到了黑白形式的香蕉(来自参考香蕉图片)。欢迎对此提出任何建议

7) 。Hist反向投影:-不确定这对我有什么帮助

8) 。K-Means,还没试过。让我知道,如果它比step好 (4)

9) 。meanshift/camshift→ 我不确定这是否有帮助。欢迎提出建议

10) 。功能检测——SIFT/SURF——尚未尝试


任何帮助、提示或建议都将不胜感激

对此类一般性问题(目标检测)的回答,尤其是对此类非常活跃的研究主题的回答,基本上归结为偏好问题。也就是说,在您提到的10种“方法”中,特征检测/提取可能是最值得关注的方法,因为它是各种计算机视觉问题的基本组成部分,包括但不限于对象识别/检测

您可以尝试的一种非常简单但有效的方法是模型,该模型在快速目标检测的早期尝试中非常常用,所有全局空间关系信息都会丢失

从我在年度计算机视觉会议记录中观察到的最新对象检测研究趋势是,通过在节点中存储特征描述符并在边缘中存储空间关系信息的图形对每个对象进行编码,因此保留了部分全局信息,因为我们现在不仅可以在特征空间中匹配特征描述符的距离,还可以在图像空间中匹配它们之间的空间距离


针对您描述的这个问题,一个常见的陷阱是香蕉皮和苹果皮上的同质纹理可能无法保证特征的健康分布,并且您检测到的大多数特征将位于(最常见的)3个或更多对象的交点上,这本身并不是通常认为的“好”特征。出于这个原因,我建议研究超级像素对象识别(只是谷歌而已,说真的。)方法,因此“苹果”或“香蕉”类的数学模型将是一个相互连接的超级像素块,存储在图形中,每个边存储空间关系信息,每个节点存储与超级像素指定的邻域的颜色分布等有关的信息。然后,识别将成为一个(部分)图匹配问题,或者是一个与概率相关的问题,许多现有的研究都是这样做的。

谢谢你的回答。很有见地。我会查一查,看看能不能用你的建议做点什么。据我所知,没有一种算法可以保证没有误报。提问方式更为肯定,因为任何算法如果存在于这个宇宙中,在提供结果时都不可能有这么多的预测性和准确性。除了一个人谁尝了它,并保证他/她吃了“香蕉”。