兴趣点领域的归一化问题

最近在做特征描述问题,那首先第一步就是根据已知的兴趣点提取方法提取兴趣点:如harris ,sift, surf, orb ,fast等,

在opencv中这些方法最终的结果都会被保存在KeyPoint结构中,下面我们不防看下这个结构中都有什么东东

KeyPoint::KeyPoint(float x, float y, float _size, float _angle=-1, float _response=0, int _octave=0, int _class_id=-1)

Parameters:

  • x – x-coordinate of the keypoint
  • y – y-coordinate of the keypoint
  • _pt – x & y coordinates of the keypoint
  • _size – diameter of the meaningful keypoint neighborhood 对于这个参数,我不是特别清楚,暂时的理解是:如使用sift进行特征检测时,我们使用到了高斯金字塔,因为不同尺度具有不同的加权窗口,这里的size即加权窗口的大小,
  • _anglekeypoint orientation
  • _responsekeypoint detector response on the keypoint (that is, strength of the keypoint)
  • _octave – pyramid octave in which the keypoint has been detected
  • _class_id – object id

接下来我们需要将得到的不同大小的区域归一化的一个特定大小的patch块,设为patchSize

那么缩放尺度S = _size / patchSize

当时刚看到这个公式的时候以为写错了,因为我认为 S = patchSize / _size

想想,如果_size = 20 , patchSize = 40 , 我们想在要将大小为_size*_size的patch块缩放到大小为patchSize*patchSize的patch块

如果按照我原来的想法的话,那S  = 2,这显然是不对的,如果S = 2,那么就想当于图片要放大,即相同大小下图片表示的信息更少,即某些信息会丢失,这显然是不对的

我们现在是要将小图片的内容放到大图片中表示,显然相同大小的块中包含更多的细节,因此s = _size / patchSize = 0.5

 

接下来介绍如果得到归一化的patch块,需要使用到前面讲的内容:仿射变换详解 warpAffine

仿射变换需要知道以下参数:

旋转角度:Θ

变换尺度:S

仿射变换详解 warpAffine可知,

1、将兴趣点(kpt.pt.x , kpt.pt.y ) 作为图片的原点     平衡(-x ,- y)

2、旋转图片 : Θ

3、尺度缩放 : S

由于我们要得到以兴趣点kpt.pt为中心,大小为patchSize*patchSize的 patch块,又由于图片处理中以原点作为处理的起点,因此在这里需要将图片的原点设为patch块的左上角,

即需要平移(-patchSize / 2 , -patchSize / 2 ),而不需要将图片的原点设为图片的左上角(这里理解清楚非常重要)

4、平移 : (-patchSize / 2 , -patchSize / 2 )

 

那么变换矩阵

 

PS: 今天这个公式让我推了一天,只有基础知识扎实了,才能提高学习速度哇

 

posted @ 2014-10-27 23:12  dupuleng  阅读(277)  评论(0编辑  收藏  举报