Project 2
Challenge 2 of computer vision
This challenge covers Prewitt filter and Laplacian filter used for edge detection
This challenge also highlights the basic difference between Prewitt and Laplacian filter
''' Import the required libraries'''
import cv2
import numpy as np
********* Gaussian Filter is common for both Prewitt and Gaussian filter***************
# gaussian filter removes gaussian noise using gaussian filterand standard deviation(sigma)
def gaussian_filter(img,filter_size,sigma):
filtered_image = cv2.GaussianBlur(img,(filter_size,filter_size), sigma)
return filtered_image
***************************************************************************
# prewitt filter is very similar to sobel filter except different horizontal and vertical filters
def prewitt_filter(img):
image = gaussian_filter(img,5,5)
vertical_filter = np.array([[1,0,-1],[1,0,-1],[1,0,-1]])
horizontal_filter = np.array([[1,1,1],[0,0,0],[-1,-1,-1]]) # horizontal filter is transpose of vertical filter
vertical_filtered = cv2.filter2D(image,-1,vertical_filter) # vertically filter the image
horizontal_filtered = cv2.filter2D(image,-1,horizontal_filter)
abs_grad_x = cv2.convertScaleAbs(vertical_filtered)
abs_grad_y = cv2.convertScaleAbs(horizontal_filtered)
prewitt_grad = cv2.addWeighted(abs_grad_x,0.5,abs_grad_y,0.5,0)
return prewitt_grad
image = cv2.imread('Challenge_2.png')
gray_img = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
prewitt_filter_img = prewitt_filter(gray_img)
cv2.imwrite('prewitt_filtered_image.png', prewitt_filter_img)
cv2.imshow('prewitt_filtered_image', prewitt_filter_img)
cv2.waitKey(0)
******************* Prewitt Filter ends *************************************************
# A direct open CV function is available
def laplacian_filter(img):
image = gaussian_filter(img,5,5)
laplacian_filtered_img = cv2.Laplacian(image,cv2.CV_64F)
return laplacian_filtered_img
image = cv2.imread('Challenge_2.png')
gray_img = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
laplacian_filter_img = laplacian_filter(gray_img)
cv2.imwrite('laplacian_filtered_image.png',laplacian_filter_img)
cv2.imshow('laplacian_filtered_image', laplacian_filter_img)
cv2.waitKey(0)
**************************** Laplacian Filter ends *****************************************
## The Prewitt filter produces better image as it is less prone to noise