PixelShiftという技術に関してめちゃくちゃざっくりと備忘録がてら解説をしてみる。
(暇があれば図も後で追加します。LGMTとかストックしてくれるとモチベーション上がります。)
#デモザイク処理の課題
まず、PixelShiftのバックグラウンドとして一般的なデジタルカメラがどのように我々の目にする画像を生成しているのかという大前提があるのだが、これについてザックリと説明をする。
カメラにはご存じの通りレンズがあり、そこを通った光がフィルターを通してセンサーに当たってその光の強度により信号をA/D変換してデジタルデータとして保存している。この時に光の成分をRGBに分けるためにカラーフィルタを使うのだが、このカラーフィルタをベイヤーフィルタと呼ぶ。(正確にはメーカーによっていろんなフィルタがあるけど、一般的なものを想定しているためベイヤーフィルタで統一することにする。)
ここでフィルタを通して得られたデータは各画素のRGBの値を示しているわけだが、Rの情報がある画素にはG、Bの色情報は存在しない。(これは当たり前の話ではあるが、ここがPixelShiftの話のミソとなる。)
我々が画像を目にするとき、1画素にR,G,Bの3chの情報が合わさって初めて一般的な画像情報となるが、例えばRの情報しかない画素からほかのG,Bの情報はどうやって手に入れるのか、というとここでデモザイクという処理が登場する。
このデモザイクという処理はいわば色の補間を行うわけだが、いろんなアルゴリズムがあるので詳細は省く。
一番簡単に実装できるデモザイクアルゴリズムとしてはBiLinear補間法かと思う。
デモザイクの詳細は省くとしても、ポイントとしては補間している、つまり存在しない値を使っているということだ。
存在しない値を補間すると何が起こるのかというと、モアレやアーティファクトと呼ばれる画像特有のエイリアシング現象が起こる。
これらは、本来存在しない模様や色が画像中に出てくることを指すのだが、これらの影響をいかに小さくするのかというのがデモザイクアルゴリズムの課題でもあった。
では、これらの影響を無視するためにはどのような方法があるのかというと答えはシンプルだ。
1画素に含まれるR,G,Bすべての情報を入手できればいい。しかし、一度の撮影ではそれは不可能であることは簡単に想像がつくと思うが、どうにかして1画素のRGBすべての情報が欲しい、ということでいろんな方法が編み出されていく中で登場したのがこのPixelShiftである。
というわけでこのPixelShiftが何をやっているのかやっと本題に入れる。
#PixelShiftとは何なのか
先ほどまでの説明でPixelShiftがなにを目的としているのかは分かったと思うが、ではこの技術は何をしているのか。
PixelShiftとは、ずばりセンサを直接動かして高速で複数枚撮影する技術である。
何とも原始的な発想ではあるが、この技術のすごいところはセンサを制御する際にきっちり1ピクセル分だけ動かすというところだろう。
PixelをセンサがShiftしているからPixelShiftと、まぁそのままではあるがこれがこの技術である。
この時のGの値に関しては使用するソフトウェアでどのように取り扱うかが変わってくるかと思うが、補間を一切していないため偽色などがなくなるというのがこの技術のおいしいところである。
PixelShift撮影を行うのに適している環境としては動かないものを撮影する時である。風景なども撮影可能だが、風が強い環境下などに撮影しようと思うとゴーストなどが発生する可能性がある。
#結論
PixelShiftとはデモザイクフリーとなるセンサー制御システムのことであると言えるだろう。
何か間違った部分などがあればご指摘いただくと幸いです。