Camera Calibration 相机标定
Camera Calibration 相機標定
一、相機標定方法
在opencv中提供了一組函數用于實現相機的標定,標定返回的值包括:相機內參矩陣(fx fy xc yc)、相機外參矩陣(R t)以及畸變矩陣。
標定的步驟如下:
-
準備棋盤格,棋盤格圖片可以自行打印,以下使用107方格的棋盤格,交點則為96,棋盤格的大小1mm,即
gridsize=1 -
拍照,拍照的原則是多角度,根據理論至少要兩種角度的拍照,實際中通常會拍20張左右;
-
使用opencv提供的角點檢測函數findChessboardCorners找到棋盤格中的角點,并將每幅圖片的角點值存放到list中,同時將棋盤格的角點的三維坐標存放到另一個list。
-
使用calibrateCamera函數獲取內存矩陣、畸變矩陣、旋轉矩陣以及轉移矩陣。
5.使用undistort函數將畸變的圖像進行校正并查看校正后的圖片效果。
- 代碼如下(opencv_3.4.3):
#!/usr/bin/env
python3
-*- coding: utf-8
-*-
import numpy as np
import cv2
#圖片角點個數
objp_dict
= {
1: (9, 5),2: (9, 6),3: (9, 6),4: (9, 6),5: (9, 6),6: (9, 6),7: (9, 6),8: (9, 6),9: (9, 6),10: (9, 6),11: (9, 6),12: (9, 6),13: (9, 6),14: (9, 6),15: (9, 6),16: (9, 6),18: (9, 6),17: (9, 6),19: (9, 6),20: (9, 6),
}
objp_list
= []
corners_list
= []
for k in objp_dict:
nx, ny = objp_dict[k]# Prepare object
points, like (0,0,0), (1,0,0), (2,0,0) …,(6,5,0) gridsize=1(mm)
objp = np.zeros((nx*ny,3), np.float32)#生成角點的三維坐標objp[:,:2] = np.mgrid[0:nx,
0:ny].T.reshape(-1,2)
# Make a list of
calibration images
fname = 'camera_cal/calibration%s.jpg' % str(k)img = cv2.imread(fname)# Convert to
grayscale
gray = cv2.cvtColor(img,
cv2.COLOR_BGR2GRAY)
# Find the
chessboard corners
ret, corners =
cv2.findChessboardCorners(gray, (nx, ny), None)
# If found, save
& draw corners
if ret == True:#
Save object points and corresponding corners
objp_list.append(objp)corners_list.append(corners)#
Draw and display the corners
#cv2.drawChessboardCorners(img,
(nx, ny), corners, ret)
#plt.imshow(img)#plt.show()#print('Found
corners for %s’ % fname)
else:print('Warning:
ret = %s for %s’
% (ret, fname))
img
= cv2.imread(‘camera_cal/calibration1.jpg’)
img_size
= (img.shape[1], img.shape[0])
‘’’
mtx : 內參矩陣
dist: 畸變矩陣
rvecs : 旋轉矩陣
tvecs : 轉移矩陣
‘’’
ret,
mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objp_list, corners_list,
img_size,None,None)
#將原始圖片轉換成未發生畸變的圖片
dst
= cv2.undistort(img, mtx, dist, None, mtx)
com_img
= np.hstack((img, dst))
cv2.namedWindow(‘image’,
cv2.WINDOW_NORMAL)
cv2.imshow(‘image’,
com_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
二、 什么是相機標定(What is Camera Calibration?)
找到影響圖像成像過程的內部相機參數:
圖像中心(不是width/2,
height/2)
焦距長度
行像素和列像素的比例因子
扭曲factor
鏡片扭曲
三、動機
Camera Calibration 用于
重構真實世界模型:Virtual L.A. project
與世界交互:e.g.機器人
如上圖所示,估計紅色與藍色兩個點的幾何投影
四、 圖像的行列比例(Scaling of Rows and
Columns in Image)
相機像素不是完全符合正方形
相機輸出可能模糊為近似值(NTSC)
圖像可能從數據卡上獲得 ·A/D轉換器采樣NTSC信號
相機->NTSC信號->轉換為數字信號->顯示器上顯示
五、 混合透鏡成像(Compound Lens Imaging)
單透鏡系統在其周圍部分會造成圖像扭曲(image distort)
混合透鏡可以用于減少彩色效應和針墊效應
普通攝像機的相機圖像平面
對同樣的針孔攝像機(pinhole camera),相機圖像平面(camera image plane)不同
六、相機標定目標
將所拍攝圖像在三維坐標系中找到對應位置
總結
以上是生活随笔為你收集整理的Camera Calibration 相机标定的全部內容,希望文章能夠幫你解決所遇到的問題。