crisp
is a library implementing most image-processing needs from scratch. This includes:
- Spatial Filtering
- Morphological Transform
- Fourier Transform & Spectral Filtering
- Edge Detection
- Segmentation & Clustering
- Feature Extraction
- Boundary and Texture Descriptors
- Neural Networks (fully connected and convolutional)
- GPU-side hardware acceleration
- Bayes Classification
- SIFT & Key Point Classification
- Color Representations
- Noise Modelling
- Histogram Equalization & Specialization
- Wavelet Transforms
- Bitplane Decomposition & Watermarking
crisp
is visual
Render anything! Really, anything?
It's called visual computing, after all. Here's a non-exhaustive list of things you can draw on your screen or save to an image at any time:
crisp::Image
of any typecrisp::FourierTransform
crisp::FrequencyDomainFilter
crisp::Kernel
crisp::StructuringElement
crisp::Histogram
Eigen::Matrix<T, /*...*/>
crisp::ConvolutionalNeuralNetwork
- and more!
This makes debugging, filter design or just understanding/explaining your own algorithms much easier and more intuitive.
crisp
is fast
- for best performance,
crisp::Texture
lives in VRAM and is operated upon by the GPU - GPU-side computation makes large-scale real-time processing possible on mid-end machines
- Example:
crisp::HardwareAcceleratedMatrix
offers excellent runtime even for very large matrices
crisp
is flexible
crisp::Image
lives in RAM- extremely intuitive, pixels are stored in a 2D array and each can be accesses freely
- runs on tiny embedded system with 1 core and no graphics card
crisp
is well documented
- full tutorials are available for all features
- examples with images are provided whenever possible
- in-line documentation for IDE support
- user-facing code is polished to a mirror sheen
- language is kept simple, aimed at people without a math degree
crisp
is generic
- filter, segment, cluster in any number of dimensions, any image value type
- convert any image type to any other image type
- convert any color representation to any other color representation
- compare/combine vectors with vectors, vectors with scalars, vectors with matrices all using the same operators
crisp
is portable
- supports Mac, Linux and Windows
- runs on tiny 1-cpu machines like embedded systems
- also makes full use of strong machines' multiple processors, hardware-acceleration
- C++20 or newer
- cmake
- gcc10 or newer
libgcc-10-dev
- OpenGL 3.3 ES or newer
libopengl-dev
- Eigen
- provided as submodule
libeigen3-dev
- SFML
libsfml-system2.5
libsfml-window2.5
libsfml-graphics2.5
- fftw3
libfftw3-bin
libfftw3-single3
libfftw3-double3
libfftw3-long3
libfftw3-quad3
- lua5.3
lua5.3
package
- Video I/O
libopencv-core4.5
libopencv-videoio4.5
crisp
is header only, to add it to your project, simply use:
git clone https://github.com/Clemapfel/crisp.git
or if you already have a project folder:
git submodule add https://github.com/Clemapfel/crisp.git
Add the corresponding include path to your cmake script and link against crisp
like so:
include_directories("/path/to/.../crisp/include/")
add_executable(MY_EXECUTABLE path/to/my/main.cpp)
target_link_libraries(MY_EXECUTABLE crisp)
Be sure to compile with gcc10 or newer, as many needed C++20 features are not supported in older versions. If linker errors appear, make sure all dependencies and packages listed above are installed on a system level.
Consider reading the tutorials in order, this will teach important principles of crisp
(and image processing in general) step-by-step:
- System
- Vector
- Images
- Color
- Noise (optional)
- Spatial Domain Filters
- Morphological Transform
- Frequency Domain Filters
- Segmentation
- Feature Extraction
- Deep Learning
- Hardware Acceleration
- Video
Documentation is stored as interactive markdown files, right here on github. An index for easy navigation can be found here or in /crisp/docs/
.