计数血细胞
信息处理
图像处理
计算机视觉
opencv
图像分割
2021-12-30 03:03:27
3个回答
只是一个不能保证成功的想法:
- 隔离红色斑点(例如将它们标记为白色,图像的其余部分标记为黑色)
- 对白色斑点执行距离变换(每个像素表示到最近的黑色像素的距离)
- 执行非最大值抑制(理想情况下只保留圆心)
- 处理非理想条件(从伪像中滤除小峰值)
与@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 方法将图像更改为二进制图像。您可以使用侵蚀、开孔等数学形态学来分离单元格(重叠的单元格)。估计面积。