日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RobHess的SIFT源码分析:综述

發布時間:2025/3/21 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RobHess的SIFT源码分析:综述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最初的目的是想做全景圖像拼接,一開始找了OpenCV中自帶的全景拼接的樣例,用的是Stitcher類,可以很方便的實現全景拼接,而且效果很好,但是不利于做深入研究。

Stitcher類使用方法請查OpenCV API:http://docs.opencv.org/2.4.4/modules/refman.html,搜索Stitcher

使用OpenCV中自帶的Stitcher類的全景圖像拼接樣例下載http://download.csdn.net/detail/masikkk/5661075

圖像拼接及源碼下載參見此篇博文:基于SIFT特征的全景圖像拼接

后來想用OpenCV中自帶的SIFT特征檢測器進行特征檢測和拼接,但還是有隔靴搔癢的感覺,接觸不到SIFT算法的本質,

看到網上大多數都是使用RobHess的SIFT源碼,自己也下載了一份進行了分析。

RobHess的SIFT源碼下載地址:http://robwhess.github.io/opensift/

一些SIFT算法和全景拼接測試用圖下載,包含牛津大學網站上提供的測試圖:http://download.csdn.net/detail/masikkk/5702749


一開始也是感覺比較亂,不知道怎么用,接觸了一段時間后比較清晰了,下面說一下RobHess的SIFT源碼中的幾個文件都是做什么用的,方便剛接觸的同學學習。

(1)?imgfeatures.h和imgfeatures.c文件

imgfeatures.h中有SIFT特征點結構struct feature的定義,這個結構很重要,后面都要用到,除此之外還有一些特征點的導入導出以及特征點繪制函數的聲明。

對應的imgfeatures.c文件中是特征點的導入導出以及特征點繪制函數的實現。

?imgfeatures.h和imgfeatures.c的源碼分析在這里:RobHess的SIFT源碼分析:imgfeatures.h和imgfeatures.c文件

里面有特征點結構struct feature的詳細說明。


(2) utils.h和utils.c文件

這兩個文件中是一些圖像基本操作的函數,包括:
1、獲取某位置的像素點
2、設置某位置的像素點(8位,32位和64位),
3、計算兩點之間的距離的平方
4、在圖片某一點畫一個“X”
5、將兩張圖片合成為一個(在特征匹配中用到),高是二者之和,寬是二者的較大者。


(3) sift.h和sift.c文件

這兩個是最重要的,里面的內容說白了很簡單,就是兩個特征點檢測函數sift_features()和?_sift_features(),

sift_features()是用默認參數進行特征點檢測,?_sift_features()允許用戶輸入各種檢測參數,其實sift_features()中也是再次調用_sift_features()函數。

所以,你只需提供原圖像和存儲特征點的數組以及其他一些檢測參數,然后調用sift_features()或 _sift_features()就可完成SIFT特征點檢測。

但是這兩個文件分析起來也是最復雜的。

sift.h中有默認的各種特征檢測中用到的參數的宏定義,sift.c中是檢測函數的實現,是最核心的一個文件,里面的一些未暴露接口的本地函數就有31個之多。

仔細分析完后發現大神就是大神,程序寫的條理非常清楚,尤其是函數_sift_features()的函數體,從頭到尾的幾部分正好對應SIFT算法的幾個步驟,

把一些細節全部放在子函數中,非常清楚明了。

關于SIFT算法的原理,可以參加下面幾篇文章,寫的都不錯:

小魏的SIFT原理與源碼分析系列文章:【OpenCV】SIFT原理與源碼分析

zddmail的SIFT算法詳解,講的不錯,尤其一些細節講的與眾不同:SIFT算法詳解

Rachel-Zhang的SIFT算法分析:SIFT特征提取分析

July的經典算法研究系列中的SIFT算法分析:經典算法研究系列:九、圖像特征提取與匹配之SIFT算法

以及July的教你一步一步實現SIFT算法:九之再續:教你一步一步用c語言實現sift算法、上

tornadomeet的SIFT算法分析:特征點檢測學習_1(sift算法)

以及這篇博客中的SIFT算法分析:SIFT 特征提取算法總結

還有這篇結合RobHess源碼的SIFT算法分析:SIFT算法研究

還有我覺得講的挺詳細的一篇文章:http://download.csdn.net/detail/masikkk/5661453

或者你也可以直接讀David.Lowe發表的英文原版論文:

David.Lowe1999年發表在ICCV的SIFT論文:http://download.csdn.net/detail/masikkk/5661441

David.Lowe2004年發表在IJCV的SIFT改進論文:http://download.csdn.net/detail/masikkk/5661447

sift.h和sift.c的源碼分析在這里:RobHess的SIFT源碼分析:sift.h和sift.c文件


(4) minpq.h和minpq.c文件

這兩個文件中實現了最小優先級隊列(Minimizing Priority Queue),也就是小頂堆,在k-d樹的建立和搜索過程中要用到。


(5) kdtree.h和kdtree.c文件

這兩個文件中實現了k-d樹的建立以及用BBF(Best Bin First)算法搜索匹配點的函數。

如果你需要對兩個圖片中的特征點進行匹配,就要用到這兩個文件。

關于k-d樹算法的講解,可參考這篇文章:k-d tree算法

以及這篇:k-d tree算法的研究

還有這篇,里面講解了k-d樹,BBF和RANSAC:SIFT特征點匹配與消除錯配:BBF,RANSAC

以及July的一篇:從K近鄰算法、距離度量談到KD樹、SIFT+BBF算法

kdtree.h和kdtree.c的源碼分析在這里:RobHess的SIFT源碼分析:kdtree.h和kdtree.c文件


(6) xform.h和xform.c文件

這兩個文件中實現了RANSAC算法(RANdom SAmple Consensus 隨機抽樣一致)。

RANSAC算法可用來篩選兩個圖像間的SIFT特征匹配并計算變換矩陣。

你可以單純利用RANSAC算法篩選兩個圖像間的SIFT特征匹配,以得到更好的匹配結果,

見此文:利用RANSAC算法篩選SIFT特征匹配

或者想要進行全景拼接時,利用RANSAC算法計算兩個圖像間的變換矩陣。

關于RANSAC算法的講解,可參考這篇文章:隨機抽樣一致 RANSAC

以及這篇,里面有用RANSAC算法解決線性回歸問題的例子:我的數學之美(一)——RANSAC算法詳解

以及這篇,里面講解了k-d樹,BBF和RANSAC:SIFT特征點匹配與消除錯配:BBF,RANSAC

xform.h和xform.c的源碼分析在這里:RobHess的SIFT源碼分析:xform.h和xform.c文件


(7) 其他文件:dspfeat.c,match.c,siftfeat.c

這幾個文件中是一些使用SIFT算法的小例子:

dspfeat.c文件可以從預先保存的特征點文件中讀取特征點并顯示在圖片上。

match.c文件可以檢測兩個圖像中的特征點并進行匹配。

siftfeat.c文件利用SIFT算法檢測特征點,有一些控制臺操作提示。


from:?http://blog.csdn.net/masibuaa/article/details/9191309

總結

以上是生活随笔為你收集整理的RobHess的SIFT源码分析:综述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。