Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memangkas Berbilang Imej Dengan Cekap Menggunakan Slices Numpy?

Bagaimana untuk Memangkas Berbilang Imej Dengan Cekap Menggunakan Slices Numpy?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-02 02:36:03295semak imbas

How to Efficiently Crop Multiple Images Using Numpy Slices?

Dengan Cekap Menggunakan Pelbagai Kepingan Numpy untuk Pemotongan Imej Rawak

Soalan ini mencari cara yang cekap untuk melakukan pemotongan imej rawak daripada tatasusunan numpy yang mengandungi 4 -imej berdimensi. Matlamatnya adalah untuk mengekstrak tanaman tetingkap 16x16 daripada setiap empat imej, memastikan pemangkasan yang berbeza untuk setiap imej.

Satu penyelesaian yang dicadangkan menggunakan gelung mudah untuk menjana offset rawak untuk setiap imej dan menggunakan offset tersebut pada kepingan numpy . Walau bagaimanapun, untuk mencapai kecekapan optimum tanpa mengorbankan overhed memori, pendekatan alternatif diterokai.

Memanfaatkan Langkah dan Pengindeksan Mewah

Satu pendekatan melibatkan memanfaatkan stride_tricks.as_strided numpy untuk mencipta sliding tetingkap yang bertindak sebagai pandangan ke dalam tatasusunan input. Ini mengelakkan pertindihan memori dan menyediakan operasi percuma maya.

fungsi view_as_windows scikit-image memudahkan proses ini dengan mencipta tingkap gelongsor dengan saiz tetingkap dan paksi gelongsor yang ditentukan di sepanjang dimensi lain. Menggunakan fungsi ini, kami boleh mengekstrak pemangkasan tetingkap 16x16 dengan cekap, memastikan pengimbangan rawak untuk setiap imej.

Pelaksanaan

Kod Python yang disediakan menunjukkan aplikasi view_as_windows kepada mencapai pemangkasan imej rawak sambil mengekalkan jejak memori yang cekap:

<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>

Pendekatan ini menawarkan penyelesaian yang lebih cekap untuk pemangkasan imej rawak berbanding kaedah berasaskan gelung sambil menangani kebimbangan overhed memori secara berkesan.

Atas ialah kandungan terperinci Bagaimana untuk Memangkas Berbilang Imej Dengan Cekap Menggunakan Slices Numpy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn