Numpy y PGM de 16 bits

¿Cuál es una forma eficiente y clara de leer imágenes PGM de 16 bits en Python con numpy?

No puedo usar PIL para cargar imágenes PGM de 16 bits debido a un error PIL. Puedo leer en el encabezado con el siguiente código:

dt = np.dtype([('type', 'a2'),
               ('space_0', 'a1', ),
               ('x', 'a3', ),
               ('space_1', 'a1', ),
               ('y', 'a3', ),
               ('space_2', 'a1', ),
               ('maxval', 'a5')])
header = np.fromfile( 'img.pgm', dtype=dt )
print header

Esto imprime los datos correctos:('P5', ' ', '640', ' ', '480', ' ', '65535') Pero tengo la sensación de que no es la mejor manera. Y más allá de eso, tengo problemas para descubrir cómo leer los siguientes datos de x por y (en este caso 640x480) por 16 bits con el desplazamiento desize(header).

EDIT: IMAGEN AGREGADA

l código de @MATLAB para leer y mostrar la imagen es:

I = imread('foo.pgm'); 
imagesc(I);

Y se ve así:

Respuestas a la pregunta(5)

Su respuesta a la pregunta