转换比特流图像

    转换比特流图像

    技术说明

    转换比特流图像

    2012年5月5日

    在本技术说明中,我们希望介绍三种将原始(比特流)图像转换为常规图像文件格式的方法。在此情况下,我们将原始图像定义为一系列比特。该.raw文件仅包含图像 pixel 值的信息,不包含文件头和任何附加信息(与 camera raw 文件如 CR2、NEF、ARW、ORF、RAF 等相反)。

    RAW 文件

    作为示例图像,我们考虑一个1280x800的灰度图像(8 bit)。由于没有附加信息,每个字节代表一个 pixel 的灰度值。在十六进制编辑器中打开的.raw文件将如下图所示。

    图1:在十六进制编辑器中打开的.raw文件
    图1:在十六进制编辑器中打开的.raw文件

    在编辑器中,该文件由1,024,000(=1280*800)个十六进制值表示。由于计数从0x00000开始,最后一个值03位于0xF9FFF位置(即十六进制形式的1,023,999)。比特按行排序。

    如何转换 RAW 图像

    转换比特流图像的方法有很多,我们希望至少介绍三种。要转换这些.raw文件,必须知道两件事:图像的宽度和高度以及 bit 深度。如前所述,我们的文件是一个1280x800的灰度图像(8 bit)。

    通过 PHOTOSHOP / IMAGE

    图2:Adobe Photoshop raw
    图2:Adobe Photoshop raw
    图3:ImageJ raw 导入
    图3:ImageJ raw 导入

    通过 Adobe Photoshop 和 ImageJ 的转换方式类似。我们必须输入图像尺寸和 bit 深度。在 Photoshop 中,我们需要在一个单独的编辑字段中输入通道数量,而在 ImageJ 中,弹出菜单“Image type”结合了 bit 深度和通道数量。如果.raw文件包含文件头,您可以选择偏移若干字节以访问图像数据。之后,图像可以保存为任何支持的格式。

    通过 IMAGEMAGICK

    图4:通过命令行转换ImageMagick
    图4:通过命令行转换ImageMagick

    ImageMagick 为转换 raw 文件提供了简单的命令行处理方式。“convert.exe”可执行文件需要一些标志:

    -size 1280x800(我们的图像尺寸)

    -depth 8(8 bit/通道)

    GRAY: <raw 图像路径/文件名> <转换后的图像路径/文件名>

    “Explicit Image Format” GRAY 将我们的图像标识为灰度图像,因为.raw扩展名未指定已知格式且不包含文件头信息。输出格式可以根据您的喜好选择,在此我们选择 TIF。(输入 –help 获取更多信息)

    转换后的图像

    图5:原始图像(左),裁剪(右)
    图5:原始图像(左),裁剪(右)

    转换后的图像将如图5左所示。如果我们从图像中获取一些样本值,例如第96行和第584到586列,我们可以检查.raw文件中的字节是否具有相同的值。

    图6:十六进制编辑器中的.raw文件
    图6:十六进制编辑器中的.raw文件

    这些样本值在十六进制代码中的位置为0x1E248到0x1E24A(<宽度> <当前行> + <当前列> = 128096+584...585...586)。正如我们所看到的,这些值是相同的:

    (十六进制 -> 十进制)
    4E -> 78
    AB -> 171
    52 ->82

    ck