【问题标题】:Understanding RAW image files了解 RAW 图像文件
【发布时间】:2014-07-23 16:27:16
【问题描述】:

我想知道是否有人可以帮助我理解 RAW 文件。我知道有很多不同的格式称为“RAW”,而且它通常是制造商甚至是特定于相机的。我读过一些据说包含某种“标题”,提供有关文件/相机等的信息。

我正在尝试在 Matlab 中分析来自不同相机的不同 RAW 输出,就我在几天的搜索中找到的而言,这些都没有太多的文档或支持。流行的转换实用程序(Adobe DNG Converter 和 dcraw)无法识别这些文件。我有来自每台相机的 5 个图片文件,使用相机的专有软件拍摄,其中应该包含 12 位灰度数据。字节序对我来说并不明显(尽管对其他人来说可能是?)。我唯一知道的另一件事是每张图片的尺寸应该是多少。

基本上,有没有一种方法可以对我拥有的 RAW 进行逆向工程,以便了解如何将它们转换为 .tif 或对 Matlab 更友好的文件?我对这一切都很陌生。

【问题讨论】:

  • 图像来自哪个相机/制造商?是否可以上传示例?
  • 当然,@Daniel。以下是其中 3 台相机的示例文件,文件以相机品牌命名:linklinklink
  • 哦,它们的分辨率应该分别是 2704x3376、1088x2048 和 1236x1624。

标签: matlab image-processing camera reverse-engineering tiff


【解决方案1】:

请注意 - 您向我建议的图像大小可以存储为 16 位(可能只有 12 个在实践中使用)。

您确实需要联系制造商以确定。但是,如果您有大小并知道精度,则可以使用fread 并尝试字节顺序和尺寸方向。

因此,对于您的 Lumenera 示例,确切的字节数是 4,456,448。这表明尺寸是正确的,位深度是 16:宽度 * 高度 * 位深度 / 8。唯一的问题是尺寸的走向(1088x2048 或 2048x1088)和字节序。以下在我看来是一个合理的图像(不完全确定......)

fid = fopen('Lumenera.raw');
A = fread(fid,[2048 1088],'uint16','l');
fclose(fid);

如果有一个标题并且您对它的大小有所了解,您可以先使用freadfseek 将其读入图像数据的开头,如果您不需要内容。

【讨论】:

  • 感谢您的示例,这绝对很有帮助,我很快就会在这里尝试一下。也有人建议我在试图弄清楚这一切时拍摄比激光笔更容易识别的东西的图像,所以就是这样。 :)
  • 只是想再回来说声谢谢。通过一些试验和错误,这可以很好地工作。
【解决方案2】:

我会开始阅读 DC RAW 文件:

http://www.cybercom.net/~dcoffin/dcraw/

然后我会使用这个 MATLAB 脚本: https://plus.google.com/u/0/105777071372887161480/posts/TkdqRq1acuF

享受...

【讨论】:

  • 您是否看到我提到我尝试了 dcraw 和 Adob​​e DNG Converter 但没有成功?我确实发现 pdf 对理解有点有用,但它跳过了我使用 dcraw 或 Adob​​e 感到困惑的步骤。
  • 看我的第二个链接。这将为您提供文件和 MATLAB 之间的桥梁。这很容易。
  • 我做了,这就是我指的pdf。你说的桥是什么?据我所知,它告诉您采取的第一步是使用 dcraw 或 Adob​​e。我错过了什么吗?
【解决方案3】:

据我所知,相机供应商经常提供 WIC 编解码器来读取他们的 RAW (sample)。您可以尝试这种方式,尤其是在您不需要支持所有 RAW 格式的情况下。

我不精通 MATLAB,但我确信一定有一种方法可以直接使用 WIC,或者通过 3-rd 方工具或 SDK。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多