基于OpenCV的BOW特征提取

本文介绍了如何在OpenCV中利用SIFT特征提取和BOW(Bag of Words)模型进行图像处理。首先,通过SIFT算子提取关键点信息,接着进行聚类形成词典。然后,通过计算直方图得到BOW特征,用于图像匹配和后续的分类任务。文章提供了代码解析和Demo示例。
摘要由CSDN通过智能技术生成

1. 前言

在OpenCV中使用SIFT特征提取算子进行特征提取是跟简单的事情了,通过调用API也就下面几行代码的事情

cv::SiftFeatureDetector detector;
std::vector<cv::KeyPoint> keypoint;
detector.detect(image, keypoint); //image是需要进行特征提取的图像
std::cout << "\ndetected SIFT feature point size: " << keypoint.size() << "\n";

//获得每个特征点的128维特征向量
cv::SiftDescriptorExtractor extractor;
cv::Mat des1;   //descriptor
extractor.compute(image, keypoint, des1);

但是在进行诸如匹配的时候由于提取出来的SIFT特征样本的数目是不同的,这就需要进行映射抽取,这就讲到了今天说到的BOW特征,抽取到BOW特征之后可以简单得进行欧式距离的比较,或是放入后面的分类器进行训练。

2. 实现原理

BOW模型的处理过程:
1. SIFT特征提取。SIFT 特征提取是求出图像的关键点信息,包括角度,大小以及强度。关键点,也就是能够代表图像关键信息的部分,这也是Bag of words中单词的组成。一个图像通常有很多的关键点。
2. 聚类。我们将每幅图像中的关键点信息添加到词袋中,并定义聚类中心的数量N。然后将词袋中的关键点通过Kmeans算法聚类到N个类中。同时得到这N个类的中心点组成N*128的dictionary,每个中心都可以代表这个类。
3. 求图像的直方图。将图像的关键点信息重新放到词包中,根据落在每个类中关键点的数量来得到图像的直方图,大小为1*N。将每幅图像进行处理,得到图像在BOW模型下的特征。
4. 图像匹配。将测试图像进行相同的处理,同样也得到1*N的特征。根据测试图像与训练图像特

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值