OpenCVで学ぶ画像認識

第1回画像認識の基本を知ろう

この連載の目的

こんにちは。この連載を担当することになった、ジェイマジック株式会社の皆川と申します。この連載では、"画像認識技術って何?"というところから、実際にコーディングしてオブジェクト認識を行うまでを扱いたいと思います。

最近、デジカメの顔検出機能などで、私たちにとって身近になりつつある画像認識技術ですが、Web技術など他のIT技術と比べてしまうと、まだまだ研究色の強い分野です。そのため、本当に自分で一から動くものを作ろうとしたら、数学などの専門知識が必要になりますし、この短い連載の中で扱うのは非常に難しいです。

そこで、この連載ではOpenCVという便利なツールを使いながら、プログラミング知識以外の専門知識を必要としない形で、画像認識技術について解説していきたいと思います。

第1回目の今回は、画像認識技術の概要について解説します。

画像認識って何?

そもそも画像認識とはなんでしょうか?

この連載を読んでいる方には説明不要かもしれませんが、画像というのはコンピュータ上では、全て「ピクセル」という単位で扱われています。コンピュータは、⁠このピクセルは赤、このピクセルは青、……」ということは理解しているのですが、⁠この画像には人の顔が映っている」というのは理解できません。このようにコンピュータに画像に何が映っているのかを理解させるのが、画像認識技術になります。いわば、人間が当たり前に行っている視覚の機能をなんとかコンピュータに持たせようという研究分野とも言えます。

図1 コンピュータの理解している画像
図1 コンピュータの理解している画像

画像の内容をコンピュータに理解させるためには、ピクセルの集合からなんらかのパターンを抽出しなくてはなりません。つまりピクセルを個別に見ていくのではなく、一つの集合として見て、その集合が持つパターンによって、画像が何を表しているのかを判断する必要があります。

このように、信号のパターンから意味を抽出することを「パターン認識」と呼びます。⁠パターン認識」は画像認識だけでなく、音声認識や言語解析など、ある信号から意味を抽出する処理全般を指します。

画像に関する研究分野

画像認識技術は、学会などでは「コンピュータビジョン」という分野の中で扱われています。有名な学会としては、毎年アメリカで開催されるCVPR(IEEE Computer Society Conference on Computer Vision and Pattern Recognition)や2年に一度開催されるICCV(IEEE International Conference on Computer Vision)などがあり、日本でも電気情報通信学会や情報処理学会などで盛んに研究が行われています。

先ほど、画像認識技術は画像に何が映っているのかをコンピュータに理解させることだと書きましたが、この「理解」にも2通りあります。一つはその画像が「何」であるかを何らかのシンボル(例えば「顔」⁠自動車」⁠文字」のような単語)として表したり分類したりする方法。もう一つはステレオカメラや動画像、画像の陰影などから、画像に映っているオブジェクトやシーンを三次元モデルとして復元する方法です。画像認識と言う場合は前者をさし、後者は画像理解や三次元復元などと呼ばれます。

また、⁠画像処理」という言葉もこれらの用語と混同して使われることが多いですが、これも意味が少し異なります。画像処理には認識は含まず、例えば画像をぼかしたり、逆に輪郭などのエッジ部分を強調したり、モザイクをかけたりといった、画像を変換して別の画像を作成する処理のことをさします。

図2 画像処理の例(エッジ抽出)
図2 画像処理の例(エッジ抽出)
図3 画像認識の例(顔認識)
図3 画像認識の例(顔認識)
図4 画像理解の例(三次元復元)
図4 画像理解の例(三次元復元)

コンピュータビジョンという言葉は主に「画像理解」をさすようですが、コンピュータビジョンの学会や論文誌などでは、これら画像認識、画像理解、画像処理が全て扱われてます。実際、例えば画像処理によって画像から特徴を抽出して認識を行ったり、画像認識の結果を元に画像理解を行うなど、3つの領域がお互い深く関係し合っています。

表1 画像処理・認識・理解
用語意味
画像処理 画像に対して数学的な変換処理をかける
画像認識 画像をパターンに基づいて認識・分類する
画像理解 画像(2次元)から、被写体の三次元情報を復元する

この連載では、この表で言う画像認識技術を主に扱いますが、どの技術も非常に活発に研究されており、様々な分野で実用化されています。

画像認識・理解の基本原理

画像認識の基本原理

画像認識は、学習のフェーズと認識のフェーズの2つからなります。学習のフェーズでは、コンピュータに認識させたい対象画像を学習させる処理を行い、認識のフェーズではコンピュータに入力画像が学習した対象かどうかを判定させます。

図5 学習と認識の流れ
図5 学習と認識の流れ

学習フェーズ

学習のフェーズでは、まず画像になんらかの処理を施して、ピクセルのデータ列から、より学習に適したデータ列(特徴量データ)へと変換を行います。

次に変換されたデータを、機械学習と呼ばれるアプローチを用いてコンピュータに学習させます。機械学習とは、その名の通り人間が行っているような学習の仕組みをコンピュータに持たせるための技術です。例えば人間は、初めて見る人の顔画像でも、それが「顔」だとわかりますが、コンピュータはあくまでピクセルデータとして画像を処理してますので、今まで学習された画像のピクセルデータと同じかどうかは判定できても、それが「顔」と呼ばれるものかどうかは判定できません。機械学習を用いれば、入力データ群の中から共通のパターンや判別ルールなどを抽出でき、これにより学習データ以外の未知のデータに対しても、ルールに基づいたなんらかの判定ができるようになります。

認識フェーズ

認識のフェーズでは、学習フェーズで用いたものと同様の手法で入力画像を特徴量データへ変換します。そして、変換されたデータを機械学習で抽出された判別ルールに基づいて、そのデータが何を表しているかを判別します。

画像認識の用途によっては、認識対象に関する知識を認識フェーズのアルゴリズムの中に内包させることで、学習フェーズを省いてしまうものもあります。例えば単純に円や直線などを画像から検出したい場合は、円や直線の数式を認識アルゴリズムの中に埋め込んでしまうので、学習フェーズは特に必要ありません。

また、学習画像の中から入力画像と最も近い画像を探してやりたいといった場合は、機械学習を使わなくても学習画像の特徴量と入力画像の特徴量との距離を計算することで、欲しい結果を得ることができます。

なお、機械学習を用いた画像認識のより具体的な方法については、今後の連載の中で触れていきたいと思います。

画像理解の基本原理

画像理解の基本原理は、⁠三角測量の原理」です。

下の図のように、2台のカメラで同じ対象を撮影したとします。対象上の点Aは、カメラ1で撮影した画像とカメラ2で撮影した画像とでは、それぞれ見える位置が異なります。2つのカメラの位置とそれぞれのカメラの焦点距離がわかっていれば、点Aのそれぞれのカメラでの見え方の違いから、点Aの三次元的な位置を計算することが可能です。

このような手法はステレオビジョンと呼ばれており、ほとんどの三次元復元技術はこの技術を応用したものになります。

図6 ステレオビジョンの原理
図6 ステレオビジョンの原理

実は人間もこれと同じ原理で、両目で見ることによって対象までの距離を測っています。片目だと距離感が掴みづらくなるのはこれが原因です。

ただし、三次元復元を行うためには、必ずしもカメラが2台以上必要なわけではなく、例えば動画像を用いることでカメラが複数台ある場合と同じ原理で復元を行うこともできます。また、カメラの位置や焦点距離などの情報が未知であったとしても、対象上の点がそれぞれのカメラのどこに見えているかの対応を取ることができれば、それらのパラメータを計算することが可能です。

ステレオビジョンの原理以外でも、三次元復元を行う方法は色々と研究されています。例えば撮影対象の影の状態から三次元復元を行うShape from Shadingと呼ばれる方法や、撮影対象に関する事前知識を用いることで1枚の屋外画像や顔画像の三次元復元を行うような研究も存在します。

身の回りにある画像認識・理解の技術

画像認識・理解の技術は長らく、工場などの産業用に使用されることが多かったのですが、近年コンシューマ市場にも多く見られるようになってきました。ここではその一部をご紹介したいと思います。

OCR

おそらく、もっとも古くからコンシューマ市場で利用されている技術は文字認識技術でしょう。スキャナを購入すればほとんどの場合、OCRソフトウェアが一緒についてきます。

また、ZaurusなどのPDAにも、タッチペンで文字が入力できるようにOCRが組み込まれています。

なお、最近ではGoogleがOCRを使用した画像タギングに特許を申請したり、Evernoteというネット上に自分に関するあらゆるメモを残そうというコンセプトのソフトにおいて、自分のアップした画像をOCRで文字認識してインデックスをつけてくれるなど、従来の使い方とは違った、インターネットと組み合わせた使われ方が注目を集め出しています。

デジカメ、顔ちぇき!

図7 ⁠顔ちぇき!』画面イメージ
図7 『顔ちぇき!』画面イメージ

ここ数年で急速に実用化が進んだのが顔認識技術です。今やデジタルカメラに顔認識に基づいたオートフォーカスや画像補正は当たり前の機能になりました。最近は顔を検出するだけでなく、笑顔を検出する機能も提供されているのは皆さんご存知のとおりです。

また、手前味噌で恐縮ですが、弊社ジェイマジックで展開している顔ちぇき!~誰に似てる?~™は顔を認識するだけでなく、それが誰であるのかと言う「顔認証」の機能を応用して、ユーザの顔が有名人の誰と似ているかを判定してくれるモバイルサイトです。それまでは入退出管理などセキュリティ用として研究されてきた顔認証機能をエンターテイメントに応用することで多くの利用者を得ることができました。

広告キャンペーン

雑誌や看板などの印刷媒体を携帯電話のカメラで撮影すると、その画像が何かを認識して、画像に合わせたキャンペーンサイトへ誘導するというマーケティング手法が、様々なところで導入されています。

これは、あらかじめデータベースに登録した画像とカメラで撮影された画像が同一かどうかを判別する、オブジェクト認識という技術を使うことで実現されています。

これまた、弊社サービスで恐縮ですが、弊社の画像認識プラットフォームSAYL™は、このようなキャンペーン向けにも多数使用されています。

参考:
サンスターのブランド認知キャンペーンに提供(IT Media)

またジェイマジック以外でも、携帯カメラを使用したオブジェクト認識のソリューションとして、インデックスソリューションズの「PicLin⁠⁠、D2Cとバンダイの「ERサーチ⁠⁠、NTTデータの「パッとび⁠⁠、ゼータブリッジの「フォトナビ」などを各社が提供しています。

映画・ゲーム

モーションキャプチャという技術は皆さんも聞いたことがあるのではないでしょうか? 体にマーカーをつけることで、人間の三次元的な動きを正確にコンピュータに取り込む技術で、映画やゲームの世界では昔から使われています。特に最近の三次元ポリゴンでキャラクターを表現するリアル指向のゲームでは、モーションキャプチャを使うのは当たり前になりました。最近では、マーカーをつけずに人体の動きを取り込む技術も開発されつつあります。

参考:
東芝のマーカレスモーションキャプチャについて(IT Pro)

また、映画「Matrix」で、主人公ネオがエージェントスミスの弾丸を避ける有名なシーンを覚えてますでしょうか。ネオが弾丸を避けた瞬間動きが止まり、カメラがぐるっとネオの周りを回りますが、これはImage Based Renderingと呼ばれる、複数枚の画像からその画像間の三次元的な視点を復元する技術を使用しています。

参考:
Image Based Rendering by Paul Devebec (SIGGRAPH'97)(YouTube)

車載カメラ

自動車にカメラを載せて、道路の白線を検知をしたり、歩行者を検知したりといったドライバー支援の技術は、ITS(高度道路交通システム)などの分野で長いこと研究されていましたが、最近は市販の自動車にも搭載されるまでになりました。

例えば、トヨタのレクサスには、駐車のための駐車枠検出や、ドライバーの脇見運転検知、ステレオカメラによる障害物検知などが搭載されています。

終わりに

というわけで、今回は画像認識・理解の技術について、その概要と実用例を解説しました。次回以降はOpenCVという画像処理ライブラリを使って、実際にプログラミングを通して画像認識を学んでいきましょう。

おすすめ記事

記事・ニュース一覧