Saliency Detection: A Spectral Residual Approach

  1. 题目:Saliency Detection: A Spectral Residual Approach
  2. 作者:Xiaodi Hou, Liqing Zhang
  3. 领域:显著性目标检测
  4. 类型:新视角, 新方法

概述

The ability of human visual system to detect visual
saliency is extraordinarily fast and reliable. However, computational modeling of this basic intelligent behavior still
remains a challenge. This paper presents a simple method
for the visual saliency detection.

  • Our model is independent of features, categories, or
    other forms of prior knowledge of the objects
    .
  • By analyzing the log-spectrum of an input image, we
  • extract the spectral residual of an image in spectral domain,
  • and propose a
    fast method to construct the corresponding saliency map in
    spatial domain
    .

核心贡献

首先讨论人类的视觉系统是如何实现显著性检测的?现在一般认为视觉系统的处理过程分为两步:

  1. 第一步是并行的、简单的预注意处理
  2. 第二步 是串行的、缓慢而又复杂的注意处理过程

在第一步的过程中,人们对眼前所出现的事物,总会有一些底层特征是突然冒出来的,比如方向、纹理、边缘、亮度等,论文中用“pop up”一词来表示这种行为,以目标检测的角度来看,在第一步过程中突然冒出来的东西被看做是目标的候选物体,即这些东西可能就是我们想检测的目标。相关文献给这种候选物体起了一个专业的名字,叫proto object

为了找到这些proto objects,人们提出了许多模型,比较有名的有Itti的基于生物视觉的模型等,但是这些模型作为一个预注意处理系统,花费的计算量偏大了。现在大多数模型都是在找目标物体的特征和性质,而没有一个与物体类别无关的用来做显著性检测的模型。


这篇文章提出了一个图像视觉显著性的简单计算模型,这个模型和Itti提出的模型是两个截然不同的模型. Itti模型对于图像视觉显著性主要关注整幅图片突出的部分,通过各种特征的融合提取显著性图,而这个模型一上来关注的点就不在一张图片里突出的地方,而是背景,观察是否大部分图片的背景在某个空间上都满足什么变化,最后剔除背景,自然就只剩下图片突出的部分了,这篇文章之所以简单,是因为它只需要5个公式就可以得到想要的结果,也没有很复杂的公式变换,都是图像处理基本的变换公式。

传统的模型通过将特定的特征(例如一些颜色特征、亮度特征、纹理特征等等)与目标联系起来,实际上将这个问题转化为检测特定类别的对象。由于这些模型是基于训练的,扩展性成为了通用任务的瓶颈。面对不可预测、种类繁多的视觉模式,需要一个通用的显著性检测系统。换句话说,在实现显著性设计时,应尽可能少地参考对象的统计知识

如果要提出一个通用的显著性检测系统,那么根据以往的模型,就必须找到目标通用的特征,但是这基本上是不可能的事,每个目标都有自己与众不同的特性。既然这样,那么这里就把问题转化一下,目标通用特性提取不到,那就找一找背景的通用特性

Most of the detection models focus on summarizing the properties of target objects. However, general properties shared by various categories of objects are not likely to exist. In this paper, we pose this problem in an alternative way: to explore the properties of the backgrounds.

这就是文章创新的地方,敢于跳出已有理论的框架,从另外一个角度考虑问题,往往会有预料之外的收获。


高效编码是一种通用的框架,在此框架下,我们的视觉处理的许多机制可以相互关联。Barlow提出的有效编码假说要移除感知系统的冗余, 视觉系统的基本原理是抑制对频繁出现的特征的反应,同时对偏离常规的特征保持敏感。因此,只能将未预料到的信号发送到后期处理。

感知系统的信息处理过程与外界信号的统计特性密切相关。初级感知系统的作用就是去除输入信号的统计冗余

也就是说,大脑之所以能够对外界环境自适应,是因为复杂的外界刺激存在冗余,而大脑的神经元能够有效地去除这些冗余,从而可以利用较少的资源尽可能有效地表达更多的信息。

从信息论的角度来看,有效编码假说将图像信息H(Image)分解为两部分:

H(Innovation) 表示突出的部分,H(Prior Knowledge) 则表示应该被编码系统抑制的冗余的信息, 在图像统计领域,这种冗余对应于环境的统计不变性。通过去除图像冗余信息,就可以获得图像与众不同的部分,即显著目标。

现在人们普遍认为自然图像不是随机的,它们服从高度可预测的分布。

自然图像的统计特性具有变换不变性:即将图像从原来的空间坐标变换到频率坐标系中,图像在空间中具有的统计特性在频域中仍然保留,这种不变性恰好保证了采用能量谱来刻画自然图像空间相关性的可靠性。

在自然图像统计的不变因子中,尺度不变性是最著名也是研究最广泛的性质。这个性质也被称为定律。 即大量自然图像在某个频率的幅度的平均值和该频率成反比

进一步还有以下规律:当频率和平均幅频响应都在log-log坐标下时是近似线性的,同时当只有幅频响应取log坐标时,所有的图像的幅频响应曲线是类似的,下图反映了自然图像的log-log谱和log谱的区别。

可见,log-log曲线近似为一条直线,而log曲线基本符合法则。

尽管log-log谱在理论上已经成熟并得到了广泛的应用,但它在单个图像的分析中并不受欢迎,因为:

  1. 在单个图像中不太可能发现尺度不变性
  2. 采样点比例不均匀,低频部分在log-log上分布稀疏,高频部分集中,存在噪声的影响(低频部分数据跨度大,高频部分数据汇集)

所以本文采用log谱表示图像.


我们发现不同图像的对数谱具有相似的趋势,尽管每个图像都包含统计奇点。

如图, 分别超过1、10和100幅图像上平均的平均谱曲线。这一结果表明平均log谱具有局部线性。因此,采用局部平均滤波器近似)的形状是合理的。在我们的实验中,平均滤波器的核n大小等于3。改变n的大小只会稍微改变结果(见图5)。

平均频谱近似为对输入图像进行卷积:

当100张图片取平均时,发现那些尖峰的东西没有了,曲线变得平滑了起来。于是作者认为这个平滑的曲线和之前充满尖峰的曲线之间的关系可能和图像中不显著的和显著的东西的关系存在某种联系

那么会不会是说平滑的曲线就是背景所贡献的,而那些小尖峰就是显著性的物体所贡献的?我认为可以这样认为——显著性的物体破坏了背景的平滑性,导致原本平滑的曲线上多了一些尖峰变得不再平滑。于是作者便着手去实验这种想法,大致的思路是用一个图片的幅频响应曲线减去平均的曲线,得到的差称为谱残差,再将谱残差通过傅里叶反变换变换回去,看看都对应原图中的哪些区域,这些区域是不是显著性的区域, 这样就可以验证这个想法对不对了。经过实验后发现还真是这么回事儿。


相似性意味着冗余。对于一个旨在减少视觉冗余信息的系统,它必须知道输入刺激的统计相似性。因此,在不同的log谱中,可以观察到相当多的形状相似性,值得我们注意的是平滑曲线中跳出来的信息(曲线满足局部线性条件)。我们认为谱中的统计奇异点可能是图像中异常区域出现proto-objects的原因。因此,在不同的log谱中我们只需要关注其差异部分忽略相似部分。

核心公式

  • 公式5表示傅里叶变换的实部, 也就是幅度谱
  • 公式6表示虚部, 也就是相位谱
  • 公式7表示幅度谱的对数变换
  • 给定输入图像,从高度(或宽度)等于64px的下采样图像中提取对数谱。输入尺寸的选择与visual scale有关
  • 当图像较小(粗糙), 细节特征被忽略, 视觉搜索在一个大的尺度上执行的
  • 在精细的尺度上(大图像),大的特征与图像中微小但突然的变化相比变得不那么具有竞争力
  • 如果没有一个缓慢的观察过程,人是不可能感知图像的细节(对应于傅里叶谱中的高频部分)。通过仿真实验,发现64像素的输入图像的宽度(或高度)是一个很好的估计正常视觉条件的尺度
  • 公式8表示频域残差, 也就是幅度谱对数与幅度谱经过均值滤波器平滑后的差值
  • 这里的幅度谱经过均值滤波器平滑, 实际上是用来近似大量数据平均后的幅度谱
  • 平均log谱具有局部线性。因此,采用局部平均滤波器近似)的形状是合理的
  • 公式9表示最终的得到的空域显著性图
  • 进行傅里叶逆变换,得到空间域的显著性图
  • 为了得到更好的视觉效果,对显著性图做一次标准差为8的高斯模糊
  • 利用傅里叶反变换,我们可以在空域构造输出图像,称为显著性图。显著性映射主要包含场景中重要的部分。残差谱的内容也可以解释为图像的非预期部分。因此,显著性映射中每个点的值都要平方,以表示估计误差
  • 这里得到的显著性图是概率图

显著性图是proto-objects的显式表示,使用简单的阈值分段来检测显著性图中的proto-objects。给定图像的,得到目标映射:

阈值的选择是 a trade-off problem between false alarm and neglect of objects

评测标准

定义了击中率和误警率.

  • HR(击中率)计算为所有手工标注者标注的结果与生成的显著性图像素乘积的均值. 这实际上是在计算真值的前景与预测结果前景的交集.
  • FAR(误警率)计算真值的背景与预测结果前景的交集.

该判据指出,最优显著性检测系统应在没有手标签者提示proto-objects的区域响应较低,而在大多数标签者对proto-objects达成一致的区域响应较高。

和Itti的方法做了下比较:

由图可以看出本文方法在计算时间上比Itti方法更快,而且准确度也得到提升。

参考代码

clear; clc;

%% Read image from file
inImg = im2double(rgb2gray(imread('Spectral_Residual.png')));
%%inImg = imresize(inImg, 64/size(inImg, 2));

%% Spectral Residual
myFFT = fft2(inImg); % A(f),一个图像的振幅,主要保存图像低频部分的信息
myPhase = angle(myFFT);  % 图像对应的相位图,主要保存图像高频部分的信息

% 对低频部分处理,即处理背景部分,使背景部分的振幅接近0,去掉背景,剩下的就是前景目标
myLogAmplitude = log(abs(myFFT)); % L(f) = log(A(f)),图像振幅的log谱,log可以使振幅值区间变小
averageAmplitude = imfilter(myLogAmplitude, fspecial('average', 3), 'replicate');
mySpectralResidual = myLogAmplitude - averageAmplitude;

%% to spatial domain
% 用残差振幅(保存的低频信号,且值接近0),替代图像的原振幅(保存的低频信号,且值较大),再结合相位图,反傅里叶变换到空域中。
saliencyMap = abs(ifft2(exp(mySpectralResidual + 1i*myPhase))).^2;

%% After Effect
saliencyMap = mat2gray(imfilter(saliencyMap, fspecial('gaussian', [10, 10], 2.5)));
imshow(saliencyMap);

参考链接

  • 笔记:

