今天要整理记录的笔记是关于图像Blob特征分析算法的内容。计算机视觉中的Blob(斑点)是指图像中的一块连通区域,Blob分析就是对前景、背景分离后的二值图像,进行连通域提取和标记。标记完成的每一个Blob都代表一个前景目标,然后就可以计算Blob的一些相关特征。
也可以称Blob(斑点)是指二维图像中和周围像素点存在颜色差异和灰度差异的特征区域,针对这些特征区域所提取出某些具有区域代表性的信息,就被称为Blob特征。由于Blob特征代表的是一个区域,所以相比单纯的角点,它的稳定性要更好,抗噪声能力也更强,所以它在图像配准上扮演了很重要的角色。例如在opencv::ccalib模块中,进行双目相机的三维重建时需要先利用两张分别由不同相机拍摄出的图像来进行立体匹配从而得到深度图,而深度图表现出来就是具有多个Blob的灰度图像,而进行立体匹配过程也会在两张图像之间寻找相似的区域特征。
同时有时图像中的Blob也是我们关心的区域,比如在医学与生物领域,我们需要从一些X光照片或细胞显微照片中提取一些具有特殊意义的斑点的位置或数量。
Blob特征分析算法使用相对简单的方式来检测斑点类的特征,OpenCV提供了一种方便的APISimpleBlobDetector
来检测斑点并根据不同的特征对其进行过滤。
其步骤为:
(1)对于一幅图像在阈值区间 [ minthresh, maxthresh ]内以某个阈值步长进行多次二值分割,得到多张二值图像;
(2)再对多张二值图像分别获取连通域的轮廓及轮廓中心;
(3)将距离小于某个阈值minDistBetweenBlob
的Blob中心点归为一类,对应的连通域也视为同个区域,再经过条件筛选对连通域进行过滤后留下来的就是斑点特征。
SimpleBlobDetector
可以实现对各种常见的Blob对象进行检测与分离。使用该检测器的时候,可以根据需要来输入不同的条件参数,得到的结果跟输入的参数息息相关。首先,创建BLOB特征参数设置器SimpleBlobDetector::Params params;
,然后就可以根据需求设置不同参数。
例如可以设置二值化阈值区间:
//二值化阈值区间
params.minThreshold = 0;
params.maxThreshold = 255;
选择是否通过颜色或灰度值进行过滤:
//根据灰度或颜色值过滤
params.filterByColor = true;
blobColor = 0 //以选择较暗的blob,将 blobColor = 255设置为较亮的blob。
// params.filterByColor = false;
选择是否根据BLOB面积进行过滤: