所以我们有一张图像可以清晰地看到人眼石头(还有一些噪音,这里是草):
正如你所看到的那样,石头的质地非常相似(黑色除外),并且边缘非常相似。我想知道是否有任何流行的检测石头数量的算法,并且这样的图像边界?
我尝试了什么 - K-means :
首先,我们可以执行类似Bilateral Blur(也称为表面模糊)的操作并获得较少的噪声图像(某些Pixel Bender代码here):
关于我们可以做一些K-means聚类(Octave / Matlab代码和逻辑示例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"这样的事情,那将是我的解决方案......但是如何检测不同的宝石?
答案 0 :(得分:5)
在这种情况下,在应用任何算法之前,您必须对图像进行预处理,以消除不需要的噪音并使您想要的主体成为焦点。
由于噪音(草)很薄,并且石头很好地分开,如果你的所有图像都是这样的,有一些步骤可以始终如一地产生良好的效果。
你可以先把它转换成灰色,然后去除高频噪音 - 即删除细节,然后将其限制为黑白 - 或应用低通滤镜 - 草将大部分消失。
然后,您可以应用形态学开口过滤器来细化石头之间的连接,以便大多数分离,然后只计算连接的组件。
如果您使用C或Python进行工作,诸如“leptonica”(http://www.leptonica.com/)之类的库可以帮助您使用大多数过滤器。
我附上了你的图片可能会有的样本 - 尽管我在GNU图像处理程序(GIMP)中手动摆弄图像
及其副本,与原始图像的重叠