Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.64 KB | None | 0 0
  1. import numpy as np
  2. import cv2
  3. import math
  4.  
  5. # Generate kernels for Sobel filter
  6. def createSobelKernels():
  7.  
  8. sobelX = np.array((
  9. [-1, 0, 1],
  10. [-2, 0, 2],
  11. [-1, 0, 1]), dtype="int")
  12.  
  13. sobelY = np.array((
  14. [-1, -2, -1],
  15. [ 0, 0, 0],
  16. [ 1, 2, 1]), dtype="int")
  17.  
  18. return sobelX, sobelY
  19.  
  20. #Gernerate averaging blurring filter
  21. def createBlurKernel():
  22.  
  23. blur = np.array((
  24. [1/9, 1/9, 1/9],
  25. [1/9, 1/9, 1/9],
  26. [1/9, 1/9, 1/9]), dtype="float")
  27.  
  28. return blur
  29.  
  30. # Convolve the image with the given kernel
  31. def convolve(img, kernel):
  32. img_h, img_w = img.shape
  33. ker_h, ker_w = kernel.shape
  34.  
  35. output = np.full((img_h, img_w), 0, dtype = np.uint8)
  36.  
  37. # Padding to avoid shrinking the image size
  38. padding = (int)(((ker_w - 1) / 2) -1)
  39. for y in range(img_h):
  40. for x in range(img_w):
  41.  
  42. if(y <= padding or x <= padding or y >= (img_h - 1 - padding)or x >= (img_w - 1 - padding)):
  43. continue
  44. else:
  45. roi = img[y - (1 + padding):y + (2 + padding), x - (1 + padding) :x + (2 + padding)]
  46. value = float((roi * kernel).sum())
  47.  
  48. #Cap value so it stays in 0-255 range
  49. if(value > 255):
  50. value = 255
  51. elif(value < 0):
  52. value = 0
  53.  
  54. output[y,x] = np.uint8(value)
  55.  
  56. return output;
  57.  
  58. # sum Sobel derivatives to obtain the result
  59. def sumDerivatives(y_der, x_der):
  60.  
  61. img_h, img_w = y_der.shape
  62. output = np.full((img_h, img_w), 0, dtype = np.uint8)
  63.  
  64. for y in range(img_h):
  65. for x in range(img_w):
  66. y_val = int(y_der[y,x])
  67. x_val = int(x_der[y,x])
  68.  
  69. value = int(math.sqrt((y_val * y_val) + (x_val * x_val)))
  70.  
  71. if(value > 255):
  72. value = 255
  73. elif(value < 0):
  74. value = 0
  75.  
  76. output[y,x] = np.uint8(value)
  77.  
  78. return output
  79.  
  80. #Main()
  81.  
  82. print("Image file name (must be inside 'images' folder) :")
  83. file = input()
  84.  
  85. print("Running...")
  86. img = cv2.imread("images/" + file, cv2.IMREAD_GRAYSCALE)
  87. cv2.imshow("Original", img)
  88.  
  89. blur_kernel = createBlurKernel()
  90. blurred_img = convolve(img, blur_kernel)
  91. cv2.imshow("Blurred", blurred_img)
  92.  
  93. sobelX, sobelY = createSobelKernels()
  94. x_derivative = convolve(blurred_img, sobelX)
  95. y_derivative = convolve(blurred_img, sobelY)
  96.  
  97. cv2.imshow("X Derivative", x_derivative)
  98. cv2.imshow("Y Derivative", y_derivative)
  99.  
  100. sobelImg = sumDerivatives(x_derivative, y_derivative)
  101. cv2.imshow("Sobel", sobelImg)
  102.  
  103. print("Done!")
  104.  
  105. k = cv2.waitKey(0)
  106.  
  107. if k == 27 :
  108. cv2.destroyAllWindows()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement