基于Numpy的10/12/14位无符号RAW图像导入解决方案求助
处理10/12/14位无符号RAW图像的问题
在Python中导入16位无符号RAW图像数据十分简单:
data = numpy.fromfile( source_file, dtype=numpy.uint16 ) data = numpy.asarray( data )
但我还需要导入10、12、14位无符号整数数据,最终编码至某专有图像格式(该格式仅接受带独有头信息的16或32位整数数组),而Numpy并未实现这三种位深的数据类型。
将10/12/14位RAW图像以16位无符号格式在ImageJ中打开时,像素位置正确但显示异常,这符合位深不匹配的预期;但以小端字节序打开时,10位图像可完美显示。
我尝试在Python中切换为小端字节序:
image_bitness = numpy.uint16 image_bitness = numpy.dtype( image_bitness ).newbyteorder( '<' ) data = numpy.fromfile( source_file, dtype=image_bitness ) data = numpy.asarray( data )
但该操作没有效果,转换后的图像在ImageJ中仍显示异常。我已实现16/32位无符号RAW图像的同类转换且运行正常。
目前存在以下疑问:
- 如何实现10/12/14位无符号数据的有效处理方案
- 如何将10位数据转换为16位(初始需以uint16读取数据)
- 为何ImageJ用小端能正确显示,而Python切换字节序无相同效果
- 为何位填充、字节反转等尝试均无法解决显示问题
附录:尝试过的其他方法
我尝试通过二进制补零将数据转为16位:
data = numpy.fromfile( source_file, dtype=numpy.uint16 ) # 对10位图像也能运行? for i in data: data[i] = int( bin( data[i] )[2:].zfill(16), 2 ) data = numpy.asarray( data )
该操作将0000001011转为0000000000001011再转回十进制,但转换后图像仍显示异常,推测是数值未变导致;尝试字节反转:
for i in data: data[i] = int( bin( data[i] )[2:].zfill(16)[::-1], 2 )
结果依旧显示异常。
内容的提问来源于stack exchange,提问作者phillip_at_work
相关产品推荐
相关产品推荐

