2011-10-14 5 views
6

s'il vous plaît Considérons cet exemple reproductible:Normaliser tableaux de divers objets "image" numpy

from PIL import Image 
import numpy as np 
import scipy.misc as sm 
import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 
import matplotlib.cbook as cbook 
import urllib 

datafile = cbook.get_sample_data('lena.jpg') 
lena_pil = Image.open(datafile) 
lena_pil_np = np.asarray(lena_pil) 

lena_scipy = sm.lena() 

lena_tmp = open('lena_tmp.png', 'wb') 
lena_tmp.write(urllib.urlopen('http://optipng.sourceforge.net/pngtech/img/lena.png').read()) 
lena_tmp.close() 

lena_mpl = mpimg.imread('lena_tmp.png') 

sm.info(lena_pil_np) 
sm.info(lena_scipy) 
sm.info(lena_mpl) 

sortie est:

>>> sm.info(lena_pil_np) 
class: ndarray 
shape: (512, 512, 3) 
strides: (1536, 3, 1) 
itemsize: 1 
aligned: True 
contiguous: True 
fortran: False 
data pointer: 0xb707e01cL 
byteorder: little 
byteswap: False 
type: uint8 

>>> sm.info(lena_scipy) 
class: ndarray 
shape: (512, 512) 
strides: (2048, 4) 
itemsize: 4 
aligned: True 
contiguous: True 
fortran: False 
data pointer: 0xb6f7d008L 
byteorder: little 
byteswap: False 
type: int32 

>>> sm.info(lena_mpl) 
class: ndarray 
shape: (512, 512, 3) 
strides: (6144, 12, 4) 
itemsize: 4 
aligned: True 
contiguous: True 
fortran: False 
data pointer: 0xb6c7b008L 
byteorder: little 
byteswap: False 
type: float32 

si tous les tableaux sont de forme différente et le type.

Pour un traitement supplémentaire, je voudrais que ces tableaux soient représentés comme dans la dernière variable lena.mpl, ou simplement pour transformer des valeurs de tableau en leur type float32 [0..1] normalisé.

Quelle est la meilleure façon de faire cela?

Répondre

5
def normalize(arr): 
    arr=arr.astype('float32') 
    if arr.max() > 1.0: 
     arr/=255.0 
    return arr