LoginSignup
5
4

More than 5 years have passed since last update.

NEF(Nikon RAW) からセンサー RAW 値を取り出す

Last updated at Posted at 2017-09-22

漢なら Nikon NEF ファイルから Sensor RAW 値を取り出したいですよね!

やりましょう!

手っ取り早く取得したいなら dcraw を使いましょう.
https://www.cybercom.net/~dcoffin/dcraw/

情報源

EXIF

TIFF IFD と同じなので, TIFF IFD と同じようにパースします.

Maker note

Maker note はメーカー定義の情報が入っています. NEF の場合はこれも TIFF IFD フォーマットになっているので, TIFF のパーサーを使いまわすことができます.

センサー値の復元

ダイナミックレンジを稼ぐためなのか, Nikon の場合 RAW 値(A/D 値)はリニアになっていないのでつらい.
リニアに復元するための curve が NEF の maker note に含まれていますのでこれを使う必要があります.

Nikon の RAW には white balance preconditioning も入っていますが, これも関係していそうですね.

Nikon RAW の white balance pre-conditioning について
https://syoyo.wordpress.com/2017/02/02/nikon-raw-%E3%81%AE-white-balance-pre-conditioning-%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/

圧縮について

NEF では, 12bit, 14bit, lossy 圧縮, 非圧縮があります.
D810 などのハイエンド系では uncompressed をサポートしていますが, D5100 など入門機用は uncompressed には対応していません.

white-balance 暗号化

昔の NEF では, white balance 値には暗号化がかかっていました.

Nikon's photo encryption reported broken
https://www.cnet.com/news/nikons-photo-encryption-reported-broken/

dcraw にそのデコードのコードがあります.

近年のカメラ(D5100, D810 で確認. Nikon maker format 2 以降)では, maker note tag の 0xc に white balance が R, B で書き込まれています(B = 1.0 を基準として R, B が正規化されている)ので, 暗号化された whilte balance をデコードする必要はなくなりました.

手順まとめ

  1. TIFF IFD をパース
  2. EXIF をパース
  3. Maker note をパースし, 圧縮タイプと linearization table を取得
  4. 圧縮タイプに応じてハフマン符号化された RAW データをデコードし, linearization table でリニア化
  5. predictor 復元 + lossless デコード的なのをちょっぴり

ややこしいですね!

コード

tinydngloader nef branch にあります.

dcraw, 1 億年かけて熟成した秘伝のソースみたいな感じでつらいのでいろいろ書きなおしていますが, ハフマン符号化のテーブル値が dcraw 以外に見当たらないので, dcraw から取得しています
そのため dcraw 部分はとりあえず GPL ライセンスにしています. RESTRICTED でない部分の code fragment だけなら違うライセンスでいけるかも? dcraw 作者にコンタクトを検討.

TODO

  • ハフマン符号化テーブルの情報源を突き止める.
  • ディープラーニングで RAW 画像パーサーをつくってほしい.
  • 優秀な RAW 画像処理若人が人類史上最速で育成され, 優秀な RAW 画像若人が日々切磋琢磨し RAW 画像処理を極めるスキームを確立したい.
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4