基于图像特征的检索

本文介绍了一种基于图像特征的检索方法,通过提取颜色特征并采用投票法进行相似图像匹配。该方法首先将图像分为子块,从每个子块提取RGB直方图,之后与数据库中的图像特征对比,最终整合子块信息给出图像检索结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图像的检索

一种是将图像的语义进行检索,即之间检索文字,这样就需要认为定义图片的关键字;

另一种是提取图像的底层特征,然后检索特性相近的图像。

在辅导本科生的毕业设计时,采用的是基于特征的图像检索。

下面是简单的基于颜色特征的检索,采用的库是来自:Corel5k数据集。数据源

(1)首先将图像分成2*2子块,每一块分别提取颜色特征3个分量r,g,b直方图,量化等级为8,,得到累积直方图,最后一个等级值为1,因此一个子块的特征为3*7=21个

(2)然后将每个子块与数据库中数据(训练好的,按照(1)中方法)求距离,

(3)根据投票法排序得到排名,显示。


其中将数据存在sql server2008中,一共23个列,包括r(0~7)g(0~7)b (0~7) imgKeyword  imgPath

vc6.0连接·sql server使用的是ado连接方式。ado集成类

ADO连接有ODBC ,  OLEDB两种方式,主要用的OLEDB

其中ODBC需要提供数据源,oledb是采用统一的方式处理,效率更高些。

首先需要import“”ADO类; 然后初始化com;然后connection建立连接;

ado操作中主要有三个智能指针:Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录


其中分块注意

vector<IplImage *>m_img;

void split_img(string name)
{

    IplImage* src=cvLoadImage(name.c_str(),3); 
    char *m_num=new char;
    int num=0;

    long img_width=src->width/SPLIT;
    long img_height=src->height/SPLIT;

    //实现图像分块
    vector<IplImage*> m_image; 
for (int i = 0; i < SPLIT;i++)//行
{
for (int j = 0; j < SPLIT; j++)//列
{

IplImage * temp=cvCloneImage(src);
CvRect rect;
rect.x=i *img_width;
rect.y= j *img_height;
rect.width= img_width;
rect.height=img_height;
cvSetImageROI(temp, rect);
IplImage* g=cvCreateImage(cvSize(rect.width,rect.height),temp->depth,temp->nChannels);
cvResize(temp,g,CV_INTER_LINEAR);

                        cvResetImageROI( temp);
m_image.push_back(g);//注意要有cvresize,不然g在存入后进行其他操作会出错,如果只是显示可以不用。直接g=temp;就可以

}
}
   }


排序·:采用的multimap

 multimap<double,CString>对每一个子块得到imgrank1 imgrank2 imgrank3 imgrank4

然后转为 multimap<CStirng,double > imgsearch1,imgsearch2,imgsearch3,imgsearch4

最后合并4个imgsearch,将CString相同的double相加。得到最后排序

实验代码





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值