Quantcast
Channel: OpenCV Q&A Forum - Latest question feed
Viewing all articles
Browse latest Browse all 19555

Implement angle constraint in the Sobel operator

$
0
0
I have a couple of doubts related to edge detection in this question. 1) The code I have written below tries to show only those edges which obey a certain constraint of magnitude and direction. The opencv function to display image displays only black when I use the numpy methods. In the `show_angle` function when I implemented it using `for` loops and that displayed the image using `cv2.imshow`. I then checked the ouput using numpy methods and my for loop using `np.array_equal` which returned `True`. What might be the reason behind that? 2) I am not able to work the angle constraints, I will post a few images for different angle constraints. import cv2 import numpy as np import matplotlib.pyplot as plt def show_image(name, img, waitkey=0): cv2.namedWindow(name, 0) cv2.imshow(name, img) cv2.waitKey(waitkey) cv2.destroyWindow(name) img = cv2.imread('hex2.png') img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) shape = img.shape out_x = cv2.Sobel(img, cv2.CV_16S, 1, 0) # x gradient out_y = cv2.Sobel(img, cv2.CV_16S, 0, 1) # y gradient out_x = cv2.convertScaleAbs(out_x) out_y = cv2.convertScaleAbs(out_y) out_weight = cv2.addWeighted(out_x, 0.5, out_y, 0.5,0) # x and y weighted def show_angle(out_weight, mag_final, dir_final, min_mag, theta_min, theta_max): """ Return points based on magnitude and angle constraints """ out_img = np.multiply( ( (mag_final > min_mag) & (dir_final > theta_min) & (dir_final < theta_max) ).astype(int), out_weight ) return out_img def mag_dir(): """ Calculate gradient magnitude and direction matrix """ mag = np.sqrt( np.add ( np.square(out_x) , np.square(out_y) ) ) dir = np.arctan2(out_y, out_x) dir = np.multiply(dir, 180) print np.min(dir) # 0 print np.max(dir) # 282 plt.hist(dir,8, (0,360)) plt.show() return mag, dir mag, dir = mag_dir() out_img = show_angle(out_weight, mag, dir, 0, 90,120) plt.imshow(out_img, cmap='gray') plt.show() Input image : [![hexagon image][1]][1] Image Histogram : [![Image histogram for the hexagon.][2]][2] Output for some constraints : 0 to 90 degrees [![0 to 90 degrees][3]][3] 90 to 180 degrees [![90 to 180 degrees][4]][4] Thanks. [1]: https://i.stack.imgur.com/vPVRZ.png [2]: https://i.stack.imgur.com/O9iFP.png [3]: https://i.stack.imgur.com/NSkYr.png [4]: https://i.stack.imgur.com/YMWqe.png

Viewing all articles
Browse latest Browse all 19555

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>