.. _Features_Meaning: 特徴の理解 ************************ 目的 ===== このチュートリアルでは特徴とは何か,なぜ重要なのか,なぜコーナーが重要なのかなどについて学びます. 説明 ============== 皆さん,ジグソーパズルで遊んだことはありますよね?一枚の写真を細かく分割したパズルピースを正しく組み合わせて元の写真を作るゲームです. **どうやってパズルを解きますか?** というのが質問です.同じ理論をプログラムに置き換えてみればコンピュータはジグソーパズルを解けるでしょうか?もしもコンピュータがジグソーパズルを解けるのであれば,大量の自然画像をコンピュータに与えればコンピュータはたくさんの画像を自然につなげて更に大きな画像を作ることができるでしょうか?もしコンピュータが複数枚の自然画像をつなげることができるなら,大量の画像から被写体の3次元モデルを作成する事は可能でしょうか? 質問と想像は尽きません.しかしこれらの質問は全て最も基本的な質問に依存しています.どうやってジグソーパズルを解くのでしょうか?大量のごちゃごちゃした画像のピースをどのように一枚の大きな画像に組み合わせるのでしょうか?大量の自然画像をどのようにつなぎあわせて大きな一枚の画像を作るのでしょうか? 答えはこうです.私たちはユニークかつ追跡・比較が容易な特定のパターンもしくは特徴を探しているのです.そのような特徴の定義をしなければいけないとすると,言葉で説明するのは難しいのですが,どのようなものなのか頭の中ではわかっています.もしも誰かが複数枚の画像間で共通して比較に仕えるような良い特徴を聞いたとしたら,あなたはこれだと指定できるでしょう.これが小さな子供でさえジグソーパズルなどができる理由です.画像中からこれらの特徴を探し,別の画像中から同じ特徴を探し揃える.それだけです(ジグソーパズルでは異なる画像の連続性も考慮しますが).これら全ての能力は我々がinherentlyに持っている能力です. 基本的な質問がどんどん増えて行ってしまいますが,より限定的なものになってきました. **この特徴とは何なのか?** *(この問いに対する答えはコンピュータも理解可能なものでなければなりません.)* 人間がどのようにこの特徴を見つけるか説明するのは難しいです.我々の脳で既にプログラムされているものですが,幾つかの写真を注意深く観察し異なるパターンを探してみると興味深いものが見つかるかもしれません.それでは以下の画像を見てください: .. image:: images/feature_building.jpg :alt: Understanding features :align: center 画像はとてもシンプルなものです.画像の上部に6個のパッチが表示されています.あなたへの問いは原画像中に存在するこれらのパッチの厳密な位置を見つけることです.正しい答えを何個見つけられるでしょうか? パッチAとBはテクスチャが平坦な領域であり,画像中の色々な場所で観測されるため,これらのパッチの厳密な位置を見つけるのは難しいです. パッチCとDはだいぶ簡単になります.建物のエッジであり,だいたいの位置は分かるでしょう.しかし,エッジ上のどの点も同じように見えるため,厳密な位置を見つけるのはこのようなパッチでも難しいです.エッジの法線方向に見るのであれば異なって見えます.つまり,エッジはテクスチャが平坦な領域に比べればはるかに位置の同定をしやすいものの,十分な情報を与えてくれるわけではありません(ジグソーパズルであればエッジの連続性を比較できるために十分な特徴と言えるでしょうが). 最後にパッチEとFは建物の角(コーナー)を写したパッチであり,簡単に検出ができます.コーナーであれば個のパッチをどのように動かしても見え方が異なります.つまり,コーナーはよい特徴とみなせるわけです.それではさらに単純化した画像を使って更なる理解を得ましょう. .. image:: images/feature_simple.png :alt: Features :align: center 上記の画像と同様,青いパッチはテクスチャの平坦な領域であり検出・追跡が難しい領域です.青いパッチをどこに動かしても同じように見えてしまいます.黒いパッチはエッジ上に存在します.縦方向(勾配方向)に動かせば見え方が変化しますが,エッジに対して平行に動かすと見え方は変化しません.赤いパッチはコーナーなので,どの方向に動かしても異なった見え方になります,つまり.基本的にコーナーは画像中の良い特徴とみなせるわけです(コーナーだけではなく,blobも良い特徴とみなせることもあります). これで先ほどの"良い特徴とは何か?"という質問に対して答えが見つかりました.しかし,今度は別の疑問が湧いてきます.どうやってこのような良い特徴を見つければいいのでしょうか?どうやってコーナーを見つけるのでしょうか?直観的な方法で答えましょう.画像中の小領域を見て,その周囲の領域で微小な移動を加えた時に最大の分散を示す領域を見つければ良いと言えます.以降のチュートリアルでこの直観的な説明をコンピュータ言語に置き換えていきます.これらの画像の特徴を見つけることを **Feature Detection(特徴検出)** と言います. 一度画像中の特徴を見つければ,他の画像中に写る同じ特徴も見つけられないといけません.何をすればいいのでしょうか?特徴の周囲の領域をとり,我々の言葉で"上の方は青い空,下の方は建物があり,建物にはガラスがあって..."といったように説明し,他の画像中に同じような領域があるか探すのです.この記述は **Feature Description(特徴量記述)** と呼ばれます.一度特徴点とその特徴量を得れば,あらゆる画像中から同じ特徴を見つけることができますし,共通する特徴点を基に画像の位置合わせやつなぎ合わせなど色々な事ができるようになります. このチュートリアルでは,OpenCVが提供する様々な特徴点検出器,特徴量記述子,特徴点のマッチングについて学んでいきます. 補足資料 ======================= 課題 ===========