Skip to main content

A library to create kaleidoscope effect on images.

Project description


A library to create kaleidoscope effect on images. You can build on all platforms using CMake.

GitHub GitHub Workflow Status GitHub Workflow Status GitHub Workflow Status

Codecov Codacy grade

C Badge C++ Badge Python Badge CUDA Badge

The library is written in C language so you can use Foreign Function Interface (FFI) to call functions from your favorite programming language. You can download from python package from PyPI. It also has C++ header only library to provide easier interface for C++ users and CUDA support for people who have doubts about performance. Check for mathematical explanation of the kaleidoscope effect from my webpage

Supported Languages

  • C : Main programming language
  • C++ : Header only binding for easier usage
  • Python : Bindings using Cython
  • CUDA : For GPU computing

Install for Python

pip install LibKaleidoscope

Python users check python/python-test.py in GitHub for basic usage

Building

Use the following commands,

mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --parallel

If you want to enable CUDA backend,

mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DKALEIDOSCOPE_ENABLE_CUDA=ON ..
cmake --build . --parallel

There is no direct dependency for libjpeg-turbo inside from the library. It is just for test and demonstration purposes. If you don't want to install/compile just disable command line tool compilation with -DKALEIDOSCOPE_ENABLE_CMD_TOOL=OFF

Usage

The library has a simple usage and you need only three functions to use it. Check the sample usage at src/kaleidoscope-cmd.c

  • Initialization of the transformation matrix: int initKaleidoscope(KaleidoscopeHandle *handler, int n, int width, int height, double scaleDown)
  • Processing image (Can be used multiple times if the input images have same dimensions): void processKaleidoscope(KaleidoscopeHandle *handler, double k, unsigned char *imgIn, unsigned char *imgOut)
  • Deinitialization of the transformation matrix: void deInitKaleidoscope(KaleidoscopeHandle *handler)

Alternatively you can directly use the command line program to create kaleidoscope effect with ./kaleidoscope-cmd <Input Image Path> <Output Image Path> <N>. You can see an example below for N=8


Image source: AC Valhalla

For C++ and CUDA usage check the unit tests at tests/processingTest.cpp and tests/processingTest.cu. It is very easy! Just include the header and construct the Kaleidoscope class from kalos namespace.

  • For C++ header only binding,
#include <kaleidoscope.hpp>

int main()
{
    kalos::Kaleidoscope handler(n, width, height, nComponents, scaleDown, k);

    /* ... */

    handler.processImage(inData, outData, nPixel);

    /* ... */

    return 0;
}
  • For CUDA backend,
#include <cuda/kaleidoscope.cuh>

int main()
{
    kalos::cuda::Kaleidoscope handler(n, width, height, nComponents, scaleDown, k);

    /* ... */

    // Make sure inData and outData is device allocated!
    handler.processImage(inData, outData, nPixel);

    /* ... */

    return 0;
}

Benchmark

It is really fast! On a Intel i7-11800H CPU it achieves,

  • ~65 FPS for 4K UHD (3840 x 2160)
  • ~265 FPS for Full HD (1920 x 1080)
  • ~640 FPS for 720p (1280 x 720)
  • ~1350 FPS for 576p (720 x 576)

resolution images. The performance estimation can be seen at the below

$$ FPS = a\text{ }e^{b\text{ }nPixels}+c\text{ }e^{d\text{ }nPixels} $$

$$ a = 2492 \text{, } b = -2.165\text{ }10^{-6} \text{, } c = 364.9 \text{, } d = -2.08\text{ }10^{-7} $$

If you want to benchmark code on your system make sure you configured with -DCMAKE_BUILD_TYPE=Release and use this command,

./kaleidoscope-cmd <Input Image Path> <Output Image Path> <N> <Number of loop>

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

LibKaleidoscope-1.4.0.tar.gz (36.0 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page