基于显著性检测的谱残差方法(Spectral Residual)独立于特征,类别,或其他形式的先验知识的目标。通过对输入图像的对数谱分析,提取图像在光谱域的谱残差,并实现在空间域构造相应的显著性图。通过设置不同的参数,对比其对saliency map造成的影响,并讨论算法本身的优点和限制,以指导产生更好的效果。
点击查看原文《Saliency Detection: A Spectral Residual Approach》
Spectral Residual:
1.介绍
本文指出,许多显著性检测模型都是基于训练的,其可扩展性成为泛化任务的瓶颈。面对不可预测和无数种类的视觉模式,需要一个通用的显著性检测系统。换句话说,在实现显著性检测器时,应该尽可能少地引用对象的统计知识。
1.视觉系统的一个基本原则是抑制对频繁出现的特征的响应,同时对偏离规范的特征保持敏感。因此,只有意料之外的信号才能被发送到后期的处理阶段。根据这一理论,将图像信息H(image)分为两部分:
H(Innovation)为新颖性部分,H(先验知识)为冗余信息。在图像统计领域,这种冗余对应于我们环境的统计不变特性。许多论文提到自然图像不是随机的,它们服从高度可预测的分布。
在自然图像统计的不变因素中,尺度不变性是最著名和研究最广泛的性质。它表明自然图像集合的平均傅里叶频谱的振幅A(f)服从A分布:
采用log spectrum表示图像的L(f)。L(f) = logA(f)可得到log spectrum。不同图像的log spectrum具有相似的趋势。在平均log spectrum中存在局部线性。
2.计算
对于谱残差的计算,首先获得一幅特定的单幅图像,计算其log spectrum得到L(f),谱残差可以表示为:
其中H为k*k的平滑平均滤波器,r (f)为光谱残差,表示该图像的新颖部分。
为了得到空间区域的显著性映射,在频率区域对exp后的残差进行傅里叶反变换,如下式所示:
S(X)为显著图,p(X)为原相位谱。为了提高结果图的视觉效果,利用高斯卷积对显著性图进行平滑处理。式中,G(*)为高斯卷积核,可调整核大小和平均差分参数。如果需要更有意义的目标检测,使用简单的阈值分割:
阈值的选择是一个误报和忽略目标的权衡问题。
代码实现
import cv2
import numpy as np
fr = open('imglist.txt')
lines=fr.readlines()
for line in lines:#这里对一个文件夹的图片计算saliency map
img = cv2.imread('./'+str(line[33:40])+'/'+line[41:-5]+'.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#计算log Spectral
fft = np.fft.fft2(gray)
fshift = np.fft.fftshift(fft)
LogAmp = np.log(np.abs(fshift))
phase =np.angle(fshift)
#计算Spectral residual
BlurAmp = cv2.blur(LogAmp, (3,3))
Spectral_res = LogAmp - BlurAmp
#傅里叶反变换计算saliency map
ishift = np.fft.ifftshift(np.exp(Spectral_res+1j*phase))
Res_ifft = np.fft.ifft2(ishift)
Res = np.abs(Res_ifft)
#高斯滤波 显示结果
#saliency_map = cv2.GaussianBlur(Res, (15,15), 2)
#print(saliency_map)
rge=np.max(Res)-np.min(Res)
norm=(Res-np.min(Res))*255/rge
cv2.imwrite('./saliency224/'+line[41:-5]+'.jpg',norm)
Results analysis
1.改变尺寸
如图1所示,改变输入图像的尺寸,会较大影响到显著性映射的结果。输入图像大小的影响。(a)(b)©(d)原图像显著性图,原尺寸,减小0.5倍,减小0.2倍。人类的视觉系统在一定的尺寸下工作。当图像的比例缩小时,与傅里叶频谱高频部分对应的细节减少。在更小的尺度上,大的特征相对于图像中微小但突然的变化变得不那么有竞争力。如图中白色的花朵在原图比例下几乎看不到,随着尺度的减小,慢慢在saliency map中变得清晰,相对于紫花的大片区域部分更加显著。
2.图像性质
显著物体的形状颜色会在一定程度上影响显著性检测的效果。如图2中的海岛图像,椰子树较为显著,相比之下,天空和海水沙滩更像是背景。椰子树不仅颜色区别度较高,更重要的是包含许多细节边缘特征,所以在频谱残差中能够突出。相对应在saliency map中,椰子树值较高,天空和大海被去除,检测效果比较好。但是在木屋图像中,在我看来,相对于周围茂盛的树木,木屋比较显著。树木应该是作为图像的全局特征,即经常出现的频率较高的。但是这些高频部分恰恰被留下来,细节较少色度较暗的木屋被去除。
3.高斯滤波
对图像执行高斯滤波可以产生较好的视觉效果。如图3,(a)为风车图像,(b)©(d)分别为不加高斯滤波的显著性图,标准差分别为33和1010。当风车图像没有使用高斯卷积的时候,saliency map全局的值普遍较低,显示的效果是显著点几乎不可见。当使用高斯滤波,设置较小的卷积核的尺寸和标准差,可见部分显著的点,初见物体的轮廓。随着核尺寸和标准差的增加,显著的区域更加清晰明显,而且平滑的作用使得显著物体更具有区域性。
总结
本实验实现了基于频谱残差的显著性检测方法,相较于其他方法的优势在于不依赖于显著物体本身的基本属性和局部特征,而是利用自然图像的统计先验知识,实现对特定图像的显著性检测。在合适的输入图像尺寸、显著物体的颜色区别性较强和包含较多细节、设置合适的高斯滤波参数等条件下,显著性检测有一定的效果。
[1] X. Hou and L. Zhang, “Saliency Detection: A Spectral Residual Approach,” 2007 IEEE Conference on Computer Vision and Pattern Recognition, Minneapolis, MN, 2007, pp. 1-8, doi: 10.1109/CVPR.2007.383267.