eLynx SDK v3.3.0
C++ image processing API reference

Convolution with separative kernels

Basic algorithm implementation

convolve.separableKernels.0.png
convolve.separableKernels.1.png
convolve.separableKernels.2.png
convolve.separableKernels.3.png
convolve.separableKernels.4.png
convolve.separableKernels.5.png
convolve.separableKernels.6.png

Optimized algorithm implementation

convolve.separableKernels.opt.0.png

Process source image horizontal line
Point 1

convolve.separableKernels.opt.1.png
convolve.separableKernels.opt.1b.png
convolve.separableKernels.opt.2.png

B0 = h0*T0,0 + h1*T1,0 + h2*T2,0
B1 = h0*T0,1 + h1*T1,1 + h2*T2,1
Compute B2,B3...

convolve.separableKernels.opt.2c.png

B7 = h0*T7,1 + h1*T7,1 + h2*T7,1

convolve.separableKernels.opt.3.png
convolve.separableKernels.opt.4.png
convolve.separableKernels.opt.4b.png
convolve.separableKernels.opt.5.png
convolve.separableKernels.opt.6.png
convolve.separableKernels.opt.6b.png

Now we can can apply vertical kernel for whole image first line.
Point2

convolve.separableKernels.opt.7.png
convolve.separableKernels.opt.8.png

compute V = v0*T1,0 + v1*T1,1 + v2*T1,2 + v3*T1,3 + v4*T1,4
clamp V on demand and convert back to ubyte into original image

compute V = v0*T2,0 + v1*T2,1 + v2*T2,2 + v3*T2,3 + v4*T2,4
clamp V on demand and convert back to ubyte into original image

Compute P2,0, P3,0, P4,0 ....

convolve.separableKernels.opt.9.png

compute V = v0*T8,0 + v1*T8,1 + v2*T8,2 + v3*T8,3 + v4*T8,4
clamp V on demand and convert back to ubyte into original image

First line is now computed into original image.

convolve.separableKernels.opt.10.png

Process next lines

convolve.separableKernels.opt.11.png

Compute new temp line like in Point 1 but reading for P0,3 and writing into buffer last line (Tx,H-1).

convolve.separableKernels.opt.12.png
convolve.separableKernels.opt.12b.png

Process buffer with vertical kernel like in Point2 but destination is original image line P0,1
So we get:

convolve.separableKernels.opt.13.png

Process next line the same reading from P0,4

convolve.separableKernels.opt.14.png
convolve.separableKernels.opt.14b.png

Writing to P0,2, so we get:

convolve.separableKernels.opt.14c.png

For last halfH lines process identically except that we won't fill last buffer line from image source.
So after shifting last temp buffer line is duplicated. We get:

convolve.separableKernels.opt.15.png
convolve.separableKernels.opt.16.png
convolve.separableKernels.opt.17.png

Now it's done :)


Generated on Thu Dec 9 2010 by doxygen 1.7.2