本章我们开始讲解基于层次聚类的标靶检测算法。当我们调用如下API,且flags中包含cv::CALIB_CB_CLUSTERING标志位时,将会执行基于层次聚类的斑点检测算法。算法支持对称标靶和非对称标靶两类,相应的需要将下述flags设为包含CALIB_CB_SYMMETRIC_GRID或CALIB_CB_ASYMMETRIC_GRID。
CV_EXPORTS_W bool findCirclesGrid( InputArray image, Size patternSize,OutputArray centers, int flags = CALIB_CB_SYMMETRIC_GRID,const Ptr<FeatureDetector> &blobDetector = SimpleBlobDetector::create());
如下图所示为对称标靶和非对称标靶的检测结果,其中左侧的标靶中人为加了5个干扰点,可以看到检测结果并未受到影响。左侧的对称标靶检测结果中起始点位于左上角,然后自左向右,自上向下排列;右侧的非对称标靶检测结果中起始点位于右上角,然后自上向下,自右向左排列。
现在开始分析代码的具体实现,如下所示可以看到cv::findCircl