一种简单的图像显著性计算模型
《Saliency Detection: A Spectral Residual Approach》是上交高材生侯晓迪在07年的CVPR上发表的一篇论文。这篇文章提出了一个图像视觉显著性的简单计算模型。有关算法原理可以参见此篇论文以及作者主页:http://www.klab.caltech.edu/~xhou/projects/spectralResidual/spectralresidual.html
这篇文章的核心思想如下:
从信息理论角度:信息可分为冗余部分和变化部分。人们的视觉对变化部分更敏感。视觉系统的一个基本原则就是抑制对频繁出现的特征的响应,同时对非常规的特征保持敏感。那么就将图像分为如下两部分:
H(image)=H(Innovation)+H(PriorKnowledge),
而作者对图像的log频谱发下了如下规律(log是自然对数):
E{A(f)}∝1/f
大量图像的log频谱的平均值是和频率呈现正比关系的。
如图可知大量图像的log频谱和频率的曲线形状,在log-log scale上,几乎是一条直线。文中的log频谱就是对图像傅里叶变换后的振幅谱取自然对数。然后作者又提出了既然大量图像的log振幅谱都差不多趋近一条直线,那么一幅图像的log振幅谱减去平均log振幅谱不就是显著性部分了吗?这就是作者提出的:Spectral Residual理论。
作者如下的定义Spectral Residual:
R(f)=L(f)−A(f)
其中L(f)就是图像f的log振幅谱,A(f)是平均log振幅谱,作者就是将L(f)进行3*3的均值滤波得到的A(f)。R(f)就是图像f的Spectral Residual。计算过程如下表示:
A(f)=R(F[I(x)])
P(f)=Q(F[I(x)])
L(f)=log(A(f))
R(f)=L(f)−hn(f)∗L(f)
S(x)=g(x)∗F−1[exp(R(f)+P(f))]2
其中输入图像为I(x),对其傅里叶变换,并且求出振幅谱为
A(f)
。
P(f)
是其相位谱(复数
x+i∗y
的相位是
arctan(y/x)
)。
L(f)
是
log
振幅谱。
h
是一个
clear
clc
close all;
%% Read image from file
inImg = im2double(rgb2gray(imread('2.jpg')));
%%inImg = imresize(inImg, 64/size(inImg, 2));
%% Spectral Residual
myFFT = fft2(inImg);
myLogAmplitude = log(abs(myFFT));
myPhase = angle(myFFT);
mySpectralResidual = myLogAmplitude - imfilter(myLogAmplitude, fspecial('average', 3), 'replicate');
saliencyMap = abs(ifft2(exp(mySpectralResidual + i*myPhase))).^2;
%% After Effect
saliencyMap = mat2gray(imfilter(saliencyMap, fspecial('gaussian', [10, 10], 5)));
figure(1)
imshow(inImg);
figure(2)
imshow(saliencyMap);
inImg(find(saliencyMap<0.1))=0;
figure(3)
imshow(inImg);、
效果