计数血细胞

信息处理 图像处理 计算机视觉 opencv 图像分割
2021-12-30 03:03:27

如何在opencv中计算血细胞?问题是它们粘在一起。

示例图片:

在此处输入图像描述

也许成对的几何直方图(Geometric Histograms)适合匹配部分圆形?

3个回答

只是一个不能保证成功的想法:

  1. 隔离红色斑点(例如将它们标记为白色,图像的其余部分标记为黑色)
  2. 对白色斑点执行距离变换(每个像素表示到最近的黑色像素的距离)
  3. 执行非最大值抑制(理想情况下只保留圆心)
  4. 处理非理想条件(从伪像中滤除小峰值)

与@SalemMansour 的建议类似,它也是一种基于区域的方法。

如果我们可以假设,可以计算出一个非常粗略的估计

  • 单元格大小(以像素为单位)在所有图像中差别不大,
  • 单元格颜色在所有图像中没有太大差异。

然后,您可以预先测量单元格的平均大小并计算单元格的廉价掩码,如下所示:

from SimpleCV import *
im = Image("s58Hl.jpg")
r,g,b = im.splitChannels()
cellmask = g.equalize().threshold(90).invert()
masksize = cellmask.getGrayNumpy().sum()/255.
cellsize = 27*27 # premeasured cell size
cellnum = masksize/cellsize
print(cellnum)

它给了我~211的细胞计数。

蒙版图像是这样的: 在此处输入图像描述

对于这个较小的图像,我将手动计算 9 个单元格:

在此处输入图像描述

该解决方案给出了 9.46502057613 的结果。


当然,如果任何假设无效,那么这种方法是无用的。它对硬色阈值和单元大小常数也很敏感。由于颜色均衡,如果图像中没有单元格,它可能会完全失败。

但它真的很简单而且便宜:)

首先,您必须使用阈值,otsu 方法将图像更改为二进制图像。您可以使用侵蚀、开孔等数学形态学来分离单元格(重叠的单元格)。估计面积。