在電腦視覺項目中選擇OpenCV還是MATLAB

  • 2020 年 2 月 20 日
  • 筆記

以下文章來源於新機器視覺,作者Vincy Davis

科學計算依賴於執行用不同程式語言編碼的電腦演算法。電腦視覺就是這樣一個跨學科的科學領域,通常簡稱為CV。電腦視覺被用來開發能夠自動完成諸如獲取、處理、分析和理解數字影像等任務的技術。它也被用來從現實世界中提取高維數據來產生符號資訊。簡單地說,電腦視覺使電腦能夠像人類一樣看到、理解和處理影像和影片。

硬體、機器學習工具和框架的巨大進步導致了電腦視覺在物聯網、製造業、醫療保健、安全等各個領域的實現。亞馬遜、Google、微軟和Facebook等主要科技公司都在這一領域的研發上投入了巨大的資金。

在目前可用於電腦視覺的許多工具和庫中,有兩種主要的工具OpenCV和Matlab在速度和效率方面表現突出。在本文中,我們將詳細介紹這兩種方法。

OpenCV:為電腦視覺量身訂製的開源多平台解決方案

OpenCV由Intel開發,現在由Willow Garage支援,根據BSD 3條款許可證發布,免費用於商業用途。它是最流行的電腦視覺工具之一,旨在為電腦視覺演算法提供一種優化的、經過良好測試的、基於開源的(C++)實現。開源庫具有多種語言的介面,如C++、Python和Java,支援Linux、Mac OS、Windows、IOS和Android。它的許多功能都是在GPU上實現的。

OpenCV version 1.0的第一個穩定版本是在2006年。OpenCV社區自發布最新版本OpenCV version 4.1.1以來發展迅速,它還帶來了dnn(Deep Neural Networks)模組的改進,dnn(Deep Neural Networks)模組是庫中一個流行的模組,它用Deep Networks實現前向傳遞(inferencing),而Deep Networks是使用流行的深度學習框架預先訓練的。

OpenCV提供的一些功能包括:

imread函數默認讀取BGR(藍綠紅)格式的影像。

調整影像大小時,上下縮放容易。

支援各種插值和下取樣方法,如INTER_NEAREST來表示最近鄰插值。

支援多種閾值變化,如自適應閾值、按位操作、邊緣檢測、影像濾波、影像輪廓等。

使影像分割(分水嶺演算法)能夠將影像中的每個像素分類為特定類別的背景和前景。

支援多種特徵匹配演算法,如蠻力匹配、knn特徵匹配等。

隨著其活躍的社區和機器學習的定期更新,OpenCV在電腦視覺項目領域只會有突飛猛進的發展。

MATLAB:一個授權的OpenCV集成快速原型工具

OpenCV的一個缺點是它的複雜性,這使得新手電腦視覺用戶傾向於使用Matlab。由於缺少文檔和錯誤處理程式碼,OpenCV相對來說更難學習。Matlab是MathWorks開發的一種專用程式語言,具有多範式的數值計算環境。它在全球擁有超過300萬用戶,被認為是工程師和科學家最容易和最高效的軟體之一。它有一個非常強大和迅速的矩陣庫。

Matlab也可以與OpenCV集成。這使得MATLAB用戶能夠探索、分析和調試包含OpenCV演算法的設計。MATLAB的支援包包括MATLAB和OpenCV所需的數據類型轉換。

MathWorks提供了電腦視覺工具箱,用於設計和測試電腦視覺、三維視覺和影片處理系統的演算法、功能和應用程式。它還允許檢測、跟蹤、特徵提取和對象匹配。Matlab還可以使用深度學習和機器學習演算法(如YOLO v2、Faster R-CNN和ACF)訓練自定義對象檢測器。Matlab的大多數工具箱演算法支援C/C++程式碼生成,用於與現有程式碼、桌面原型和嵌入式視覺系統部署相結合。

然而,Matlab並不像OpenCV那樣包含很多用於電腦視覺的功能,OpenCV更多的功能是在GPU上實現的。Matlab的另一個問題是它不是開源的,它的許可證價格昂貴並且程式不可移植。

另一個在電腦視覺中非常重要的因素是程式碼的性能,特別是在實時影片處理方面。

哪個執行時間更快?OpenCV還是Matlab?

除了電腦視覺之外,其他領域在選擇實現任何功能的程式語言或庫時也需要更快的執行速度。在一篇題為「Matlab與OpenCV:不同機器學習演算法的比較研究」的論文中,詳細分析了這一因素。

改論文使用20個不同的實際數據集對Matlab和OpenCV進行了比較研究。這種區分是基於各種機器學習演算法的執行時間,如分類與回歸樹(CART)、樸素貝葉斯(Naive Bayes)、增強(boost)、隨機森林(Random Forest)和k近鄰(K-Nearest Neighbor, KNN)。實驗在Intel Core 2 duo P7450機器上運行,該機器具有3GB RAM,並在Matlab 7.12.0.635(R2011a)和OpenCV C ++ 2.1版上使用Ubuntu 11.04 32位作業系統。

該論文描述:「為了比較Matlab和OpenCV對於特定機器學習演算法的速度,我們運行演算法1000次,然後取平均執行時間。平均1000次以上的實驗是不必要的,因為幾百次之後就會收斂。」

實驗結果表明,雖然Matlab是一個成功的科學計算環境,但在考慮執行時間的情況下,幾乎所有的實驗都是OpenCV無法比擬的。該論文還指出,這可能是由於維數、樣本量和訓練集的使用的組合。其中一個列出的機器學習演算法KNN在數據集D16和D17上分別產生0.8和0.9的對數時間比。

編者認為,作為能夠負擔得起軟體的大學的研究人員和學生,Matlab對於探索和處理電腦視覺概念非常有用。然而,在構建可用於工業生產的真實世界的電腦視覺項目時,OpenCV勝過Matlab。(作者:Vincy Davis)

聲明:部分內容來源於網路,僅供讀者學習、交流之目的。文章版權歸原作者所有。如有不妥,請聯繫刪除。