6.20. 總結

本章涵蓋了當某項操作沒有內建的影像庫方法時,OpenMV 應用程式會用到的 numpyscipy 部分:

  • 概念,即 ndarray 是什麼、為何在數值運算上一個緊湊的型別化緩衝區勝過 Python list,以及相機支援的 dtype 集合。

  • 形狀與索引,即視圖與副本之分、用於免配置更新的切片指派,以及作為描述子編輯的 transpose()

  • 數學運算,即逐元素運算子、像 sin() 這樣的通用函式、廣播規則、像 mean() 這樣的歸約,以及像 where() 這樣的選取輔助函式。

  • 線性代數,即用於矩陣相乘的 dot()、用於求反矩陣的 inv() / det(),以及 numpy.linalgscipy.linalg 之下用於更具結構之問題的分解與求解器。

  • 訊號處理,即 fft()、用於數位濾波的 sosfilt(),以及用於在串流迴圈中免配置計算幅值頻譜的 spectrogram()

  • 曲線與積分,即 interp()polyfit() / polyval()、用於短 FIR 濾波器的 convolve(),以及用於對取樣資料進行梯形積分的 trapz()

  • 求解器與隨機數,即用於對 Python 可呼叫物件進行數值積分的 scipy.integrate、用於求根與最小化的 scipy.optimize、用於統計特殊函式的 scipy.special,以及用於偽隨機抽樣的 Generator

  • 影像,即用於影像庫未涵蓋之罕見情形的 to_ndarray()image.Image 橋接。

  • 效能,即小型 dtype、預先配置的緩衝區、就地運算子、out= 關鍵字,以及在串流迴圈中提防布林遮罩造成的反覆配置。

以上涵蓋了相機其餘部分所依賴的通用數值運算。當某項操作在 Image 上沒有內建方法時,numpy 正是應用程式會伸手取用的工具箱,例如自訂的像素轉換、校正求解,或對緩衝音訊進行 FFT。