Accelerating OpenCV Functions
Support for accelerating OpenCV functions at the algorithm development level is one of the most powerful aspects of the reVISION Stack. OpenCV functions capable of being accelerated can be grouped into one of four high-level categories:
1. Computation: includes functions such as absolute difference between two frames, pixel wise operations (addition, subtraction and multiplication), gradient and integral operations
2. Input Processing: provides support for bit depth conversions, channel operations, histogram equalisation, remapping and resizing
3. Filtering: provides support for a wide range of filters including Sobel, custom convolution and Gaussian filters
4. Other: provides a wide range of functions including Canny/Fast/Harris edge detection, thresholding and SVM and HoG classifiers
Developers can use these functions to create an algorithmic pipeline within the programmable logic of the chosen device, and hence significantly increase the performance of the algorithm implementation.
Because these acceleration capable OpenCV libraries are software defined and support high-level synthesis, they can also be used within the Vivado HLS tool. This enables the creation of IP modules for use within the platform layer when the hardware definition is established.
One commonly used algorithm in OpenCV is a Gaussian blur, often used as the first stage in an image processing chain to reduce image noise. The reVISION Stack contains a predefined function for Gaussian blur (figure 2), while enabling a more responsive and power-efficient solution when accelerated into the programmable logic.
Within the reVISION Stack, if developers choose to accelerate OpenCV functions, they can optimise the design for resource usage and performance within the programmable logic. This is usually done by limiting the number of pixels which are processed on each clock cycle. For most accelerated functions, they can choose to process either a single pixel or eight pixels. Processing more pixels per clock cycle reduces the processing time but places extra load on resources. On the other hand, processing one pixel per cycle reduces this loading at the cost of an increased latency. The number of pixels to be processed per clock can be configured using a function call, which provides a simple method for optimising the design.
With the design performance optimised using the acceleration capable OpenCV libraries, the embedded vision developer can then develop the higher levels of the application using the capabilities provided by the Algorithm and Application layers of the stack.
All Programmable System on Chip devices can help enhance the flexibility, performance, security and power-efficiency of embedded vision systems. An optimised stack like reVISION helps developers use machine learning to create application level algorithms such as pattern recognition and image classification, and accelerates system performance as well as time to market.
For more information, please visit: http://www.xilinx.com/products/design-tools/embedded-vision-zone.html