Я изучал алгоритмы card.io и у меня возникли некоторые трудности при чтении скрипта преобразования Хафа.
Для преобразования Хафа требуется настроить аккумулятор, сетку, в которой хранятся голоса.(rho, theta) пробел.
В card.io-dmz/cv/hough.cpp
(https://github.com/card-io/card.io-dmz/blob/master/cv/hough.cpp#L99) строка 99, говорится, что число rho numrho
задается как
numrho = cvRound(((width + height) * 2 + 1) / rho);
Здесь width
и height
- это размер ROI, а rho
- это разрешение по расстоянию.
Вопрос: Я не понимаю, почемучислитель: (width + height) * 2 + 1
.
Я предполагаю, что + 1
- это подсчет нулевого значения, а * 2
- как + ve rho и -ve rho.
Но ядо сих пор не понимаю, почему появляется width + height
. Я думаю, что более интуитивно понятно заменить его на sqrt(width*width + height*height)
, что является максимально возможным значением в rho.
Этот параметр также используется в OpenCV (см.ссылка: https://github.com/opencv/opencv/blob/master/modules/imgproc/src/hough.cpp#L128)
Любая помощь будет оценена. Спасибо