Last active
January 15, 2019 05:42
-
-
Save ameenkhan07/8d53a548a78017e8c7cf750129e4378b to your computer and use it in GitHub Desktop.
Revisions
-
ameenkhan07 revised this gist
Dec 3, 2018 . 1 changed file with 4 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -95,3 +95,7 @@ def get_hough_lines(img, accumulator, diag_len, thresh=81, sin=0, cos=1, ang=90, get_hough_lines(img, acc_mat, diag_len, thresh=81, sin=0, cos=1, ang=90, filename='red_line.jpg') _cos, _sin = cos_t[55], sin_t[55] get_hough_lines(img, acc_mat, diag_len, thresh=120, sin=_sin, cos=_cos, ang=55, filename='blue_line.jpg') -
ameenkhan07 created this gist
Dec 3, 2018 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,97 @@ import matplotlib.pyplot as plt import cv2 as cv import numpy as np import os # import math from sobel import sobel OUTPUT_DIR = "outputs/" img_name = "./hough.jpg" def _save(filename, img): """Saves the image with filename in output dir """ if not os.path.exists(OUTPUT_DIR): os.makedirs(OUTPUT_DIR) filename = os.path.join(OUTPUT_DIR, filename) cv.imwrite(filename, img) def get_hough_transform_acc(img): """ """ width, height = img.shape thetas = np.deg2rad(np.arange(-90.0, 90.0)) num_thetas = len(thetas) # Calculating Rhos for diag_len = int(round(np.sqrt(width**2 + height**2))) # Hough accumulator array of theta vs rho accumulator = np.zeros((2 * diag_len, num_thetas), dtype=np.uint64) y_idxs, x_idxs = np.nonzero(img) # (row, col) indexes to edges # Vote in the hough accumulator cos_theta = np.cos(thetas) sin_theta = np.sin(thetas) for i in range(len(x_idxs)): x = x_idxs[i] y = y_idxs[i] for t_idx in range(num_thetas): # Calculate rho. diag_len is added for a positive index rho = int( round(x * cos_theta[t_idx] + y * sin_theta[t_idx]) + diag_len) accumulator[rho, t_idx] += 1 return accumulator, diag_len, thetas, sin_theta, cos_theta def plot_hough(H): """ Plot Hough accumulator matrix """ plot_title = 'Hough Accumulator Plot' fig = plt.figure(figsize=(10, 10)) fig.canvas.set_window_title(plot_title) plt.imshow(H, cmap='jet') plt.xlabel('Theta Direction'), plt.ylabel('Rho Direction') plt.show() def get_hough_lines(img, accumulator, diag_len, thresh=81, sin=0, cos=1, ang=90, filename='lines.jpg'): """ """ _img = np.copy(img) acc = np.copy(accumulator) acc = (acc[:, ang]) > thresh rhos = np.nonzero(acc)[0] # Return true indices for i in range(0, len(rhos)): rho = rhos[i] rho = rho - diag_len x0 = rho * cos y0 = rho * sin x1 = int(x0 + 1000*(-sin)) y1 = int(y0 + 1000*(cos)) x2 = int(x0 - 1000*(-sin)) y2 = int(y0 - 1000*(cos)) cv.line(_img, (x1, y1), (x2, y2), (0, 255, 0), 2) _save(filename, _img) if __name__ == '__main__': img, img_g = cv.imread(img_name), cv.imread(img_name, 0) # Implement Canny Edge Detection Algo ? edges = sobel(img_g) acc_mat, diag_len, thetas, sin_t, cos_t = get_hough_transform_acc(edges) # plot_hough(acc_mat) get_hough_lines(img, acc_mat, diag_len, thresh=81, sin=0, cos=1, ang=90, filename='red_line.jpg')