相机学习
后续学习使用视觉slam十四讲.pdf用了都说好
相机学习
相机基本工作原理
camera理论基础和工作原理_weixin_30316097的博客-CSDN博客
(干货) |机器视觉不可不知的相机内部工作原理_智能算法的博客-CSDN博客
【Camera基础(一)】Camera摄像头工作原理及整机架构_camera架构_邢仕冲的一亩三分地的博客-CSDN博客
结构
感光元件
也就是光线照射到,成像的位置。以前的胶片相机的感光原件是银盐,也就是胶片。
现在的数码相机是cmos或者ccd。这个感光元件把光线信息记录下来保存,数码相机这里涉及到模数转换。
模数转换的意思就是将模拟信号转换成数字信号。
模拟信号就是直接采集出来的信号,数字信号是用于给电子元器件进行处理的信号。
对于计算机来说,2进制,01便于计算机记录处理数据,
模拟信号和数字信号的区别和特点_数字信号与模拟信号的区别_高原低谷的博客-CSDN博客

cmos
Complementary Metal-Oxide Semiconductor
中文翻译过来就是互补金属半导体氧化物半导体
ccd(电荷耦合
相对于cmos更好的
1. 全局快门,2. 非常低的噪音,3. 很高的帧频
快门
快门就是相机中用来控制光线照射感光元件时间的装置。


通俗一点说快门就是一个帘子,挡在幕布前面
光圈

中央处理器cpu
没看错,确实相机也有中央处理器(不过是针对数码相机
这里的中央处理器主要负责整台相机的所有动作,开机控制相机
图像处理器gpu
Graphics Processing Unit
很多相机的中央处理器和图像处理器继承到了一块芯片上
它主要负责将光学图像信号(模拟信号)转换成数字信号,也就是照片和视频。然后再保存到sd卡中
工作流程
对于数码相机来说
- 透过镜头的光线照射在图像传感器上,此时为模拟信号
- 有数字影像处理器将多种图像模拟信号转换成模拟信号
- 完成信号数据化之后,照片数据传输到存储卡保存
相机成像模型
成像原理是小孔成像
学习文档
计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换_生活没有if-else的博客-CSDN博客
旋转变换(一)旋转矩阵_csxiaoshui的博客-CSDN博客
全局快门和卷帘快门
首先要了解什么是快门,以及相机的基本结构
【转】:卷帘快门(Rolling Shutter)与全局快门(Global Shutter)_mahui85的博客-CSDN博客
这个是收集光线的不同方式
工业相机镜头参数
相机核心参数iso,光圈,快门
焦段和焦距
资料索引:
https://zhuanlan.zhihu.com/p/38759835
https://zhuanlan.zhihu.com/p/38759835
焦距和焦段这两个概念其实很类似,大致可以说是一个东西
焦距就是镜头的光学中心到传感器的距离
焦段就是指变焦镜头焦距的变化范围
焦距是一个准确数字,焦段是一段范围
1.8的意思是可变焦1.8倍
比如50mm 1.8F中50mm就是焦距。可以说50mm焦距也可以说是50mm焦段
一般来说,焦距的数字越小,则表示单反相机的焦距越短,拍摄的视角则越广,取景的范围也越广阔。反之则相反。
焦段的不同会导致整张照片记录的画面范围和画面视角都有所不同,总共有
超广角、广角、人像、人文、长焦、超长焦、微距等之分

我们手机上的广角镜头就是属于短焦距镜头
曝光时间(快门)
也就是coms在光线下面暴露的时长,也就是快门开关的时间长度。一般来说曝光时间越长,照片越亮。
但是记录的信息也会越多,因为它记录了这一段时间内的光线信息,也就是更容易糊掉(糊掉不太准确 可以用记录的光线信息就更多来理解 而光线信息就是图像)
cmos参数
大小尺寸(靶面尺寸)
种类
有全画幅
半(残)画幅(APS-C画幅)
更小的小画幅
更大的中画幅(少见)
摄影圈有一句话,叫底大一级压死人
这里的底大就可以理解为我们cmos画幅的大小
像素决定了我们相机分辨率的最大值,约等于相机最大拍摄分辨率的乘积,那么分辨率又是什么呢分辨率就是图片的纵向像素点 X 横向像素点,通俗说 就是图像的大小尺寸。
分辨率越大越清晰, 图片也越大。如果还是不懂 看这三张实拍图对比就大概能知道了
图像传感器的感光部分的大小。常见的靶面有1/4’‘、1/3’‘、1/2’‘、2/3’‘、1’’等几种,当然也有其他规格。靶面尺寸规格见下表。
这里的这里是英寸的意思,是矩形对角线的长度
景深
景深指的是相机对焦点前后相对清晰的成像范围

景深通常由物距、镜头焦距,以及镜头的光圈值所决定(相对于焦距的光圈大小)
不同景深对比
景深的影响要素
景深的影响要素有三:一是光圈的大小。二是焦距的长短。三是拍摄距离的远近。
https://zhuanlan.zhihu.com/p/469336769
光圈大小
为什么 F 越大光圈越小,F2\2.8\4 等数字怎样计算?推算一遍让你彻底弄懂光圈 - IT之家
这个主要是控制进光量的
在相机中,光圈用“F+数字”的形式表示,如图3方框内显示的F3.5就是光圈。F后面的数字越大,表示光圈越小;F后面的数字越小,表示光圈越大。


光圈具体尺寸计算

这里看到了手动调节光圈
相机上可以看到两个可以调节的东西,靠近镜头的是调节焦距的,另一个是光圈的(这个好像被什么胶给粘死了。
这里的1:2.0就是用来就按光圈值的
光圈:光圈值,是镜头的焦距/镜头通光直径得出的相对值(相对孔径的倒数)。例如针对50mm的标准镜头而言(这里的50指的是焦距),最大的通光直径(也就是孔径)为29.5mm,其最大光圈的计算值为50mm÷29.5mm=F1.7,这样就能够理解同一变焦镜头在不同的焦距下,虽然最大的通光直径相同,但是换算之后其最大光圈是不同的。F值越大,光圈越小,反之,F值越小,光圈越大。
光圈系数跟F值是一个意思,不过表达方法不同,他用的是1:2代表F2,1:1.4代表F1.4
iso
也就是感光度。是感光元件对于光的灵敏程度
过曝 的意思是过度曝光,也就是亮度太大了
欠爆 就是缺少,亮度低
也就是说当在较暗的环境中,使用高iso也能达到成像照片比较亮的效果,但代价是会产生一些噪点
在较亮环境中使用低iso就可以
iso 可以对于一些过爆欠爆的情况进行一个处理
- 其一是快门速度,更高的感光度能获得更快的快门速度,这一点比较容易理解;
- 其二是画质,越低的感光度带来更细腻的成像质量,而高感光度的画质则是噪点比较大。
说到这里补充一个概念——噪点。
主要是指CCD将光信号转为电信号接收并输出的过程中所产生的影像中的粗糙部分。
色深
比如说一个图片,分为三色到rgb,每个色道的颜色深浅程度为色深,
一般来说色深为8bit,也就是256个,表示这个色彩的变化范围是0-256
像元尺寸
是指一个像素在长和宽方向上所代表的实际大小
目前工业数字相机像元尺寸一般为3μm-10μm,一般像元尺寸越小,制造难度越大,图像质量也越不容易提高。
像元尺寸 X 总像素大小(分辨率) = 感光芯片尺寸(图像区域大小)
fov(视场角)
视野范围
项目杂识-FOV(视场角)_黑山老妖的笔记本的博客-CSDN博客
坐标系转换
前导知识
三维空间中的Pitch、Yaw、Roll值_yaw值_流浪打工人的博客-CSDN博客
roll翻滚,所以是飞机轴线
pitch上下点头,所以是飞机平面的垂直于飞机轴线的直线
yaw 左右摆头,所以是垂直于飞机平面的轴
首先要清楚这里需要了解的有哪几个坐标系
- 世界坐标系:用于描述相机的位置。(坐标原点固定)
- 相机坐标系:光心为原点(相机)(三维)
- 理想图像坐标系:光心为图像中点(二维)
- 真实图像坐标系(也就是像素坐标系):原点为图想左上角
- 数字化图像坐标系

世界坐标系->相机坐标系

通过旋转平移,让两个坐标系的xyz轴重合。
这里将旋转矩阵和平移矩阵进行融合

下面这个就是相机的内参矩阵

R表示的是旋转量,T表示的是平移量
至于为什么能够旋转平移,详见相机模型,文档中有对于数学知识的详细介绍
相机坐标系->图像坐标系

相似三角形

图像坐标系->像素坐标系


主要就是缩放和平移

总结


内参:就是刚体转换是使用的矩阵
外参:就是第二步和第三部的矩阵相乘
相机外参随着世界坐标系与相机坐标系的相对位置而变。相机的旋转、平移(相机的位姿由它的旋转矩阵R和平移向量t来描述),用于描述在静态场景下相机的运动,或者在相机固定时,运动物体的刚性运动。相比于不变的内参,外参会随着相机运动发生改变。
- 从相机坐标系转换到像素坐标系中,相机内参的作用
- 从世界坐标系转换到相机坐标系中,相机外参的作用
相机畸变
分类
径向畸变
原因:在相机制造过程中,很难保证镜头的厚度完全均匀,由于制造工艺的原因,通常为这种情况为中间厚、边缘薄,因而光线在远离透镜中心的地方,会发生更大程度的扭曲,这种现象在鱼眼相机(桶形畸变)中尤为明显。




枕形畸变 桶形畸变
切向畸变
原因:切向畸变产生的原因在于相机在制造过程中,成像平面与透镜平面不平行,产生了透视变换。


去畸变方法
对于径向畸变

对于切向畸变

我们实际生活中遇到的问题一般是二者结合的情况
这里我们直接将两个畸变矫正相加


chatgpt的回答
去除单目相机图像的畸变通常需要进行畸变校正。畸变通常分为径向畸变和切向畸变两种类型。径向畸变是由于透镜曲率引起的,而切向畸变是由于透镜安装不够完美引起的。以下是一般的步骤:
- 获取相机参数:
- 获取相机的内参,包括焦距、主点坐标和透镜畸变系数。这些参数通常可以从相机制造商的文档或相机标定工具中获取。
- 图像坐标到相机坐标的转换:
- 对于每个图像点,将其从像素坐标系转换为相机坐标系。这可以使用以下公式完成:
1 | Xc = (x - cx) / fx |
其中,(x, y) 是图像中的像素坐标,(Xc, Yc) 是相机坐标系中的坐标,(cx, cy) 是主点坐标,(fx, fy) 是焦距。
- 去除径向畸变:
- 径向畸变是由于透镜的曲率引起的,通常用多项式模型进行建模。去除径向畸变的一种常见方法是使用以下公式进行校正:

1 | Xc_corr = Xc * (1 + k1 * r^2 + k2 * r^4 + k3 * r^6) |
其中,(Xc_corr, Yc_corr) 是校正后的相机坐标,r 是点 (Xc, Yc) 到主点的距离,k1、k2 和 k3 是径向畸变系数。
- 去除切向畸变:
- 切向畸变通常由于透镜的安装不够完美引起,可以使用以下公式进行校正:

1 | Xc_corr = Xc_corr + (2 * p1 * Xc_corr * Yc_corr + p2 * (r^2 + 2 * Xc_corr^2)) |
其中,p1 和 p2 是切向畸变系数。
- 相机坐标到图像坐标的转换:
- 将校正后的相机坐标转换回图像坐标系,使用以下公式:
1 | x_corrected = (Xc_corr * fx) + cx |
其中,(x_corrected, y_corrected) 是校正后的图像坐标,(fx, fy) 是焦距,(cx, cy) 是主点坐标。
- 应用校正:
- 将校正后的坐标
(x_corrected, y_corrected)应用到图像上,即可得到去畸变的图像。
- 将校正后的坐标
以上是一般的去畸变步骤。在实际应用中,可以使用各种计算机视觉库和工具来进行畸变校正,例如OpenCV等。通常需要事先对相机进行标定以获取内参参数。
总结
相机畸变现象发生的位置:
- 世界坐标系 -> 相机坐标系,刚体变换,不存在畸变现象;
- 相机坐标系 -> 图像坐标系,也就是成像过程,理想情况下是相似三角形,但实际由于相机制造、装配的原因,成像过程存在畸变现象;
- 图像坐标系 -> 像素坐标系,坐标原点、单位不同,仅仅平移与缩放,不存在畸变现象;
gtk参数理解

resolution:是分辨率
toggle mode:是控制快门的一些设置,
continous:也就是连续拍照
sw-toggle:就是点击下面按钮会重新拍照
hw:不知道
polarity:极性
Exposure:
mode
auto
target:
flicker:闪烁,这里我觉得是视频帧率的意思
manual
gain:增益的意思
我的理解就是给色深进行增益
gain是增益的意思,增益效应就是乘法运算(不同的数值乘以同一个数,数值越大的,乘完的结果更大),所以gain的默认值为“1”,图像不会有任何变化。但是如果增益不是1,而是比1大的数,这个时候对于越亮的部分就越有影响,对于暗的部分影响就没有那么大,最暗的部分0乘增益后还是0。
time:曝光时间
ISP PROCESSING(isp也就是图像信号处理器)(processing的意思是进程)
据专业人士介绍,ISP的具体处理流程如下:镜头将光信号投射到传感器的感光区域后,传感器进行光电转换,并将拜耳格式的原始图像发送给ISP。然后ISP处理算法,将RGB空间域的图像输出到后端视频捕获单元。在这个过程中,ISP通过其上运行的固件控制ISP逻辑,从而相应地控制镜头和传感器,然后完成自动光圈、自动曝光、自动白平衡等功能。其中,固件的操作是由视频捕获单元的中断驱动的。PQ工具工具通过网口或串口完成ISP的在线图像质量调整。
ISP算法处理可以对拜耳图像执行黑电平补偿、镜头阴影校正、坏像素校正、颜色插值、拜耳噪声消除和白平衡(AWB)校正、色彩校正、伽马校正、色彩空间转换(RGB到YUV)、色彩噪声去除和边缘增强、YUV色彩空间中的色彩和对比度增强。然后以 YUV 或 RGB 格式输出数据。它通过I/O接口传输到CPU进行处理,用于图像存储和显示。
我们常说的图片的锐化、降噪和色彩优化都是在ISP中处理的。并且ISP还负责实现相位、激光和对比度等混合对焦操作,并为多个摄像头等提供支持。重要的任务是手机摄影不可或缺的关键部分。
sharpen:锐度,分辨率锐度。是让图像看起来更加清晰
H-image:
V-image:
Parameter:(参数
这个也就是用来保存以前调试的参数
Mapping tabble:
Gamma:也就是灰度值
contrast:对比度
SNAP SETTING:
拍照,快照。
去畸变操作学习
棋盘格法
遇到的问题也是和夏天怡一样的问题,没有修改像素值
Matlab 使用 Camera Calibrator工具箱——相机标定_matlab camera calibrator_笑着灬up的博客-CSDN博客
使用Matlab做相机标定(获取相机的内外参数矩阵)_相机外参矩阵计如何获取_开门儿大弟子的博客-CSDN博客
| 内参矩阵 | Intrinsic Matrix |
|---|---|
| 焦距 | Focal Length |
| 主点 | Principal Point |
| 径向畸变 | Radial Distortion |
| 切向畸变 | Tangential Distortion |
| 旋转矩阵 | Rotation Matrices |
| 平移向量 | Translation Vectors |
| 平均重投影误差 | Mean Reprojection Error |
| 重投影误差 | Reprojection Errors |
| 重投影点 | Reprojected Points |

目前觉得这个误差可能有点大

以物体为中心的角度

五个角度
以相机为中心

这个是经过了剔除之后的柱形图
后来我把原来的一个角度给删掉了(因为亮度比较低
重新拍了一组角度
最终效果



| 内参矩阵 | Intrinsic Matrix |
|---|---|
| 焦距 | Focal Length |
| 主点 | Principal Point |
| 径向畸变 | Radial Distortion |
| 切向畸变 | Tangential Distortion |
| 旋转矩阵 | Rotation Matrices |
| 平移向量 | Translation Vectors |
| 平均重投影误差 | Mean Reprojection Error |
| 重投影误差 | Reprojection Errors |
| 重投影点 | Reprojected Points |
看了去年的才发现原来0.5的误差很高。。。。。。
径向畸变 :
final_result.RadialDistortion
ans =
-0.0958 -0.1560
切向畸变:
final_result.TangentialDistortion
ans =
0 0
内参矩阵:
final_result.Intrinsics.K
ans =
1.0e+03 *float
1.0388 0 0.3231
0 1.0423 0.2461
0 0 0.0010
重新调焦之后进行相机标定
五个角度 横着倾角2,竖着倾角2,还有平着的1(由于竖着往下亮度很低,所以就没拍

拍了70张最后留了27张,最终误差还是在0.39
cameraParams.Intrinsics.K
ans =
1.0e+03 *
1.0631 0 0.3233
0 1.0607 0.2314
0 0 0.0010
cameraParams.RadialDistortion
ans =
-0.2128 2.3775
cameraParams.TangentialDistortion
ans =
0 0
去畸变参数应用
我觉得可以理解成对焦(对于变焦镜头来说)
增长焦距https://zhuanlan.zhihu.com/p/142648872
我使用的相机型号貌似是没有变焦这个功能(有的,在相机上,我没有看到。。。。。
本次任务是在6~7米处识别清除装甲板(差不多将物体方到了离相机6米左右的位置)
这个参数对于相机来说叫拍摄距离
以下是一些影响拍摄距离的因素:
- 焦距:镜头的焦距决定了相机能够捕捉的场景范围和细节。较短的焦距(广角镜头)适用于拍摄广大场景,而较长的焦距(长焦镜头)用于拍摄远处的对象。焦距还影响了景深,即图像中清晰的前景和背景范围。
- 光圈大小:光圈的大小(用F值表示)影响了相机的进光量。较大的光圈(较小的F值)能够捕捉更多光线,适用于低光条件下的拍摄。较小的光圈(较大的F值)可以增加景深,使更多的前景和背景保持清晰。
- 快门时间:较长时间的快门,能使cmos捕获更多的光线,
- 传感器尺寸:相9机传感器的大小对拍摄结果产生影响。较大的传感器通常能够捕捉更多的细节和提供更好的低光性能,但相机也会更大更重。
- 目标大小:要拍摄的目标的大小也是重要因素。较大的目标通常在较远的距离上更容易捕捉,而小目标可能需要更长焦距的镜头或更近的拍摄距离。
- 镜头质量:镜头的质量会影响图像的清晰度和畸变程度。高质量的镜头通常能够提供更锐利的图像,并减少光学畸变。
- 光线条件:光线条件是拍摄距离的重要因素。在低光条件下,可能需要更大的光圈和较高的ISO设置来获得足够的曝光。
去畸变参数在c++ opencv中的使用
数学原理太难了,看了一会没看明白,先放个链接。。。。。
关于OpenCV中的去畸变 c++_opencv c++ undistort_小白菜的点滴成长的博客-CSDN博客
OpenCV: Camera Calibration and 3D Reconstruction
学习笔记 – opencv图像去畸变_opencv 畸变参数_昼行plus的博客-CSDN博客
主要是依据这个文档学习的去畸变
矩阵的输入
1 | const cv::Mat K = (cv::Mat_<double>(3,3) << 1038.8, 0,323.1, 0, 1042.3,246.1, 0,0,1); |
getOptimalNewCameraMatrix + initUndistortRectifyMap + remap 矫正图像
OpenCV: Camera Calibration and 3D Reconstruction
首先通过getOptimalNewCameraMatrix获得新的相机内参矩阵
1 | Mat cv::getOptimalNewCameraMatrix |
在相机畸变校正过程中,获取新的相机内参矩阵(New Camera Matrix)是一个重要的步骤,通常通过OpenCV等库函数中的getOptimalNewCameraMatrix函数来完成。这一步的主要目的是优化图像的投影变换,以最大程度地保留有用的图像信息,同时最小化畸变引入的误差。以下是为什么要首先获取新的相机内参矩阵的一些原因:
- 畸变校正:相机的畸变(主要是径向畸变和切向畸变)会导致图像中的直线弯曲和图像变形。通过获取新的相机内参矩阵,可以将这些畸变纠正,使图像更接近于理想的几何投影。
- 最小信息丢失:在畸变校正过程中,通常会对图像进行裁剪或者拉伸,以适应校正后的图像空间。新的相机内参矩阵的目标是最小化这些操作对图像信息的丢失,确保尽可能多的保留原始图像中的内容。
- 减小计算复杂度:通过获取新的相机内参矩阵,可以将畸变校正过程中的计算复杂度降低。这是因为它可以限制校正后图像的区域,使得在校正后的图像空间中,只有有用的像素才会被计算和存储。
- 改善后续处理:校正后的图像更容易用于后续的计算和处理任务,如目标检测、图像匹配等。获取新的相机内参矩阵可以使这些任务更加准确和可靠。
- 去除无效区域:畸变校正可能会导致图像边界处的一些像素位置不可见或不包含有用信息。新的相机内参矩阵可以帮助去除这些无效区域,使得图像更干净。
总之,获取新的相机内参矩阵是畸变校正的一个关键步骤,旨在优化图像的几何变换,以提高图像质量并减小处理的复杂性。这个矩阵的选择需要根据具体的应用和需求进行优化。
第二次使用initUndistortRectifyMap获取变换之后的像素坐标
mapx和mapy
1 | Mat NewCameraMatrix; |
第三次
将原始图像中的像素映射到矫正之后的图像的指定位置
undistort
这个也就是集成了上面那三个中的后两个
1 | void cv::undistort |
1 | cv::undistort(RawImage, UndistortImage, K, D, K); |

处理之后的效果对比
我觉得区别不大(可能因为原来相机的焦距本来就挺大的)(畸变的不严重)
调参记录

首先是gain,这个就是iso,也就是调节光敏感程度
这个有利有弊,小则噪点少但是图片比较暗。大噪点多图片亮
曝光时间多了也会导致噪点增加
为了增加亮度,提高gain,提高time
为了轮廓清晰,直接把sharpen提到最高(但是这个好像没有办法输入
色道增益就是以图片看清楚颜色为目的调
灰度值提高用来给画面增亮
最后效果

能大概看出来是个4
问题寄录
没有插相机或者没有监测到相机会出现这个报错
一个是设置的分辨率问题,一个是可能usb接口松动之类的,导致程序这个通道异常中断,这种情况直接重新插拔相机就可以了。

有疑或这个单位是什么ms?
五个角度 横着倾角2,竖着倾角2,还有平着的1(由于竖着往下亮度很低,所以就没拍(应该怎么处理
