zoukankan      html  css  js  c++  java
  • 图像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 (扩边+去伪影)

    [{f{matlog}} = log left( {{f{mat}} + 1} ight) ]

    [{f{matPad}} = {mathop{ m sympading} olimits} left( {{f{matlog}},left[ {5,5,5,5} ight]} ight) ]


    图1 sympading操作

    3.2.2 Filter (构造滤波器)



    [{f{matGf}} = {mathop{ m FFTSHITF} olimits} left( {exp left( { - frac{{{f{matF}}{{f{x}}^2} + {f{matF}}{{f{y}}^2}}}{{{{left( {frac{{fc}}{{sqrt {log left( 2 ight)} }}} ight)}^2}}}} ight)} ight) ]

    3.2.3 Whitening (白化)

    [{f{matRes}} = {f{matPad}} - {mathop{ m Real} olimits} left( {{mathop{ m IFFT} olimits} left( {{mathop{ m FFT} olimits} left( {{f{matPad}}} ight){f{matGf}}} ight)} ight) ]

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

    [{f{matLocal}} = sqrt {left| {{mathop{ m IFFT} olimits} left( {{mathop{ m FFT} olimits} left( {{f{matRes}} cdot {f{matRes}}} ight) cdot {f{matGf}}} ight)} ight|} ]

    [{f{matRes}} = frac{{{f{matRes}}}}{{0.2 + {f{matLocal}}}} ]

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

    [{f{matPrefilt = matRes}}left[ {5:64 + 5,5:64 + 5} ight] ]

    3.3 计算图片的Gist向量

    3.3.1 Pading

    [{f{matPad}} = {mathop{ m sympading} olimits} left( {{f{matPrefilt}},left[ {32,32,32,32} ight]} ight) ]

    3.3.2 FFT

    [{f{matLocal}} = {mathop{ m FFT} olimits} left( {{f{matPad}}} ight) ]

    3.3.3 遍历每个Gabor核函数



    图2 全局Gist特征的提取

    4 LMgist的Python实现

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

    4.1 提取Gist特征

    import cv2
    from img_gist_feature.utils_gist import *
    
    s_img_url = "./test/A.jpg"
    gist_helper = GistUtils()
    
    np_img = cv2.imread(s_img_url, -1)
    
    print("default: rgb")
    np_gist = gist_helper.get_gist_vec(np_img)
    print("shape ", np_gist.shape)
    print("noly show 10dim", np_gist[0,:10], "...")
    print()
    
    print("convert rgb image")
    np_gist = gist_helper.get_gist_vec(np_img, mode="rgb")
    print("shape ", np_gist.shape)
    print("noly show 10dim", np_gist[0,:10], "...")
    print()
    
    print("convert gray image")
    np_gist = gist_helper.get_gist_vec(np_img, mode="gray")
    print("shape ", np_gist.shape)
    print("noly show 10dim", np_gist[0,:10], "...")
    print()
    

    运行得到的gist特征为
    default: rgb
    shape (1, 1536)
    noly show 10dim [0.02520592 0.05272802 0.05941689 0.05476999 0.13110509 0.13333975
    0.29072759 0.16522023 0.25032277 0.36850457] ...

    convert rgb image
    shape (1, 1536)
    noly show 10dim [0.02520592 0.05272802 0.05941689 0.05476999 0.13110509 0.13333975
    0.29072759 0.16522023 0.25032277 0.36850457] ...

    convert gray image
    shape (1, 512)
    noly show 10dim [0.10004389 0.20628179 0.17682694 0.16277722 0.10557428 0.14448622
    0.29214159 0.11260066 0.16488087 0.28381876] ...

    4.2 Gist特征余弦相似距离

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


    5 LMgist的效果


    参考资料

    1. GIST特征描述符使用
    2. GIST 空间包络特征 推荐论文 简介
  • 相关阅读:
    安卓AndroidManifest.xml介绍
    Android系统开发入门
    蓝牙协议(bluetooth spec)
    解决:NoSuchAlgorithmException: Algorithm HmacSHA1 not available
    Spring bean 实现初始化、销毁方法的方式及顺序
    解决: maven编译项目报“非法字符: 65279 ”错误
    解决:eclipse 非正常关闭,导致无法正常启动
    ffmpeg 音频转换: use ffmpeg convert the audio from stereo to mono without changing the video part
    win10家庭版快速升级专业版
    Linux下更改目录及其下的子目录和文件的访问权限
  • 原文地址:https://www.cnblogs.com/Kalafinaian/p/12275738.html
Copyright © 2011-2022 走看看