Saliency Detection: A Spectral Residual Approach的更多相关文章

  1. paper 27 :图像/视觉显著性检测技术发展情况梳理(Saliency Detection、Visual Attention)

    1. 早期C. Koch与S. Ullman的研究工作. 他们提出了非常有影响力的生物启发模型. C. Koch and S. Ullman . Shifts in selective visual ...

  2. {Links}{Matting}{Saliency Detection}{Superpixel}Source links

    自然图像抠图/视频抠像技术发展情况梳理(image matting, alpha matting, video matting)--计算机视觉专题1 http://blog.csdn.net/ansh ...

  3. 论文笔记之:From Facial Parts Responses to Face Detection: A Deep Learning Approach

    From Facial Parts Responses to Face Detection: A Deep Learning Approach ICCV 2015 从以上两张图就可以感受到本文所提方法 ...

  4. [精读]Spationtemporal Saliency Detection Using Textural Contrast and Its Applications

    Spationtemporal Saliency Detection Using Textural Contrast and Its Applications Last Edit 2013/12/3 ...

  5. Saliency Detection via Graph-Based Manifold Ranking

    Saliency Detection via Graph-Based Manifold Ranking https://www.yuque.com/lart/papers 本文不是按照之前的论文那样, ...

  6. 论文阅读:Review of Visual Saliency Detection with Comprehensive Information

    这篇文章目前发表在arxiv,日期:20180309. 这是一篇针对多种综合性信息的视觉显著性检测的综述文章. 注:有些名词直接贴原文,是因为不翻译更容易理解.也不会逐字逐句都翻译,重要的肯定不会错过 ...

  7. 视觉显著性检测(Visual saliency detection)相关概念

    视觉显著性检测(Visual saliency detection)指通过智能算法模拟人的视觉特点,提取图像中的显著区域(即人类感兴趣的区域). 视觉注意机制(Visual Attention Mec ...

  8. PAMI 2010 Context-aware saliency detection

    This is a highly-cited paper. The context aware saliency proposed based on four principles, which ca ...

  9. Image Processing and Analysis_8_Edge Detection:A Computational Approach to Edge Detection——1986

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

随机推荐

  1. 【C语言基础】什么是数据类型?

    基本数据类型 整数 整型 — — int     ---- 4 字节 短整型 — — short  int     ---- 2 字节 长整型 — — long  int     ---- 8 字节 ...

  2. NumPy基础

    一.NumPy ndarray (一)生成ndarray 表 数组生成函数 函数 描述(默认数据类型是float64) array 将输入数据(序列型对象)转换为ndarray,若不显示的指定数据类型 ...

  3. 详细解说Windows 8.1与Windows 8的区别(Win8.1与Win8区别)

    详细解说Windows 8.1与Windows 8的区别(Win8.1与Win8区别) 本文转自“吾乐吧软件站”,原文链接:http://www.wuleba.com/?p=23082 最近,吾乐吧软 ...

  4. python yield 与 yield from转

    python yield 与 yield from转 https://blog.csdn.net/chenbin520/article/details/78111399?locationNum=7&a ...

  5. DO,DTO和VO的使用

    DO,DTO和VO的使用 DO:对应数据库表结构 VO:一般用于前端展示使用 DTO:用于数据传递.(接口入参和接口返回值都可以) 以ssm框架为例: controller层: public List ...

  6. leetcode数据库题目及答案汇总

    1. 第二高的薪水 select ifnull((select distinct Salary from Employee order by Salary desc limit 1,1),null) ...

  7. pyhon的yileld的一点笔记

    yield感觉很神秘,感觉也不好理解,学习pyhon最后终归是要学习这个东西,研究了一段时间,把自己的笔记写下来 说简单点就是遇到yield就停止往下执行代码,也包括不执行yield这条语句,然后返回 ...

  8. celery (二) task调用

    调用 TASK 基础 task 的调用方式有三种: 类似普通函数的调用方式, 通过 __calling__ 调用 ,类似 function() 通过 apply_async() 调用,能接受较多的参数 ...

  9. query did not return a unique result: 2错误的发生

    org.springframework.dao.IncorrectResultSizeDataAccessException: query did not return a unique result ...

  10. 如何使用tensorboard查看tensorflow  graph****.pb文件的模型结构

    参考网上的:https://github.com/tensorflow/tensorflow/issues/8854 import tensorflow as tf from tensorflow.p ...