位流图像的转换
2012年5月5日
在本技术说明中,我们将介绍三种将RAW(比特流)图像转换为常规图像文件格式的方法。在此,我们将RAW图像定义为一串比特。 .RAW 文件仅包含有关图像像素值的信息,没有头信息,也没有包含任何附加信息(这与相机 RAW 文件(例如 CR2、NEF、ARW、ORF、RAF 等)不同)。
RAW文件
作为示例图像,我们考虑一张 1280×800 的灰度图像(8 位)。由于没有附加信息,每个字节代表一个 pixel 的灰度值。在十六进制编辑器中打开的 .RAW 文件将如下所示。

在编辑器中,该文件由 1,024,000(=1280*800)个十六进制值表示。 由于计数从 0x00000 开始,最后一个值 03 位于 0xF9FFF 位置(十六进制形式为 1,023,999)。位按行排序。
如何转换 RAW 图像
转换比特流图像的方法多种多样,我们至少要介绍三种。要转换这些 .RAW 文件,必须知道两点:图像的宽度和高度以及位深度。如前所述,我们的文件是一张 1280×800 的灰度图像(8 位)。
通过Photoshop / Image


通过 Adobe Photoshop 和 ImageJ 进行转换的方法类似。我们需要输入图像尺寸和位深度。在 Photoshop 中,需在单独的编辑框中输入通道数;而在 ImageJ 中,“图像类型”下拉菜单则将位深度和通道数合并在一起。 如果 RAW 文件包含文件头,您可以选择几字节的偏移量来访问图像数据。之后,图像可以保存为任何受支持的格式。
通过 ImageMagick

ImageMagick 提供简单的命令行处理功能来转换 RAW 文件。可执行文件“convert.exe”需要一些参数:
-size 1280x800(我们的图像尺寸)
-depth 8(每通道 8 位)
GRAY: <RAW图像路径/文件名> <转换后图像路径/文件名>
“显式图像格式” GRAY 将我们的图像识别为灰度图像,因为 .RAW 扩展名未指定已知格式且没有头信息。输出格式可按需选择,本例中我们选择 TIF。(输入 type –help 可获取更多信息)
转换后的图像

转换后的图像将如图 5 左侧所示。如果我们从图像中提取一些样本值(例如第 96 行、第 584 至 586 列),就可以检查 .RAW 文件中的字节是否具有相同的值。

这些样本值在十六进制代码中的位置为 0x1E248 至 0x1E24A(<宽度> <当前行> + <当前列> = 128096+584...585...586)。 如我们所见,这些值是相同的:
(十六进制 → 十进制)
4E → 78
AB → 171
52 → 82
ck