單元 11 · 白平衡與色彩(AWB/CCM)

NVIDIA AWB/CCM

NVIDIA AWB

NVIDIA ISP 自動白平衡依統計調整 R/G/B gains;也可手動設定色溫。

Argus WhiteBalance(示意)
AWB_AUTO / MANUAL + 色溫

CCM 與色彩

實務:先讓感測器「中性」出圖,再交 NVIDIA AWB/CCM 自動化——避免兩端色彩打架。

11.6 深入:白平衡實作

控制 AWB
Argus AWB_MANUAL + gains
  1. 拍灰卡,手動調 gains 直到 R=G=B。
  2. 記錄該色溫的 gains。
  3. 不同色溫重複 → 建表。
陷阱:感測器端 AWB 對混合色溫不準;要精準色彩,關閉感測器 AWB、改平台端做。

11.7 練習

  1. 灰卡校正一組 gains。
  2. 對比「開 AWB」與「關 AWB 手動」的結果。

11.8 深入原理:灰世界假設與 gains 的位元級計算

AWB 的基礎是灰世界假設:場景平均應接近灰(R=G=B)。感測器在色溫變化下,R/B 通道增益要補償才能回到灰。

RAW(各通道平均)灰卡比例R/B gain 計算套用至感測器/ISP
色溫灰卡下 RAW 比例(R:G:B)需要的增益
日光 6500K1.0 : 1.0 : 1.0gR≈1.0, gB≈1.0
暖白 3000K1.4 : 1.0 : 0.7gR≈0.7, gB≈1.4
冷色 10000K0.8 : 1.0 : 1.3gR≈1.25, gB≈0.77
手算灰卡 gains
拍灰卡,讀 RAW 四通道平均:
R=700, Gr=500, Gb=520, B=400(10-bit)
目標:R' = G' = B' = 某基準
gR = Gr/R = 500/700 ≈ 0.71
gB = Gr/B = 500/400 = 1.25
基準用 Gr 通常最穩(兩綠通道平均)
記住:AWB gains 是「把 R/B 通道『縮放』到跟 G 對齊」。不是「加亮度」,是「調整色彩比例」——所以調 gain 不該改變整體亮度太多。

11.9 Worked Example:CCM 與 AWB 誰先誰後

色彩管線順序
AWB gains(感測器/ISP 前段)
→ CCM(3×3 色彩矩陣,把感測器原生色域轉到目標色域)
→ Gamma(人眼感知非線性)
→ 輸出

# 判斷順序錯的徵兆:
# 調整 AWB 後 CCM 也要重調,表示你改動順序搞混了
陷阱:感測器端與 NVIDIA 端都有 AWB/CCM。兩端同時開會「打架」——正確分工是:感測器先中性(關 AWB 或設固定),交給 NVIDIA AWB/CCM 收尾。

11.10 疑難排解決策樹:色彩異常

「顏色不對」
1. 中性場景偏某一色?
   ├─ 關 AWB 手動設灰卡 → 驗證感測器本身
   ├─ 仍偏 → CCM / 黑位(unit-07)
   └─ 變正常 → AWB 沒收斂 / 混合色溫
2. 高光區偏色?
   └─ 色階 clipping 或 gamma
3. 換 mode 後偏色?
   └─ sensor mode 的 gains 表沒同步(unit-08)

11.11 常見錯誤與陷阱

陷阱 1:拿「白牆」當灰卡——白牆常含藍/黃色料。要真正中性灰卡或黑色/白平衡目標。
陷阱 2:混合色溫場景——室內日光燈 + 窗邊陽光同時存在,單一 AWB 無法兩全,只能取主光源。
陷阱 3:感測器 register gains 是「反比」易搞反——有的感測器 register 定義是「乘在訊號上」,有的給「1/gain」。查 datasheet,回讀驗證方向。

11.12 練習

  1. 灰卡校正一組 gains,並與理論值對照。
  2. 故意把 gain 設反(0.7↔1.4),觀察並記下錯誤症狀。
  3. 測試混合色溫場景,驗證「只能取主光源」。

11.13 深入原理:AWB 的統計、色溫與 CCM

AWB 不是把整張圖變白,而是從可信的中性區域估計照明色。ISP 通常先排除飽和、高彩度與陰影像素,再以區域統計求 R/G、B/G 比例;色溫只是這個比例的索引,不是感測器直接量到的物理溫度。CCM 再把感測器原生色域映射到輸出色域。

RAW channel statsoutlier rejectionAWB gainsCCMgamma/output
量測可信條件失效症狀
R/G、B/G灰卡或中性物、未飽和整體偏色
灰階軸多個亮度區間都接近中性高光或暗部單獨偏色
CCM 色塊誤差固定光源與曝光特定色相偏移

11.14 Worked Example:從灰卡比例得到 gains

固定中性基準的計算
灰卡 RAW 平均:R=700, Gr=500, Gb=520, B=400
G基準 = (Gr + Gb) / 2 = 510
gR = 510 / 700 = 0.729
gG = 1.000
gB = 510 / 400 = 1.275

套用後:R'≈510、G'≈510、B'≈510
驗證:避開飽和區,重拍三個亮度級;若比例只在某一級成立,查 clipping、黑位或 sensor gain 格式。
不要把 gR/gB 直接當成 CCM 係數,CCM 是 3×3 矩陣。
實作順序:先固定 AWB gains 讓灰卡中性,再量色卡估 CCM;若 AWB 還在追,色卡誤差會混入照明估計,導致錯誤的矩陣。

11.15 疑難排解決策樹:偏色是 AWB 還是 CCM

用灰卡、色卡、RAW 三個證據分診
1. RAW 四通道比例已不平衡?
   ├─ 是 → sensor gains、黑位、Bayer 或 LSC
   └─ 否 ─┐
2. 關 AWB 後灰卡仍偏色?
   ├─ 是 → CCM、gamma、輸出色域或 channel order
   └─ 否 ─┐
3. 灰卡正常、色卡特定色塊錯?
   ├─ 是 → CCM / 色域映射
   └─ 否 ─┐
4. 只有混合光源錯?→ AWB ROI、主光源選擇與收斂策略

11.16 常見錯誤與陷阱

陷阱 1:用 JPEG RGB 反推 sensor gains。JPEG 可能已經過 gamma、CCM、飽和裁切;校正應使用 RAW 或線性資料。
陷阱 2:把兩個綠色通道平均掉就結束。Gr/Gb 差異可揭露讀出、LSC 或 Bayer 問題;平均前要先檢查兩者是否合理。
陷阱 3:在混合色溫場景追求全畫面中性。一組 gains 只能代表一個主照明;應定義 ROI、優先級與可接受色差。

11.17 練習

  1. 用三個亮度級灰卡計算 R/G/B gains,檢查是否因 clipping 而失真。
  2. 固定 AWB 後拍色卡,將「灰卡誤差」與「色塊誤差」分開記錄。
  3. 設計一個混合色溫場景,測試不同 AWB ROI 對結果與收斂速度的影響。
看完這單元你應該能說出:
  • NVIDIA AWB 自動/手動。
  • CCM 與色溫分段。
  • 「感測器中性 → NVIDIA 色彩」分工。
  • NVIDIA 色彩調校可視性限制。

延伸閱讀

11.18 進階真實情境 Worked Example:混合色溫下的 AWB 策略

場景:Thor T5000 搭載在手術機器人上,手術室同時有日光燈(5000K)與手術燈(4000K 暖色)。AWB 需要在兩種色溫之間找到平衡,不讓手術區域偏色。

手術室 AWB 策略
# 問題:全畫面 AWB 被大面積日光燈主導 → 手術燈區域偏暖
# 或被手術燈主導 → 日光燈區域偏冷

# 方案:ROI-based AWB
# 1. 定義兩個 AWB ROI:
#    ROI_A(手術區域):優先級高,色溫目標 4000K
#    ROI_B(背景):優先級低,色溫目標 5000K
# 2. ISP 統計分別計算兩個 ROI 的 R/G、B/G 比例
# 3. 最終 gains = 加權平均(ROI_A 權重 0.7、ROI_B 權重 0.3)

# 驗證:拍 18% 灰卡放在手術區域,量測色彩 ΔE < 3(不可感知差異)

# 設計決策:
# 1. 手術場景對色彩精準度要求極高 → 必須用 ROI-based AWB
# 2. ROI 與優先級必須手動定義(自動化無法理解「哪個區域重要」)
# 3. CCM 必須在 AWB 收斂後才計算——AWB 與 CCM 有嚴格順序依賴
設計決策:混合色溫場景的 AWB 不能用「全畫面平均」。ROI-based AWB 是唯一精準解法,但 ROI 定義需要場景知識——這是自動化無法取代工程判斷的地方。

11.19 深入原理擴充:AWB 的色彩空間與 CCM 的數學

CCM(Color Correction Matrix)是一個 3×3 矩陣,把感測器原生色域(device-dependent)映射到輸出色域(通常是 sRGB)。AWB gains 是「pre-CCM」的通道縮放,CCM 是「post-AWB」的色彩旋轉。兩者數學上不可交換——先 AWB 再 CCM ≠ 先 CCM 再 AWB。

