首页 > 编程知识 正文

相机标定图片(照相机怎么用)

时间:2023-05-04 07:23:43 阅读:75158 作者:2780

摄像机校准一、摄像机校准原理1、摄像机校准二是什么, 坐标系2.1世界坐标系: 2.2照相机坐标系: 2.3图像坐标系: 2.4像素坐标系: 2.5图像坐标系到2.6照相机坐标系转换照相机坐标系2.7世界坐标系到2.8世界坐标系的转换、使用检查器的校准1、校准的过程代码实现2.1标定板角在世界坐标系中的位置2.2定位棋盘角2.3角精确检测2.4显示角位置2.5标定图像2.6优化参数2.7畸变消除方法: 2.8反投影误差2.9代码

一、摄像机校准原理1、什么是摄像机校准

在图像测量过程和计算机视觉APP应用中,需要建立摄像机图像的几何模型,以确定空间物体表面某一点的三维几何位置与图像中对应点之间的相互关系,这些几何模型的参数是摄像机参数。 求解这些参数的过程称为摄像机标定。

求解参数:相机内外参数、应变参数

2、坐标系2.1世界坐标系:物体在真实世界中的三维坐标

2.2相机坐标系:三维坐标系,(x,y,z )以相机光学中心为原点的坐标系。 光轴与z轴一致

2.3图像坐标系: (x,y )、二维坐标系、摄像机拍摄图像的坐标系、原点是摄像机光轴与成像平面的交点,是图像的中心点

2.4像素坐标系: (u,v )是二维坐标系,原点位于图像的左上角,与图像坐标系位于同一平面。

2.5像素坐标系从图像坐标系向像素坐标系的变换是通过将图像坐标系向左上方移动来得到的

2.6相机坐标系到图像坐标系的转换下图。 图像点x是连接图像平面、三维点(空间中的一点) x和相机中心c的直线相交而成的。

相机的光学坐标轴与z轴一致,因此可以简化为相似的三角形

根据相似三角形的比例关系,可以得到:

因此,图像坐标系和相机坐标系之间的矩阵变换关系如下。

2.7世界坐标系到相机坐标系的转换世界坐标系和相机坐标系都是三维坐标,任意两个三维坐标之间可以通过旋转和平移进行转换

x、y、z是照相机坐标系坐标,xw、yw、zw是世界坐标系的坐标,r是旋转矩阵,t是平移量

2.8世界坐标系到像素坐标系的转换

二、棋盘目标定1、使用标定的过程。 1 .打印棋盘格A4纸(知道黑白间距),贴在平板上

2 .对棋盘格拍摄几张照片(一般为10-20张) () ) ) ) ) ) ) ) ) 652

3 .在图像中检测特征点(Harris特征)

4 .采用解析解估计方法计算5个内部参数和6个外部参数

5 .基于最大似然估计策略,设计优化目标并实现参数的优化

2、代码实现2.1获取标定板角点在世界坐标系中的位置,在标定板上建立世界坐标系。 所有点的z坐标都是0,所以只需要分配x和y

objp=NP.zeros () w*h,3 ),np.float32 ) objp ) 3360,2 )=NP.mgrid ) 0:w,0:h ).t.reshape )

打印的标定板世界坐标如下:

2.2找到棋盘的角点ret。 corners=cv2.findchessboardcorners (gray,(w,h ),None )三个参数分别表示如下:

主板图像(8位灰度或彩色图像) )。

棋盘的尺寸

存储转折点的位置

返回值:

retval :是否检测到拐角。

角点:角点的位置。

2.3角点精度检测cv2.cornersubpix(gray,corners,(11,11 ),(-1,-1),criteria )参数:输入图像角点初始坐标搜索窗口为

返回值:拐角位置

2.4显示拐角位置cv2.drawchessboardcorners(img,) w,h,corners,ret )

2.5标定图像cv2.calibratecamera(objpoints,imgpoints,gray.shape[:-1],None,None )输入:世界坐标系下的位置、像素坐标、图像的

