ImageVerifierCode 换一换
格式:DOC , 页数:11 ,大小:62.50KB ,
资源ID:500578      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-500578.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(用VC++实现图像检索技术.DOC)为本站会员(国***)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

用VC++实现图像检索技术.DOC

1、用 VC+实现图像检索技术 一 . 理论和方法介绍 a) 采用颜色检索方法的目的: 对多媒体数据的检索,早期的方法是用文本将多媒体数据进行标识,这显然不是基于多媒体信息本身内容的检索,对多媒体数据中包含的信息是一中及大的浪费; 基于内容的检索是多媒体数据库的关键技术,如何实现这块技术,是值得商榷的,而最好的方法是使用无需领域知识的检索方法,因此,基于颜色的方法就是实现的关键; 本文介绍了颜色直方图和颜色对方法在基于内容检索时的实现思路和理论; 其实颜色直方图简单来说,就是统计图像 中具有某一特定颜色的象素点数目而形成的各颜色的直方图表示,不同的直方图代表不同图片的特征。 b) 利用颜色直方图进

2、行检索: 该方法也可以应用于视频数据库的查询中,有以下三种方式: ( 1)指明颜色组成 -该法需要用户对图像中的颜色非常敏感,而且使用起来也不方便,检索的查准率和查全率并不高,因此文章中并未介绍该法的实现思路 ( 2)指明一幅示例图像 -通过与用户确定的图像的颜色直方图的相似性匹配得到查询结果,这是文章介绍的两种方法的根本 ( 3)指明图像中一个子图 -分割图像为各个小块 ,然后利用选择小块来确定图像中感兴趣的对象的轮廓,通过建立更复杂的颜色关系(如颜色对方法)来查询图像,该方法是文章的重心所在 c) 颜色直方图实现思路的介绍: 两图片是否相似可以采用欧氏距离来描述: Ed=(G,S)= (E

3、d 越小相似度就越大 ) 检索后,全图直方图的相似度的定量度量可以用如下公式表示: Sim(G,S)= (N 为颜色级数, Sim 越靠近 1 两幅图片越相似 ) 可以对上面 2 中的公式加改进对某些相对重要的颜色乘上一个权重,就可以做寻找某一前景或组合的查询。 全图的颜色直方图算法过于简单,因此带来很多问题,如:可能会有两幅根本不同的图像具有完全一样的颜色直方图,不反映颜色位置信息, 这样导致查准率和查全率都不高,因此问文章提出了一个改进,即将图像进行了分割,形成若干子块,这样就提供了一定程度的位置信息,而且可以对含用户感兴趣的子块加大权重,提高检索的查询智能性和查准查全率,相应的公式有,子

4、块 Gij 与 Sij 的相似性度量为: ( P 为所选颜色空间的样点数) 再引入子块权重 Wij,选取 L 个 最大的 Sim 值作 Simk(Gk,Sk),就有: ( Wk 的选取应根据图像的特点决定,可以使图像中间或用户指定的区域权重大,以反映图像的位置信息) d) 颜色对实现思路介绍: 主要目的:借助图像中相邻子块之间的颜色直方图的配对建模,实现对图像中的具体对象的查询,支持对象的移位、旋转和部分变形; 颜色对方法特别适合于对边界明显的对象的查询; 实现思路:计算用户输入图像的子块直方图片 用户选定包含查询对象的子块 计算这些子块与周围相邻的子块的颜色对表 将这些颜色对中差值小于某一域

5、值的颜色对删除以消除颜色噪声 选取颜色对表中数值最大的几个颜色对做为图片的代表特征 搜索目标图像的每一子块的颜色对表寻找与这写代表颜色对的匹配 统计单一匹配次数 若有某一比例以上的颜色对匹配到,图像即被检索到。 相似性度量: ( N 为所用查询颜色对数目) qj、 gj:颜色对 j 在查询图像 Q 和目标图像 G 中出现的次数 查询时颜色对的匹配应该是不精确的,应该允许的误差为 2%以内 二 . 具体程序实现 a) 基于子块颜色直方图方法的程序实现: 将图片分成 44 格局,按从左到右、从上到下的顺序,分别计算各子块的颜色直方图,因此需要设定一个三维数组,前两维为子块的坐标,最后一维为颜色级,

6、但现在采 样得到的象素点的颜色值是 RGB 形式的,因此,需要将 RGB 形式转换为可以用比较合理的有限数表示的颜色级,而人眼对亮度是最为敏感的,因此可以将 RGB 转换为亮度值 Y,公式为: Y=R0.299+G0.587+B0.114 这样就确定的一个 256 级的颜色级别,而统计颜色直方图的三维数组就可以定义为: int Color44256,当采样到某一颜色级时候,将相应的位置加一即可。 根据以上的子块间的相似公式: ,知道某一颜色级对应的数有可能是分母,当两个颜色级的数都为 0 的时候,显然是不能统计的,因此需要一个数组记录实际统计过的颜色级数,也需要一个数组记录 44 子块的两幅图

7、像的各子块的相似度。 对于用户选定的块其实是代表查询对象的,因此应该加大权重,相对来说就是减小其他块的权重,然后可以将乘过对应权重的块的相似度相加,得到最终的相似度,然后将所有目标图像与用户输入的图像的相似度从大到小排序,选出 值最大的几张作为最后的查询结果显示出来返回。 以上是具体实现设想,程序实现如下: /基于颜色直方图的方法 pDC-TextOut(10,168,“检索结果: “); CBmpProc *pDestBmp; CString comp_pic_path; double fsim15; file:/15 张待比较的目标图片与用户输入图片的相似度存放的数组 int psim15

8、; file:/与 fsim 想对应的图片编号数组,以便显示 for(int comp_pic=1;comp_picLoadFromObject(bmp, / 从 bmp 中的指定区域读入图像,以便图片匹配的进行 pDestBmp-CalculateColor(*pDC); file:/计算目标图片的颜色直方图 int x1,x2,y1,y2,x3,x4,y3,y4; x1=obj_set.m_x1;x2=obj_set.m_x2;x3=obj_set.m_x3;x4=obj_set.m_x4; y1=obj_set.m_y1;y2=obj_set.m_y2;y3=obj_set.m_y3;y

9、4=obj_set.m_y4; file:/用户输入的对象所在子块 (既用户选定的 4 个子块 )的坐标 double sim44; file:/子块之间的相似度数组 int ccount44; file:/有过统计的颜色数目记录数组 for(int i=0;iColorijk=pBmp-Colorijk) ccountij+; if(pDestBmp-ColorijkColorijk) ccountij+; for(i=0;i0;i-) for(int j=0;jif(fsimjtempf=fsimj; tempp=psimj; fsimj=fsimj+1; psimj=psimj+1; f

10、simj+1=tempf; psimj+1=tempp; int disp=0; int space=-128; file:/将相似度最大的的两张图片显示出来 for(int disp_pic=1;disp_picLoadFromObject(bmp, / 从 bmp 中的指定区域读入图像 disp+; space+=128; pDC-Rectangle(10+space-1,190-1,138+space+1,318+1); pDestBmp-Draw(*pDC, / 将 pBmp 中的图像绘入 DC 的指定区域 space+=6; delete (CBmpProc*)pBmp; / 删除类

11、目标, delete 会自动调用类的析构函数。 AfxMessageBox(“检索完成 “); b) 基于颜色对的方法的程序实现 该方法也需要分成 44 子块,计算颜色直方图,具体计算颜色直方图的方法上面已经有过详细的解释。 该方法主要在于对颜色对表示结构的实现,颜色对是某一图片的代表特征,因此在程序中必须有定量表示,现在采取用两个子块颜色直方图的欧氏距离表示,因此计算某一子块的颜色对表就是按八方向计算其与周围的子块之间的欧氏距离,将结果存放于一个 double o_dis8的数组中,然后将这个数组从大到小排序,排序完成后再将数组中相互之间值的差小于某一域值 (取 8 个颜色对的平均值的 2%

12、)的颜色对祛除(按序两两比较再移动数组里的变量实现),最后将结果先填入图像的特征颜色对表(有 48=32 个变量,是一个结构数组,结构记录用户选定子块的坐标和与其相对应的被选中的颜色对值)。 最后,对 4 个用户选定的子块依次计算完毕,就可以调用 SortColorPair()函数,对特征颜色对表做出处理(先从大到小排序,然后祛除差值小于总平均值的 2%的特征颜色对)。 在比较的时候,按顺序计算出目标图像的子块颜色对表,和以上的特征颜色对表匹配,如果匹配到,则标记该颜色对(设定 另一标记 0 数组),并且将匹配数变量加一,如果最后匹配到的数目是 60%以上,就算目标图像被搜索到。 具体程序实现

13、如下: /计算子块 (x,y)的颜色对表,采取 “八方向邻接技术 “ int CBmpProc:CalculateColorPair(int x, int y) file:/颜色对采取欧氏距离来描述 double o_dis8; for(int k=0;k=0 else o_dis0=-1; if(y-1)=0) o_dis1=o_dis1+(Colorxy-1i-Colorxyi)*(Colorxy-1i-Colorxyi); else o_dis1=-1; if(x+1)=0) o_dis2=o_dis2+(Colorx+1y-1i-Colorxyi)*(Colorx+1y-1i-Colo

14、rxyi); else o_dis2=-1; if(x-1)=0) o_dis3=o_dis3+(Colorx-1yi-Colorxyi)*(Colorx-1yi-Colorxyi); else o_dis3=-1; if(x+1)=0 file:/- file:/欧氏距离计算结束 int flag=0; int num=0; for(int pairnum=0;pairnum0;i-) for(int j=0;jif(o_disjtemp=o_disj; o_disj=o_disj+1; o_disj+1=temp; file:/消除那些颜色对差值小于某个 “域值 “的颜色对,以消除那些没有

15、意义的小对象 for(k=0;kif(fabs(o_disk-o_disk+1)for(int l=k+1;lo_disl=o_disl+1; count-; k-; o_discount=-1; file:/将该字块计算得到的颜色对表填入该图像的特征颜色对表 for(int scan=0;scan0) pairnum.x=x; pairnum.y=y; pairnum.o_dis=o_disscan; num+; return 1; /计算该图像的最终确定的特征颜色对表 BOOL CBmpProc:SortColorPair() file:/32 个数据项中有 count 个有实际数值 fo

16、r(int count=0;count0;i-) for(int j=0;jif(pairj.o_distemp=pairj; pairj=pairj+1; pairj+1=temp; file:/计算域值以消除差值小于这个值的颜色对 double ave=0; for(int e=0;eave+=paire.o_dis; ave=ave/count; ave=ave*0.02; file:/消除差值小于域值的颜色对 for(int k=0;kif(fabs(pairk.o_dis-pairk+1.o_dis)for(int l=k+1;lpairl=pairl+1; count-; k-;

17、file:/置特征颜色对数目变量 pair_count=count; return true; 将计算颜色直方图的代码表达如下: file:/以下函数计算颜色直方图 BOOL CBmpProc:CalculateColor(CDC ASSERT(m_pInfo); ASSERT(m_pInfo-bmiHeader.biSize = sizeof(BITMAPINFOHEADER); / 复制源图 CDC compDC; / 创建与当前显示设备兼容的内存设备描述表 compDC.CreateCompatibleDC( compDC.SelectObject(this); COLORREF clr

18、; file:/定义一个 COLORREF 结构,因为提取的象素点的颜色是以 RGB 形式表示的 int pix_color; int red,green,blue; int x,y; for(int fd=0;fdCalculateColorPair(obj_set.m_x1,obj_set.m_y1); pBmp-CalculateColorPair(obj_set.m_x2,obj_set.m_y2); pBmp-CalculateColorPair(obj_set.m_x3,obj_set.m_y3); pBmp-CalculateColorPair(obj_set.m_x4,obj_

19、set.m_y4); file:/其实在以上的 4部计算中,已经形成了初步的颜色对表,在此只不过是将表中的数据从大到小排列出来 /并且祛除差值小于某一域值的颜色对 file:/计算颜色对结束,形成颜色对表 pBmp-SortColorPair(); file:/颜色对表计算出来,表中的数据既是用户输入的该图像的代表特征 pDC-TextOut(10,168,“检索结果: “); CBmpProc *pDestBmp; CString comp_pic_path; int disp=0; int space=-128; file:/读取带比较的图像 (在此初定 15幅 -现定义这 15 幅图像即

20、图片数据库 ) for(int comp_pic=1;comp_picLoadFromObject(bmp, / 从 bmp 中的指定区域读入图像 file:/计算当前被比较的图像的颜色直方图 pDestBmp-CalculateColor(*pDC); int match=0; file:/颜色对匹配数目 double ave=0; file:/确定匹配时候不能使用精确匹配,所以需要一个差值小于某一域值时的域值 for(int s=0;spair_count;s+) ave+=pBmp-pairs.o_dis; ave=ave/pBmp-pair_count; file:/这个域值的基数即是用户输入的图片的颜色对表中颜色对的平均值 ave=ave*0.02; file:/确定误差小于 2%的颜色对均属于这个域值 int pairflag32; file:/颜色对匹配标志数组,即某一颜色对如果在目标图像中找到,下一次就不能再匹配 for(int t=0;t32;t+) pairflagt=-1; for(int i=0;i4;i+) for(int j=0;j4;j+) file:/按顺序计算目标图像中一子块与其周围子块的颜色对,然后在用户输入的图像的颜色

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。