ホームページ > バックエンド開発 > Python チュートリアル > Numpy スライスを使用して複数の画像を効率的にトリミングするにはどうすればよいですか?

Numpy スライスを使用して複数の画像を効率的にトリミングするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-02 02:36:03
オリジナル
387 人が閲覧しました

How to Efficiently Crop Multiple Images Using Numpy Slices?

ランダムな画像トリミングに複数の 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート