首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能获得两个图像之间的旋转和缩放,而每个图像只有一个Surf描述符?

是否有可能获得两个图像之间的旋转和缩放,而每个图像只有一个Surf描述符?
EN

Stack Overflow用户
提问于 2011-09-28 06:28:48
回答 1查看 1.4K关注 0票数 1

我正在使用Surf进行地标识别。这就是我想的过程:

1)事先为每个地标保存一个Surf描述符

2)用户拍摄地标(如建筑物)的照片

3)为该图像(照片)计算Surf描述符

4)将该描述符与存储的每个地标描述符进行比较,并选择11个最接近的特征点中具有最低DMatch.distance的一个作为识别的地标

5)我想计算得到的图像和存储的地标图像之间的旋转和比例。

我的理解是,我只能通过关键点获得这个旋转和缩放比例,因为特征描述符只是关键点的唯一简化表示。因此,我必须保存每个地标的关键点和特征描述符。是那么回事吗?

这就是我现在正在做的:

代码语言:javascript
复制
cv::SurfFeatureDetector surf(4000);
..
surf.detect(image1, keypoints1); 
surf.detect(image2, keypoints2);
..
cv::SurfDescriptorExtractor surfDesc;
surfDesc.compute(image1, keypoints1, descriptor1);
surfDesc.compute(image2, keypoints2, descriptor2);
..
vector<cv::DMatch> descriptorsMatch;
BruteForceMatcher<cv::L2<float> > brute;
brute.match(desc1, desc2, descriptorsMatch);

//Use only the 11 best matched keypoints;
nth_element( descriptorsMatch.begin(), descriptorsMatch.begin()+10, descriptorsMatch.end() );
descriptorsMatch.erase( descriptorsMatch.begin()+11, descriptorsMatch.end() );
..
for ( .. it = descriptorsMatch.begin(); it != descriptorsMatch.end() .. )
{
  distanceAcumulator +=it->distance;
  angleAcumulator += abs(keypoints1[it->queryIdx].angle - keypoints2[it->trainIdx].angle) % 180 ;
  scaleAcumulator1 +=keypoints1[it->queryIdx].size;
  scaleAcumulator2 +=keypoints2[it->trainIdx].size;
}
angleBetweenImages = angleAcumulator/11;
scaleBetweenImages = scaleAcumulator1/scaleAcumulator2;
similarityBetweenImages = distanceAcumulator/11;
.. 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-08 14:34:57

仅仅比较描述符的比例和它们的旋转是幼稚的,通常是行不通的。你需要的是应用一些几何模型来找到照片之间的关系。在这本书http://www.robots.ox.ac.uk/~vgg/hzbook/中可以看到更多,特别是第二部分:双视图几何。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7576421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档