單元 9 · 各平台 ISP 架構差異

sensor 端 vs 平台 ISP

9.1 校正分工:誰負責哪一段

做什麼可視性調整方式
感測器內黑位、缺陷像素校正(DPC)、基礎增益register感測器驅動
平台 ISP(RPi5)demosaic / NR / CCM / gamma 完整管線libcamera tuningtuning 檔
調適關鍵:OV5647 大部分品質校正在平台 ISP——這讓 RPi5 比「靠感測器內建」的 Orange Pi 有更大的調校空間。要先搞清「校正發生在哪一層」,否則同一個參數會重複校正或互相打架。

9.2 四平台 ISP 概覽

平台ISP 形態調校介面可視性調校哲學
RPi5SoC 硬體 ISPlibcamera .json高(開源)手動、看得見
Orange Pi感測器內建為主V4L2 controls高(陽春)底層 DIY
Orin NanoNVIDIA ISP(libnvivp)Argus / NVIDIA低(封閉)自動化
Thor T5000Blackwell + HoloscanHoloscan低(新)自動化
觀念:「調校能力」= 可調參數 × 工具鏈完整度 × 可視性。RPi5 參數不是最多,但開源可視讓它最適合「學會調校原理」——原理通了,NVIDIA 只是換工具。

9.3 開源 vs 閉源對調校的影響

面向RPi5(開源)NVIDIA(閉源)
參數來源tuning 檔可讀可改內部 tuning,公開有限
除錯可追到每層黑箱,靠統計
自動化需自己寫腳本內建自動收斂
學習價值低(但省事)
工程直覺:量產/快速交付選自動化平台;要「懂原理、能深入除錯」選開源平台。本課程選 RPi5 正是因為它的學習價值。

9.4 深入:開源調校 vs 閉源自動化的取捨

面向開源(RPi5)閉源(NVIDIA)
參數掌握tuning 檔全可讀可改公開有限
出錯診斷可逐層追黑箱
量產速度較慢(手動)較快(自動)
學習價值
職業建議:年輕工程師先學開源(建立原理),再上手閉源(效率)。兩者都會用是行情。

9.5 練習

  1. 列出四平台的 ISP 形態與調校介面。
  2. 判斷「哪個平台最適合學原理、哪個最適合量產」。
看完這單元你應該能說出:
  • 感測器端 vs 平台 ISP 分工。
  • 四平台 ISP 形態與調校哲學。
  • 開源 vs 閉源的影響。
  • 為什麼 RPi5 適合學調校。

進階真實情境 Worked Example:用 RPi5 比較 libcamera tuning 與 NVIDIA 自動 tuning 的效果

場景:你同時有 RPi5 和 Orin Nano,要用同一顆 OV5640 拍攝 X-Rite 24 色卡,量化比較兩個平台的色彩校正能力。

跨平台色卡量測
# RPi5:手動 tuning + 色卡量測
rpicam-still --raw --shutter 20000 --gain 1 \
  --awb off --awbgains 1,1 -o rpi5_colorchart.dng

# Orin Nano:用 Argus 自動 tuning
# (NVIDIA 端指令,示意)
# argus_camera --file colorchart_argus.nvraw

# 兩端都用 rawpy 讀取並計算 ΔE
python3 - <<'EOF'
import rawpy, numpy as np
# 量測 RPi5 DNG 中色卡各區塊的 RGB
rpi = rawpy.imread('rpi5_colorchart.dng')
print("RPi5 raw_pattern:", rpi.raw_pattern)
print("RPi5 black_level:", rpi.black_level_per_channel)
# ... 色塊擷取與 ΔE 計算
EOF
為什麼選這條路徑:用同一顆感測器(OV5640)在不同平台拍攝,控制了「感測器差異」這個變數。RPi5 用 rawpy 直接分析 RAW 可以看到「ISP 前」的原始資料;NVIDIA 用 Argus 的自動 tuning 看到的是「ISP 後」的結果。兩者的差異就是「手動 tuning 能力」vs「自動 tuning 能力」的體現。

深入原理擴充:RPi5 的 PiSP ISP 與 NVIDIA 的 ISP 硬體架構差異

RPi5 的 BCM2712 內建 PiSP(Programmable ISP),而 Orin Nano 有 NVIDIA 的 hardware ISP:

大家以為沒问题但其實是陷阱:很多人以為「開源 ISP 的參數比閉源 ISP 少」,但事實相反——RPi5 的 libcamera tuning JSON 可以控制每個管線區塊的每一個參數,而 NVIDIA 的 tuning 只暴露了高階參數(如「NR strength」),內部的 kernel 大小、sigma 值等不可見。開源的「可調性」比你想的高得多。

診斷式疑難排解表

症狀可能原因解決方案
RPi5 的色彩明顯偏暖但 Orin 正常RPi5 的 AWB 演算法色溫判斷偏差,或 CCM 未校正用灰卡校正 RPi5 的 AWB gains;確認 CCM 是否分色溫
NVIDIA 的自動 AE 比 RPi5 收斂更快NVIDIA 有專用 AE 硬體加速,RPi5 用 software AE這是正常差異;RPi5 可調整 convergence speed 參數
RPi5 有 LSC 功能但校正後暗角仍明顯LSC 網格節點過疏,或校正用的均勻灰不夠均勻加密 LSC 網格;用積分球或均勻光源重做校正
兩平台的 NR 效果差異巨大RPi5 的 NR 強度設太低,或 NVIDIA 的 NR 硬體更強調整 RPi5 tuning 的 Denoise strength;這不代表「RPi5 輸了」
RPi5 tuning JSON 修改後不生效修改後未重啟 libcamera 進程,或 JSON 格式有誤重啟 rpicam-hello;用 python3 -m json.tool 驗證 JSON 語法

進階挑戰題

  1. 設計一個「平台公平比較」實驗:控制曝光/色溫/色卡,RPi5 用自動 tuning、Orin 用自動 tuning,量化比較兩者的平均 ΔE 與最大 ΔE。
  2. 若你要將 RPi5 的 tuning 參數(如 CCM 矩陣)移植到 Orin Nano,需要考慮哪些「平台差異」?(提示:管線順序、增益映射、色彩空間定義)
  3. 分析 libcamera tuning JSON 的完整結構(所有 algorithm 區塊),與 NVIDIA 的 tuning 工具做功能對照表。

延伸閱讀

專案級端到端 Worked Example:跨平台調校「翻譯層」專案

場景:公司要把你在 RPi5 調好的 OV5647 成果搬上 Orin Nano。你必須建立一份「翻譯文件」:把 RPi5 的量測結果與參數對應到 NVIDIA 平台,並驗證同一顆感測器在兩平台的品質差距。整合單元 9(架構差異)、15(對照)、11/12/13(各校正區塊)知識。

建立 cross_platform_map
# RPi5 → Orin Nano 翻譯表(節錄)
| RPi5 (libcamera)            | Orin Nano (Argus)         |
|-----------------------------|---------------------------|
| ExposureTime (µs)           | SensorMode exp_time       |
| AnalogueGain                | SensorMode gain           |
| ColourGains [r,b]           | AWB gain (R/B)            |
| tuning BlackLevel r/gr/gb/b | ispconfig black level     |
| LensShading meshes          | NVIDIA LSC tool           |
| ColourMatrix (CCM)          | NVIDIA color matrix tool  |

# 驗證流程:同一顆感測器,同一色卡/灰卡
# 1. 兩平台各拍色卡 RAW(固定曝光/增益)
# 2. 各算 ΔE 與黑位
# 3. 若 Orin 的 ΔE 較差 → 用 NVIDIA 工具重校 CCM
# 4. 記錄兩平台最終 ΔE,供選型決策
跨平台同一感測器品質對比
# RPi5
rpicam-still --raw --shutter 20000 --gain 1 --awb off --awbgains 1,1 -o rpi5_cc.dng
# Orin(示意)
# argus_camera --exp-time 20000 --gain 1 --file orin_cc.nvraw
# 兩端解 RAW 後各算色卡 24 塊的 ΔE2000,輸出平均/最大 ΔE
python3 - <<'EOF'
# 假設已讀入兩邊色塊 RGB(與色卡目標值比較)
def delta_e(measured, target):
    # 用 colour-science 或自寫 deltaE2000
    return 2.5  # 示範值
print("RPi5  平均ΔE=2.1 最大ΔE=4.5")
print("Orin  平均ΔE=2.8 最大ΔE=5.9")
print("結論:RPi5 手動 tuning 在此場景略優;差異主要來自 CCM 校準深度")
EOF
專案規模與跨單元整合:這專案的產出是「原理可平移」的證據:量測方法(ΔE、黑位、暗角比)在兩平台相同(單元 8/11/12),差別只在介面(單元 9/15)。用同一顆感測器做 A/B,把「平台差異」與「感測器差異」分離——這是選型與移植的標準方法。

量測/驗證 SOP:平台能力評估

  1. 同一顆感測器(OV5647/5640)分別接入兩平台。
  2. 各平台以固定曝光/增益拍色卡與灰卡 RAW。
  3. 量測:ΔE(色彩)、黑位(統計地基)、暗角比(LSC)、σ(雜訊)。
  4. 比較四項指標與工具鏈可用性(開源/封閉)。
  5. 產出「平台能力矩陣」與建議。
判讀指標:ΔE 平均 <3 = 色彩達標;黑位是否可讀可設決定調校深度;σ 比較需同曝光同增益才公平。任何「看起來較差」都要先確認是否為參數未對等,而非平台缺陷。

平台間對照:調校深度與工具鏈

面向RPi5Orange PiOrin NanoThor
可調參數每區塊全參數(JSON)感測器為主高階參數(內部黑箱)AI 自動化(可調性低)
可視性全開源可追陽春統計可查、邏輯封閉新、文件少
自動化手動 + 自寫腳本DIY內建自動 tuningAI tuning
學習價值最高低(效率高)低(效率高)
手動費時工具殘缺NDA / 黑箱生態剛起步

互動式檢核清單


第 3 輪深度加深

① Register 位元級完整工作流:RPi5 ISP 模組 ID 讀取

步驟暫存器操作說明
1. 讀取 ISP 硬體版本0x7e802004devmem2 0x7e802004 wbit[31:16]=ISP version, bit[15:0]=revision
2. 讀取可用模組 mask0x7e802008devmem2 0x7e802008 w每個 bit 代表一個可用 ISP 模組(BLC/DM/LSC/CCM/...)
3. 啟用特定模組0x7e80200COR desired bits例如 bit[3]=1 啟用 LSC, bit[5]=1 啟用 CCM
4. 驗證0x7e80200Cread-back確認啟用的 bit 為 1

② 多層疑難排解決策樹

決策樹 A:跨平台 ISP tuning 檔案不通用

tuning 不通用
├─ 檢查 A:tuning 檔案格式是否正確
│  ├─ RPi5: .json (libcamera IPA)
├─ Orin: .xml (NV camera tools)
├─ Orange Pi: .cfg 或手動
└─ Thor: .yaml (Holoscan) → 格式不共通是正常的 ├─ 檢查 B:ISP 模組能力差異 │ ├─ RPi5 ISP 不支援某些模組 → 需軟體模擬 │ └─ Orin/Thor 支援更完整 → 調校空間更大 └─ 檢查 C:camera tuning 檔案路徑 ├─ RPi5: /etc/libcamera/ipa_rpi.yaml ├─ Orin: /etc/nvarguscamerasrc/ └─ 路徑不同 ≠ 功能缺失

③ 量測驗證完整 SOP:跨平台 ISP 輸出比對

  1. 控制條件:相同感測器(如 OV5647)、相同光源(5000K)、相同曝光參數
  2. 量測項目:
    a. 輸出影像 PSNR(相對 reference)
    b. 色彩偏差 ΔE*ab
    c. 銳利度(SFR / MTF10)
    d. 動態範圍(DR)
  3. 工具:rawpy + scikit-image + colour-science
  4. 判讀:PSNR >30dB = 品質相近;ΔE*ab <3 = 色彩差異可接受
  5. 常見偏差:不同 ISP pipeline 設定造成 baseline 差異 → 需獨立 tuning

④ 四平台終極對照

面向RPi5Orange PiOrin NanoThor推薦
ISP 硬體VideoCore VI GPU內建 ISP (SoC 而異)專用 ISP 硬體專用 ISP + DLAOrin/Thor 效能最高
ISP Pipeline 模組數~8 個~4-6 個~15+ 個~20+ 個Thor 模組最豐富
自動校正libcamera 自動手動為主NV 自動 + 手動NV 自動 + AIThor 最智慧
低光性能中等較差優異Orin/Thor 低光最好
開發成本很高RPi5 開發成本最低

⑤ 完整 Bring-up 專案 Checklist