Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import cv2
- import math
- # Generate kernels for Sobel filter
- def createSobelKernels():
- sobelX = np.array((
- [-1, 0, 1],
- [-2, 0, 2],
- [-1, 0, 1]), dtype="int")
- sobelY = np.array((
- [-1, -2, -1],
- [ 0, 0, 0],
- [ 1, 2, 1]), dtype="int")
- return sobelX, sobelY
- #Gernerate averaging blurring filter
- def createBlurKernel():
- blur = np.array((
- [1/9, 1/9, 1/9],
- [1/9, 1/9, 1/9],
- [1/9, 1/9, 1/9]), dtype="float")
- return blur
- # Convolve the image with the given kernel
- def convolve(img, kernel):
- img_h, img_w = img.shape
- ker_h, ker_w = kernel.shape
- output = np.full((img_h, img_w), 0, dtype = np.uint8)
- # Padding to avoid shrinking the image size
- padding = (int)(((ker_w - 1) / 2) -1)
- for y in range(img_h):
- for x in range(img_w):
- if(y <= padding or x <= padding or y >= (img_h - 1 - padding)or x >= (img_w - 1 - padding)):
- continue
- else:
- roi = img[y - (1 + padding):y + (2 + padding), x - (1 + padding) :x + (2 + padding)]
- value = float((roi * kernel).sum())
- #Cap value so it stays in 0-255 range
- if(value > 255):
- value = 255
- elif(value < 0):
- value = 0
- output[y,x] = np.uint8(value)
- return output;
- # sum Sobel derivatives to obtain the result
- def sumDerivatives(y_der, x_der):
- img_h, img_w = y_der.shape
- output = np.full((img_h, img_w), 0, dtype = np.uint8)
- for y in range(img_h):
- for x in range(img_w):
- y_val = int(y_der[y,x])
- x_val = int(x_der[y,x])
- value = int(math.sqrt((y_val * y_val) + (x_val * x_val)))
- if(value > 255):
- value = 255
- elif(value < 0):
- value = 0
- output[y,x] = np.uint8(value)
- return output
- #Main()
- print("Image file name (must be inside 'images' folder) :")
- file = input()
- print("Running...")
- img = cv2.imread("images/" + file, cv2.IMREAD_GRAYSCALE)
- cv2.imshow("Original", img)
- blur_kernel = createBlurKernel()
- blurred_img = convolve(img, blur_kernel)
- cv2.imshow("Blurred", blurred_img)
- sobelX, sobelY = createSobelKernels()
- x_derivative = convolve(blurred_img, sobelX)
- y_derivative = convolve(blurred_img, sobelY)
- cv2.imshow("X Derivative", x_derivative)
- cv2.imshow("Y Derivative", y_derivative)
- sobelImg = sumDerivatives(x_derivative, y_derivative)
- cv2.imshow("Sobel", sobelImg)
- print("Done!")
- k = cv2.waitKey(0)
- if k == 27 :
- cv2.destroyAllWindows()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement