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

时间:2011-11-21 13:00:08

标签: algorithm object computer-vision detection

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

stones on dirt

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


我尝试了什么 - K-means

首先,我们可以执行类似Bilateral Blur(也称为表面模糊)的操作并获得较少的噪声图像(某些Pixel Bender代码here):

enter image description here

关于我们可以做一些K-means聚类(Octave / Matlab代码和逻辑示例here,它需要很多时间来收敛),就像我来到这里一样:

enter image description here

正如你所看到的那样,K-Means并没有解决手头的问题 - 他们倾向于加入物体,而不是保持沉默。


如果我们至少可以找到所有的石头(不是边界\边缘,但每个石头至少有几个点there are 2 stones on image: A has points x1,x2,x3, B has points x4,x5),我们可以执行像Allan D. Jepson’s "Robust Boundary Detection With Adaptive Grouping"这样的事情,那将是我的解决方案......但是如何检测不同的宝石?

1 个答案:

答案 0 :(得分:5)

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

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

你可以先把它转换成灰色,然后去除高频噪音 - 即删除细节,然后将其限制为黑白 - 或应用低通滤镜 - 草将大部分消失。

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

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

我附上了你的图片可能会有的样本 - 尽管我在GNU图像处理程序(GIMP)中手动摆弄图像pre-processed stones image file

及其副本,与原始图像的重叠enter image description here