vc++实现基于内容的图像检索系统(一)

vc++实现基于内容的图像检索系统(一)

系统设计

下载数据集

检索用的图像数据,下载网址:

http://cecas.clemson.edu/~stb/research/headtracker/seq/

http://mmlab.ie.cuhk.edu.hk/projects/FSRCNN.html/

https://www.cnblogs.com/alexanderkun/p/4197796.html/

数据集保存在images文件夹里。

2.2 系统流程框架

(1)图像检索系统工作流程

基于内容的图像检索技术是对输入的图像进行分析并分类统一建模,提取其颜色、形状和空间位置等特征,检索时,用户提交查询的源图像,通过用户接口设置查询条件,可以采用一种或几种的特征组合来表示,然后在图像检索库中提取出查询到的所需关联图像,按照相似度从大到小的顺序,反馈给用户。用户可根据自己的满意程度,选择是否修改查询条件,继续查询,以达到满意的查询结果。具体操作为:

a.输入带检索图像。

b.选择检索库路径。

c.选择检索方式:基于颜色特征、形状特征、纹理特征或者综合特征。

d.点击【开始检索】按钮即可得到检索结果。

e.退出。

(2)图像检索系统框架

基于内容的图像检索系统框架如图1所示。系统的核心是图像特征数据库。图像特征既可以从图像本身提取得到,又可以通过用户交互获得,并用于计算图像之间的相似度计算。
系统框架应主要包含以下几个基本功能模块:输入待检索图像、选择检索库路径、检索方式选择、检索结果浏览等。
(3)图像检索系统实现设计
主要代码模块有:
界面设计模块:窗口设计、对话框设计、组件设计。
交互模块:映像检索消息处理。
预处理模块:设置并显示待检索图像、选择检索库路径、扫描检索库中的图像个数、扫描当前目录中的图像个数、检索方式设置,由RGB 空间结构转换为HSV空间。
功能模块:相似度计算、提取不变矩函数、计算颜色直方图、计算累计直方图、计算颜色矩。
结果处理模块:检索结果浏览。
vc++实现基于内容的图像检索系统(一)_第1张图片

基于颜色特征的检索——颜色直方图
(一)颜色空间转换:由RGB 空间结构转换为HSV空间;(二)计算颜色直方图:变量m_graph记录值的变化;
(三)保存颜色直方图:保存在feature_color。
具体方法在general()函数中实现:



void
CImagetrievalDlg::general(CString pathfile,int mode)

{     

    CBitmap hbmp;

       HBITMAP hbitmap; 

       //装载资源

    hbitmap=(HBITMAP)::LoadImage
(::AfxGetInstanceHandle(),pathfile,IMAGE_BITMAP,

                         0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);  

       hbmp.Attach(hbitmap);    

       //获取图像格式

       BITMAP bm;  

       hbmp.GetBitmap(&bm);    

       //创建临时的内存DC对象

       CDC dcMem;      

       dcMem.CreateCompatibleDC(GetDC());    

       dcMem.SelectObject(hbmp);

       int width=bm.bmWidth;

       int height=bm.bmHeight;

       int totalnum= height *width;

       //初始化

       long m_graph[3][12];

       for(int i=0;i<3;i++)

              for(int j=0;j<12;j++)

              {

                
m_graph[i][j]=0;

                
if(mode==1)

                        feature_color[i][j]=0.0;

                
else

                        feature_color_1[i][j]=0.0;

              }

       COLORREF color;

       double h=0,s=0,v=0;

       //计算颜色直方图

       for(long y=0;y

基于颜色特征的检索——累计直方图

(一)颜色空间转换:由RGB 空间结构转换为HSV空间;(二)计算累计直方图:变量m_graph记录值的变化;(三)保存累计直方图:保存在feature_color。具体方法在succession()函数中实现:



void
CImagetrievalDlg::succession(CString pathfile,int mode)

{     

    CBitmap hbmp;

       HBITMAP hbitmap; 

       //装载资源

    hbitmap=(HBITMAP)::LoadImage
(::AfxGetInstanceHandle(),pathfile,IMAGE_BITMAP,

                        0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);  

       hbmp.Attach(hbitmap);    

       //获取图像格式

       BITMAP bm;  

       hbmp.GetBitmap(&bm);    

       //创建临时的内存DC对象

       CDC dcMem;      

       dcMem.CreateCompatibleDC(GetDC());    

       dcMem.SelectObject(hbmp);

       int width=bm.bmWidth;

       int height=bm.bmHeight;

       int totalnum= height *width;

 

       long m_graph[3][12];

       for(int i=0;i<3;i++)

              for(int j=0;j<12;j++)

              {

                
m_graph[i][j]=0;

                
if(mode==1)

                        feature_color[i][j]=0.0;

                
else

                        feature_color_1[i][j]=0.0;

              }

       COLORREF color;

       double h=0,s=0,v=0;

 

       for(long y=0;y

你可能感兴趣的:(vc++2010)