输出:标定结果、摄像机内部参数矩阵、畸变系数、旋转矩阵、平移矢量

2.6优化参数以上,我们已经得到了摄像机内参数和畸变系数,但在图像畸变之前,也可以使用cv.getOptimalNewCameraMatrix ()优化内参数和畸变系数,设置自由放大倍数。 当alpha设置为0时,将返回修剪的内部参数和失真系数,以在移除失真后移除不需要的像素。 如果alpha设置为1,则返回包含额外黑色像素点的内部参数和失真系数,并返回用于修剪的ROI。

2.7消除失真的方法: dst=cv2.undistort(img2、

mtx, dist, None, newcameramtx)# 根据前面ROI区域裁剪图片x,y,w,h = roidst = dst[y:y+h, x:x+w]cv2.imwrite('calibresult10.jpg',dst)

img2:待校正图像
dst:输出图像

2.8反投影误差

通过反投影误差,我们可以来评估结果的好坏。越接近0,说明结果越理想。通过之前计算的内参数矩阵、畸变系数、旋转矩阵和平移向量,使用cv2.projectPoints()计算三维点到二维图像的投影,然后计算反投影得到的点与图像上检测到的点的误差,最后计算一个对于所有标定图像的平均误差,这个值就是反投影误差。

2.9代码 import cv2import numpy as npimport glob# 找棋盘格角点# 阈值criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)#棋盘格模板规格w = 6 #内角点个数,内角点是和其他格子连着的点h = 4# 世界坐标系中的棋盘格点objp = np.zeros((w*h,3), np.float32)objp[:,:2] = np.mgrid[0:w,0:h].T.reshape(-1,2)# 储存棋盘格角点的世界坐标和图像坐标对objpoints = [] # 在世界坐标系中的三维点imgpoints = [] # 在图像平面的二维点i=0images = glob.glob(r'E:/Vision/work4/picture/*.jpg')print(images)for fname in images: print(fname) img = cv2.imread(fname) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 找到棋盘格角点 ret, corners = cv2.findChessboardCorners(gray, (w,h),None) # 如果找到足够点对,将其存储起来 if ret == True: # 角点精确检测 cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) objpoints.append(objp) imgpoints.append(corners) # 将角点在图像上显示 cv2.drawChessboardCorners(img, (w,h), corners, ret) cv2.imshow('findCorners',img) cv2.waitKey(1000)cv2.destroyAllWindows()#标定、去畸变ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)print (("ret:"),ret)print (("mtx:n"),mtx) # 内参数矩阵print (("dist:n"),dist) # 畸变系数 distortion cofficients = (k_1,k_2,p_1,p_2,k_3)print (("rvecs:n"),rvecs) # 旋转向量 # 外参数print (("tvecs:n"),tvecs) # 平移向量 # 外参数# 去畸变img2 = cv2.imread('E:/Vision/work4/picture/10_d.jpg')h,w = img2.shape[:2]newcameramtx, roi=cv2.getOptimalNewCameraMatrix(mtx,dist,(w,h),0,(w,h)) # 自由比例参数dst = cv2.undistort(img2, mtx, dist, None, newcameramtx)# 根据前面ROI区域裁剪图片x,y,w,h = roidst = dst[y:y+h, x:x+w]cv2.imwrite('calibresult10.jpg',dst)# 反投影误差total_error = 0for i in range(len(objpoints)): imgpoints2, _ = cv2.projectPoints(objpoints[i], rvecs[i], tvecs[i], mtx, dist) error = cv2.norm(imgpoints[i],imgpoints2, cv2.NORM_L2)/len(imgpoints2) total_error += errorprint (("total error: "), total_error/len(objpoints))

运行结果:
内参数矩阵mtx、畸变系数dist、旋转矩阵rvecs、平移向量tvecs分别为:



输出的反投影误差为total error的结果为0.03427647962630596,接近0,说明误差小,标定效果还可以。获取相机的参数后就可以应用于构建三维模型和识别物体。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。