计算机视觉基础(7)——相机基础
前言
从这一节开始,我们来学习几何视觉。中层视觉包括相机模型、单目几何视觉、对极几何视觉和多目立体视觉等。在学习几何视觉最开始,我们先来学习一下相机模型,了解相机的基本原理,了解相机如何记录影像。
一、数字相机

1.1 基本工作原理
相机用于生成二维的图像,图像最小的单元被称为像素 (Pixel)
• 图像中的每个像素对应三维世界中的某个特定方向
• 相机度量某一时刻,每个像素的光照强度和颜色,并保存在图像中对应像素位置处。
• 换言之,像素值衡量了某一时刻,来自某一方向上的光照强度
1.2 基本组成元素

二、图像传感器
2.1 图像传感器简介
图像传感器是一种将光学影像转换成电子信号的设备。
• 感光元件由光敏单元阵列构成
• 常见的图像传感器有感光耦合器件(CCD)和互补式金属氧化物半导体有源像素传感器(CMOS )两种
• 彩色图像的生成采用RGB颜色模型:将红绿蓝三原色的色光以不同比例相加,以产生各种色彩光
彩色图像传感器按照对色彩的分辨方式可分为:
• 3CCD 传感器:通过双色棱镜分光,并采用3块独立的CCD传感器
• 拜尔(Bayer)传感器:一个像素点只对三原色光中的一种感光
• Foveon X3 传感器:每一像素点都有三重传感器
2.2 3CCD传感器

2.3 拜尔传感器

三、快门

3.1 快门简介
• 通过调整快门速度 (Shutter Speed),控制光线照射感光元件的时间,即曝光时间 (Exposure Time)
• 更长的曝光时间更多的入射光图像亮度更亮
• 更长的曝光时间容易引起运动模糊 (长曝光摄影)

3.2 卷帘宽门
- 采用逐行扫描的方式曝光
- 同一行像素被同时记录,不同行像素曝光时间点不同
- 当相机或物体发生快速移动时会引起畸变(Distortion)
3.3 全局快门
• 所有像素在同一时间曝光
• 不会造成卷帘快门式的畸变,因而更适用于3D重构任务 (如SLAM)
• 造价更昂贵
【参考链接】
四、图像的形成
4.1 成像原理

问:直接在物体前放置幕布,幕布上能否投射出物体的图像?
答:不会,幕布上每一点都会接收到来自不同方向光线的投射,因而投影的结果是十分模糊的。
那么如何解决呢?
- 增加遮光板屏蔽掉多余的光线 (小孔成像)
- 遮光板上通光的小孔就是光圈 (Aperture)
- 最朴素的针孔相机模型
这就是我们日常生活中的小孔成像原理。
4.2 针孔相机

• 针孔相机假设通过对小孔是一个点,从物体的每个点发出的光线只有一条能通过小孔
• 针孔相机模型用于近似图像的形成过程
• 利用相似三角形原理分析
• 针孔相机模型:图像较锐化,由于光线较少,需要更多的曝光时间
• 扩大孔径:可以减少所需曝光时间,但图像变模糊
• 解决方法:用镜头(透镜)替换针孔
4.3 薄透镜相机
薄透镜相机模型是对针孔相机的近似。
• 理想情况下物点、像点、光心三点共线
• 光线与光心距离越远,误差越大
• 采用光圈,屏蔽距离光心较远的光心,控制误差

4.4 光圈与景深
【光圈】
光圈限制了光线与光心的最大距离,光圈就是小孔的孔径。

【景深】
景深指相机聚焦平面前后相对清晰的成像范围,描述在空间中,可以清楚成像的距离范围
【光圈和景深】
【参考网站】Depth of Field in Photography Explained: The Ultimate DOF Guide! (capturetheatlas.com)
4.5 针孔/薄透镜相机的假设
• 从同一物点发出的光线被聚焦于同一像点
• 所有的像点位于同一平面上
• 物点、光心与像点三点共线
因为以上假设条件在实际中并非总是满足的,这导致了不完美的成像结果。
五、像差
真实成像过程中3D场景到2D图像的投影关系与理想薄透镜相机模型中的投影关系的偏差,称
为像差。像差表现为图像的形变与失真,有多中具体的形式。主要形式如下:
• 畸变 (Distortion)
• 球面像差 (Spherical aberrations)
• 色相差 (Chromatic aberrations)
• 像散 (Astigmatism )
• 光晕 (Vignetting)
5.1 畸变
- 直线投影 (rectilinear projection): 3D场景中的直线在2D投影中仍未直线
- 畸变:与直线投影的偏差

5.2 球面像差
- 由于透镜球面折射率变化不均造成平行于光轴的光线无法聚焦
- 造成成像模糊

5.3 色相差
透镜折射率随光的波长而变化,同一物点发出的不同颜色光线无法聚焦于同一像点
5.4 像散
水平和竖直方向的焦点不同
5.5 光晕/暗角
- 图像的外围部分的亮度或饱和度比中心区域低
- 一个或多个透镜的实际尺寸造成的,后方的元件遮蔽了前方的
- 然而,有时却因为需要创意风格而被刻意加入

六、常见的镜头种类

6.1 长焦镜头
- 视野较窄
- 透视变形最小
- 3D空间中平行线在2D图像中保持平行
6.2 广角镜头
- 视野较宽广 (70-120度)
- 有透视变形
- 3D空间中的直线在2D图像大致是直线

6.3 鱼眼镜头
- 视野极宽 (>130度)
- 3D空间中的直线在2D图像中几本不再是直线

相关文章:
计算机视觉基础(7)——相机基础
前言 从这一节开始,我们来学习几何视觉。中层视觉包括相机模型、单目几何视觉、对极几何视觉和多目立体视觉等。在学习几何视觉最开始,我们先来学习一下相机模型,了解相机的基本原理,了解相机如何记录影像。 一、数字相机 1.1 基…...
解决Github上的README无法显示图片
首先感谢博主的思路:思路 最近写了点东西提交到git 发现本地能查看md里的图片用的相对路径,提交到github就看不见,并且发现不只是我自己的仓库看不见,其他人的我也看不见。那就有问题了 解决:正常使用相对路径&…...
qnx 工程目录创建工具 addvariant
文章目录 前言一、addvariant 是什么二、addvariant 使用实例1. variant names 参数说明2. 创建一个可执行文件工程3. 创建一个动态库工程 总结参考资料 前言 本文主要介绍如何在qnx 开发环境中创建工程目录及其相关的配置文件(common.mk, Makefile 文件等) 软件版本ÿ…...
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)
第1章:视觉项目资料介绍与学习指南 相关知识: 介绍计算机视觉、OpenCV库,以及课程的整体结构。学习概要: 了解课程的目标和学习路径,为后续章节做好准备。重要性: 提供学生对整个课程的整体认识࿰…...
【AI视野·今日CV 计算机视觉论文速览 第278期】Mon, 30 Oct 2023
AI视野今日CS.CV 计算机视觉论文速览 Mon, 30 Oct 2023 Totally 50 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Image Clustering Conditioned on Text Criteria Authors Sehyun Kwon, Jaeseung Park, Minkyu Kim, Jaewoong Cho, Ernest…...
深度学习:多模态与跨模态
1 定义 1.1 多模态学习 多模态学习(Multimodal Learning)是一种利用来自多种不同感官或交互方式的数据进行学习的方法。在这个语境中,“模态”指的是不同类型的数据输入,如文本、图像、声音、视频等。多模态学习的关键在于整合和…...
大数据Hadoop之——部署hadoop+hive+Mysql环境(Linux)
目录 一、JDK的安装 1、安装jdk 2、配置Java环境变量 3、加载环境变量 4、进行校验 二、hadoop的集群搭建 1、hadoop的下载安装 2、配置文件设置 2.1. 配置 hadoop-env.sh 2.2. 配置 core-site.xml 2.3. 配置hdfs-site.xml 2.4. 配置 yarn-site.xml 2.5. 配置 ma…...
Python与ArcGIS系列(四)在地图文档中加入图层
目录 0 简述1 将图层添加到地图文档中2 将图层插入到地图文档0 简述 本篇介绍如何利用arcpy实现将图层添加到地图文档中,以及将图层插入到地图文档指定的位置。 1 将图层添加到地图文档中 arcpy的mapping模块提供的AddLayer()函数可以实现将图层添加到地图文档中。功能本质上…...
QT 程序异常崩溃
出现以下问题,大概率是你在修改代码时,在pro或者pri中增加了一些不存在的头文件或者cpp,使用BeyondCmp仔细对比,分享,希望帮助到你...
Ubuntu20.04 通过nmcli命令查看网卡状态为unmanaged
问题描述: 通过下述指令查看网卡状态为 "unmanaged" nmcli dev status 解决方法: cd /usr/lib/NetworkManager/conf.d/ sudo mv 10-globally-managed-devices.conf 10-globally-managed-devices.conf.bak sudo cp 10-globally-managed-devic…...
【R Error系列】r - fatal error : RcppEigen. h:没有这样的文件或目录
在头文件那要有 // [[Rcpp::depends(RcppEigen)]] 即: #include <Rcpp.h> #include <RcppEigen.h> using namespace Rcpp; using namespace Eigen;// [[Rcpp::depends(RcppEigen)]] // [[Rcpp::export]] 参考: r - fatal error: RcppEi…...
如何在聊天记录中实时查找大量的微信群二维码
10-5 如果你有需要从微信里收到的大量信息中实时找到别人发到群里的二维码,那本文非常适合你阅读,因为本文的教程,可以让你在海量的微信消息中,实时地把二维码自动挑出来,并且帮你分类保存。 如果你是做网推的&#…...
03-CSS基础选择器
3.1 CSS基础认知🍎 3.1.1 👁️🗨️CSS概念 CSS:层叠样式表(Cascading style sheets),为网页标签增加样式表现的 语法格式: 选择器{<!-- 属性设置 -->属性名:属性值; <!--每一个…...
【ROS】RViz2源码分析(二):main函数及编译配置详解
【ROS】郭老二博文之:ROS目录 1、main函数 #include <memory> #include <string> #include <vector>#include <QApplication>...
Vue.js的生命周期钩子
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...
第3章:搜索与图论【AcWing】
文章目录 图的概念图的概念图的分类有向图和无向图 连通性连通块重边和自环稠密图和稀疏图参考资料 图的存储方式邻接表代码 邻接矩阵 DFS全排列问题题目描述思路回溯标记剪枝代码时间复杂度 [N 皇后问题](https://www.luogu.com.cn/problem/P1219)题目描述全排列思路 O ( n ! …...
C++ Qt 学习(七):Qt 线程与并发
1. Qt 创建线程的三种方法 1.1 方式一:派生于 QThread 派生于 QThread,这是 Qt 创建线程最常用的方法,重写虚函数 void QThread::run(),在 run() 写具体的内容,外部通过 start 调用,即可执行线程体 run() …...
Django框架之模板层
【一】Django模板系统 官方文档:官方文档 【二】常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{逻辑相关的用{%%}。 【三】变量 在Django的模板语言中按此语法使用: {{ 变量名 }}。 当模版引擎遇到一个变量,它…...
【AI视野·今日Robot 机器人论文速览 第六十五期】Mon, 30 Oct 2023
AI视野今日CS.Robotics 机器人学论文速览 Mon, 30 Oct 2023 Totally 18 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Gen2Sim: Scaling up Robot Learning in Simulation with Generative Models Authors Pushkal Katara, Zhou Xian, Katerina F…...
LuatOS-SOC接口文档(air780E)--otp - OTP操作库
otp.read(zone, offset, len)# 读取指定OTP区域读取数据 参数 传入值类型 解释 int 区域, 通常为0/1/2/3, 与具体硬件相关 int 偏移量 int 读取长度, 单位字节, 必须是4的倍数, 不能超过4096字节 返回值 返回值类型 解释 string 成功返回字符串, 否则返回nil 例…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...


