9/12/2011

NVIDIA Takes Deep Dive into Computer Vision

NVIDIA TAKES DEEP DIVE INTO COMPUTER VISION
Eric Gregori's pictureLevel 4: Thaumaturgist
  NVIDIA Takes Deep Dive into Computer Vision
  Posted by Eric Gregori 5 days ago
While doing research for a class on OpenCV, OpenNI, and OpenCL I discovered that NVIDIA has entered the computer vision field with all boosters firing.  NVIDIA is not only directly supporting CUDA in OpenCV, but it's supporting the OpenCV port to Android.  On top of the OpenCV support, NVIDIA has its own impressive open source computer vision library with some very interesting looking tools.

OpenCV
NVIDIA has been very active in adding GPU support to OpenCV via CUDA.  Check out the OpenCV GPU page here: http://opencv.willowgarage.com/wiki/OpenCV_GPU
"The OpenCV GPU module is a set of classes and functions to utilize GPU computational capabilities. It is implemented using NVidia CUDA Runtime API , so only that vendor GPUs are supported. It includes utility functions, low level vision primitives as well as high level algorithms. I.e. the module is being developed as a powerful infrastructure for fast vision algorithms building on GPU with some high level state of the art functionality."
 List of Ported Functions
  • Initialization & information (getCudaEnabledDeviceCount, setDevice, getDevice, isCompatibleWith, freeMemory, totalMemory, getComputeCapability).
  • Per-element operations with/without mask (add, subtract, multiply, divide, exp, log, absdiff, compare, bitwise_not, bitwise_or, bitwise_and, bitwise_xor, bitwise_xor, min, minS, max, maxS).
  • Color conversion (almost all color spaces, cvtColor).
  • Geometrical image transforms (rotate, resize, warpAffine, warpPerspective, remap, transpose)
  • Mean shift-based transforms (meanShiftFiltering, meanShiftSegmentation)
  • Corner detectors (cornerHarris, cornerMinEigenVal)
  • Reductions with/without mask ( meanStdDev, norm, sum, sqrSum, minMax, minMaxLoc, countNonZero, integral, sqrIntegral, columnSum, rectStdDev)
  • Template matching (matchTemplate)
  • Filter engine (low-level filter classes, middle-level filtering engines, and high level filtering functions: boxFilter, blur, erode, dilate, morphologyEx, filter2D, sepFilter2D, Sobel, Scharr, GaussianBlur, Laplacian)
  • Histograms (evenLevels, histEven, histRange)
  • Stereo correspondence (StereoBlockMatchingStereoBeliefPropagation, StereoConstantSpaceBP,DisparityBilateralFilter, drawColorDisp)
  • Pedestrian detection (Histograms of oriented gradients (HOG) descriptor)
  • Universal descriptor matcher (BruteForceMatcher)
  • Haar features detection, face detection (CascadeClassifier based on code contributed by Anton Obukhov, NVidia)
  • Feature detection for object recognition ( Speeded Up Robust Features, SURF )
  • Other image transforms (flip, LUT, merge, split, magnitude, magnitudeSqr, phase, cartToPolar, polarToCart, reprojectImageTo3D, graphcut, threshold, copyMakeBorder, dft, convolve, mulSpectrums, mulAndScaleSpectrums)


OpenCV on Android
"With support from NVidia, OpenCV Android port has been greatly improved. Now it is not a separate branch of OpenCV, it shares the same code tree with additional build scripts. Few demos were developed. Camera support has been added as well."

The OpenCV library can be used from C++ via the Android NDK, or directly from Java.  The OpenCV Android WiKi provides various tutorial on how to use OpenCV on Android:http://opencv.willowgarage.com/wiki/Android.

OpenVIDIA
One of the most interesting tools in the OpenVIDIA project is the CUDA_VisionWorkbench. 
"CUDA VisionWorkbench (CVWB) is an application for 32 or 64 bit versions of Windows XP or Vista, used primarily for demonstration, benchmarking and development of vision primitives implemented in CUDA.  CVWB presents an interactive UI for calling various image processing operations on 8 bit or 16 bit grayscale images of a variety of sizes.  The UI gives the user options to load images from files or generate test patterns, select enumerated GPU’s or the CPU for processing, select # of threads for host processing, select processing bit depth,  and load, re-configure and save structuring element matrices for convolution and correlation operators.  Processing operations can be triggered individually or in a repeating loop, and a representative multi-operator sequence can also be initiated.  Results are presented visually for interactive comparison, and key metrics are automatically recorded to pre-formatted files for analysis" CUDA_VisionWorkbench User Guide.

This is a GUI based application that lets you experiment with GPU based computer vision.  Using the GUI you can create custom kernels up to 7x7 then Correlate or Convolute the kernel to a image using the GPU's.  You can find an image of the GUI here: http://sourceforge.net/dbimage.php?id=246100

SOURCE :  
http://www.embedded-vision.com/forums/2011/09/07/nvidia-takes-deep-dive-computer-vision

No comments: