Открыть алгоритм FindCornerSubPix

#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 );
  

Документация для функции также описывает это — в частности, характер используемой целевой функции:

http://opencv.willowgarage.com/documentation/c/imgproc_feature_detection.html ?выделить=найти cornersubpix#cvFindCornerSubPix

Более подробные сведения об операции находятся в файле 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 в коде).