GIST特征使用
GIST概念最初源自1979年Friedman A的论文,后于2001年被Oliva等人借用来代指空间包络特征,随后就是2003年由Torralba等人的继续研究。1
全局特征信息又称为“Gist”信息,为场景的低维签名向量。采用全局特征信息对场景进行识别与分类不需要对图像进行分割和局部特征提取,可以实现快速场景识别与分类。
1.1 什么是Gist特征
- 一种宏观意义的场景特征描述
- 对于“大街上有一些行人”这个场景,我们必须通过局部特征辨认图像是否有大街、行人等对象,再断定这是否是满足该场景。但这个计算量无疑是巨大的,且特征向量也可能大得无法在内存中存储计算。只识别“大街上有一些行人”这个场景,无需知道图像中在那些位置有多少人,或者有其他什么对象。
- Gist特征向量可以一定程度表征这种宏观场景特征
1.2 GIST512的计算方法:
1.32Gabor 滤波在4个尺度,8个方向上进行卷积,得到32个feature map 大小和输入图像一致。
2.把每个feature map 分成
4
2
4^2
42=16的区域,计算每个区域内的均值。
3.计算1632个均值的结果就获得了,512维的GIST特征。
不同维度的GIST特征在于Gabor滤波器的个数,确切的说是滤波器方向和尺度的不同。
1.3 五种空间包络描述
空间包络特征将一张图像用五个描述子进行描述,计算方法是使用谱特征和学习到的权值分量d做内积,得到空间包络特征。
描述子 | 描述的内容 |
---|---|
自然度(Degree of Naturalness) | 场景如果包含高度的水平和垂直线,这表明该场景有明显的人工痕迹,通常自然景象具有纹理区域和起伏的轮廓。所以,边缘具有高度垂直于水平倾向的自然度低,反之自然度高 |
开放度(Degree of Openness) | 空间包络是否是封闭(或围绕)的。封闭的,例如:森林、山、城市中心。或者是广阔的,开放的,例如:海岸、高速公路。 |
粗糙度(Degree of Roughness) | 主要指主要构成成分的颗粒大小。这取决于每个空间中元素的尺寸,他们构建更加复杂的元素的可能性,以及构建的元素之间的结构关系等等。粗糙度与场景的分形维度有关,所以可以叫复杂度。 |
膨胀度(Degree of Expansion) | 平行线收敛,给出了空间梯度的深度特点。例如平面视图中的建筑物,具有低膨胀度。相反,非常长的街道则具有高膨胀度。 |
险峻度(Degree of Ruggedness) | 即相对于水平线的偏移。(例如,平坦的水平地面上的山地景观与陡峭的地面)。险峻的环境下在图片中生产倾斜的轮廓,并隐藏了地平线线。大多数的人造环境建立了平坦地面。因此,险峻的环境大多是自然的。 |
二 MATLAB实例2
2.1 实现对一张图片GIST特征提取
% 读取图片
img = imread('demo1.jpg');
% 设置GIST参数
clear param
% number of orientations per scale (from HF to LF)
param.orientationsPerScale = [8 8 8 8];
param.numberBlocks = 4;
param.fc_prefilt = 4;
% 计算GIST
[gist, param] = LMgist(img, '', param)
% 可视化
figure
subplot(121)
imshow(img)
title('Input image')
subplot(122)
showGist(gist, param)
title('Descriptor')
2.2 计算两图像的相似性
% Load images
img1 = imread('demo1.jpg');
img2 = imread('demo2.jpg');
% GIST Parameters:
clear param
param.imageSize = [256 256]; % it works also with non-square images (use the most common aspect ratio in your set)
param.orientationsPerScale = [8 8 8 8]; % number of orientations per scale
param.numberBlocks = 4;
param.fc_prefilt = 4;
% Computing gist:
[gist1,param1] = LMgist(img1, '', param);
[gist2,param2] = LMgist(img2, '', param);
%显示图像
figure
subplot(221)
imshow(img1)
title('Input image1')
subplot(222)
showGist(gist1, param1)
title('Descriptor1')
subplot(223)
imshow(img2)
title('Input image2')
subplot(224)
showGist(gist2,param2)
title('Descriptor2')
% Distance between the two images:
D = sum((gist1-gist2).^2)
D = 0.8960
2.3 对于数据集
% GIST 参数:
clear param
param.imageSize = [256 256]; % 设置标准化的图像大小
param.orientationsPerScale = [8 8 8 8]; 每个比例的方向数(从 HF 到 LF)
param.numberBlocks = 4;
param.fc_prefilt = 4;
% 预分配要点:
Nfeatures = sum(param.orientationsPerScale)*param.numberBlocks^2;
gist = zeros([Nimages Nfeatures]);
% 加载第一张图片并计算要点:
img = imread(file{1});
[gist(1, :), param] = LMgist(img, '', param); % 第一次调用
% Loop:
for i = 2:Nimages
img = imread(file{i});
gist(i, :) = LMgist(img, '', param); %接下来的话会更快
end
[1]Friedman, Alinda. Framing pictures: The role of knowledge in automatized encoding and memory for gist.[J]. Journal of Experimental Psychology: General, 1979, 108(3):316-355. ↩ ↩︎
Modeling the shape of the scene: a holistic representation of the spatial envelope ↩︎