Separable image convolution using CUDA
Convolutions are used by many application for engineering. In this project CUDA is used for an efficient and high performance implementation of separable convolutoion filter. All code is developed with Opencv 4.1.0 and CUDA 10.1 libraries on Visiual Studio 2019 platform. Sequential convolution is performed on CPU and parallel convolution is performed on GPU using global memory. In CPU result:0.0034949, in GPU result: 2.66e-05.
CONVOLUTION
In mathematically, Convolution is a mathematical way of combining two signals to form a third signal.
In discrete time.
Convolution can be implemented into two dimensions.
In image processing, convolution kernel is a scalar product. This scalar product is a parallel operation that is well suited to computation on highly parallel hardware such as the GPU
Generally, two dimensional convolution filter requires n * m multiplications. Separable filter is a composition of two one dimensional filter. A separable filter can be divided into one dimensional filters. So that, Convolutions requires m + n multiplications.
Two dimensional filter
Divided filters into one dimensional row and column filters,
row filter -> column filter ->
Inpu image:
Output image: