我一直在开发一个应用程序来计算圆形物体,如图片中的细菌菌落.
容易的是这些物体通常与背景明显不同.
但是,很少有困难使分析变得棘手:
这个问题已在科学文献中多次解决并"解决",例如,使用圆形Hough变换或分水岭方法,但我从未对结果感到满意.
这是描述的一个简单的方法是通过获得自适应阈值和分裂前景(如我在描述这个交使用距离变换)的群集对象.
我已经成功地实现了这种方法,但它并不总能处理强度的突然变化.此外,同行们也要求我提出更"新颖"的方法.
因此,我正在寻找一种新方法来提取前景.
因此,我研究了其他阈值/斑点检测方法.我尝试了MSER但发现它们不是很强大而且在我的情况下非常慢.
我最终提出了一种算法,到目前为止,它给了我很好的结果:
只是为了向您展示我必须使用的图像类型:
该图片代表顶部3个样本图像的一部分,以及底部各个部分的算法结果(蓝色=前景).
这是我的C++实现:3-7
/*
* cv::Mat dst[3] is the result of the absolute difference between original and convolved channel.
* MCF(std::vector<cv::Point>, int, int) is a filter function that returns an positive int only if the input contour is valid.
*/
/* Allocate 3 matrices (1 per channel)*/
cv::Mat accu[3];
/* We define the …Run Code Online (Sandbox Code Playgroud)