歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OpenCV_cvFindCornerSubPix()查找亞像素級角點

OpenCV_cvFindCornerSubPix()查找亞像素級角點

日期:2017/3/1 9:31:16   编辑:Linux編程

如果我們進行圖像處理的目的不是用於識別特征點而是進行稽核測量,則通常需要更高的精度,而cvGoodFeatureToTrack()只能提供簡單的像素坐標值,但有時候我們會需要實際坐標值而不是證書坐標值,例如,我們想要確定圖形中一個尖銳的峰值點的位置,但是峰值點的位置一般都不會位於一個像素點的正中心,,這時候就可以使用亞像素檢測方法。

亞像素級角點的位置在攝像機標定、跟蹤並重建攝像機的軌跡或者重建被跟蹤目標的三維結構時就是一個基本的測量值。通過cvGoodFeaturesToTrack()函數可以求得角點坐標值,接下來就要討論如何將求得的坐標值精確到亞像素級精度。方法就是向量的點積理論:一個向量和其正交的向量的點積為0,角點我們之前有說過了,就是兩個邊緣的相交,可以滿足這樣的情況。如下圖:

當要求的點P位於一個區域的內部時,點p邊緣是平緩的,它的梯度值為0,此時向量 的與p的梯度點積為0,;
當點p位於區域的邊緣的時候,向量 與區域平行,而p的梯度值則與邊緣垂直,此時向量 的與p的梯度點積為0。

這兩種情況下,向量 與P點的梯度都是正交的。先假設起始角點q在實際亞像素級角點p附近,則我們可以在要求的p點的周圍取到很多p點的梯度和相關向量 令其點積為0,然後就可以通過求解方程組,方程組的解就是角點q的亞像素精度的位置,也就是精確角點的位置。

代碼如下:

void cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners,
int count, CvSize win,
CvSize zero_zone,
CvTermCriteria criteria );
1
image
輸入圖像.
corners
輸入角點的初始坐標,也存儲精確的輸出坐標
count
角點數目
win
搜索窗口的一半尺寸。如果 win=(5,5) 那麼使用 5*2+1 × 5*2+1 = 11 × 11 大小的搜索窗口
zero_zone
死區的一半尺寸,死區為不對搜索區的中央位置做求和運算的區域。它是用來避免自相關矩陣出現的某些可能的奇異性。當值為 (-1,-1) 表示沒有死區。
criteria
求角點的迭代過程的終止條件。即角點位置的確定,要麼迭代數大於某個設定值,或者是精確度達到某個設定值。 criteria 可以是最大迭代數目,或者是設定的精確度,也可以是它們的組合。
函數 cvFindCornerSubPix 通過迭代來發現具有子象素精度的角點位置,或如圖所示的放射鞍點(radial saddle points)。

當找到一個q的新位置時,算法會以這個新的角點作為初始點進行迭代知道滿足用戶定義的迭代終止條件。

--------------------------------------分割線 --------------------------------------

Ubuntu Linux下安裝OpenCV2.4.1所需包 http://www.linuxidc.com/Linux/2012-08/68184.htm

Ubuntu 12.04 安裝 OpenCV2.4.2 http://www.linuxidc.com/Linux/2012-09/70158.htm

CentOS下OpenCV無法讀取視頻文件 http://www.linuxidc.com/Linux/2011-07/39295.htm

Ubuntu 12.04下安裝OpenCV 2.4.5總結 http://www.linuxidc.com/Linux/2013-06/86704.htm

Ubuntu 10.04中安裝OpenCv2.1九步曲 http://www.linuxidc.com/Linux/2010-09/28678.htm

基於QT和OpenCV的人臉識別系統 http://www.linuxidc.com/Linux/2011-11/47806.htm

[翻譯]Ubuntu 14.04, 13.10 下安裝 OpenCV 2.4.9 http://www.linuxidc.com/Linux/2014-12/110045.htm

--------------------------------------分割線 --------------------------------------

OpenCV的詳細介紹:請點這裡
OpenCV的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved