ホームページ >バックエンド開発 >Python チュートリアル >Numpy スライスを使用して複数の画像からランダムな 16x16 パッチを効率的にトリミングする方法

Numpy スライスを使用して複数の画像からランダムな 16x16 パッチを効率的にトリミングする方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 00:39:29799ブラウズ

How to Efficiently Crop Random 16x16 Patches from Multiple Images Using Numpy Slices?

複数の Numpy スライスを使用した効率的なランダム画像トリミング

カラー画像を表す 4 次元 Numpy 配列が与えられた場合、目標は効率的にランダムを選択することです各画像から 16x16 を切り抜き、それぞれに固有の切り抜き位置を設定image.

for ループを使用した単純なアプローチでは、不必要なメモリ オーバーヘッドと計算が発生します。このプロセスを最適化するには、np.lib.stride_tricks.as_strided メソッドまたは scikit-image の view_as_windows 関数を利用します。

view_as_windows の使用

view_as_windows 関数は、重複するウィンドウを作成します入力配列内で、追加のメモリ割り当てなしで元のデータへのビューを効果的に作成します。 (1, 16, 16, 1) のウィンドウ形状を指定することで、2 番目と 3 番目の軸 (幅と高さ) に沿ってステップ サイズ 1 でスライディング ウィンドウを作成します。

特定のウィンドウにインデックスを付けるには、ランダムなオフセットのペア (x, y) に対して、次の手順を使用します:

  1. ウィンドウ配列を生成します: w = view_as_windows(X, (1,16,16,1))[...,0,:,:,0]
  2. ランダムなオフセットに基づいてウィンドウのインデックスを作成します。 out = w[np.arange(X.shape[ 0]), x, y]
  3. 目的の出力形式に一致するように結果を転置します。 out = out.transpose(0,2,3,1)

このメソッドは、さまざまなオフセットで複数の画像をトリミングする効率的なアプローチを提供し、反復アプローチと比較してメモリのオーバーヘッドと計算時間を削減します。

以上がNumpy スライスを使用して複数の画像からランダムな 16x16 パッチを効率的にトリミングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。