RAW (R,G,B)AWB gains (gR, gG, gB)CCM (3×3 matrix)GammasRGB output
容易忽略的邊界案例:若 CCM 是在日光(6500K)下量測的,但 AWB 把色溫調到 3000K(暖色),CCM 的色彩旋轉可能不再適用。專業相機的做法是為每個色溫段維護一組 CCM(color temperature interpolation),NVIDIA ISP 通常在內部做這件事。

11.20 診斷式疑難排解表

症狀可能原因解決方案
灰卡上手動 AWB 正常但色卡特定色塊偏色CCM 矩陣未正確校正 / 色溫分段切換錯誤在固定色溫下拍色卡,量測 ΔE;重新校正 CCM
混合色溫場景中 AWB 不穩定(色溫來回跳動)AWB ROI 設定不穩定 / 場景內容變動導致統計跳動增加 AWB temporal smoothing;固定 ROI 或限制色溫變化範圍
AWB gains 方向搞反(應降 R 卻升了)感測器 register 的 gains 定義是「乘在訊號上」vs「乘在 1/gain」回讀 register 驗證方向;用灰卡實測 R/G/B 三通道變化
換光源後 AWB 需要 10 秒才收斂AWB convergence speed 設定過慢 / 統計 ROI 遮蔽主光源提高 AWB reaction speed;確認 ROI 覆蓋主光源區域
手術燈下白色物體偏黃AWB 被手術燈色溫主導但 CCM 未針對該色溫校正為手術燈色溫建立獨立的 CCM 校正值

11.21 進階挑戰題

  1. 設計一個手術室專用的 AWB + CCM 調校流程:定義 3 個色溫段(手術燈 4000K、日光燈 5000K、混合)的 CCM 校正值,並說明如何在 ISP 中做色溫段插值。
  2. 分析 AWB gains 的「反比定義」在不同感測器上的差異:以 OV9281 與 OV5640 為例,說明相同的灰卡 R/G/B 比例如何產出不同的 gains 值,並驗證你的計算。
  3. 設計一個混合色溫場景的量化評估指標:用 ΔE(色彩差異)在 5 個灰階級上測量,畫出色彩精準度的「色溫 vs ΔE」曲線,找出可接受的色溫範圍。

11.22 專案級端到端 Worked Example:色彩校正專案 — 灰卡 AWB 到色卡 CCM

場景:食品品質檢測專案要求 ΔE < 3。專案目標:建立「灰卡→AWB、色卡→CCM」的完整色彩校正流程並量化驗證。

里程碑規劃
M1 中性化感測器
   ├─ 固定光源(D65 光源箱)
   ├─ 手動設 AWB gains 讓灰卡 R=G=B
   └─ 通過:灰卡四通道比例一致

M2 多色溫建表
   ├─ 3000K / 5000K / 6500K 各拍灰卡
   ├─ 各產一組 AWB gains
   └─ 通過:色溫-gains 對照表

M3 CCM 校正
   ├─ 拍 Macbeth 色卡
   ├─ 量測 24 色塊 ΔE
   └─ 通過:平均 ΔE < 3

M4 色溫分段驗證
   ├─ 每色溫段各量一次 ΔE
   └─ 通過:所有段 ΔE < 5

M5 混合色溫
   ├─ 定義 ROI 策略(unit-11.18)
   └─ 通過:主區域 ΔE < 3

M6 回歸 + 交付
   └─ 通過:色溫-CCM 表進 repo + 重跑 SOP 文件

驗證:
  ΔE = 用 Lab 色彩空間比較色卡實際值 vs 標準值
專案要點:色彩校正的順序不可逆:先中性化(AWB)→ 再色彩空間映射(CCM)。AWB 未收斂就量 CCM,誤差會混入照明估計。

11.23 量測 / 驗證 SOP:色彩校正與驗證

色彩 SOP(Step 1–6)
Step 1 固定光源與曝光
   光源箱(D65)+ 固定曝光 + 關自動
Step 2 灰卡 AWB
   拍灰卡 → 讀 RAW 四通道 → 算 gains → 套用
Step 3 驗證中性
   重拍灰卡 → R≈G≈B
Step 4 色卡 CCM
   拍 Macbeth → 量 24 色塊 → 建 CCM
Step 5 ΔE 驗證
   套 CCM 後重拍 → 算 ΔE(目標 < 3)
Step 6 多色溫 + 回歸
   3000/5000/6500K 各驗一次

