RAFファイルのRawデータを読み取ってみる その6 CFAの処理

since:2014-7-21
last update:2014-7-21
前のページへ  

トップ 写真・カメラ関連 RAFファイルのRawデータを読み取ってみる その1 その6 CFAの処理

3.6 CFAの処理

 ダーク減算等の色情報が不要な場合はここまでの内容で処理できますが、色別のフラット処理等を行なう場合はCFA情報を処理する必要があります。

 CFA Header領域にある0x0130 FujiLayoutからCFAのサイズを取得します。
 0x0C0Cとありますので 0x0C(12) x 0x0C(12)
 1pixelあたり2byte必要なので、6x6のCFAと解釈しています。

 次に同じくCFA Header領域にある0x0131 CFA Patternの情報を使います。
 サンプルの値は以下の通りです。
01 00 02 01 02 00
02 01 01 00 01 01
00 01 01 02 01 01
01 02 00 01 00 02
00 01 01 02 01 01
02 01 01 00 01 01

 ここで、00:R 01:G 02:Bになりますので配列は以下の通りです。

G R B G B R
B G G R G G
R G G B G G
G B R G R B
R G G B G G
B G G R G G

(※2017/5/2更新)
RAFのCFA情報はDNGのCFA情報と逆順に格納されているため、これを逆順に変換します。
つまり、6x6の配列の右下から左方向に読んでいきます。

G G R G G B
G G B G G R
B R G R B G
G G B G G R
G G R G G B
R B G B R G

とします。

X-M1の場合、開始側の余剰データがありませんので、これで完了です。
一方、例えばX-E2の場合開始側に余剰データがあるため、この分だけCFA情報をシフトさせてやる必要があります。

具体的には、X-E2のRAFから得られるCFA情報は以下の通りです。

B G G R G G
R G G B G G
G B R G R B
R G G B G G
B G G R G G
G R B G B R

これを逆順にします。
R B G B R G
G G R G G B
G G B G G R
B R G R B G
G G B G G R
G G R G G B

X-E2は開始側に4バイトの余剰データがあるため、4バイト分シフトします。

R G R B G B
G B G G R G
G R G G B G
B G B R G R
G R G G B G
G B G G R G


 最後の問題は、このCFAパターンをどこから開始するかという点です。
 RAFのフォーマット上にこの情報を見つけることができなかったので、いまのところRStackerでは以下の処理をしています。

・CFA Header領域にある0x0110 を公称RAW画像サイズの開始点と解釈し、高さ方向、幅方向それぞれ0x000C,0x001C (12,28)とする 幅方向に注目し、28のラインがCFAパターンの開始位置と一致するようにします。
・X-M1の実効RAWデータの開始点が(0,0)であるため、(28-0) mod 6 =4を算出し、RAW画像(0,0)点でCFAパターンの(4,4)から開始するようCFAパターンを平行移動させます。

すなわち、実効RAWデータ対して

G G R G G B
G G B G G R
B R G R B G
G G B G G R
G G R G G B
R B G B R G
とします。

これはDNG形式変換時に格納されるCFA Patternと一致します。

3.7 黒レベルの処理

 最後に各値から黒レベルを値から減算します。
 黒レベルも36データからなっているため、CFAに対応する部分からそれぞれ減算する形になります。
 しかしX-M1の黒レベルはすべての値が255なので、一律で同じ値を減算しても問題ないかもしれません。

 なおX-M1で実際に記録されているセンサーからの値を確認しましたが、なぜか255を下回る値が記録されていました。
 RStackerでは黒レベルを下回る値はすべて黒レベルと同じ値=0として処理していますので、場合によっては若干値の損失が発生するかもしれません。
 (これが影響するかは現像処理に依存すると思われます。)

以上でRAF形式からRAWデータを取得する手順の紹介は終わりです。
自身で現像したい場合は、これに加えてカラーバランスの情報取得などが必要かもしれません。
(おわり)



前のページ  [1] [2] [3] [4] [5] [6]