計算機視覺(六) 張氏相機標定法測定手機相機引數

2021-09-18 04:53:31 字數 3387 閱讀 9667

實驗使用的拍攝裝置

小公尺6x 6g 128g

實驗使用的棋盤圖

對張氏相機標定法原理的理解

我們相機拍攝**是將3維世界中的影象通過相機的轉化為2維的影象。轉換為數學的公式就是

其中u,v是相機中的座標,x,y,z是世界座標,r是表示旋轉的矩陣。這是世界座標到像平面座標的公式。

傳統的方法需要我們製作乙個精度極高的標定板,礙於技術限制,這種傳統的方法在自己做實驗時並不適用,因為我們不能製作出精度如此高的標定板。

張正友提出的方法是列印出如博文一開始的棋盤圖,因為棋盤黑白相間,且距離我們自己可控,所以在通過角點的檢測就能找到這些角點在影象中的座標。而對與世界座標的認定,我們將這個棋盤看成是xoy這個平面,所以我們只需要設定乙個世界座標的原點,就會得知每個棋盤角點在世界座標的座標資訊。

此時,公式中的z就取0,公式就能簡化成

這樣通過演算法裡的解析解,就可以算出k這個矩陣的各個引數。

fx,fy表示相機的x軸和y軸的焦距,cx,cy是相平面的偏移量。s是畸變引數,很多情況下我們將其設定為0。

具體的實現**(python)

#-*- coding:utf-8 -*-

import cv2

import glob

import numpy as np

cbraw = 11

cbcol = 7

# prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)

objp = np.zeros((cbraw*cbcol,3), np.float32)

objp[:,:2] = np.mgrid[0:cbraw,0:cbcol].t.reshape(-1,2)

objpoints = # 3d point in real world space

imgpoints = # 2d points in image plane.

#glob是個檔名管理工具

#對每張,識別出角點,記錄世界物體座標和影象座標

img = cv2.imread(fname) #source image

gray = cv2.cvtcolor(img,cv2.color_bgr2gray) #轉灰度

#尋找角點,存入corners,ret是找到角點的flag

ret, corners = cv2.findchessboardcorners(gray,(11,7),none)

#criteria:角點精準化迭代過程的終止條件

criteria = (cv2.term_criteria_eps + cv2.term_criteria_max_iter, 30, 0.001)

#執行亞畫素級角點檢測

corners2 = cv2.cornersubpix(gray,corners,(11,11),(-1,-1),criteria)

#在棋盤上繪製角點,只是視覺化工具

#糾正畸變

dst = cv2.undistort(img, mtx, dist, none, newcameramtx)

#這步只是輸出糾正畸變以後的

x,y,w,h = roi

dst = dst[y:y+h, x:x+w]

cv2.imwrite('calibresult.png',dst)

#列印我們要求的兩個矩陣引數

print "newcameramtx:\n",newcameramtx

print "dist:\n",dist

#計算誤差

tot_error = 0

for i in xrange(len(objpoints)):

imgpoints2, _ = cv2.projectpoints(objpoints[i], rvecs[i], tvecs[i], mtx, dist)

error = cv2.norm(imgpoints[i],imgpoints2, cv2.norm_l2)/len(imgpoints2)

tot_error += error

print "total error: ", tot_error/len(objpoints)

實現結果:

其中newcameramtx是上文提到的k這個矩陣的值,dist是畸變係數,這裡的五個係數可以用來消除徑向畸變和切向畸變。total error是重投影誤差,可以用來檢測畸變引數的誤差。

原影象:

消除畸變之後的影象:

計算機視覺 相機標定

brycezou 163.com 下圖基本展示了一些重要的概念 點 o 與 xc,y c,zc 三個軸組成的座標係為相機座標系,其中,原點 o 為相機光心,zc 為相機的光軸,光軸和成像平面 xo 1y垂直,且光軸與成像平面的交點為影象的主點o1 oo1 為相機的焦距 f xcoy c平面和成像平面...

計算機視覺(六)

影象檢索與相關應用 一。基於內容的影象檢索 分開展開 最近鄰問題 區域性敏感的雜湊 在高維空間和低維空間去保持距離 ann庫 串起來完成乙個cbir系統,進行分類。二。如何去讓我們的cbir系統更快?卷積神經網路進行找到影象的去處?影象檢索過程簡單說來就是對資料庫的每張抽取特徵 一般形式為特徵向量 ...

計算機視覺那些事 相機選擇

相機可分為線陣相機和面陣相機,線陣相機以ccd為主,只有一行感光單元 彩色線陣有三個通道,可使用三行感光單元 線陣相機每次輸入一行影象資料,每次輸出一行影象資料 面陣相機每次輸入若干行的影象並以幀方式輸出影象資料。線陣相機通常用行頻為單位 khz,如 12khz 表示相機在 1 秒鐘內最多能採集 1...