判讀指標:
  RAW 四通道比例已失衡 → sensor gains / 黑位 / Bayer
  灰卡正常但色卡錯 → CCM
  只混合光源錯 → ROI 策略

11.24 平台間對照:AWB 與色彩

面向Thor T5000RPi5Orange PiOrin Nano
AWB 控制Argus AWB(自動/手動色溫)ColourGainsred/blue_balanceArgus AWB
CCM 可調性受限(內部 tuning)✅ tuning JSON❌ 感測器內建受限
色溫分段✅ 內部自動✅ 可設定⚠️✅ 內部自動
ROI-based AWB✅(部分)
色彩調校深度中(自動化協助)高(全開源)
選擇思考:「感測器先中性,交給平台色彩收尾」的分工四平台一致。RPi5 能深入自訂 CCM 曲線;Thor/Orin 靠自動化與內部色溫分段,深度色彩自訂需要 NVIDIA 工具。

11.25 互動式檢核清單

11.18 Register 位元級完整工作流

本單元涉及的關鍵 register,以及「讀→改→寫→驗證」的完整位元級操作序列:

Register位址功能Bit Field 說明
AWB_GAIN_R0x00140100AWB R channel gainbit[15:0] = gain (8.8 fixed point)
CCM_MATRIX0x00140200Color Correction Matrix3×3 matrix (signed 1.11 fixed point)
讀→改→寫→驗證 完整序列(以 AWB_GAIN_R 為例)
# Step 1: 讀取目前值
$ devmem2 0x00140100 w
# 記錄 current_value

# Step 2: 計算新值(設定 bit[0]=1)
$ new_value=$((current_value | 0x0001))

# Step 3: 寫入
$ devmem2 0x00140100 w $new_value

# Step 4: 驗證
$ devmem2 0x00140100 w
# 確認 bit[0] = 1,其餘 bit 不變

# Step 5: 進階 — bitmask 操作
$ read_val=$(devmem2 0x00140100 w | grep "Read" | awk '{print $NF}')
$ mask=0x0001
$ expected=0x0001
$ [ $(($read_val & $mask)) -eq $expected ] && echo "PASS" || echo "FAIL: bit[0] not set"

11.19 多層疑難排解決策樹

決策樹 1:色彩偏差(偏色)
1. 全面偏紅/偏綠?
   ├─ AWB 未收斂 → 檢查光源色溫是否在 AWB range
   └─ CCM matrix 不準 → 重跑白卡校正
2. 特定光源下偏色?
   ├─ AWB illuminant 列表不含該光源 → 手動設定 CCM
   └─ AWB 速度太慢 → 調 AWB speed factor
決策樹 2:CCM 校正失敗
1. 校正後 ΔE > 5?
   ├─ 白卡拍攝角度不對 → 須正對光源、無反光
   └─ ISP 前級設定不對 → BLC/LSC 未先校正
2. CCM 輸出超出 [0,1]?
   └─ 加 clamp 或調整 offset

11.20 量測驗證完整 SOP

AWB/CCM 完整校正 SOP:

步驟動作指令/方法預期輸出
Step 1環境準備D65 lightbox + X-Rite ColorChecker光源 6500K ± 200K
Step 2BLC 先校正拍暗場,設定 black level四通道偏差 < 2 DN
Step 3LSC 先校正拍白板,生成 LSC table四角差 < 5%
Step 4AWB 開啟拍白卡,啟用 AWB autoAWB converged
Step 5量測 AWB gain讀 AWB_GAIN_R/B 值與 D65 預期值接近
Step 6CCM 校正拍 ColorChecker,套用校正 matrixΔE < 3 (avg)
Step 7驗證多光源D50, TL84, A 光源各拍一張ΔE < 5 所有光源

11.21 四平台終極對照

面向Thor T5000RPi5Orange PiOrin Nano
AWB 算法NVIDIA 3A (neural + heuristic)libcamera AWB (heuristic)無(手動)NVIDIA 3A
CCM 格式3×3 + offset (signed 1.11)3×3N/A3×3 + offset
校正工具NVIDIA ISP Visualizer`raspistill --settings`手動NVIDIA ISP Visualizer
支援光源數10+ (D65, TL84, A, H 等)3–50(手動)8+
AWB 收斂時間< 1 sec2–3 secN/A1–2 sec
色彩空間轉換RGB→YCbCr + CCMRGB→YCbCrN/ARGB→YCbCr + CCM

11.22 完整 Bring-up 小 Checklist

針對「白平衡與色彩(AWB/CCM)」主題的完整 bring-up 步驟清單: