日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Camera Calibration 相机标定

發布時間:2023/11/28 生活经验 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Camera Calibration 相机标定 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Camera Calibration 相機標定

一、相機標定方法

在opencv中提供了一組函數用于實現相機的標定,標定返回的值包括:相機內參矩陣(fx fy xc yc)、相機外參矩陣(R t)以及畸變矩陣。

標定的步驟如下:

  1. 準備棋盤格,棋盤格圖片可以自行打印,以下使用107方格的棋盤格,交點則為96,棋盤格的大小1mm,即
    gridsize=1

  2. 拍照,拍照的原則是多角度,根據理論至少要兩種角度的拍照,實際中通常會拍20張左右;

  3. 使用opencv提供的角點檢測函數findChessboardCorners找到棋盤格中的角點,并將每幅圖片的角點值存放到list中,同時將棋盤格的角點的三維坐標存放到另一個list。

  4. 使用calibrateCamera函數獲取內存矩陣、畸變矩陣、旋轉矩陣以及轉移矩陣。

5.使用undistort函數將畸變的圖像進行校正并查看校正后的圖片效果。

  1. 代碼如下(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 相机标定的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。