Computer vision (CV) 已存在多年。之前主要由 computer graphic researcher 主導。主要以多種不同的算法和 feature extraction (特徵擷取) 為主。
近年由於 machine learning 和 deep learning (深度學習) 快速發展。逐漸變為 learning base 的 computer vision.
例如前端用 feature extraction (SIFT, HOG) + learning classifier (SVM, softmax, adaboost). 或甚至 end-to-end deep learning (DNN, CNN).
CV 相關的 specification 其實不多。主要是 OpenCV, 目前已經到 3.1.0 (2016/4), 包含算法, feature extraction, 和 machine learning classifiers.
底層應該是 C and C++; interface 多了 python, java, matlab, ruby, etc.
OpenCV(Open Source Computer Vision Library)是一個集合數百種演算法的跨平台電腦視覺庫。只要是針對影像做辨識、操作、分析等,不管是要做人臉辨識、物件辨識、車牌辨識、人形偵測、物件追蹤、影像壓縮、影像加密等各種影像處理,OpenCV確實是一個很好的輔助工具,目前已經可以在Windows、Linux、iOS及Android平台上使用,支援的程式語言有C/C++、Java、Python、Matlab、Ruby及C#等,已經是大部分影像處理使用者必備的涵式庫了,以下會介紹OpenCV的主要功能、使用方式及範例程式碼。
Main
- core. 基本資料結構的緊湊模組,包含操作影像像素及1.0與2.0版本格式交換
- imgproc. 影像處理模組,包含線性與非線性的影像濾波器及幾何影像的轉換(影像縮放翻轉、色彩空間轉換和直方圖操作等)
- imgcodecs. 影像格式編碼、解碼及影像存取
- videoio. 攝影機操作
- highgui. 提供簡易的視窗介面及鍵盤與滑鼠操作
- video. 物件追蹤、背景相減及移動方向預估等
- calib3d. 多視角幾何演算法,影像校正、3D物件重建及姿態估測等
- features2d. 特徵擷取及特徵描述
- objdetect. 物件偵測,如人臉偵測、眼睛偵測、嘴巴偵測、鼻子偵測及身形偵測等
- ml. 機器學習演算法,如KNN、貝式機率分類器、SVM等
- flann. 實現FLANN演算法
- photo. 影像去雜訊、HDR
- stitching. 影像合成相關技術
- cudaarithm. 使用CUDA資料結構操作
- cudabgsegm. 使用CUDA的背景相減MOG
- cudacodec. 使用CUDA的影片存取讀取
- cudafeatures2d. 使用CUDA實現部分特徵擷取技術 …
Extra
- aruco. ArUco Marker Detection
- bgsegm. Improved Background-Foreground Segmentation Methods
- bioinspired. Biologically inspired vision models and derivated tools
- ccalib. Custom Calibration Pattern for 3D reconstruction
- cvv. GUI for Interactive Visual Debugging of Computer Vision Programs
- datasets. Framework for working with different datasets
- dnn. Deep Neural Network module
- dpm. Deformable Part-based Models
- face. Face Recognition
- fuzzy. Image processing based on fuzzy mathematics ...
目前 OpenVX 1.0 的功能,包括了:
- 核心資料結構(Core data structures)
- 影像以及影像金字塔(Images and Image Pyramids)
- Processing Graphs, Kernels, Parameters
- 影像處理(Image Processing)
- 算數、邏輯、統計運算(Arithmetic, Logical, and statistical operations)
- 多通道色彩和色彩深度的抽取與轉換(Multichannel Color and BitDepth Extraction and Conversion)
- 2D Filtering and Morphological operations
- 影像縮放與變形(Image Resizing and Warping)
- 核心視覺計算(Core Computer Vision)
- Pyramid computation
- Integral Image computation
- 特徵擷取與追蹤(Feature Extraction and Tracking)
- Histogram Computation and Equalization
- Canny Edge Detection
- Harris and FAST Corner detection
- Sparse Optical Flow
除了 OpenCV 之外,還有幾個相關的 spec. 一個是 OpenVX, 這是 Khronos (製訂 OpenCL and OpenGL 的 organization) 在 2014/10 發佈 OpenVX 1.0 spec.
也是 focus on computer vision. 不過似乎未包含 deep learning
另外還常提到的是 OpenCL.
OpenCL 是由 Khronos Group 針對異質性計算裝置(heterogeneous device)進行平行化運算所設計的標準 API 以及程式語言。所謂的「異質性計算裝置」,是指在同一個電腦系統中,有兩種以上架構差異很大的計算裝置,例如一般的 CPU 以及顯示晶片,或是像 CELL 的 PPE 以及 SPE。目前,最為常見的就是所謂的 GPGPU 應用,也就是利用一般的顯示晶片(即 GPU)進行 3D 繪圖以外的計算工作。
OpenCL 也就是異質平台,特別是 GPGPU 的 API and computing language. 並非為 computer vision 的 API. 一般是作為底層。 OpenCV 可以架在 OpenCL 之上。