ImageJ导出16位有符号RAW照片为TIFF的数值留存转换问题
16位有符号RAW图像数值相关问题解答
方括号内32940的含义
你观察到的32940是16位有符号整数172以无符号16位整数格式读取得到的结果:
16位有符号整数的取值范围为-32768~32767,和无符号16位整数的映射规则为「有符号值 = 无符号读取值 - 32768」,代入32940计算刚好得到172.00,和你看到的正确目标值完全匹配。
出现这个差值的原因是RAW文件本身没有自带像素编码类型标识,ImageJ默认按无符号16位解析原始像素的存储二进制值,显示时额外做了编码转换才得到正确的172.00目标值,括号内显示的是未经过转换的原始存储值。
将校准后的目标值存入导出TIFF的方法
你可以选择两种方案实现:
- 直接修改像素值后导出:在ImageJ中对全图执行批量像素运算,运算公式为
像素值 = 像素值 - 32768,运算完成后所有像素值就会变为172.00这类校准后的值,导出时选择有符号16位TIFF格式存储即可,后续读取的像素值直接就是校准后的目标值。 - 保留原始存储值,将校准规则存入元数据:如果不想改动原始AD采集值,可以把校准公式、偏移量、增益等参数写入TIFF的
ImageDescription自定义元数据标签,后续第三方工具读取时可以调用元数据自动完成转换。ImageJ导出时在「元数据」配置项中勾选保留自定义信息即可生效。
存储值转目标值的转换方法
如果你已经导出了仅保留32940这类无符号存储值的TIFF文件,直接套用固定线性转换公式即可得到正确目标值:校准目标值 = 16位无符号存储值 - 32768
该转换规则适用于当前这组16位有符号RAW对应的所有像素值。
内容的提问来源于stack exchange,提问作者Florian Thürkow
相关产品推荐
相关产品推荐

