東芝のLight Field Camera

 朝日新聞によれば、東芝スマートフォン向けの小型のカメラモジュールを開発し、2013年度中の実用化を見込んでいるそうです。

Toshiba putting focus on taking misfocusing out of photos

The cube-shaped module is about 1 centimeter per side and contains a dense array of 500,000 lenses, each 0.03 millimeter in diameter, in front of an image sensor measuring 5 mm by 7 mm.

(中略)

Each lens captures a slightly different image from one another, and the camera produces a large, complete picture by using original software to combine the 500,000 tiny images.

記事によれば、

  • 5mm×7mm角のセンサの前に、直径0.03mmのマイクロレンズを50万個並べている
  • 各レンズは微小な差異を伴う画像を記録し、これを合成することで1枚の画像を作成している
  • 視差を用いて距離が測定できる
  • 全焦点画像を作成できる

とのことなので、Focused Plenoptic Cameraと見られます。尚、センササイズとマイクロレンズの直径から計算すると50万個並べるのは難しいように思えるので、記事が正しいのであればどういう構成になっているのか非常に興味深いところです。(5万個なら分かりますが…)

 上述の記事に添付されているサンプル画像を見る限りでは、現時点では画質にかなり難がありそうです。画像サイズは小さいですし、Lytro同様露光量の制約からかノイズがかなり乗っているようです。実用化に向けて技術を詰めている段階でしょうから、今後に期待したいところです。


 さて、上記の情報から公開されていない幾つかの情報について勝手に想像してみたいと思います。

