图像GIST特征和LMGIST包的python实现(有github)

1什么是Gist特征

???????(1) 一种宏观意义的场景特征描述
???????(2) 只识别“大街上有一些行人”这个场景,无需知道图像中在那些位置有多少人,或者有其他什么对象。
???????(3) Gist特征向量可以一定程度表征这种宏观场景特征
GIST定义下列五种对空间包络的描述方法

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

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

3 LMgist原理

3.1 LMgist算法主流程

  • G1:对输入图片进行预处理 (RGB或RGBA转128x128灰度图)
  • G2:对输入图片进行Prefilt处理
  • G3:计算图片的Gist向量

3.2 G2 对输入图片进行Prefilt处理

3.2.1 Pad images to reduce boundary artifacts (扩边+去伪影)

\[{\bf{matlog}} = \log \left( {{\bf{mat}} + 1} \right)\]
\[{\bf{matPad}} = {\mathop{\rm sympading}\nolimits} \left( {{\bf{matlog}},\left[ {5,5,5,5} \right]} \right)\]

图1 sympading操作

3.2.2 Filter (构造滤波器)

\[{\bf{matGf}} = {\mathop{\rm FFTSHITF}\nolimits} \left( {\exp \left( { - \frac{{{\bf{matF}}{{\bf{x}}^2} + {\bf{matF}}{{\bf{y}}^2}}}{{{{\left( {\frac{{fc}}{{\sqrt {\log \left( 2 \right)} }}} \right)}^2}}}} \right)} \right)\]

3.2.3 Whitening (白化)

\[{\bf{matRes}} = {\bf{matPad}} - {\mathop{\rm Real}\nolimits} \left( {{\mathop{\rm IFFT}\nolimits} \left( {{\mathop{\rm FFT}\nolimits} \left( {{\bf{matPad}}} \right){\bf{matGf}}} \right)} \right)\]

3.2.4 Local contrast normalization (局部对比度归一化)

\[{\bf{matLocal}} = \sqrt {\left| {{\mathop{\rm IFFT}\nolimits} \left( {{\mathop{\rm FFT}\nolimits} \left( {{\bf{matRes}} \cdot {\bf{matRes}}} \right) \cdot {\bf{matGf}}} \right)} \right|} \]

\[ {\bf{matRes}} = \frac{{{\bf{matRes}}}}{{0.2 + {\bf{matLocal}}}} \]

3.2.5 Local contrast normalization (局部对比度归一化)

\[{\bf{matPrefilt = matRes}}\left[ {5:64 + 5,5:64 + 5} \right]\]

3.3 计算图片的Gist向量

3.3.1 Pading

\[{\bf{matPad}} = {\mathop{\rm sympading}\nolimits} \left( {{\bf{matPrefilt}},\left[ {32,32,32,32} \right]} \right)\]

3.3.2 FFT

\[{\bf{matLocal}} = {\mathop{\rm FFT}\nolimits} \left( {{\bf{matPad}}} \right)\]

3.3.3 遍历每个Gabor核函数

图2 全局Gist特征的提取

4 LMgist的Python实现

GitHub代码 https://github.com/Kalafinaian/python-img_gist_feature

4.1 提取Gist特征

from img_gist_feature.utils_gist import *

s_img_url = "./test/A.jpg"
gist_helper = GistUtils()
np_img = preproc_img(s_img_url)
np_gist = gist_helper.get_gist_vec(np_img)

print(np_gist)

运行得到的gist特征为

[[0.08787015 0.07296596 0.10566235 ... 0.03908335 0.03852283 0.03798099]]

4.2 Gist特征余弦相似距离

下载好github中的代码项目,运行python _test_get_cossim.py

5 LMgist的效果

参考资料

  1. GIST特征描述符使用
  2. GIST 空间包络特征 推荐论文 简介

原文地址:https://www.cnblogs.com/Kalafinaian/p/12275738.html

时间: 2024-10-10 00:29:21

图像GIST特征和LMGIST包的python实现(有github)的相关文章

GIST特征描述符使用

来源:http://www.cnblogs.com/justany/archive/2012/12/06/2804211.html 一种场景特征描述 场景特征描述? 通常的特征描述符都是对图片的局部特征进行描述的,以这种思路进行场景描述是不可行的. 比如:对于“大街上有一些行人”这个场景,我们必须通过局部特征辨认图像是否有大街.行人等对象,再断定这是否是满足该场景.但这个计算量无疑是巨大的,且特征向量也可能大得无法在内存中存储计算. 例如即使使用GIST进行1MB的图像数据搜索,也需要3.8GB

