The code currently computes convolution of an image with a fixed kernel to find a gradient. By extending the logic to two gradients along x and y axes, and computing the square root of the squared sums, Sobel filter can be implemented.
The convolution approach has been adopted from this paper.
Assume we have a 5*5 image.
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
0 | 1 | 0 | 1 | 0 |
1 | 2 | 3 | 4 | 5 |
0 | 1 | 0 | 1 | 0 |
1 | 2 | 3 | 4 | 5 |
and a 3*3 kernel
1 | 2 | 1 |
---|---|---|
0 | 0 | 0 |
1 | 2 | 1 |
The output result would be
7 | 12 | 16 |
---|---|---|
4 | 4 | 4 |
7 | 12 | 16 |
The result can be verified from the screenshot here. Note that the pxl_out bits are considered only when the valid bit is 1
.