【计算机视觉】相机
文章目录
- 一、原始的相机:针孔相机(Pinhole Camera)
- 二、针孔相机的数学模型
- 三、真实相机
- 四、透镜的缺陷
我的《计算机视觉》系列参考UC Berkeley的CS180课程,PPT可以在课程主页看到。
一、原始的相机:针孔相机(Pinhole Camera)
想要拍一张相片,直接拿胶片对着景物肯定是不行的,因为物体的每一点发出的光线都会到达胶片上的每一点,从而导致胶片上的影像非常模糊,甚至什么都看不出来。因此,我们想建立景物和胶片一一对应的关系,就必须让景物的每一点只有一束光线到达胶片上的一点(其实是很小的区域)。为了达到这个目的,我们就必须用一个隔板把其他多余的光挡住(图中的barrier),只允许其中一束光通过,也就是隔板上的孔(aperture)。这就是针孔相机的原理了。这里的孔在现代的相机上就是光圈,英文名同样是aperture。
针孔相机无处不在,树叶之间的缝隙也可以构成针孔相机,树荫下地面上圆形的亮斑其实就是太阳的像。当发生日食的时候,亮斑的形状就不是圆形的了,而是月牙形(如上图所示)。
有时候,连窗子都可以是照相机。如图所示,酒店的窗户构成针孔相机使得窗外的塔尖倒映在了墙上。
二、针孔相机的数学模型
下面,我们对针孔相机建立数学模型。
针孔相机捕捉的是光束,所有的光束通过一个投影中心(Center of Projection, COP)。像是在像平面上形成的。有效焦距 d d d是从投影中心到像平面的距离。
我们把投影中心放在空间直角坐标系的原点。这里与实际不同的是,我们把像平面放在投影中心的前面(介于物和投影中心之间的 z = − d z=-d z=−d处,以后处理其他相机也是如此),这样的话就可以避免景物倒过来的问题了。这样做是可行的,因为把像平面放在 z = d z=d z=d和 z = − d z=-d z=−d处的唯一区别就是景物是正着的还是倒着的。然后,用一些相似三角形,就可以知道物点 ( x , y , z ) (x,y,z) (x,y,z)对应的像点是 ( − d x z , − d y z , − d ) \left(-d\cfrac xz,-d\cfrac yz,-d\right) (−dzx,−dzy,−d)。忽略 z z z坐标 − d -d −d,我们就知道胶片上的坐标是 ( − d x z , − d y z ) \left(-d\cfrac xz,-d\cfrac yz\right) (−dzx,−dzy)。
三、真实相机
当然了,针孔相机是旧时代的产物,现在没有人在用针孔相机。现在的相机大都是基于透镜的。接下来我们会建立现代相机的模型。
首先我们讨论一下光圈半径。既然允许通过的光太多会使影像变模糊,为什么不让光圈越小越好呢?答案是:还有光的衍射现象。这里又要涉及一些瑞利判据之类的东西了,啊啊啊啊大物我的噩梦……
所以说光圈半径应该在一个合理的范围内。此外,现代相机使用透镜有很多好处。小孔成像利用的是光的直线传播,景物发出的大部分光被挡在外面了,只有一小部分进入了小孔,这就导致单位时间进入的光强很低,需要很长的曝光时间来弥补。而透镜允许我们不必浪费挡在外面的光,而是把光折进光圈,从而使得更多的光进入光圈,达到缩短曝光时间、降低衍射效应、提升图像品质的目的。透镜可以让光聚焦在一个特定的平面(焦平面)上,我们可以通过调节透镜的形状(曲率半径)、折射率来调节焦距,比针孔相机更方便。
当然,我们知道凸透镜成像满足高斯公式( 1 u + 1 v = 1 f \cfrac 1u+\cfrac 1v=\cfrac 1f u1+v1=f1)死去的几何光学突然开始攻击我,这也就意味着对于不同的物距 u u u,相距 v v v是不同的,因此只有物距在一个范围内才能映射到给定的像平面上。物距偏离合理范围,聚焦的平面就不在像平面上了,就像近视眼和远视眼一样。
使图像清晰的最远和最近物距之差称为景深(depth of field):
光圈半径可以控制景深。我们知道,光圈越大,景物的一个点发出的光线映射到像平面上的光斑半径就越大,使得图像不清晰。我们又知道,凸透镜成实像时满足“物近像远像变大,物远像近像变小”,所以景物太远或太近都会导致聚焦不到像平面上,从而使光斑变大。当光圈变小时,可以约数光发散的角度,使像上的光斑变小,从而能允许更远和更近的物距,使得景深变大。焦比(F-number)是焦距与光圈直径之比,焦比越大,意味着光圈半径越小,使得曝光时间增长(因为进入光圈的光变少了,需要更长的曝光时间来弥补),但景深也变大。
焦距可以决定视野(field of view, FOV)。焦距越小,说明透镜遮光能力越强,很边缘的光都可以折进光圈里面,使得视野越大;同时,同一个物体的像也会变小。
焦距太小会导致拍摄变形(比如上图左边的左右脸不一样大)。这是因为小焦距对应大视角,从而使近、远景物占视角的比例之比加大,近景物在图片中的比例被夸张地放大,从而使图像呈现出诡异的形状。
四、透镜的缺陷
- 色差(chromatic aberration)。透镜对不同波长的光的折射率不同,使得不同颜色的像位置发生偏移。
- 径向畸变(radial distortion)。这是由不完美的透镜导致的;光线通过透镜边缘时会产生偏移。
相关文章:

【计算机视觉】相机
文章目录 一、原始的相机:针孔相机(Pinhole Camera)二、针孔相机的数学模型三、真实相机四、透镜的缺陷 我的《计算机视觉》系列参考UC Berkeley的CS180课程,PPT可以在课程主页看到。 成像原理 一、原始的相机:针孔相机…...

Spring的条件注解,一篇文章盘得清清楚楚明明白白
前言 在Spring中,条件注解可根据特定的条件来决定是否创建或配置Bean,这些条件可以基于类、属性、环境等因素。通过使用条件注解,我们可以在Spring容器中更加灵活地管理和控制组件的创建和注入,帮助我们更加灵活地管理和控制Bean…...

Oracle (7)Online Redo Log Files
目录 一、Oracle Online Redo Log Files及其相关内容介绍 1、Online Redo Log Files简介 2、Online Redo Log Files特点 3、Online Redo Log Files文件组 4、多路复用文件 5、联机重做日志文件工作方式 6、LGWR什么时候写重做 7、LS和LSN 8、删除Redo文件成员 9、删除…...

物联网AI MicroPython传感器学习 之 PAJ7620手势识别传感器
学物联网,来万物简单IoT物联网!! 一、产品简介 手势识别传感器PAJ7620u2是一款集成3D手势识别和运动跟踪为一体的交互式传感器,传感器可以在有效范围内识别手指的顺时针/逆时针转动方向和手指的运动方向等。它可以识别13种手势&a…...

Affinity Photo 2.2.1 高端专业Mac PS修图软件
Affinity Photo Mac中文版是一款面向专业摄影师和其他视觉艺术家的专业图像处理软件,拥有众多专业高端功能,如Raw处理、PSD导入和导出、16位通道的编辑和ICC色彩管理以及兼容大量图片格式。是现在最快、最顺、最精准的专业修图软件。Affinity Photo Mac是…...

