1

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

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

4

4 回答 4

5

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

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

我建议您采用以下方法:

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

无需执行 K-means 步骤,您可以从直方图中选择一个阈值(例如,寻找两个峰值之间的谷值),然后对其进行分段。或者使用某种自适应分割(例如,将像素与其附近的中值进行比较),但这需要一些调整。

于 2010-12-01T12:56:47.030 回答
0

例如,您可以使用imagemagik,请参阅http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=16177

于 2010-11-17T12:32:21.493 回答
0

一些想法:

  • 您可以进行边缘检测,然后执行霍夫圆变换。如果您已经知道圆的半径,这应该很有效。
  • 在比较颜色时,您可以使用更适合模糊比较的颜色空间。例如HSV 颜色空间
  • 由于您的背景是黑色的,因此计算亮度并应用阈值可能是最容易的。然后计算阈值以上的像素。
  • 在发布计算机视觉问题时,查看输入材料总是有帮助的。
于 2010-12-01T12:07:07.343 回答
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. 循环运行后,将计数器与像素总数进行比较,然后瞧,你得到了你的百分比

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

于 2010-11-17T12:27:29.753 回答