出处:http://www.cnblogs.com/justany/archive/2012/12/06/2804211.html
一种场景特征描述
场景特征描述?
通常的特征描述符都是对图片的局部特征进行描述的,以这种思路进行场景描述是不可行的。
比如:对于“大街上有一些行人”这个场景,我们必须通过局部特征辨认图像是否有大街、行人等对象,再断定这是否是满足该场景。但这个计算量无疑是巨大的,且特征向量也可能大得无法在内存中存储计算。
例如即使使用GIST进行1MB的图像数据搜索,也需要3.8GB的RAM空间。
—— Evaluation of GIST descriptors for webscale image search Talk
这迫使我们需要一种更加“宏观”的特征描述方式,从而忽略图片的局部特点。比如:我们无需知道图像中在那些位置有多少人,或者有其他什么对象。
那么应该如何定义一种“宏观”的场景特征描述呢?
我们注意到:
大多数城市看起来就像天空和地面由建筑物外墙紧密连接;大部分高速公路看起来就像一个大表面拉伸天际线,里面充满了凹型(车辆);而森林场景将包括在一个封闭的环境中,有垂直结构作为背景(树),并连接到一定纹理的水平表面(草)。
如此看来,空间包络可以一定程度表征这些信息。
五种空间包络描述
我们定义下列五种对空间包络的描述方法:
从而基于这五点对图像进行特征描述。
本文并不准备深入GIST的算法,如想了解具体算法,请参考参考资料1。
MatLab实现
参考资料2提供了一个MatLab实现。
例如通过图片计算GIST特征描述,在使用LMgist的情况下,可以这么写:
% 读取图片 img = imread('demo2.jpg'); % 设置GIST参数 clear param param.orientationsPerScale = [8 8 8 8]; % number of orientations per scale (from HF to LF) param.numberBlocks = 4; param.fc_prefilt = 4; % 计算GIST [gist, param] = LMgist(img, '', param);
具体请参考参考资料2。
C实现
由于其基于FFTW3(the Faster Fourier Transform in the West),所以我们还需要先安装fftw3。
./configure --enable-single
make
make check
sudo make install
需要将Makefile的:
compute_gist: compute_gist.c gist.o standalone_image.o gcc -Wall -g -o $@ $^ $(WFFTLIB) -lfftw3f添加-lm,改成:
compute_gist: compute_gist.c gist.o standalone_image.o gcc -Wall -g -o $@ $^ $(WFFTLIB) -lfftw3f -lm然后:
make
./compute_gist ar.ppm
将会出现960个浮点数,如下:
0.0579 0.1926 0.0933 0.0662 ....
……
.... 0.0563 0.0575 0.0640
注意事项
- 输入图片必须是原始(也就是二进制)的PGM/PPM格式的图片。
- 输入图片的尺寸必须是相同的,否则计算出来的GIST没有什么意义。
- 通过SVM训练来进行图片检测,2001年那篇论文得出83.7%的判断准确度。
参考资料
Modeling the Shape of the Scene: A Holistic Representation of the Spatial Envelope . Aude Oliva & Antonio Torralba . January 22, 2001
Modeling the shape of the scene: a holistic representation of the spatial envelope DEMO