zoukankan      html  css  js  c++  java
  • GIST特征描述符使用

    来源:http://www.cnblogs.com/justany/archive/2012/12/06/2804211.html

    一种场景特征描述

    场景特征描述?

    通常的特征描述符都是对图片的局部特征进行描述的,以这种思路进行场景描述是不可行的。

    比如:对于“大街上有一些行人”这个场景,我们必须通过局部特征辨认图像是否有大街、行人等对象,再断定这是否是满足该场景。但这个计算量无疑是巨大的,且特征向量也可能大得无法在内存中存储计算。

    例如即使使用GIST进行1MB的图像数据搜索,也需要3.8GB的RAM空间。

    —— Evaluation of GIST descriptors for web­scale image search Talk

    这迫使我们需要一种更加“宏观”的特征描述方式,从而忽略图片的局部特点。比如:我们无需知道图像中在那些位置有多少人,或者有其他什么对象。

    那么应该如何定义一种“宏观”的场景特征描述呢?

    我们注意到:

    大多数城市看起来就像天空和地面由建筑物外墙紧密连接;大部分高速公路看起来就像一个大表面拉伸天际线,里面充满了凹型(车辆);而森林场景将包括在一个封闭的环境中,有垂直结构作为背景(树),并连接到一定纹理的水平表面(草)。

    如此看来,空间包络可以一定程度表征这些信息。

    五种空间包络描述

    我们定义下列五种对空间包络的描述方法:

    • 自然度(Degree of Naturalness):场景如果包含高度的水平和垂直线,这表明该场景有明显的人工痕迹,通常自然景象具有纹理区域和起伏的轮廓。所以,边缘具有高度垂直于水平倾向的自然度低,反之自然度高。
    • 开放度(Degree of Openness):空间包络是否是封闭(或围绕)的。封闭的,例如:森林、山、城市中心。或者是广阔的,开放的,例如:海岸、高速公路。
    • 粗糙度(Degree of Roughness):主要指主要构成成分的颗粒大小。这取决于每个空间中元素的尺寸,他们构建更加复杂的元素的可能性,以及构建的元素之间的结构关系等等。粗糙度与场景的分形维度有关,所以可以叫复杂度。
    • 膨胀度(Degree of Expansion):平行线收敛,给出了空间梯度的深度特点。例如平面视图中的建筑物,具有低膨胀度。相反,非常长的街道则具有高膨胀度。
    • 险峻度(Degree of Ruggedness):即相对于水平线的偏移。(例如,平坦的水平地面上的山地景观与陡峭的地面)。险峻的环境下在图片中生产倾斜的轮廓,并隐藏了地平线线。大多数的人造环境建立了平坦地面。因此,险峻的环境大多是自然的。

    从而基于这五点对图像进行特征描述。

    本文并不准备深入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。

    • 下载页面下载一个合适的FFTW3版本。
    • Linux或者Mac需要在终端运行configure时配置浮点数版本(Windows没试过,不过Lear's GIST implementation的Readme中说明了只能在Linux和Mac上跑,所以Windows安装这个也没有……),即

    ./configure --enable-single

    •  在进行编译:

    make

    make check

    sudo make install

    • 编译Lear's GIST implementation

    需要将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程序,则可以对PPM图片进行GIST计算。例如在终端输入:

    ./compute_gist ar.ppm

    将会出现960个浮点数,如下:

    0.0579 0.1926 0.0933 0.0662 ....

    ……

    .... 0.0563 0.0575 0.0640

    注意事项

    1. 输入图片必须是原始(也就是二进制)的PGM/PPM格式的图片。
    2. 输入图片的尺寸必须是相同的,否则计算出来的GIST没有什么意义。
    3. 通过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

  • 相关阅读:
    java接入钉钉机器人(带源码)
    使用java做一个能赚钱的微信群聊机器人(2020年基于PC端协议最新可用版)
    侠说java8--Stream流操作学习笔记,都在这里了
    Elasticsearch调优篇-慢查询分析笔记
    网络探测和抓包工具 wireshark
    window10远程ubuntu18.04
    springdataJPA mysql myisam innodb
    命令集
    java tmpdir 启动 kafka 命令行
    java jar 启动命令
  • 原文地址:https://www.cnblogs.com/nsnow/p/4584007.html
Copyright © 2011-2022 走看看