成像基础 -- 景深计算
景深计算
景深(Depth of Field, DOF)指的是在摄影中,能够清晰成像的物体前后距离的范围。景深的大小取决于多个因素,包括焦距、光圈值、物距以及相机感光元件的尺寸。
1. 景深的主要参数
- 焦距( f f f):镜头的焦距,通常以毫米(mm)为单位。
- 光圈( N N N):镜头的光圈值(f-stop),如 f/2.8、f/4 等。
- 物距( d o d_o do):物体与镜头之间的距离,通常以米(m)为单位。
- 感光元件的直径(Circle of Confusion, c c c):模糊圆的直径,通常是根据感光元件大小预设的一个数值。
2. 景深的计算公式
景深通常分为两个部分:
- 前景深(Near Depth of Field, D O F n e a r DOF_{near} DOFnear)
- 后景深(Far Depth of Field, D O F f a r DOF_{far} DOFfar)
景深总和为前景深和后景深的和:
D O F = D O F f a r − D O F n e a r DOF = DOF_{far} - DOF_{near} DOF=DOFfar−DOFnear
3. 焦点前后的距离计算公式
前景深计算公式(最近可清晰成像的距离):
D O F n e a r = H ⋅ d o H + ( d o − f ) DOF_{near} = \frac{H \cdot d_o}{H + (d_o - f)} DOFnear=H+(do−f)H⋅do
后景深计算公式(最远可清晰成像的距离):
D O F f a r = H ⋅ d o H − ( d o − f ) DOF_{far} = \frac{H \cdot d_o}{H - (d_o - f)} DOFfar=H−(do−f)H⋅do
其中:
- 超焦距(Hyperfocal Distance, H H H):指的是当镜头对焦在此距离时,从相机到无限远的范围内都能清晰成像。计算公式为:
H = f 2 N ⋅ c + f H = \frac{f^2}{N \cdot c} + f H=N⋅cf2+f
4. 景深计算的步骤
步骤 1:计算超焦距 H H H
H = f 2 N ⋅ c + f H = \frac{f^2}{N \cdot c} + f H=N⋅cf2+f
其中:
- f f f 是镜头的焦距
- N N N 是光圈值
- c c c 是模糊圆的直径,根据感光元件大小确定(例如,对于全画幅相机, c ≈ 0.03 mm c \approx 0.03 \, \text{mm} c≈0.03mm)
步骤 2:计算前景深 D O F n e a r DOF_{near} DOFnear
D O F n e a r = H ⋅ d o H + ( d o − f ) DOF_{near} = \frac{H \cdot d_o}{H + (d_o - f)} DOFnear=H+(do−f)H⋅do
步骤 3:计算后景深 D O F f a r DOF_{far} DOFfar
D O F f a r = H ⋅ d o H − ( d o − f ) DOF_{far} = \frac{H \cdot d_o}{H - (d_o - f)} DOFfar=H−(do−f)H⋅do
步骤 4:计算总景深 D O F DOF DOF
D O F = D O F f a r − D O F n e a r DOF = DOF_{far} - DOF_{near} DOF=DOFfar−DOFnear
5. 具体例子:
假设我们使用以下参数:
- 焦距 f = 50 mm f = 50 \, \text{mm} f=50mm
- 光圈 N = 2.8 N = 2.8 N=2.8
- 物距 d o = 2 m d_o = 2 \, \text{m} do=2m(被摄物体距离相机 2 米)
- 模糊圆 c = 0.03 mm c = 0.03 \, \text{mm} c=0.03mm(全画幅感光元件)
步骤 1:计算超焦距 H H H
H = 5 0 2 2.8 × 0.03 + 50 = 2500 0.084 + 50 ≈ 29811.9 mm ≈ 29.81 m H = \frac{50^2}{2.8 \times 0.03} + 50 = \frac{2500}{0.084} + 50 \approx 29811.9 \, \text{mm} \approx 29.81 \, \text{m} H=2.8×0.03502+50=0.0842500+50≈29811.9mm≈29.81m
步骤 2:计算前景深 D O F n e a r DOF_{near} DOFnear
D O F n e a r = 29.81 × 2 29.81 + ( 2 − 0.05 ) = 59.62 29.81 + 1.95 ≈ 59.62 31.76 ≈ 1.88 m DOF_{near} = \frac{29.81 \times 2}{29.81 + (2 - 0.05)} = \frac{59.62}{29.81 + 1.95} \approx \frac{59.62}{31.76} \approx 1.88 \, \text{m} DOFnear=29.81+(2−0.05)29.81×2=29.81+1.9559.62≈31.7659.62≈1.88m
步骤 3:计算后景深 D O F f a r DOF_{far} DOFfar
D O F f a r = 29.81 × 2 29.81 − ( 2 − 0.05 ) = 59.62 29.81 − 1.95 ≈ 59.62 27.86 ≈ 2.14 m DOF_{far} = \frac{29.81 \times 2}{29.81 - (2 - 0.05)} = \frac{59.62}{29.81 - 1.95} \approx \frac{59.62}{27.86} \approx 2.14 \, \text{m} DOFfar=29.81−(2−0.05)29.81×2=29.81−1.9559.62≈27.8659.62≈2.14m
步骤 4:计算总景深 D O F DOF DOF
D O F = D O F f a r − D O F n e a r = 2.14 − 1.88 = 0.26 m DOF = DOF_{far} - DOF_{near} = 2.14 - 1.88 = 0.26\, \text{m} DOF=DOFfar−DOFnear=2.14−1.88=0.26m
6. 总结
在这个例子中,当使用 50mm 焦距、f/2.8 光圈值,并对焦在 2 米远的物体上时,总景深约为 0.26米,其中:
- 前景深(最近清晰的距离)为 1.88米,
- 后景深(最远清晰的距离)为 2.14米。
相关文章:
成像基础 -- 景深计算
景深计算 景深(Depth of Field, DOF)指的是在摄影中,能够清晰成像的物体前后距离的范围。景深的大小取决于多个因素,包括焦距、光圈值、物距以及相机感光元件的尺寸。 1. 景深的主要参数 焦距( f f f)&a…...
Git中从dev分支恢复master分支
问题 需要从dev分支恢复master分支。之前搞错远程地址了,把master分支搞乱了,现在需要从dev分支恢复代码到master分支。 步骤 git checkout dev # 切换到 dev 分支 git branch -D master # 删除本地 master 分支 git checko…...
12.5 Linux_进程间通信_信号灯
概述 什么是信号灯: 信号灯也称为信号量,代表的是一类资源,其值表示系统中该资源的数量。 主要用途是实现进程、线程的同步。 什么是P/V操作: P操作就是申请资源,V操作就是释放操作。 信号灯的种类: …...

Linux——cp-mv-rm命令
cp命令 复制文件 cp test01.txt test02.txt 复制文件夹 cp -r hsy01 hsy02 mv命令 移动文件/文件夹 rm命令 删除文件 rm test.txt 删除文件夹(目录 rm -r hsy01 通配符 * 匹配任意内容 注意* 位置 强制删除-f root超级管理员...
上升点列
题目描述 在一个二维平面内,给定 n 个整数点 (xi,yi),此外你还可以自由添加 k 个整数点。 你在自由添加 k 个点后,还需要从 nk 个点中选出若干个整数点并组成一个序列,使得序列中任意相邻两点间的欧几里得距离恰好为 1 而且…...

刷题 链表
面试经典150题 - 链表 141. 环形链表 class Solution { public:bool hasCycle(ListNode *head) {ListNode* slow head, *fast head;while (fast ! nullptr && fast->next ! nullptr) {slow slow->next;fast fast->next->next;if (slow fast) {return…...
SQL 语法学习指南
目录 前言1. SQL 的基本概念1.1 SQL 的作用1.2 SQL 的特点 2. SQL 的基础语法2.1 数据查询 - SELECT 语句2.2 数据插入 - INSERT 语句2.3 数据更新 - UPDATE 语句2.4 数据删除 - DELETE 语句 3. SQL 的进阶语法3.1 聚合函数3.2 表连接 - JOIN3.3 子查询 4. SQL 学习建议4.1 多实…...

低代码可视化-uniapp商城首页小程序-代码生成器
在设计一个小程序的首页时,包含轮播图、通知栏和商品列表这三个元素是非常常见且有效的布局方式。这样的设计既能够吸引用户的注意力,又能够高效地展示信息和商品。 轮播组件 小程序首页幻灯片通常位于小程序的顶部或显著位置,通过滑动屏幕可…...
Vue3 富文本:WangEditor
wangEditor 开源 Web 富文本编辑器,开箱即用,配置简单 wangEditor 1. 安装依赖包 npm install wangeditor/editor-for-vuenext --save 2. 在引用页面加入如下代码 <template><div style"border: 1px solid #ccc"><Toolbar …...

Unity实现自定义图集(四)
以下内容是根据Unity 2020.1.0f1版本进行编写的 在之前的篇章中已经把自定义图集在编辑器上的使用,以及运行时所需的信息都准备好了,接下来就是魔改UGUI的Image组件,使其能够像Image那样运行时如果引用的资源有打自定义图集,则加载对应自定义图集的Texture。 1、思路 …...

k8s-pod的管理及优化设置
Pod是Kubernetes(k8s)中最小的资源管理组件,也是最小化运行容器化应用的资源对象。以下是对Pod的详细介绍: 一、Pod的基本概念 定义:Pod是Kubernetes中可以创建和管理的最小单元,是资源对象模型中由用户创…...
软件测试面试题大全
什么是软件测试? 答案:软件测试是一系列活动,旨在评估软件产品的质量,并验证它是否满足规定的需求。它包括执行程序或系统以识别任何缺陷、问题或错误,并确保软件产品符合用户期望。 软件测试的目的是什么?…...

SQL第16课挑战题
1. 美国各州的缩写应始终用大写。更新所有美国地址,包括供应商状态(Vendors表中的vend_state)和顾客状态(customers表中的cust_state),使它们均为大写。 2. 第15课挑战题1要求将自己添加到customers表中,现在删除自己,…...

Python3 爬虫 中间人爬虫
中间人(Man-in-the-Middle,MITM)攻击是指攻击者与通信的两端分别创建独立的联系,并交换其所收到的数据,使通信的两端认为其正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。在中…...

Leetcode 50. Pow ( x , n ) 快速幂、取模 C++实现
问题:Leetcode 50. Pow ( x , n ) 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数。 算法: 具体实现流程如下: 代码: class Solution { public:double myPow(double x, int N) {double ans 1;long long n N;if (n <…...

Java SE vs Java EE 与 JVM vs JDK vs JRE
Java SE(Java Platform,Standard Edition): Java 平台标准版,Java 编程语言的基础,它包含了支持 Java 应用程序开发和运行的核心类库以及虚拟机等核心组件。Java SE 可以用于构建桌面应用程序或简单的服务器应用程序。…...

Linux YUM设置仓库优先级
1.安装yum-plugin-priorities优先级插件 yum install yum-plugin-priorities -y 2.设置仓库优先级 vim /etc/yum.repos.d/local.repo [local] namecentos7.5 baseurlfile:///mnt enable1 gpgcheck0 priority1 注释: priority1 #数字越小代表优先级越高ÿ…...
做一个不断更新的链接库
做一个不断更新的链接库 anaconda anaconda官方镜像源 anaconda清华镜像源 社区 CSDN CSDN-华为开发者空间 python开发库 股票爬虫 - akshare...

Ping32企业加密软件:保护数据安全
在数字化时代,数据安全已成为每个企业不可忽视的重要课题。无论是客户信息、财务报表,还是商业机密,数据的安全性直接关系到企业的声誉与运营。为了应对不断变化的安全威胁,选择一款可靠的企业加密软件尤为重要。在这里࿰…...
【Java】异常的处理-方式【主线学习笔记】
文章目录 前言1、处理概述2、Java异常处理机制(方式)方式一(抓抛模型):try-catch-finally方式二:throws 异常类型总结 前言 Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...