RGB to RAW変換概要
初めに
RGBをRAWのデータに変換する方法として、RGBデータを間引く方法を説明します。
今回は例として256x256x3のRGBデータを128 x 128 x 4のRAWデータに変換するものを図として以下に示します。
※一般的なベイヤ配列を想定していますので、ダブルベイヤやクアッドベイヤなどの説明は省かせていただきます。
データサイズは
$ RGB = [h , w , 3 ] → RAW = [h/2 , w/2 , 4]$
となります。
また、RAWをベイヤ形式に並べると
$ Bayer = [h,w, 1] $
となります。
前述したとおり、データを間引くだけの単純な処理となるが、$G$チャネルと残りの $R,B$チャネルで少しだけ処理が違うことに注意する。 $G$チャネルはRAWに変換する際に奇数行と偶数行で分けて処理をしますが、最終的なベイヤ配列にする際に$R$チャネルと隣り合うものを$Gr$,$B$チャネルと隣り合うものを$Gb$とします。
R
RAW_R= \left(
\begin{align}
& R_{0,0} & R_{0,2} & &\cdots & & R_{0,even} && \cdots & & R_{0,254} \\
& R_{2,0} & R_{2,2} & &\cdots && R_{2,even} & & \cdots && R_{2,254} \\
& \vdots & & & && && & & \vdots \\
& R_{252,0} & R_{252,2} & & \cdots & & R_{252,even}& & \cdots & & R_{252,254} \\
&R_{254,0} & R_{254,2} & &\cdots && R_{254,even} && \cdots && R_{254,254} \\
\end{align}
\right)
のように、偶数行の偶数列を抽出してRAWデータのRチャネルとします。
B
RAW_B= \left(
\begin{align}
& R_{1,1} & R_{1,3} & &\cdots & & R_{1,odd} && \cdots & & R_{1,255} \\
& R_{3,1} & R_{3,3} & &\cdots && R_{3,odd} & & \cdots && R_{3,255} \\
& \vdots & & & && && & & \vdots \\
& R_{253,1} & R_{253,3} & & \cdots & & R_{253,odd}& & \cdots & & R_{253,255} \\
&R_{255,1} & R_{255,5} & &\cdots && R_{255,odd} && \cdots && R_{255,255} \\
\end{align}
\right)
$R$の時の逆で、$B$は奇数行の奇数列を抽出します。
G
$G$チャネルはベイヤ配列にする際に$R,B$と隣り合うものをそれぞれ$G_r,G_b$として抽出します。
$RAW_{G_r} = G_{even,odd}$
$RAW_{G_b} = G_{odd,even}$
ベイヤ配列 Bayer Array
上の処理で得られたRAWデータを並べ替えることによってベイヤ配列が得られる。
$ RGB = [256 , 256 , 3] → Bayer = [256 , 256 ,1 ] $
という感じにサイズが変わります。