2016年4月28日 星期四

Computer Vision OpenCV 筆記

 

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實現部分特徵擷取技術 
紅色部份是最常用 modules: core, imgproc, highgui.
藍色部份是 GPU 才會用到

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 之上。 

沒有留言:

張貼留言

追蹤者