1. 双像素传感器深度估计的技术背景
双像素(Dual-Pixel, DP)传感器是现代计算摄影领域的一项突破性技术。这种传感器将传统图像传感器中的每个像素分割为两个独立的子像素(左子像素和右子像素),通过微透镜阵列实现光路的相位分离。这种设计最初是为了提升相机自动对焦性能,但研究人员很快发现它还能为深度估计提供独特的相位差信息。
在实际应用中,DP传感器工作时会同时记录两幅图像:一幅来自所有左子像素的集合,另一幅来自所有右子像素。当场景中存在离焦区域时,这两幅图像会呈现出微妙的差异——这正是深度信息的关键载体。与传统双目立体视觉不同,DP技术不需要物理分离的两个镜头,所有光路信息都在单个镜头和传感器系统中捕获,这使得它特别适合集成到智能手机等紧凑型设备中。
2. 现有DP模拟方法的局限性分析
当前DP深度估计面临的核心挑战是数据稀缺问题。由于DP图像特征高度依赖于特定的硬件配置(如镜头光学设计、微透镜排列方式等),构建大规模的DP-深度配对数据集成本极高。大多数研究团队不得不采用模拟DP图像的方法,主要分为两类:
2.1 基于校准的模拟方法这类方法需要在实际相机上采集大量校准数据,通过空间采样和插值来重建DP点扩散函数(PSF)。例如,Xin等人(2021)通过在三维空间中离散采样来构建全空间的PSF查找表。虽然这种方法能获得相对准确的结果,但存在几个固有缺陷:
- 校准过程耗时(通常需要数小时的专业设备采集)
- 插值误差随距离采样点距离增加而累积
- 缺乏对镜头和传感器参数的显式建模,导致模型难以迁移到其他硬件配置
2.2 基于理想光学模型的模拟方法为规避校准成本,Pan等人(2021)提出将光学系统简化为理想薄透镜模型,使用对称分割的矩形光圈计算DP PSF。这类方法虽然计算高效,但过度简化了实际光学系统的复杂性:
- 忽略镜头像差(球差、彗差、像散等)
- 假设左右PSF严格相位对称
- 无法反映传感器微透镜阵列的真实光路特性
图1展示了理想CoC(模糊圈)模型与真实DP PSF的对比,可见传统方法产生的模拟数据与真实数据存在显著域差距(domain gap)。这种差距直接导致在这些模拟数据上训练的深度估计模型,在真实DP图像上表现不佳。
3. Sdirt方案的技术实现细节
3.1 光线追踪DP PSF模拟器
Sdirt的核心创新在于采用物理精确的光线追踪来计算DP PSF。具体实现分为以下几个关键步骤:
3.1.1 光学系统建模我们基于Canon RF50mm镜头和R6 Mark II机身的实测参数构建光学模型,包括:
- 每个镜片的曲率半径、折射率和间距
- 光圈位置和孔径大小(设置为F/4)
- 传感器尺寸(24mm×36mm)和分辨率(512×768)
3.1.2 光线追迹过程对于物体空间中的每个点p,我们执行以下计算:
- 在入瞳面上密集采样4096个点作为光线起点
- 使用Snell定律计算光线在每个镜片表面的折射
- 记录光线最终在传感器平面的落点坐标和方向
3.1.3 DP像素结构建模由于厂商未公开微透镜和子像素的详细参数,我们基于文献[15,29]建立简化模型:
class DPPixel: def __init__(self): self.microlens_radius = 7.5e-6 # 微透镜半径 self.focal_length = 15e-6 # 微透镜焦距 self.subpixel_gap = 0.5e-6 # 子像素间距 self.pixel_size = 4.2e-6 # 像素尺寸3.1.4 PSF计算算法对于每条追迹光线,我们需要判断它最终进入哪个子像素。这分为两种情况处理:
情况一:光线落在微透镜区域内
def calculate_boundaries(xi, tan_theta, f, h, w): xL1 = xi + w - (f*tan_theta - w)*h/(f - h) xM1 = xi - (f*tan_theta)*h/(f - h) xR1 = xi - w - (f*tan_theta + w)*h/(f - h) return xL1, xM1, xR1当光线x坐标在[xL1, xM1]区间时进入左子像素,在[xM1, xR1]时进入右子像素,否则视为丢失光线。
情况二:光线落在微透镜区域外
xL2 = xi + w - h*tan_theta xM2 = xi - h*tan_theta xR2 = xi - w - h*tan_theta判断逻辑与情况一类似,但不再考虑微透镜折射影响。
最终,左右PSF通过积分对应子像素的光线能量分布得到(公式3)。
3.2 基于MLP的PSF预测网络
虽然光线追踪能产生物理准确的PSF,但逐像素计算成本过高。为此,我们设计了一个MLP网络来实时预测PSF:
网络架构细节
- 输入:归一化的物体点坐标(x,y,d),其中d为深度值
- 隐藏层:5层,每层512个神经元,使用ReLU激活
- 输出:2×ks²维向量(ks=21为PSF核大小)
- 损失函数:L2损失(公式4)
训练策略
- 使用光线追踪生成的PSF作为ground truth
- 采用max归一化缓解大半径PSF的学习难度
- 推理时改用sum归一化以匹配实际传感器的能量分布
3.3 像素级DP图像渲染
获得预测PSF后,我们通过以下步骤生成模拟DP图像:
对输入RGB-D数据的每个像素:
- 从深度图获取物体点深度d
- 将(x,y,d)输入MLP网络预测PSF对(PSFL, PSFR)
使用局部卷积操作:
def render_dp_image(rgb, depth): dp_left = np.zeros_like(rgb) dp_right = np.zeros_like(rgb) for i in range(height): for j in range(width): psf_l, psf_r = mlp_predict(i, j, depth[i,j]) dp_left[i,j] = local_conv(rgb, psf_l, (i,j)) dp_right[i,j] = local_conv(rgb, psf_r, (i,j)) return np.concatenate([dp_left, dp_right], axis=-1)这个过程充分保留了光学系统的空间变化特性,生成的DP图像包含真实的像差和相位信息。
4. 深度估计模型设计与优化
4.1 网络架构调整
我们基于Cheng等人(2020)的立体匹配网络进行改造,主要针对DP数据特性做了以下改进:
双向代价体积构建传统立体匹配假设视差方向固定,但DP数据中:
- 焦点前的物体产生正向视差(左图右移)
- 焦点后的物体产生反向视差(左图左移)
因此,我们扩展代价体积生成过程(图4d):
- 保留原始单向视差(绿色箭头)
- 新增反向视差搜索范围(蓝色箭头)
- 最终代价体积维度为2dmax×H×W(dmax为最大视差)
4.2 训练配置
数据集准备
- 使用NYU Depth v2的50,688个室内场景
- 通过Sdirt生成F/4的模拟DP图像
- 输入分辨率调整为512×768
优化参数
optimizer: AdamW initial_lr: 1e-4 scheduler: CosineAnnealing batch_size: 4 epochs: 50 samples_per_epoch: 2000损失函数采用L1损失监督预测深度图(公式5),相比L2对异常值更鲁棒。
5. 实验结果与分析
5.1 DP PSF模拟质量评估
我们在F/1.8大光圈设置下(更易观察像差)对比了不同方法的PSF生成效果:
定性分析(图5)
- 真实PSF显示:离轴越远,相位不对称性越明显
- 传统方法(CoC、L2R等)产生的PSF呈现不真实的对称性
- Sdirt在所有位置和深度都准确预测了PSF形态
定量指标(表1)
| 方法 | NCC↑ | NSD↓ |
|---|---|---|
| Sdirt(ours) | 0.915 | 0.133 |
| CoC | 0.672 | 0.448 |
| L2R | 0.638 | 0.523 |
我们的方法在50个采样点上平均NCC达到0.915,显著优于其他方案。
5.2 DP图像模拟质量
构建包含56个平面场景的测试集,评估模拟DP图像与真实数据的相似度:
视觉对比(图6)
- 其他方法在0.5m和2m处分别出现右/左移纹理偏差
- Sdirt生成的图像在所有深度都保持纹理一致性
客观指标(图7)
- PSNR平均达37.198,SSIM达0.9845
- 随着深度偏离焦点(1m),传统方法性能急剧下降,而Sdirt保持稳定
5.3 深度估计性能
我们在自建的DP119测试集上评估,包含:
- 45个平面场景(纹理丰富)
- 44个盒状场景(复杂几何)
- 30个日常场景(验证泛化性)
定量结果(表3)
| 场景 | 方法 | MAE↓ | Acc-1↑ |
|---|---|---|---|
| 平面 | Sdirt | 0.084 | 0.984 |
| CoC | 0.208 | 0.667 | |
| 盒状 | Sdirt | 0.119 | 0.947 |
| L2R | 0.386 | 0.365 | |
| 日常 | Sdirt | 0.270 | 0.823 |
| DDDNet | 0.893 | 0.248 |
关键发现
- 在纹理丰富的平面场景,我们的方法Acc-1达到98.49%
- 即使在挑战性的日常场景,仍保持82.36%的准确率
- 边缘区域的深度估计精度显著优于传统方法(图8)
6. 实际应用中的技术要点
硬件适配建议目前Sdirt主要支持固定焦点镜头+DP传感器的组合:
- 推荐使用Canon R系列(5D4、R6等)
- 需提前测量镜头参数(焦距、光圈叶片数等)
- 建议工作距离0.5m-20m(可调整)
性能优化技巧
- 光线追迹阶段:使用550nm单色光简化计算
- MLP推理:可用半精度(FP16)加速,精度损失<0.5%
- 内存管理:F/4时21×21 PSF核约占用3GB显存
常见问题排查
出现环形伪影:
- 检查光线采样数是否足够(建议≥4096)
- 验证微透镜焦距参数准确性
深度估计边缘不准确:
- 增大代价体积中的dmax
- 检查PSF预测网络是否在边缘区域欠拟合
训练收敛慢:
- 尝试对深度值进行对数域归一化
- 增加batch size至8或16