使用 OpenCV 进行 C++ 生物细胞计数

标签 c++ opencv cell counting

我是 OpenCV 的新手,没有很强的图像处理背景。目前我正在进行一个项目,编写一个程序来计算图像中来自显微镜的所有生物细胞。我已经尝试了 Internet 来源的各种方法来对图像应用计数,但没有一种方法能像预期的那样工作。

我用过的一些方法是:

  1. 寻找过滤图像的轮廓。 (不适用于靠近在一起的单元格)
  2. 高斯模糊并在图像上找到局部最大值。 (与 1 相同的问题)
  3. Canny边缘检测(输出结果检测非细胞片段)

这是我需要计算细胞总数的图像示例。

enter image description here

如果单元格不靠在一起,我当前的计数算法效果会更好。例如像这样:

enter image description here

但是,该算法仍然无法拆分图像中心粘在一起的 3 个单元格。

那么我可以做些什么来检测图像中假阴性/阳性最少的细胞总数?

最佳答案

您的方法几乎没问题。但是,它需要一些额外的步骤。 你需要一个叫做 Morphological Operations 的东西.

  1. 按照您喜欢的方式过滤您的图片。
  2. 根据颜色应用阈值,或将其转换为灰色然后再设置阈值。附言从您提供的示例来看,您的单元格颜色似乎太饱和了。因此,您可以将其转换为 HSV 空间,然后使用 S channel 对其进行阈值处理(如果您需要帮助,请在此处告诉我)。
  3. 申请Opening阈值图像上的形态学运算符。附言您可以尝试几个内核大小并选择最好的。
  4. 勾画轮廓并做您正在做的事情。

开幕式:

cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5), cv::Point(1, 1));
cv::morphologyEx(img, img, cv::MORPH_OPEN, element, cv::Point(-1, -1), 1);

关于使用 OpenCV 进行 C++ 生物细胞计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33729432/

相关文章:

python - 背景减法器

opencv - OpenCV中的stereoCalibrate函数错误

swift - 使用 Swift 以编程方式将文本标签和按钮添加到动态 tableview 单元格

c++ - 为什么类的 "Move"到 AppCode 中具有相同命名空间/名称.h 的文件导致空 .h 而所有类代码都移至 .cpp?

c++ - 虚拟大小导致程序内存不足

c++ - 手动创建 gnu_unique_object 符号

java - javacv 项目在 32 位和 64 位操作系统上运行是否不同?

Excel从单元格中提取特定数字

vb.net - datagridview单元格中的换行符vb.net

c++ - "Virtual"是 C++ 中的限定符还是关键字?