ランダムな画像トリミングに複数の Numpy スライスを効率的に使用する
この質問は、4 を含む numpy 配列からランダムな画像トリミングを実行する効率的な方法を求めます。 -次元のイメージ。目標は、4 つの画像のそれぞれから 16x16 のウィンドウ クロップを抽出し、画像ごとに異なるクロップを確保することです。
提案されたソリューションの 1 つは、単純な for ループを使用して各画像のランダム オフセットを生成し、それらのオフセットを無数のスライスに適用します。 。ただし、メモリのオーバーヘッドを犠牲にすることなく最適な効率を達成するには、別のアプローチが検討されます。
Strides と Fancy Indexing の活用
1 つのアプローチでは、numpy の stride_tricks.as_strided を利用してスライディングを作成します。入力配列へのビューとして機能するウィンドウ。これにより、メモリの重複が回避され、仮想的に自由な操作が提供されます。
scikit-image の view_as_windows 関数は、指定されたウィンドウ サイズでスライディング ウィンドウを作成し、他の次元に沿ってスライディング軸を作成することで、このプロセスを簡素化します。この関数を使用すると、各画像のランダムなオフセットを確保しながら、目的の 16x16 ウィンドウのトリミングを効率的に抽出できます。
実装
提供された Python コードは、view_as_windows のアプリケーションを示しています。効率的なメモリ使用量を維持しながら、ランダムな画像トリミングを実現します。
<code class="python">from skimage.util.shape import view_as_windows # Obtain sliding windows w = view_as_windows(X, (1,16,16,1))[...,0,:,:,0] # Retrieve specific windows using random offsets out = w[np.arange(X.shape[0]), x, y] # Rearrange to match the output format of the loop-based approach out = out.transpose(0,2,3,1)</code>
このアプローチは、メモリ オーバーヘッドの問題に効果的に対処しながら、ループベースの方法と比較してランダムな画像トリミングのより効率的なソリューションを提供します。
以上がNumpy スライスを使用して複数の画像を効率的にトリミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。