Imcgp (Image CGP) is a library and a tool for evolutionary design of image filters improving the quality of damaged images using Cartesian Genetic Programming. It is originally a semester project at BUT FIT for BIN.
- C++ CGP library
- CUDA accelerated CGP library
- MSVC project to build your own executable
- Results and measurements
Requirements: CUDA 6.5, OpenCV 2.4.*, Microsoft Visual Studio 2013
- Open the solution: bio-image-filters-cuda.sln in msvc folder
- C/C++ > Additional Include Directories : set to your OpenCV include directory
- Linker > Additional Library Directories : set to your OpenCV lib directory
- Linker > Input > Additional Dependencies : add all needed OpenCV libs
- CUDA should somehow manage on it's own if you have CUDA Toolkit installed (CUDA 7.0 propably won't work due to OpenCV dependency on CUDA 6.5)
- When everything is set up, the solution can be normally built.
The executable supports several configuration options:
- -i --input [filename] Input image. (required)
- -r --reference [filename] Reference image. (required)
- -m --method [name] Fitness method used. Options: mdpp (default), psnr, mde
- -R --runs [number] Number of runs (default: 1).
- -M --mutations)[number] Number of mutations inside the chromosome (default: 5).
- -g --generations [number] Number of generations (default: 30000).
- -p --population [number] Population count inside a generation (default: 5).
- -k --kernel [kernel type] Type of kernel to use. Options: 3x3 (default), 5x5
- -v --verbose Verbose output.
- -C --cuda Use CUDA acceleration.
- -c --csv Output fitness values per generation inside a CSV file.
Doxygen-generated documentation can be found on: http://imcgp.maciste.cz or you can generate
The whole project is under construction and is only a school project, therefore there are still a lot of TODOs and a lot less spare time. If you are interested in this topic, would like to contribute or have anything else on mind, you can contact me at macenauer.p@gmail.com or via github.
In case you would like to use it, feel free to do so, only add some form of an acknowledgement. I would also be happy to help, if it would lead to something useful.