當需要做一些影像處理方面的學習和研究的時候,首要任務就是選擇一套合適的影像處理類庫,這期我們主要簡單介紹下各家影像庫的一些優缺點。OpenCV,Intel IPP,Halcon,MATLAB ,OpenGL,EmguCv,AForge.net,CxImage,FreeImage,paintlib,AGG,IPL,visDSK。不足之處,還請大家多多提建議,多謝!
1. OpenCV
簡介:OpenCV全稱是:Open Source Computer Vision Library。是Intel®開源計算機視覺庫。它由一系列 C 函式和少量 C++ 類構成,實現了影像處理和計算機視覺方面的很多通用演算法。OpenCV是一個基於(開源)發行的跨平臺計算機視覺庫,可以執行在Linux、Windows和Mac OS作業系統上。它輕量級而且高效——由一系列 C 函式和一些C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的介面,實現了影像處理和計算機視覺方面的很多通用演算法。OpenCV用C++語言編寫,它的主要介面也是C++語言,但是依然保留了大量的C語言介面。
OpenCV功能
提供對影像資料操作,影像/影片的輸入輸出,基本影像處理,結構分析,攝像頭定標,運動分析,目標識別以及基本的GUI等的函式介面。
OpenCV模組
cv – 核心函式庫;cvaux – 輔助函式庫;cxcore – 資料結構與線性代數庫;highgui – GUI函式庫;ml – 機器學習函式庫
特點:
免費,原始碼公開,是一個跨平臺的中、高層API 構成,它不依賴與其它的外部庫,儘管也可以使用某些外部庫。,為了完全獨立於IPL (INTEL的影像處理庫) OpenCV 複製了IplImage 和其它一些結構變數的宣告。
OpenCV 為Intel® Integrated PerformancePrimitives (IPP) 提供了透明的使用者使用介面。它對IPP不存在任何依賴。但如果安裝了IPP,那麼OpenCV將會透過自動載入IPP動態連結庫來獲取IPP的優勢,來提升速度。
2. Intel IPP
簡介:IPP“Intel Integrated Performance Primitives” ( Intel IPP )是一套跨平臺的軟體函式庫,
他提供了廣泛的多媒體功能:音訊解碼器(例如:H263 、 MPEG-4 )、影像處理 (JPEG) 、訊號處理、語音壓縮(例如:G723 、 GSM 、 AMR )和加密機制。
Intel IPP 針對大量的 Intel Microprocessor (微處理器)進行最佳化:Intel Pentium 4 處理器,採用 Intel Centrino 移動運算技術的 Intel Pentium M 處理器元件, Intel Itanium 2 處理器、 Intel Xeon 處理器以及採用 Intel XScale 技術的 Intel PCA 應用處理器。採用一套跨平臺結構的通用 API ,使用者除了不需要擔心平臺相容性的問題,更節省了開發成本以及研發時間,使用者可以輕輕鬆鬆移植原有應用程式。
特點:
IPP收費原始碼不公開
函式庫:訊號處理,影像處理,多媒體,向量處理等
跨平臺和OS的通用 API
高效能程式碼,不需要寫彙編程式碼,獲得最佳化的應用程式,速度快,效率高。
3. Halcon
簡介:德國MVtec公司的影像處理軟體HALCON,是世界公認具有最佳效能的機器視覺軟體。它發源自學術界,有別於市面一些商用軟體包。事實上,這是一套影像處理庫,由一千多個各自獨立的函式,以及底層的資料管理核心構成。其中包含了各類濾波、色彩分析以及幾何、數學變換、形態學計算分析、校正、分類、辨識、形狀搜尋等等基本的幾何以及影像計算功能,由於這些功能大多並非針對特定工作設計的,因此只要用得到影像處理的地方,就可以用HALCON強大的計算分析能力來完成工作。應用範圍幾乎沒有限制,涵蓋醫學、遙感探測、監拎、及工業上的各類自動化檢測。近年來,由於機器視覺技術的發展,這種可以”取代人眼”,對重複工作不會疲勞,精度高且穩定的特質,促進了高科技業的發展,例如電子業產量的大幅提升。而MVTec公司更是不斷的與學術界合作,並且將最新的學術研究成果納入其中,不但使自己的技術處於業界領導地位,同時也將機器視覺技術推向更高的境界。
機器視覺軟體HALCON在世界範圍內被廣泛的使用,使用者可以利用其開放式結構快速開發影像處理和機器視覺應用。
一個專業的影像處理工具不只包含一個影像處理函式庫。影像處理任務的解決只是整個機器視覺解決方案的一部分,還包括處理控制元件和或者資料庫連線等軟體部分,影像獲取及其照明等硬體部分。因此,影像處理系統簡單易用,並且能活嵌入到開發專案中是非常重要的。Halcon充分考慮到這些方面,它有如下的特點:
1). HALCON包含了一套互動式的程式設計介面HDevelop,可在其中以HALCON程式程式碼直接編寫、修改、執行程式,並且可以檢視計算過程中的所有變數,設計完成後,可以直接輸出C/ C++,或是COM(visual basic)程式程式碼,嵌入到應用程式程式中。
2). HALCON不限制取像裝置,可以自行挑選合適的裝置。原廠己提供了4 0餘種相機的驅動,即使是尚未支援的相機,除了可以透過指標(pointer)輕易的抓取影像,還可以利用HALOCN開放性的架構,自行編寫DLL檔案和系統連線。
3). 使用HALCON有最好的投資效益。這套軟體支援的作業系統除了微軟的NT/XP/2000,還有Linux, Solaris7, 181X6. 5, "1'ru64 UN1X5. 1等等,當需要開發出一套系統,就可以輕易轉換作業平臺,以符合需求。為了加快速度,還可以使用多處理器的計算機,所編寫的程式不必更動。
4). 使用HALOCN,在設計人機介面時沒有特別的限制,也不需要特別的視覺化元件,可以完全使用開發環境下的程式語言,例如Mircosoft Visual Studio等等,架構自己的介面,終端使用者看不到開發工具,而且在執行軟體的機器上,只需要很少的資源。
4. MATLAB
簡介:MATLAB 是美國MathWorks公司出品的商業數學軟體,用於演算法開發、資料視覺化、資料分析以及數值計算的高階技術計算語言和互動式環境,主要包括MATLAB和Simulink兩大部分。
MATLAB可以進行矩陣運算、繪製函式和資料、實現演算法、建立使用者介面、連線其他程式語言的程式等,主要應用於工程計算、控制設計、訊號處理與通訊、影像處理、訊號檢測、金融建模設計與分析等領域。
MATLAB的基本資料單位是矩陣,它的指令表示式與數學、工程中常用的形式十分相似,故用MATLAB來解算問題要比用C,FORTRAN等語言完成相同的事情簡捷得多,並且MATLAB也吸收了像Maple等軟體的優點,使MATLAB成為一個強大的數學軟體。在新的版本中也加入了對C,FORTRAN,C++,JAVA的支援。
特點:
1). 高效的數值計算及符號計算功能,能使使用者從繁雜的數學運算分析中解脫出來;
2). 具有完備的圖形處理功能,實現計算結果和程式設計的視覺化;
3). 友好的使用者介面及接近數學表示式的自然化語言,使學者易於學習和掌握;
4). 功能豐富的應用工具箱(如訊號處理工具箱、通訊工具箱等) ,為使用者提供了大量方便實用的處理工具。
功能十分強大,正版軟體價錢昂貴,適用於學術研究,模擬和演示。在軟體開發,工程應用方面有一定的侷限性。
5. OpenGL
OpenGL(全寫Open Graphics Library)是指定義了一個跨程式語言、跨平臺的程式設計介面規格的專業的圖形程式介面。它用於三維影像(二維的亦可),是一個功能強大,呼叫方便的底層圖形庫。
OpenGL 是行業領域中最為廣泛接納的 2D/3D 圖形 API,其自誕生至今已催生了各種計算機平臺及裝置上的數千優秀應用程式。OpenGL™ 是獨立於視窗作業系統或其它作業系統的,亦是網路透明的。在包含CAD、內容創作、能源、娛樂、遊戲開發、製造業、製藥業及虛擬現實等行業領域中,OpenGL™ 幫助程式設計師實現在 PC、工作站、超級計算機等硬體裝置上的高效能、極具衝擊力的高視覺表現力圖形處理軟體的開發。
特點:
1). 與C語言緊密結合。
OpenGL命令最初就是用C語言函式來進行描述的,對於學習過C語言的人來講,OpenGL是容易理解和學習的。如果你曾經接觸過TC的graphics.h,你會發現,使用OpenGL作圖甚至比TC更加簡單。
2). 強大的可移植性。
微軟的Direct3D雖然也是十分優秀的圖形API,但它只用於Windows系統(現在還要加上一個XBOX遊戲機)。而OpenGL不僅用於 Windows,還可以用於Unix/Linux等其它系統,它甚至在大型計算機、各種專業計算機(如:醫療用顯示裝置)上都有應用。並且,OpenGL 的基本命令都做到了硬體無關,甚至是平臺無關。
3). 高效能的圖形渲染。
OpenGL是一個工業標準,它的技術緊跟時代,現今各個顯示卡廠家無一不對OpenGL提供強力支援,激烈的競爭中使得OpenGL效能一直領先。
總之,OpenGL是一個很NB的圖形軟體介面。至於究竟有多NB,去看看DOOM3和QUAKE4等專業遊戲就知道了。
6. EmguCv(.NET)
EmguCV 是.NET 平臺下對OpenCV 影像處理庫的封裝。也就是OpenCV的.NET 版。它執行在.NET 相容的程式語言下呼叫OpenCV 的函式,如C#、VB、VC++、IronPython 等。這個封裝庫可以在Mono 下編譯和在Linux / Mac OSX 上執行。EmguCV 全部用 C#編寫 ,它可以在Mono環境裡編 譯,在 任何 Mono支援的平臺 (如 Linux, Solaris,MacOSX ) 上 運 行 。EmguCV 的其他優勢還有,支援通用顏色和深度的影像類,自動垃圾收集,可XML序列化的影像,XML 文件和 Intel license 支援, 自由選擇影像類或 OpenCV 的 direct invoke 函式 ,影像象 素上的通用操作等。也就是說 ,EmguCV 不僅繼承了 OpenCV 的所有功能和特點 ,而且在跨平臺支援方面也有更大的突破 。
將OpenCv的絕大部分功能都包裝成了.net類、結構或者列舉。不過文件不全,還是得對照OpenCv的文件去看才行。
7. AForge.net(.NET)
AForge.NET 是一個專門為開發者和研究者基於C#框架設計的,他包括計算機視覺與人工智慧,影像處理,神經網路,遺傳演算法,機器學習,機器人等領域。
這個框架由一系列的類庫和例子組成。其中包括的特徵有:
AForge.Imaging -一些日常的影像處理和過濾器
AForge.Vision -計算機視覺應用類庫
AForge.Neuro -神經網路計算庫
AForge.Genetic -進化演算法程式設計庫
AForge.MachineLearning -機器學習類庫
AForge.Robotics -提供一些機器學習的工具類庫
AForge.Video -一系列的影片處理類庫(很方便)
純.net類庫,介面簡單,用起來很方便。
8. CxImage
CxImage類庫是一個優秀的影像操作類庫。它可以快捷地存取、顯示、轉換各種影像。有的讀者可能說,有那麼多優秀的圖形庫,如OpenIL,FreeImage,PaintLib等等,它們可謂是功能強大,齊全,沒必要用其它的類庫。但我要說,這些類庫基本上沒有免費的,使用這些類庫,你要被這樣那樣的許可協議所束縛。在這點上,CxImage類庫是完全免費的。另外,在使用上述類庫時,你會遇到重重麻煩。因為它們大部分是平臺無關的,且用C語言寫成,有的還夾雜著基本的C++ wrapper和成堆的編譯選項的宣告需要你去處理。而CxImage類庫在這方面做得很好。作者完全公開了原始碼。相對於那些封裝好的圖形庫和GDI+來說,這一點使我們可以進一步學習各種編解碼技術,而不再浮於各種技術的表面。
9. FreeImage
FreeImage 是一款免費的、開源的、跨平臺(Windows 、Linux 和Mac OS X )的,支援20 多種影像型別的(如BMP 、JPEG 、GIF 、PNG 、TIFF 等)影像處理庫。其最大優點就是採用外掛驅動型架構,具有快速、靈活、簡單易用的特點,得到了廣泛使用。
FreeImage 的主要功能有多格式點陣圖的讀寫;方便的點陣圖資訊獲取;位深度轉換;點陣圖頁面訪問;基本的幾何變換和點處理;通道合併與混合等。FreeImage 暫時不支援向量圖形和高階影像處理,點陣圖繪製需要由使用者來完成。
FreeImage 中的所有函式都以FreeImage_ 開頭,如影像檔案的讀寫函式分別為FreeImage_Load 和FreeImage_Save 。FIBITMAP 資料結構儲存著點陣圖資訊和畫素資料,是FreeImage 的核心。
10. paintlib
paintlib是一個可移植的用於影像載入、儲存和處理的C++類庫。可從BMP, GIF, JPEG, PCX, PGM, PICT, PNG, PSD, TGA, TIFF和WMF檔案中載入影像,且可儲存為BMP, JPEG, PNG和TIFF格式。既可透過在過濾器類中執行過濾, 也可透過直接訪問點陣圖來進行影像處理。提供了完整的C++原始碼。
11. AGG
AGG,全名:Anti-Grain Geometry,是一個開源的、高效的2D圖形庫
AGG是一個高效的、高質量的、開源的向量圖形庫,類似的有:GTK+的Cairo,Microsoft的GDI+。在三者中,AGG的效能是最高的(不討論Skia和Direct2D,他們有OGL和DX的硬體加速,繪圖速度根本不是一個檔次的)。
特點:
AGG的功能與GDI+的功能非常類似,但提供了比GDI+更靈活的程式設計介面,其產生的圖形的質量也非常高,而且它是跨平臺的,其宣傳可以在非常多的作業系統上執行.
AGG的功能
1). 支援ALPHA、GAMMA等變色處理,以及使用者自定義的變色處理;
2). 支援任意2D圖形變換;
3). 支援SVG和PostScript描述,適於網上圖形生成;
4). 支援高質量的圖形處理,支援反走樣插值等高階功能;
5). 支援任意方式的慚變色處理;
6). 支援所有顏色格式;
7). 支援對點陣圖的多種處理;
8). 支援直線的多種處理,類似於GDI+;
9). 支援GPC,即通用多邊形裁剪方法;
10). 支援多種字型輸出,包括漢字的處理;
效率高,質量高(有反鋸齒),功能強大,跨平臺和平臺GUI支援,缺點:沒有硬體加速,文件少,門檻略高。
12. IPL
Intel 的IPL image library雖然沒有開源但是進行普通的影像處理非常好用,像拉布拉斯運算元,索貝爾運算元等等邊緣提取和銳化的函式。如果目標平臺是PC機或者工控機又是Intel的CPU,這是一個非常不錯的選擇。
現在已經沒有IPL了,IPL已經是IPP的一部分了,不過還是可以下載早期版本。IPP的教育版50$,不是很貴,整合大部分演算法1D signal processing, 語音訊號處理;2D signal prodessing, image processing, video processing. Open CV的模式將很類似於IPL.
特點:
IPL 圖象處理庫,免費,起初開源,後來不開源。
13. visDSK
MICROSOFT影像處理庫,免費、開源。OpenCV未出現時很受追捧,但是現在visDSK能做的OpenCV都可以做,在速度上,OpenCV還有Intel公司的最佳化支援。visDSK的時代已然成為過去。