6.20. まとめ¶
この章では、操作に組み込みの画像ライブラリメソッドがない場合にOpenMVアプリケーションが頼る numpy と scipy の部分を扱いました:
概念 --
ndarrayとは何か、なぜパックされた型付きバッファが数値計算でPythonのlistよりも優れているのか、そしてカメラがサポートするdtypeのセット。形状とインデックス -- ビューとコピー、割り当て不要の更新のためのスライス代入、ディスクリプタの編集としての
transpose()。数学 -- 要素ごとの演算子、
sin()のようなユニバーサル関数、ブロードキャストのルール、mean()のようなリダクション、そしてwhere()のような選択ヘルパー。線形代数 -- 行列積のための
dot()、逆行列のためのinv()/det()、そしてより構造を持つ問題のためのnumpy.linalgとscipy.linalgの分解とソルバー。信号処理 --
fft()、デジタルフィルタリングのためのsosfilt()、そしてストリーミングループでの割り当て不要の振幅スペクトルのためのspectrogram()。曲線と積分 --
interp()、polyfit()/polyval()、短いFIRフィルタのためのconvolve()、サンプリングされたデータの台形積分のためのtrapz()。ソルバーと乱数 -- Python呼び出し可能オブジェクトの求積のための
scipy.integrate、求根と最小化のためのscipy.optimize、統計的特殊関数のためのscipy.special、そして疑似乱数サンプリングのためのGenerator。画像 -- 画像ライブラリが対応していない稀なケースのための
to_ndarray()とimage.Imageのブリッジ。パフォーマンス -- 小さいdtype、事前割り当てバッファ、インプレース演算子、
out=キーワード、そしてストリーミングループでのブールマスクの繰り返し割り当てへの注意。
これで、カメラの残りの部分が依存する汎用的な数値計算をカバーしました。numpy は、Image に組み込みメソッドがない操作 -- カスタムのピクセル変換、キャリブレーションの求解、バッファされた音声のFFTなど -- に対してアプリケーションが手を伸ばすツールボックスです。