圖像拼接: sift 的理解

看了幾天的 sift 也算是對它有一了點的瞭解 這裏描述了我對它的理解!算法

sift 就是爲了圖像特徵比較作的算法.它主要就是爲了用數學的方法描述:圖像中特定點周圍一塊區域, 從而能夠比較這塊區域與另外一塊區域的差別.編程

下面是詳細一點講述如何描述這個數學方法:數據結構

1. 數據結構: 這個區域在sift中選的是 4*4 也就是16個點或者說區域.而後按8個方向進行直方圖統計. 暈了吧!spa

       double feature[4][4][8]; 其實就是它..... (0,0)-(3,3) 區域內 8個不一樣方向的值累加起來源碼

 

2. 再說它的特性: 位置、尺度以及方向 的不變性 (這個好專業,更暈)數學

                   解釋一下: 位置不變,就是說, 你不可能把圖像每一點都弄成特徵點,因此你要找一個有表明性的點,而這個點,無論用什麼圖像都要能夠提取出來.圖像處理

            (其實能夠不用,多提一些,總有一些特徵點相同.) 就是說二張圖像有重合部分,你提出的二張重合部分的特徵點要同樣,否則如何比較呢.opencv

             尺度不變: 二張圖像,拍的桌比,有可能大,有可能小,因此你得把這狀況考慮到.作法就是 把圖像多複製幾份,而後放大縮小,這樣就能夠了基礎

                                     方向不變:   就是處理對同一個桌子拍照有可能手一抖,相機拿歪了, 這狀況.  SIFT 的處理就是選方向(直方圖,最大的 80%方向,可能有不少因此要把這個點複製幾份) ,而後以這個方向作1中所說的特徵提取.方法

             還有什麼光照不變: 專業講法就是 用那個什麼 DOG金字塔. 講白點,就是用 圖像的梯度圖來作....(什麼是梯度? 就是 (x1 - x0) + (y1 -y0)  )看不懂就看下圖像處理基礎吧! 

 

3. 這樣幾個問題就都解決了.若是你想加上什麼仿射變性,也無非就是把圖像的縮放的2*2縮放矢量,變成 3*3圖像變換矢量.

 

我這裏講的簡單,但實際實現仍是有不少細節問題要處理的.好比說什麼 dog 算子對梯度值敏感,爲何要模糊,之類,只要理解了就比較好處理了.不過不理解爲何用高斯模糊,爲了高大上嗎? 理解了就比較好編程了, 再也不用看 opencv 裏面 那高深的源碼. 真心頭暈! 

相關文章
相關標籤/搜索