OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五
OpenCV學(xué)習(xí)筆記(五十一)——imge stitching圖像拼接stitching
stitching是OpenCV2.4.0一個(gè)新模塊,功能是實(shí)現(xiàn)圖像拼接,所有的相關(guān)函數(shù)都被封裝在Stitcher類當(dāng)中。這個(gè)類當(dāng)中我們可能用到的成員函數(shù)有createDefault、estimateTransform、composePanorama、stitch。其內(nèi)部實(shí)現(xiàn)的過程是非常繁瑣的,需要很多算法的支持,包括圖像特征的尋找和匹配,攝像機(jī)的校準(zhǔn),圖像的變形,曝光補(bǔ)償和圖像融合。但這些模塊的接口、調(diào)用,強(qiáng)大的OpenCV都為我們搞定了,我們使用OpenCV做圖像拼接,只需要調(diào)用createDefault函數(shù)生成默認(rèn)的參數(shù),再使用stitch函數(shù)進(jìn)行拼接就ok了。就這么簡單!estimateTransform和composePanorama函數(shù)都是比較高級(jí)的應(yīng)用,如果各位對(duì)stitching的流程不是很清楚的話,還是慎用。
實(shí)例也非常簡單,下載鏈接哦:http://download.csdn.net/detail/yang_xian521/4321158。
輸入原圖(為了顯示,我都?jí)嚎s過):
OpenCV學(xué)習(xí)筆記(五十二)——號(hào)外:OpenCV 2.4.1 又出來了。。。。。
距離2.4.0放出來才一個(gè)月。兒童節(jié)當(dāng)天2.4.1就出爐了。。。。真心跟不上節(jié)奏啊,路漫漫其修遠(yuǎn)兮。。。。
這次主要的改變還是bug的修訂,之前有朋友告訴我,說他的2.3.1版本說什么都不能成功配置CUDA,后來他用2.2版本就成功了,看來新出的版本bug還是很多的,也不能盲目求新。這次的2.4.1版本更新如下:
GPU模塊支持了CUDA4.1、CUDA4.2版本,添加了一個(gè)文件字符串存儲(chǔ)回讀的API接口
完善了光流法的clacOpticalFlowPyrLK,支持了金字塔圖像作為輸入
完善了文檔,使文檔和版本更加對(duì)應(yīng)
修正了SURF、MSER的python包裝
修正了其他45處bug
最近更新比較慢,感覺沒有學(xué)習(xí)OpenCV過程有新的太大收獲,還請(qǐng)見諒
OpenCV學(xué)習(xí)筆記(五十三)——新版本2.4.2簡介&FREAK和ORB特征描述子效果對(duì)比features2d
OpenCV 2.4.2簡介
OpenCV從未放慢自己前進(jìn)的步法,就在7月4日,最新版的2.4.2又放出來了。與之同時(shí)放出的還有兩個(gè)網(wǎng)站http://opencv.org/和http://answers.opencv.org,前者作為一個(gè)正式的全新的官方用戶網(wǎng)站,簡單瀏覽了一下,應(yīng)該是一個(gè)對(duì)應(yīng)之前維基百科上的那個(gè)網(wǎng)站,是一個(gè)介紹性的新聞網(wǎng)站,對(duì)開發(fā)者的意義可能不是太大;后面這個(gè)網(wǎng)站就厲害了,是一個(gè)類似google討論組一樣的交流區(qū),大家可以在上面提問,留言,解答,我也剛剛注冊(cè)了個(gè)用戶,剛成立沒幾天已經(jīng)有60多個(gè)問題了,應(yīng)該還是很活躍的一個(gè)討論區(qū)。
還是老樣子,介紹一下新版本的更新以及改動(dòng):
現(xiàn)在支持IOS操作系統(tǒng)了!開發(fā)iphone的朋友們,你們也可以用OpenCV了,是不是內(nèi)牛滿面。
添加了一個(gè)新的特征點(diǎn)描述算法FREAK,這也是今年的CVPR的一個(gè)新算法,也是一個(gè)2值的特征,文章里說是根據(jù)人視網(wǎng)膜的原理,挺玄乎的,據(jù)說是效果比ORB和SURF都好,我要試試看。
對(duì)GPU的模塊進(jìn)一步優(yōu)化,對(duì)個(gè)別算法的性能有較大提升。
還修正了2.4.1的50多個(gè)bug。
介紹就這么多,感覺亮點(diǎn)就是網(wǎng)站的建設(shè)和這個(gè)FREAK特征,其他的還得慢慢摸索啊
FREAK和ORB特征描述子效果對(duì)比
ORB就是BRIEF的改進(jìn),BRIEF太簡單了,就不介紹了,有興趣的朋友自己看paper吧。ORB的paper我讀下來,感覺改進(jìn)主要有以下幾點(diǎn):用FAST作為特征點(diǎn)提取的算法,更快了,添加了特征點(diǎn)的主方向,這樣就具有了旋轉(zhuǎn)不變性。最后一點(diǎn)其實(shí)我也想到了,當(dāng)時(shí)看BRIEF的時(shí)候就想應(yīng)該可以優(yōu)化,就是ORB采用貪婪窮舉的方法得到了相關(guān)性較低的隨機(jī)點(diǎn)對(duì),還有一個(gè)改進(jìn)就是對(duì)于隨機(jī)點(diǎn)對(duì),受噪聲的影響很大BRIEF的辦法就是對(duì)原圖像濾波,降低噪聲的影響,ORB不在使用像素點(diǎn)的直接比較,而是選擇該像素為中心的一個(gè)小patch作為比較對(duì)象,提高了抗噪能力。
FREAK我只是大致看了下,理解可能不到位,我的理解是這個(gè)算法是基于人眼視網(wǎng)膜細(xì)胞的分布,中間密集,四周稀疏,從而在圖像中構(gòu)建很多的區(qū)域,當(dāng)然越靠近中心的區(qū)域采樣更密集,四周區(qū)域采樣稀疏,隨機(jī)對(duì)比各區(qū)域的像素得到一組2值特征,這個(gè)算法也關(guān)注了尺度和方向的問題,都有對(duì)應(yīng)的解決辦法,還根據(jù)了人眼看事物時(shí)眼睛不停的轉(zhuǎn)動(dòng),設(shè)計(jì)了一種級(jí)聯(lián)的搜索器,總而言之,我感覺這個(gè)算法也是受ORB和BRISK這種2值特征的啟發(fā)下的一種改進(jìn)吧。
下面就利用OpenCV對(duì)其進(jìn)行一下對(duì)比,值得說明的是,在2.4.2中,FREAK給出了pattern的訓(xùn)練代碼。
對(duì)比實(shí)驗(yàn)效果如下:(上圖為ORB,下圖為FREAK)
經(jīng)過篩選之后的特征點(diǎn)如下圖:(上圖為ORB,下圖為FREAK)
當(dāng)然,我這里只是個(gè)簡單的測(cè)試,其實(shí)并不能完全反應(yīng)實(shí)際的性能,因?yàn)槲疫@里FREAK的特征點(diǎn)位置的檢測(cè)用的是SURF,而ORB用的是FAST。但從我這里的比較效果來看,ORB要好很多。下面讓我來對(duì)比一下算法的運(yùn)行時(shí)間:
| ? | ORB | FREAK detection | FREAK extraction |
| debug | 0.317s | 0.301s | 0.167s |
| release | 0.094s | 0.162s | 0.085s |
雖然兩種算法不能直接比較,因?yàn)镕REAK沒有提供特征點(diǎn)位置檢測(cè)的算法,個(gè)人感覺如果FREAK采用FAST來做detection,確實(shí)速度應(yīng)該要逼ORB要快一些。
最后分享給大家我的工程鏈接:http://download.csdn.net/detail/yang_xian521/4421537
OpenCV學(xué)習(xí)筆記(五十四)——概述FaceRecognizer人臉識(shí)別類contrib?
在最新版的2.4.2中,文檔的更新也是一大亮點(diǎn),refrence manual擴(kuò)充了200多頁的內(nèi)容,添加了contrib部分的文檔。contrib就是指OpenCV中新添加的模塊,但又不是很穩(wěn)定,可以認(rèn)為是一個(gè)雛形的部分。這次結(jié)合refman的閱讀,介紹一下FaceRecognizer這個(gè)人臉識(shí)別類,這個(gè)類也是2.4.2更新日志里著重強(qiáng)調(diào)過的更新,配套的文檔也是相當(dāng)充實(shí)。這個(gè)類的基類也是Algorithm類,對(duì)于Algorithm類的簡單介紹,請(qǐng)參看我之前的blogOpenCV學(xué)習(xí)筆記(五十)——Algorithm類介紹(core),這個(gè)類內(nèi)的接口函數(shù)也是異常簡單,人臉識(shí)別的任務(wù)也就是兩大部分,訓(xùn)練和預(yù)測(cè),分別對(duì)應(yīng)著train函數(shù)和predict函數(shù),還有對(duì)應(yīng)的數(shù)據(jù)加載保存函數(shù)save和load。不過它當(dāng)然還可以調(diào)用其基類Algorithm的函數(shù)。特別說明的是,人臉識(shí)別中預(yù)測(cè)的參數(shù)也是可以調(diào)節(jié)的,但這里只給出了train和predict函數(shù),為啥沒有setparameter的函數(shù)呢,那是因?yàn)楦髦腥四樧R(shí)別方法的參數(shù)并不相同,要通過Algorithm的get和set函數(shù)實(shí)時(shí)的調(diào)整~~v5啊!
先來說說訓(xùn)練的過程,train函數(shù)的兩個(gè)參數(shù)也很簡單,訓(xùn)練的圖像組vector<Mat>和對(duì)應(yīng)的標(biāo)簽組vector<int>,這個(gè)label標(biāo)簽只需保證同一個(gè)人的標(biāo)簽相同即可,不需要保證圖像的按標(biāo)簽順序輸入,方便極了。對(duì)于預(yù)測(cè),有兩種調(diào)用,其中的參數(shù)有測(cè)試圖像、返回的標(biāo)簽值和測(cè)試樣本和標(biāo)簽樣本的相似性。返回的標(biāo)簽值為-1,說明測(cè)試樣本在訓(xùn)練集中無對(duì)應(yīng)或距離較遠(yuǎn)。這里用個(gè)FisherFace作為示例說明一下如何訓(xùn)練和預(yù)測(cè):
[cpp] view plain copy當(dāng)然我們也不需要每次使用都進(jìn)行一次訓(xùn)練,可以把訓(xùn)練好的模型通過save函數(shù)保存成一個(gè)文件,下次使用的時(shí)候只需load即可。
目前支持的3種人臉識(shí)別的方案:特征臉EigenFace、Fisher臉FisherFace、LBP直方圖LBPHFace。分別調(diào)用函數(shù)createEigenFaceRecognizer、createFisherFaceRecognizer、createLBPHFaceRecognizer建立模型。
對(duì)于EigenFace兩個(gè)輸入?yún)?shù),分別為PCA主成分的維數(shù)num_components和預(yù)測(cè)時(shí)的閾值threshold,主成分這里沒有一個(gè)選取的準(zhǔn)則,要根據(jù)輸入數(shù)據(jù)的大小而決定,通常認(rèn)為80維主成分是足夠的。除了這兩個(gè)輸入?yún)?shù)外,還有eigenvalues和eigenvectors分別代表特征值和特征向量,mean參數(shù)為訓(xùn)練樣本的平均值,projections為訓(xùn)練數(shù)據(jù)的預(yù)測(cè)值,labels為預(yù)測(cè)時(shí)的閾值。
對(duì)于FisherFace,和EigenFace非常相似,也有num_components和threshold兩個(gè)參數(shù)和其他5個(gè)參數(shù),FisherFace的降維是LDA得到的。默認(rèn)值為c-1,如果設(shè)置的初始值不在(0,c-1]的范圍內(nèi),會(huì)自動(dòng)設(shè)定為c-1。
特別需要強(qiáng)調(diào)的是,EigenFace和FisherFace的訓(xùn)練圖像和測(cè)試圖像都必須是灰度圖,而且是經(jīng)過歸一化裁剪過的。
對(duì)于LBPHFace,我想不用過多介紹,LBP簡單和效果是大家都很喜歡的,參數(shù)包括半徑radius,鄰域大小即采樣點(diǎn)個(gè)數(shù)neighbors,x和y方向的單元格數(shù)目grid_x,grid_y,還有兩個(gè)參數(shù)histograms為訓(xùn)練數(shù)據(jù)得到的直方圖,labels為直方圖對(duì)應(yīng)的標(biāo)簽。這個(gè)方法也要求訓(xùn)練和測(cè)試的圖像是灰度圖
接下來應(yīng)該結(jié)合文檔進(jìn)一步研究一下這個(gè)人臉識(shí)別類。我之前大量的人臉實(shí)驗(yàn)都是在matlab下進(jìn)行的,有了這個(gè)利器,我感覺會(huì)有越來越多的學(xué)生做老師和老板布置的project會(huì)選擇用OpenCV,而不是Matlab。希望我們都愛的OpenCV越來越好,越來越強(qiáng)大。歡迎交流
OpenCV學(xué)習(xí)筆記(五十五)——用OpenCV做人臉識(shí)別和性別識(shí)別contrib
人臉識(shí)別的故事說也說不完,調(diào)研的事還是交給大家吧。這里說的是用OpenCV做人臉識(shí)別。
因?yàn)槭钦嬲娜四樧R(shí)別,不是搞笑娛樂的東西,所以數(shù)據(jù)庫一定要強(qiáng)大的,推薦個(gè)網(wǎng)站http://www.face-rec.org/databases/。這里有最全的人臉庫的概述,希望大家能找到自己需要的人臉庫(PS:我現(xiàn)在特別需要一個(gè)3d的人臉庫,不知道哪位大俠知道如何free獲取,或者愿意共享給我那更是極好的了,先謝過咯)。這里簡單介紹兩個(gè)庫,ORL和Yale,ORL是一個(gè)輕量級(jí)的庫,Yale更為復(fù)雜,但并不是免費(fèi)的。
數(shù)據(jù)的準(zhǔn)備:在我們程序里需要讀取圖像和對(duì)應(yīng)的標(biāo)簽,這里采用CSV文件,是一種簡單的數(shù)據(jù)交互格式,在我們最常用的Excel里就支持這種格式。這種格式每條信息占一行。信息格式為:文件名;標(biāo)簽,例如C:/ORL/image.jpg;0。只要?jiǎng)?chuàng)建了一個(gè)CSV文件和對(duì)應(yīng)的圖像,你就可以對(duì)任何一個(gè)數(shù)據(jù)庫進(jìn)行訓(xùn)練了。當(dāng)然,這個(gè)CSV文件并不一定要自己手動(dòng)的創(chuàng)建,也可以Python腳本自己生成自己需要的CSV文件,對(duì)應(yīng)的腳本為\modules\contrib\doc\facerec\src\create_csv.py,唉,誰讓咱對(duì)這個(gè)腳本不熟悉,只能偷懶了,直接調(diào)\modules\contrib\doc\facerec\etc\at.txt或者\(yùn)samples\cpp\facerec_at_t.txt。這個(gè)txt對(duì)應(yīng)的是ORL的數(shù)據(jù)庫,其中的路徑就按照其改一下就好了。
至于人臉識(shí)別的具體實(shí)現(xiàn),我已經(jīng)在blogOpenCV學(xué)習(xí)筆記(五十四)——概述FaceRecognizer人臉識(shí)別類contrib提到了如何實(shí)現(xiàn)。\modules\contrib\doc\facerec\src很多很好的示例,我這里就不上傳代碼了。
最后再說一下人臉的標(biāo)定。因?yàn)閷?duì)Python也不是太熟悉,只給大家一個(gè)腳本文件吧,是\modules\contrib\doc\facerec\src\crop_face.py,通過這個(gè)腳本可以制作自己需要的人臉圖片大小。
性別識(shí)別和視頻中的識(shí)別在對(duì)應(yīng)的demo里都有介紹,我這里就不詳細(xì)說了,因?yàn)樾詣e識(shí)別無非就是把訓(xùn)練樣本的標(biāo)簽只有兩類:男性和女性。需要說明的是,EigenFace是基于PCA的,是一種非監(jiān)督的模型,不太適合性別識(shí)別的任務(wù),這里的demo用的是FisherFace。對(duì)于視頻的人臉識(shí)別,無非就是添加了個(gè)VideoCapture和一個(gè)人臉檢測(cè)的CascadeClassifier。
關(guān)于訓(xùn)練的模型的保存和調(diào)用,就是用save和load函數(shù),好簡單的,就不介紹了吧。
最后說一下偽彩色圖的這個(gè)函數(shù)applyColorMap,其中colorMap參數(shù)是用來選擇偽彩色圖的樣式。因?yàn)槿搜蹖?duì)顏色的敏感的程度要比對(duì)亮度的敏感程度要高,所以用偽彩色圖 的對(duì)比效果要更好。這才醫(yī)學(xué)圖像處理中用的比較多,以前的B超現(xiàn)在都用彩超了,價(jià)格竟然要貴好多,其實(shí)就是一個(gè)偽彩色處理罷了,醫(yī)院真黑啊!!
from: http://blog.csdn.net/yang_xian521/article/category/910716
總結(jié)
以上是生活随笔為你收集整理的OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV学习笔记(四十六)——FAS
- 下一篇: OpenCV学习笔记(五十六)——Inp