-
Notifications
You must be signed in to change notification settings - Fork 164
GSoC 2020
This is list of proposals of GIL projects for GSoC 2020. The projects below are also copied to the official Boost wiki at https://github.com/boostorg/wiki/wiki/Google-Summer-of-Code%3A-2020 where all Boost proposals are collected.
This proposal is continuation of Image Processing Algorithms project submitted and developed by Miral Shah during GSoC 2019.
Boost.GIL provides core features for images and, thanks to Miral Shah's work, a collection of basic image processing algorithms. However, there still is more algorithms to be added to the collection.
Check GIL's wiki page Image Processing Algorithms with table presenting the algorithms implementation status and the wish-list.
- Dilation
- Erosion
- Blurring / Smoothing
- Sharpening
- Wiener filter
- Average filter
- Median filter
- The GSoC 2019 project implemented lots of improvements and new features in the kernels and convolutions, but this area may still benefit from further development, optimisations and documenting.
5. Your favourite image processing algorithms
6. Image Processing Documentation
- We need a beautifully written and presented documentation of the image processing features in GIL
- For example, https://github.com/boostorg/gil/issues/396, describes an idea of the docs structure based on the "Principles of Digital Image Processing" book
Histogram is one of essential tools in the image processing techniques. Although it belongs to the image processing algorithms, we propose this as a separate self-contained project.
Boost.GIL presents how to compute histogram in the documentation, Tutorial: Histogram, as well some existing algorithms already compute histogram as in case of the Otsu's thresholding, but there is no functionality in GIL available via public interfaces for histogram computation and operations.
This project proposal is about making histogram a first-class feature in GIL.
List of suggested topics [1]:
- Computing histograms
- 1D histogram of single image (8-bit grayscale image)
- Histograms of images with more than 8 bits (Binning technique)
- Histogram of color images
- Intensity histogram (Luminance)
- Individual color channel histogram
- Combined color histogram
- 1D histogram of individual components of any color space of single image (HSV, RGB, XYZ)
- 2D histogram [2] projections [3] of single image (e.g. H and S of HSV, R and B of RGB, etc.)
- 3D histogram of single image [4]
- Cumulative histogram
- Point operations - histogram transformations or histogram-based image enhancements
- Histogram Normalization
- Histogram Equalization
- Histogram Specification - adjusting an image to a given reference histogram
- Segmentation
- Thresholding - use of new histogram computation in the GIL thresholding algorithms
-
Extras - optional ideas for when the histogram core features are implemented
- Histogram Backprojection [5] - Where in the image are the colors that belong to the object being looked for? [6]
- 2D histogram scheme for colour image segmentation [7]
- Integration with Boost.Histogram
- Histogram visualization - for testing and debugging purposes
- If there is support for Boost.Histogram, we can rely on its ASCII 1D plots
- GIL extension for basic plotting of histogram in SVG format (e.g. see SVG in Boost.Geometry)
- GIL extension based on a third-party plotting library
References:
- [1] Principles of Digital Image Processing - Fundamental Techniques by Wilhelm Burger, Mark J. Burge
- [2] https://docs.opencv.org/master/dd/d0d/tutorial_py_2d_histogram.html
- [3] Digital Image Processing: An Algorithmic Introduction Using Java by Wilhelm Burger, Mark J. Burge
- [4] 3D Color Inspector plug-in for ImageJ
- [5] https://docs.opencv.org/master/dc/df6/tutorial_py_histogram_backprojection.html
- [6] http://www.inf.ed.ac.uk/teaching/courses/av/LECTURE_NOTES/swainballard91.pdf
- [7] https://www.researchgate.net/publication/233658046_A_new_2D_histogram_scheme_for_colour_image_Segmentation
Using latest Boost.GIL, implement a simple convolution filter and show its use in a test application to detect edges in a grayscale input image.
Alternatively, choose a simple algorithm from any topic of image processing, preferably related to your interests regarding the GSoC project, and propose its implementation using latest Boost.GIL.
Alternatively, bonus project that allows you to show your C++ skills beyond usage of Boost.GIL: Using C++11 type traits and Boost.MP11, define promote
metafunction that tries to promote (find) fundamental integral type T
(e.g. char
, short
, etc.) to another integral type with size roughly twice the bit size of T
. For example, for using P = promote<char>::type
should assert the following static_assert(std::is_same<P, short>::value)
or possibly static_assert(std::is_same<P, int>::value)
.
If you get stuck, don't hesitate to submit even partial solution.