计算机视觉基础(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 例…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...