私は(とりわけ)デルタフィルタをRGB画像に適用する必要があるデコンプレッサを作成しています。すなわち、最初の画素のみが絶対的(R1、G1、B1)であり、他のすべてが絶対値である(R [n] -R [n-1]、G [n] -G [n-1] ]、B [n] -B [n-1])に変換し、標準RGBに変換する。今、次のように私はnumpyの使用していpython/numpyでデルタフィルタを高速化する
:
- ライン1は、元画像の1次元配列を作成
rgb = numpy.fromstring(data, 'uint8') components = rgb.reshape(3, -1, order='F') filtered = numpy.cumsum(components, dtype='uint8', axis=1) frame = numpy.reshape(filtered, -1, order='F')
。
ライン2は
[[R1, R2, ..., Rn], [G1, G2, ..., Gn], [B1, B2, ..., Bn]]
線3は、実際defilteringを実行線4は、1Dアレイ
問題に再び変換
私は疑問に思っています。再形成を避けるか、スピードアップする方法はありますか?
注:
- 私は、このためのC拡張を記述する必要がないことを好むだろう。
- 私はすでに、私はまだ理解していなかったいくつかの理由で、あなたのコードをコピーしたデータの最後のリシェイプのためにマルチスレッド
をあなたの 'rgb'データは0から255の範囲にある場合は、' numpy.cumsum'は黙ってオーバーフローすることを良いチャンスがあります。 'x = np.arange(255、dtype = 'uint8')'と 'y = np.cumsum(x、dtype = 'uint8')'のときに何が起こるかを見てみましょう。 – unutbu
さて、私はそれがオーバーフローするか、別の言い方をすると、それはmod 255を作動させていると思う。 – Alberto
それは意図的だった。しかし、 'R [n] -R [n-1]'などを計算するために、 'filtered = numpy.diff(components、axis = 1)'ではないでしょうか? – unutbu