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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

RobHess的SIFT源码分析:综述

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

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

Stitcher類使用方法請(qǐng)查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特征檢測(cè)器進(jìn)行特征檢測(cè)和拼接,但還是有隔靴搔癢的感覺,接觸不到SIFT算法的本質(zhì),

看到網(wǎng)上大多數(shù)都是使用RobHess的SIFT源碼,自己也下載了一份進(jìn)行了分析。

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

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


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

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

imgfeatures.h中有SIFT特征點(diǎn)結(jié)構(gòu)struct feature的定義,這個(gè)結(jié)構(gòu)很重要,后面都要用到,除此之外還有一些特征點(diǎn)的導(dǎo)入導(dǎo)出以及特征點(diǎn)繪制函數(shù)的聲明。

對(duì)應(yīng)的imgfeatures.c文件中是特征點(diǎn)的導(dǎo)入導(dǎo)出以及特征點(diǎn)繪制函數(shù)的實(shí)現(xiàn)。

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

里面有特征點(diǎn)結(jié)構(gòu)struct feature的詳細(xì)說明。


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

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


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

這兩個(gè)是最重要的,里面的內(nèi)容說白了很簡(jiǎn)單,就是兩個(gè)特征點(diǎn)檢測(cè)函數(shù)sift_features()和?_sift_features(),

sift_features()是用默認(rèn)參數(shù)進(jìn)行特征點(diǎn)檢測(cè),?_sift_features()允許用戶輸入各種檢測(cè)參數(shù),其實(shí)sift_features()中也是再次調(diào)用_sift_features()函數(shù)。

所以,你只需提供原圖像和存儲(chǔ)特征點(diǎn)的數(shù)組以及其他一些檢測(cè)參數(shù),然后調(diào)用sift_features()或 _sift_features()就可完成SIFT特征點(diǎn)檢測(cè)。

但是這兩個(gè)文件分析起來也是最復(fù)雜的。

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

仔細(xì)分析完后發(fā)現(xiàn)大神就是大神,程序?qū)懙臈l理非常清楚,尤其是函數(shù)_sift_features()的函數(shù)體,從頭到尾的幾部分正好對(duì)應(yīng)SIFT算法的幾個(gè)步驟,

把一些細(xì)節(jié)全部放在子函數(shù)中,非常清楚明了。

關(guān)于SIFT算法的原理,可以參加下面幾篇文章,寫的都不錯(cuò):

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

zddmail的SIFT算法詳解,講的不錯(cuò),尤其一些細(xì)節(jié)講的與眾不同:SIFT算法詳解

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

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

以及July的教你一步一步實(shí)現(xiàn)SIFT算法:九之再續(xù):教你一步一步用c語(yǔ)言實(shí)現(xiàn)sift算法、上

tornadomeet的SIFT算法分析:特征點(diǎn)檢測(cè)學(xué)習(xí)_1(sift算法)

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

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

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

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

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

David.Lowe2004年發(fā)表在IJCV的SIFT改進(jìn)論文:http://download.csdn.net/detail/masikkk/5661447

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


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

這兩個(gè)文件中實(shí)現(xiàn)了最小優(yōu)先級(jí)隊(duì)列(Minimizing Priority Queue),也就是小頂堆,在k-d樹的建立和搜索過程中要用到。


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

這兩個(gè)文件中實(shí)現(xiàn)了k-d樹的建立以及用BBF(Best Bin First)算法搜索匹配點(diǎn)的函數(shù)。

如果你需要對(duì)兩個(gè)圖片中的特征點(diǎn)進(jìn)行匹配,就要用到這兩個(gè)文件。

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

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

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

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

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


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

這兩個(gè)文件中實(shí)現(xiàn)了RANSAC算法(RANdom SAmple Consensus 隨機(jī)抽樣一致)。

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

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

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

或者想要進(jìn)行全景拼接時(shí),利用RANSAC算法計(jì)算兩個(gè)圖像間的變換矩陣。

關(guān)于RANSAC算法的講解,可參考這篇文章:隨機(jī)抽樣一致 RANSAC

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

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

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


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

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

dspfeat.c文件可以從預(yù)先保存的特征點(diǎn)文件中讀取特征點(diǎn)并顯示在圖片上。

match.c文件可以檢測(cè)兩個(gè)圖像中的特征點(diǎn)并進(jìn)行匹配。

siftfeat.c文件利用SIFT算法檢測(cè)特征點(diǎn),有一些控制臺(tái)操作提示。


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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。