Image Processing

This is an image processing application & library built using C++ and Qt. It contains set of the most common image processing algorithms and techniques, which are written with an emphasis on speed. It uses internally the CPLibrary library, that contains many optimized algorithms, data structures and mathematical functions, and Qt for the GUI. All the algorithms are implemented manually in the C++ language, and the GUI is implemented in the Qt framework.

1. Features

  • Supports loading, saving and processing binary, grey scale and color images.
  • Showing image statistics (min, max, mean, standard deviation, histogram, etc.)
  • Image processing algorithms (thresholding, filtering, edge detection, etc.)
    • Filters:
      • Linear: Spectral, Convolution, Gaussian, Laplacian, Sobel, Prewitt, Kirsch, Scharr, LoG, etc. It supports also custom filters, such user-defined Convolution operators and Spectral filters.
      • Non-linear: Non-linear filters (Bilateral, Median, etc.)
    • Thresholding: Binary, Otsu, Sauvola, etc.
    • Edge detection: Canny, Laplacian, Sobel, Prewitt, Scharr, LoG, etc.
    • Morphological: Erosion, Dilation, Opening, Closing, etc.
    • Color: Color conversion, Color balance, etc.
    • Noise: Gaussian, Pickle & Salt, Speckle, etc.
    • Histogram: Histogram equalization, Histogram matching, etc.
    • Thresholding: Adaptive, Otsu, Sauvola, etc.
    • Padding: Padding, Cropping, etc.
  • Supports mixing different algorithms and techniques, and applying them to the same image.
  • Optimizing resource-heavy algorithms with smart data structures and algorithms, and using heuristics.
  • Multi threading support for time-consuming algorithms, without sacrificing consistency.
  • Easy to use, easy to understand, easy to modify, easy to extend.

2. Formats

It supports the following image formats:

  1. PBM: Portable Bitmap
  2. PGM: Portable Graymap
  3. PPM: Portable Pixmap

3. Usage

  • To use the application, you need to install the Qt6 libraries. Note that it should be also compatible with Qt5, but that was not tested.
  • To compile the application, you will need also to fork this repository, and compile it with the C++20 standard.

Here is a little demo of some results of the application:

a. Histogram equalization

Original Luna Image

Histogram equalization

b. Edge Detection

In this example we will use the Sobel operator to detect the edges of the image.

Original Bill Image

Edge Detection

c. Spectral filtering

In this example we will view the spectrum of our image, and will apply a spectral filter to it that will remove unwanted high frequencies.

Original Baboon Image

Baboon Image after filtering. The old spectrum is the one at right

GitHub

View Github