检测灰度或二值图像中的六边形形状

时间:2015-03-18 12:10:10

标签: image matlab opencv imagej

对于我的学士论文,我需要分析在海洋中拍摄的图像来计算和测量水粒子的大小。

我的问题: 除了想要的水颗粒外,图像在整个图像中显示六角形斑块:   - 不同的尺寸   - 不规则的形状   - 不同的灰度值

(下面的示例图片!)

很明显,这些贴片会伪造我关于粒子大小和数量的图像分析。 因此,需要以某种方式检测和删除此补丁。

由于这只是我论文中工作的一小部分,我不想花太多时间在其中,并且已经尝试过经典的方法,如:(imageJ)

  • 玩阈值(导致也删除想要的水粒子)
  • 分析包含六边形斑块的图像,然后分类出最大的区域(六边形斑块有相当大的区域,但你仍然会有很多haxagons)
  • 使用过滤器:在复制的图像上使用高斯滤镜并从原始图像中减去副本会删除许多色块(减少灰度值),但也会删除很少的水粒子,因此会再次伪造结果

更复杂和耗时的解决方案是使用实现的库(例如matlab或opencv)来检测描述形状的点。 但到目前为止,我找不到适合我任务的代码。

你们中是否有人创造了我可以用于我的任务或任何其他想法的代码?

croped version of an image

你也可以看到很多不同深度的六边形斑块。 像素值较大的小点是想要的粒子!

2 个答案:

答案 0 :(得分:0)

图像处理是一个非常复杂的领域,因此没有严格的规则。

但如果是我,我会'面膜'图片。这涉及定义您要保留或删除的像素' Mask'。然后,您可以递归扫描图像上的蒙版,并将蒙版与所选的图像部分进行比较。然后,如果符合您的标准,则选择或删除该部分(取决于您的方法)。 标准的一个这样的例子是针对似然函数的加权的空间和灰度误差(例如,卡方,平均误差等)或者您定义不确定性的正态分布。

一些值得思考的东西

答案 1 :(得分:0)

也许您可以尝试使用霍夫变换:

https://en.wikipedia.org/wiki/Hough_transform

Matlab具有内置函数hough,可实现此功能,但仅适用于行。也许您可以从此开始,然后更改它以识别六边形。