技术美术百人计划 | 《4.5 DOF景深算法》笔记

ops/2024/9/22 22:22:59/

1. 景深定义

景深(Depth of Field,DOF),是指在摄影机镜头或其他成像器前沿能够取得清晰图像的成像所测定的被摄物体前后距离范围。镜头光圈、镜头焦距、及焦平面到拍摄物的距离是影响景深的重要因素。在聚焦完成后,焦点前后的范围内所呈现的清晰图像的距离,这一前一后的范围,便叫做景深。

在镜头前方(焦点的前、后)有一段一定长度的空间,当被摄物体位于这段空间内时,其在底片上的成像恰位于同一个弥散圆之间。被摄体所在的这段空间的长度,就叫景深。换言之,在这段空间内的被摄体,其呈现在底片面的影像模糊度,都在容许弥散圆的限定范围内,这段空间的长度就是景深。

2. 景深原理

原文链接:光学成像原理之景深(Depth of Field)-CSDN博客

理解景深原理前,我们必须明白一件事:当我们对焦时,其实只有一个平面是真正合焦的。这个平面与像平面(可以简单理解为胶片或者传感器平面)平行。凡是在这个平面之前或者之后的都不是合焦状态。合焦平面上物体某点发出不同角度的光在像平面成像都汇聚于一点,而非合焦物体的某点发出不同角度的光会落在像平面不同点上,形成一个模糊圆,这个圆术语叫做弥散圆(circle of confusion)。

所以没有对上焦的东西,在底片上看起来就是模糊的。如果拍的是一个灯泡的话,就会看起来像是一个圈。

下面看看弥散圆和对焦距离的关系,非合焦平面1距离合焦平面较远,其在像平面弥散圆越大,而非合焦平面2距离合焦平面较近,像平面上弥散圆较小。因此离合焦平面得越近,弥散圆就越小。

如果弥散圆小到人眼无法鉴别(或者说弥散圆直径小于传感器像元的大小),模糊圆可被视为点的成像,看起来就和对上焦的东西一样清晰,此无法分辨的弥散圆称为容许弥散圆(permission circle of confusion)。在被摄物体(对焦点或合焦平面)前后纵深,有一段距离,其影像在像平面的模糊程度肉眼无法分辨,比较清晰,都在容许弥散圆限定范围内,它们之间距离称为景深。

景深的作用:

  • 选择性的突出或者强调画面中的一部分,例如某个物体或者某个人物,吸引观察者的注意力到画面中清晰对焦的部分,而忽略其他的模糊部分的细节。
  • 强调所拍摄场景的深度,增加画面的层次立体感。
  • 艺术意境的表达。摄影师可以利用景深效果,营造出虚幻、梦境、或者神奇等意境。
  • 表示主观的视线。在电影学中,通过调节浅景深的镜头,使之对焦在不同位置上,来表示某个人的主观视线的转移。
  • 交代人物之间的关系。在电影学中,通过景深聚焦位置的变化,来表达前景和背景人物之间的关系。

3. 实现

景深是在后处理阶段完成的

实现思路:

总体思路:左边为颜色纹理,右边是深度纹理,对颜色进行模糊,对深度纹理进行处理,选择不同的部分,其中越黑代表越远,则越模糊,然后将两张图合并。

1.获取相机的深度纹理

  • Pass0:高斯模糊
  • Pass1:选择性模糊景深之外的,并且合并原始图和模糊图

2. 执行后处理的脚本,依次执行Pass0和Pass1

其他可参考:

景深 (catlikecoding.com)

译文:景深效果(译) - 阿坤的博客 | AK's Blog (ak-techartist.github.io)

GitHub - csdjk/LearnUnityShader: 记录学习Unity Shader过程中实现过的一些Demo。

4. 改进

4.1. 远近景分开处理

分别对近景和远景进行分开处理,使用不同滤波核。

景深渲染中出现的三种情况的示意图以及相对应的滤波核

(a) : p 点在背景区域 (b) : p 点在前景区域 (c) : p 点在聚焦区域

4.2. 解决颜色泄露

颜色泄露:模糊的颜色夹杂着前景的颜色

可以使用扩散滤波解决这个问题。扩散滤波的基本思想:

  • 将每个像素点的颜色扩散到该像素点的模糊圈范围中。
    • 这样由于聚焦区域以外的像素有较大的模糊圈而被模糊了,如下图的q,p在q的模糊范围之内,所以被模糊了
    • 而聚焦区域的模糊圈直径小于一个像素,所以颜色不会替换,而保持清晰,如下图的q'

扩散滤波后的结果

5. 模拟散景Bokeh

散景(ボケ:bokeh)一词源于日语,形容模糊不清的样子,一般表示在景深较浅的摄影成像中,落在景深以外的画面,会有逐渐产生松散模糊的效果。散景效果有可能因为摄影技巧或光圈孔形状的不同,而产生各有差异的效果。例如镜头本身的光圈叶片数不同(所形成的光圈孔形状不同),会让圆形散景呈现不同的多角形变化。此外,反射式镜头焦外的散景,会呈现独有的甜甜圈形状。散景容易出现在高光中,如模糊的灯泡。

但由于高光区域要比其他区域亮的多,一般会超出拍摄时成像的响应范围,造成强度值的溢出阶段,所以在这种情况需要特殊处理来补偿亮度过大的区域。

我们在背景滤波的基础之上,可以用点函数来模拟散景。由于光源在不同参数下成像的效果也不一样,所以也会使用不同的点函数。

参考:A Life of a Bokeh - SIGGRAPH 2018.pptx | 由 Box 提供支持


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

相关文章

[ABC330E] Mex and Update

[ABC330E] Mex and Update 题面翻译 给定一个序列,支持单点修改,每次修改后输出全局 mex ⁡ \operatorname{mex} mex。 一个序列的 mex ⁡ \operatorname{mex} mex 定义为,序列中最小的没有出现过的非负整数。 题目描述 長さ $ N $ の…

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(一)-概述

简介 此前的专栏介绍Onesearch1.0和2.0,详情参考4 参考资料,本文解释onesearch 3.0,从Elasticsearch6升级到Elasticsearch8代码实现 ,Elasticsearch8 废弃了high rest client,使用新的ElasticsearchClient,…

树莓派智能语音助手实现音乐播放

树莓派语音助手从诞生的第一天开始,我就想着让它能像小爱音箱一样,可以语音控制播放音乐。经过这些日子的倒腾,今天终于实现了。 接下里,和大家分享下我的实现方法:首先音乐播放模块用的是我在上一篇博文写的《用sound…

【Scala入门学习】Scala的方法和函数

1. 方法 在scala中的操作符都被当成方法存在,比如说、-、*、/ 12就是1.(2)的调用, 2.0 是doule类型,强调用Int类型的写法为1.(2:Int) 1.1 方法的声明和使用 定义方法的语法: def 方法名([变量:变量类型&#xff…

YOLOv8改进 | 自定义数据集训练 | AirNet助力YOLOv8检测

目录 一、本文介绍 二、AirNet原理介绍 2.1 对比基降解编码器(CBDE) 2.2 降解引导修复网络(DGRN) 三、yolov8与AirNet结合修改教程 3.1 核心代码文件的创建与添加 3.1.1 AirNet.py文件添加 3.1.2 __init__.py文件添加 3…

携手阿里云CEN:共创SD-WAN融合广域网

在9月19日举行的阿里云云栖大会上,犀思云作为SD-WAN领域的杰出代表及阿里云的SD-WAN重要合作伙伴,携手阿里云共同推出了创新的企业上云方案——Fusion WAN智连阿里云解决方案。这一创新方案不仅彰显了犀思云在SD-WAN技术领域的深厚积累,更体现…

Java项目: 基于SpringBoot+mybatis+maven服装生产管理系统(含源码+数据库+任务书+开题报告+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven服装生产管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简…

SWC(Speedy Web Compiler)

概述 SWC 由 Rust 编写, 既可用于编译,也可用于打包。 对于编译,它使用现代 JavaScript 功能获取 JavaScript / TypeScript 文件并输出所有主流浏览器支持的有效代码。 SWC在单线程上比 Babel 快 20 倍,在四核上快 70 倍。 简…