9.1 校正分工:誰負責哪一段
| 層 | 做什麼 | 可視性 | 調整方式 |
| 感測器內 | 黑位、缺陷像素校正(DPC)、基礎增益 | register | 感測器驅動 |
| 平台 ISP(RPi5) | demosaic / NR / CCM / gamma 完整管線 | libcamera tuning | tuning 檔 |
調適關鍵:OV5647 大部分品質校正在平台 ISP——這讓 RPi5 比「靠感測器內建」的 Orange Pi 有更大的調校空間。要先搞清「校正發生在哪一層」,否則同一個參數會重複校正或互相打架。
9.2 四平台 ISP 概覽
| 平台 | ISP 形態 | 調校介面 | 可視性 | 調校哲學 |
| RPi5 | SoC 硬體 ISP | libcamera .json | 高(開源) | 手動、看得見 |
| Orange Pi | 感測器內建為主 | V4L2 controls | 高(陽春) | 底層 DIY |
| Orin Nano | NVIDIA ISP(libnvivp) | Argus / NVIDIA | 低(封閉) | 自動化 |
| Thor T5000 | Blackwell + Holoscan | Holoscan | 低(新) | 自動化 |
觀念:「調校能力」= 可調參數 × 工具鏈完整度 × 可視性。RPi5 參數不是最多,但開源可視讓它最適合「學會調校原理」——原理通了,NVIDIA 只是換工具。
9.3 開源 vs 閉源對調校的影響
| 面向 | RPi5(開源) | NVIDIA(閉源) |
| 參數來源 | tuning 檔可讀可改 | 內部 tuning,公開有限 |
| 除錯 | 可追到每層 | 黑箱,靠統計 |
| 自動化 | 需自己寫腳本 | 內建自動收斂 |
| 學習價值 | 高 | 低(但省事) |
工程直覺:量產/快速交付選自動化平台;要「懂原理、能深入除錯」選開源平台。本課程選 RPi5 正是因為它的學習價值。
9.4 深入:開源調校 vs 閉源自動化的取捨
| 面向 | 開源(RPi5) | 閉源(NVIDIA) |
| 參數掌握 | tuning 檔全可讀可改 | 公開有限 |
| 出錯診斷 | 可逐層追 | 黑箱 |
| 量產速度 | 較慢(手動) | 較快(自動) |
| 學習價值 | 高 | 低 |
職業建議:年輕工程師先學開源(建立原理),再上手閉源(效率)。兩者都會用是行情。
9.5 練習
- 列出四平台的 ISP 形態與調校介面。
- 判斷「哪個平台最適合學原理、哪個最適合量產」。
看完這單元你應該能說出:
- 感測器端 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:
- PiSP:固定管線(pipeline),但每個區塊的參數透過 libcamera tuning JSON 可完全控制。支援 LSC、CCM、NR、Sharpen、HDR 等,但管線順序固定。
- NVIDIA ISP:可程式化管線(部分),支援多感測器同時輸入、GPU 加速後處理。自動 tuning 工具可自動收斂 AWB/AE/CCM 參數,但演算法內部邏輯不公開。
- Thor T5000:Blackwell GPU + Holoscan 框架,ISP 功能由 AI 模型驅動,代表「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 語法 |
進階挑戰題
- 設計一個「平台公平比較」實驗:控制曝光/色溫/色卡,RPi5 用自動 tuning、Orin 用自動 tuning,量化比較兩者的平均 ΔE 與最大 ΔE。
- 若你要將 RPi5 的 tuning 參數(如 CCM 矩陣)移植到 Orin Nano,需要考慮哪些「平台差異」?(提示:管線順序、增益映射、色彩空間定義)
- 分析 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:平台能力評估
- 同一顆感測器(OV5647/5640)分別接入兩平台。
- 各平台以固定曝光/增益拍色卡與灰卡 RAW。
- 量測:ΔE(色彩)、黑位(統計地基)、暗角比(LSC)、σ(雜訊)。
- 比較四項指標與工具鏈可用性(開源/封閉)。
- 產出「平台能力矩陣」與建議。
判讀指標:ΔE 平均 <3 = 色彩達標;黑位是否可讀可設決定調校深度;σ 比較需同曝光同增益才公平。任何「看起來較差」都要先確認是否為參數未對等,而非平台缺陷。
平台間對照:調校深度與工具鏈
| 面向 | RPi5 | Orange Pi | Orin Nano | Thor |
| 可調參數 | 每區塊全參數(JSON) | 感測器為主 | 高階參數(內部黑箱) | AI 自動化(可調性低) |
| 可視性 | 全開源可追 | 陽春 | 統計可查、邏輯封閉 | 新、文件少 |
| 自動化 | 手動 + 自寫腳本 | DIY | 內建自動 tuning | AI tuning |
| 學習價值 | 最高 | 中 | 低(效率高) | 低(效率高) |
| 坑 | 手動費時 | 工具殘缺 | NDA / 黑箱 | 生態剛起步 |
互動式檢核清單
- - [ ] 能說出感測器端與平台 ISP 的分工。
- - [ ] 已建立 cross_platform_map 翻譯表。
- - [ ] 能說明開源與閉源對調校的實際影響。
- - [ ] 能設計公平的跨平台比較實驗(控制變數)。
- - [ ] 能說出「原理可平移、介面要重學」的論點。
- - [ ] 已產出一份平台能力矩陣。
第 3 輪深度加深
① Register 位元級完整工作流:RPi5 ISP 模組 ID 讀取
| 步驟 | 暫存器 | 操作 | 說明 |
| 1. 讀取 ISP 硬體版本 | 0x7e802004 | devmem2 0x7e802004 w | bit[31:16]=ISP version, bit[15:0]=revision |
| 2. 讀取可用模組 mask | 0x7e802008 | devmem2 0x7e802008 w | 每個 bit 代表一個可用 ISP 模組(BLC/DM/LSC/CCM/...) |
| 3. 啟用特定模組 | 0x7e80200C | OR desired bits | 例如 bit[3]=1 啟用 LSC, bit[5]=1 啟用 CCM |
| 4. 驗證 | 0x7e80200C | read-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 輸出比對
- 控制條件:相同感測器(如 OV5647)、相同光源(5000K)、相同曝光參數
- 量測項目:
a. 輸出影像 PSNR(相對 reference)
b. 色彩偏差 ΔE*ab
c. 銳利度(SFR / MTF10)
d. 動態範圍(DR)
- 工具:rawpy + scikit-image + colour-science
- 判讀:PSNR >30dB = 品質相近;ΔE*ab <3 = 色彩差異可接受
- 常見偏差:不同 ISP pipeline 設定造成 baseline 差異 → 需獨立 tuning
④ 四平台終極對照
| 面向 | RPi5 | Orange Pi | Orin Nano | Thor | 推薦 |
| ISP 硬體 | VideoCore VI GPU | 內建 ISP (SoC 而異) | 專用 ISP 硬體 | 專用 ISP + DLA | Orin/Thor 效能最高 |
| ISP Pipeline 模組數 | ~8 個 | ~4-6 個 | ~15+ 個 | ~20+ 個 | Thor 模組最豐富 |
| 自動校正 | libcamera 自動 | 手動為主 | NV 自動 + 手動 | NV 自動 + AI | Thor 最智慧 |
| 低光性能 | 中等 | 較差 | 優 | 優異 | Orin/Thor 低光最好 |
| 開發成本 | 低 | 中 | 高 | 很高 | RPi5 開發成本最低 |
⑤ 完整 Bring-up 專案 Checklist
- - [ ] 確認各平台 ISP 硬體型號與能力
- - [ ] 建立各平台 tuning 檔案格式對照表
- - [ ] 在 RPi5 上完成 baseline tuning
- - [ ] 將 RPi5 tuning 等效移植到 Orin Nano
- - [ ] 量化比對兩平台輸出(PSNR/ΔE)
- - [ ] 記錄各平台 ISP 模組支援清單
- - [ ] 整理跨平台移植指南
- - [ ] 建立平台間差異的 FAQ 文件