📄 用vc++实现图像检索技术3.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0040)http://www.yesky.com/466/1649466_2.shtml -->
<HTML lang=zh-CN xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>用VC++实现图像检索技术</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META http-equiv=Content-Language content=zh-CN>
<META content=all name=robots>
<META content="index, follow" name=googlebot>
<META content="MSHTML 6.00.2800.1586" name=GENERATOR>
<META content="天极Yesky | 全球中文IT第一门户" name=author>
<META content=,用VC++实现图像检索技术 name=description></META>
<META content=,硬件,软件,数码,游戏,e时代,下载,社区,评测,笔记本; name=keywords><LINK media=all
href="用VC++实现图像检索技术3.files/yesky-content-cs.css" type=text/css
rel=stylesheet></HEAD>
<BODY><!--头部-->
<DIV class=hidden>yesky内容</DIV><LINK media=all
href="用VC++实现图像检索技术3.files/y_headlogo0612.css" type=text/css
rel=stylesheet><LINK media=all href="用VC++实现图像检索技术3.files/headlink0612.css"
type=text/css rel=stylesheet><!--注册登陆及广告两行开始-->
<DIV class=top_head0607>
<DIV class=left_head0607><IMG src="用VC++实现图像检索技术3.files/ssleft_0608.gif"
border=0></DIV>
<FORM name=search action=http://search.yesky.com/search.do method=get>
<DIV class=dqbody_head0607><A href="http://my.yesky.com/">用户登录</A> <A
href="http://passport.yesky.com/customer/agreement.jsp">注册</A> <B>天极IT搜索</B>
<INPUT type=hidden value=0 name=stype><INPUT id=searchzz
onmouseover=this.focus() onfocus=this.select() size=12 name=wd> <INPUT class=searchbtn_head0607 type=submit value="搜 索"><INPUT type=hidden
value=1 name=categoryIds><INPUT type=hidden value=2 name=categoryIds><INPUT
type=hidden value=3 name=categoryIds><INPUT type=hidden value=4
name=categoryIds><INPUT type=hidden value=5 name=categoryIds><INPUT type=hidden
value=6 name=categoryIds><INPUT type=hidden value=1 name=sortType> 天极网站群:<A
href="http://www.yesky.com/">Yesky</A> | <A
href="http://www.chinabyte.com/">ChinaByte</A> | <A
href="http://www.techtarget.com.cn/">IT专家网</A> | <A
href="http://www.impresswatch.com.cn/">Impress中文站</A> </DIV></FORM>
<SCRIPT language=JavaScript>var abcurl=document.URL;if(window.location.href.indexOf("big5.yesky.com")!=-1) {var pcurl=abcurl.substring(25);document.write('<div class="jtft_head0607"><a href="' + 'http' + '://'+pcurl+'"><img src="http://www.yesky.com/TLimages/head/img/jianti_0608.gif" alt="简体版" border="0" /></a> <a href="http://rss.yesky.com/"><img src="http://www.yesky.com/TLimages/head/img/ras_0608.gif" alt="RSS订阅" border="0" /></a></div>');} else {var pcurl2=abcurl.substring(7);document.write('<div class="jtft_head0607"><a href="http://big5.yesky.com/b5/'+pcurl2+'"><img src="http://www.yesky.com/TLimages/head/img/fanti_0608.gif" alt="繁体版" border="0" /></a> <a href="http://rss.yesky.com/"><img src="http://www.yesky.com/TLimages/head/img/ras_0608.gif" alt="RSS订阅" border="0" /></a></div>');} </SCRIPT>
<DIV class=right_head0607><IMG src="用VC++实现图像检索技术3.files/ssright_0608.gif"
border=0></DIV></DIV>
<SCRIPT language=JavaScript>function MM_jumpMenu(targ,selObj,restore){ eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'"); if (restore) selObj.selectedIndex=0;}</SCRIPT>
<DIV class=head_head0607>
<DIV class=logo_head0607><A href="http://www.yesky.com/"><IMG title=天极Yesky
alt=天极Yesky src="用VC++实现图像检索技术3.files/logo.gif"></A></DIV>
<DIV class=ad_head0607><SPAN id=ad1></SPAN></DIV>
<DIV class=other_head0607>
<DIV class=fzbt_head0607>
<DIV class=left_head0607 style="PADDING-TOP: 4px">天极网分站</DIV>
<DIV class=right_head0607 style="PADDING-TOP: 2px"><SELECT class=fzselect
onchange='MM_jumpMenu("parent",this,0)' name=form><OPTION value=1
selected>更多</OPTION> <OPTION
value=http://nx.yesky.com/>宁夏站</OPTION></SELECT></DIV></DIV>
<DIV class=fzlj_head0607><A href="http://bj.yesky.com/">北京站</A> <A
href="http://sh.yesky.com/">上海站</A> <A href="http://gd.yesky.com/">广东站</A><BR><A
href="http://cq.yesky.com/">重庆站</A> <A href="http://cd.yesky.com/">成都站</A> <A
href="http://sy.yesky.com/">沈阳站</A></DIV></DIV></DIV><!--注册登陆及广告两行结束--><!--产品及导航两行开始--><!--产品开始-->
<DIV class=pro_head0607>
<DIV class=proleft_head0607><IMG src="用VC++实现图像检索技术3.files/proleft.gif"
border=0></DIV>
<DIV class=prorightbody_head0607>
<LI><A href="http://notebook.yesky.com/"><IMG alt=笔记本电脑
src="用VC++实现图像检索技术3.files/cp01.gif" border=0></A><BR><A
href="http://notebook.yesky.com/">笔记本</A> </LI>
<LI><A href="http://pc.yesky.com/"><IMG alt=台式电脑
src="用VC++实现图像检索技术3.files/cp02.gif" border=0></A><BR><A
href="http://pc.yesky.com/">台式机</A> </LI>
<LI><A href="http://mobile.yesky.com/"><IMG alt=手机
src="用VC++实现图像检索技术3.files/cp03.gif" border=0></A><BR><A
href="http://mobile.yesky.com/">手机</A> </LI>
<LI
style="PADDING-RIGHT: 3px; PADDING-LEFT: 4px; PADDING-BOTTOM: 0px; PADDING-TOP: 10px"><IMG
src="用VC++实现图像检索技术3.files/cpline_0608.gif" border=0> </LI>
<LI><A href="http://diy.yesky.com/"><IMG alt=电脑硬件DIY
src="用VC++实现图像检索技术3.files/cp08.gif" border=0></A><BR><A
href="http://diy.yesky.com/"><FONT color=#ff6600>DIY硬件</FONT></A> </LI>
<LI class=prolinkli style="TEXT-ALIGN: left"><A
href="http://diy.yesky.com/cpu/">CPU</A><BR><A
href="http://diy.yesky.com/mainboard/">主板</A><BR><A
href="http://diy.yesky.com/speaker/">音箱</A> </LI>
<LI class=prolinkli><A href="http://diy.yesky.com/harddisk/">硬盘</A><BR><A
href="http://diy.yesky.com/vga/">显卡</A><BR><A
href="http://diy.yesky.com/input/">键鼠</A> </LI>
<LI class=prolinkli style="TEXT-ALIGN: left"><A
href="http://diy.yesky.com/rom/">刻录机</A><BR><A
href="http://diy.yesky.com/monitor/">显示器</A><BR><A
href="http://diy.yesky.com/power/">机箱电源</A> </LI>
<LI
style="PADDING-RIGHT: 4px; PADDING-LEFT: 6px; PADDING-BOTTOM: 0px; PADDING-TOP: 10px"><IMG
src="用VC++实现图像检索技术3.files/cpline_0608.gif" border=0> </LI>
<LI style="PADDING-TOP: 10px"><A href="http://digital.yesky.com/"><FONT
color=#ff6600>数<BR>码</FONT></A> </LI>
<LI><A href="http://dc.yesky.com/"><IMG alt=数码相机DC
src="用VC++实现图像检索技术3.files/cp06.gif" border=0></A><BR><A
href="http://dc.yesky.com/">数码相机</A> </LI>
<LI><A href="http://mp3.yesky.com/"><IMG alt=MP3播放器
src="用VC++实现图像检索技术3.files/cp04.gif" border=0></A><BR><A
href="http://mp3.yesky.com/">MP3</A> </LI>
<LI><A href="http://mp4.yesky.com/"><IMG alt=MP4播放器
src="用VC++实现图像检索技术3.files/cp05.gif" border=0></A><BR><A
href="http://mp4.yesky.com/">MP4</A> </LI>
<LI><A href="http://dv.yesky.com/"><IMG alt=数码摄像机DV
src="用VC++实现图像检索技术3.files/cp07.gif" border=0></A><BR><A
href="http://dv.yesky.com/">摄像机</A> </LI>
<LI
style="PADDING-RIGHT: 4px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; PADDING-TOP: 10px"><IMG
src="用VC++实现图像检索技术3.files/cpline_0608.gif" border=0> </LI>
<LI><A href="http://oa.yesky.com/"><IMG alt=电脑外设
src="用VC++实现图像检索技术3.files/cp09.gif" border=0></A><BR><A
href="http://oa.yesky.com/">外设</A> </LI>
<LI><A href="http://net.yesky.com/"><IMG alt=网络
src="用VC++实现图像检索技术3.files/cp10.gif" border=0></A><BR><A
href="http://net.yesky.com/">网络</A> </LI>
<LI><A href="http://server.chinabyte.com/"><IMG alt=服务器
src="用VC++实现图像检索技术3.files/cp11.gif" border=0></A><BR><A
href="http://server.chinabyte.com/">服务器</A> </LI>
<LI><A href="http://dh.yesky.com/"><IMG alt=数字家庭
src="用VC++实现图像检索技术3.files/cp12.gif" border=0></A><BR><A
href="http://dh.yesky.com/">数字家庭</A> </LI></DIV>
<DIV class=proright_head0607><IMG src="用VC++实现图像检索技术3.files/proright.gif"
width=10 border=0></DIV></DIV><!--产品结束--><!--导航开始-->
<DIV class=dh_head0607>
<DIV class=dhbody_head0607><A href="http://product.yesky.com/">查产品</A> <A
href="http://cseek.yesky.com/">看行情</A> <A
href="http://www.yesky.com/jxs/">经销商</A> <A
href="http://price.yesky.com/">导购</A> <A href="http://lab.yesky.com/">评测</A> <A
href="http://z.yesky.com/">互动杂志</A> | <A href="http://soft.yesky.com/">软件</A> <A
href="http://design.yesky.com/">设计</A> <A
href="http://homepage.yesky.com/">网页</A> <A href="http://dev.yesky.com/">开发</A>
<A href="http://soft.yesky.com/security/">安全</A> <A
href="http://bbs.yesky.com/">论坛</A> | <A href="http://q.yesky.com/">群乐</A> <A
href="http://e.yesky.com/">E时代</A> <A href="http://game.yesky.com/">游戏</A> <A
href="http://pic.yesky.com/">图片</A> <A href="http://desktop.yesky.com/">壁纸</A>
<A href="http://comic.yesky.com/">动漫</A> <A href="http://my.yesky.com/">社区</A>
<A href="http://www.mydown.com/">下载</A> <A href="http://hot.yesky.com/">网摘</A>
<A href="http://blog.yesky.com/">博客</A> </DIV></DIV><!--导航结束--><!--产品及导航两行结束--><!--笔记本导航条-->
<DIV class=box>
<DIV class=bgpic>您现在的位置: <A href="http://www.yesky.com/index.shtml">天极Yesky</A>
> <A href="http://soft.yesky.com/index.shtml">软件</A> > <A
href="http://soft.yesky.com/lesson/index.shtml">专题教程</A> </DIV></DIV>
<DIV class=clear1></DIV>
<DIV class=box>
<DIV class=guanggao><SPAN id=contentAdv></SPAN></DIV> <B>b)
基于颜色对的方法的程序实现</B><BR><BR> 该方法也需要分成4×4子块,计算颜色直方图,具体计算颜色直方图的方法上面已经有过详细的解释。<BR>该方法主要在于对颜色对表示结构的实现,颜色对是某一图片的代表特征,因此在程序中必须有定量表示,现在采取用两个子块颜色直方图的欧氏距离表示,因此计算某一子块的颜色对表就是按八方向计算其与周围的子块之间的欧氏距离,将结果存放于一个double
o_dis[8]的数组中,然后将这个数组从大到小排序,排序完成后再将数组中相互之间值的差小于某一域值(取8个颜色对的平均值的2%)的颜色对祛除(按序两两比较再移动数组里的变量实现),最后将结果先填入图像的特征颜色对表(有4×8=32个变量,是一个结构数组,结构记录用户选定子块的坐标和与其相对应的被选中的颜色对值)。<BR><BR> 最后,对4个用户选定的子块依次计算完毕,就可以调用SortColorPair()函数,对特征颜色对表做出处理(先从大到小排序,然后祛除差值小于总平均值的2%的特征颜色对)。<BR><BR> 在比较的时候,按顺序计算出目标图像的子块颜色对表,和以上的特征颜色对表匹配,如果匹配到,则标记该颜色对(设定另一标记0数组),并且将匹配数变量加一,如果最后匹配到的数目是60%以上,就算目标图像被搜索到。<BR><BR> 具体程序实现如下:<BR>
<P></P>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD>
<P>//计算子块(x,y)的颜色对表,采取"八方向邻接技术"<BR>int CBmpProc::CalculateColorPair(int x,
int y)<BR>{<BR>file://颜色对采取欧氏距离来描述<BR>double o_dis[8];<BR>for(int
k=0;k<8;k++){<BR>o_dis[k]=0;<BR>}<BR>file://计算(x,y)与周围所有子块的颜色直方图的欧氏距离<BR>file://---------------------------------------------<BR>for(int
i=0;i<256;i++){<BR>if((x-1)>=0&&(y-1)>=0)<BR>o_dis[0]=o_dis[0]+(Color[x-1][y-1][i]-Color[x][y][i])*(Color[x-1][y-1][i]-Color[x][y][i]);<BR>else<BR>o_dis[0]=-1;<BR>if((y-1)>=0)<BR>o_dis[1]=o_dis[1]+(Color[x][y-1][i]-Color[x][y][i])*(Color[x][y-1][i]-Color[x][y][i]);<BR>else<BR>o_dis[1]=-1;<BR>if((x+1)<=3&&(y-1)>=0)<BR>o_dis[2]=o_dis[2]+(Color[x+1][y-1][i]-Color[x][y][i])*(Color[x+1][y-1][i]-Color[x][y][i]);<BR>else<BR>o_dis[2]=-1;<BR>if((x-1)>=0)<BR>o_dis[3]=o_dis[3]+(Color[x-1][y][i]-Color[x][y][i])*(Color[x-1][y][i]-Color[x][y][i]);<BR>else<BR>o_dis[3]=-1;<BR>if((x+1)<=3)<BR>o_dis[4]=o_dis[4]+(Color[x+1][y][i]-Color[x][y][i])*(Color[x+1][y][i]-Color[x][y][i]);<BR>else<BR>o_dis[4]=-1;<BR>if((x-1)>=0&&(y+1)<=3)<BR>o_dis[5]=o_dis[5]+(Color[x-1][y+1][i]-Color[x][y][i])*(Color[x-1][y+1][i]-Color[x][y][i]);<BR>else<BR>o_dis[5]=-1;<BR>if((y+1)<=3)<BR>o_dis[6]=o_dis[6]+(Color[x][y+1][i]-Color[x][y][i])*(Color[x][y+1][i]-Color[x][y][i]);<BR>else<BR>o_dis[6]=-1;<BR>if((x+1)<=3&&(y+1)<=3)<BR>o_dis[7]=o_dis[7]+(Color[x+1][y+1][i]-Color[x][y][i])*(Color[x+1][y+1][i]-Color[x][y][i]);<BR>else<BR>o_dis[7]=-1;<BR>}<BR>for(int
j=0;j<8;j++){<BR>if(o_dis[j]>=0)<BR>o_dis[j]=sqrt(o_dis[j]);<BR>}<BR>file://------------------------------------------------<BR>file://欧氏距离计算结束<BR>int
flag=0;<BR>int num=0;<BR>for(int
pairnum=0;pairnum<32;pairnum++){<BR>if(pair[pairnum].x!=-1){<BR>num++;<BR>}<BR>}//因为在计算子块的颜色对表的时候已经写了特征颜色对数组,因此要先统计一下特征颜色对数组里已经//有多少有数值了,以便下次的写入可以接在后面,而不至于覆盖了前面的数值<BR>file://计算颜色对差值小于某个"域值"的这个域值<BR>double
ave=0;<BR>for(int
e=0;e<8;e++){<BR>ave+=o_dis[e];<BR>}<BR>ave=ave/8;ave=ave*0.02;
file://采取与子块周围颜色对的平均值的2%计为域值<BR>file://对该子块的颜色对表进行从大到小的排序,采取冒泡排序<BR>int
count=8; double temp;<BR>for(i=count;i>0;i--){<BR>for(int
j=0;j<I-1;J++)<BR>if(o_dis[j]<O_DIS[J+1]){<BR>temp=o_dis[j];<BR>o_dis[j]=o_dis[j+1];<BR>o_dis[j+1]=temp;<BR>}<BR>}<BR>file://消除那些颜色对差值小于某个"域值"的颜色对,以消除那些没有意义的小对象<BR>for(k=0;k<COUNT-1;K++){<BR>if(fabs(o_dis[k]-o_dis[k+1])<AVE){<BR>for(int
l=k+1;l<COUNT-1;L++){<BR>o_dis[l]=o_dis[l+1];<BR>}<BR>count--;<BR>k--;<BR>o_dis[count]=-1;<BR>}<BR>}<BR>file://将该字块计算得到的颜色对表填入该图像的特征颜色对表<BR>for(int
scan=0;scan<8;scan++){<BR>if(o_dis[scan]>0){<BR>pair[num].x=x;<BR>pair[num].y=y;<BR>pair[num].o_dis=o_dis[scan];
<BR>num++;<BR>}<BR>}<BR>return 1;<BR>} </P>
<P>//计算该图像的最终确定的特征颜色对表<BR>BOOL
CBmpProc::SortColorPair()<BR>{<BR>file://32个数据项中有count个有实际数值<BR>for(int
count=0;count<32;count++){<BR>if(pair[count].x==-1)<BR>break;<BR>}<BR>struct
color_pair temp;<BR>file://对颜色对表从大到小排列序(冒泡排序法)<BR>for(int
i=count;i>0;i--){<BR>for(int
j=0;j<I;J++)<BR>if(pair[j].o_dis<PAIR[J+1].O_DIS){<BR>temp=pair[j];<BR>pair[j]=pair[j+1];<BR>pair[j+1]=temp;<BR>}<BR>}<BR>file://计算域值以消除差值小于这个值的颜色对<BR>double
ave=0;<BR>for(int
e=0;e<COUNT;E++){<BR>ave+=pair[e].o_dis;<BR>}<BR>ave=ave/count;<BR>ave=ave*0.02;<BR>file://消除差值小于域值的颜色对<BR>for(int
k=0;k<COUNT-1;K++){<BR>if(fabs(pair[k].o_dis-pair[k+1].o_dis)<AVE){<BR>for(int
l=k+1;l<COUNT-1;L++){<BR>pair[l]=pair[l+1];<BR>}<BR>count--;<BR>k--;<BR>}<BR>}<BR>file://置特征颜色对数目变量<BR>pair_count=count;<BR>return
true;<BR>}<BR>将计算颜色直方图的代码表达如下:<BR>file://以下函数计算颜色直方图<BR>BOOL
CBmpProc::CalculateColor(CDC &dc)<BR>{<BR>if (!IsValid())<BR>return
FALSE;<BR>ASSERT(m_pInfo);<BR>ASSERT(m_pInfo->bmiHeader.biSize ==
sizeof(BITMAPINFOHEADER));<BR>// 复制源图<BR>CDC compDC;<BR>//
创建与当前显示设备兼容的内存设备描述表<BR>compDC.CreateCompatibleDC(&dc);<BR>compDC.SelectObject(this);<BR>COLORREF
clr; file://定义一个COLORREF结构,因为提取的象素点的颜色是以RGB形式表示的<BR>int pix_color;<BR>int
red,green,blue;<BR>int x,y;<BR>for(int fd=0;fd<4;fd++)<BR>for(int
sd=0;sd<4;sd++)<BR>for(int
td=0;td<256;td++){<BR>Color[fd][sd][td]=0;<BR>}<BR>file://计算颜色直方图<BR>for(int
i=0;i<4;i++)<BR>for(int j=0;j<4;j++)<BR>for(int
k=0;k<32;k++)<BR>for(int
l=0;l<32;l++){<BR>x=j*32+l;<BR>y=i*32+k;<BR>clr=compDC.GetPixel(x,y);<BR>red=GetRValue(clr);<BR>green=GetGValue(clr);<BR>blue=GetBValue(clr);<BR>file://因为RGB颜色共256^3种,不可能都保存到数组中,因此要先进行一定的提取工作,因为人对亮度的感<BR>file://觉是最明显的,所以可以先将RGB颜色值转成亮度值,这个公式即转换公司,刚好亮度数值是256级的,//就可以统计颜色直方图了<BR>pix_color=red*0.299+green*0.587+blue*0.114;
<BR>Color[i][j][pix_color]++;
<BR>file://对该象素点的颜色直方图数组中的相信位置加一,是直方图的物理实现<BR>}<BR>return
true;<BR>}</P></TD></TR></TBODY></TABLE>
<P> 以上三个函数实现对某一图像内部的具体计算,而对于基于颜色对方法的外部计算如下:<BR></P>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD>
<P>//计算用户确定的4块位置与其周围位置的颜色对(颜色对现采取用相邻两块的直方图的欧氏距离表示)<BR>pBmp->CalculateColorPair(obj_set.m_x1,obj_set.m_y1);<BR>pBmp->CalculateColorPair(obj_set.m_x2,obj_set.m_y2);<BR>pBmp->CalculateColorPair(obj_set.m_x3,obj_set.m_y3);<BR>pBmp->CalculateColorPair(obj_set.m_x4,obj_set.m_y4);<BR>file://其实在以上的4部计算中,已经形成了初步的颜色对表,在此只不过是将表中的数据从大到小排列出来//并且祛除差值小于某一域值的颜色对<BR>file://计算颜色对结束,形成颜色对表<BR>pBmp->SortColorPair();
<BR>file://颜色对表计算出来,表中的数据既是用户输入的该图像的代表特征<BR>pDC->TextOut(10,168,"检索结果:");<BR>CBmpProc
*pDestBmp;<BR>CString comp_pic_path;<BR>int disp=0;<BR>int
space=-128;<BR>file://读取带比较的图像(在此初定15幅--现定义这15幅图像即图片数据库)<BR>for(int
comp_pic=1;comp_pic<=15;comp_pic++){<BR>comp_pic_path.Format("image%d.bmp",comp_pic);<BR>bmp.LoadFromFile(comp_pic_path);
// 从库中读入位图<BR>pDestBmp = (CBmpProc*)new(CBmpProc); //
用new分配类目标<BR>pDestBmp->LoadFromObject(bmp, &CRect(0,0,128,128)); //
从bmp中的指定区域读入图像<BR>file://计算当前被比较的图像的颜色直方图<BR>pDestBmp->CalculateColor(*pDC);<BR>int
match=0; file://颜色对匹配数目<BR>double ave=0;
file://确定匹配时候不能使用精确匹配,所以需要一个差值小于某一域值时的域值<BR>for(int
s=0;s<PBMP->pair_count;s++){<BR>ave+=pBmp->pair[s].o_dis;<BR>}<BR>ave=ave/pBmp->pair_count;
file://这个域值的基数即是用户输入的图片的颜色对表中颜色对的平均值<BR>ave=ave*0.02;
file://确定误差小于2%的颜色对均属于这个域值 </P>
<P>int pairflag[32];
file://颜色对匹配标志数组,即某一颜色对如果在目标图像中找到,下一次就不能再匹配<BR>for(int
t=0;t<32;t++){<BR>pairflag[t]=-1;<BR>}<BR>for(int
i=0;i<4;i++){<BR>for(int
j=0;j<4;j++){<BR>file://按顺序计算目标图像中一子块与其周围子块的颜色对,然后在用户输入的图像的颜色对表中查询计算出//来的颜色对<BR>pDestBmp->CalculateColorPair(i,j);
<BR>for(int
scan=0;scan<8;scan++){<BR>if(pDestBmp->pair[scan].x==-1)<BR>break;<BR>}<BR>for(int
comp=0;comp<SCAN;COMP++){<BR>for(int
count=0;count<PBMP->pair_count;count++){<BR>if((fabs(pBmp->pair[count].o_dis-pDestBmp->pair[comp].o_dis))<AVE&&PAIRFLAG[COUNT]!=0){<BR>file://差值小于某域值,则匹配到<BR>pairflag[count]=0;
file://置颜色对匹配标志位<BR>match++;
file://匹配数加一<BR>break;<BR>}<BR>}<BR>}<BR>file://重新置目标图像的颜色对表为空,因为现在的实现方式是在计算某一子块的颜色对时已经写过了颜色对//表,为保证颜色对表的真确性,必须在查询下一子块的时候重新置颜色对表为空<BR>for(int
re=0;re<SCAN;RE++)<BR>pDestBmp->pair[re].x=-1;<BR>}<BR>}<BR>file://如果有60%以上的特征颜色对匹配到,就说明该图像已经被检索到<BR>if(match>=(pBmp->pair_count*0.60)){<BR>file://以下是对检索到的图像的界面上的排版显示<BR>disp++;<BR>space+=128;<BR>file://画图像边框<BR>pDC->Rectangle(10+space-1,190-1,138+space+1,318+1);<BR>pDestBmp->Draw(*pDC,
&CRect(10+space,190,138+space,318)); //
将pBmp中的图像绘入DC的指定区域<BR>space+=6;<BR>}<BR>delete (CBmpProc*)pDestBmp; //
删除类目标,delete会自动调用CBmpProc类的析构函数。<BR>}<BR>delete (CBmpProc*)pBmp; //
删除类目标,delete会自动调用类的CBmpProc析构函数。<BR>AfxMessageBox("检索完成");</P></TD></TR></TBODY></TABLE>
<P> 通过以上的程序,我们就实现了真正的图像内容检索,简单的程序就实现了现代计算机科学在多媒体研究前沿的任务。</P>
<P> </P>
<DIV class=right>共3页。 <A class=page
href="http://www.yesky.com/466/1649466.shtml" target=_self><FONT
face=Webdings>9</FONT></A> <A class=page
href="http://www.yesky.com/466/1649466_1.shtml" target=_self><FONT
face=Webdings>7</FONT></A> <A class=page
href="http://www.yesky.com/466/1649466.shtml" target=_self><B>1</B></A> <A
class=page href="http://www.yesky.com/466/1649466_1.shtml"
target=_self><B>2</B></A> <A class=page
href="http://www.yesky.com/466/1649466_2.shtml" target=_self><FONT
color=#666666><B>3</B></FONT></A></DIV></DIV>
<DIV class=clear></DIV><!--文章评论-->
<DIV class=box>
<SCRIPT language=JavaScript>
<!--
var aid = 1649466;
var channelid = 324;
var tagname = "";
//-->
</SCRIPT>
<DIV class=newxiangguan>
<DIV class=newxiangguanmenu><A href="http://my.yesky.com/"
target=_blank>天极社区</A>邀请您:<A class=red-s href="http://blog.yesky.com/"
target=_blank>写博客</A> <A class=red-s href="http://photo.yesky.com/"
target=_blank>上传相片</A> <A class=red-s href="http://bbs.yesky.com/"
target=_blank>论坛聊天</A> <A class=red-s href="http://maillist.yesky.com/"
target=_blank>订阅电子杂志</A> <A class=red-s
href="http://www.yeecai.com/mobileant/tjadd/tjload.html"
target=_blank>彩信蚂蚁</A> <A class=red-s
href="http://hot.yesky.com/">推荐网摘</A> <A class=red-s
href="http://training.yesky.com/">IT培训</A> <A class=red-s
href="javascript:sendemail()" target=_self>对此感兴趣</A> <A
title="推荐到天极网摘 http://hot.yesky.com [鼠标划选本文摘要,然后点击本图片]"
href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(yesky=window.open('http://hot.yesky.com/dp.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t)+'&st=2','yesky','scrollbars=no,width=400,height=480,left=75,top=20,status=no,resizable=yes'));yesky.focus();"
target=_self><IMG src="用VC++实现图像检索技术3.files/souchang1.gif" border=0></A>
</DIV></DIV>
<DIV class=pinlunbox>
<DIV class=pinlunguan3><SPAN id=commentsSpanText>
<SCRIPT language=JavaScript><!--function getTagId(tName) { tName = tName.replace(/(^[\s ]*)|([\s ]*$)/g, "");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -