OpenCV
OpenCV是一個(gè)很流行的圖像處理庫(kù),,它為圖像處理算法研究提供了很好的平臺(tái),,甚至很多產(chǎn)品在OpenCV的基礎(chǔ)上稍作修改就可以達(dá)到目標(biāo)。有關(guān)OpenCV的介紹,,abruzzi有一篇不錯(cuò)的介紹帖子(http://www./topic/463668),,所以這里就不再做詳細(xì)介紹。 Why OpenCV + Ruby ,? 學(xué)院派的圖像處理研究者喜歡用MATLAB,,而實(shí)際產(chǎn)品開發(fā),則用C/C++居多,特別是嵌入式系統(tǒng),,最終都要用C/C++重新實(shí)現(xiàn)算法甚至要用匯編優(yōu)化部分代碼,。 當(dāng)然,很多公司是學(xué)院派和工程派兼之,。 用MATLAB的好處是可以快速實(shí)現(xiàn)算法,,缺點(diǎn)是當(dāng)你想把算法變成產(chǎn)品的時(shí)候,要經(jīng)過一個(gè)比較長(zhǎng)的過程,,要把算法用C/C++再實(shí)現(xiàn)一遍,。 OpenCV本身就是用C++寫的,而且很多算法已經(jīng)經(jīng)過了優(yōu)化,,性能不錯(cuò),。因此如果直接基于OpenCV開發(fā)算法,在最終轉(zhuǎn)化為產(chǎn)品的時(shí)候就很方便,。 直接基于OpenCV開展算法研究的一個(gè)最大問題是缺乏快速驗(yàn)證的平臺(tái),。雖然OpenCV提供了highgui用于簡(jiǎn)單的結(jié)果展示,但是離“方便”還是缺很遠(yuǎn),。我過去是用VC/MFC構(gòu)建開發(fā)平臺(tái),,提供了很多方便的功能輔助算法研究,但是平臺(tái)的構(gòu)建和維護(hù),,以及功能的增加都要花費(fèi)巨大的努力,,算法研究人員要為維護(hù)平臺(tái)而煞費(fèi)苦心。 一個(gè)通用的,,易于維護(hù),,可擴(kuò)展的平臺(tái)對(duì)圖像處理算法研究非常有幫助。 Ruby語(yǔ)言擁有容易學(xué)習(xí),,語(yǔ)法優(yōu)雅,,表達(dá)能力強(qiáng)的特點(diǎn),而且加上RubyGnome2 GUI庫(kù),,可以很方便地實(shí)現(xiàn)理想中的圖像處理算法研究平臺(tái),。 另外,還有其他幾個(gè)因素使得Ruby適合做這樣的平臺(tái): 1. RubyInline可以讓你在ruby程序中嵌入C代碼,,這對(duì)于嘗試一些貼近底層的算法調(diào)整非常方便,。 2. Ruby的C擴(kuò)展還算比較容易編寫。 3. Ruby是動(dòng)態(tài)語(yǔ)言,,可以方便地為平臺(tái)增添插件功能,,或者提供一個(gè)腳本控制臺(tái)。 在這里不能不提到Python,,Python是一門優(yōu)秀的腳步語(yǔ)言,,也有很多庫(kù)支持,,特別是OpenCV官方就提供了Python的綁定。用Ruby或是Python只是個(gè)人喜好的問題,。 Tui Image Studio 這是一個(gè)用Ruby寫的,,支持OpenCV的跨平臺(tái)圖像算法研究平臺(tái)軟件。它為圖像處理研究提供了許多基本設(shè)施,,例如直方圖查看,,區(qū)域分割與選擇,攝像頭連接等,,而更多的圖像處理算法則通過插件的形式來提供,。 當(dāng)你想嘗試一個(gè)新的算法的時(shí)候,如果現(xiàn)有的插件中不能實(shí)現(xiàn),,就可以新寫一個(gè)插件,。多個(gè)插件可以以鏈接的方式協(xié)同工作,,當(dāng)然插件也可以暴露供外部調(diào)用的接口,。 插件的界面和流程控制用ruby編寫。當(dāng)需要用C的時(shí)候,,你可以編寫C擴(kuò)展或者直接在插件的ruby代碼中嵌入C代碼,Tui平臺(tái)會(huì)通過RubyInline自動(dòng)為你編譯,。 通常情況下,為OpenCV本身提供的功能編寫插件,,包括UI代碼都在100行以內(nèi)。 在Tui中算法驗(yàn)證通過以后,,把這個(gè)算法在實(shí)際產(chǎn)品中實(shí)現(xiàn)則相對(duì)簡(jiǎn)單:因?yàn)槎际腔贠penCV,增加的算法代碼也都是用C寫的,。 你編寫的插件越多,積累的算法也就越多,,下一步算法研究也就越容易,。 另外,,Tui平臺(tái)還提供分布式處理工具:有些算法需要巨大的運(yùn)算量,要對(duì)一個(gè)數(shù)萬(wàn)張圖片的圖庫(kù)驗(yàn)證一個(gè)算法需要很長(zhǎng)的時(shí)間,,這個(gè)時(shí)候你就需要幾臺(tái)或數(shù)十臺(tái)PC來進(jìn)行并行運(yùn)算。Tui為你提供了這樣的便捷工具,,你可以發(fā)布你的插件到所有安裝了Tui的機(jī)器并分配驗(yàn)證任務(wù),,最后收集結(jié)果報(bào)告,。 Tui Image Studio截圖: 圖中演示了Canny邊緣檢測(cè),,直方圖,高通濾波,,以及一個(gè)從攝像頭獲取實(shí)時(shí)視頻并做人臉檢測(cè)的插件,。 Conclusion OpenCV+Ruby為圖像處理研究提供了一個(gè)利器,可以快速驗(yàn)證算法并平滑過渡到最終產(chǎn)品,。Ruby用作GUI程序開發(fā)已不僅僅是玩具而已,,RubyGnome2可以用于開發(fā)復(fù)雜的,嚴(yán)肅的桌面應(yīng)用程序,。 |
|