2011-05-29 41 views

回答

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?highlight=findcornersubpix#cvFindCornerSubPix

操作的更多細節明確在文件cvcornersubpix.cpp找到。看着這個,可以清楚地看到,該函數正在計算搜索區域的導數並構建一個Hessian矩陣...

換句話說,據我所知,標準共軛梯度法!

OpenCV 2.2版本(最新版本)似乎沒有這個功能了。

+0

謝謝你的回答!現在它變得更加清晰,但在文檔中(http://opencv.willowgarage.com/documentation/c/imgproc_feature_detection.html?highlight=findcornersubpix#cvFindCornerSubPix)有一個方程式系統,我無法理解它是如何構建的。爲什麼有「DI_pi」,點p_i的梯度,發生兩次? – Dmitry 2011-06-01 05:22:09

+0

根據我對文檔的理解,對DI_pi * DI_pi^T(即乘以其轉置)的引用僅僅是描述了_q_像素鄰域中梯度的總和。通過快速查看cvcornersubpix.cpp中的源代碼(第180行以後),可以更清楚地看到這一點,其中可以對像素鄰域周圍的一階和二階導數進行計算和求和,並有效地構建DI_pi (代碼中的矩陣_A_)。 – timlukins 2011-06-01 09:05:51