#algorithm #opencv
#алгоритм #opencv
Вопрос:
Есть ли какие-либо документы, описывающие алгоритм функции FindCornerSubPix в OpenCV? Я не могу найти никакой документации, которая описывает это.
Ответ №1:
Я полагаю, что из исходного кода (для версии 2.1) он использует градиенты изображения для оптимизации местоположения…
cv.h:
997 /* Adjust corner position using some sort of gradient search */
998 CVAPI(void) cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners,
999 int count, CvSize win, CvSize zero_zone,
1000 CvTermCriteria criteria );
Документация для функции также описывает это — в частности, характер используемой целевой функции:
Более подробные сведения об операции находятся в файле cvcornersubpix.cpp . Глядя на это, можно четко видеть, что функция вычисляет производные области поиска и строит матрицу мешанины…
Другими словами, насколько я понимаю, стандартный метод сопряженного градиента!
В версии 2.2 OpenCV (самой последней), похоже, больше нет этой функции.
Комментарии:
1. Спасибо за ответ! Теперь это становится более понятным, но в документации ( opencv.willowgarage.com/documentation/c / … ) существует система уравнений, и я не могу понять, как она была построена.. И почему «DI_pi», градиент в точке p_i, встречается два раза?
2. Насколько я понимаю из документации, ссылка на DI_pi * DI_pi ^ T (т.е. умноженная на его транспонирование) просто описывает сумму градиентов в окрестности пикселя q . Я думаю, это можно увидеть более четко, если быстро взглянуть на исходный код в cvcornersubpix.cpp снова (строки 180 и далее), в котором вычисление и суммирование производных первого и второго порядка по окрестности пикселя и выполнено — эффективно построение DI_pi (матрицы A в коде).