GIST特征描述符使用
转: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
这迫使我们需要一种更加“宏观”的特征描述方式,从而忽略图片的局部特点。比如:我们无需知道图像中在那些位置有多少人,或者有其他什么对象。
那么应该如何定义一种“宏观”的场景特征描述呢?
我们注意到:
大多数城市看起来就像天空和地面由建筑物外墙紧密连接;大部分高速公路看起来就像一个大表面拉伸天际线,里面充满了凹型(车辆);而森林场景将包括在一个封闭的环境中,有垂直结构作为背景(树),并连接到一定纹理的水平表面(草)。
如此看来,空间包络可以一定程度表征这些信息。
五种空间包络描述
我们定义下列五种对空间包络的描述方法:
- 自然度(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实现
- 首先在LEAR下载其提供的Lear's GIST implementation。
由于其基于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
注意事项
- 输入图片必须是原始(也就是二进制)的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
GIST特征描述符使用相关推荐
- 计算机视觉大型攻略 —— 特征与匹配(3)特征描述符
接上一篇文章.这篇写特征描述符.特征匹配算法在确定角点后,还需要使用描述符来描述这些角点. 本文参考书籍:Computer Vision: Algorithms and Applications, R ...
- HTMD | 从PDB文件获取3D特征描述符
KDEEP是使用深度学习(CNN)进行亲和力预测的预测器. 关于这篇文章,我发现了一个新的名为HTMD(高通分子动力学)的python库. 我真的不擅长从头算或MD计算等计算领域. 因此,我无法评估该 ...
- 使用LIRe来实现基于多特征描述符的图像检索系统
使用LIRe来实现基于多特征描述符的图像检索系统 摘要 - 因为没有完美的特征描述符可以适合描述任何图像,本文提出组合不同的特征描述符来做基于内容的图像检索和使用LIRe实现图像检索系统.实验表明使用 ...
- 从特征描述符到深度学习:计算机视觉发展20年
转自:http://cs2.swfc.edu.cn/~zyl/ 赵毅力的视觉研究博客 从特征描述符到深度学习:计算机视觉发展20年 Author: Tomasz Malisiewicz 翻译:赵毅力( ...
- BEBLID:增强的高效局部图像特征描述符
(本文转载自:当SLAM遇见小王同学) 在前不久发布的OpenCV4.5中更新了很多新特性: 从4.5版本开始,OpenCV将正式使用Apache2协议,从而避免专利算法带来的潜在纠纷 SIFT专利到 ...
- 线特征作为视觉描述:用于视觉定位的上下文感知线特征描述符
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨泡泡机器人SLAM 标题: Line as a Visual Sen ...
- SIFT四部曲之——构建关键点特征描述符
最近没空写最后一部分的内容,先把代码放上来 % SIFT 算法的最后一步是特征向量生成orient_bin_spacing = pi/4; orient_angles = [-pi:orient_bi ...
- OpenCV3学习(11.7) BRISK特征检测器及BRISK描述符
BRISK算法一种特征提取算法,也是一种二进制的特征描述算子. 它具有较好的旋转不变性.尺度不变性,较好的鲁棒性等.在图像配准应用中,速度比较:SIFT<SURF<BRISK<FR ...
- PCL 点云特征描述与提取
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:开着拖拉机唱山歌 链接:https://zhuanlan.zhihu.com/p/1032192 ...
- MPEG-7 视觉描述符
FROM: http://blog.csdn.net/leixiaohua1020/article/details/16859347 本文节选自<基于MPEG-7与内容的图像检索技术的研究> ...
最新文章
- 杭电1254java实现(双bfs 优先队列)
- easyui treegrid idField 所在属性中值有花括号(如Guid)当有鼠标事件时会报错,行记录一下...
- 详解:面向对象与面向过程的比较 类之间的关系:泛化、实现、依赖、关联、聚合、组合
- 合并多个文本文件中的内容到一个文件中
- 什么时候告白最合适?
- 编写Shell脚本(批处理,一次执行多条命令)
- 【转】C#中使用TransactionScope类(分布式事务) 和 锁
- (王道408考研数据结构)第六章图-第四节5:最短路径之弗洛伊德算法(思想、代码、演示、答题规范)
- 栈的顺序存储及实现(二)
- python 公司年会抽奖_Python语言学习之用Python写公司年会抽奖程序
- JS控制图片滚动的效果
- [转载] kprobe原理解析(一)
- 继承的作用是什么?看看下面这些例子吧!
- 微软双机双柜方案讨论
- IOS 中的Notification 学习
- css 文字溢出文本时省略号代替
- MongoDB aop 日志
- vue学习笔记-13-侦听器
- 小程序插入html代码
- 解决微擎框架出现Could not resolve: cloud.zhifun.cc (Domain name not found)问题
热门文章
- HTML基础第九讲---表单
- (转)Three.JS学习 9:WEBVR 入门demo
- Handler、Message几种发送消息形式总结
- 5月第3周回顾:08软考举行 中国遭大范围SQL注入***
- 【翻译】Robust Lane Detection and Tracking in Challenging Scenarios
- 2018年,20大Python数据科学库都做了哪些更新
- 第四季-专题14-串口驱动程序设计
- 凸优化第四章凸优化问题 4.2 凸优化
- Springboot 统一maper 和逆向工程
- SQL Server 和 HSQLDB 中使用 merge into 完成 saveOrUpdate