Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dario-marvin/ImageProcessing-KernelConvolution
https://github.com/dario-marvin/ImageProcessing-KernelConvolution
c-plus-plus convolution image-processing kernel python
Last synced: 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/dario-marvin/ImageProcessing-KernelConvolution
- Owner: dario-marvin
- Created: 2018-09-14T20:58:00.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-06-18T08:21:16.000Z (over 5 years ago)
- Last Synced: 2024-07-29T19:06:02.904Z (5 months ago)
- Topics: c-plus-plus, convolution, image-processing, kernel, python
- Language: C++
- Size: 578 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Image Processing: Kernel Convolution
## Kernel convolution
The idea behind image processing with kernel convolution is to use a special matricial operation called _convolution_ which takes as input two matrices: a matrix of weights, which is the kernel, and the matrix of the RGB values of our image (in the range [0, 255]). The output will be a new image with pixel values modified depending on the kernel used.
For instance, supposing we use a 3x3 kernel matrix, the pixel RGB value at position [2,2] in the modified image will be calculates as
For edge and corner pixels, the idea is to locally overextend the image using the available pixels. For example the RGB value at position [1,1] is
## Examples and applications
### Simple blurringProbably the most evident example of this technique is blurring. To achieve this effect, we use a Kernel matrix given by
which means that every pixel is the calibrated mean of the 8 neighbours surrounding it.
### Gaussian blurring
The gaussian blurring effect is obtained by employing a matrix where the values are not constant as in the previous example, but are chosen according to the Gaussian distribution with regard to the vertical and horizontal distance between each surrounding pixel and the central one. In this example we consider a 13x13 kernel matrix, thus the image appears more "smoothed" than the preceeding one.
### Edge detection
When performing edge detection, we want to highlight those pixels whose neighbours are not regular. Or, equivalently, we want to dampen those pixels who are equals in value to the immediately close ones. Thus we consider a Kernel matrix given by
Notice that by doing so, if the central pixel and the 8 surrounding ones have all the same value, the resulting pixel will have value 0, hence it will be black.
### Sharpen
Sharpening effects are applied by enhancing the constrast with pixels on the sides, thus we use a kernel matrix given by
We apply this effect on a fractured tibia x-ray image and on a brain tumor MRI. Both images where found on Google.
### Emboss
Embossing is a particular processing used to give a 2D image an idea of tridimensionality. The kernel matrix
ensures that a border separanting two differently colored areas (top-left to bottom-right) will be particularly highlighted depending on the pixels.
For instance, when we go from a top darker area to a bottom lighter area, the border is highlighted in white, while the opposite occurs if you invert the colors. Thus we obtain a 3D effect in a given direction.
## How to compile and execute the files
#### Only tested in Ubuntu 16.04, not tested for other systems or distributions
Download the files `image_convolution.py` and `kernel_application.cc` in the same folder where you also have the image you want to process.
At line 7 of `image_convolution.py` insert the name of your image and choose one of the kernel at lines 22-28.
Then save your changes, open a terminal and run the command
```
python3 image_convolution.py
```