光心

光心

        我们可以把凸透镜的中心近似看作是光心。我们用的照相机的镜头就相当于一个凸透镜,胶片 (或是数码相机的感光器件) 就处在这个凸透镜的焦点附近,或者说,胶片与凸透镜光心的距离大至约等于这个凸透镜的焦距。

        凸透镜能成像,一般用凸透镜做照相机的镜头时,它成的最清晰的像一般不会正好落在焦点上,或者说,最清晰的像到光心的距离 (像距) 一般不等于焦距,而是略大于焦距。具体的距离与被照的物体与镜头的距离 (物距) 有关,物距越大,像距越小 (但实际上总是大于焦距)。

        我们照相时,被照的物体与相机 (镜头) 的距离不总是相同的,比如给人照相,有时,想照全身的,离得就远,照半身的,离得就近。也就是说,像距不总是固定的,这样,要想照得到清晰的像,就必须随着物距的不同而改变胶片到镜头光心的距离,这个改变的过程就是我们平常说的调焦。

        一片薄的双凸透镜的焦点距离,一般指镜片的中心到焦点为止的光轴上的距离,这个镜片的中心叫做主点。

        实际的镜头都是由数片凸透镜和凹透镜组合而成,无法直接分辨出主点的位置。当焦点处于无限远时,镜头主点到结像平面的距离 = 焦距。

 

这里提供一个简单的相机光心求解代码: ```python import numpy as np import cv2 # 读取左右相机的标定文件 left_camera_matrix = np.loadtxt('left_camera_matrix.txt') left_distortion_coefficients = np.loadtxt('left_distortion_coefficients.txt') right_camera_matrix = np.loadtxt('right_camera_matrix.txt') right_distortion_coefficients = np.loadtxt('right_distortion_coefficients.txt') R = np.loadtxt('R.txt') T = np.loadtxt('T.txt') # 读取左右相机的图片,并提取角点 imgL = cv2.imread('left.jpg') imgR = cv2.imread('right.jpg') grayL = cv2.cvtColor(imgL, cv2.COLOR_BGR2GRAY) grayR = cv2.cvtColor(imgR, cv2.COLOR_BGR2GRAY) retL, cornersL = cv2.findChessboardCorners(grayL, (9, 6), None) retR, cornersR = cv2.findChessboardCorners(grayR, (9, 6), None) # 对左右相机的角点进行三维重建 object_points = np.zeros((6 * 9, 3), np.float32) object_points[:, :2] = np.mgrid[0:9, 0:6].T.reshape(-1, 2) cornersL2 = cv2.cornerSubPix(grayL, cornersL, (11, 11), (-1, -1), criteria=(cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)) cornersR2 = cv2.cornerSubPix(grayR, cornersR, (11, 11), (-1, -1), criteria=(cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)) pointsL = cv2.undistortPoints(cornersL2, left_camera_matrix, left_distortion_coefficients, R=np.eye(3), P=left_camera_matrix) pointsR = cv2.undistortPoints(cornersR2, right_camera_matrix, right_distortion_coefficients, R=np.eye(3), P=right_camera_matrix) points4D = cv2.triangulatePoints(np.eye(3, 4), np.hstack((R, T)), pointsL, pointsR) points3D = cv2.convertPointsFromHomogeneous(points4D.T) # 求解相机光心 x, y, z = np.mean(points3D, axis=0) camera_center = np.array([x, y, z]) print("相机光心:", camera_center) ``` 需要注意的是,这里的左右相机标定文件和图片是需要根据实际情况进行替换的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yongqiang Cheng

梦想不是浮躁,而是沉淀和积累。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值