單元 14 · 清晰度、動態範圍與調校工作流

NVIDIA tuning 流程

清晰度與對比

動態範圍與 HDR

NVIDIA 調校工作流:① 感測器 init 正確 ② 出圖中性 ③ AE/AWB 自動收斂 ④ 依場景微調 ⑤ 回歸。強調「讓自動化做事」。

14.6 動態範圍與 HDR(本平台)

工程取捨:先量測場景動態範圍需求(亮/暗是否同時爆掉)再決定 HDR 或 tone mapping。

14.7 每次改動的記錄範本

tuning 改動 log
日期: ____  場景: ____
改動: 參數 A → B
原因: ____
結果: ____(量化)
回歸: ____ ✓/✗
附圖: ____
紀律:可重現的調校 = 完整 log。一次只改一個參數、統一場景比較。

14.6 深入:調校工作流與記錄

  1. 校正順序:黑位 → LSC → AWB/CCM → 曝光基準。
  2. 動態:AE/AWB convergence、banding。
  3. 美化:NR ↔ Sharpen。
  4. 回歸:室內/日光/逆光。
tuning log 範本
日期/場景/改動/原因/結果(量化)/回歸 ✓✗/附圖
紀律:一次只改一個參數、統一場景比較、完整記錄。

14.7 練習

  1. 建立 tuning 版本管理資料夾。
  2. 完成一輪「校正→美化→回歸」並記錄。

14.8 深入原理:銳化的數學與 MTF

銳化通常是 unsharp mask:原圖 + k×(原圖 − 模糊圖)。過度銳化會在邊緣產生 overshoot/halo(白邊),並放大雜訊。衡量鏡頭+感測器解析能力的是 MTF(對比度 vs 空間頻率)。

原圖低通模糊(blur)差值 = 高頻細節原圖 + k×差值銳化圖
銳化強度與代價
k=0     → 無銳化(原始,可能偏軟)
k=0.5   → 輕銳化(細節改善,halo 小)
k=1.0   → 中銳化(明顯,halo 開始可見)
k=2.0   → 過銳化(halo 明顯 + 雜訊放大)

判別法:放大 100% 看字體/邊緣,有白邊 = halo
陷阱:銳化是「最後的美化」,不是「解決感測器模糊」的手段。若 RAW 就糊(MTF 低),銳化只會產生假邊緣。先確認對焦、再談銳化。

14.9 Worked Example:tone mapping 曲線設計

高動態場景的 tone mapping(示意)
輸入 RAW(0–1023)→ 輸出 8-bit(0–255)
線性 mapping:out = in/4 → 高光爆、暗部死黑
tone mapping:用 S 曲線(log 或自訂):
  in=0-100   → 壓暗部細節(提升可見性)
  in=100-800 → 接近線性(主體區)
  in=800-1023→ 壓高光(保留雲層層次)
# 檢查重點:暗部不死黑、高光不爆、中段對比自然
工程順序:先量測場景的動態範圍需求(unit-14.6),再決定單幀 tone mapping 或多幀 HDR。HDR 不該是預設——運動場景多幀會有殘影,改單幀+tone mapping。

14.10 疑難排解決策樹:影像「太硬/太糊/爆掉」

三種影像問題
1. 太糊(細節少)?
   ├─ 對焦 → 銳化調整(勿過度)
   ├─ RAW 就糊 → 換鏡頭/光圈(非調校可救)
   └─ NR 太強 → 降 NR(unit-13)
2. 太硬(halo/假邊)?
   └─ 降銳化 k 值
3. 高光爆/暗部死黑?
   ├─ 動態範圍需求 > 單幀 → tone mapping / HDR
   ├─ 曝光錯 → unit-10
   └─ gamma 沒套 → 回 unit-07

14.11 常見錯誤與陷阱

陷阱 1:過度銳化當「提升清晰度」——halo 會讓機器視覺誤判邊緣,物理 AI 場景尤其危險。
陷阱 2:HDR 用在運動場景——多幀 HDR 需要對齊;快速移動會產生殘影。動態場景優先單幀+tone mapping。
陷阱 3:沒有回歸就把調校上線——每次改動要「一次只改一個參數 + 統一場景 + 完整 log」(unit-14.7 範本)。

14.12 練習

  1. 用一組圖比較 k=0/0.5/1/2 的銳化效果,找出你家場景的甜蜜點。
  2. 設計 tone mapping 曲線並用灰階漸層驗證「暗部不死黑、高光不爆」。
  3. 完成一輪「校正→美化→回歸」並填 tuning log。
看完這單元你應該能說出:
  • NVIDIA 銳化/對比。
  • Thor 多幀 HDR。
  • NVIDIA 調校工作流五步。
  • 「讓自動化做事」哲學。

延伸閱讀

14.13 進階真實情境 Worked Example:從 RAW 到部署的完整調校工作流

場景:Thor T5000 用於食品瑕疵偵測。OV9281 拍攝流水線上的食品,目標:偵測 0.5mm 以下的裂痕。需要清晰度高、色彩精準、無雜訊假影。

食品瑕疵偵測調校 SOP
# Step 1:感測器 init(unit-06)
# OV9281 @ 1280×800 RAW10, 60 fps

# Step 2:黑位校正
# 拍黑框(鏡頭蓋),量測 black level = 64
# 設定 OB offset = 64

# Step 3:LSC 校正
# 拍灰卡,產生 LSC 網格
# 驗證:四角亮度差 < 3%

# Step 4:AWB + CCM
# 灰卡校正 AWB gains → R=G=B
# 色卡校正 CCM → ΔE < 3

# Step 5:AE 基準
# 設定 AE target = 50%(中間亮度)
# 驗證:灰卡 histogram 峰值在 45-55%

# Step 6:NR ↔ Sharpen 取捨
# 食品裂痕是「高頻細節」→ NR 不能太強
# spatial NR = low, temporal NR = medium
# sharpen k = 0.5(輕銳化,避免 halo)

# Step 7:回歸測試
# 室內日光、日光燈、混合光源各測 100 張
# 瑕疵偵測率 > 99% → 通過

# 設計決策:
# 1. 瑕疵偵測需要「清晰度」而非「美感」→ NR 偏保守、sharpen 偏激進
# 2. 食品色差是判斷依據 → AWB/CCM 必須精準(ΔE < 3)
# 3. 流水線光源固定 → AE 目標固定、AWB 收斂快
設計決策:工業視覺的調校目標是「量化指標」而非「好看」。每個步驟都有明確的通過門檻(black level 值、亮度差 %、ΔE、偵測率),不是主觀判斷。

14.14 深入原理擴充:MTF 與空間頻率響應

清晰度不只是「看起來銳利」。衡量鏡頭+感測器解析能力的客觀指標是 MTF(Modulation Transfer Function):在不同空間頻率(lp/mm)下的對比度保留率。MTF50(對比度降到 50% 的頻率)是常用的清晰度指標。

鏡頭 MTF×感測器 MTF(pixel pitch 決定 Nyquist)×ISP sharpen=系統 MTF
容易忽略的邊界案例:Sharpen 只能在鏡頭+感測器的 MTF 範圍內「增強」,無法「創造」不存在的細節。若鏡頭 MTF50 = 80 lp/mm 但感測器 Nyquist = 60 lp/mm,sharpen 無法恢復 60 lp/mm 以上的資訊——因為感測器已經 aliasing 了。正確做法是先確認硬體 MTF 足夠,再用 sharpen 微調。

14.15 診斷式疑難排解表

症狀可能原因解決方案
過度銳化產生邊緣白邊(halo)sharpen k 值過高降低 k 值至 0.3–0.5;用 100% 放大檢視邊緣
食物色差判斷不準CCM 未校正 / AWB 收斂不完全用色卡重新校正 CCM;固定光源下驗證 ΔE
流水線高速移動時影像模糊曝光時間過長導致 motion blur縮短曝光、提高補光、提高 analog gain
tuning log 不完整導致無法重現未記錄每次改動的參數與場景使用 unit-14.7 的 tuning log 範本,每次改動都記錄
多場景回歸失敗調校只在單一場景最佳化擴大回歸測試集:室內、日光、混合、低光各測 100 張

14.16 進階挑戰題

  1. 設計一個 MTF 量測實驗:用 ISO 12233 解析度測試圖,量測你的鏡頭+感測器+ISP 系統的 MTF50。比較銳化前後的 MTF 曲線,找出最佳 sharpen k 值。
  2. 為食品瑕疵偵測場景設計一個 tone mapping 曲線:確保 0.5mm 裂痕在 8-bit 輸出中至少有 10 code 的對比度。畫出輸入-輸出映射曲線。
  3. 建立一個自動化調校回歸系統:輸入 raw tuning 參數,自動跑完「灰卡 → 色卡 → 多場景」測試,輸出 HTML 報告含 histogram、ΔE、SNR 與 latency。比較兩組 tuning 參數的優劣。

14.17 專案級端到端 Worked Example:完整調校工作流專案 — 從 RAW 到量產回歸

場景:工業檢測專案(食品瑕疵偵測)要從零完成整套調校並交付量產。整合 unit-01~16 的所有技能。

里程碑規劃
M1 感測器 init + bring-up(unit-06)
   ├─ OV9281 1280×800 RAW10 @ 60 fps
   └─ 通過:dmesg probe + 取流

M2 資料基礎(unit-08)
   ├─ RAW 解包工具鏈
   └─ 通過:黑位/Bayer 驗證

M3 校正順序(unit-07/11/12)
   ├─ 黑位 → LSC → AWB/CCM → 曝光基準
   └─ 通過:ΔE<3、四角亮度差<5%

M4 動態(unit-10)
   ├─ AE 收斂 + anti-flicker
   └─ 通過:無 banding、收斂 < 15 幀

M5 美化(unit-13/14)
   ├─ DPC → NR → Sharpen 取捨
   └─ 通過:SNR≥30dB、無 halo、裂痕可辨

M6 回歸(unit-14/15/16)
   ├─ 室內/日光/混合光源各 100 張
   ├─ 瑕疵偵測率 > 99%
   └─ 通過:回歸全過

M7 交付
   └─ 通過:tuning log + 參數 + SOP 進 repo

每階段門檻都要量化(SNR、ΔE、偵測率、亮度差 %)。
專案要點:這是全站課程的「總整專案」。它證明一件事:調校的成功來自「順序 + 紀律 + 量化門檻」,而不是某一招。每階段有明確門檻,才能重現與追蹤。

14.18 量測 / 驗證 SOP:完整調校工作流

工作流 SOP(Step 1–8)
Step 1 感測器 init(unit-06 SOP)
Step 2 黑位(unit-08 SOP)
Step 3 LSC(unit-12 SOP)
Step 4 AWB/CCM(unit-11 SOP)
Step 5 曝光基準(unit-10 SOP)
Step 6 AE 動態 + anti-flicker
Step 7 DPC/NR/Sharpen
Step 8 回歸 + tuning log

每步記錄(unit-14.7 範本):
  日期/場景/改動/原因/結果(量化)/回歸 ✓✗/附圖

原則:
  一次只改一個參數
  統一場景比較
  用 RAW 或關 NR 路徑量測

14.19 平台間對照:調校工作流與清晰度

面向Thor T5000RPi5Orange PiOrin Nano
調校工作流NVIDIA 自動化為主 + 微調libcamera tuning 檔register 直改NVIDIA 自動化為主
Sharpen✅ 內部✅ 可調⚠️ 感測器內建✅ 內部
HDR✅✅ 多幀 + tone mapping✅ 基礎⚠️✅ 多幀
MTF/清晰度工具第三方(ISO12233)第三方第三方第三方
回歸測試支援✅ Holoscan 管線化⚠️ 腳本⚠️ 腳本✅ 腳本
選擇思考:調校「工作流的順序與紀律」四平台完全一樣——這正是本課程能跨平台的原因。Thor 的優勢在多幀 HDR 與 Holoscan 管線化回歸,讓「調校」能自動化、可重現。

14.20 互動式檢核清單

14.18 Register 位元級完整工作流

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

Register位址功能Bit Field 說明
SHARPEN_CTRL0x00140500銳化控制bit[0]=enable, bit[5:3]=amount, bit[7:6]=kernel size
DR_COMP_CTRL0x00140504動態範圍壓縮控制bit[0]=enable, bit[3:1]=DR strength, bit[4]=tone mapping
讀→改→寫→驗證 完整序列(以 SHARPEN_CTRL 為例)
# Step 1: 讀取目前值
$ devmem2 0x00140500 w
# 記錄 current_value

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

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

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

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

14.19 多層疑難排解決策樹

決策樹 1:清晰度不佳
1. 畫面偏軟(soft)?
   ├─ 銳化未啟用 → SHARPEN_CTRL bit[0] = 1
   └─ 銳化太弱 → 逐步增加 amount,觀察 halo
2. 銳化過度(halo/ ringing)?
   └─ amount 太高或 kernel 太大 → 降低 amount、用小 kernel
決策樹 2:動態範圍不足
1. 高光 blown out?
   ├─ 曝光太長 → 減少 exposure
   └─ DR range 不足 → 啟用 DR_COMP_CTRL + tone mapping
2. 暗部 detail 丢失?
   └─ ISP gamma/LUT 設定不對 → 調 gamma 曲線暗部斜率

14.20 量測驗證完整 SOP

調校工作完整流程 SOP:

步驟動作指令/方法預期輸出
Step 1先做好基礎BLC→BPC→LSC→CCM→AWB 全部校正完基礎準確才能調
Step 2設定曝光基準手動 AE,讓 histogram 峰值在 60–70%動態範圍最大化
Step 3調清晰度拍 resolution chart,調 sharpen amountMTF50 達到 lens 極限
Step 4調 NR暗場測 SNR,平衡 NR 強度SNR > 36 dB, MTF 下降 < 10%
Step 5調動態範圍高對比場景,調 DR compression高光不爆、暗部有 detail
Step 6綜合驗證多場景拍攝(室內/室外/暗場)全面一致
Step 7效能驗證確認 ISP 處理不超過 frame interval< 33ms @30fps

14.21 四平台終極對照

面向Thor T5000RPi5Orange PiOrin Nano
調校工具ISP Visualizer + 圖表分析`raspistill` + 手動調OpenCV 軟體調整ISP Visualizer
清晰度控制Sharpen + Edge enhance軟體 sharpenN/ASharpen + Edge enhance
動態範圍技術HDR Stagger + Tone mappingSingle exposureN/AHDR + Tone mapping
自動調校能力
調校參數數量100+ tuning parameters~20 parameters060+ parameters
從 uncalibrated 到 acceptable2–4 hr30 minN/A2–3 hr

14.22 完整 Bring-up 小 Checklist

針對「清晰度、動態範圍與調校工作流」主題的完整 bring-up 步驟清單: