>백엔드 개발 >파이썬 튜토리얼 >Numpy 슬라이스를 사용하여 여러 이미지를 효율적으로 자르는 방법은 무엇입니까?

Numpy 슬라이스를 사용하여 여러 이미지를 효율적으로 자르는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-02 02:36:03376검색

How to Efficiently Crop Multiple Images Using Numpy Slices?

임의 이미지 자르기를 위해 여러 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.