Преобразование Хафа, заполнение аккумуляторного массива
Необходимо реализовать функцию на языке Python для заполнения аккумуляторного массива Хафа с сохранением координат пикселей из исходного изображения, которые проголосовали за данную ячейку.
Существует текущая реализация, но она достаточно медленная. Возможно ли, не прибегая к Cython, ускорить её? Ниже код, который реализован на данный момент.
def hough_accum(img, ro_step, theta_step):
height, width = img.shape
img_diagonal = int(np.sqrt(height ** 2 + width ** 2))
ro = np.arange(-img_diagonal, img_diagonal, ro_step)
theta = np.deg2rad(np.arange(-90, 90, theta_step))3
sin_t = np.sin(theta)
cos_t = np.cos(theta)
# аккумуляторный массив
accum = np.zeros((len(ro), len(theta)), np.int64)
# аккумуляторный массив для сохранения координат пикселей, участвовавших в голосовании
accum_xy = np.ones((len(ro), len(theta), 1000), np.int32) * -1
contour_y, contour_x = np.where(img == 255)
for x, y in zip(contour_x, contour_y):
for i in range(len(theta)):
r = int(x * cos_t[i] + y * sin_t[i]) + img_diagonal
accum_xy[r][i][accum[r][i] * 2] = x
accum_xy[r][i][accum[r][i] * 2 + 1] = y
accum[r][i] += 1
return accum, accum_xy, ro, theta