One can directly use ‘ndimage’ of scipy to compute the sobel filtering of the input image as follows:
dx = ndimage.sobel(im, 0) # horizontal derivative dy = ndimage.sobel(im, 1) # vertical derivative mag = np.hypot(dx, dy) # magnitude mag *= 255.0 / np.max(mag) # normalize
Or your can write the function by yourself and add more features to it.
def sobel_filter(im, k_size): im = im.astype(np.float) width, height, c = im.shape if c > 1: img = 0.2126 * im[:,:,0] + 0.7152 * im[:,:,1] + 0.0722 * im[:,:,2] else: img = im assert(k_size == 3 or k_size == 5); if k_size == 3: kh = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]], dtype = np.float) kv = np.array([[1, 2, 1], [0, 0, 0], [-1, -2, -1]], dtype = np.float) else: kh = np.array([[-1, -2, 0, 2, 1], [-4, -8, 0, 8, 4], [-6, -12, 0, 12, 6], [-4, -8, 0, 8, 4], [-1, -2, 0, 2, 1]], dtype = np.float) kv = np.array([[1, 4, 6, 4, 1], [2, 8, 12, 8, 2], [0, 0, 0, 0, 0], [-2, -8, -12, -8, -2], [-1, -4, -6, -4, -1]], dtype = np.float) gx = signal.convolve2d(img, kh, mode='same', boundary = 'symm', fillvalue=0) gy = signal.convolve2d(img, kv, mode='same', boundary = 'symm', fillvalue=0) g = np.sqrt(gx * gx + gy * gy) g *= 255.0 / np.max(g) #plt.figure() #plt.imshow(g, cmap=plt.cm.gray) return g
Hello, How did you read your image in? I don’t want to use opencv. Did you use ndimage.imread to open the image?
https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.misc.imread.html
Pingback: Difference between scipy and numpy sobel gradient calculation - Tutorial Guruji