LOGI-MARK1 Sobel Filter Demo
Image Processing
Applications in image processing technology are becoming more and more prevalent with the availability of low cost high performance electronics systems. The addition of image processing algorithms to such systems enables applications such as object tracking and detection, autonomous movement, ambient change recognition, etc. Image processing is known to be very data processing intensive based on the amount of data needed to be processed and the speed which the data needs to be processed. FPGA technology handles both of these requirements very well, which makes FPGA’s, especially in conjunction with high performance embedded systems, a very powerful tool for implementing a vast array of applications.
This is a guide that uses an FPGA in conjunction with a Beaglebone to run a basic image processing application that uses a Sobel filter to process an image. The application is intended to strip any un-needed functionality and allow the user to directly see the image processing algorithms running. The application is designed to be run in “standalone” mode, which eliminates the need for any additional external hardware to be used with the platform. The application takes passes a stock image from the Beaglebone to the FPGA using the GPMC bus. The image is then processed on the FPGA using a Gaussian and Sobel filter. The processed image is then passed back to the Beaglebone where it can then be used for any number of further applications.
Sobel Filter Description
The Sobel operator is used in image processing, particularly within edge detection algorithms. Technically, it is a discrete differentiation operator, computing an approximation of the gradient of the image intensity function. At each point in the image, the result of the Sobel operator is either the corresponding gradient vector or the norm of this vector. The Sobel operator is based on convolving the image with a small, separable, and integer valued filter in horizontal and vertical direction and is therefore relatively inexpensive in terms of computations. On the other hand, the gradient approximation that it produces is relatively crude, in particular for high frequency variations in the image. [1]
Block diagram
Running the Demo Application
1) unzip it and keep the .bit file on the host PC
2) copy all the other files to the beaglebone (scp is your friend)
3) On the beaglebone, go tho the copied directory and enter the following :
chmod 777 make_demo.sh
chmod 777 addr_mux.sh
./make_demo
4) back on the PC side, load the bitsream onto the FPGA, a led should be blinking, then press push button 0 (reset). See the LOGI-MARK1 bitstream loading guide.
5) on the beaglebone side go to the jpeg_grabber folder and enter :
./logibone_demo ./beagle_qvga.jpg
6) this should generate a grabbed_frame.jpg file that you can copy back to the PC (scp again)
Notes
Note that this application was for demo purposes that allow for no additional hardware to be connected to the LOGI boards. The full application would have an external cmos camera connected that is streaming images to the FPGA, which in turn process the images using the Sobel filter. The FPGA then streams the filtered images to the Beaglebone, which can further process them and or send them to an external PC.
See these videos to see a full running application with connected camera:
http://www.youtube.com/watch?v=hSHwD6L7dVQ
http://www.youtube.com/watch?v=DWjhEJdcgR0
Source:
References
[1] http://en.wikipedia.org/wiki/Sobel_filter
[2] Project created by Jonathan Piat