in Computer Vision

Sobel Feldman operator or Sobel filter

Sobel operator is used in computer vision particularly in edge detection algorithms. The operator uses two 3×3 kernels which are convolved with the original image to calculate the image derivatives – one for horizontal changes, and one for vertical. If we define A as the original image, and Gx and Gy are two images which at each point contain the horizontal and vertical derivative approximations respectively, the computations are as follows:

#Let A denote a grayscale image
A = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                   [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
                   [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
                   [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
                   [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
                   [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
                   [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
                   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])

The image output is:

Now, we have to find the horizontal and vertical derivative of the input image using the kernels as shown below.


Horizontal kernel:

kernel_horizontal = np.array([[-1, 0, 1], 
                              [-2, 0, 2], 
                              [-1, 0, 1]])


Vertical kernel:

kernel_vertical   = np.array([[1, 2, 1], 
                              [0, 0, 0], 
                              [-1, -2, -1]])

 

Convolution process:

from scipy import signal

Gx = signal.convolve2d(A, kernel_horizontal, boundary='symm', mode='same')
Gy = signal.convolve2d(A, kernel_vertical, boundary='symm', mode='same')

output images after convolution:

Now we find the sum of squares of the gradients to get the gradient magnitude.

Gradient magnitude:

gradient_magnitude = np.sqrt(Gx * Gx + Gy * Gy)

 

The above output may not seem like getting us anywhere but when the same is applied to a full real image, this is the output I get.

Original image

 

After Sobel Filter

You can find the full source of the above examples here:

Sobel filter a simple image array.ipynb

Sobel Feldman filter colored image.ipynb

 

Write a Comment

Comment