試試通俗的解釋一下SIFT演算法

2021-10-13 18:56:37 字數 2295 閱讀 6742

sift中文名為尺度不變特徵變換,我不知道為什麼叫這個名字,我覺得叫尺度變換特徵不變更合理。即sift特徵提取出來的影象的區域性特徵,其對旋轉、尺度縮放、亮度變化保持不變性,對視角變化、仿射變換、雜訊也保持一定程度的穩定性。大白話就是無論怎麼剪裁,旋轉,提取到的特徵點還是那些。

尺度就是的大小,即在不同尺寸上對提取極值點,這個極值點就是特徵點。

上圖左邊很明顯的分為較大和較小的兩部分,代表著同乙個的不同尺寸,這個尺寸變化是通過降取樣實現的,簡單來說就是對一定區域內的畫素點取平均值,用這個平均值代替這個區域內的畫素,以此實現縮小的目的。兩部分中又包含5個尺寸相同的,這五個雖然尺寸相同,但是模糊程度不同,那麼怎麼讓變模糊呢?通過高斯函式。通過設定不同的尺度空間座標σ,來讓的模糊程度不同。上圖左邊只有兩組,實際上組數可能更多,很想金字塔,因此稱為高斯模糊金字塔。

上圖左邊兩組內兩兩「相減」,得到右邊的藍色部分,這個「相減」稱為高斯差分,看名字就像個包含數學的複雜的過程,博主最頭痛數學了。

右邊的到的金字塔稱為高斯差分金字塔。

得到高斯差分金字塔後,開始最重要的步驟:檢測極值點。

如圖,叉點是我們待檢測的點,將叉點與其周邊、上下層一共26個點進行比較,這裡又是一番數學的東西,令人頭疼。反正一通操作猛如虎,極值點就算出來了。

下圖是以上全過程的例項。感受一下高斯模糊和高斯差分的結果。

通過第1步算出了極值點,然而影象的畫素點是乙個乙個的,學名叫「離散」。而真正的極值點是在連續的「線」上找到的,比如在sinx函式上找極值點,假如你只有sinx影象上0、π/3,、π這三個點,那我們找到的極值點是π/3,而實際的極值點應該是π/2上。影象找到的極值點也類似,我們需要對影象上的點擬合乙個連續的函式,找到真正的極值點。

經過上一步,我們找到了很多極值點,這個極值點反應在影象上一般是物體的邊緣、明暗對比比較強烈的地方。接下來確定極值點的方向。

首先在找到的極值點周圍畫個圈,類似這樣。箭頭暫時先不用管。

然後我們對圓圈內所有的點求方向,那麼什麼叫點的方向呢?請看下圖。

圖中target pixel就是我們要求方向的點了,圖中點的畫素值和座標已經標出。接下來又是數學問題,這次的數學問題比較簡單,我們只要相減就夠了。就像這樣。

得到了差值之後,再計算arctan值,得到的角度就是方向了。

還可以求影象梯度。

剛才上圖圓圈中的箭頭就是這麼來的了,箭頭的長度根據的是影象梯度。

將箭頭不同方向的數量統計一下,箭頭數量最多的就是主方向了。有時候會把數量第二多的方向作為輔方向。

最後一步就是描述得到的關鍵點資訊。上圖是取得是8×8的範圍,實際上sift取得是16×16的範圍。

其中劃分為4×4的大方格,統計每個大方格中各個方向的數量。

近似取8個方向,方向的數量以箭頭長短表示。那麼16個格仔,每個格仔8個方向,一共需要16×8=128個描述。因此,每個sift特徵點是用128維的向量表示的,乙個有n個特徵點,那麼描述這個的矩陣就是n×128維。

由於sift演算法的關鍵點選區,經過了的尺寸放縮、模糊,特徵描述向量裡也包含了方向,因此它對一些常見的影象攻擊具有魯棒性。

同一截圖比對

同一的旋轉比對,有點亂但感覺好像還行哈哈哈哈。

想跑一下**試試的朋友們可以去github上搜sift,**有很多,我也是github上找的。

通俗的解釋一下正規化

正規化是什麼呢?比如拷貝來一段瞅瞅 正規化是符合某一種級別的關係模式的集合。關聯式資料庫中的關係必須滿足一定的要求,滿足不同程度要求的為不同正規化。我知道不用說,你肯定一臉懵逼!因為我也是!下面我就通俗的來解釋一下三大正規化吧,不喜勿噴,個人理解 第一正規化 其實就是讓列保持原子性,原子性就是不能再...

解釋一下numa

numa 非一致性儲存 當多個處理器訪問同乙個儲存器時,會有效能損失,numa通過提供分離的儲存器給各個處理器。numa系統的結點通常是由一組cpu和本地記憶體組成,有的結點可能還有i o子系統。由於每個結點都有自己的本地記憶體,因此全系統的內存在物理上是均勻分布的,每個結點訪問本地記憶體和訪問其它...

通俗的解釋一下湧泉碼的工作思想

要想充分理解湧泉碼我們先來講一下傳統的方式 傳送端和接收端雙向溝通,傳送端給接受端傳送乙個包,接收端接受成功以後會反饋乙個確認資訊ack,說明我已經收到了,但是,當使用者量非常大的時候,ack越來越多,就會產生反饋風暴,造成堵塞。之後我們就來介紹一下湧泉碼 圖為簡單的原理圖 先來通俗的解釋一下,首先...