cvFindCornerSubPix

cvFindCornerSubPix

opencv函式之一,檢測亞像素角點

基本介紹

  • 中文名:cvFindCornerSubPix
  • 參數:image
  • 用於:發現亞像素精度的角點位置
  • 圖像:corners設定了角點的初始位置
簡介,參數,概況,圖像,

簡介

函式cvFindCornerSubPix()用於發現亞像素精度的角點位置。
void cvFindCornerSubPix(
const CvArr* image,
CvPoint2D32f* corners,
int count,
CvSize win,
CvSize zero_zone,
CvTermCriteria criteria
);

參數

image
輸入的圖像,必須是8位的灰度或者彩色圖像。
corners
輸入角點的初始坐標,也存儲精確的輸出坐標。
count
角點數目
win
搜尋視窗的一半尺寸。如果win=(5,5)那么使用(5*2+1)×(5*2+1)=11×11大小的搜尋視窗
zero_zone
死區的一半尺寸,死區為不對搜尋區的中央位置做求和運算的區域。它是用來避免自相關矩陣出現的某些可能的奇異性。當值為(-1,-1)表示沒有死區
求角點的疊代過程的終止條件。即角點位置的確定,要么疊代數大於某個設定值,或者是精確度達到某個設定值。criteria可以是最大疊代數目,或者是設定的精確度,也可以是它們的組合。

概況

函式 cvFindCornerSubPix 通過疊代來發現具有子象素精度的角點位置,或如圖所示的放射鞍點(radial saddle points)。
象素級角點 定位的實現是基於對向量正交性的觀測而實現的,即從中央點q到其鄰域點p 的向量和p點處的圖像梯度正交(服從圖像和測量噪聲)。考慮以下的表達式:
εi=DIpiT·(q-pi)
其中,DIpi表示在q的一個鄰域點pi處的圖像梯度,q的值通過最小化εi得到。通過將εi設為0,可以建立系統方程如下:
sumi(DIpi·DIpiT)·q - sumi(DIpi·DIpiT·pi) = 0
其中q的鄰域(搜尋窗)中的梯度被累加。調用第一個梯度參數G和第二個梯度參數b,得到:
q=G-1·b
該算法將搜尋窗的中心設為新的中心q,然後疊代,直到找到低於某個閾值點的中心位置。

圖像

輸入圖像image是8位通道的灰度圖像。corners為整數值的像素位置,corners設定了角點的初始位置。count為需要計算的角點數目。win指定了等式產生的視窗的尺寸。輸入參數zero_zone定義了一個禁區(與win相似,但通常比win小),這個區域在方程組以及自相關矩陣中不被考慮。如果不需要這樣一個禁區,則zero_zone應設定為cvSize(-1,-1)。最後一個參數為用戶定義的疊代終止條件。疊代過程的終止條件可以是最大疊代次數CV_TERMCRIT_ITER類型,或者是設定的精度CV_TERMCRIT_EPS類型(或者是兩者的組合)。終止條件的設定在極大程度上影響最終得到的亞像素值的精度。例如,指定0.10,則求得的亞像素級精度為像素的十分之一。

相關詞條

熱門詞條

聯絡我們