图像处理之基础---图像的特征简介

常用的图像特征有颜色特征.纹理特征.形状特征.空间关系特征. 一 颜色特征 (一)特点:颜色特征是一种全局特征,描 述了图像或图像区域所对应的景物的表面性质.一般颜色特征是基于像素点的特征,此时所有属于图像或图像区域的像素都有各自的贡献.由于颜色对图像或图像区 域的方向.大小等变化不敏感,所以颜色特征不能很好地捕捉图像中对象的局部特征.另外,仅使用颜色特征查询时,如果数据库很大,常会将许多不需要的图像也 检索出来.颜色直方图是最常用的表达颜色特征的方法,其优点是不受图像旋转和平移变化的影响,进一

任务5 图像的读取及表示 图像的特征 图片特征的降维

任务目的: 知道图像的表示以及读取方法 了解图像的特征 对图像特征进行降维 一.图像的读取及表示 图像要进行处理才能进行模型输入. python自带的库将图像存在矩阵或者张量里面. 图像由像素组成,一个像素点一般油RGB三维数组构成. 二.图像的特征 图像的识别should环境因素约束. 常见的图像颜色特征有:SIFT尺度不变特征变换 和 HOG方向梯度直方图 颜色特征就是对RGB做一个统计,统计有各颜色的分布百分比. 前者具有尺度不变性,即使改变旋转角度,图像亮度或拍摄视角依然能够很好地识别.

jmeter数据库,charles抓包,Python循环语句

jmeter数据库,charles抓包,Python循环语句 一.Jemeter数据库 添加jar包数据库 jemeter=>浏览 添加JDBC Connection Configuration 配置数据 mysqlurl:jdbc:mysql://ip:port/db?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true driver class:com.mysql.jdbc.Driver       4. 操作

go依赖包下载加速方法及github加速

go依赖包下载加速方法及github加速 对于https://github.com/kubernetes/kubernetes整个仓库大小为近900M,下载起来那个伤心: 方法一:使用码云 这是码云上的的说明:此仓库是为了提升国内下载速度的镜像仓库,每日同步一次 先从码云下载到本地,然后修改./git/config为github的仓库地址,再次git pull拉取最新的commit,这样 就和github保持一致 方法二:github加速 https://www.ipaddress.com 国内

【制作表情包】Python拆分和合并GIF动态图(几行代码就搞定)

“表情包”是当前社交软件上不可或缺的交流方式,难以用文字表达的意思,发一个“表情包”,对方就能心领神会.下面是小派制作的一个表情包,准确地讲,是在已有表情包的基础上,二次加工而成的. 下面以最简单的代码形式(10行左右),介绍上述“表情包”的制作过程.第一,将GIF动态图拆分成图形帧.下图是网络上找到的一个GIF格式动态图. 利用Python将上述GIF格式动态图拆分图形帧,只需要输入以下代码.其中第1-2行是导入os库.从PIL库中导入Image函数功能.第3行是Image.open打开位于D

OpenCV2学习笔记(十三):利用SURF匹配不同图像的特征点

SURF算法是著名的尺度不变特征检测器SIFT(Scale-Invariant Features Transform)的高效变种,它为每个检测到的特征定义了位置和尺度,其中尺度的值可用于定义围绕特征点的窗口大小,使得每个特征点都与众不同.这里便是使用SURF算法提取两幅图像中的特征点描述子,并调用OpenCV中的函数进行匹配,最后输出一个可视化的结果,开发平台为Qt5.3.2+OpenCV2.4.9.以下给出图像匹配的实现步骤: 一.输入两幅图像,使用OpenCV中的cv::FeatureDet

多线程发送icmp数据包(Python版)

做icmp攻击时,先用Python写了发送数据包的函数. 发送数据包用的是scapy模块,需要先安装:apt-get install python-scapy ''' date:2014/12/3 author:yss function:send packets from host to server with multithreading ''' import threading from time import sleep,ctime from scapy.all import * num=

遥想大肠包小肠----python装饰器乱弹

说起装饰器就tm蛋疼,在老男孩学习python装饰器,结果第二天默写,全错了,一道题抄十遍,共计二十遍. 要是装饰器是一人,我非要约他在必图拳馆来一场...... 下面容我展示一下默写二十遍的成果 语法形式 def  mydec(wenwa): def inner(*args,**kwagrs): ret = wenwa(*args,**kwargs) return ret  #请务必别忘记这还有个该死的return,如果被执行的函数没有返回值return,则ret为None return in