RGB符号化された標高データを含む1024x1024
の寸法のPNG画像があります。 Iはnumpy
からasarray
を用いて画像に読み取る:PythonでRGB画像を短時間でデコードする方法
(1024, 1024, 4)
有する3Dアレイをもたらす
rgb_data = np.asarray(image)
。
を(私はRGBAを使用しています)私は、そのデータの上にいくつかのフィルタ(ガウス、中央値)を実行する必要がありますが、私は、デコードされた標高データ上でそれを実行する必要があります。 I復号標高データを含む寸法(1024, 1024)
た2Dアレイを有することになる復号後
def decodeRGB(pixel):
return (pixel[0] * 256 + pixel[1] + pixel[2]/256) - 32768
:
標高データは、以下の機能を復号することができます。 (海抜実際の高さ)
私はこれまで持っていることはこれです:
rgb_data = np.asarray(image)
decoded_data = np.zeros(tile.size)
for rownum in range(width):
for colnum in range(height):
decoded_data[rownum][colnum] = decodeRGB(rgb_data[rownum][colnum])
残念ながら、このソリューションは非常に遅いです。それはおよそかかります。 1024×1024の画像の場合は10秒です。
これを実装するためのより効果的な方法がありますか?
私の主な問題は、アレイの寸法が変化することです。 私は(1024, 1024, 4)
の配列から(1024, 1024)
の配列に行きます。
私は基本的にアレイサイズの縮小を可能にする画像内のすべてのRGB画素に関数を適用する高速/効率的な方法を探しています。
おかげであなたの助けのためにたくさん!
Pythonは、画像ピクセルデータの読み込み、計算には適していません。 'LOW_LEVEL'言語を取得してください! – dsgdfg
@dsgdfg確かに、純粋なPythonはそのスピードで知られていませんが、Numpyが普及しています。コンパイルされたコードを使用してマシンネイティブデータの多次元配列を操作できるため、算術とループはコンパイルされた速度仮想マシン上のPythonオブジェクトを操作するPythonバイトコードの速度がやや遅くなります。 –
'64ビットマシンのラムアドレス+バーチャルラムアドレス+メインスレッドのラムアドレス+サブスレッドのラムアドレス' @Sandroプロジェクトではおそらく動作しますが、すべての時間ではないでしょう。 '? – dsgdfg