我是 OpenCV 的新手,没有很强的图像处理背景。目前我正在进行一个项目,编写一个程序来计算图像中来自显微镜的所有生物细胞。我已经尝试了 Internet 来源的各种方法来对图像应用计数,但没有一种方法能像预期的那样工作。
我用过的一些方法是:
- 寻找过滤图像的轮廓。 (不适用于靠近在一起的单元格)
- 高斯模糊并在图像上找到局部最大值。 (与 1 相同的问题)
- Canny边缘检测(输出结果检测非细胞片段)
这是我需要计算细胞总数的图像示例。
如果单元格不靠在一起,我当前的计数算法效果会更好。例如像这样:
但是,该算法仍然无法拆分图像中心粘在一起的 3 个单元格。
那么我可以做些什么来检测图像中假阴性/阳性最少的细胞总数?
最佳答案
您的方法几乎没问题。但是,它需要一些额外的步骤。 你需要一个叫做 Morphological Operations 的东西.
- 按照您喜欢的方式过滤您的图片。
- 根据颜色应用阈值,或将其转换为灰色然后再设置阈值。附言从您提供的示例来看,您的单元格颜色似乎太饱和了。因此,您可以将其转换为 HSV 空间,然后使用 S channel 对其进行阈值处理(如果您需要帮助,请在此处告诉我)。
- 申请Opening阈值图像上的形态学运算符。附言您可以尝试几个内核大小并选择最好的。
- 勾画轮廓并做您正在做的事情。
开幕式:
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/