前言
显著性检测,就是使用图像处理技术和计算机视觉算法来定位图片中最“显著”的区域。显著区域就是指图片中引人注目的区域或比较重要的区域,例如人眼在观看一幅图片时会首先关注的区域。例如下图,我们人眼一眼看过去首先注意到的不是草坪,而是躺在草坪上的内马尔,内马尔所在的区域就是显著性区域。这种自动定位图像或场景重要区域的过程称为显着性检测。显著性检测在目标检测、机器人领域有很多应用。
三种显著性检测算法
在OpenCV的saliency模块中有三种显著性检测算法:Static saliency:此类显着性检测算法依赖于图像特征和统计信息来定位图像中显著性区域。
Motion saliency:此类显着性检测算法输入为视频或一系列连续帧。运动显着性算法处理这些连续的帧,并跟踪帧中“移动”的对象。这些移动的对象被认为是显着性区域。
Objectness:这类显著性检测算法计算出一个个的建议区域(proposals),这些建议区域被认为是目标可能存在的区域。
需要注意的是显著性检测不是目标检测,显著性检测算法并不能判断图片中是否有“目标”,它只能检测出图片中它“认为”有目标的区域,这些区域可能真的包含目标,也可能不包含目标。通常显著性检测算法是许多计算机视觉任务的第一步,检测出显著性区域后再对这些显著性区域进一步判断和预测。
显着性检测器通常是非常快速的算法,能够实时运行。显着性检测器的结果随后被传递到计算量更大的算法中。这样后续计算量大的算法不必在图像的每个区域运行,而只需在显著性区域上运行。
OpenCV中的显著性检测算法
OpenCV的显著性检测算法在contrib包中,所以要使用显著性检测算法需要安装OpenCV_contrib包。OpenCV中显著性检测模块Saliency的类关系如下:
OpenCV提供类4种显著性检测算法的实现:cv2.saliency.ObjectnessBING_create()
cv2.saliency.StaticSaliencySpectralResidual_create()
cv2.saliency.StaticSaliencyFineGrained_create()
cv2.saliency.MotionSaliencyBinWangApr2014_create()
下面我将使用这四种显著性检测算法来检测图片中的显著性区域。
代码结构
├── images
│ ├── barcelona.jpg
│ ├── boat.jpg
│ ├── neymar.jpg
│ └── players.jpg
├── objectness_trained_model [9 entries]
│ ├── ObjNessB2W8HSV.idx.yml.gz
│ ├── ...
├── static_saliency.py
├── objectness_saliency.py
<