Bag of features(Bof)图像检索算法
基于Bag of Features模型的害虫图像分类技术研究
第4 4 卷
基于 B a g o f F e a t u r e s 模型的害虫图像分类技 术研 究 设输入的 n
・3 1・
2 . 4 . 1 A d a B o o s t i n g 算法的具体步骤
个 训 练样本 为 : (( 而 ,Y 1 ) ,( x 2 ,Y z ) ,… ( , ) ) ,其 中 是 输 入 的训 练 样 本 ,Y ∈ { 0 ,1 )
T( T为弱分类器 的个数) ;③最后 的强分类
器。
3 实 验
为了验证分类器的效率和性能,本文的实验基 于当 前 国 际 公 开 的 P a s c a l V O C 图 像 数 据 集、 C a l t e c h 2 5 6 图像集 以及 P P B C( 中国植 物 图像库 )
展具有深远的意义 。在国内,基于 S I T 特征 的应 F 用系统和研究较少 ,本文旨在通过高性能的害虫图 像特征提取算法和机器学习分类算法搭建可扩展 的
食行业的研究和发展 。一般来说 ,害虫图像分类的
基 本 流程 为 :获 取 图像一 图像 预处 理一 图像 分割一
* 通讯地址 :成都市青羊区广富路 2 3 9 号3 2 幢
图像分类领域 ,优越性非常明显 ,并且为 目前各个 领域 中海量 图像 的分类 管理 提供 了有效 的解决 途
具有同类技术所不具备的优势 。另一方面 ,可以有 效地预防粮食储藏阶段的虫害及帮助解决各个领域 中海量图像的分类管理,完善多媒体信息理论在粮
径 ,对完善多媒体信息理论在粮食行业的研究与发
・
2 8・
粮
食
储
藏
; 储 粮 有 害 生 物 及 防 治 技 术《
Bagoffeatures图像特征词典原理及实现
Bagoffeatures图像特征词典原理及实现⼀,原理及流程介绍1.基于内容的图像检索在⼤型图像数据库上,CBIR技术⽤于检索在视觉上具有相似性的图像。
这样返回的图像可以是颜⾊相似,纹理相似,图像中的物体或场景相似;总之,基本上可以是这些图像⾃⾝共有的任何信息。
对于⾼层查询,⽐如寻找相似物体,将查询图像与数据库中所有的图像进⾏完全⽐较(⽐如⽤特征匹配)往往是不可⾏的。
在数据库很⼤的情况下,这样的查询⽅式,会耗费过多的时间。
在过去的⼏年时间⾥,研究者成功地引⼊了⽂本挖掘技术到CBIR中处理问题,使在百万图像中搜索具有相似内容的图像成为可能。
2.视觉单词为了将⽂本挖掘技术应⽤到图像中,我们⾸先需要建⽴视觉等效单词;这通常可以采⽤SIFT局部描述⼦可以做到。
它的思想是将描述⼦空间量化成⼀些典型实例,并将图像中的每个描述⼦指派到其中的某个实例中。
这些典型实例可以通过分析训练图像集确定,并被视为视觉单词。
所有这些视觉单词构成的集合称为视觉词汇。
从⼀个图像集中提取特征描述⼦,利⽤⼀些聚类算法可以构建出视觉单词。
聚类算法中最常⽤的是K-means。
视觉单词是在给定特征描述⼦空间中的⼀组向量集,在采⽤K-means进⾏聚类时得到的视觉单词是聚类质⼼。
⽤视觉单词直⽅图来表⽰图像,则该模型便称为BOW模型。
3.特征提取特征提取就是通过我们常⽤的sifi⽅法,提取图像的特征。
4.针对输⼊特征集,根据视觉词典进⾏量化对于输⼊特征,量化的过程是将该特征映射到距离其最接近的视觉单词,并实现计数。
5.把输⼊图像,根据TF-IDF转化成视觉单词(visual words)的频率直⽅图6.构造特征到图像的倒排表,通过倒排表快速索引相关图像7.根据索引结果进⾏直⽅图匹配⼆,代码及结果实现实验代码如下图所⽰:在⽂件中⽣成vocabulary.pkl⽂件,遍历所有的图像,将它们的特征投影到词汇并提交到数据库实验结果如图所⽰:三,实验中出现的问题解决⽅法:重新更换及安装pvc包。
大规模图像检索与特征提取算法研究
大规模图像检索与特征提取算法研究随着互联网的快速发展和数码设备的普及,大规模图像检索与特征提取逐渐成为计算机视觉领域的热门研究方向。
大规模图像检索是指在包含数百万乃至上亿张图像的大规模图像数据库中,根据用户的查询来快速准确地找到相对应的图片。
而特征提取则是为了从一张图像中提取出代表该图像特征的向量,以便于后续的图像检索和分析。
针对大规模图像检索与特征提取的需求,计算机视觉研究者们提出了许多有效的算法和方法。
下面将介绍几种常用的算法及其特点。
1. Bag of Visual Words (BoVW) 模型BoVW是一种经典的图像特征提取和表示方法。
它将图像分解为小的局部区域,并将每个区域提取出的特征描述符(例如SIFT、SURF 等)聚类成视觉单词。
然后,通过统计每个图像中出现的视觉单词的频率构建图像的向量表示。
通过对比图像之间的向量表示可以实现图像检索。
2. 深度卷积神经网络(CNN)特征提取深度学习在图像处理领域取得了巨大的突破,其中最著名的就是深度卷积神经网络。
通过在大规模图像数据集上训练,CNN可以自动学习到图像的高层抽象特征。
这些特征可以作为图像的向量表示,用于大规模图像检索。
相比于传统的手工特征提取方法,CNN可以更好地捕捉图像中的语义信息,从而提高图像检索的准确度。
3. 局部敏感哈希(LSH)LSH是一种用于加速近似最近邻搜索的技术。
通过将向量映射到一个哈希函数的桶中,相似的向量有更高的概率被映射到同一个桶中。
在大规模图像检索中,LSH可以用于快速找到与查询图像相似的图像,从而提高检索的效率。
4. 稠密局部特征提取算法除了传统的局部特征描述符(如SIFT、SURF)外,还有一些稠密局部特征提取算法被提出。
这些算法可以在图像的每个像素点提取特征,从而捕捉到更为详细的图像信息。
稠密局部特征可以作为图像的向量表示,用于大规模图像检索。
总结起来,大规模图像检索与特征提取算法的研究已经取得了很大的进展。
基于改进BOF算法的图像识别和分类
基于改进BOF算法的图像识别和分类李康顺;王福滨;张丽霞;李伟【期刊名称】《中南大学学报(自然科学版)》【年(卷),期】2016(047)005【摘要】对bag offeatures(BOF)算法进行研究与改进,并将其应用到图像识别和分类中。
针对传统BOF算法执行效率低以及分类精度不够高等缺陷,提出一种结合SURF(speeded up robust feature)与空间金字塔匹配原理的优化方法相结合的图像识别与分类算法。
SURF 算法可提高执行效率,而空间金字塔匹配原理的优化方法可提高分类精度。
首先对分类图像应用SURF算法提取特征描述符并生成视觉词典,该算法提取的视觉词典能更有效地表示图像特征,且能应对多变的尺度;然后应用空间金字塔匹配原理对图像采用视觉词典的直方图表示,进一步提高分类的准确度;最后利用LIBSVM分类器进行分类。
在Graz,Caltech-256和Pascal VOC 2012这3个数据集中进行实验测试。
研究结果表明:该方法与传统的 BOF 算法相比提高了执行效率和分类精度。
在数据实验中通过与近几年一些相关研究工作在分类准确率方面进行对比,该方法具有很大的优越性。
%Improvedbag offeatures (BOF) algorithmwas applied to image recognition and classification. In view of the low efficiency and low classification accuracy of the traditional BOF algorithm, a new recognition and classification algorithm combined SURF(speededuprobustfeature) with spatial pyramid matching principlewas proposed. SURF algorithm can improve the efficiency, and spatial pyramid matching principle can improve the classification accuracy. Firstly, the image featurewas extractedby SURF algorithm and the codebookwas generated using the features which wereable to respond the changing scales. Secondly, the spatial pyramid matching principlewas applied to the image histogram’s codebook which can improve the accuracy of the classification. Finally, the image histogram’s codebookwas used to be the input of LIBSVM classifier. The experimentswere carried out basedon Graz, Caltech-256andPascal VOC 2012. The results show thatthe proposedmethod is better than the traditional method in the efficiency and classification accuracy. In addition,the proposedmethod is compared with some related research work in classification accuracy,and the proposedmethodhas obvious advantages.【总页数】7页(P1599-1605)【作者】李康顺;王福滨;张丽霞;李伟【作者单位】华南农业大学信息学院,广东广州,510642; 江西理工大学信息工程学院,江西赣州,341000;华南农业大学信息学院,广东广州,510642;华南农业大学信息学院,广东广州,510642;华南农业大学信息学院,广东广州,510642; 江西理工大学信息工程学院,江西赣州,341000【正文语种】中文【中图分类】TP391【相关文献】1.基于改进BOF算法的导线绝缘破损识别 [J], 杨晨欣; 邓燕妮2.改进HSR-FCN的服装图像识别分类算法研究 [J], 高妍; 王宝珠; 郭志涛; 周亚同3.基于改进BOF算法的导线绝缘破损识别 [J], 杨晨欣; 邓燕妮4.基于改进BOF算法的压板状态识别方法研究 [J], 陈月卿;胡琳;吴毅翔;郑剑辉;张振兴;杨艳;王波5.基于改进BOF算法的压板状态识别方法研究 [J], 陈月卿;胡琳;吴毅翔;郑剑辉;张振兴;杨艳;王波因版权原因,仅展示原文概要,查看原文内容请购买。
python-图像检索
python-图像检索图像检索⼀、Bag of features算法1.1Bag of features算法原理1.2算法流程⼆、基于Bag of features算法的图像检索2.1代码2.2结果截图2.3⼩结三、图像源四、实验总结五、遇到的问题以及解决⽅法⼀、Bag of features算法1.1Bag of features算法原理此算法的思想是在我们先做⼀个数据集,然后找到图像中的关键词,这些关键词必须具备较⾼的区分度,最主要的操作就是提取sift特征,然后对这些特征点进⾏聚类算法,然后得到聚类中⼼,聚类中⼼就具有很⾼的代表性,这些聚类中⼼形成字典,然后⾃取⼀张图⽚,进⾏sift特征提取,就可以在字典⾥找到最相似的聚类中⼼,统计这些聚类中⼼出现的次数,然后就直⽅图表⽰出来,对于不同类别的图⽚,就可以训练处⼀些分类模型,然后就可以进⾏图⽚分类。
1.2算法流程1.2.1收集数据集1.2.2提取sift特征1.2.3根据sift特征提取结果,进⾏聚类,得到⼀个字典1.2.4根据字典将图⽚表⽰成向量(直⽅图);1.2.5训练分类器或者⽤ KNN 进⾏检索提取特征:我们为了是图⽚具有较⾼的分辨度,我们使⽤sift特征提取,保证旋转不变性和尺度不变性,每个特征点都是128维的向量,将会提取很多的特征点得到字典:我们再次之前提取了很多的特征向量,然后就对这些特征向量进⾏k-means聚类,k值根据实际情况⽽定。
聚类完成后,我们就得到了这 k 个向量组成的字典,这 k 个向量有⼀个通⽤的表达,叫 visual word。
直⽅图表⽰:聚类之后,我们匹配图⽚的「SIFT」向量与字典中的 visual word,统计出最相似的向量出现的次数,最后得到这幅图⽚的直⽅图向量。
训练分类器:当我们得到每幅图⽚的直⽅图向量后,剩下的这⼀步跟以往的步骤是⼀样的。
⽆⾮是根据数据库图⽚的向量以及图⽚的标签,训练分类器模型。
MBDH:一种多尺度平衡深度哈希图像检索方法
MLH)[3]是具有代表性的数据独立哈希方法,其哈希函数是人 工或随机投影构建的。 数据独立哈希方法的缺陷是显而易见的。 理论上,过多的人工干预可能导致适应性以及准确性的缺失。 因此,从给定数据库学习哈希函数的数据依赖哈希方法被 提出。这种哈希函数的构造方法可以生成更紧凑的二进制哈希
提高哈希编码质量的监督哈希近来受到更广泛关注。传统监督哈希方法将图像学习的手工特征或机器学习特征和二进 制码的单独量化步骤分开,并未很好地控制量化误差,并且不能保证生成哈希码的平衡性。为了解决这个问题,提出 了新的多尺度平衡深度哈希的方法。该方法采用多尺度输入,这样做有效地提升了网络对图像特征的学习效果。并且 提出了新的损失函数,在很好地保留语义相似性的前提下,考虑了量化误差以及哈希码平衡性,以生成更优质的哈希 码。该方法在 CIFAR-10 以及 Flickr 数据集上的最佳检索结果较当今先进方法分别提高了 5.5%和 3.1%检索精度。 关键词:多尺度;平衡性;深度哈希;卷积神经网络;图像检索 中图分类号:TP391.41 doi: 10.3969/j.issn.1001-3695.2017.10.0962
MBDH: a multi-scale balanced deep hashing method for image retrieval
Zhang Yichao1, Huang Zhangcan1, Chen Yaxiong2
(1. Dept of Mathematics, School of Science, Wuhan University of Technology, Wuhan 430070, China; 2. Xi'an Institute of Optics & Precision Mechanics, Chinese Academy of Sciences, Xi'an 710048, China; 3. University of Chinese Academy of Sciences, Beijing 100049, China) Abstract: Hashing has been widely used for large-scale multimedia retrieval because of its advantages of storage and retrieval efficiency. The use of the semantic similarity improving the hash coding quality has recently been more widely concerned. Traditional supervised hash methods for image retrieval represent an image as a manual feature vector or a machine learning feature vector, and then perform a separate quantization step to generate a binary code. Such methods do not control the quantization error effectively, and cannot guarantee the balance of hash code. To this end, this paper presents a new multi-scale balanced deep hash method. The method uses multi-scale input, which effectively improves the ability of learning the image features from the network. Moreover, a new loss function is proposed. Under the premise of preserving the semantic similarity, the quantization error and the balance of hash code are taken into account to generate the high quality hash code. After experimenting on two benchmark databases: CIFAR-10 and Flickr, this method has been improved by 5.5% and 3.1% of the search accuracy compared with today's advanced image retrieval methods. Key Words: multi-scale; balance; deep hashing; convolutional neural network; image retrieval 码获得非常好的效果以及实现理想的时间复杂度。哈希方法可 以分为数据独立哈希及数据依赖哈希。两种方法的区别是生成 哈希函数的具体方式。偏移不变核函数哈希( shift invariant
非负局部约束线性编码图像分类算法
第41卷第7期自动化学报Vol.41,No.7 2015年7月ACTA AUTOMATICA SINICA July,2015非负局部约束线性编码图像分类算法刘培娜1刘国军1郭茂祖1刘扬1李盼1摘要基于特征提取的图像分类算法的核心问题是如何对特征进行有效编码.局部约束线性编码(Locality-constrained linear coding,LLC)因其良好的特征重构性与局部平滑稀疏性,已取得了很好的分类性能.然而,LLC编码的分类性能对编码过程中的近邻数k的大小比较敏感,随着k的增大,编码中的某些负值元素与正值元素的差值绝对值也可能增大,这使得LLC越来越不稳定.本文通过在LLC优化模型的目标方程中引入非负约束,提出了一种新型编码方式,称为非负局部约束线性编码(Non-negative locality-constrained linear coding,NNLLC).该模型一般采取迭代优化算法进行求解,但其计算复杂度较大.因此,本文提出两种近似非负编码算法,其编码速度与LLC一样快速.实验结果表明,在多个广泛使用的图像数据集上,相比于LLC,NNLLC编码方式不仅在分类精确率上提高了近1%∼4%,而且对k的选取具有更强的鲁棒性.关键词局部约束线性编码,非负约束,空间金字塔匹配,图像分类引用格式刘培娜,刘国军,郭茂祖,刘扬,李盼.非负局部约束线性编码图像分类算法.自动化学报,2015,41(7):1235−1243 DOI10.16383/j.aas.2015.c140753Image Classification Based on Non-negative Locality-constrained Linear Coding LIU Pei-Na1LIU Guo-Jun1GUO Mao-Zu1LIU Yang1LI Pan1Abstract The most important issue of image classification algorithm based on feature extraction is how to efficiently encode features.Locality-constrained linear coding(LLC)has achieved the state-of-the-art performance on several bench-marks,due to its underlying properties of better construction and local smooth sparsity.However,the performance of LLC on image classification is sensitive to the number of neighbors,i.e.,the value of k.With the increase of k,the absolute difference of some negative and positive elements may likely become larger and larger.This will make LLC more unstable. In this paper,a new coding scheme called non-negative locality-constrained linear coding(NNLLC)is proposed.It adds an extra non-negative constraint to the objective function of LLC.Generally,this new model can be solved by iterative optimization methods,however,such solutions are quite impractical due to high computational cost.Therefore,two fast approximation algorithms are proposed;more importantly,they and LLC have a similar computational complexity.To compare with LLC,the experiment results on several widely used image datasets demonstrate that NNLLC not only can improve the classification accuracy by nearly1%∼4%,but also is more robust on the selection of k.Key words Locality-constrained linear coding(LLC),non-negative constraint,spatial pyramid matching(SPM),image classificationCitation Liu Pei-Na,Liu Guo-Jun,Guo Mao-Zu,Liu Yang,Li Pan.Image classification based on non-negative locality-constrained linear coding.Acta Automatica Sinica,2015,41(7):1235−1243图像自动分类系统是将一些已有类别标签的图像输入给计算机,通过监督学习得到能够分类图像的模型,将未知类别的图像输入给该分类模型,得到该图像的类别.目前经典的图像分类技术包含两个主要部分:词袋(Bag of features,BoF)[1−3]和空间金字塔匹配(Spatial pyramid matching,收稿日期2014-10-28录用日期2015-03-03Manuscript received October28,2014;accepted March3,2015国家自然科学基金(61171185,61271346),黑龙江省青年科学基金(QC2014C071)资助Supported by National Natural Science Foundation of China (61171185,61271346)and Heilongjiang Province Science Foun-dation for Youths(QC2014C071)本文责任编委黄庆明Recommended by Associate Editor HUANG Qing-Ming1.哈尔滨工业大学计算机科学与技术学院哈尔滨1500011.School of Computer Science and Technology,Harbin Insti-tute of Technology,Harbin150001SPM)[4−5].BoF将图像表示为局部特征的直方图,该方法对特征的空间平移具有很强的鲁棒性,但没有考虑特征的空间结构关系.为了弥补这一缺点,Lazebnik 等[5]提出SPM方法,将图像集中的每幅图像逐层地分割成更加精细的空间子区域,计算每个子区域中的局部特征的直方图.通常,SPM方法将一幅图像划分为三层,每层子区域的数目为2l×2l,l=0,1,2.基于BoF的SPM方法在图像分类问题上已经取得了很好的分类结果[5],其整个流程主要包括:输入图像,对其进行特征提取、字典学习、特征编码、SPM、池化后得到最终编码,将最终的编码向量输入到分类器中得到该输入图像的类别.编码的有效性与鲁棒性对分类结果起着至关重要的作用.在不同的约束条件下,学者们已经提出了1236自动化学报41卷多种重构特征描述子的编码方式,如硬编码(Vec-tor quantization,VQ)[5]、改进的稀疏编码(SPMbased on sparse codes,ScSPM)[6]和局部约束线性编码(Locality-constrained linear coding,LLC)[7].传统的SPM 使用VQ 编码方式,每个待重构的特征描述子的编码有且仅有一个非零元素,该元素通过在字典中寻找待重构特征的最近邻得到.ScSPM 编码方式使用稀疏编码(Sparse coding,SC)[8]取代VQ,减小了重构误差.但ScSPM 得到的编码具有不稳定性,即相似的特征描述子通过稀疏编码模型得到的编码有可能会差别很大.Yu 等[9]指出局部性比稀疏性更加重要,在LLC 中,使用视觉字典中的多个基表示一个特征描述子的方式更加精确,且相似的特征描述子通过共享其局部的基,得到相似的编码,这使得ScSPM 的不稳定性得到极大改善.LLC 对特征描述子进行编码时,在保证平移不变性的约束条件下,需要最小化特征的重构误差,因此得到的编码中可能包含负值元素.若编码中的负值元素与正值元素相差较大,则会导致该编码方式的不稳定性.将编码进行非负化,也是近年来研究的一个重要方向.Hoyer [10]将稀疏编码与非负矩阵分解相结合形成非负稀疏编码(Non-negative sparse coding,NNSC),这一方法的提出主要受到神经信息处理模型的影响,主要用于信号处理框架中.实验表明,非负矩阵分解的约束对于学习数据的表示是非常重要的.Zhang 等[11]应用非负稀疏编码、低秩与稀疏矩阵分解技术(Non-negative sparse cod-ing,low-rank and sparse matrix decomposition,LR-Sc +SPM)构建图像分类框架,在一些基准图像数据集上取得了比LLC 更高的分类结果.Lin 和Kung [12]提出的非负正交匹配追踪算法(Non-negative orthogonal matching pursuit,NOMP)是在正交匹配追踪算法(Orthogonal matching pur-suit,OMP)中引入一个简单的非负约束,在一个多层深度结构中使用K-Means 算法进行特征学习、NOMP 进行编码表示.这种学习框架不仅能够学习大尺寸特征字典,而且能够抵抗噪声过拟合,在STL-10数据集的图像分类测试中取得了最优的结果.因此,为了获得更好的分类性能,并缓解LLC 的不稳定性问题,本文提出了非负局部约束线性编码(Non-negative locality-constrained linear cod-ing,NNLLC)算法,与传统算法相比,本文的主要贡献如下:1)在LLC 编码模型的目标方程中引入非负约束,形成一种新型的NNLLC 编码模型.该编码方式具有较强的稳定性,且编码的分类性能对近邻数k 的选择具有较强的鲁棒性.2)对NNLLC 编码模型的目标方程使用一般的迭代优化算法进行求解,探索其解的特点与计算复杂度.3)提出两种求解NNLLC 编码模型的近似算法.近似算法不仅加速了编码过程,而且在广泛使用的图像数据集上取得了比传统算法更好的分类结果.本文第1节简单描述基于SPM 的图像分类框架.第2节介绍NNLLC 的基本思想及其稳定性的理论分析.在第3节,本文提出两种近似算法,以取代求解NNLLC 编码模型的一般迭代优化算法,有效地加速了编码过程.第4节在多个广泛使用的图像数据集上,给出本文算法与其他经典算法的分类精确率与编码时间的比较结果,以及NNLLC 稳定性的评测.最后得出本文结论.1基于SPM 的图像分类整体框架基于SPM 的图像分类整体框架的流程如图1所示.首先,检测输入图像上的特征点,从每个特征点提取一个D 维的特征描述子,如SIFT 、HOG 等,图1基于SPM 的图像分类的整体框架Fig.1The entire framework of image classification based on SPM7期刘培娜等:非负局部约束线性编码图像分类算法1237由黑色圆点表示;其次,重构每个特征描述子,得到相应的M 维编码向量,由灰色圆点表示;然后,应用SPM 方法将图像在空间上划分为三层,分别为层L 0,L 1,L 2,其中,层L l (l =0,1,2)被划分为2l ×2l 个子区域.对每层的每个子区域进行池化,得到一个M 维的编码向量,则层L l 得到2l ×2l 个M 维编码向量,将该层的所有编码进行拼接,得到该层的编码表示.将三层的编码拼接起来,形成一个L ×M 维的编码向量,该向量即是图像的最后编码,其中子区域总个数为L =l 2l ×2l =2l .最后,将该输入图像的编码向量输入到分类器中进行分类,输出类别信息.本文的主要工作在“编码”这一步骤,该阶段隐含了M 维视觉字典的学习过程,一般采用K-Means 算法学习全体特征描述子上的视觉字典.不同的编码方式得到的编码不同,使用的分类器也就不相同,如LLC 编码得到的是线性编码,只需要使用简单的线性分类器就能达到很好的图像分类效果[7].2非负局部约束线性编码(NNLLC)用H 表示从一幅图像中提取的D 维的特征描述子集合,如H =[h 1,h 2,···,h N ]∈R D ×N ,其中h i ∈R D 是H 中第i 个特征描述子.B 表示全部特征描述子上的视觉字典,包含M 个基,如B =[b 1,b 2,···,b M ]∈R D ×M .利用B 对每个特征描述子h i 进行重构,表示为h i ≈B ×c i ,可以使用不同的编码方式得到对应的编码c i ∈R M .2.1局部约束线性编码(LLC)Yu 等[9]在理论上认为,在某些情况下局部性比稀疏性更重要,因为局部性一定会导致稀疏性,反之却未必.LLC 将传统的稀疏编码方式进行改进,通过加入局部性限制达到全局稀疏的目的,其优化目标函数为minCN i =1 h i −B c i 2+λ d i c i2s.t.1Tc i =1,∀i(1)其中,1表示全部元素为1的向量,约束条件1T c i =1保证编码的平移不变性,局部正则化项 d i c i 2能够确保相似的特征描述子具有相似的编码.2.2近似LLC 编码式(1)的优化模型在求解c i 的过程中有如下规律:待重构的特征描述子倾向于选择字典中距离其较近的基,形成一个局部坐标系统.对此,Wang 等[7]提出一种简单的近似LLC 编码方式来加速编码过程,但最后的性能与式(1)的优化模型相差不大.近似LLC 编码方式在保留局部特征的同时,也保证了编码稀疏性的要求.近似LLC 的编码过程主要包括三个阶段:字典学习、k 近邻搜索和编码,图2主要描述了后两个阶段.图2编码过程示意图Fig.2The diagram of the encoding process1)字典学习.从全部特征描述子中随机抽取一部分作为样本,用于视觉字典学习,使用K-Means 算法学习字典B =[b 1,b 2,···,b M ]∈R D ×M .2)k 近邻搜索.对于任意一个待编码的特征描述子h i ,选取字典B 中距离其最近的k 个基,形成子字典B i =[b [1],b [2],···,b [k ]].3)编码.使用子字典B i 重构特征描述子h i ,即优化式(2)的模型得到编码c i ∈R k .minCN i =1 h i −B i c i 2s.t.1Tc i =1,∀i(2)将最终编码c ∗i ∈RM的第([1],···,[k ])维的值设置为(c [1],···,c [k ]),其他维的值设置为0.式(2)的优化模型可以使用拉格朗日乘子法求得解析解,近似LLC 编码能够将计算复杂度从LLC 的O(M 2)减小到O(M +k 2),其中k M .2.3非负局部约束线性编码(NNLLC)与近似LLC 编码相比,本文提出的非负局部约束线性编码(NNLLC)在其编码模型中加入了非负约束,目标方程可由式(3)表示.minCN i =1 h i −B i c i 2s.t.1Tc i =1c i 0,∀i(3)其中,c i 是重构特征描述子h i 后的非负编码,等式约束保证编码的平移不变性,不等式约束保证编码的非负性,这要求每个特征描述子的重构编码位于其最近的k 个基的凸包之内[13].在图2中,NNLLC1238自动化学报41卷的编码ci 中可能为0的元素由该图示部分的虚线表示(NNLLC 与LLC 编码的差别在第2.4节进行详细的分析描述).式(3)的优化模型无法直接求出解析解,一般可采取迭代优化算法进行求解[14].实际应用中可采用Matlab 优化工具包中的Fmincon 函数来求解这样的非线性规划问题.为了描述方便,本文将使用拉格朗日乘子法求解式(2)的算法称为LLC 算法,求解得到的编码称为LLC 编码,将使用Fmincon 函数优化式(3)的算法称为NNLLC F 算法,优化得到的编码称为NNLLC F 编码.2.4NNLLC 的稳定性将NNLLC 与LLC 优化模型的目标方程进行对比,式(3)比式(2)增加了一个不等式约束条件c i 0,保证了编码的非负性.在1T c i =1与c i 0这两个约束条件下,式(3)得到的编码中的元素大小在[0,1]之间,而式(2)只包含约束条件1T c i =1,得到的编码中的元素大小在不可控的范围内变动,这可能导致正值元素与负值元素相差较大.数据集Caltech 101上的部分特征描述子h 1∼h 3分别由LLC 与NNLLC F 算法进行重构,得到的编码c i (i =1,2,3)如图3所示,其中c i 是五元素向量(在k 近邻搜索中设置k =5),五个元素分别表示为c 1,c 2,c 3,c 4,c 5.在图3中,横坐标表示编码中的五个元素,纵坐标表示各个元素的大小,柱状代表使用某种算法求得的编码的元素值大小,柱状为空代表该元素的大小为0.图3(a)∼3(c)分别表示特征描述子h 1∼h 3在LLC 、NNLLC F 算法下的编码大小比较.从图中可以看出,LLC 编码的负值元素与正值元素相差较大,如图3(b)与图3(c).在图3(c)中,特征h 3的LLC 编码中的元素c 1,其大小超过了1.2,与元素c 4相差约为2,这种同一编码中的元素相差较大的情形将导致该编码方式的不稳定性.而NNLLC F 编码的元素大小都在[0,1]内.从数学角度分析,使用子字典B i 对特征h i 进行重构,有h i ≈B i ×c i ,可以看作是对B i 进行加权求和来拟合h i ,c i 是要求的加权系数.在LLC 中,在满足等式约束1T c i =1的情况下,为了最小化拟合误差,c i 中正值元素与负值元素可能相差很大.这是因为负值加权系数对应的基在一定程度上是为了抑制正值加权系数对应的基.也就是说,在重构特征时,编码中的负值元素对应的基降低了正值元素对应的基所占的比重.在编码过程中,k 近邻搜索选取的k 值越大,字典中的基的数目就越多,得到的编码中的元素个数就越多,正值元素与负值元素相差较大的情形就越容易出现,该编码方式就越不稳定.而在NNLLC 中,由于c i 约束在[0,1]范围内,可将B i ×c i 看作是B i 的数学期望,以此来拟合h i ,所以该编码方式存在合理的数学意义.从图3可以看出,后者中元素为0的位置正好是前者中元素为负数的位置(大部分情况中如此).这说明,对于同一个特征,NNLLC 编码可以看作是将LLC 编码中为负值的元素变为0,其余元素再进行归一化得到.将编码中的负值元素置0,使得其对应的基在重构过程中不能够发挥作用,使用剩余的基来对特征进行重构,使得编码中的元素大小在可控的[0,1]范围内,这在减小重构误差的同时,也使得编码更加稳定.3快速近似非负编码算法对式(3)采用迭代优化的算法进行求解,其速度比LLC 慢得多.例如,Fmincon 优化函数在1s 内可以对几十个特征进行编码,但一幅图像可提取出几千个特征,对于有上万幅图像的数据集来说,编码耗费的时间是实际应用中不能承受的.因此,一般的迭代优化算法使得非负编码的实用性大打折扣.图3k =5时h 1∼h 3分别在四种编码算法上的编码大小比较Fig.3The comparison of codes of LLC,NNLLC F,NNLLC 1and NNLLC 2for h 1∼h 3under k =57期刘培娜等:非负局部约束线性编码图像分类算法1239为了得到非负编码,并减小求解式(3)的计算复杂度,本文提出两种近似非负编码算法NNLLC 1与NNLLC 2.将求解式(3)的过程分为两个步骤,详见算法1.在k =5时,数据集Caltech 101上的特征描述子h 1∼h 3分别使用NNLLC 1与NNLLC 2算法进行重构,得到相应的编码,如图3所示.在图3中,图3(a)∼3(c)分别表示特征描述子h 1∼h 3在四种算法LLC 、NNLLC F 、NNLLC 1、NNLLC 2中的编码大小比较.可以看出,NNLLC 1和NNLLC 2编码与NNLLC F 编码相差不大,三种编码中的元素大小都控制在[0,1]之间,不会出现相差很大的情况,这也说明了两种近似算法能够保证NNLLC 的稳定性.NNLLC 1、NNLLC 2与NNLLC F 在h 1∼h 3上的重构误差也相差不大,这也印证了近似非负编码算法提高图像分类效果的原因.NNLLC 1与NNLLC 2算法的计算复杂度都为O(M +k 2+k ),与LLC 算法的计算复杂度O(M +k 2)相同,其中k M ,故NNLLC 1和NNLLC 2与LLC 的编码过程一样快速.4实验及结果分析本文实验的参数设置与文献[7]保持一致.对于数据集中的彩色图像,先将其转化为灰色图像,并在保持原图像的高宽比例不变的前提下,重新调整每幅图像的大小在300像素×300像素内.将图像按照每6个像素划分为16像素×16像素的patch 块,从每个patch 块提取一个SIFT 特征描述子.整个实验中只使用单一的SIFT 特征作为输入,每个SIFT 特征是D =128维的向量.算法1.NNLLC 近似编码输入.待重构的特征描述子h 及k 近邻搜索后得到的子字典B .输出.h 的非负编码˜c .步骤1.只考虑1Tc =1,求解拉格朗日对偶形式L (c ,λ)= h −B c 2+λ(1−1T c ),得到解析解c =[c 1,c 2,···,c k ]T ,即c =B †(B T h +λ1),其中,B †=(B T B )−1,λ=α/β,α=1−jk B †jk (h T b [k ]),β= jk B †jk .步骤2.为了满足c 0,将步骤1得到的c 进行两种非负处理,得到编码˜c =[˜c 1,˜c 2,···,˜c k ]T .1)NNLLC 1.若c 中的元素有负值,找出负值元素并置0,然后对c 进行归一化;否则不做处理.即˜c i =max {0,c i } c imax {0,c i },i =1,2,···,k2)NNLLC 2.若c 中的元素有负值,找出负值绝对值最大的那个元素,将c 加上该元素的绝对值后进行归一化;否则不做处理.即˜c i =c i +|min {0,c i ∗}|c ic i +|min {0,c i ∗}|,i ∗=arg min i c i ,i =1,2,···,k在字典学习的过程中,字典大小设置为M =1024,由于从整个数据集上提取的SIFT 特征数目庞大,全部用于字典学习耗费时间太长,实验中随机采样20万个SIFT 特征作为训练数据,约占总数的1/70.在获得每个SIFT 的编码后,应用SPM 将每幅图像在空间划分为三层,每层的子区域数目分别为4×4,2×2,1×1.然后,每层子区域使用最大池化算法[6]后拼接起来获得该层的编码,最后在层与层之间同样使用拼接的操作,这样就得到每幅图像的最后编码向量表示,即L ×M =21×1024维的向量.在获得每幅图像的编码后,使用liblinear [15]工具包进行线性分类.根据经验设置该线性分类器的参数为“−s 2−c 5−q ”,即为l 2规约l 2损失函数.所有实验在一个16GB 内存、2.0GHz 双核CPU 的Linux 服务器上运行.实验内容主要包括四个部分,首先比较不同的编码算法在三个常用图像数据集上的分类结果.其次,将LLC 与NNLLC F 、NNLLC 1、NNLLC 2在同一数据集上的编码时间进行对比.然后在Cal-tech 101数据集上,在不同的编码方式下比较不同的参数k 对分类结果的影响,并对NNLLC 的稳定性进行评测.4.1图像分类结果的比较为了验证NNLLC 的有效性,本文在三个广泛使用的图像数据集15Scenes [5]、Caltech 101[16]、Caltech 256上测试图像的分类精确率并进行对比.下面对三个图像数据集进行简要介绍.1)15Scenes.包含15个自然场景、4485幅图像,其中每个类别的图像数目在200到400不等.这15个自然场景差别非常大,从厨房到山峰,从沙滩到高速公路,等等.2)Caltech 101.包含101个类别、9144幅图像,其中每个类别的图像数目在31到800不等,包括动物、花朵、飞机等在形状上差别比较大的类别.3)Caltech 256.包含256个类别、30607幅图像,其中每个类别至少包含80幅图像.该图像集扩展了Caltech 101数据集,类别的变化性更大,其中包含了蝙蝠、美国国旗等一些类别.与文献[6]和文献[7]相同,本实验分别使用15Scenes 图像集的每个类别中的10,20,40,60,80,100幅图像,Caltech 101图像集的每个类别中1240自动化学报41卷的5,10,15,20,25,30幅图像,Caltech256图像集的每个类别中的15,30,45,60幅图像作为训练数据,剩余的图像作为测试数据.设置最近邻数k=5,将本文的NNLLC F算法、NNLLC1算法和NNLLC2算法与一些现有的传统算法在15Scenes、Caltech101、Caltech256数据集上进行图像分类精确率的比较,结果分别详见表1、表2和表3.可以看出,随着训练图像数目的增大,分类性能也在逐渐地提高.整体看来,NNLLC算法在分类性能上要优于其他传统算法.NNLLC1、NNLLC2两种近似算法与NNLLC F的分类性能相差不大,然而它们在分类精确率上比LLC都高出了近1%∼4%.尤其当训练图像数目较小时,本文算法的优势更加明显.这是因为NNLLC算法得到的特征编码比LLC更加有效,只需要较少的训练数据就能达到比较好的分类结果.增加训练数目能够更好地训练分类器,所以训练数目增大,NNLLC算法的分类精确率提高的幅度变小.4.2编码时间的比较对于某一数据集,图像分类精确率固然是衡量表115Scenes图像集上的分类结果(%)Table1The comparison of classification accuracy on15Scenes dataset(%)训练图像数目102040608010ScSPM[6]−−−−−80.28 LLC64.2270.1575.5177.8679.0580.31NNLLC F66.4872.9577.4179.3780.9781.75NNLLC167.5673.7277.8880.1680.3581.79NNLLC268.1272.2077.3279.7880.8781.83表2Caltech101数据集上的分类结果(%)Table2The comparison of classification accuracy on Caltech101dataset(%)训练图像数目51015202530 Lazebnik[5]−−56.40−−64.60 Zhang等[17]46.655.859.162.0−66.20 Boiman等[18]−−65.0−−70.40 Balasubramanian等[19]−−−−−77.54 ScSPM[6]−−67.00−−73.20 LLC55.1464.6969.7773.3875.6878.26 NNLLC F58.6267.6672.3875.6977.6980.08 NNLLC158.4868.3072.7675.8077.7279.19 NNLLC259.2568.5072.6975.5478.0079.65表3Caltech256数据集上的分类结果(%)Table3The comparison of classification accuracy on Caltech256dataset(%)训练图像数目15304560ScSPM[6]27.7334.0237.4640.14Gemert等[20]−27.17−−LLC30.1236.2840.2143.06 NNLLC F33.1239.2542.7345.56NNLLC133.4339.4843.1245.67NNLLC233.5439.5643.1745.797期刘培娜等:非负局部约束线性编码图像分类算法1241图像分类性能的一个重要标准,但整个实验消耗的时间也是一个重要的衡量标准.如图1所示,对于从开始编码到得到一个L×M维的编码向量这一过程,本文实验将其耗费的时间称为编码时间.对于NNLLC F、NNLLC1、NNLLC2与LLC来说,为了统计方便,本文只比较它们的编码时间.编码是在某个数据集的全部特征描述子上进行的,且15Scenes提取出约728万个特征,Caltech101数据集提取出约1240万个特征,Caltech256提取出约4472万个特征.表4给出了k=5时NNLLC F、NNLLC1、NNLLC2与LLC分别在15Scenes、Caltech101、Caltech256数据集上的编码时间比较.可以看出,数据集越大,提取出的特征数越多,编码时间就越长.同样地,k的取值越大,编码时间也就越长. NNLLC1、NNLLC2与LLC在相同数据集上的编码时间几乎相同,却比NNLLC F的编码时间小得多.NNLLC1和NNLLC2两种近似算法不仅与LLC在编码速度上一样快,而且能够达到与NNLLC F相近的图像分类精确率.由此看来,两种近似算法不但保留了快速编码的特性,而且能够提高分类性能.4.3参数k的选择与编码方式的稳定性的关系随着编码过程中的近邻数k的增大,LLC编码方式越来越不稳定,而NNLLC能够显著缓解这一问题.为了探索参数k与两种不同编码方式的稳定性之间的关系,本文首先比较了LLC与NNLLC 的分类性能在不同k值下的变化趋势,对NNLLC 的稳定性进行了评测,然后分析了不同的k值对NNLLC的分类性能的影响,对k值进行合理的选择.4.3.1NNLLC稳定性的评测为了验证NNLLC编码在分类性能上对参数k 的选择的鲁棒性,本文在Caltech101图像数据集上测试了LLC与NNLLC1、NNLLC2在不同近邻数k值上的分类性能.图4给出了训练样本大小分别选取5,15与30时,三种算法的分类精确率在2, 5,10,20,30,40,50这7种不同k值上变化的曲线.在图4中,横坐标表示参数k的大小,纵坐标表示平均分类精确率.对LLC算法的分类精确率的变化曲线进行观察,可以看出,LLC编码的分类性能随着k的增大而明显减小,这说明LLC编码的分类性能对k的选择具有很强的敏感性.对NNLLC1、NNLLC2算法的分类精确率的变化曲线进行观察,可以看出,k值在5∼20之内,分类精确率基本相同,k取值大于20后,分类精确率开始轻微下降.整体看来,NNLLC1编码与NNLLC2编码的变化曲线比较平稳,即使k增长到较大的数值,分类性能只是轻微下降,基本保持在稳定的范围内.这说明NNLLC编码的分类性能对k值的选择具有较强的鲁棒性.4.3.2参数k的选择NNLLC编码方式的稳定性使得其分类性能对参数k的选择具有较强的鲁棒性,为了探究不同的参数k与分类性能之间的变化关系,本文在Caltech101图像数据集上测试了NNLLC1与NNLLC2取不同k值时对分类性能的影响.图5给出了在不同训练样本大小下,分类精确率在2,5, 10,20,40,50这6种不同k值下变化的曲线.在图5中,横坐标表示每个类别中训练图像的数目,纵坐标表示平均分类精确率.通过对6种不同k值下的分类精确率的变化曲线进行观察,较小的k 能够取得更高的分类精确率,这正是本文所期望的,因为k取值越小,计算复杂度越小,编码速度越快. k=5比k=2时的分类精确率有所提高,且k取值在5∼20内的分类精确率变化不大.k取值大于20后,分类精确率开始轻微下降.为了加快编码速度,可以选择较小的k值.5结论本文通过在LLC编码模型的目标方程中引入非负约束,提出了一种新型的编码方式NNLLC.相比于LLC,该编码方式不仅具有较强的稳定性,而且对参数的选择具有更强的鲁棒性.同时,与使用一般的迭代优化算法求解NNLLC的编码模型相比,两种近似非负编码算法能够显著地缩减编码时间.实验结果表明,在多个广泛使用的图像数据集上,相比表4本文算法与LLC在三个数据集上的编码时间比较(小时)Table4The encoding time comparison of our methods and LLC on15Scenes,Caltech101and Caltech256(hour)编码算法LLC NNLLC F NNLLC1NNLLC2 15Scenes0.9365.750.940.96Caltech101 1.92153 1.95 1.98Caltech256 6.50403.36 6.58 6.68。
近红外图像增强与彩色化算法
文章编号:2095-6835(2018)02-0024-04近红外图像增强与彩色化算法*史珂,郑鑫毅,汤春明,魏鑫,张新新,杜月新,乐娟(天津工业大学电子与信息工程学院,天津300387)摘要:提出了一种新的近红外图像增强与彩色化算法,先将近红外图像取反,然后用MSRCR算法处理取反后的RGB三个通道的图像,将处理后的RGB三通道灰度值分别拉伸合并成一幅新的图像,取反后用改进的导向滤波实现图像增强,用改进的BOF算法检索用于给近红外图像上色的彩色参考图像,接着采用Welsh算法对增强后的近红外图像分区域上色,再通过纹理匹配选取相似像素点,实现近红外图像的彩色化。
实验结果表明,这种算法增强后的图像细节清晰,色彩传递效果好,且算法运行速度比较快。
关键词:近红外图像增强;彩色化;MSRCR算法;检索彩色参考图像中图分类号:TP391.1文献标识码:A DOI:10.15913/ki.kjycx.2018.02.024很多重要的夜视或低照度场景,比如军事基地、安全中心和交通要塞等,主要利用红外图像实现全面监控。
红外图像反映了目标场景的热辐射信息,它主要是由目标场景的辐射率差和温差决定的。
红外图像具有对场景亮度变化不敏感,以及对于目标具有良好的探测性等优点,所以被广泛应用。
但是,研究发现,红外图像丢失了原有可见光图像的一些细节边缘和纹理等特征。
于是,Stan.Z提出了近红外(NIR)图像成像系统,NIR即波长范围为0.7~1.1μm的光,它既具有红外成像的一些优点,又能保持一定的细节特征。
然而,近红外图像依然存在对周围环境温度变化比较敏感、对玻璃的非穿透性等缺点,且由于实际获取图像时会受到外部环境,比如光照不足、光照不均、雾霾雨水等恶劣天气的影响,严重影响了图像的视觉质量,因此,我们需要对获取的近红外图像进行增强和彩色化,以便获得更好的视觉效果。
目前存在的近红外图像增强算法主要有基于直方图均衡、自适应的直方图增强算法和Retinex理论[1-5]等。
OpenCV探索之路(二十八):BagofFeatures(BoF)图像分类实践
OpenCV探索之路(⼆⼗⼋):BagofFeatures(BoF)图像分类实践在深度学习在图像识别任务上⼤放异彩之前,词袋模型Bag of Features⼀直是各类⽐赛的⾸选⽅法。
⾸先我们先来回顾⼀下PASCAL VOC竞赛历年来的最好成绩来介绍物体分类算法的发展。
从上表我们可以发现,在2012年之前,词袋模型是VOC竞赛分类算法的基本框架,⼏乎所有算法都是基于词袋模型的,可以这么说,词袋模型在图像分类中统治了很多年。
虽然现在深度学习在图像识别任务中的效果更胜⼀筹,但是我们也不要忘记在10年前,Bag of Features的框架曾经也引领过⼀个时代。
那这篇⽂章就是要重温BoF这个经典框架,并从实践上看看它在图像物体分类中效果到底如何。
Bag of Features理论浅谈其实Bag of Features 是Bag of Words在图像识别领域的延伸,Bag of Words最初产⽣于⾃然处理领域,通过建模⽂档中单词出现的频率来对⽂档进⾏描述与表达。
词包模型还有⼀个起源就是纹理检测(texture recognition),有些图像是由⼀些重复的基础纹理元素图案所组成,所以我们也可以将这些图案做成频率直⽅图,形成词包模型。
词包模型于2004年⾸次被引⼊计算机视觉领域,由此开始⼤量集中于词包模型的研究,在各类图像识别⽐赛中也⼤放异彩,逐渐形成了由下⾯4部分组成的标准物体分类框架:1. 底层特征提取2. 特征编码3. 特征汇聚4. 使⽤SVM等分类器进⾏分类2005年第⼀届PASCAL VOC竞赛数据库包含了4类物体:摩托车、⾃⾏车、⼈、汽车,训练集加验证集⼀共684张图像,测试集包含689张图像,数据规模相对较少。
从⽅法上说,采⽤“兴趣点-SIFT地城特征描述-向量量化编码直⽅图-⽀持向量机”得到了最好的物体分类性能,这种⽅法也就是我们今天所讲的Bag of Features⽅法。
为什么要⽤BOF模型描述图像?SIFT特征虽然也能描述⼀幅图像,但是每个SIFT⽮量都是128维的,⽽且⼀幅图像通常都包含成百上千个SIFT⽮量,在进⾏相似度计算时,这个计算量是⾮常⼤的,更重要的是,每⼀幅图提取到的SIFT特征点数⽬都不⼀样,所以我们要将这些特征量化(⽐如⽣成统计直⽅图),这样才能进⾏相似度计算。
Bag of Features
Bag of Features (BOF)图像检索算法1.用surf算法生成图像库中每幅图的特征点及描述符2.用k-means算法对图像库中的特征点进行训练,生成类心3.生成每幅图像的BOF:判断图像的每个特征点与哪个类心最近,最近则放入该类心,最后生成一列频数表,即初步的无权BOF4.通过tf-idf对频数表加上权重,生成最终的BOF5.对检索的图像也进行3-4部操作,生成一列检索图的BOF6.将检索的BOF向量与图片库中每幅图的BOF向量求夹角,夹角最小的为匹配对象SIFT/SURF特征图像检索时,由于一张图像可能有几十个甚至几百个特征,一次图片查询需要进行的特征查询次数非常多且不固定。
为解决这个问题,需要引入一种方法可以将任意图片的所有特征向量用一个固定维数的向量表出,且这个维数并不因图片特征点数不同而变化。
Bag-of-Words模型源于文本分类技术,在信息检索中,它假定对于一个文本,忽略其词序和语法、句法。
将其仅仅看作是一个词集合,或者说是词的一个组合,文本中每个词的出现都是独立的,不依赖于其他词是否出现,或者说这篇文章的作者在任意一个位置选择词汇都不受前面句子的影响而独立选择的。
图像可以视为一种文档对象,图像中不同的局部区域或其特征可看做构成图像的词汇,其中相近的区域或其特征可以视作为一个词。
这样,就能够把文本检索及分类的方法用到图像分类及检索中去。
s SIFT Algorithm for 3D Model RetrievalBag-of-Features模型仿照文本检索领域的Bag-of-Words方法,把每幅图像描述为一个局部区域/关键点(Patches/Key Points)特征的无序集合。
使用某种聚类算法(如K-means)将局部特征进行聚类,每个聚类中心被看作是词典中的一个视觉词汇(Visual Word),相当于文本检索中的词,视觉词汇由聚类中心对应特征形成的码字(code word)来表示(可看当为一种特征量化过程)。
BoW算法及DBoW2库简介
BoW算法及DBoW2库简介 由于在ORB-SLAM2中扩展图像识别模块,因此总结⼀下BoW算法,并对DBoW2库做简单介绍。
1. BoW算法 BoW算法即Bag of Words模型,是图像检索领域最常⽤的⽅法,也是基于内容的图像检索中最基础的算法。
⽹络上有各种各样的原理分析,所以这⾥只是简单提⼀下。
Bag of Words本是⽤于⽂本检索,后被引⽤与图像检索,和SIFT等出⾊的局部特征描述符共同使⽤(所以有时也叫Bag ofFeature,BOF),表现出⽐暴⼒匹配效率更⾼的图像检索效果,它是直接使⽤K-means对局部描述符进⾏聚类,获得⼀定数量的视觉单词,然后量化再统计词频或TF-IDF加权之后的权重系数。
但是随着图像数据库的扩⼤,图像数据增加,所使⽤的码书规模也越来越⼤,K-means的效率就⽐较低了。
为了改善⼤规模图像检索场景下的图像检索效果,有⼈提出了Vocabulary Tree(VT)算法,它是对BoW算法的⼀种改进算法,也就是我们现在常看见的分层量化的BoW算法。
按照VT论⽂表述,这种算法不⽤进⾏图像表达向量的相似性计算,⽽是根据倒排⽂件系统进⾏打分,按照打分的⾼低进⾏排序,获得最相似的图像,⾄于怎么打分,这⾥就不多说了,从图上可以看出来。
倒排⽂件存储就是每个叶⼦结点下有哪些对应的图像。
2. DBoW 了解了上述两种算法之后再看DBoW算法就⼩菜⼀叠了,但是仍然有⼏个概念需要注意。
DBoW2中计算图像之间相似度时仍然计算的是BoW向量之间的距离(根据描述⼦的不同可能选择Hamming距离或者余弦距离),⽽视觉单词分层的作⽤则引出了正向索引和反向索引的概念。
反向索引即倒排⽂件系统,即每个叶⼦结点都有⼀个关联的⽂本⽂档,⾥⾯存储着当前节点的索引值和落在该节点下的图像索引值。
反向索引的作⽤和倒排⽂档是⼀致的,加速图像的匹配过程,当query图像来时,只要和对应节点下图像计算相似性即可,这就⼤⼤缩⼩了待匹配图像的规模。
基于Bag of Features的手势识别
基于Bag of Features的手势识别陈小波;谢伙生【期刊名称】《计算机工程与设计》【年(卷),期】2013(34)3【摘要】基于视觉的手势识别中,手势的识别效果易受手势旋转,光照亮度的影响,针对该问题,借鉴了目标识别和图像检索领域的Bag of Features(特征袋)算法,将Bag of Features算法应用到手势识别领域.通过SURF(加速鲁棒性特征)算法提取手势图像的特征描述符,使手势对尺度、旋转、光照具有很强的适应力,再应用Bag of Features算法把SURF特征描述符映射到一个统一维度的向量,即Bag of Features特征向量,再用支持向量机对图像得到的特征向量进行训练分类.实验结果表示,该方法不仅具有较高的时间效率,满足手势识别的实时性,而且即使在很大角度的旋转以及亮度的变化下,仍能达到较高的识别率.%Hand gesture recognition based on computer vision is easily effected by hand rotation and luminance change, the bag of features is utilized for object recognition and image retrieval to solve this problem. SURF (speed-up robust features) is used to extract feature descriptors of hand images to get the character of invariant to scale, rotation and luminance change, then bag of features is applied to map SURF descriptors to a unified dimension vector, that is, bag of features vector. Lastly, support vector machine is used for training and classification. The experimental results show that the algorithm proposed in this paper not only satisfies the real-time requirement of handgesture recognition, but also can handle large angle rotation and luminance change.【总页数】6页(P983-988)【作者】陈小波;谢伙生【作者单位】福州大学数学与计算机科学学院,福建福州350108【正文语种】中文【中图分类】TP391【相关文献】1.基于Bag of Features算法的车辆图像识别研究 [J], 何友松;吴炜;陈默;杨晓敏;罗代升2.基于Bag-of-Features算法的车辆检测研究 [J], 梁炳春;孙韶媛;彭宝;赵海涛3.基于Bag of Features模型的害虫图像分类技术研究 [J], 姜祖新;赵小军;王复元;盛强;谢鹏;徐擎宇4.基于局部形状特征和Bag-of-Feature模型的磨粒图像形状特征提取 [J], 鲁华杰;张伟;刘涛5.基于CNN的Bagging模型在智慧电网中的应用 [J], 韩红卫;刘一峰;庞涛;王勇;于昌海;刘佳名因版权原因,仅展示原文概要,查看原文内容请购买。
图像搜索-BOF-Python
图像搜索-BOF-Python图像搜索Bag of Feature (BOF)算法BOF的本质是提出⼀种图像的特征表⽰⽅法。
按照BOF算法的思想,⾸先我们要找到图像中的关键词,⽽且这些关键词必须具备较⾼的区分度。
实际过程中,通常会采⽤SIFT特征。
有了特征之后,我们会将这些特征通过聚类算法得出很多聚类中⼼。
这些聚类中⼼通常具有较⾼的代表性,⽐如,对于⼈脸来说,虽然不同⼈的眼睛、⿐⼦等特征都不尽相同,但它们往往具有共性,⽽这些聚类中⼼就代表了这类共性。
我们将这些聚类中⼼组合在⼀起,形成⼀部字典。
对于图像中的每个「SIFT」特征,我们能够在字典中找到最相似的聚类中⼼,统计这些聚类中⼼出现的次数,可以得到⼀个向量表⽰(有些⽂章称之为直⽅图),如本⽂开篇的图⽚所⽰。
这些向量就是所谓的Bag。
这样,对于不同类别的图⽚,这个向量应该具有较⼤的区分度,基于此,我们可以训练出⼀些分类模型,并⽤其对图⽚进⾏分类。
BOF 算法过程创建词汇创建图像索引在数据库中搜索图像TF-IDF对于直⽅图向量,我们引⼊ TF-IDF 权值我们需要对每⼀个词给⼀个权重。
⽽且这个权重必须满⾜以下两个条件:1. ⼀个词对主题预测能⼒越强,权重越⼤;2. 停⽌词权重为 0;加权 BOFTF-IDF 是通过增加权重的⽅法,凸显出重要的关键信息。
同样的,在图像检索中,为了更精确地度量相似性,我们也在原来直⽅图向量的基础上,为向量的每⼀项增加权重。
按照上⾯信息检索的⽅法,我们需要给字典⾥的每个向量(visual word)设置权重。
建⽴⼀个图像集创建词汇为创建视觉单词词汇,⾸先需要提取特征描述⼦,使⽤SIFT特征描述⼦,得到每幅图像提取的描述⼦,并将每幅图像的描述⼦保存在⼀个⽂件中:# -*- coding: utf-8 -*-import picklefrom PCV.imagesearch import vocabularyfrom PCV.tools.imtools import get_imlistfrom PCV.localdescriptors import sift#获取图像列表imlist = get_imlist('E:/test_pic/BOF/')nbr_images = len(imlist)#获取特征列表featlist = [imlist[i][:-3]+'sift'for i in range(nbr_images)]#提取⽂件夹下图像的sift特征for i in range(nbr_images):sift.process_image(imlist[i], featlist[i])#⽣成词汇voc = vocabulary.Vocabulary('ukbenchtest')voc.train(featlist, 1000, 10)#保存词汇# saving vocabularywith open('E:/test_pic/BOF/vocabulary.pkl', 'wb') as f:pickle.dump(voc, f)print ('vocabulary is:', , voc.nbr_words)同时⽣成数据⽂件vocabulary.pkl添加图像并创建图像索引# -*- coding: utf-8 -*-import picklefrom PCV.imagesearch import imagesearchfrom PCV.localdescriptors import siftfrom sqlite3 import dbapi2 as sqlitefrom PCV.tools.imtools import get_imlist#获取图像列表imlist = get_imlist('E:/test_pic/BOF/')nbr_images = len(imlist)#获取特征列表featlist = [imlist[i][:-3]+'sift'for i in range(nbr_images)]# load vocabulary#载⼊词汇with open('E:/test_pic/BOF/vocabulary.pkl', 'rb') as f:voc = pickle.load(f)#创建索引indx = imagesearch.Indexer('testImaAdd.db',voc)indx.create_tables()# go through all images, project features on vocabulary and insert #遍历所有的图像,并将它们的特征投影到词汇上for i in range(nbr_images)[:500]:locs,descr = sift.read_features_from_file(featlist[i])indx.add_to_index(imlist[i],descr)# commit to database#提交到数据库indx.db_commit()con = sqlite.connect('testImaAdd.db')print (con.execute('select count (filename) from imlist').fetchone())print (con.execute('select * from imlist').fetchone())此处会报错:如果你不是装了所有的包,(我是安装的Anaconda,所以可以直接运⾏),就需要点进imagesearch中修改⼀下代码:将其内部所有代码替换成为:from numpy import *import pickleimport sqlite3from functools import cmp_to_keyimport operatorclass Indexer(object):def__init__(self, db, voc):""" Initialize with the name of the databaseand a vocabulary object. """self.con = sqlite3.connect(db)self.voc = vocdef__del__(self):self.con.close()def db_commit(self):mit()def get_id(self, imname):""" Get an entry id and add if not present. """cur = self.con.execute("select rowid from imlist where filename='%s'" % imname)res = cur.fetchone()if res == None:cur = self.con.execute("insert into imlist(filename) values ('%s')" % imname)return strowidelse:return res[0]def is_indexed(self, imname):""" Returns True if imname has been indexed. """im = self.con.execute("select rowid from imlist where filename='%s'" % imname).fetchone()return im != Nonedef add_to_index(self, imname, descr):""" Take an image with feature descriptors,project on vocabulary and add to database. """if self.is_indexed(imname): returnprint('indexing', imname)# get the imidimid = self.get_id(imname)# get the wordsimwords = self.voc.project(descr)nbr_words = imwords.shape[0]# link each word to imagefor i in range(nbr_words):word = imwords[i]# wordid is the word number itselfself.con.execute("insert into imwords(imid,wordid,vocname) values (?,?,?)", (imid, word, )) # store word histogram for image# use pickle to encode NumPy arrays as stringsself.con.execute("insert into imhistograms(imid,histogram,vocname) values (?,?,?)",(imid, pickle.dumps(imwords), ))def create_tables(self):""" Create the database tables. """self.con.execute('create table imlist(filename)')self.con.execute('create table imwords(imid,wordid,vocname)')self.con.execute('create table imhistograms(imid,histogram,vocname)')self.con.execute('create index im_idx on imlist(filename)')self.con.execute('create index wordid_idx on imwords(wordid)')self.con.execute('create index imid_idx on imwords(imid)')self.con.execute('create index imidhist_idx on imhistograms(imid)')self.db_commit()class Searcher(object):def__init__(self, db, voc):""" Initialize with the name of the database. """self.con = sqlite3.connect(db)self.voc = vocdef__del__(self):self.con.close()def get_imhistogram(self, imname):""" Return the word histogram for an image. """im_id = self.con.execute("select rowid from imlist where filename='%s'" % imname).fetchone()s = self.con.execute("select histogram from imhistograms where rowid='%d'" % im_id).fetchone()# use pickle to decode NumPy arrays from stringreturn pickle.loads(s[0])def candidates_from_word(self, imword):""" Get list of images containing imword. """im_ids = self.con.execute("select distinct imid from imwords where wordid=%d" % imword).fetchall() return [i[0] for i in im_ids]def candidates_from_histogram(self, imwords):""" Get list of images with similar words. """# get the word idswords = imwords.nonzero()[0]# find candidatescandidates = []for word in words:c = self.candidates_from_word(word)candidates += c# take all unique words and reverse sort on occurrencetmp = [(w, candidates.count(w)) for w in set(candidates)]tmp.sort(key=cmp_to_key(lambda x, y: operator.gt(x[1], y[1])))tmp.reverse()# return sorted list, best matches firstreturn [w[0] for w in tmp]def query(self, imname):""" Find a list of matching images for imname. """h = self.get_imhistogram(imname)candidates = self.candidates_from_histogram(h)matchscores = []for imid in candidates:# get the namecand_name = self.con.execute("select filename from imlist where rowid=%d" % imid).fetchone()cand_h = self.get_imhistogram(cand_name)cand_dist = sqrt(sum(self.voc.idf * (h - cand_h) ** 2))matchscores.append((cand_dist, imid))# return a sorted list of distances and database idsmatchscores.sort()return matchscoresdef get_filename(self, imid):""" Return the filename for an image id. """s = self.con.execute("select filename from imlist where rowid='%d'" % imid).fetchone()return s[0]def tf_idf_dist(voc, v1, v2):v1 /= sum(v1)v2 /= sum(v2)return sqrt(sum(voc.idf * (v1 - v2) ** 2))def compute_ukbench_score(src, imlist):""" Returns the average number of correctimages on the top four results of queries. """nbr_images = len(imlist)pos = zeros((nbr_images, 4))# get first four results for each imagefor i in range(nbr_images):pos[i] = [w[1] - 1 for w in src.query(imlist[i])[:4]]# compute score and return averagescore = array([(pos[i] // 4) == (i // 4) for i in range(nbr_images)]) * 1.0 return sum(score) / (nbr_images)# import PIL and pylab for plottingfrom PIL import Imagefrom pylab import *def plot_results(src, res):""" Show images in result list 'res'. """figure()nbr_results = len(res)for i in range(nbr_results):imname = src.get_filename(res[i])subplot(1, nbr_results, i + 1)imshow(array(Image.open(imname)))axis('off')show()运⾏上⾯代码后,会在根⽬录⽣成建⽴的索引数据库testImaAdd.db获取候选图像# -*- coding: utf-8 -*-import picklefrom PCV.imagesearch import imagesearchfrom PCV.localdescriptors import siftfrom sqlite3 import dbapi2 as sqlitefrom PCV.tools.imtools import get_imlist#获取图像列表imlist = get_imlist('E:/test_pic/BOF/')nbr_images = len(imlist)#获取特征列表featlist = [imlist[i][:-3]+'sift'for i in range(nbr_images)]#载⼊词汇f = open('E:/test_pic/BOF/vocabulary.pkl', 'rb')voc = pickle.load(f)f.close()src = imagesearch.Searcher('testImaAdd.db',voc) locs,descr = sift.read_features_from_file(featlist[0]) iw = voc.project(descr)print ('ask using a histogram...')print (src.candidates_from_histogram(iw)[:5])src = imagesearch.Searcher('testImaAdd.db',voc) print ('try a query...')print(src.query(imlist[0])[:5])nbr_results = 5res = [w[1] for w in src.query(imlist[0])[:nbr_results]] imagesearch.plot_results(src,res)输⼊的图像:运⾏结果:⽣成新的⽂件输⼊图像:运⾏结果:总结可以看出,有两张图是跟搜索图⽚的相似度很⾼的,可能是因为原图中含有⽂字的原因,匹配出来的有些图⽚并不相近,但是从像素和棱廓来看,其实是有些相似度的不选去有⽂字的图⽚尽⼼检索应该会使结果更好⼀些。
矿产
矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。
如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。
㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。
(2 列出开发利用方案编制所依据的主要基础性资料的名称。
如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。
对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。
二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。
2、国内近、远期的需求量及主要销向预测。
㈡产品价格分析
1、国内矿产品价格现状。
2、矿产品价格稳定性及变化趋势。
三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。
2、矿区矿产资源概况。
3、该设计与矿区总体开发的关系。
㈡该设计项目的资源概况
1、矿床地质及构造特征。
2、矿床开采技术条件及水文地质条件。
矿产
矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。
如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。
㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。
(2 列出开发利用方案编制所依据的主要基础性资料的名称。
如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。
对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。
二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。
2、国内近、远期的需求量及主要销向预测。
㈡产品价格分析
1、国内矿产品价格现状。
2、矿产品价格稳定性及变化趋势。
三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。
2、矿区矿产资源概况。
3、该设计与矿区总体开发的关系。
㈡该设计项目的资源概况
1、矿床地质及构造特征。
2、矿床开采技术条件及水文地质条件。
矿产
矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。
如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。
㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。
(2 列出开发利用方案编制所依据的主要基础性资料的名称。
如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。
对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。
二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。
2、国内近、远期的需求量及主要销向预测。
㈡产品价格分析
1、国内矿产品价格现状。
2、矿产品价格稳定性及变化趋势。
三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。
2、矿区矿产资源概况。
3、该设计与矿区总体开发的关系。
㈡该设计项目的资源概况
1、矿床地质及构造特征。
2、矿床开采技术条件及水文地质条件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。
如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。
㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。
(2 列出开发利用方案编制所依据的主要基础性资料的名称。
如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。
对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。
二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。
2、国内近、远期的需求量及主要销向预测。
㈡产品价格分析
1、国内矿产品价格现状。
2、矿产品价格稳定性及变化趋势。
三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。
2、矿区矿产资源概况。
3、该设计与矿区总体开发的关系。
㈡该设计项目的资源概况
1、矿床地质及构造特征。
2、矿床开采技术条件及水文地质条件。