||3 years ago|
|cmake||3 years ago|
|doc||3 years ago|
|img||3 years ago|
|include/genimg||3 years ago|
|report||3 years ago|
|src||3 years ago|
|.clang-format||3 years ago|
|.gitignore||3 years ago|
|CMakeLists.txt||3 years ago|
|LICENSE||3 years ago|
|Makefile||3 years ago|
|README.org||3 years ago|
|conanfile.py||3 years ago|
" title="file:" />
Genetic image generation
This project is a university assignment that aims at regenerating a reference image from random shapes of random color applied. There will be lots of different tests on what method is the best and/or the fastest to get a new image as close as possible to the reference image.
The first method will be the random addition of squares of random size to random locations of random color. If the picture with the new random square improves in similarity with the reference image, then it is preserved, otherwise the change is discarded. This method is here as a reference for the other methods.
The second method will be the same as the first method, however The generation of the new pictures will be multi-threaded; if two or more threads return an improved picture, the best one will be selected. Then it will be reused by the next threads.
The third method will instead delegate different parts of the picture to different threads. For instance, if the software runs on four threads, the reference picture will be divided in four zones, each one will be generated by a separate thread.
The fourth method, which can be combined with the first three, will limit the choice in terms of random color to the colors already existing in the reference image.
The fifth method, which can be combined with the four first methods, will force the random squares to be larger during the first iterations and progressively smaller until the smallest specified size which should be reached by the last iteration.
More methods will be added later once these four will be implemented.
This project has only be tested with RGB images, and does not officially support ARGB images. Use ARGB images at your own risks.
How to build this project
To build the project, you will also be required to install the development
libraries your distro offers for GTK+3. For Ubuntu, it is
Void Linux it is
gtk3-devel and for Arch Linux it is already bundled with the
You will also ned to have Ninja and Conan installed. To install Ninja, install
the appropriate package offered by your package manager (
ninja on Arch Linux and Void Linux), and to install conan, use
pip install --user conan
This project is built with conan, ninja and cmake using clang-7 for C++17. To use it, first install clang-7 and lldb 7, then run this:
conan profile new default --detect conan profile update settings.compiler=clang default conan profile update settings.compiler.version=7.0 default conan profile update settings.compiler.libcxx=libstdc++11 default conan profile update env.CC=/bin/clang default conan profile update env.CXX=/bin/clang++ default
If you do not wish to overwrite your
default profile, you can instead create a
new one, for instance
clang. To do so, write the name of your new profile (in
clang) instead of
default in the commands shown above.
You also must have the correct conan remotes activated. You will find the
bincrafters. Run the command below:
conan remote list
bincrafters are missing, you will need to run the
corresponding commands listed below.
conan remote add conan-center https://conan.bintray.com conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan
Then, To build and run the program, go to the root of the project and run this:
mkdir build && cd build conan install .. --build missing cmake -DCMAKE_CXX_COMPILER=clang++ .. -G Ninja cmake --build .
If you want to use another profile than your default one, you should run the following line instead of the second line:
conan install .. --build missing --profile <your_profile>
If you wish to build the project’s tests in addition to the project itself, you
can add the option
-DTESTS=True to the first
cmake command to build the
project’s tests too.
cmake -DCMAKE_CXX_COMPILER=clang++ -DTESTS=True .. -G Ninja
If you do not wish to build your project with Ninja but with another generator,
such as Unix Makefiles, simply replace
Ninja in the second to last
command with the name of your generator. For instance:
cmake -DCMAKE_CXX_COMPILER=clang++ .. -G "Unix Makefiles"
You can still build your project by running
cmake --build . or by running
This project was built and tested using clang-7, lldb and gdb on Void Linux (kernel 4.19) and Arch Linux (kernel 5.0).
Awesome C++ Template by devkoriel.