photograph_tutorial

第三章:对焦系统与景深控制

开篇导言

对焦系统是现代手机摄影的核心技术之一。作为工程师,我们可以将对焦理解为一个优化问题:在三维空间中找到使特定平面成像最清晰的透镜位置。本章将深入探讨手机中多种对焦技术的工作原理,从相位检测到激光测距,从经典的景深公式到现代计算摄影的虚化算法。

我们将学习如何精确控制焦点位置,理解景深的物理成因,掌握超焦距的计算方法,并探索如何利用手机专业模式实现类似单反相机的对焦控制。同时,我们还将深入了解计算摄影如何通过深度图和多帧合成突破物理极限,创造出媲美大光圈镜头的虚化效果。

1. 相位对焦(PDAF)原理

1.1 PDAF的物理基础

相位对焦(Phase Detection Auto Focus)源于单反相机的分束对焦技术。在手机CMOS传感器中,通过特殊设计的像素实现相位检测:

    主光轴
      ↓
   [透镜]
    / | \
   /  |  \     左遮罩像素    右遮罩像素
  /   |   \         ■□            □■
 /    |    \        ↓              ↓
[====PDAF像素对====]

PDAF像素通过遮罩将入射光分为左右两部分,形成两个子图像。当焦点准确时,两个子图像完全重合;失焦时产生相位差。

光学原理深入

PDAF的核心在于利用透镜不同区域的光线形成立体视差。考虑一个简化的薄透镜模型,根据高斯成像公式:

\[\frac{1}{f} = \frac{1}{s} + \frac{1}{s'}\]

当物体不在焦平面上时,左右瞳孔接收到的光线在传感器上形成位移。这种位移量与离焦程度成正比关系。对于小孔径近似,相位差可表示为:

\[\Delta x = \frac{D \cdot \Delta z}{s}\]

其中 $D$ 是有效瞳孔直径,$\Delta z$ 是离焦量,$s$ 是物距。

像素级实现

手机CMOS传感器中的PDAF像素设计有多种实现方式:

  1. 遮罩型(Masked PDAF):在像素上方添加金属遮罩,阻挡一半的入射光
  2. 微透镜偏移型:通过偏移微透镜位置实现光线分离
  3. 双光电二极管型:在单个像素内集成两个独立的光电二极管

每种实现都有其优缺点。遮罩型简单但损失光通量;微透镜型保持感光效率但工艺复杂;双光电二极管型性能最佳但成本较高。

1.2 相位差计算

相位差 $\Delta\phi$ 与离焦量的关系可表示为:

\[\Delta\phi = k \cdot \Delta z \cdot \frac{f^2}{F \cdot (s - f)}\]

其中:

Rule of thumb: 相位差与离焦量成正比,相位差的符号指示前焦还是后焦。

相位差检测算法

实际的相位差检测需要考虑多个因素:

  1. 窗口选择: 相关计算窗口大小影响精度和速度。典型窗口大小为 16×16 到 64×64 像素。窗口过小导致噪声敏感,过大则降低空间分辨率。

  2. 亚像素精度: 通过插值可达到亚像素级别的相位差检测: \(\Delta\phi_{sub} = \Delta\phi_{int} + \frac{C_{-1} - C_{+1}}{2(C_{-1} + C_{+1} - 2C_0)}\)

    其中 $C_{-1}, C_0, C_{+1}$ 是相关峰值附近的三个采样点。

  3. 置信度评估: 相位检测的可靠性通过相关峰的尖锐程度评估: \(\text{Confidence} = \frac{C_{peak}}{C_{mean}} \cdot \frac{1}{\sigma_{noise}}\)

  4. 标定补偿: 由于制造公差和光学畸变,需要进行标定: \(\Delta z_{corrected} = \alpha(T) \cdot \Delta z_{raw} + \beta(f, s)\)

    其中 $\alpha(T)$ 是温度补偿系数,$\beta(f, s)$ 是位置相关的偏移校正。

多点相位检测

现代手机支持多达数百个对焦点的相位检测。空间分布策略:

密集型分布(493点):        十字型分布(45点):
■■■■■■■■■■■■■          □□□■□□■□□□
■■■■■■■■■■■■■          □□■■■■■■■□□
■■■■■■■■■■■■■          □■■■■■■■■■□
■■■■■■■■■■■■■          ■■■■■■■■■■■
■■■■■■■■■■■■■          □■■■■■■■■■□
■■■■■■■■■■■■■          □□■■■■■■■□□
■■■■■■■■■■■■■          □□□■□□■□□□

密集分布提供更好的追踪性能,十字型分布在中心区域提供更高精度。

1.3 Dual Pixel PDAF

现代高端手机采用Dual Pixel技术,每个像素都能参与相位检测:

标准像素结构:        Dual Pixel结构:
┌────────┐         ┌────┬────┐
│        │         │ A  │ B  │
│  单个  │   →     ├────┼────┤
│ 光电极 │         │左PD│右PD│
└────────┘         └────┴────┘

优势:

Dual Pixel的信号读出模式

Dual Pixel传感器支持多种读出模式,根据场景需求优化:

  1. 2PD模式(相位检测)
    • 分别读取左右光电二极管信号
    • 用于相位差计算
    • 读出速度:~240fps(局部区域)
  2. 合并模式(成像)
    • 左右信号相加形成完整像素
    • 保持原始分辨率
    • 信噪比提升:√2倍
  3. HDR模式
    • 左右二极管设置不同增益
    • 单次曝光实现HDR
    • 动态范围扩展:+3EV

深度学习增强的PDAF

最新的手机采用神经网络增强相位检测:

# 伪代码示例
class EnhancedPDAF:
    def __init__(self):
        self.phase_net = MobileNetV3()  # 轻量级网络
        self.confidence_net = ConfidenceNet()
    
    def detect_phase(self, left_img, right_img):
        # 传统相位检测
        phase_traditional = correlate(left_img, right_img)
        
        # 神经网络增强
        features = self.phase_net.extract(left_img, right_img)
        phase_enhanced = self.phase_net.predict(features)
        
        # 置信度加权融合
        confidence = self.confidence_net(features)
        phase_final = weighted_average(phase_traditional, 
                                      phase_enhanced, 
                                      confidence)
        return phase_final

这种混合方法在低光、低对比度场景下性能提升显著:

Samsung的Super PD技术

三星的Super PD进一步优化了Dual Pixel:

  1. 绿色像素优化: 由于拜耳阵列中绿色像素占50%,优先在绿色通道实现相位检测

  2. 椭圆形微透镜: 改善边缘像素的相位检测性能

  3. 多尺度检测

    • 粗尺度:2×2像素合并,快速定位
    • 细尺度:单像素精度,精确对焦

1.4 相位对焦的信号处理

相关性计算采用归一化互相关(NCC):

\[NCC = \frac{\sum_{i} (L_i - \bar{L})(R_i - \bar{R})}{\sqrt{\sum_{i} (L_i - \bar{L})^2 \sum_{i} (R_i - \bar{R})^2}}\]

其中 $L_i$、$R_i$ 分别为左右像素组的信号值。

实时信号处理流水线

PDAF信号处理采用硬件加速的流水线架构:

原始信号 → 噪声抑制 → 相关计算 → 峰值检测 → 相位转换 → 镜头驱动
    ↓         ↓         ↓         ↓         ↓         ↓
  14bit    BM3D     FFT加速    亚像素    查找表    VCM控制
  1. 噪声抑制: 采用自适应滤波器,根据ISO值调整滤波强度: \(\sigma_{filter} = \sigma_0 \cdot \sqrt{\frac{ISO}{100}}\)

  2. 快速相关计算: 利用FFT加速互相关运算: \(C(\tau) = \mathcal{F}^{-1}\{\mathcal{F}\{L\} \cdot \mathcal{F}^*\{R\}\}\)

    计算复杂度从 $O(n^2)$ 降至 $O(n\log n)$。

  3. 自适应窗口: 根据场景纹理动态调整相关窗口:
    • 高纹理区域:16×16 像素
    • 中等纹理:32×32 像素
    • 低纹理区域:64×64 像素
  4. 多帧融合: 连续多帧的相位信息融合提高稳定性: \(\phi_{final} = \sum_{t=1}^{N} w_t \cdot \phi_t\)

    其中权重 $w_t$ 基于每帧的置信度和时间衰减。

相位对焦的误差源

  1. 球差影响: 大光圈下的球差导致相位检测偏差: \(\Delta\phi_{SA} = k_{SA} \cdot (\frac{D}{f})^3\)

  2. 色差补偿: 不同波长的相位差异需要校正: \(\phi_{corrected} = \phi_{green} + \alpha(\phi_{red} - \phi_{blue})\)

  3. 温度漂移: 温度变化影响传感器和镜头特性: \(\Delta f_T = \beta \cdot (T - T_0) \cdot f\)

    典型值:$\beta \approx 10^{-5}$/°C

硬件加速器设计

现代手机SoC集成专用的PDAF处理单元:

ISP内部PDAF模块:
┌────────────────────────────┐
│  相位提取器 (PD Extractor)  │ ← 原始Bayer数据
├────────────────────────────┤
│  相关引擎 (Correlation)    │ ← SIMD加速
├────────────────────────────┤
│  深度映射 (Depth Mapper)    │ ← LUT查找
├────────────────────────────┤
│  镜头控制 (Lens Driver)    │ → VCM/闭环反馈
└────────────────────────────┘

处理延迟:< 2ms @ 480MHz 功耗:~15mW(active)

2. 反差对焦(CDAF)与其他对焦方法

2.1 反差对焦原理

反差对焦(Contrast Detection Auto Focus)通过评估图像锐度寻找最佳焦点:

对比度曲线:
  ↑
对│     ╱╲
比│    ╱  ╲
度│   ╱    ╲
  │  ╱      ╲
  │ ╱        ╲
  └─────────────→
    近    焦点位置    远

常用的对比度评价函数:

高级对比度评价算法

  1. 频域分析法: 利用高频分量评估清晰度: \(F = \sum_{u,v} |\mathcal{F}(I)|^2 \cdot H(u,v)\)

    其中 $H(u,v)$ 是高通滤波器: \(H(u,v) = 1 - e^{-\frac{u^2+v^2}{2\sigma_f^2}}\)

  2. 小波变换法: 多尺度分析提供更鲁棒的评价: \(W = \sum_{j} \sum_{k} |\text{DWT}_{j,k}(I)|^2 \cdot 2^j\)

    其中 $j$ 是分解层级,权重 $2^j$ 强调高频细节。

  3. 统计特征法: 基于图像统计特性的清晰度度量: \(S = \frac{\sigma^2}{\mu} \cdot \text{Entropy}(I)\)

    结合方差、均值和熵,对噪声更鲁棒。

爬山算法优化

CDAF的核心是寻找对比度峰值的优化算法:

class AdaptiveHillClimbing:
    def __init__(self):
        self.step_size = INITIAL_STEP
        self.direction = 1
        self.prev_contrast = 0
        
    def search(self, get_contrast):
        while True:
            # 当前对比度
            contrast = get_contrast()
            
            # 自适应步长
            if contrast < self.prev_contrast:
                # 越过峰值,反向并减小步长
                self.direction *= -1
                self.step_size *= 0.5
                
            # 收敛判断
            if self.step_size < MIN_STEP:
                break
                
            # 移动镜头
            move_lens(self.direction * self.step_size)
            self.prev_contrast = contrast

优化策略:

CDAF的局限性与改进

  1. 局部极值问题: 多峰值场景可能陷入局部最优。解决方案:
    • 全局扫描初始化
    • 多起点搜索
    • 结合PDAF粗定位
  2. 低光性能: 噪声影响对比度评估。改进方法:
    • 时域平均降噪
    • 红外辅助对焦
    • 增大评估窗口
  3. 运动模糊: 移动物体造成对比度下降。对策:
    • 缩短评估时间
    • 运动补偿算法
    • 预测对焦

2.2 激光对焦

激光对焦采用飞行时间(ToF)原理:

\[d = \frac{c \cdot \Delta t}{2}\]

其中:

典型精度:±5mm @ 2m距离

ToF技术详解

  1. 直接ToF(dToF): 使用SPAD(Single Photon Avalanche Diode)探测器:
    • 时间分辨率:~10ps
    • 测距范围:0.1-5m
    • 抗干扰能力强

    时间测量采用TDC(Time-to-Digital Converter): \(t = N \cdot t_{LSB} + t_{fine}\)

    其中 $t_{LSB}$ 是最小时间单位,$t_{fine}$ 是精细插值。

  2. 间接ToF(iToF): 通过相位差测量距离: \(d = \frac{c \cdot \phi}{4\pi f_{mod}}\)

    其中 $f_{mod}$ 是调制频率,$\phi$ 是相位差。

    多频率消除模糊:

    • $f_1 = 20MHz$:无模糊范围 7.5m
    • $f_2 = 100MHz$:精度提升5倍
    • 组合解算获得高精度长距离

激光对焦系统设计

激光对焦模块结构:
┌─────────────────────────────┐
│  VCSEL激光器 (940nm)         │
│  ├─ 发射功率: 1-5mW         │
│  ├─ 发散角: 25°             │
│  └─ 调制频率: 20-100MHz     │
├─────────────────────────────┤
│  接收透镜 + 滤光片           │
│  ├─ 带通滤波: 940±10nm      │
│  └─ 视场角: 28°             │
├─────────────────────────────┤
│  SPAD阵列 / CCD              │
│  ├─ 像素: 8×8 到 240×180    │
│  └─ 量子效率: >30% @ 940nm  │
└─────────────────────────────┘

环境适应性优化

  1. 背景光抑制
    • 窄带滤光片(FWHM < 20nm)
    • 时间门控(仅在激光脉冲期间采集)
    • 差分测量(有光/无光相减)
  2. 多路径干扰: 玻璃、镜面反射造成错误读数: \(d_{measured} = \alpha \cdot d_{direct} + (1-\alpha) \cdot d_{reflect}\)

    解决方案:

    • 多次测量统计滤波
    • 偏振检测排除反射
    • AI场景识别
  3. 温度补偿: \(d_{corrected} = d_{raw} \cdot (1 + \gamma \cdot (T - T_{cal}))\)

    其中 $\gamma \approx 50ppm/°C$ 是温度系数。

激光对焦的应用策略

根据场景选择性启用:

场景 激光对焦 原因
暗光环境 PDAF/CDAF失效
纯色墙面 无纹理特征
玻璃后方 多路径干扰
远景风光 超出量程
微距 高精度需求

2.3 混合对焦系统

现代手机采用多种对焦技术的融合:

场景判断
    ↓
┌─────────────┐
│  对焦控制器  │
└──┬──┬──┬──┬─┘
   │  │  │  │
 PDAF CDAF 激光 TOF
   │  │  │  │
   └──┴──┴──┴──→ 融合算法 → 镜头驱动

决策策略

融合算法框架

多传感器融合采用贝叶斯框架:

\[P(d|O_1, O_2, ..., O_n) = \frac{\prod_{i} P(O_i|d) \cdot P(d)}{P(O_1, O_2, ..., O_n)}\]

其中:

实际实现采用加权最小二乘:

\[d_{optimal} = \arg\min_d \sum_{i} w_i \cdot (d - d_i)^2\]

权重 $w_i$ 基于:

  1. 置信度:各传感器自报告的可靠性
  2. 历史精度:统计历史误差率
  3. 场景适配:不同场景下的经验权重

状态机设计

对焦状态机:
    ┌─────────┐
    │  空闲   │
    └────┬────┘
         │ 触发对焦
    ┌────▼────┐
    │ 粗对焦  │← PDAF/激光
    └────┬────┘
         │ 接近目标
    ┌────▼────┐
    │ 精对焦  │← CDAF
    └────┬────┘
         │ 达到峰值
    ┌────▼────┐
    │ 锁定    │
    └────┬────┘
         │ 场景变化
    ┌────▼────┐
    │ 追踪    │← 连续PDAF
    └─────────┘

状态转换条件:

实时性能优化

  1. 并行处理架构
    主线程:UI响应
       ↓
    对焦线程:状态机控制
       ├─ PDAF线程:相位检测(2ms)
       ├─ CDAF线程:对比度计算(5ms)
       ├─ ToF线程:测距(10ms)
       └─ 融合线程:决策输出(1ms)
    
  2. 预测与缓存
    • 场景深度图缓存(LRU,容量100帧)
    • 卡尔曼滤波预测下一帧焦点
    • 常用对焦距离快速索引
  3. 硬件协同
    • ISP硬件加速相关运算
    • DSP处理深度图生成
    • NPU运行场景识别网络

特殊场景处理

  1. 微距切换
    if distance < MACRO_THRESHOLD:  # 15cm
        # 切换到微距镜头
        switch_to_macro_lens()
        # 使用CDAF + 放大峰值对焦
        enable_focus_peaking()
        set_cdaf_window_size(128)  # 增大窗口
    
  2. 人像模式
    • 人脸检测优先级最高
    • 眼部对焦(瞳孔 > 虹膜 > 眼框)
    • 深度图辅助边缘检测
  3. 运动追踪
    • 预测算法:二阶运动模型
    • 区域锁定:3×3对焦点矩阵
    • 快速重对焦:跳过精对焦阶段

3. 景深理论与计算

3.1 景深公式推导

景深(Depth of Field, DOF)由近景深和远景深组成:

\[DOF = D_f - D_n\]

其中:

超焦距 $H$ 的计算:

\[H = \frac{f^2}{N \cdot c} + f\]

其中:

景深公式的几何推导

从几何光学出发,考虑一个点在传感器上形成的弥散圆:

     物点            透镜            像平面
      P ─────────   [ ]───────── P'
                  \  /             /|\
                   \/             / | \
                   /\            /  |c \
                  /  \          /   |   \
      Q ────────   [ ]───────────────
      ←  s  →        ←    s'   →

当物点Q偏离对焦平面时,在传感器上形成弥散圆。根据相似三角形:

\[\frac{c}{D} = \frac{|s' - s'_Q|}{s'_Q}\]

其中$D$是入瞳直径,$D = f/N$。

结合透镜公式,可得到允许的物距范围:

\(\frac{1}{D_n} = \frac{1}{s} + \frac{c \cdot N}{f^2}\) \(\frac{1}{D_f} = \frac{1}{s} - \frac{c \cdot N}{f^2}\)

经过代数变换,得到标准景深公式。

景深的特殊情况

  1. 超焦距对焦: 当 $s = H$ 时:
    • $D_n = H/2$
    • $D_f = \infty$
    • 景深从$H/2$到无穷远
  2. 微距摄影: 当放大率 $m \approx 1$ 时: \(DOF \approx \frac{2 \cdot N \cdot c}{m^2}\)

    景深与放大率平方成反比,微距景深极浅。

  3. 无穷远对焦: 当 $s \to \infty$ 时: \(DOF = \infty - \frac{f^2}{N \cdot c}\)

    实际上从超焦距开始到无穷远。

景深的实用计算器

class DOFCalculator:
    def __init__(self, sensor_size):
        # 根据传感器尺寸计算CoC
        self.coc = sensor_size / 1730  # 标准公式
        
    def calculate_dof(self, f, N, s):
        """
        f: 焦距 (mm)
        N: 光圈值
        s: 对焦距离 (m)
        """
        # 超焦距
        H = (f * f) / (N * self.coc) + f
        H = H / 1000  # 转换为m
        
        if s >= H:
            # 超过超焦距,远景深为无穷
            Df = float('inf')
            Dn = s * H / (H + s)
        else:
            # 正常计算
            Dn = s * H / (H + s)
            Df = s * H / (H - s)
            
        return {
            'near': Dn,
            'far': Df,
            'total': Df - Dn if Df != float('inf') else float('inf'),
            'hyperfocal': H
        }

# 使用示例
calc = DOFCalculator(sensor_size=7.6)  # 1/2.3"
dof = calc.calculate_dof(f=5, N=1.8, s=2)
print(f"景深范围: {dof['near']:.2f}m - {dof['far']:.2f}m")

3.2 弥散圆与手机传感器

弥散圆(Circle of Confusion, CoC)的标准:

对于手机传感器: \(c = \frac{d}{1730}\)

其中 $d$ 为传感器对角线长度。

典型值:

CoC标准的理论基础

CoC的定义基于人眼分辨能力:

  1. 视角分辨率: 正常视力的人眼分辨角约为1角分(1/60度)。

  2. 观看距离: 标准观看距离为对角线的250mm。

  3. 计算公式: \(c = d \cdot \tan(1/60°) \approx \frac{d}{1730}\)

不同传感器尺寸的CoC详细数据

传感器尺寸 对角线(mm) CoC(mm) CoC(μm) 像素尺寸参考
1/3.2” 5.68 0.0033 3.3 1.4μm
1/2.55” 7.18 0.0041 4.1 1.55μm
1/2.3” 7.66 0.0044 4.4 1.67μm
1/1.7” 9.50 0.0055 5.5 2.0μm
1/1.33” 12.0 0.0069 6.9 2.4μm
1” 15.86 0.0092 9.2 3.0μm
APS-C 28.2 0.0163 16.3 4.3μm
全画幅 43.3 0.0250 25.0 6.0μm

CoC与像素尺寸的关系

现代手机传感器的像素尺寸通常在1.0-2.0μm之间。CoC与像素尺寸的关系:

\[N_{pixels} = \frac{c}{p}\]

其中 $p$ 是像素尺寸。一般要求 $N_{pixels} \geq 2-3$ 以保证弥散不可见。

动态CoC调整

根据不同场景和输出需求,CoC可以动态调整:

  1. 高分辨率输出
    # 4K显示需要更严格的CoC
    coc_4k = coc_standard * 0.5
    
  2. 社交媒体分享
    # 压缩后观看,可放宽标准
    coc_social = coc_standard * 1.5
    
  3. 打印输出
    # 根据打印尺寸调整
    viewing_distance = print_diagonal * 1.5
    coc_print = sensor_diagonal * tan(1/60 * pi/180) * \
                (viewing_distance / 250)
    

数字虚化中CoC的应用

在计算摄影中,CoC用于确定模糊半径:

\[r_{blur} = \frac{|z - z_f|}{z_f} \cdot \frac{f}{N} \cdot \frac{1}{c}\]

其中:

实际应用中的阈值判断:

def should_blur(depth, focus_depth, f, N, coc):
    blur_radius = abs(depth - focus_depth) / focus_depth * f / N / coc
    return blur_radius > 0.5  # 半像素以上才模糊

3.3 景深的简化计算

Rule of thumb

  1. 景深与光圈值成正比:$DOF \propto N$
  2. 景深与焦距平方成反比:$DOF \propto 1/f^2$
  3. 景深与物距平方成正比:$DOF \propto s^2$

实用公式(适用于 $s \ll H$):

\[DOF \approx \frac{2 \cdot N \cdot c \cdot s^2}{f^2}\]

景深计算的快速估算

为了在实拍中快速估算景深,可以使用以下经验公式:

  1. 1/3原则: 对于中近距离($s < H/3$):
    • 前景深 ≈ 总景深的1/3
    • 后景深 ≈ 总景深的2/3
  2. 倍数关系
    • 光圈收一档:景深增加√2倍
    • 距离加倍:景深增加4倍
    • 焦距减半:景深增加4倍
  3. 手机特定公式: 对于典型手机主摄($f_{eq} \approx 26mm$,$f_{actual} \approx 5mm$): \(DOF_{meters} \approx \frac{N \cdot s^2}{100}\)

    例如:f/2.0,2m对焦:DOF ≈ 2 × 4 / 100 = 0.08m

等效景深换算

不同传感器尺寸间的景深换算:

\[DOF_{2} = DOF_{1} \cdot \left(\frac{C_2}{C_1}\right)^2 \cdot \frac{N_2}{N_1}\]

其中 $C$ 是crop factor(裁切系数)。

典型换算表:

def equivalent_aperture(f_number, crop_factor):
    """
    计算等效全画幅光圈值
    """
    return f_number * crop_factor

# 示例
phone_sensor = {
    'size': '1/2.3"',
    'crop': 5.6,
    'f_number': 1.8
}

# 手机f/1.8 ≈ 全画幅f/10
ff_equivalent = equivalent_aperture(1.8, 5.6)  # = 10.08

景深预览按钮的实现

专业模式中的景深预览功能:

class DOFPreview:
    def __init__(self, current_aperture, preview_aperture):
        self.current = current_aperture
        self.preview = preview_aperture
        
    def calculate_brightness_drop(self):
        """
        计算预览时的亮度下降
        """
        stops = log2((self.preview / self.current) ** 2)
        return stops
        
    def compensate_iso(self, base_iso):
        """
        自动补偿ISO以保持预览亮度
        """
        stops = self.calculate_brightness_drop()
        new_iso = base_iso * (2 ** stops)
        return min(new_iso, 3200)  # 限制最高ISO

景深堆栈技术

当单张照片景深不足时,可以使用景深堆栈:

  1. 拍摄参数
    def calculate_stack_steps(total_depth, single_dof, overlap=0.3):
        """
        计算需要的堆栈张数
        overlap: 重叠比例(0.3 = 30%)
        """
        effective_dof = single_dof * (1 - overlap)
        steps = ceil(total_depth / effective_dof)
        return steps
    
  2. 对焦步进
    def focus_bracketing(near, far, steps):
        """
        计算每一步的对焦距离
        """
        # 使用对数步进(更均匀的景深分布)
        log_near = log(near)
        log_far = log(far)
           
        distances = []
        for i in range(steps):
            log_d = log_near + (log_far - log_near) * i / (steps - 1)
            distances.append(exp(log_d))
           
        return distances
    
  3. 合成算法
    • 拉普拉斯金字塔融合
    • 基于对比度的选择
    • 深度图引导融合

3.4 手机摄影的景深特性

由于手机传感器小、焦距短,天然具有大景深:

对比示例(f/1.8,对焦2m):
设备          焦距    景深范围
全画幅+50mm   50mm    1.8-2.3m (0.5m)
APS-C+35mm    35mm    1.6-2.6m (1.0m)  
手机主摄      5mm     0.5m-∞  (∞)

这解释了为什么手机需要计算摄影来实现浅景深效果。

手机景深的物理极限

  1. 衰射极限影响: 当光圈过小时,衰射会降低分辨率: \(d_{Airy} = 2.44 \cdot \lambda \cdot N\)

    对于绿光(550nm):

    • f/8: Airy盘直径 ≈ 10.7μm
    • f/11: Airy盘直径 ≈ 14.7μm
    • f/16: Airy盘直径 ≈ 21.4μm

    当Airy盘大于2-3倍像素尺寸时,图像明显软化。

  2. 最佳光圈范围: 手机镜头的最佳光圈通常在:
    • 主摄:f/2.0 - f/4.0
    • 超广角:f/2.2 - f/5.6
    • 长焦:f/2.8 - f/5.6

    超出这个范围,衰射影响大于景深增加的收益。

  3. 等效景深计算
    def equivalent_dof(phone_params, ff_params):
        """
        计算手机相对于全画幅的等效景深
        """
        crop = phone_params['crop_factor']
           
        # 等效光圈
        ff_aperture = phone_params['f_number'] * crop
           
        # 等效焦距
        ff_focal = phone_params['focal'] * crop
           
        # 景深比例
        dof_ratio = (ff_aperture / ff_params['f_number']) * \
                     (ff_params['focal'] / ff_focal) ** 2
           
        return ff_params['dof'] * dof_ratio
    

手机多摄像头的景深协同

现代手机通过多摄像头组合实现更好的景深控制:

  1. 双摄虚化算法
    主摄(26mm eq) + 长焦(52mm eq)
         ↓              ↓
    主体识别      背景虚化信息
         ↓              ↓
         └─────┬─────┘
            深度图生成
               ↓
          渐进式模糊
    
  2. 三摄系统
    • 超广角:提供大景深参考
    • 主摄:主体成像
    • 长焦:自然虚化 + 深度信息
  3. 融合策略
    def multi_camera_bokeh(main_img, tele_img, depth_map):
        # 基于深度的模糊半径
        blur_radius = compute_blur_from_depth(depth_map)
           
        # 长焦镜头的自然虚化
        natural_bokeh = extract_bokeh_from_tele(tele_img)
           
        # 加权融合
        weight_map = compute_weights(depth_map)
        result = main_img * (1 - weight_map) + \
                 natural_bokeh * weight_map
           
        return result
    

景深对手机摄影的实际影响

  1. 优势
    • 街拍无需对焦:超焦距对焦覆盖大部分场景
    • 风景全清晰:从近到远都在景深范围内
    • 容错率高:对焦小幅偏差不影响清晰度
  2. 劣势
    • 人像虚化困难:需要计算摄影辅助
    • 主体突出不足:背景难以自然模糊
    • 创作空间受限:难以通过景深表达空间层次
  3. 应对策略
    • 使用计算虚化:人像模式、大光圈模式
    • 靠近拍摄:减小物距增加相对景深差异
    • 选择长焦镜头:2x、3x长焦有更浅的物理景深
    • 构图技巧:利用前景、中景、远景创造层次

4. 专业模式下的手动对焦技巧

4.1 峰值对焦(Focus Peaking)

峰值对焦通过高亮显示对焦边缘辅助手动对焦:

算法实现:

# 伪代码
edge_map = sobel_filter(image)
threshold = adaptive_threshold(edge_map)
peaking_mask = edge_map > threshold
display = overlay(image, peaking_mask, color='red')

使用技巧

4.2 对焦距离标尺

专业模式提供精确的对焦距离控制:

对焦标尺示例:
[∞]──────[10m]──────[2m]──────[1m]──────[0.5m]──────[MFD]
                         ↑
                    当前对焦位置

关键距离点

4.3 焦点锁定与重构图

AF-L(自动对焦锁定)技术:

  1. 半按快门对焦
  2. 保持半按状态锁定焦点
  3. 重新构图
  4. 完全按下快门拍摄

数学关系(余弦误差): \(\Delta f = f \cdot (1 - \cos\theta)\)

其中 $\theta$ 为重构图角度。

Rule of thumb:重构图角度小于30°时,焦点偏移可忽略。

4.4 连续对焦(AFC)设置

连续对焦的预测算法:

\[p_{t+\Delta t} = p_t + v_t \cdot \Delta t + \frac{1}{2} a_t \cdot \Delta t^2\]

其中:

场景优化参数

5. 计算摄影虚化效果

5.1 深度图生成

手机通过多种方式生成深度图:

  1. 双摄视差法: \(d = \frac{f \cdot B}{p}\) 其中 $B$ 为基线距离,$p$ 为视差

  2. 结构光/TOF: 直接获取深度信息,精度可达毫米级

  3. AI深度估计: 使用CNN从单张图片推断深度:

    输入图像 → MobileNet → 深度编码器 → 深度解码器 → 深度图
    

5.2 虚化渲染算法

基于深度图的虚化渲染流程:

深度图生成 → 前景分割 → 虚化核计算 → 渐进式模糊 → 边缘优化
     ↓           ↓           ↓            ↓           ↓
  TOF/双摄    语义分割    景深模型     高斯/散景    抗锯齿

虚化程度计算:

\[\sigma(z) = \frac{|z - z_f|}{z_f} \cdot \frac{f^2}{N \cdot c}\]

其中:

5.3 散景(Bokeh)模拟

真实镜头的点扩散函数(PSF)模拟:

  1. 圆形光圈: \(PSF_{circle}(r) = \begin{cases} 1/(\pi R^2) & r \leq R \\ 0 & r > R \end{cases}\)

  2. 多边形光圈(n片光圈叶片):
     五边形         七边形         圆形
       ⬟             ⬢            ●
    n=5片         n=7片        n→∞
    
  3. 猫眼效应(边缘渐晕): \(PSF_{vignette}(r, \theta) = PSF_{base}(r) \cdot (1 - v \cdot \cos^4\theta)\)

5.4 边缘处理与抠图优化

精确边缘检测采用Matting技术:

\[I = \alpha F + (1-\alpha) B\]

其中:

三分图(Trimap)生成:

原图 → 深度图 → 粗分割 → 三分图
                           ├─ 确定前景(白)
                           ├─ 确定背景(黑)
                           └─ 不确定区域(灰)

边缘优化技巧

5.5 计算虚化的参数调节

专业模式中的虚化控制:

  1. 光圈模拟值:f/0.95 - f/16
    • 实际是调节模糊核大小
    • 与物理光圈非线性对应
  2. 焦点选择
    • 点击对焦:单点深度
    • 区域对焦:平均深度
    • 人像模式:AI识别主体
  3. 虚化形状
    • 圆形:自然散景
    • 心形/星形:创意效果
    • 旋转散景:运动感

Rule of thumb

6. 对焦策略与场景优化

6.1 不同场景的对焦策略

人像摄影

运动摄影

微距摄影

夜景摄影

6.2 对焦性能优化

对焦速度优化策略:

  1. 粗调 + 精调
    粗调阶段:大步长二分搜索 → 快速接近
    精调阶段:小步长爬山算法 → 精确对焦
    
  2. 并行处理
    • PDAF粗定位(5ms)
    • CDAF精细调节(20ms)
    • 总时间 < 30ms
  3. 缓存策略
    • 场景深度图缓存
    • 常用对焦距离记忆
    • 预测模型参数保存

6.3 对焦失败的处理

常见对焦失败场景及对策:

场景 原因 解决方案
低对比度 CDAF失效 启用辅助对焦灯
重复纹理 PDAF混淆 切换到中心点对焦
逆光 眩光干扰 使用点测光对焦
玻璃后 反射干扰 手动对焦 + 偏振镜
快速移动 跟踪失败 预对焦 + 景深预留

本章小结

本章深入探讨了手机摄影中的对焦系统与景深控制技术:

核心概念

  1. 相位对焦(PDAF):通过检测相位差快速对焦,Dual Pixel技术实现100%覆盖
  2. 反差对焦(CDAF):通过优化图像对比度实现高精度对焦
  3. 景深公式:$DOF \approx \frac{2 \cdot N \cdot c \cdot s^2}{f^2}$,理解各参数影响
  4. 超焦距:$H = \frac{f^2}{N \cdot c} + f$,最大化景深范围
  5. 计算虚化:通过深度图和算法模拟光学虚化效果

关键公式汇总

实用规则

常见陷阱与错误(Gotchas)

1. 对焦系统误区

错误:认为手机只有反差对焦 ✅ 正确:现代手机集成PDAF、CDAF、激光、TOF等多种对焦技术

错误:相位对焦总是比反差对焦快 ✅ 正确:低光或低对比度场景,CDAF可能更可靠

2. 景深计算陷阱

错误:直接套用全画幅相机的景深公式 ✅ 正确:必须使用相应传感器尺寸的弥散圆标准

错误:手机光圈f/1.8等同于单反f/1.8的虚化 ✅ 正确:需考虑等效焦距,手机f/1.8约等于全画幅f/11的景深

3. 手动对焦误区

错误:峰值对焦显示越多越准确 ✅ 正确:过度的峰值可能是噪点,需要适当调节灵敏度

错误:对焦后可以随意重构图 ✅ 正确:大角度重构图会造成焦平面偏移,需要重新对焦

4. 计算虚化问题

错误:计算虚化可以完全替代光学虚化 ✅ 正确:边缘处理、透明物体、细节保留仍有挑战

错误:虚化程度越大越好 ✅ 正确:过度虚化会显得不自然,应模拟真实的景深范围

5. 对焦速度误解

错误:对焦速度完全取决于硬件 ✅ 正确:算法优化、场景预测、缓存策略同样重要

6. 调试技巧

对焦不准确

  1. 检查镜头是否清洁
  2. 确认对焦模式设置(AFS/AFC/MF)
  3. 查看是否启用了微距模式
  4. 验证对焦点选择是否正确

虚化效果异常

  1. 检查深度图质量(可视化查看)
  2. 确认主体边缘检测
  3. 调整虚化强度参数
  4. 检查是否有透明/反射物体干扰

对焦速度慢

  1. 增加环境光照
  2. 选择高对比度对焦点
  3. 使用中心对焦点(通常是十字型)
  4. 预对焦到预期距离

专业模式对焦技巧

# 调试命令(如有开发者选项)
adb shell setprop camera.af.debug 1  # 显示对焦调试信息
adb shell setprop camera.af.plot 1   # 显示对焦曲线

记住:对焦是摄影的基础,掌握对焦原理和技巧是拍出清晰照片的前提。在手机摄影中,虽然自动对焦已经非常智能,但理解其工作原理能帮助我们在特殊场景下做出正确的选择和调整。