第4回目からは技術的な内容です。まずは、ハードウェアの構成について紹介します。「早く本題のコンピュータビジョンについて解説してくれよ!」という方、もう少しお付き合いください。

概要

下図にカメラとコンピュータの概略を示します(赤字は必須)。まず、入射光中から不要な反射光(水溜まりや窓ガラスなどによる反射)を偏光フィルタ(PLフィルタ)によりカットします。そして、レンズを通って来た光を、撮像素子上のマイクロレンズで各画素ごとに集光し、撮像素子上のカラーフィルタを通って撮像素子で電荷に変換します。電荷は、デジタルデータに変換された後、コンピュータに入力されます。その後、メモリ上のデジタル画像データをCPU、必要に応じて専用プロセッシングユニット(GPUなど)を用いて処理します。

図1 ハードウェア構成の概略図

コンピュータの構成

PC

PCで処理する場合は、デスクトップPC、あるいはノートPCが図1のコンピュータに該当します。専用プロセッシングユニットは、NVIDIA社製のGPU(Graphics Processing Units)が有名で、CUDAと呼ばれるGPU向けの開発環境が提供されています。オープンソース画像処理ライブラリのOpenCVでは、一部ではありますがCUDAに対応した処理が用意されています。近年、機械学習の分野で注目を集めているDeep Learning(深層学習)のフレームワーク(CaffeやChainerなど)でもGPUを用いることで高速処理が可能になっています。

スマートフォン、タブレット、組込み機器

スマートフォン・タブレットや、自動車やドローンなどの組み込み機器では、計算リソースがPCと大きく異なります。モバイル機器では、消費電力、発熱、コストに対してシビアなため、一般的にPCやスマートフォンより非力なCPU、容量の小さなメモリを使うことになります。そこで専用プロセッシングユニットがリアルタイム処理で重要となります。モバイル機器では、画像処理専用のASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)、モバイル向けのGPU(NVIDIA社のTegraや、ARM社のMali)を使うことになります。それらを1チップにまとめたSoC(System on Chip)を用いることもできます。

製品の販売台数が多く、かつ独自の処理をハード化したい場合は、ASIC、SoCを開発するという手もあります。しかし開発コストが高額であるため、販売台数が少ない場合には既製品のSoC、あるいはプログラマブルなFPGAを用いたほうが良いでしょう。

撮像素子

撮像素子には、CCDセンサーとCMOSセンサーがあります。どちらもフォトダイオードで入射光を電荷に変換する点では同じです。光を集光するためのマイクロレンズ、カラー画像を撮像するためのカラーフィルタが各画素上に組み込まれていることも同じです(マイクロレンズ、カラーフィルタは、撮像素子製造時に撮像素子上に実装されますので、ユーザーはあまり意識する必要はないのですが、撮像素子の仕組みを理解することを目的に本連載では触れています)。

CCDセンサー

CCDセンサーは、各画素で電荷をバケツリレーで伝送し、別チップのA/Dコンバーターでデジタルデータに変換します。CCDセンサーは、ノイズが少ないのですが、構造が複雑であるためCMOSセンサーに比べて一般的に高価です。また、バケツリレーで電荷を伝送するため、撮像素子の解像度が高すぎると、バケツリレーが間に合わなくなってしまうという問題や、電荷が飽和してしまうと周囲の画素にその電荷が漏れ出してしまうスミアという現象が発生してしまいます。

CMOSセンサー

一方、CMOSセンサーは、各ピクセルが独立して電荷を増幅したり、A/D変換回路を持ち、デジタル信号を出力します。構造がシンプルで汎用的な半導体製造技術を用いることができるため、CCDに比べ安価なセンサーです。ノイズ除去回路などさまざまな機能を撮像素子に組み込むことができることも大きなメリットです。昔は、CMOSはノイズが多いと言われていましたが、近年では実用的にまったく問題ないレベルの画質で撮像することができます。

単板式

図1のカラーフィルタとして、図2に示すベイヤーパターンと呼ばれる赤、緑、青を交互に各ピクセル上に配置したフィルタを用いる方式です。この方式では、近傍の画素の情報を用いて補間演算によりベイヤーパターンから色を復元するデモザイキングという処理が必要になります。USBカメラなどでは、CMOS撮像素子内またはカメラモジュール内でデモザイキングを施し、カラー画像が出力されるので、ユーザーはあまり気にすることはないでしょう。

図2 ベイヤーパターン

きれいなカラー写真を撮るという以外の特定の用途向けに、ベイヤーパターン以外のカラーフィルタを用いることもあります。たとえば、自動車向けのカメラセンサメーカーとして有名なMobileye社は赤(R)とクリアー(C)を組み合わせたフィルタ(RCCC、RCC)を採用しています。潤沢な資金が用意できる場合は、特注のフィルタを組み込んだ撮像素子を、撮像素子メーカーに作ってもらうこともできるでしょう。

また、カラー情報が一切必要なくモノクロで良いのであれば、モノクロの撮像素子を選択することをお勧めします。カラーフィルタは抽出したい色の周波数帯以外の光をカットしてしまいます。つまり、カラーフィルタにより撮像素子に届く光量が減ってしまいます。モノクロ撮像素子は、カラーフィルタによる光の減衰が無いため、暗い環境でノイズの小さい画像を撮ることができます。

3板式

ベイヤーパターンでは、赤、青、緑を交互に各ピクセル上に配置するため、デモザイキング処理が必要でした。デモザイキング処理は、近傍の画素の情報を用いて補間演算が必要です。この「補間演算」が原因で、画像にボケが発生してしまいます。

この問題を解決するのが3板式です。名前のとおり、撮像素子を3枚用います。プリズムで色を三原色(RGB)に分解し、それぞれの色を各撮像素子で撮像します。この方式では、よりリアルで高精細な画像を撮影することができますが、サイズが大きく、高価であることから放送局向けなどのプロ用機材に限られています。

撮像素子のサイズ

デジタルカメラでは、フルサイズ(35mm)、APS-H、APS-C、フォーサーズ、CXフォーマット、2/3インチ、1.7/3、1/1.7、1/2.33などさまざまなサイズがあります。スマートフォンでは、1/2や1/2.6などの撮像素子が用いられ、自動車用途では1/3といったより小さい撮像素子が用いられます。画質的には、撮像素子が大きい方が有利です。撮像素子が大きいということは、各画素のサイズも大きくなるため、その分各画素が受ける光量が多くなる訳です(画素数が同じという条件で)。しかし、撮像素子が大きくなると、レンズも大きくなり、価格も高くなってしまいますので、大きさ、価格、必要な解像度などを考慮して撮像素子を選定すると良いでしょう。

コンピュータビジョンに必須なカメラ、コンピュータの構成を理解していただけたでしょうか? 普段はあまり意識する必要のない内容ですが、カメラやレンズ、プロセッサーを選定する際に必要になることもありますので、頭の片隅に留めておいてください。

著者プロフィール

樋口未来(ひぐち・みらい)
日立製作所 日立研究所に入社後、自動車向けステレオカメラ、監視カメラの研究開発に従事。2011年から1年間、米国カーネギーメロン大学にて客員研究員としてカメラキャリブレーション技術の研究に携わる。

現在は、日立製作所を退職し、東京大学大学院博士課程に在学中。一人称視点映像(First-person vision, Egocentric vision)の解析に関する研究を行っている。具体的には、頭部に装着したカメラで撮影した一人称視点映像を用いて、人と人のインタラクション時の非言語コミュニケーション(うなずき等)を観測し、機械学習の枠組みでカメラ装着者がどのような人物かを推定する技術の研究に取り組んでいる。また、大学院での研究の傍ら、フリーランスとしてコンピュータビジョン技術の研究開発に従事している。

専門:コンピュータビジョン、機械学習