MPEG-7描述子(2)——可伸缩颜色描述子SCD

来源:互联网 发布:java string == equal 编辑:程序博客网 时间:2024/05/01 06:14

1 Haar小波变换基本原理

  • 采用Haar变换的根据
    Haar变换编码的作用是减少表示图像颜色所用的bit数,同时尽可能多地保留图像颜色内容的信息。Haar变换的基本单元包括一个和操作和一个差分操作,所以Haar变换是一种比较简单的变换。另外Haar变换的差分操作可以将某些直方图中的直方条值变换为0(高通系数,经过取整后),从而可以用较少的系数来描述图像,因此在图像检索时有较高的效率。Haar变换是正交变换,但正交变换做不到将高通系数变换为0,因为它是精确变换而且完全可逆的,即经过逆变换后得到的结果仍为原始值。可伸缩颜色描述符使用Haar变换的前提是近似,即先用Haar变换将大多数高通系数变换为很小的数,取整后为0,将所有的系数取整,用近似的结果代表原始值,结果带来了检索时的高效率(因为值为0的系数可以不予考虑)。当然,从近似的结果经过Haar逆变换得到的结果通常与原始值不同,但误差在允许的范围内。这就是采用Haar变换的根据。
  • Haar变换详述
    Haar变换的基本单元包括一个和操作和一个差分操作,如图1所示。将一直方图中相邻的直方条值两两相加等价于将直方图的bins值减半。即如果原来直方图的bins为256,则经过一次和操作后直方图的bins变为128;如果将这一过程迭代则依次得到64、32个直方条的直方图。Haar变换的高通(差分)系数包含具有较多直方条数的直方图的图像细节信息。在自然图像信号的直方图中,相邻的直方条值表现了大量的冗余,颜色的杂质(轻微的变动)由不定的照明和阴影效果所致。因此,相邻的直方条值的差分应该有较小的值,从而高通系数整数表示时仅需很少的bit数。
    这里写图片描述

例:有a[8],要进行一维Haar小波变换,结果保存在b[8]中则一级Haar小波变换的结果为:

b[0]=(a[0]+a[1])/2, b[4]=(a[0]-a[1])/2
b[1]=(a[2]+a[3])/2, b[5]=(a[2]-a[3])/2
b[2]=(a[4]+a[5])/2, b[6]=(a[4-a[5]])/2
b[3]=(a[6]+a[7])/2, b[7]=(a[6]-a[7])/2

如果需要进行二级Haar小波变换的时候,只需要对b[0]-b[3]进行Haar小波变换。

对于二维的矩阵来讲,每一级Haar小波变换需要先后进行水平方向和竖直方向上的两次一维小波变换,行和列的先后次序对结果不影响。


2 SCD原理

SCD的实现依赖Haar变换的过程,由于Haar小波变换可以产生多分辨率,所以经过Haar变换之后,产生了不同尺度的描述符。
图2描述了SCD的实现过程解释如下:在Haar变换前,需进行非均匀量化,即将每个用11bit表示的直方条值非均匀映射为4bit,给较高可能性出现的小数值以较高的权值。然后是Haar变换,再经过线性量化得到256个系数。使用时可以根据实现需要从第一个系数开始选择16、32、64、128、256个系数,每个系数代表直方图的一个bin值。由于总的趋势是从第一个系数开始,越往后其值越小(高通系数),而且整数化后多为0,因此可以每次从第一个系数开始根据需要依次选择128、64、32、16个系数来进行匹配。由于匹配总是近似的,因此减少所用的系数个数可以获得更快的检索速度,同时检索性能(查全率和查准率)基本不变。
这里写图片描述

代码中Haar实现过程
假定Bin数为16
这里写图片描述


3 SCD实现接口

ScalableColorExtractionTool( int numOfCoeff = 256, int numBitPlanesDiscarded = 0 );
unsigned long ScalableColorExtractionTool::extract(MomVop* img);
int ScalableColorExtractionTool::SetSourceMedia(MomVop* img);
ScalableColorDescriptor* ScalableColorExtractionTool::GetDescriptor(void);
1 0
原创粉丝点击