有效率地使用多個Numpy 切片進行隨機影像裁切
這個問題尋求一種有效的方法來從包含4 的numpy 數組中執行隨機影像裁剪三維影像。目標是從四個圖像中提取 16x16 視窗裁剪,確保每個圖像都有不同的裁剪。
一個建議的解決方案採用簡單的 for 迴圈為每個影像產生隨機偏移,並將這些偏移應用於 numpy 切片。然而,為了在不犧牲記憶體開銷的情況下實現最佳效率,我們探索了替代方法。
利用步幅和花式索引
一種方法涉及利用 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 Slices 高效裁剪多個影像?的詳細內容。更多資訊請關注PHP中文網其他相關文章!