1. センサの解像度について
 センササイズは以前のTechCrunchの記事を参考にするとLytroより若干大きく、一般的なコンパクトカメラ(1/2.3") 並みのようです。東芝はちょうど12/26に新しいCMOSセンサのプレスリリースを出してことから、2000万画素程度と推測します。

2. 画像サイズについて
 以前の記事で述べたように、Focused Plenoptic Cameraは焦点深度によって作成できる画像サイズが異なります。このため一概には言えないですが、とにかくマイクロレンズの数が多いことから、micro-image内から切り出せるパッチの面積率はそれなりに高いものと推測します。(空間分解能を優先し、光線方向の分解能はある程度犠牲になっているものと考えます) 1つのmicro-imageあたり2x2画素として200万画素程度と見積もることにします。個人的には500万画素近くあれば文句はないので、期待を込めて3x3画素x50万個=450万画素としたいところですが、画像が非常に暗く明るさを稼ぐ観点からも解像度が犠牲になっても仕方ないかなと思います。

3. ボケについて
 センササイズの割りにマイクロレンズ数が多いため、光線方向の解像度が落ちるだけでなく、micro-imageの画角もかなり狭いのではないかと懸念しています。この場合、私が以前説明した方法でmicro-imageを合成すると被写界深度が深い画像ができることになります。記事のサンプル画像を見る限りでは被写界深度は浅く見えるため、後処理でぼかしている可能性があります。サンプル画像の解像度が低すぎるので確証は持てませんが、被写体のメガネの縁のボケ方に違和感を覚えるので、この様に疑っています。(ユーザには余り関係のない、視差に基づく距離計測に触れられていることも、このように考える一因です)


 いろいろと勝手な想像をしてみましたが、いずれにしてもこれほど小さくパッケージングしたことは驚異的で、性能と価格しだいではありますが応用先が広がりそうです。開発に携わっている方には是非頑張っていただきたいものです。

 予断ですが、サンプル画像はもう少し被写体を選べなかったのでしょうか。(写っている方には申し訳ないですが) 画質とも相まって、意図しないリークだったのか、鶴の一声で公表することになったのか、裏事情を勘ぐってしまいます。

Image Deblurring (2) : Non-Blind Deconvolution (Spatial Domain)

 前回は周波数領域におけるnon-blind deconvolutionを紹介しました。今回は空間領域におけるnon-blind deconvolutionについて見ていきたいと思います。先にも述べたように、逆畳み込みは不良設定問題であるため解くことできません。ですが、回帰的に近似解を求めるアプローチは多数提案されています。ここでは代表的な二つの手法を取り上げます。

1. Lucy-Richardson法

 RichardsonとLucyにより独立に提案された手法で、あるカーネルを仮定したときに観測画像を与える最も尤もらしい画像を推定し、元画像とするものです。t番目の繰り返しにおいて推定された元画像f(x,y,t)、観測画像f(x,y,0)、blurカーネルb(x,y)とすると、t+1番目の繰り返しにおける元画像の推定値は次式で表されます。

f(x,y,t+1) = f(x,y,t)・[ b(x,y) * { f(x,y,0) / ( b(x,y) * f(x,y,t) ) } ]

つまり、観測画像と推定画像とにそれぞれblurカーネルを適用した結果の比が1に近づくように推定画像を更新していくことになります。

 ガウシアン・カーネル(σ=5)でボケさせた画像に本手法を適用した結果をFig.1に示します。繰り返し回数tが増すごとに高周波成分が復元されていく様子が見て取れます。(画像端部の処理は省略してあります) 但し、繰り返しごとに画像全体をぼかすため計算コストは非常に大きくなります。



Fig.1 Deblurred with Lucy-Richardson method

2. Iterative Back Projection法

 Lucy-Richardson法と基本的には同じ考え方ですが、観測画像と推定画像とにそれぞれblurカーネルを適用した結果の差が0に近づくように推定画像を更新していく手法がIterative Back Projection (IBP)法です。
 t+1番目の繰り返しにおける元画像の推定値は次式で表されます。


f(x,y,t+1) = f(x,y,t) + α[ f(x,y,0) - b(x,y) * f(x,y,t) ]

但し、αは変化量を制御する係数です。ここでは定数としていますが、空間的にばらつきを持たせることも可能です。尚、お気付きの方もいるかもしれませんが、この手法の繰り返し回数を1回とすると所謂Unsharp Maskと等価になります。

 先程と同様に、ガウシアン・カーネル(σ=5)でボケさせた画像に本手法を適用した結果をFig.2に示します。やはり繰り返し回数tが増すごとに高周波成分が復元されていく様子が見て取れます。



Fig.2 Deblurred with Iterative Back Projection method

 サンプルプログラムを置いておきます。deblur_vs2008.zip 直
(Microsoft Visual C++ 2008 Express Editionにて作成、OpenCVの2.1を使用)
以下留意点を記載しておきます。


[参考文献]
[1] 篠原, "超解像度技術を用いた画像鮮明化システムの開発", AA&S社公開資料

Image Deblurring : Non-Blind Deconvolution (Frequency Domain)

 もう一月ほど前になりますが、SmartDeblurというアプリケーションが話題になりました。SmartDeblurはVladimir Yuzhikov氏により開発された画像のボケやブレを補正するツールです。背後にある技術自体は古くから知られたものですが、直感的なUIによりこの技術に詳しくない人にも使えるものとしたことで、処理結果のインパクトと相まって様々な技術系ニュースサイトに取り上げられていました。同氏のサイトに詳しい説明もありますが、ベースとなる技術は他にも使いまわしのできるものであるため、取り上げてみたいと思います。

 blurというとボケと訳されることが多いですが、デジタル写真では一般にはボケ(defocus aberration)とブレ(motion blur)をまとめてこう呼ぶケースが多いようです。前者は光学系の特性からくるもので、後者は撮像系と被写体との相対な位置関係からくるものです。ブレは更に手ブレなど撮像系に起因するものと被写体が撮像系に対して相対的に移動して生じるもの(被写体ブレ)とに分けることができます。ここではブレとボケをまとめてblurと呼びます。

 ボケもブレも基本的な原理は同じであり、前者は空間的に、後者は時間的に光線の記録位置がばらつき、このばらつきを持って記録されることで生じます。この過程はフィルタなどと同様に、異なる位置の情報が1点に合成されることから畳み込み(convolution)と呼ばれます。また、この畳み込まれ方をカーネル(convolution kernel)と呼びます。

 さて、ボケたりブレたりした画像から元の画像を復元するためには、この畳み込みの逆過程である逆畳み込み(deconvolution)を行う必要があります。逆畳み込みは主に、カーネルの推定と元画像の復元の二つのステップから成ります。カーネルが未知の条件で行う逆畳み込みをblind deconvolutionと呼び、逆にカーネルが既知の条件で行う逆畳み込みをnon-blind deconvolutionと呼びます。ここでは後者を扱うことにします。

 逆畳み込みは空間領域で行うことも出来ますが、基本的に不良設定問題であることから解くことは容易ではありません。一方、周波数領域では畳み込み定理(convolution theorem)を用いることで比較的容易に元画像を復元することが可能です。畳み込み定理についての詳細は割愛しますが、空間領域における畳み込みは周波数領域における掛け算と等価である性質があります。
 まず空間領域において、元画像f(x,y)、blurカーネルb(x,y)、ノイズn(x,y)とすると、観測画像g(x,y)は次式のように表せます。("*"は畳み込みを表す)

g(x,y) = b(x,y) * f(x,y) + n(x,y)

周波数領域の元画像F(u,v)、blurカーネルB(u,v)、ノイズN(u,v)、観測画像G(u,v)とすれば、畳み込み定理から、"b(x,y) * f(x,y) ⇔ B(u,v)・F(u,v)"と置き換えることができ、したがって前式は次のように書き換えることができます。

G(u,v) = B(u,v)・F(u,v) + N(u,v)

この性質を利用することで、(ノイズを無視すれば)畳み込みは周波数空間における画像とカーネルの乗算、逆畳み込みは周波数空間における画像とカーネルの除算として計算することができます。尚、これらは画像対して同一のカーネルを作用させることになりますので、Bilateralフィルタなどの適応的な処理には利用できません。

 ボケやブレの補正(deblur)の補正は逆畳み込みですので、仮にノイズを無視すれば次式のように計算できます。


F(u,v) = G(u,v) / B(u,v)

これは即ち、次のような手順で実現できることになります。

  1. 入力画像とカーネルを離散フーリエ変換する
  2. 変換された入力画像を同じく変換されたカーネルで割る
  3. 2の結果を離散逆フーリエ変換する

 Fig.1に周波数空間で畳み込み及び逆畳み込みを行った結果の例を示します。相対的に小さいσの値では元画像を良好に復元できていることが分かります。一方、σが大きくなるほど高周波成分が復元できなくなると共に、エッジ周辺に輪郭が多重に出現するringingと呼ばれる現象が生じていることも見て取れます。



Fig.1 blurring and deblurring samples

 今回行った逆畳み込みではノイズが存在しないことを仮定したため、余り実用的ではありません。ノイズまで考慮した逆畳み込み手法も多数提案されていますので、このあたりは後日アップデートしていきたいと思います。


 サンプルプログラムを置いておきます。deblur_vs2008.zip 直
(Microsoft Visual C++ 2008 Express Editionにて作成、OpenCVの2.1を使用)
以下留意点を記載しておきます。

Focused Plenoptic Camera (5)

 Lytroのアプリケーションが(ようやく)視点移動に対応し、AsiaDにてお披露目されたようです。ただ現時点では技術デモの段階のようでLytroのオフィシャルブログの記事によれば一般には公開してはいないようです。

 この記事を読んでいて、ふとFocused Plenoptic Cameraの視点移動を試していなかったことに気がつきました。以前参考にしたTodor Georgiev氏らの論文には特に記載されていないようですが、GPU Technology Conference 2010の講演資料に説明があったので、これを参考に実装してみました。

 視点移動の原理は極めてシンプルです。Focused Plenoptic Cameraは仮想的なマイクロカメラのアレイなわけですから、それぞれのマイクロカメラの開口の位置をずらせばよいのです。つまり、画像をレンダリングする際にmicro-image群から切り取るパッチの位置を変えれば、マイクロカメラの開口の位置を仮想的に変えていることになり、これに従ってメインレンズの開口も移動し、視点移動が実現できます。
 Fig.1は中心を基準としてmicro-imageからのパッチの切り出し位置を+5画素、±0画素、-5画素の3パターンずらしてレンダリングした画像をアニメーションGIFとして束ねたものです。尚、単に切り出し位置を変えるだけでは被写体も全体的にシフトしてしまうため、これをキャンセルするようレンダリング結果を逆向きに移動してあります。若干ですが女の子と背景との位置関係が変化していることが見て取れます。



Fig.1 choosing view of focued plenoptic camera

 ところで、以前の記事を久しぶりに見返していたらボケが矩形で何となく嫌だったので、今回の実験ではパッチの切り出し方を円形に変えてみました。(より正確にはガウシアンで重み付けしています) ボケ方が若干甘くなっているものの、一般的なデジタルカメラに近い結果となっています。任意の形状でパッチを切り出せば、その形状の絞りに相当するボケが実現できるはずです。無論、レンダリング時に画素値が欠損しないように留意する必要がありますが。
 もう一点、深度マップに不連続な箇所が散見されるため、micro-image間の視差をテンプレートマッチングでない別の手段で検出することも検討してみたいと思っています。


[参考文献]
[1] A.Lumsdaine, G.Chunev, T.Georgiev, "Computational Photography: Real Time PlenopticRendering", NVIDIA GPU Technology Conference, September 2010

AdobeとComputational Photography

 先日、Focused Plenoptic Cameraの開発者であるTodor Georgiev氏がAdobe Systems社からQualcomm社に移ったと書きました。私が見る限りでは、同氏はAdobe Systems社のPlenoptic Camera開発の中心人物のようなので、同社はこの分野から少し距離を置くのかもしれません。(Computational Photographyからという意味ではなく、そのサブセットとしてのLight Field Photographyからという意図です。)

 この件でふと次のエントリを思い出したので紹介しておきます。

もう2年以上前のもので、上記した私の予想が正しければ今更感がありますが、コンピュータ・ソフトウェア会社であるAdobe Systems社が何故この分野に力を入れているか(いたか)を考える上で良い材料になるかと思います。
 FrankencameraStanford大学で開発されているComputational Photographyの研究用途を主目的とするオープンソースのカメラ・プラットフォームのことで、Adobe Systems社もスポンサーに名を連ねています。仮にAdobe Systems社がこのような共通のカメラ・プラットフォームを足がかりにビジネスの拡大を目論んでいたのだとすれば、昨今のコンパクトデジカメの急激な低価格化やスマートフォンの躍進によって旨みが薄れてしまい、これがハードウェアから手を引くきっかけになったとも考えられそうです。まぁ、様々なアプリを搭載できるスマートフォンそのものが新しいカメラ・プラットフォームとも言えるのかもしれません。デジタル一眼レフカメラスマートフォンから操作できるアプリも公開されていますし。

Focused Plenoptic Camera (4)

 Todor Georgievらがfocused plenoptic cameraの新たな応用についての論文を公開したので紹介したいと思います。
 従来のfocused plenoptic cameraはマイクロレンズ・アレイを構成する全てのレンズは同じ焦点距離を持っており、メインレンズにより結像された像に焦点が合うようにレイアウトが構成されていました。このため得られる画像の被写界深度はメインレンズのもの同等となり、リフォーカスできる範囲を制限していました。そこで、異なる焦点距離のレンズを組み合わせてマイクロレンズ・アレイを構成することにより、1台のカメラでありながら同じシーンの異なる深度に焦点が合った画像が得られるようにしたのが、multi-focus plenoptic cameraの特徴です。
 Fig.1は文献[1]で使用された2種類の焦点距離を持つレンズから成るマイクロレンズ・アレイの写真です。ここではレンズの直径を変えることにより焦点距離を制御しているようです。



Fig.1 microlenses with different focal lengh
(出展:文献[1])

 Fig.2はFig.1のマイクロレンズ・アレイを用いて撮影した画像です。くっきりとした画像とボケた画像とが交互に並んでおり、対応するマイクロレンズの焦点距離の差が見て取れます。


Fig.2 captured image with multi-focus plenoptic camera
(出展:文献[1])

 このlight field dataから、それぞれの焦点距離のマイクロレンズに対応するmicro-imageを用いて画像を作成した例をFig.3とFig.4に示します。Fig.3は遠くにある車の領域を、Fig.4は近くにある花の領域をそれぞれ切り出したものです。いずれの図でも、左側は直径が相対的に大きいマイクロレンズの、右側は直径が相対的に小さいマイクロレンズのmicro-imageから作成されています。尚、この画像を撮影した時のメインレンズのフォーカスは花の領域に合っているようです。



Fig.3 rendered image (car)
(出展:文献[1])


Fig.4 rendered image (flower)
(出展:文献[1])


 Fig.3の左側はボケていますが、右側は比較的くっきりと写っています。一方、Fig.4では左右共にくっきりと写っています。この差が生じた原因はマイクロレンズの大きさであり、直径が大きい方が絞りを開放して撮影した条件に相当し、直径が小さい方が絞って撮影した条件に相当するため、後者の方が被写界深度が深くなり広い深度に焦点が合うのです。
 この特性を利用して、メインレンズのフォーカスを合わせた位置の近傍でリフォーカスをしたい場合には被写界深度の浅いマイクロレンズのデータを、そうでない場合には被写界深度の深いマイクロレンズのデータを、それぞれ利用することにより、従来よりもリフォーカスの範囲を広げることが可能となります。 リフォーカスされた画像の例をFig.5とFig.6に示します。Fig.5は車にリフォーカスをした画像で、Fig.6は花にリフォーカスをした画像になります。


Fig.5 rendered image car in focus
(出展:文献[]1)


Fig.6 rendered image flower in focus
(出展:文献[1])


 確かにそれぞれの領域がくっきり見えているのですが、Fig.5は被写界深度が深いせいで花もはっきりと見えてしまい、個人的には物足りない感じがあります。このあたりは2種類のmicro-imageをうまく合成することにより改善できるのかもしれません。
 用途をリフォーカスに限定しなければ、1台のカメラで1回の撮影で異なる被写界深度の画像が得られる分けですから、multi-focus plenoptic cameraはdual-focus stereo imaging(文献[2],[3])やfocus stacking(文献[4])などに利用できるかもしれませんね。

 ところで、Todor Georgiev氏はAdobe Systems社からQualcomm社に移ったようです。Qualcomm社といえば携帯電話向けの電子デバイス大手ですので、同社の今後の動向にも注目したいところです。


[参考文献]
[1] T.Georgiev, A.Lumsdaine, "The Multi-Focus Plenoptic Camera," SPIE Electronic Imaging, January 2012
[2] F.Li, J.Sun, J.Wang, J.Yu, "Dual-focus stereo imaging," Journal of Electronic Imaging, Vol.19, No,4, October-December 2010
[3] 守田, セイ, "異なる絞りの2枚の写真からの奥行きマップの推定," 画像電子学会誌, Vol.40, No.6, 2011
[4] S.W.Hasinoff, K.N.Kutulakos, "Light-Efficient Photography," IEEE Trans. on Pattern Analysis and Machine Intelligence, Vol.1, No.1, January 2011

Depth from Defocus (1) -Defocus Map Estimation from a Single Image-

 Depth from Defocus (DFD)を用い、1枚の画像から距離マップを推定する方法の1つとして、Shaojie Zhuoらは入力画像とその平滑化画像とのエッジ強度の変化度合いから距離マップを推定する手法(文献[1])を提案しています。
 画像におけるボケがthin lens modelに従うものと仮定すると、そのボケ量は点広がり関数(Point Spread Function, PSF)としてモデル化でき、一般にこのモデルとしてガウス関数が用いられます。撮影されたボケを含む画像を再度ぼかし、これに伴うエッジの潰れ方を分析することによってボケ量を推定することができます。(Fig.1参照) 例えば、元の画像で焦点が合っている領域はぼかすことによりエッジの勾配が劇的に低下しますが、元の画像で焦点の合っていない領域はぼかしてもエッジの勾配は余り変化しません。この様にして推定されたボケ量は、被写体のエッジ強度が一様で且つthin lens modelが仮定できる条件下では距離に比例することから、距離推定に利用できるのです。



Fig.1 blur estimating approach
(出展:文献[1])

 本手法の処理手順は次の通りです。

  1. 入力画像をガウシアン・カーネルでぼかし平滑化画像を作成する
  2. 入力画像と平滑化画像にCanny Edge Detecorを適用してエッジ検出を行う
  3. 2枚のエッジ画像の比を取り、疎なボケ量マップ(Sparse Defocus Map)を作成する
  4. Sparse Defocus MapにJoint Bilateral Filterを適用しノイズを除去する
  5. Sparse Defocus Mapの空白域をmatting Laplacianにより補間し、密なボケ量マップ(Full Defocus Map)を作成する

 結果の例をFig.2に示します。Fig.2のDefocus Mapは暗いほど近く、明るいほど遠いことを表しています。いずれもかなり密なDefocus Mapが得られていることが分かり、この手法の効果が窺えます。



Fig.2 defocus map
(出展:文献[1])

 彼らの手法はProjection Defocus Analysis(文献[2])やCoded Apertureを用いる手法(文献[3])などと比較して、従来の光学系に手を加えることなく距離マップが取得できることが特徴となっています。一方で、元々エッジ強度が弱い領域や平坦な領域に関しては、エッジがボケによって緩やかになったのか、そもそも勾配が緩やかなのか区別がつかないことから苦手としています。(Fig.3参照)



Fig.3 blur texture ambiguity
(出展:文献[1])

[参考文献]
[1] S.Zhou, T.Sim, "Defocus Map Estimation from a Single Image," Pattern Recognition, Vol.44, No.9, pp.1852-1858, (2011)
[2] F.Moreno-Noguer, P.N.Belhumeur, S.K.Nayar, "Active Refocusing of Images and Videos," ACM Trans. on Graphics, Vol.23, No.3 pp.67-75, (2007)
[3] A.Levin, R.Fergus, F.Durand, W.T.Freeman, "Image and Depth from a Conventional Camera with a Coded Aperture," ACM Trans. Graphics, Vol.26, No.3, pp.70-78, (2007)