LinkRunCCA is a real-time single-pass connected component analysis/ connected component labeling (CCA/CCL) implemented in Verilog HDL. It can be easily connected to any image pixel streaming interface in FPGA design, producing bounding boxes of ALL (no number of box limitation) connected components as soon as completed box is detected. It can operate in maximum streaming throughput (one pixel per cycle) and has very low memory requirement. This implementation is based on the state-of-the-art algorithm from publication in http://dx.doi.org/10.1007s11554-016-0590-2
LinkRunCCA uses combination of linked list and run-length-based techniques to label and extract components' feature (bounding box in this case) in one scan. This hardware module accepts binary image/video stream as input and produces bounding boxes of each connected component in the image/video. Bounding box of each connected component is produced immediately as soon as the component is completed. The size of image/video is parametrizable, hence the memory requirement is varied based on image/video size.
Download command (linux):
svn co http://opencores.org/ocsvn/linkruncca/linkruncca/trunk
Port and Parameter Descriptions:
Input Ports:
clk - clock sink
rst - reset sink
pix_in - input binary image/video stream (1 bit)
datavalid - valid bit for input stream
Output Ports:
box_out - bounding box of each component
datavalid_out - valid bit for each bounding box
Parameters:
imwidth - image width
imheight - image height
Performances:
FPGA | image size | LUTs | Registers | Memory(bits) | Fmax(MHz) | Throughput(MPixel/s) |
---|---|---|---|---|---|---|
VirtexII | 640x480 | 654 | 227 | 92k | 97.07 | 97.07 |
VirtexII | 256x256 | 547 | 183 | 72k | 104.26 | 104.26 |
CycloneIV | 256x256 | 489 | 303 | 7287 | 122.94 | 122.94 |
StratixV | 512x512 | 323 | 359 | 16,380 | 272.55 | 272.55 |
Simulation using Verilator tool is included due to its faster simulation for image processing. Several binary test images are available for testing. The bounding box image is created after the simulation.
A simulation script is provided. Prior to simulation, the script detects the simulating image size and generates appropriate headers/parameters for both simulation and verilog hardware.