Although this is ancient stuff in computer science terms, the main paper still gets cited, so I continue to provide my old code and publications on the topic.
As it is ancient history, perhaps an explanation of how this research started would be useful. At least for my own sake as I am starting to forget stuff. It was 2004 and I was in the middle of my PhD, trying to ditch my TA work and replace it with more RA stuff. FAU had a NASA Imaging Technology Center, lead by an amazing guy called Dr William E. Glenn. The center actually designed and produced the highest-resolution camera in the world at the time and FAU was awarded a project to create a Center for Coastline Security, lead by my advisor Borko Furht.
My friend Daniel Socek and I become part of the Center's research team and started working on ways in which the high-resolution camera could be used to do automated surveillance of the Florida coastline. But the hardware was just not there to enable real time applications and it occurred to me that the only way we will be able to do this would be to implement a highly parallel algorithm on an FPGA. I was always interested in bio-inspired approaches, so I turned to neural nets. We never got to implement it on an FPGA and years later (2010) I ported it to CUDA to run on a GPU. That is the code that you can find folling the link below. The full journey is described in these 4 publications:
The source code is an implementation of the algorithm designed to run on old NVIDIA (GPUs). I haven't tried building it for quite some time. It's based on the OpenCV library and NVIDIA CUDA framework. There is in the archive VS9.0 project file which will allow you to build it, once the correct paths to CUDA an OpenCV libraries are set. If you are interested in porting it to newer versions of OpenCV and CUDA, I'll be happy to help.
Several videos illustrating the foreground segmentation results can be found below.
A bridge surveillance camera sequence:
BNN output for the bridge surveillance sequence:
Final segmentation for the bridge surveillance sequence:
"Object in the water" sequence:
BNN output for the "object in the water" sequence:
Final segmentation for the "object in the water" sequence: