成像基础 -- 景深计算

ops/2024/10/18 0:30:46/

景深计算

景深(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=DOFfarDOFnear

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+(dof)Hdo

后景深计算公式(最远可清晰成像的距离):

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(dof)Hdo

其中:

  • 超焦距(Hyperfocal Distance, H H H):指的是当镜头对焦在此距离时,从相机到无限远的范围内都能清晰成像。计算公式为:
    H = f 2 N ⋅ c + f H = \frac{f^2}{N \cdot c} + f H=Ncf2+f

4. 景深计算的步骤

步骤 1:计算超焦距 H H H

H = f 2 N ⋅ c + f H = \frac{f^2}{N \cdot c} + f H=Ncf2+f

其中:

  • f f f 是镜头的焦距
  • N N N 是光圈值
  • c c c 是模糊圆的直径,根据感光元件大小确定(例如,对于全画幅相机, c ≈ 0.03 mm c \approx 0.03 \, \text{mm} c0.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+(dof)Hdo

步骤 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(dof)Hdo

步骤 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=DOFfarDOFnear

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+5029811.9mm29.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+(20.05)29.81×2=29.81+1.9559.6231.7659.621.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(20.05)29.81×2=29.811.9559.6227.8659.622.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=DOFfarDOFnear=2.141.88=0.26m

6. 总结

在这个例子中,当使用 50mm 焦距、f/2.8 光圈值,并对焦在 2 米远的物体上时,总景深约为 0.26米,其中:

  • 前景深(最近清晰的距离)为 1.88米
  • 后景深(最远清晰的距离)为 2.14米

http://www.ppmy.cn/ops/124570.html

相关文章

2024 年热门前端框架对比及选择指南

在前端开发的世界里,框架的选择对于项目的成功至关重要。不同的框架有着不同的设计理念、生态系统和适用场景,因此,开发者在选框架时需要权衡多个因素。本文将对当前最流行的前端框架——React、Vue、Angular、Svelte 和 Solid——进行详细对…

23.安卓逆向-frida基础-objection工具2-memory和android指令

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。 工…

【数据结构】string(C++模拟实现)

string构造 string::string(const char* str):_size(strlen(str)) {_str new char[_size 1];_capacity _size;strcpy(_str, str); }// s2(s1) string::string(const string& s) {_str new char[s._capacity 1];strcpy(_str, s._str);_size s._size;_capacity s._cap…

2024年最新版本神马TV8.5影视APP源码 293TV影视点播系统源码搭建教程 神马TV8.2加强版反编译教程 保姆级小白可搭建 完整版本视频教程

2024年最新版的神马TV影视APP源码,版本号8.5,提供了前所未有的定制化选项和高级功能。用户可以轻松更换应用的包名和名称,确保品牌个性化。此外,该应用采用了动态域名加密技术,增强了数据传输的安全性。它支持自动切换…

用YOLO和LLM增强的OCR

虽然最近我花了很多时间在大型语言模型 (LLM) 上进行实验,但我对计算机视觉的热情始终未减。因此,当我有机会将两者融合在一起时,我迫不及待地想要立即开始。在 Goodreads 上扫描书籍封面并将其标记为已读一直感觉有点神奇,我很兴…

【JS】JavaScript 中数组的常用操作方法和对比

JavaScript 中数组的操作方法种类繁多,包括添加、删除、查找、排序、过滤、遍历等。下面列出常见的数组操作方法,并逐一进行说明。 数组操作方法: 1. 添加和删除元素 push(element1, ..., elementN):在数组末尾添加一个或多个元素,返回数组的新长度。pop():删除数组末尾…

2.4多路径读取图像

实验原理 函数imwrite用来输出图像到文件 Reading and Writing Images and Video — OpenCV 2.3.2 documentation OpenCV入门教程_opencv 入门教程-CSDN博客 函数声明 Mat imread(const string& filename, int flags1 )第一个参数 filename: 表示图像的路径…

10.12 标准IO

练习:针对fscanf和fprintf练习 有如下结构体: typedef struct Student { char name[20]; int id; float chinese;//语文成绩 float math; float english; float physical; float chemical; float biological; }stu_t; *Pstu_t//声明学生结构体类型 在栈区…