# 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 = 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.

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

Sobel filter a simple image array.ipynb

Sobel Feldman filter colored image.ipynb

0 0 vote
Article Rating
Subscribe
Notify of
1 Comment
Inline Feedbacks