【论文】Saliency Detection: A Spectral Residual Approach阅读笔记

一、思路:

从信息论的角度看,有效编码可以将图片H中信息分为两部分:

$$H(Image) = H(Innovation) + H(Prior Knowledge)$$

Innovation变化,即为显著部分;Prior Knowledge先验知识,即为背景部分,冗余部分。

相似就代表着冗余。对一个系统而言要最小化视觉的冗余信息,它必须知道输入图片的统计相似性(即所有图片平均特性)。

那么如何计算统计相似性呢?前人发现一个规律:大量的自然图像(在某个频率下)的平均振幅与该频率成反比,公式表征如下:

$$E\{A(f)\} \propto 1/f$$

f是频率,A(f)频率f对应的幅度(amplitude),E代表平均振幅(ensemble)

加上log,则在log-log 图谱中,自然图像的集合的平均振幅谱大致形状是线性的(统计特性)。


但由于一些原因(在个体图像中不可能发现尺度不变性,没看懂),作者没有使用log-log表征,而是使用log谱表征一幅图像,即$$L(f) = log ( A(f) )$$

当使用log谱表征时,发现如下规律:


所有图像的log谱的趋势是一样的,且大量图像的平均振幅是平滑的(统计特性),于是作者认为吸引我们注意力的部分是那些跳出平滑的部分(尖峰部分),则显著部分可以通过一个图像的幅度减去平均振幅,得到谱残差R(f)(尖峰部分),公式表示如下:

$$R(f) = L(f) - A(f)$$

二,模型特点

1)以往的大多数显著性检测算法,都是研究目标物体的属性,而该论文中提出的算法是探索背景的特性;

2)通过表征背景,找到背景,去掉背景,剩下的就是前景目标;

3) 模型与图像中的目标特征、种类和其他先验知识无关,算法适用性强;

4)算法简单,运行快。


三,模型算法:

对每个图像的对数谱(log spectrum)进行分析,得到谱残差。然后,然后将谱残差变换到空域,得到显著性图

四,代码解释:

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);

猜你喜欢

转载自blog.csdn.net/jizhidexiaoming/article/details/80738160