Преобразование Хафа, заполнение аккумуляторного массива

Необходимо реализовать функцию на языке 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

Ответы (0 шт):