Python: lectura de imagen binaria empaquetada de 12 bits

Tengo una imagen empaquetada de 12 bits de una cámara GigE. Es un archivo little endian y cada 3 bytes contienen 2 píxeles de 12 bits. Estoy tratando de leer esta imagen usando Python y probé algo como esto:

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))

En resumen: leo 3 bytes, los convierto en bits y luego los descomprimo como dos enteros de 12 bits.

Sin embargo, el resultado es muy diferente de lo que debería ser. Parece que la imagen está separada en cuatro cuartos, cada uno de ellos expandido al tamaño de imagen completo y luego superpuesto.

¿Qué estoy haciendo mal aquí?

Actualizar: Aquí están los archivos de prueba:

12 bits empaquetados

12 bits normal

No serán idénticos, pero deben mostrar la misma imagen. 12 bits normal tiene píxeles 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))

Respuestas a la pregunta(1)

Su respuesta a la pregunta