Hi, I’m trying to learn the hough transform and for that, I’d like to build some functions which perform that transformation. Here they are:
def hough_peaks(H, num_peaks): H_values_sorted = np.sort(np.unique(H)) H_values_num_peaks = H_values_sorted[-num_peaks:] peak_indexes =  for pi in H_values_num_peaks: indexes = np.argwhere(H == pi) for find_indexes in indexes: peak_indexes.append(list(find_indexes)) return np.array(peak_indexes[0:num_peaks]) def hough_lines_draw(image, peaks): x = np.arange(0, image.shape) H = np.zeros(image.shape) for i in range(peaks.shape): d = peaks[i, 0] theta = peaks[i, 1] y = ((d - x*np.cos(theta))/np.sin(theta)).astype(int) H[x, y] = 1 return H #It is possible to change the resolution of the Theta axis #The resolution of the rho axis is 1 def hough_lines_acc(edge_image, Theta=np.arange(0, 181)): num_rhos = int((np.sqrt(2)/2)*(edge_image.shape + edge_image.shape)) H = np.zeros((num_rhos, len(Theta))) for i in range(edge_image.shape): for j in range(edge_image.shape): if edge_image[i, j] == 1: d = (i*np.cos(np.deg2rad(Theta))+j*np.sin(np.deg2rad(Theta))+0.5).astype(int) #Approximation nearest integer H[d, Theta] += 1 return H, np.arange(0, num_rhos), Theta
Basically, the three functions performs the steps necessary during the Hough Transform - Creating the accumulator, selecting the peaks and drawing the lines. For me the accumulator and the peak selector are corrects, but when I try to draw the lines, the y vector generates some values that are bigger than the image size (256x256). So, how could this happen?
Here is how I’m calling the functions:
H, rhos, thetas = hough_lines_acc(edge_img_float)
peaks = hough_peaks(H, 7)
plt.plot(peaks[:, 1], peaks[:,0], ‘ro’)
lines_images = hough_lines_draw(edge_img_float, peaks)
I’d appreciate any help. Thanks.