在2d图像算法上检测多个相似的石头?

myW*_*SON 3 algorithm object detection computer-vision

所以我们有一张图像,可以清晰地看到人眼石头(还有一些噪音,这里是草):

在泥土上的石头

正如你所看到的那样,石头的纹理非常相似(黑色除外),并且边缘非常相似.我想知道是否有任何流行的检测石头数量的算法,这样的图像边界?


我尝试了什么 - K-means:

所以首先我们可以做一些像Bilateral Blur(也就是表面模糊)并获得更少的模糊图像(这里有一些Pixel Bender代码):

在此输入图像描述

在我们可以做一些K-均值聚类(八度/ Matlab代码和逻辑例子在这里 ,它确实需要很多时间才能收敛),像我这里有:

在此输入图像描述

正如你所看到的那样,K-Means并没有解决手头的问题 - 他们倾向于加入对象,而不是保持自己的分离.


如果我们至少可以找到所有的石头(不是边界\边缘,但每个石头至少有几个点there are 2 stones on image: A has points x1,x2,x3, B has points x4,x5),我们可以执行像Allan D. Jepson的"使用自适应分组的鲁棒边界检测"这样的东西,这将是一个解决方案对我来说......但如何检测不同的宝石?

jsb*_*eno 5

在这种情况下,在应用任何算法之前,您必须预处理图像,以消除不需要的噪音并使您想要的主题成为焦点.

由于噪音(草)很薄,石头很好分开,如果你的所有图像都是这样的,有一些步骤可以始终如一地产生良好的效果.

您可以从将其转换为灰色开始,而不是去除高频噪声 - 即删除细节,然后将其阈值设置为黑白 - 或应用低通滤波器 - 草将大部分消失.

然后,您可以应用形态开口过滤器来细化石头之间的连接,以便大多数分离,然后只计算连接的组件.

如果您使用C或Python进行工作,诸如"leptonica"(http://www.leptonica.com/)之类的库可以帮助您使用大多数过滤器.

我附上了你的图像可能的样本 - 虽然我在GNU图像处理程序(GIMP)中手动摆弄图像 预处理的石头图像文件

和它的副本,与原始图像的叠加 在此输入图像描述