單元 13 · 雜訊與降噪

NVIDIA NR

雜訊來源

雜訊來源
shot noise光子隨機性
read noise讀出電路
dark current高溫/長曝光
hot pixel缺陷像素

NVIDIA 的降噪

取捨紀律:先確認感測器增益沒拉太高(源頭),再讓 ISP 降噪收尾。

13.6 雜訊預算(Worked Example)

判斷「補光還是接受雜訊」
# 目標 SNR >= 30dB(σ/S < 3.2%)
# gain 高時量測:σ=20, 訊號=400
SNR = 20*log10(400/20) = 26 dB   # 不達標
# 補光 + 降增益:訊號 800, σ≈18 → SNR 33 dB ✓
# 結論:補光 + 降增益 優於 硬拉增益
工程判斷:用 SNR 預算量化,先定可接受的 SNR,再決定曝光/增益/補光組合。

13.7 DPC 與 NR 順序

13.6 深入:雜訊量測與增益上限

量 σ vs gain
python3 - <<'EOF'
import rawpy, numpy as np, subprocess
for g in [1, 2, 4, 8]:
    # 用平台指令取 RAW(OV9281)
    raw = rawpy.imread(f'g{g}.dng').raw_image
    roi = raw[500:1500,500:1500].astype(float)
    print(f'gain={g}  σ={roi.std():.1f}')
EOF
判讀:σ 暴增的增益區間 = 不可接受 → 設定增益上限,改用曝光補。

13.7 練習

  1. 量測各增益 σ。
  2. 決定增益上限並記錄。

13.8 深入原理:雜訊模型與 SNR 的數學

感測器雜訊可模型化成兩大類,理解它們才能預測「哪個參數會讓雜訊爆炸」。

雜訊模型特性
Shot noise(光子雜訊)σ = √N(N=電子數)與訊號正相關,無法消除
Read noise(讀出雜訊)固定 σ_r低光時主導
Dark current隨溫度/曝光時間長曝光 + 高溫明顯
FPN固定 pattern與場景無關的固定圖樣
SNR 計算(shot + read)
電子數 N,read noise σ_r:
總雜訊 σ = √(N + σ_r²)
SNR = 20·log10(N / σ) dB

例:N=1000, σ_r=30
σ = √(1000 + 900) ≈ 43.6
SNR = 20·log10(1000/43.6) ≈ 27 dB

若增益 ×2(等效 N 變小但 read noise 放大):
雜訊會比「同曝光直接 +50% 光」更糟
關鍵領悟:增益會放大「訊號 + read noise」;而加曝光(光子)只加訊號、shot noise 以 √N 成長。所以「加曝光」永遠優於「拉增益」——這正是 unit-10 順序鐵則的數學根源。

13.9 Worked Example:決定補光 or 接受雜訊

完整 SNR 預算
場景:低光,目標 SNR ≥ 30 dB
選項 A:gain ×4(不補光)
  量測 RAW 雜訊 σ=25,訊號=200
  SNR = 20·log10(200/25) = 18 dB ✗
選項 B:補光讓訊號 ×2(gain ×1)
  訊號=800(感測器飽和前),σ≈18
  SNR = 20·log10(800/18) ≈ 33 dB ✓
結論:補光 + 低增益 遠優於 硬拉增益
工程判讀:先用 SNR 預算量化,再決定資源投入(補光/換鏡頭/換感測器),而不是盲目拉高增益後才發現雜訊不可接受。

13.10 疑難排解決策樹:低光雜訊

「低光畫面髒」
1. 增益拉太高?
   ├─ 是 → 補光 / 縮短快門 / 加曝光(unit-10)
   └─ 否 ─┐
2. 長曝光造成 dark current?
   ├─ 是 → 降溫 / 縮短曝光
   └─ 否 ─┐
3. 固定圖樣雜訊(FPN)?
   ├─ 是 → 校正 / DPC
   └─ 否 ─┐
4. ISP NR 沒開或太弱?
   └─ 是 → 調 NR(空間+時間)

13.11 常見錯誤與陷阱

陷阱 1:用數位增益「救」低光——數學上已證明劣於補光/加曝光。先把類比增益與曝光用滿,再談數位。
陷阱 2:NR 開太強——空間降噪會抹細節,時間降噪在動態場景會留殘影。NR 是「取捨」,不是「開越大越好」。
陷阱 3:DPC 沒先做就 NR——熱點會先被 NR 擴散成亮斑,而非修掉。順序是 DPC 先、NR 後(unit-13.7)。

13.12 練習

  1. 量 σ vs gain 曲線,找出增益上限。
  2. 用 SNR 預算比較「gain×4」與「補光×2」。
  3. 黑框 RAW 驗證 DPC 效果(max 被壓制)。

13.13 深入原理:從 noise source 到 ISP NR

降噪的輸入不是單一的「髒」數字。shot noise 隨訊號以平方根成長,read noise 在低光占比高,FPN/DPC 則具有空間固定性。空間 NR 依鄰域相似性抑制,時間 NR 依前後幀相似性抑制;兩者都可能把真實細節或快速運動當成雜訊。

sensor RAWblack/LSCDPCspatial NRtemporal NRsharpen
類型辨識特徵優先處理
shot/read noise隨曝光或 gain 改變光量、類比 gain、NR
FPN固定條紋/固定亮暗點黑位校正、校正表
hot/dead pixel固定位置極端值DPC,不能靠強 NR

13.14 Worked Example:用兩張黑框估計 read noise

固定條件下分離平均與變動
同一曝光、溫度、gain 取 20 張暗場 RAW
對每個像素計算:
  mean = 20 張平均       # black level / FPN
  std  = 20 張標準差      # temporal read noise

全域:mean=64.8, std=3.1 code
若某些位置 mean=140 且每張都固定 → hot pixel / FPN
若整區 std 隨 gain 從 3.1 升到 12.4 → gain 放大 read noise

決策:先修固定偏差,再用 NR 處理隨機變動。
量測注意:比較 gain 或溫度時,不能把不同曝光、不同 black level 的平均差當成 noise。測試表要記錄 mode、曝光、gain、溫度、幀數與 ROI。

13.15 疑難排解決策樹:畫面髒、糊或有殘影

辨識是源頭、NR 還是 sharpen
1. 關閉/降低 NR 後雜訊是否仍在 RAW?
   ├─ 是 → 先查曝光、gain、溫度、黑位
   └─ 否 ─┐
2. 雜訊固定在同一像素?
   ├─ 是 → DPC/FPN 校正
   └─ 否 ─┐
3. 動態物體後方有拖影?
   ├─ 是 → 降低 temporal NR,查 motion threshold
   └─ 否 ─┐
4. 邊緣有白邊/假紋理?→ 降 sharpen 或 spatial NR strength

13.16 常見錯誤與陷阱

陷阱 1:用均勻灰圖量所有雜訊。灰圖同時包含光子雜訊與照明不均;暗場、平場、細節場景要分開。
陷阱 2:先開強 NR 再量測感測器。NR 會改寫原始統計,所有 sensor quality 結論都應以 RAW 或關閉 NR 的路徑為準。
陷阱 3:把 DPC 當成 NR。DPC 修的是可定位的缺陷像素;NR 修的是統計性變動,兩者順序與驗證指標不同。

13.17 練習

  1. 在兩個 gain、兩個溫度各取 20 張暗場,畫出 mean/std 對照表。
  2. 用固定圖樣與移動場景分別調 spatial/temporal NR,記錄 SNR 與細節保留。
  3. 為產品定義三個門檻:可接受 SNR、最大 hot pixel 數、不可接受殘影程度。
看完這單元你應該能說出:
  • 四種雜訊來源。
  • NVIDIA 空間+時間降噪。
  • 「先源頭後收尾」策略。
  • 降噪與細節取捨。

延伸閱讀

13.18 進階真實情境 Worked Example:長時間運作的 dark current 漂移

場景:Thor T5000 搭載在戶外監控站,OV9281 24 小時不間斷運作。白天溫度 25°C、夜晚降至 5°C。目標:全天候穩定 SNR ≥ 28 dB。

dark current 溫度補償
# dark current 模型:
# DC(T) = DC_25 × 2^((T-25)/10)
# DC_25 = 10 e⁻/s(25°C 基準)

# 白天 25°C:
DC = 10 e⁻/s × 曝光 8.3 ms = 0.083 e⁻(可忽略)

# 正午 45°C(陽光直射機殼):
DC = 10 × 2^((45-25)/10) = 10 × 4 = 40 e⁻/s
DC_8.3ms = 0.33 e⁻(仍可忽略)

# 但若長曝光(如夜間 100 ms):
DC = 40 × 0.1 = 4 e⁻(開始有影響)
SNR 影響:4 e⁻ 佔 full well 10000 的 0.04%(微小但累積)

# 真正問題:溫度漂移造成的 black level 變化
# 25°C → 45°C:black level 從 64 漂移到 68(+4 code)
# → OB 校正若不跟隨溫度 → 後續 AWB/LSC 偏移

# 解決方案:
# 1. 加入溫度感測器(感測器內建或外掛)
# 2. 每 10 分鐘重新量測 black level
# 3. 動態更新 OB 校正值
設計決策:戶外 24h 運作的首要敵人不是雜訊本身而是「雜訊的不穩定」。black level 隨溫度漂移是隱藏殺手——必須用溫度回饋做動態 OB 校正。

13.19 深入原理擴充:temporal NR 的運動偵測閾值

temporal NR 依前後幀的差異判斷「哪些是雜訊、哪些是運動」。差異小於閾值 → 認為雜訊並平均壓制;差異大於閾值 → 認為運動並保留。閾值設定太高會讓雜訊通過;太低會讓運動物體留下殘影。

容易忽略的邊界案例:在 slow-moving 場景中(例如旋轉的風扇叶片),temporal NR 可能把慢速移動的物體當成雜訊壓制,造成「靜止區域正常、慢動區域模糊」。這在機器人視覺中特別危險——SLAM 特徵點可能被 NR 抹除。解決方案是根據場景運動速度動態調整 temporal NR 閾值。

13.20 診斷式疑難排解表

症狀可能原因解決方案
夜間畫面雜訊明顯增加但白天正常低光下 gain 提高,read noise 被放大用 SNR 預算量化:計算夜間的 gain 上限,超過則補光
DPC 開啟後仍有固定亮點DPC threshold 設定過低,未偵測到該缺陷提高 DPC threshold;或用手動缺陷像素表補充
temporal NR 在動態場景產生殘影NR temporal 閾值過低,慢速運動被壓制提高 temporal NR threshold;或根據場景運動速度動態調整
空間 NR 開太強導致邊緣模糊spatial NR 強度過高,把邊緣當雜訊降低 spatial NR strength;確保 sharpen 在 NR 之後
長時間運作後 black level 漂移導致色彩偏移溫度變化造成 dark current 變化加入溫度感測器,動態更新 OB 校正值

13.21 進階挑戰題

  1. 設計一個 24 小時 dark current 監控系統:每 10 分鐘記錄溫度、black level 與 hot pixel 數。畫出三者的時序圖,找出「black level 漂移 > 2 code」的溫度門檻。
  2. 分析 temporal NR 在三種場景下的表現:靜止、慢速移動(0.5 pixel/frame)、快速移動(10 pixel/frame)。設計一個自動化測試:用旋轉平台模擬不同速度,量測 NR 的殘影程度與 SNR 改善。
  3. 設計一個 DPC + NR 的聯合校正策略:先用 20 張暗場建立缺陷像素表(DPC),再用 SNR 量測驗證 DPC 先做 vs NR 先做的差異。畫出兩種順序的 SNR 對照表。

13.22 專案級端到端 Worked Example:雜訊預算專案 — 從量測到降噪策略

場景:低光倉庫機器人,目標全天候 SNR ≥ 28 dB。專案目標:量化各 gain 下雜訊,找出增益上限,決定補光與降噪策略。

里程碑規劃
M1 暗場量測
   ├─ 固定條件取 20 張暗場
   ├─ 算 mean(black level)與 std(read noise)
   └─ 通過:black level 固定、std 合理

M2 σ vs gain
   ├─ gain 1/2/4/8 各量 σ
   └─ 通過:畫出 σ-gain 曲線,找出暴增區間

M3 SNR 預算
   ├─ 各場景算 SNR(unit-13.9)
   └─ 通過:知道哪些場景不達標

M4 增益上限
   ├─ 設 max gain(σ 暴增前)
   └─ 通過:AE 不超過上限

M5 降噪策略
   ├─ DPC(缺陷表)→ 空間 NR → 時間 NR
   ├─ 黑框 RAW 驗證 DPC 壓制 max
   └─ 通過:NR 後 SNR 達標且細節保留

M6 回歸 + 交付
   └─ 通過:SNR 預算表 + 增益上限 + NR 參數進 repo

驗證:
  SNR = 20·log10(signal / σ)
  黑框 max 值 = DPC 效能指標
專案要點:降噪的順序是「先源頭(增益/曝光/補光)→ 再收尾(DPC/NR)」。SNR 預算是量化語言——「補光還是接受雜訊」用數字決定,不靠感覺。

13.23 量測 / 驗證 SOP:雜訊與降噪驗證

雜訊 SOP(Step 1–6)
Step 1 暗場收集
   固定曝光/gain/溫度,取 20 張暗場 RAW
Step 2 統計
   mean=black level、std=read noise
Step 3 增益掃描
   gain 1/2/4/8 各量 σ,畫曲線
Step 4 SNR 預算
   各場景算 SNR,比對目標
Step 5 DPC 驗證
   黑框 RAW 的 max 值應被壓制
Step 6 NR 調整
   空間 NR(細節)vs 時間 NR(殘影)取捨

判讀指標:
  σ 隨 gain 暴增 → 找出上限
  固定亮點 → hot pixel / FPN(DPC 處理)
  殘影 → temporal NR 閾值太低
  邊緣模糊 → spatial NR 太強

13.24 平台間對照:雜訊與降噪

面向Thor T5000RPi5Orange PiOrin Nano
NR 引擎NVIDIA 空間+時間libcamera(可調)感測器內建(有限)NVIDIA 空間+時間
DPC⚠️
NR 強度控制受限(自動化)✅ 全可調受限
時間 NR 殘影控制✅ 內部✅ 可調 threshold⚠️✅ 內部
高增益行為自動調適需手動調固定自動調適
選擇思考:「雜訊量測」必須在 RAW 或關 NR 路徑做——NR 會改寫統計。Thor/Orin 的 NR 自動化強;RPi5 能深入調 threshold,但那是「最後 5%」的差異。

13.25 互動式檢核清單

13.18 Register 位元級完整工作流

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

Register位址功能Bit Field 說明
NR_SPATIAL_CTRL0x00140400Spatial noise reduction 控制bit[0]=enable, bit[5:3]=strength, bit[7:6]=mode
NR_TEMPORAL_CTRL0x00140404Temporal noise reduction 控制bit[0]=enable, bit[4:1]=temporal strength, bit[5]=motion adaptive
讀→改→寫→驗證 完整序列(以 NR_SPATIAL_CTRL 為例)
# Step 1: 讀取目前值
$ devmem2 0x00140400 w
# 記錄 current_value

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

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

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

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

13.19 多層疑難排解決策樹

決策樹 1:降噪過度(畫面糊)
1. 細節消失、油畫感?
   ├─ Spatial NR strength 太高 → 降低 bit[5:3] 值
   └─ Temporal NR + 快速移動 → 開啟 motion adaptive (bit[5])
2. 紋理被抹除?
   └─ NR threshold 太低 → 提高 threshold 保留紋理
決策樹 2:降噪不足(雜訊多)
1. 暗場雜訊明顯?
   ├─ NR 未啟用 → 確認 NR_SPATIAL_CTRL bit[0] = 1
   └─ 強度不夠 → 逐步提高 strength(注意 trade-off)
2. 雖有 NR 但色噪(chroma noise)仍在?
   └─ Chroma NR 獨立控制 → 確認 chroma denoise 開啟

13.20 量測驗證完整 SOP

降噪效果完整量測 SOP:

步驟動作指令/方法預期輸出
Step 1拍攝暗場蓋鏡頭 + 感測器,ISO=gain_max無光環境
Step 2NR OFF 基準關閉所有 NR,取 10 幀平均得到 pure noise pattern
Step 3量測 noise levelROI 標準差(Spatial domain)記錄 DN RMS
Step 4啟用 Spatial NRNR_SPATIAL_CTRL bit[0]=1noise 減少 30–50%
Step 5啟用 Temporal NRNR_TEMPORAL_CTRL bit[0]=1noise 再減 50%
Step 6量測 SNRSNR = 20×log10(signal/noise)期望 > 36 dB
Step 7細節保留拍攝 resolution chart,NR ON/OFF 比較MTF 下降 < 10%

13.21 四平台終極對照

面向Thor T5000RPi5Orange PiOrin Nano
NR 類型Spatial + Temporal + MLSpatial only(硬體)軟體 NR(無硬體)Spatial + Temporal
NR 強度等級0–255(可調)Limited (low/med/high)N/A0–15(4-bit)
Temporal NR
ML 降噪
NR 效能影響~5% ISP overhead~10% GPU if softwareCPU only~5% ISP
NR 校準工具NR Visualizer(強度 preview)`raspistill --denoise`OpenCV bilateralISP tuning tool

13.22 完整 Bring-up 小 Checklist

針對「雜訊與降噪」主題的完整 bring-up 步驟清單: