一种用于基于内容的海量图片快速检索的索引构建方法
技术领域
本发明属于智能信息处理技术,具体涉及的是一种用于基于内容的海量图片快速检索的索引构建方法。
背景技术
基于内容的图像检索方式可以避免人工标注,克服用文字描述图像的主观性和信息损失,从而成为当前图像检索的主要技术手段。随着数字图像的大量增加,图片库变得越来越庞大,采用“顺序查找”的方法进行检索时需要将查询样例图片与图片库中的每个图片进行比较,难以满足实际应用中的快速响应的要求。为此,人们采用相似搜索的索引结构来提高检索的速度。目前,主要的相似搜索索引结构主要有K-D-B树、R-树、SS-树、SR-树、TV-树、M-树、Δ-树、Clindex和iDistance等。
(1)K-D-B-树
K-D-B树是一种与B+树相似的平衡树,用于多维点数据的索引结构。它通过递归的采用垂直于坐标轴的坐标平面对搜索空间进行切割来构建树形索引结构,每个内部节点和叶子节点都对应一个空间区域,并存储到同一物理存储块。它的最大特点是在树的同一层节点对应的子空间是互相没有重叠的,从而使得任意一个点查询的路径对应唯一的一条从根到叶子的路径。
然而,这种没有空间重叠的分割会引起空节点或包含很少的数据的节点产生,在对空间块数据进行搜索时,须对数据块进行强制切割,从而降低存储的利用率和相似搜索的效率。
(2)R-树及其变种
R-树是为多维矩形块数据设计的一种索引结构。是一种采用矩形空间嵌套的平衡树,它的每个节点对应一个矩形区域。在树的构建中,保持矩形具有最小的边界。与K-D-B-树的不同之处在于,R-树的节点对应空间矩形,矩形之间可以有重叠。这种重叠会使得搜索需要更多的时间,但存储效率更高。虽然它是为多维矩形数据设计的,但也可应用于点数据。
R*-树是R-树的变形树。R*-树通过修改R-树的插入、分裂算法并引入强制重新插入机制,使性能得以提高。
VAMSplit R-树通过优化分裂算法,使得分裂后所使用磁盘数据块的数目最少。
TV-树根据多维数据中各维具有不同重要性,对维进行了减少与压缩,从而相对于R*-树提高了性能。
X-树是R*-树的变种,它引入新的分裂机制和超节点机制,使得节点分裂后,搜索空间被分成象K-D-B-tree那样没有重叠的区域。性能得以提高。
(3)SS-树及其变种
SS-树是一种为多维点数据相似搜索而设计的索引结构。它是在R*-树的基础上进行了修改:首先,它采用球形边界代替R*-树的矩形边界。在数据插入时,通过比较新数据与球心距离来决定新数据该插入树中的哪个节点。当节点满了的时候,节点进行分裂,分裂算法是通过计算各维坐标跨度,选择跨度最大的维,进行数据的分割。采用球形边界还可以使得边界描述信息减少(只需要球心与半径),从而提高节点的扇出数,降低树的高度。其次,SS-树修改了R*-树的强制重新插入机制,当节点满的时候,R*-树重新插入优先于分裂,除非在树的同一层已经做过强制重新插入;而在SS-树需进行重新插入,除非在同一节点已经进行过重新插入。
SR-树综合了球形边界和矩形边界,节点被交替的使用球形边界和矩形边界,从而使得近邻可被分割到更小的区域并降低重叠度,增强了相似搜索效率。
SS+-树采用了一种近似最小等距包络算法,使得每个节点的边界更紧密。并使用了k-means聚类算法进行节点分裂,并在构建树的过程中引入本地重构规则,从而减少节点间的空间重叠。
(4)M-树与Δ-树
M-树是为对非特定度量空间(a generic“metric space”)的数据集进行搜索而设计。在这一空间中,对象的相似度由其距离函数定义,距离函数只须满足“非负”、“对称”和“三角不等”这三个基本条件,不必考虑对象在多维空间中的绝对位置,及维之间的相关性等问题。
M-树是一棵平衡树,可动态处理数据文件,并且不需要定期重组。M-树是用距离函数进行对象的索引,它对度量空间的特性要求大大降低,从而使得搜索的应用场合大大扩大。
Δ-树类似于M-树,其主要特点在于通过主成分分析实现对索引树内部节点特征的降维,从而减小计算量并降低内部节点的空间占用量,使得更多的节点能放入内存。其缺点在于数据需要进行主成分分析,数据动态更新后需要进行索引树的重构。
(5)Clindex
Clindex(CLustering for INDEXing)主要用于对离线的静态数据集进行分析,数据集首先被分为“相似”的聚类,每个聚类被存储在一个顺序文件中,并为索引聚类建立一张一维映射表。对于一个查询,将查询点附近的聚类提取到内存中,并通过计算各点与查询点的距离,而获得结果。这一方法大大提高了搜索的召回率及性能。
现有技术的基本步骤是:
1)读取图片文件:从图片库中读入一个未加入索引库的图片文件;
2)特征分析:对图片的特征进行提取(包括颜色、纹理、布局等信息);
3)检查索引结构树是否在内存中,如果不在内存中则从磁盘文件中读取,如果磁盘中不存在相关索引文件则创建一个新的索引文件;
4)根据图片特征信息检测该图片应该插入到索引树的哪个叶子节点中;
5)如果该叶子节点未满则将新图片信息加入该叶子节点,并跳转到第9步;
6)如果该叶子节点已满则考虑新图片和原叶子节点中包含的所有图片,将节点分裂形成两个叶子节点;
7)考察该节点的父节点是否已满,如果未满则跳转到第9步;
8)对该节点进行分裂,并返回转到第7步考察其父节点;
9)修改该节点及其祖先节点的覆盖半径;
10)结束该图片的索引插入过程。
基于内容的海量图片快速检索存在以下特点,使得现有技术在实际使用中不够理想:
(1)图片库是高维海量数据。图片库的图片数量通常是百万量级,使得顺序查找的方法不可行。每个图片的图像特征量通常在一百维以上,使得按数据维进行数据分割的R-树及其变种等非常低效。
(2)图片库的图片是动态更新的。图片库中的图片通常是每天不断增加,这种动态更新的特性使得Clindex等静态分析方法不能适用,Δ-树因需要重构也难以满足应用需求。
(3)索引系统的健壮性要求。在实际使用环境下,系统断电等异常终止的情况偶有发生,在这种情况下一个健壮实用的系统当系统重新启动后应该仍能正常继续工作,而不应出现索引系统被破坏等问题,现在这方面还没有公开的技术手段。
发明内容
根据基于内容的海量图片快速检索存在上述特点,针对现有技术中存在的缺陷,本发明的目的是为基于内容的海量图片快速检索提供一种动态、高效、健壮的索引方法。该发明技术对基于内容的海量图片快速检索具有重要的实用价值。
为达到以上目的,本发明采用的技术方案是:一种用于基于内容的海量图片快速检索的索引构建方法,包括以下步骤:
1)读取图片文件,并对图片特征进行分析,图片特征分析结果为一组实数;
2)对图片特征进行量化:将在步骤1中得到的一组实数形式的图片特征分析结果量化为一组整数;
3)检查索引结构树是否在内存中,如果不在内存中则从磁盘文件中读取,如果磁盘中不存在相关索引文件则创建一个新的索引文件;
4)根据量化的图片特征信息检测该图片应该插入到索引树的哪个叶子节点中;
5)如果该叶子节点未满则将新图片信息加入该叶子节点,并跳转到第10步;
6)如果该叶子节点已满则考虑新图片和原叶子节点中包含的所有图片,将节点分裂形成两个叶子节点;
7)考察该节点的父节点是否已满,如果未满则跳转到第10步;
8)如果该节点的父节点已满,则检查该节点是否经过聚类,如果经过聚类调整则对该节点进行分裂,并返回转到第7步考察其父节点;
9)如果该节点没有经过聚类调整,进行聚类调整;
10)修改该节点及其祖先节点的覆盖半径;
11)考察当前内存中被修改而未存盘的节点数是否达到上限,如果达到上限则将部分被修改而未存盘的节点进行存盘,结束该图片的索引插入过程。
更进一步,步骤1中所述的图片特征包括图片的颜色、纹理和布局。
更进一步,为了使本发明具有更好的效果,在第2步进行图片特征量化时,将图片特征分析结果量化为0到255之间的整数,并用1个计算机字节表示;对图片特征进行量化的方式最好采用非线性的量化方式,所述的非线性量化即非均匀地量化,即各量化区间的取值范围是不相等的,量化中各区间的取值范围是根据图片特征取值的分布来决定的。
再进一步,在本发明第9步进行聚类调整时,将待聚类调整的节点的子节点的所有数据项看作一个数据集进行聚类分析,采用K-Means聚类算法,将分析后形成的每个数据簇组成一个当前节点的子节点。
再进一步,在本发明第11步进行选择存盘时,依据最小完备子树更新策略进行选择存盘,即查找新插图片所在叶子节点的最近的未被修改的祖先节点,并将该祖先节点所有修改而未存盘的子孙节点进行存盘。
本发明的效果在于:本发明由于对图片特征进行了非线性的量化,以整数替代原实数类型,在几乎不降低准确度的情况下使得索引构建与检索的计算速度大为增加,且存储量减少。通过对索引方法中引入聚类调整机制使得在数据动态更新的情况下索引结构仍能保持较为合理的状态。通过采用最小完备子树更新的策略使得系统的健壮性大为抬高。实验表明,在普通PC环境下(CPU为P4 2.0G,内存为1.0GB),在一百万张图片的图片库中找出与指定图片相似的20张图片仅需2秒左右,而且在断电等异常情况出现后,索引库不被破坏,当系统重起后仍能继续工作。
本发明之所以具有以上的效果,是因为本发明相对现有技术增加了一下三个步骤:
1)第2步,对图片特征进行量化,量化后的图片特征以一个特定范围的整数表示,相对原始的浮点数方式不但大大加快了计算的速度,而且内存与磁盘的占用量降低,同时由于根据特征取值的分布信息进行非线性的量化,使得检索结果的准确性方面影响不大;
2)第9步,对节点进行聚类分析,实际应用系统中图片库中的图片是不断加入的,现有技术的索引树往往会因为新数据项的不断加入使得索引树节点分布变得不够紧凑,降低索引与检索的效率,本方法通过引入聚类调整机制采用聚类分析进行调整使得节点分布变得更为合理;
3)第11步,现有技术中有些是每次修改都进行存盘,有些是定期完整更新未存盘节点,还有一些是根据最近最少使用策略进行存盘。对第一种方式需要经常进行磁盘操作,效率低,第二种方式在异常情况下会有大量数据丢失,且更新时间长而影响检索使用;第三种方式会在异常情况发生时,索引数据不一致而导致索引文件被破坏。而本发明所述方法的第12步克服了现有技术上述的缺点,特别是本发明所提出的最小完备子树更新策略具有很好的实用性。
附图说明
图1是本发明所述方法的流程图。
具体实施方式
下面结合附图对本发明的具体实施方式做进一步的描述。
如图1所示,一种用于基于内容的海量图片快速检索的索引构建方法,包括以下步骤:
1)读取图片文件:从图片库中读入一个未加入索引库的图片文件;
对图片特征进行分析:对图片的特征进行提取,图片的特征包括颜色、纹理、布局等信息;
2)对图片特征进行非线性的量化:根据图片特征取值的分布信息,将步骤2中得到的图片特征分析结果(即一组实数)采用非线性方法量化为1到255之间的整数,并用1个计算机字节(Byte)表示;
3)检查索引结构树是否在内存中,如果不在内存中则从磁盘文件中读取,如果磁盘中不存在相关索引文件则创建一个新的索引文件;
4)根据量化的图片特征信息检测该图片应该插入到索引树的哪个叶子节点中;
5)如果该叶子节点未满则将新图片信息加入该叶子节点,并跳转到第10步;
6)如果该叶子节点已满则考虑新图片和原叶子节点中包含的所有图片,将节点分裂形成两个叶子节点;
7)考察该节点的父节点是否已满,如果未满则跳转到第10步;
8)否则(该节点满),检查该节点是否经过聚类,如果经过聚类调整则对该节点进行分裂,并返回转到第7步考察其父节点;
9)否则(没有经过聚类调整),进行聚类调整:将待聚类调整的节点的子节点的所有数据项看作一个数据集进行聚类分析,本实施例中采用K-Means聚类算法,将分析后形成的每个数据簇组成一个当前节点的子节点;
所述的K-Means聚类算法(又称为K均值聚类算法)是一种常用的基于划分的聚类算法,其基本思想是计算每个聚类中对象的平均值,并作为新的聚类种子重新进行聚类对象划分,直到稳定的聚类结果。
10)修改该节点及其祖先节点的覆盖半径;
11)考察当前内存中被修改而未存盘的节点数是否达到上限,如果达到上限,则查找新插图片所在叶子节点的最近的未被修改的祖先节点,并将该祖先节点所有修改而未存盘的子孙节点进行存盘,结束该图片的索引插入过程。
实际应用过程中,第10步中在进行聚类调整时,还可以采用BIRCH聚类算法、CLARANS聚类算法、AHC聚类算法等其他聚类方法;第12步中,还可以采用完整更新方法或采用最近最少使用算法的更新方法或其他更新策略的方法。因此,本发明所述的方法并不限于具体实施方式中所述的实施例,只要是本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。