zoukankan      html  css  js  c++  java
  • 图像拼接: sift 的理解

    看了几天的 sift 也算是对它有一了点的了解 这里描述了我对它的理解!

    sift 就是为了图像特征比较做的算法.它主要就是为了用数学的方法描述:图像中特定点周围一块区域, 从而可以比较这块区域与另一块区域的差异.

    下面是详细一点讲述如何描述这个数学方法:

    1. 数据结构: 这个区域在sift中选的是 4*4 也就是16个点或者说区域.然后按8个方向进行直方图统计. 晕了吧!

           double feature[4][4][8]; 其实就是它..... (0,0)-(3,3) 区域内 8个不同方向的值累加起来

    2. 再说它的特性: 位置、尺度以及方向 的不变性 (这个好专业,更晕)

                       解释一下: 位置不变,就是说, 你不可能把图像每一点都弄成特征点,所以你要找一个有代表性的点,而这个点,不管用什么图像都要可以提取出来.

                (其实可以不用,多提一些,总有一些特征点相同.) 就是说二张图像有重合部分,你提出的二张重合部分的特征点要一样,不然如何比较呢.

                 尺度不变: 二张图像,拍的桌比,有可能大,有可能小,所以你得把这情况考虑到.做法就是 把图像多复制几份,然后放大缩小,这样就可以了

                                         方向不变:   就是处理对同一个桌子拍照有可能手一抖,相机拿歪了, 这情况.  SIFT 的处理就是选方向(直方图,最大的 80%方向,可能有很多所以要把这个点复制几份) ,然后以这个方向做1中所说的特征提取.

                 还有什么光照不变: 专业讲法就是 用那个什么 DOG金字塔. 讲白点,就是用 图像的梯度图来做....(什么是梯度? 就是 (x1 - x0) + (y1 -y0)  )看不懂就看下图像处理基础吧! 

    3. 这样几个问题就都解决了.如果你想加上什么仿射变性,也无非就是把图像的缩放的2*2缩放矢量,变成 3*3图像变换矢量.

    我这里讲的简单,但实际实现还是有很多细节问题要处理的.比如说什么 dog 算子对梯度值敏感,为什么要模糊,之类,只要理解了就比较好处理了.不过不理解为什么用高斯模糊,为了高大上吗? 理解了就比较好编程了, 不再用看 opencv 里面 那高深的源码. 真心头晕! 

  • 相关阅读:
    移动端,多屏幕尺寸高清屏retina屏适配的解决方案
    angular 关于 factory、service、provider的相关用法
    2016最新手机号码正则、身份证JS正则表达式
    凸包总结
    BZOJ 3653: 谈笑风生(DFS序+可持久化线段树)
    BZOJ 3652: 大新闻(数位DP+概率论)
    BZOJ 1062: [NOI2008]糖果雨(二维树状数组)
    纪中集训 Day 8 & Last Day
    纪中集训 Day 7
    纪中集训 Day 6
  • 原文地址:https://www.cnblogs.com/signal/p/4446573.html
Copyright © 2011-2022 走看看