计算机视觉基础(7)——相机基础

news2024/10/7 17:45:07

前言

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

一、数字相机

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)

造价更昂贵

【参考链接】

详细图解,一眼就能看懂!卷帘快门(Rolling Shutter)与全局快门(Global Shutter)的区别-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/lz0499/article/details/102616773

四、图像的形成

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图像中几本不再是直线

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1208468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud微服务:Ribbon负载均衡

目录 负载均衡策略: 负载均衡的两种方式: 饥饿加载 1. Ribbon负载均衡规则 规则接口是IRule 默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询 2.负载均衡自定义方式 代码方式:配置灵活,但修…

SpringBoot整合WebSocket实现订阅消息推送

目录 一、什么是WebSocket1.HTTP协议2.WebSocket协议 二、WebSocket使用场景1.消息推送2.实时聊天3.弹幕4.实时数据更新 三、SpringBoot整合WebSocket(以实现消息推送为例)1.添加依赖2.创建消息类2.WebSocket配置类3.工具类4.测试连接5.服务调用 一、什么…

JAVA基础9:Debug

1.Debug概述 Debug:是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。 2.Debug操作流程 Debug调试,又被称为断点调试,断点其实是一个标记,告诉我们从哪里开始查看…

自动化接口差异测试-diffy 回归测试 charles rewrite 请求

1、前言 大家好,今天小编向大家介绍一款自动化接口diff平台–diffy。diffy是twitter的开源项目,通过同时运行新/老代码,对比运行结果,发现潜在bug。diffy的原理是作为代理,截取请求并发送至所有运行的服务实例&#x…

【thop.profile】thop.profile计算网络参数量和计算效率

🍋🍋1.安装thop 安装thop有两种方式。 🏆第一种 pip install thop 🏆第二种 用源码编译安装 从官网下载【github】thop安装压缩包下载压缩文件,解压到虚拟环境的site-packages文件下激活进入自己的虚拟环境cd到压缩…

Django实战项目-学习任务系统-任务完成率统计

接着上期代码内容,继续完善优化系统功能。 本次增加任务完成率统计功能,为更好的了解哪些任务完成率高,哪些任务完成率低。 该功能完成后,学习任务系统1.0版本就基本完成了。 1,编辑urls配置文件: ./mysi…

在windows上利用vmware17 搭建centos7 mini版本服务器

安装centos7mini 修改名称和安装路径 也可以点击自定义硬件,进行硬件配置修改 设置内存 设置处理器 点击下图按钮进行设置 点击done 点击开始安装 点击设置root密码 设置成功,点击done ,root密码设置的简单的话需要按两次done 等待安装完成…

前端算法面试之堆排序-每日一练

如果对前端八股文感兴趣,可以留意公重号:码农补给站,总有你要的干货。 今天分享一个非常热门的算法--堆排序。堆的运用非常的广泛,例如,Python中的heapq模块提供了堆排序算法,可以用于实现优先队列&#xf…

微服务nacos实战入门

注册中心 在微服务架构中,注册中心是最核心的基础服务之一 主要涉及到三大角色: 服务提供者 ---生产者 服务消费者 服务发现与注册 它们之间的关系大致如下: 1.各个微服务在启动时,将自己的网络地址等信息注册到注册中心&#x…

四、Ribbon负载均衡

目录 一、负载均衡流程 1、我通过浏览器直接访问userservice/user/1,无法访问,说明是负载均衡做了相应的处理 2、我们来看一下代码中负载均衡的流程是怎样的 3、图像流程 二、负载均衡策略 1、修改负载均衡策略 (方式一) &a…

D. Jumping on Walls bfs

Problem - 199D - Codeforces 题目大意:有一个两个垂直的平行墙壁组成的一个峡谷。一个人初始是在左边墙壁第一层。在每个墙壁上有些障碍点,用X表示,这些障碍点不能被到达。,他可以执行以下三个操作: 向当前墙壁往上…

【ASP.NET】Hello World

文章目录 1. 几个概念2. 搭建开发环境2.1 .NET SDK2.2 IDE & Editor 3 First Project3.1 步骤3.2 模板3.3 项目结构3.4 请求的处理流程 Reference Link 1. 几个概念 .NET 是一个平台,包括 .NET Framework、.NET Core、ASP.NET、C#等,可以构建桌面、W…

文心一言 VS 讯飞星火 VS chatgpt (135)-- 算法导论11.3 1题

一、用go语言,假设我们希望查找一个长度为 n 的链表,其中每一个元素都包含一个关键字k并具有散列值h(k)。每一个关键字都是长字符串。那么在表中查找具有给定关键字的元素时,如何利用各元素的散列值呢? 文心一言: 在Go语言中&a…

若依前后分离版框架下Springboot java引入Mqtt接受发送消息

**这只是其中一种而且是粗浅的接、发消息。 同步机制还要跟搞物联网的同事沟通确认去看看能不能实现 或者是设备比较多的情况下 不会去使用同步机制 首先pom文件 引入依赖 ** <dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse…

spring cloud微服务中多线程下,子线程通过feign调用其它服务,请求头token等丢失

在线程池中&#xff0c;子线程调用其他服务&#xff0c;请求头丢失&#xff0c;token为空的情况 看了很多篇文章的处理方法和在自己亲测的情况下做出说明&#xff1a; 第一种&#xff1a; 这种方式只支持在主线程情况下&#xff0c;能够处理&#xff0c;在多线程情况下&#…

基于Python实现汽车销售数据可视化【500010086】

导入模块 import numpy as np import pandas as pd import plotly.graph_objects as go import plotly.express as px获取数据 df1 pd.read_excel(r"./data/中国汽车总体销量.xlsx") print(df1.head(5))df1.info()df1[年份] df1[时间].dt.year df1[月份] df1[时…

【论文阅读】GAIN: Missing Data Imputation using Generative Adversarial Nets

论文地址&#xff1a;[1806.02920] GAIN: Missing Data Imputation using Generative Adversarial Nets (arxiv.org)

【ML】欠拟合和过拟合的一些判别和优化方法(吴恩达机器学习笔记)

吴恩达老师的机器学习教程笔记 减少误差的一些方法 获得更多的训练实例——解决高方差尝试减少特征的数量——解决高方差尝试获得更多的特征——解决高偏差尝试增加多项式特征——解决高偏差尝试减少正则化程度 λ——解决高偏差尝试增加正则化程度 λ——解决高方差 什么是…

【Linux】Ubuntu16.04配置repo

Ubuntu16.04配置repo失败 在学习韦东山Linux嵌入式开发过程中&#xff0c;使用repo获取内核及工具链: git clone https://e.coding.net/codebug8/repo.gitmkdir -p 100ask_imx6ull-sdk && cd 100ask_imx6ull-sdk../repo/repo init -u https://gitee.com/weidongshan/m…

【Linux】gitee仓库的注册使用以及在Linux上远程把代码上传到gitee上的方法

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;今天为大家介绍一个在实际工作以及项目开发过程中非常实用的网站gitee&#xff0c;并教如何正确的使用这个网站以及常见问题的解决方案&#xf…