實驗使用的拍攝裝置
小公尺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...