如何计算图像中“绿点”的数量?

时间:2010-11-17 12:19:28

标签: image image-processing computer-vision image-recognition

您好 我有一堆图像。让我们假设所有这些都具有相同的大小。 图像具有黑色背景和一些准圆形绿色斑点 代表荧光。我必须计算金额(百分比) 每个图像的荧光。即绿地面积。

知道如何做到这一点,例如在Java中吗?

4 个答案:

答案 0 :(得分:5)

这是图像处理中的标准问题,称为图像分割。您将能够找到大量有关它的信息。

特别是,这是显微图像处理中的常见问题,这正是您正在做的事情。我认为可以在ImageJ中进行预制操作;如果没有,它将是ImageJ中一个相当简单的宏,并且由于ImageJ在java中,如果你愿意,你可以使用ImageJ的库编写java代码。

我建议你采用一种方法:

  1. 预处理图像以进行清理 - 通过减去中值滤波器或高斯卷积来减去背景,减去邻域大于你的单元格,或滚球算法(在ImageJ源中查找)或类似的东西,也许然后是少量模糊(例如,带有3x3邻域的中值滤波器)以去除斑点。
  2. 计算图像的直方图
  3. 在直方图中搜索两个峰,一个对应于黑色像素,一个对应绿色
  4. 使用两个峰的值来播种双簇K-means(2-means,我猜!)分割
  5. 而不是做K-means步骤,你可以从直方图中选择一个阈值(在两个峰值之间寻找谷值,比如说),并在其上进行分段。或者使用某种自适应分割(比较像素与其邻域的中位数,比如说),但这需要一些调整。

答案 1 :(得分:0)

我现在没有时间详细介绍,但我可以为您概述这个过程:

循环播放图像

  1. 将每张图片加载到BufferedImage(http://download.oracle.com/javase/6/docs/api/java/awt/image/BufferedImage.html)
  2. 遍历每个像素(x,y)并获取该像素的颜色(int getRGB(int x,int y))
  3. 将此颜色与参考颜色进行比较(例如,绿色为0x7FFF00)或定义一系列可接受的颜色。
  4. 如果匹配,则递增计数器
  5. 循环运行后,将计数器与总像素数进行比较,等等,得到百分比
  6. (注意:这可能是一种非常天真的方式,并且有很多可能的优化,但它应该是一个开始)

答案 2 :(得分:0)

答案 3 :(得分:0)

一些想法:

  • 您可以进行边缘检测,然后执行hough circle transform。如果您已经知道圆的半径,这应该可以正常工作。
  • 比较颜色时,您可以使用更适合模糊比较的色彩空间。例如HSV color space
  • 由于您的背景为黑色,因此最简单的方法是计算亮度并应用阈值。然后计算高于阈值的像素。
  • 发布计算机视觉问题时,查看输入材料总是有帮助的。