微服务-统一网关Gateway
网关的作用 对用户请求做身份认证、权限校验将用户请求路由到微服务,并实现负载均衡对用户请求做限流 搭建网关服务 创建新module,命名为Gateway,引入依赖(1.SpringCloudGateway依赖;2.Eureka客户端依赖或者nacos的服…...

【音视频|wav】wav音频文件格式详解
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...

网络工程综合试题(二)
1. SR技术有哪些缺点? SR(Segment Routing)技术是一种新兴的网络编程技术,它具有很多优点,但也存在一些缺点,包括: 部署复杂性:SR技术需要对网络进行改造和升级,包括更新…...

Android JNI/NDK 入门从一到二
1. 前言 最基础的创建JNI接口的操作,可以直接看这篇文章 : 第一个Android JNI工程, 本文会基于掌握创建JNI接口的操作的基础之上,来入门JNI/NDK。 2. 在JNI中打印日志 2.1 添加log模块 记得CMake中有log模块,不然编译不过 ta…...

吃瓜教程3|决策树
ID3算法 假定当前样本集合D中第k类样本所占比例为pk,则样本集合D的信息熵定义为 信息增益 C4.5算法 ID3算法存在一个问题,就是偏向于取值数目较多的属性,因此C4.5算法使用了“增益率”(gain ratio)来选择划分属性 CA…...

springboot动态数据源【非伪数据源】
说明:本文章的数据源不是在配置文件中配置两个或多个数据源,在业务方面对这些数据源来回切换,本文章中的数据源是可以动态添加,修改,切换的,废话不多说。 先看工程图: 1.pom.xml文件 <?x…...

如何改善设备综合效率(OEE)并提高工厂的生产力
在现代制造业中,提高设备综合效率(Overall Equipment Efficiency,OEE)是企业追求高效生产和优化生产能力的重要目标之一。OEE是一个关键的绩效指标,可以帮助企业评估设备的利用效率、生产效率和质量水平。本文将从三个…...
一文接入Android阿里Sophix热更新
最近公司项目渐趋成熟,已经不需要经常更新版本,并且更新版本对客户的影响特别大,但是日常维护难免需要更新代码,因此热修复的技术,就比较迫切了。 经过一段时间的对比,我们最终决定使用阿里的Sophix方案&am…...

【高阶数据结构】并查集和图
目录 1.数据结构--并查集 2.数据结构--图 1.图的基础概念 2.图的简单实现 2.1.邻接矩阵的图实现 2.2.邻接表的图实现 2.3.图的DFS和BFS 2.4.最小生成树 2.4.1.Kruskal(克鲁斯卡尔算法) 2.4.2.Prim(普里姆算法) 2.5.最短路径 2.5.1.Dijkstra(…...

Git 提交时提示 GPG 签名错误
本来应该一切都是正常的,但今天提交的时候提示 GPG 签名错误。 错误的信息就是 GPG 签名失败。 gpg: skipped "942395299055675C": No secret key gpg: signing failed: No secret key error: gpg failed to sign the data fatal: failed to write commi…...

vite+vue3实现 tomcat 的本地部署
背景: 很多开发小伙伴在本地开发完前端项目后,碍于服务端环境配置麻烦,想先试试在本地部署,已开发好的前端项目,由于很多文章都是文字性描述,不太直观,为了给大多数新手提供一个教程,…...

docker+playwright
windows10 docker playwright 难点在于windows下docker的安装,以及官方hub被墙的困难。 wsl2 wsl2 ubuntu docker git clone https://gitee.com/lineuman/lcs_playwright.git npm install npx playwright test docker端口怎么映射到主机上面? 设置重…...
php框架路由实现
在PHP中也有很多框架(如Laravel、CodeIgniter)提供了路由功能。下面是一个简单的PHP路由实现原理和示例代码: 路由实现原理: 客户端发起请求,请求的URL会被传递给Web服务器。Web服务器将请求传递给PHP解释器ÿ…...

在CentOS 7中手工打造和运行xml文件配置的Servlet,然后使用curl、浏览器、telnet等三种工具各自测试
下载Openjdk并配置环境变量 https://jdk.java.net/java-se-ri/11-MR2是官网下载Openjdk 11的地方。 sudo wget https://download.java.net/openjdk/jdk11.0.0.1/ri/openjdk-11.0.0.1_linux-x64_bin.tar.gz下载openjdk 11。 sudo mkdir -p /usr/openjdk11创建目录ÿ…...
单例模式.
目录 ♫什么是单例模式 ♫饿汉式单例模式 ♫懒汉式单例模式 ♫单例模式的线程安全问题 ♪原子性 ♪内存可见性与指令重排序 ♫什么是单例模式 单例模式是一种设计模式,通过巧用Java的现有语法,实现一个只能被创建一个实例的类,并提供一个全…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...