PGM irregular e de 16 bits

O que é uma maneira eficiente e clara de ler imagens PGM de 16 bits em Python com numpy?

Não consigo usar o PIL para carregar imagens PGM de 16 bitsevido a um bug do P. Eu posso ler no cabeçalho com o seguinte 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

Isso imprime os dados corretos:('P5', ' ', '640', ' ', '480', ' ', '65535') Mas sinto que não é o melhor caminho. Além disso, estou tendo problemas para descobrir como ler os seguintes dados de x por y (neste caso, 640x480) por 16 bits com o deslocamento desize(header).

EDIT: IMAGEM ADICIONADA

código @MATLAB para ler e exibir a imagem é:

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

E fica assim:

questionAnswers(5)

yourAnswerToTheQuestion