Python: lendo imagem binária compactada de 12 bits

Tenho uma imagem compactada de 12 bits de uma câmera GigE. É um arquivo little-endian e cada 3 bytes contém 2 pixels de 12 bits. Estou tentando ler esta imagem usando python e tentei algo como isto:

import bitstring
import numpy

with open('12bitpacked1.bin', 'rb') as f:
    data = f.read()
ii=numpy.zeros(2*len(data)/3)
ic = 0

for oo in range(0,len(data)/3):
    aa = bitstring.Bits(bytes=data[oo:oo+3], length=24)
    ii[ic],ii[ic+1] = aa.unpack('uint:12,uint:12')
    ic=ic+2

b = numpy.reshape(ii,(484,644))

Resumindo: leio 3 bytes, converto-os em bits e descompacte-os como dois números inteiros de 12 bits.

O resultado é, no entanto, muito diferente do que deveria ser. Parece que a imagem é separada em quatro quartos, cada um deles expandido para o tamanho total da imagem e depois sobreposto.

O que eu estou fazendo errado aqui?

Atualizar: Aqui estão os arquivos de teste:

Embalado em 12 bits

12 bits normal

Eles não serão idênticos, mas devem mostrar a mesma imagem. O normal de 12 bits possui um pixel de 12 bits como uint16.

with open('12bit1.bin', 'rb') as f:
    a = numpy.fromfile(f, dtype=numpy.uint16)

b = numpy.reshape(a,(484,644))

questionAnswers(1)

yourAnswerToTheQuestion