You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将相机Raw 16位numpy数组图像校正至参考白平衡红蓝分量

白平衡校正与暗帧减除方案

核心思路

Raw格式未去马赛克图像的白平衡校正本质是对拜耳阵列中的R、B通道分别应用增益系数,将当前白平衡参数下的增益匹配到参考白平衡参数的增益水平,之后再减除参考白平衡下拍摄的暗帧。

步骤详解及代码示例

假设你已知:

  • 参考白平衡参数:R_ref(0-100)、B_ref(0-100)
  • 当前图像的白平衡参数:R_curr(0-100)、B_curr(0-100)
  • 图像的分辨率:height、width
  • 相机的拜耳模式(以常见的RGGB为例,若为其他模式需调整索引)

1. 计算白平衡校正系数

通常相机的0-100白平衡参数与通道增益呈线性正相关,因此校正系数为参考增益与当前增益的比值:

import numpy as np

# 计算校正系数
r_correction = R_ref / R_curr
b_correction = B_ref / B_curr

注:若相机参数与增益为负相关(参数越小增益越高),则反转比值为 R_curr / R_ref、B_curr / B_ref,需根据相机实际特性调整。

2. 将一维Raw数组转为二维拜耳阵列

# 假设输入的当前图像是一维uint16数组
raw_1d = np.array(...)  # 你的当前图像一维数组
raw_img = raw_1d.reshape((height, width)).astype(np.float32)

3. 应用白平衡校正(针对拜耳通道)

对R、B通道分别乘以校正系数,G通道保持不变,同时处理16位数值的溢出:

# RGGB模式的通道索引:
# R: 偶数行、偶数列
# G: 偶数行奇数列 + 奇数行偶数列
# B: 奇数行、奇数列
raw_img[::2, ::2] *= r_correction  # 校正R通道
raw_img[1::2, 1::2] *= b_correction  # 校正B通道

# 饱和裁剪,确保数值在16位无符号整数范围内(0-65535)
raw_img = np.clip(raw_img, 0, 65535)
corrected_raw_img = raw_img.astype(np.uint16)

# 转回一维数组(若需要保持原始格式)
corrected_raw_1d = corrected_raw_img.flatten()

4. 暗帧减除

先对多张暗帧计算平均(消除噪声),再进行饱和减除(避免负数):

# 假设你有若干张暗帧的一维数组:dark_frames_1d = [dark1, dark2, ...]
avg_dark_1d = np.mean(dark_frames_1d, axis=0).astype(np.int32)
corrected_raw_int32 = corrected_raw_1d.astype(np.int32)

# 饱和减除,确保结果非负
final_raw_1d = np.maximum(corrected_raw_int32 - avg_dark_1d, 0).astype(np.uint16)

关键注意事项

  • 拜耳模式匹配:必须确认相机的拜耳阵列格式(如BGGR、GBRG、GRBG),否则通道索引错误会导致校正失效。
  • 增益线性验证:若相机白平衡参数与增益非线性,需通过校准获取参数-增益映射表,替换线性计算的校正系数。
  • 参数一致性:暗帧必须与目标图像的曝光时间、ISO、温度等参数完全一致,否则暗帧减除效果会大打折扣。

内容的提问来源于stack exchange,提问作者Vince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:15:55