임의 이미지 자르기를 위해 여러 Numpy 슬라이스를 효율적으로 사용
이 질문은 4개를 포함하는 Numpy 배열에서 무작위 이미지 자르기를 수행하는 효율적인 방법을 찾습니다. -차원적인 이미지. 목표는 4개 이미지 각각에서 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 슬라이스를 사용하여 여러 이미지를 효율적으로 자르는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!