Detailed Assignment: Convolution Implementation in Python
Write a Python program to implement convolution on a grayscale image using a custom
kernel (Sobel filter for edge detection) without using any built-in convolution functions.
Follow the detailed instructions below:
Step 1: Import necessary libraries
- Import OpenCV (cv2) for image reading and processing.
- Import NumPy (numpy) for numerical operations like array handling.
- Import matplotlib.pyplot for displaying images.
Step 2: Load the image in grayscale
- Use cv2.imread() to load the image named pancard.jpeg.
- Read it in grayscale mode using the cv2.IMREAD_GRAYSCALE flag.
- Store it in a variable named image.
Step 3: Define the convolution kernel (Sobel filter)
- Create a 3 × 3 NumPy array for the Sobel filter that detects horizontal edges:
[ [1, 0, -1],
[2, 0, -2],
[1, 0, -1] ]
- Store it in a variable named kernel.
Step 4: Get dimensions of image and kernel
- Use .shape to get image_height and image_width.
- Use .shape to get kernel_height and kernel_width.
Step 5: Create an output image
- Use np.zeros_like(image) to create a new image (output) of the same size as the input
image, filled with zeros.
Step 6: Pad the input image
- Calculate padding sizes:
pad_height = kernel_height // 2
pad_width = kernel_width // 2
- Use np.pad() to pad the image with zeros on all sides.
- Store the padded image in a variable named padded_image.
Step 7: Perform the convolution operation
- Loop through each pixel position (i, j) of the original image.
- For each position:
1. Extract a Region of Interest (ROI) from the padded_image equal to the kernel size.
2. Multiply the ROI and the kernel element-wise.
3. Sum all the multiplied values.
4. Assign this sum to output[i, j].
Step 8: Normalize the output image
- Use cv2.normalize() to scale values between 0 and 255.
Step 9: Display the results
- Use matplotlib to display the original and convolved images side by side.
- Remove axis ticks using plt.axis('off').
- Add titles: 'Original Image' and 'Convolved Image'.
Final Output Expected
- Left: Original grayscale image.
- Right: Sobel-filtered image showing detected edges.