【问题标题】:How to calculate the amount of "green spots" in an image?如何计算图像中“绿点”的数量?
【发布时间】:2011-05-11 09:28:33
【问题描述】:

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

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

【问题讨论】:

  • 你有使用计算机视觉机制的权限吗?
  • 类似的东西:计算绿色像素的数量并除以总像素数?我想我不明白这个问题......
  • 像素不都是同一种颜色。有一些“模糊”的绿色。问题是如何识别该区域-我的意思是边界-
  • 这在某种程度上与您的原始陈述相矛盾。您想要整个图像中所有绿色像素的百分比还是想要绿色形状的边界。
  • 很抱歉,如果它是矛盾的。绿点区域以某种方式旋转。它们不都是一样的绿色。有一个边界,我必须计算这个绿点的面积。

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


【解决方案1】:

我现在没有时间详细介绍,但我可以为您概述一下流程:

循环浏览图片

  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. 循环运行后,将计数器与像素总数进行比较,然后瞧,你得到了你的百分比

(注意:这可能是一种非常幼稚的方法,并且可以进行大量优化,但这应该是一个开始)

【讨论】:

    【解决方案2】:
    【解决方案3】:

    一些想法:

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

    【讨论】:

      【解决方案4】:

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

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

      我建议您采用以下方法:

      1. 预处理图像以清理它 - 通过减去比您的细胞更大的邻域的中值滤波器或高斯卷积来减去背景,或者滚球算法(查看 ImageJ 源代码),或者类似的东西,也许然后进行少量模糊(例如,具有 3x3 邻域的中值滤波器)以去除斑点。
      2. 计算图像的直方图
      3. 在直方图中搜索两个峰值,一个对应黑色像素,一个对应绿色
      4. 使用两个峰值的值来播种一个两簇 K-means(我想是 2-means!)分割

      您可以从直方图中选择一个阈值(例如,寻找两个峰之间的谷),然后在此基础上进行分段,而不是执行 K 均值步骤。或者使用某种自适应分割(例如,将像素与其邻域中的中值进行比较),但这需要进行一些调整。

      【讨论】:

        猜你喜欢
        • 2019-08-08
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        • 2012-12-03
        相关资源
        最近更新 更多