Ho un'immagine 3D di un cervello (chiamiamolo flash) ed è attualmente 263 x 256 x 185. Voglio ridimensionarlo per avere le dimensioni di un'altra immagine (chiamalo intero_brain_bravo) ; 256 x 256 x 176 e (si spera) utilizzare un'interpolazione lanczos per ricampionare (Image.ANTIALIAS). Il mio (fallito) tentativo:Ridimensionamento di un'immagine 3D (e ricampionamento)
from scipy import ndimage as nd
import nibabel as nib
import numpy as np
a = nib.load('flash.hdr') # nib is what I use to load the images
b = nib.load('whole_brain_bravo.hdr')
flash = a.get_data() # Access data as array (in this case memmap)
whole = b.get_data()
downed = nd.interpolation.zoom(flash, zoom=b.shape) # This obviously doesn't work
Avete mai fatto questo genere di cose su un'immagine 3D?
Questo è davvero buono, grazie. Sapresti anche come ricampionare per qualche occasione? – elefun
Questo è ciò che 'np.interpolation.zoom' produce per' downed' da 'flash'! È possibile modificare l'ordine dell'interpolazione della spline che utilizza tramite il parametro 'order =' (non sono a conoscenza di alcuna implementazione dell'interpolazione di Lanczos in numpy/scipy). –
Ah, capisco cosa intendi. Speravo di poter usare Lanczos. Comunque non è un grosso problema. E sì lanczos è implementato nella libreria di imaging python; Image.ANTIALIAS è in realtà un lanczos a 3 lobi scritto in C (secondo la documentazione) – elefun