显著图(Saliency map)

这里写目录标题

  • 概念
  • 应用
  • 算法
    • 传统算法
      • 静态显著性算法:对数光谱(SpectralResidual):
      • 静态显著性算法:细粒方法(FineGrained):
    • 人工智能算法
      • 基于眼动仪预测显著性区域方法
      • 积分梯度方法
  • 对比学习

概念

在计算机视觉中,显著图(Saliency map)是一种突出人们眼睛首先关注的区域的图像。显著图的目标是反映像素对人类视觉系统的重要程度

显著性是图像的突出部分,我们的大脑会特别关注这个部分。例如,大家有没有曾经在看广告的时候被一些特别的内容吸引,为此我们还特意停下来多看了一会儿?这就是广告的显著性,即使让我们可以一眼看到广告,也会被他吸引。

例如,在这个图像中,一个人首先看房子和灯塔,所以在显著图上它们应该突出显示。
显著图(Saliency map)_第1张图片
在人工智能和计算机视觉中设计的显著图通常与由生物或自然视觉构建的实际显著图不同。

应用

显著图在各种不同的问题中都有应用。
一些通用应用:

  • 图像和视频压缩:人眼只关注画面中感兴趣的一小块区域。因此,没有必要以统一的质量压缩整个帧。根据作者的说法,使用显著图可以减少具有相同视觉感知的视频的最终尺寸。
  • 图像和视频质量评估:图像或视频质量指标的主要任务是与用户意见高度相关。显著区域的差异更加重要,因此对质量得分的贡献更大。
  • 图像裁剪:它旨在通过扩大或缩小非信息区域来调整图像的大小。因此,重定向算法依赖于显著图的可用性,这些显著图可以准确估计所有显著图像细节。
  • 对象检测和识别:我们可以将其用于图像中最有可能包含对象的最显著区域,而不是将计算复杂的算法应用于整个图像。
  • 图像分割
    显著性估计可以看作是图像分割的一个实例。在计算机视觉中,图像分割是将数字图像划分为多个片段(像素集,也称为超像素)的过程。分割的目标是将图像的表示简化和/或更改为更有意义且更易于分析的东西。图像分割通常用于定位图像中的对象和边界(直线、曲线等)。更准确地说,图像分割是为图像中的每个像素分配标签的过程,使得具有相同标签的像素共享某些特征。

算法

传统算法

在 OpenCV 中实现了三种形式的经典显著性估计算法:

  • 静态显著性:依靠图像特征和统计数据来定位图像的感兴趣区域。
  • 运动显著性:依赖于视频中的运动,由光流检测。移动的物体被认为是突出的。
  • 物体性:物体性反映了图像窗口覆盖物体的可能性。这些算法生成一组边界框,表示对象可能位于图像中的位置。

显著性检测的Saliency模块是在opencv-contrib-python这个库中的。
显著图(Saliency map)_第2张图片

pip install opencv-contrib-python

和opencv-python无法共存

在pypi中解释到:

run pip install opencv-python if you need only main modules

run pip install opencv-contrib-python if you need both main and contrib modules
 (check extra modules listing from OpenCV documentation)

opencv-python 是只包含了主要模块的包,opencv-contrib-python包含了主要模块以及扩展模块,扩展模块主要是包含了一些带专利的收费算法(如shift特征检测)以及一些在测试的新的算法(稳定后会合并到主要模块)。
这个链接是关于这个库的官方介绍。

静态显著性算法:对数光谱(SpectralResidual):

该算法分析了输入图像的对数谱,提取了图像在光谱域中的光谱残差,并提出了一种构造显着图的快速方法,该显著图建议了原型物体的位置。
相似性意味着冗余。对于旨在最小化冗余视觉信息的系统,它必须意识到输入刺激的统计相似性。因此,在可以观察到很大形状相似性的不同对数谱中,值得我们注意的是跳出平滑曲线的信息。我们认为,频谱中的统计奇异性可能是图像中出现异常对象的异常区域的原因。
显著图(Saliency map)_第3张图片
显著图(Saliency map)_第4张图片

静态显著性算法:细粒方法(FineGrained):

人眼的视网膜由神经节细胞组成。有两种类型的神经节细胞,中心和偏心。中心位于黑暗背景包围的明亮区域。偏心对明亮背景包围的黑暗区域做出反应。该算法根据中心上和中心外的差异计算显著性。
显著图(Saliency map)_第5张图片
显著图(Saliency map)_第6张图片
显著图(Saliency map)_第7张图片

人工智能算法

基于眼动仪预测显著性区域方法

除了经典方法外,基于神经网络的方法也很受欢迎:
这里有一个在线链接来调用摄像头实现实时的显著性检测,可以尝试一下,来自于文章: Contextual encoder-decoder network for visual saliency prediction (2020) and on arXiv
其他的一些比较经典的方法包括:

  • TASED-Net:由两个building blocks组成。首先,编码器网络提取低分辨率时空特征,然后下面的预测网络解码空间编码特征,同时聚合所有时间信息。
  • STRA-Net:强调两个基本问题。首先,通过外观和光流耦合整合时空特征,然后通过注意力机制学习多尺度显著性。
  • STAViS:结合了时空视觉和听觉信息。这种方法采用单个网络来学习定位声源并融合两个显著性以获得最终显著性图。
数据集 分辨率 数量 采集人数 持续时长 眼动仪
CAT2000 1920×1080 4000张图片 24 5s EyeLink 1000 (1000Hz)
EyeTrackUAV2 1280×720 43段视频 30 33s EyeLink 1000 Plus (1000 Hz, binocular)
CrowdFix 1280×720 434段视频 26 1-3s The Eyetribe Eyetracker (60 Hz
SAVAM 1920×1080 43段视频 50 20s SMI iViewXTM Hi-Speed 1250 (500Hz)

积分梯度方法

积分梯度是一种神经网络可解释性方法

现在想要知道某个特征对做预测的重要程度,最简单的想法就是修改它的值或直接拿掉它,看看预测结果变化有多大,变化越大就越重要。看下面这个图像分类任务的例子,在测试图片的任意位置贴一个固定大小的灰色方块,看看方块贴各个位置时对于预测结果的影响,把综合结果显示为热力图(越偏蓝影响越大),如图可见这种方法找到的关键特征是比较合理的。

这就是积分梯度的大概思路,具体的数学解释,请参照下面这篇文章。

对比学习

每次我们的文章都会通过对比记忆来了解不同方法的原理,侧重点,目的,以达到更好的理解和记忆效果,这次也是一样。

显著性区域检验主要有两大方法类别:传统方法深度学习方法

  • 传统方法包括对数光谱和细粒方法。其主要思路是利用人眼成像的特性,寻找人可能感兴趣的区域,虽然计算速度较快,但是因为是对人眼的注意力情况进行建模,所以并不能算是一种普适性的方法,收到图像本身性质影响较大。
  • 深度学习方法也包括两个方向,神经网络可解释性方向和基于眼动仪的显著性区域预测。前者主要是为了搞清楚神经网络每一层关注图像的重点区域在哪里,属于研究神经网络可解释性的附加成果。而后者意在通过已有的眼动仪数据来通过神经网络预测一张新的图片人们会首先关注哪个区域。

你可能感兴趣的:(图像算法,计算机视觉,图像处理,opencv)