1601 字
8 分钟
紫边从哪里来?从通道位移理解 CAC 色差校正

树枝逆光、黑字白底和建筑轮廓处常出现红、蓝或紫色细边。它有时来自饱和溢出、Debayer 或锐化,但镜头色差是另一类根源:玻璃对不同波长的折射率不同,红、绿、蓝光无法完全遵循同一条成像路径。

CAC(Chromatic Aberration Correction,色差校正)不是 CCM。CCM 改变一个像素的颜色数值,CAC 主要移动或重采样不同颜色通道,让同一物体边缘重新落到相同空间位置。

横向色差:通道倍率不一致#

横向色差也叫倍率色差。把绿通道作为参考,红、蓝通道可使用略有差异的径向模型:

rR=r(1+cR1r2+cR2r4),rB=r(1+cB1r2+cB2r4)r_R=r(1+c_{R1}r^2+c_{R2}r^4),\qquad r_B=r(1+c_{B1}r^2+c_{B2}r^4)

在光心 r=0r=0 附近,各通道位移接近零;越靠近画面边缘,同样微小的倍率差会转化为越来越明显的像素偏移。

紫边为什么越靠近角落越明显

横向色差让红、绿、蓝通道具有略不同的径向放大率。中心几乎重合,边缘位移逐渐放大。

红通道位移1.98 px
蓝通道位移2.65 px
观察素材

示意把绿通道作为几何参考。真实位移还随焦距、对焦位置、波长和镜头结构变化。

紫边之所以显眼,是因为高反差边缘对亚像素错位非常敏感。平坦区域即使存在相同几何偏差,也缺少可以观察的结构。

CAC 怎样进行反向补偿#

若标定测得红通道相对绿通道向外偏移,校正就从输出红通道位置反查稍微靠内的输入坐标。与 LDC 一样,工程实现应采用逆向映射,确保每个输出像素都有定义。

怎样把通道边缘重新对齐

用相反的通道径向缩放抵消测得色差。目标不是让系数看起来漂亮,而是让全视场残差最小。

虚线:校正前实线:校正后像高 r
边缘残差2.70 px
校正状态欠校正

单一系数无法拟合所有镜头。工程上常用多项式或二维网格分别描述红、蓝相对绿通道的位移。

只让最外圈对齐还不够。参数要在完整像高范围最小化残差,并约束曲线平滑、单调和可逆。镜头的误差若并非纯径向对称,二维位移网格往往比少量多项式更准确。

一个极简的通道半径校正如下:

def channel_radius(radius, c1, c2):
r2 = radius * radius
return radius * (1 + c1 * r2 + c2 * r2 * r2)
# 输出位置反查输入通道位置
source_r = channel_radius(output_r, red_c1, red_c2)
source_b = channel_radius(output_r, blue_c1, blue_c2)

真实实现还需要光心、非方形像素、图像宽高归一化和插值边界策略。

横向与纵向色差必须分开#

纵向色差来自不同波长的最佳焦平面不一致:对焦在绿色时,红色可能在焦点前,蓝色在焦点后。它在中心也可能存在,常表现为焦外区域的洋红或绿色光晕。

横向色差和纵向色差不是同一种问题

横向色差改变通道的空间倍率;纵向色差让不同波长的最佳焦平面不同。二者需要不同模型。

空间表现边缘彩边
是否随像高增强通常是
色差类型

CAC 的通道缩放主要处理横向色差。纵向色差本质是波长相关的离焦,仅靠二维 warp 无法完全恢复。

二维通道 warp 擅长处理横向位移,却无法把已经离焦扩散的通道重新变清晰。纵向色差更依赖镜头光学设计、光圈、对焦距离,以及针对性的去卷积或边缘抑制;校正能力有限时,应避免承诺“彻底消除紫边”。

为什么不能见到紫色就做去饱和#

基于颜色阈值的 defringe 会寻找高亮边缘附近的紫色并降低色度。它可以掩盖残余色边,却也可能误伤紫色衣服、霓虹灯或产品颜色。几何 CAC 依据镜头模型恢复通道对齐,物理解释更明确;defringe 更适合作为残差处理,而不是替代标定。

还要排除其他来源:

  • 高光饱和导致某个 Bayer 通道提前 clipping;
  • Debayer 在高频斜边产生 false color;
  • 过强锐化放大原本很弱的通道错位;
  • 色域裁剪让高饱和边缘发生色相偏移;
  • 镜头炫光产生大范围彩色雾状结构。

这些问题需要不同测试图和不同修复方法。

CAC 与 LDC 的关系#

LDC 描述所有通道共享的几何畸变;CAC 描述红、蓝相对参考通道的额外偏移。如果先独立拟合 LDC,再用另一套数据拟合 CAC,两套参数可能互相吸收误差,最终中心正常而边缘残差不稳定。

LDC 与 CAC 为什么适合联合标定

LDC 修正共享几何形变,CAC 修正通道间相对形变。分开拟合时,两套模型可能互相吸收误差。

几何残差0.73 px
彩边残差0.91 px
标定策略

残差数值是机制示意。无论参数如何存储,部署时都可把 LDC 与通道偏移合成一张 warp 网格,减少重复插值。

联合标定可以把绿通道或亮度结构用于共享几何,再估计红、蓝残差。部署时,三通道各自的最终逆向坐标可以与 LDC、缩放和 EIS 合成一次 warp,减少带宽和重复插值。

在 Bayer 域还是 RGB 域处理#

Bayer 域保留原始通道观测,但每种颜色只占稀疏采样位置。移动单个 CFA 通道会破坏规则采样几何,需要与 Debayer 联合设计。RGB 域拥有完整三通道平面,通道 warp 更直接,因此通用 ISP 常在 Debayer 之后执行 CAC。

高端管线可能把镜头模型带入 edge-aware Debayer,联合考虑颜色采样位置;这不是简单交换两个模块就能得到的效果。无论在哪个域,校正参数必须与图像裁切、binning、数字变焦和传感器读出模式使用同一坐标系。

标定与验证#

标定目标需要提供全视场、高对比且可稳定定位的边缘。常见做法是分别检测各通道特征位置,拟合红、蓝相对绿的径向或二维位移。测试必须覆盖变焦、对焦、温度、OIS 状态和不同读出模式。

验证清单:

  • 中心到四角的径向与切向高反差边缘;
  • 红、绿、蓝边缘位置残差,而非只看综合色图;
  • 亚像素斜线、细字与星点,检查插值损失;
  • 真正的紫色物体,检查 defringe 是否误伤;
  • 不同光圈与对焦距离,区分纵向色差;
  • 视频变焦、对焦和参数切换时是否跳变;
  • 校正后边缘是否因二次锐化重新出现彩边。

最容易踩的坑#

  1. 把 CAC 当成调颜色的矩阵或饱和度操作;
  2. 用去紫阈值掩盖全部色差,误伤真实颜色;
  3. 只在画面角落拟合,忽略中间像高残差;
  4. 混淆横向位移与纵向离焦;
  5. LDC 和 CAC 使用不同光心或归一化方式;
  6. 分多次 warp,累积模糊、ringing 与带宽;
  7. 忽略焦距、对焦、温度和读出裁切对参数的影响。

CAC 的关键判断是:眼前的彩边究竟是不是“不同波长落在不同空间位置”。若是横向色差,就用可靠标定让通道几何重新对齐;若是纵向离焦或其他 ISP 伪色,就必须换用对应模型。先识别机制,再选择校正,才能避免用去饱和把问题和真实颜色一起抹掉。

紫边从哪里来?从通道位移理解 CAC 色差校正
https://cloudsir.top/posts/how-chromatic-aberration-correction-works/
作者
CloudSir
发布于
2026-08-25
许可协议
CC BY-NC-SA 4.0
超出色域的颜色怎么办?从逐通道裁剪到色度压缩
为什么加入噪声反而更平滑?理解量化与抖动