RAW(RAF)ファイルの中身をDNGと比較してみた

昨日はDNGファイルの中を見て、各画素の輝度情報とカラーフィルター配列情報が入っていることを確認した。

今回は引き続き、DNG変換前のオリジナルのRAWファイル(X-E2では「RAF」形式)の中を見て、DNG変換後とバイナリ比較した。

まずファイルサイズだが、昨日用いた画像のRAF形式のサイズが約32MBで、非圧縮でDNG変換した後も32MB程度とあまり変わらなかったので、これはRAFファイルの中は非圧縮で、直接見られるのではないか、と考えた。

そこで早速バイナリエディタ「Stirling」を用いて、DNG, RAFの両ファイルを開いてみた。

RAFファイルにおける画像(輝度)データの開始アドレスは不明だが、昨日のDNGの解析で、DNG側での画像データ開始アドレスは分かっている。そこで、DNGファイルの画像データの先頭から16バイトのデータ列で、RAFファイルの中を検索した。

X-2のDNGとRAFの比較

すると、思惑通り画像データらしきデータ列が見つかった。画面下方向にざっと見てもDNGの方と同じようなので、おそらくこれがRAFでの生データだろう。見たところ、思った通り非圧縮で、DNG同様に1画素16bit(2byte)のリトルエンディアン形式で記録されているようだ。

おそらくここからファイル終端までが画像データだろうと言うことで、DNG,RAFそれぞれについて、データ開始アドレスからファイル終端までを切り取って、データのみの別ファイルに切り出した。切り出し後の両データは一致するはず。

ところが

DNGとRAFのサイズ不一致

ファイルサイズが一致しない。

バイト数を正確に調べると

DNGファイル(データ部分のみ):32,538,112 byte
RAFファイル(データ部分のみ):32,907,256 byte

差し引き、369,144 byte RAFの方が大きい。
やはり、DNG変換時に何か情報が欠落しているのか?

1画素当たり2byteで、画素数は4936×3296なので、
4936x3296x2=32,538,112
となり、DNGの方はデータ量がピッタリである。

とりあえず、DNGとRAFをシンクロスクロールして見ていくと

RAFファイルのゼロデータ列

RAFの方にゼロデータ列発見。

調べていくと、どうやら1ライン(4936画素=9872 byte)毎に、後に112byteのゼロデータが入るようだ。

しかも、最終ラインの後は112byteではなく、何故か104byteである(下図)。

RAFファイルのゼロデータ列最終部分

画像は3,296ライン有るので、ゼロデータのバイト数は

112×3,295 + 104 = 369,144

となり、上述の「RAFデータサイズ – DNGデータサイズ」に一致する。
両ファイルのサイズ不一致はこのゼロデータのせいのようだ。

このゼロデータに何か大切な意味があるとは思えないので、これを除去する。

Stirlingの「置換」で、「00 00」を置き換え文字無しで置換すると削除モードになるようなので、これでゼロデータを削除した。

RAFファイルのゼロデータ除去

ゼロ削除後、もう一度これを別名でセーブして、DNGファイルと比較すると

両者はバイナリ一致した。

まとめると下記の通りとなる。

  • X-E2のRAWファイル(RAF)の輝度情報データ部分は、非圧縮、1画素2byte(リトルエンディアン形式)で記録されている。輝度の精度はおそらく14bit。
  • 1ライン(9872 byte)毎に、112byteのゼロデータが入る。ただし最終ライン後は104byte。
  • DNG変換後は、ライン間のゼロデータが除去されるだけで、各画素の輝度データ自体はリトルエンディアン形式そのままで転記される。
  • カラーフィルター配列もそのまま転記される。

というわけで、安心してDNG変換を間に挟んだ処理を行える。

コメント

タイトルとURLをコピーしました