利用OpenCV的SimpleBlobDetector检测图像的奇异区域(斑点)

奇异区域通常是指与周围领域有着某些特征(颜色或灰度)差别的区域。常见的奇异区域如医学领域X光照片或CT某些特定组织、天空中降落的特体等。

奇异区域检测一般采用两种方法来实现。PS:下面对原理的描述只是个大概描述,估计大家都看得模模糊糊的,如果想真得搞清楚,请自行搜索相关论文。之所以要给个大概描述,是方便大家查询资料时有个参考。

⑴基于微分检测器检测。拉普拉斯算子是检测图像奇异区域常用的方法。图像与高斯拉普拉斯函数进行卷积操作实际上求取的是图像与这一函数的相似性,奇异区域表现出来的特征就是图像中呈现比它周围像素灰度值大或小的区域,二维高斯拉普拉斯变换恰好呈现出来的就是这种特征。拉普拉斯检测图像中的局部极值点,通常需要先对图像进行滤波,去除伪点噪声。

⑵基于局部极值的分水岭检测。局部极值的分水岭检测奇异区域是对原图像进行多间隔区域二值化操作,对一个二值化图像提取相应的连通域并计算相应区域的连通中心点;根据中心点拟合归类成同一块group,得到对应的blob特征;最后根据得到的中心点集group估计出blob特征和对应的半径。

OpenCV提供了操作类SimpleBlobDetector用于奇异区域检测,原理就采用的是上面介绍的第二种原理,即基于局部极值的分水岭检测。下面对这个类进行相关介绍和说明。

首先要明白为什么叫称这个类叫操作类,因为实际上它实际上并没有实质性的功能,为啥没有?我们先来看下它的定义吧!

class CV_EXPORTS_W SimpleBlobDetector : public Feature2D
{
public:
  struct CV_EXPORTS_W_SIMPLE Params
  {
      CV_

你可能感兴趣的:(图像处理与识别算法原理)