【連載】

コンピュータビジョンのセカイ - 今そこにあるミライ

40 iPhoneアプリ「漫画カメラ」で使われている画像処理手法その1

40/85

今回は、前回の基本概念をふまえて、Cannyエッジ検出器の3段階の処理について順番にみていきたいと思います。

処理1:入力画像のDoG画像(Difference of Gaussian)を生成

まずは入力画像にガウシアンフィルタを適用して、平滑化を行った画像を作成します。平滑化する理由は、ノイズが多い元の入力画像のまま微分画像を作成すると、ノイズの影響でエッジ部分だけうまく残すことができないからです。

エッジ検出の前処理に平滑化を行う理由

そこで、ガウシアンフィルタなどでまず滑らかな画像を作成すると、上図の右側3つ目のグラフのように、エッジ付近の領域の画素の値が、(1)「平坦なところのノイズがなくなる」、(2)「元画像で急激な変化であった境界付近が、なだらかな変化になる」という2つのメリットが生まれます。この平滑化が終わった画像を微分すると、なだらかになった境界付近のみに綺麗にピークが立つので、そのピークが立った場所のみをそれぞれ「エッジ」として検出できるようになるというわけです。

次に、その平滑化した画像に対して、横方向の微分画像と、縦方向の微分画像の2枚の画像を作成します。作成したそれら2枚の微分画像の差分を取ることでDifference of Gaussian(DoG)画像が生成されます。ちなみにこのDoG画像は、第29回の「キーポイントの検出とSIFT記述子の計算」でも登場した、キーポイントの検出のために使用した画像と同じものです。DoG画像は、2次微分であるLaplacian画像を作成する代わりに、近似的に1次微分の差分計算で(少し高速に)Laplacian画像を近似したものである2次微分画像(つまりはエッジ画像)に相当する画像を(直接2階微分するよりも)高速に作成できるというものです。

処理1「DoG画像の生成」

ここで、エッジ検出前の前処理に用いられる「ガウシアンフィルタ」について、パラメータを変えるとどのような処理結果になるかについてだけ、個別に大きな図で見ておきましょう(フィルタ処理の仕組み自体については、画像処理やコンピュータビジョンについて解説されている各種書籍等を参照ください)。それでは、以下の図の各結果画像を見てみましょう。

ガウシアンフィルタの分散の値による結果画像の変化

ガウシアンフィルタは2次元のフィルタを用いて2次元ガウシアン関数を各画素に対して畳み込む処理です。その際、2次元ガウシアン関数の分散σの値を大きくしていくと、この図の各結果画像のようにボケ具合が強くなっていきます。Cannyエッジ検出器では微分画像を計算したあとの元画像のノイズの影響を減らすためにガウシアンフィルタを用いるわけですが、あまりに強くガウシアンフィルタをかけてしまうと、この図の一番右図のσ=4の結果画像のように、検出したいエッジそのものが消えてしまっていくことがわかります。境界部分がなだらかになりすぎて検出できなくなるわけです。従ってエッジ検出の前処理としてのガウシアンフィルタでは、σは小さめの値に抑えておくことで、狭い局所領域ごとでのホワイトノイズを少し取り除くくらいの程度で用いるのが、妥当だと言えます。

処理2:Non-maximal suppression(局所的に最大値以外を0に抑える)

DoG処理によりエッジ画像を取得したら、次はNon-Maximum suppressionという処理を行います。これは日本語で言うと「最大でない値は(すべて)値を抑える(=値をゼロにする)」という意味の処理です。つまりは、DoG画像で既に大体のところ浮かび上がっているエッジ候補の白色領域について、エッジとみなせる所以外をすべて黒(0)に抑えてしまう処理です。この処理の目的は「細線化を行い、DoG画像の時点よりもエッジ部分だけを残す画像をつくる」という点にあります。

処理2「Non-maximum suppression」

処理の手順ですが、まずはDoG画像の各ピクセルにおいて、エッジの回転方向θの値を求めます。次に、各注目画素において、その法線方向に沿った直線上で隣り合う2つの画素での値と比較し、その注目画素が3つの中で最大値を取っている注目画素のみを画素値255(白)とし、それ以外の画素値を0(黒)に変更します。白になった画素は法線方向に隣の2つの画素の勾配値より自身の勾配値が高い場所ですので、山の頂点か谷の底である境界を示しており、細線化後に残すべき画素だと言えるでしょう。

こうしてDoG画像上の各画素において、その法線方向で最大の値を持つ画素のみが境界の端点として残るので、エッジが細線化されて細い輪郭に変わるわけです。

処理3:ヒステリシスしきい値処理

最後に、ヒステリシスしきい値処理という処理を行う事により、現時点の各エッジをまとめられるものを1つに連結していきます。これにより、2の段階ではまだ間に溝があるエッジが、出来る限り閉じた長い輪郭に変わります。

ヒステリシスしきい値処理では、処理2で細くなったエッジをたどって行きながら、各点での輝度値を、2つのしきい値より大きいか小さいかをすでにしきい値を超えたかどうかを「履歴的に(ヒステリシスに)」判定してくことにより、間のギャップを埋めてつなげてよいかどうかを決定し、エッジの間の溝を埋めてつなげていく、もしくは切り離したままにするという処理を行います。ここからは実際の処理手順を説明して行きましょう。

処理3 ヒステリシスしきい値処理

まず処理を始める前に、2つのしきい値として「最大しきい値」と「最小しきい値」を用意します。そして、処理を始めるとNon-maximum suppression後の画像に対して、エッジに沿って輝度値がしき値より大きいか小さいかを判定していきます。このとき「最小しきい値」を下回ると、エッジ部分候補とは考えません。これが、最小しいき値を上回りはじめると次のエッジの断片が始まったとみなし、画素ごとに最小しきい値を下回らないかどうかを判定しながら、下回らなければ現在のエッジ候補部分にその画素を追加していきます。このとき、最小しきい値を下回るまでのあいだ、前回最小しきい値以上になってから現時点まで、「最大しきい値を超えたかどうか」の履歴も保持しておきます。そして、最小しきい値を下回り始めた時に、その保持していた履歴にそって、以下の決定を下します。

  1. 最大しきい値を超える座標が存在していた場合:前回最小しきい値を上回り始めてから現時点までを「エッジ」であると決定して、結果画像では保存しておきます
  2. 最大しきい値を超える座標が存在していない場合:最大しきい値にみたない輝度の座標しか存在しなかったので、非エッジであると決定して、結果画像では破棄します

この判定処理により、各断片的に存在しているエッジが、1の条件が満たされるごとに1つのエッジとして連結されるという処理が実現されるわけです。これをエッジ画像中のエッジ候補部分すべてについて行えば、ヒステリシスしきい値処理は完了です。

以上の3段階の処理により、Cannyエッジ検出器は細い輪郭としてエッジ部分を入力画像から自動的に検出することができます。

40/85

インデックス

連載目次
第85回 点群応用(建築編) - LIDARを用いた高精度/広域3Dスキャン
第84回 点群応用(建築編) - 3Dスキャンが活きる建築物の規模
第83回 点群応用(建築編) - 高精度かつ広域な建築物の3Dスキャン
第82回 まだまだ使える人が少ない3D点群処理
第81回 3Dデータで処理を行う利点とは?
第80回 点群データを取得・解析する技術「3D点群」はデプスセンサと何が違うのか?
第79回 動きに反応して映像が変わるインタラクティブなプロジェクションマッピング
第78回 プロジェクションマッピングの原理
第77回 「プロジェクションマッピング」とはどういったものか?
第76回 顔や視線でコントロール
第75回 手や指の動きだけでコントロール
第74回 3Dジェスチャー認識のおおまかな原理
第73回 全身の人物姿勢情報を活用したアプリ例 - 腕の動きからのジェスチャー認識
第72回 Kinectはどのように人物姿勢推定の性能を向上させたのか?
第71回 Kinectの人物姿勢推定手法は学習時にどのような処理を行っているのか?
第70回 どうやってKinectは人体パーツを識別しているのか?
第69回 「人体パーツ識別技術」により実現されているKinect向け人物姿勢推定技術
第68回 まだ完全には解けていない人物姿勢推定の問題
第67回 3D人物姿勢推定の仕組みとナチュラルユーザーインタフェース
第66回 3Dデプスセンサーーを用いた注目の新ベンチャー企業(後編)
第65回 3Dデプスセンサーを用いた注目の新ベンチャー企業(前編)
第64回 アクティブステレオ方式とは違う3D形状の動画計測方式 - ToF形式
第63回 Kinectで3D撮影を行うための条件
第62回 モーションセンサとして見た場合のKinect
第61回 Kinectセンサの動作原理を読み解く
第60回 kinectを用いたビジネスのアイデアを競う「Kinect for Windows Contest」
第59回 Kinectがもたらしたセンシング革命
第58回 Kinectの登場がもたらしたコンピュータビジョン革命
第57回 Kinectなどで使われるデプスセンサを用いた3Dコンピュータビジョン技術
第56回 組込分野でのコンピュータビジョンは使いやすくなったのか(後編)
第55回 組込分野でのコンピュータビジョンは使いやすくなったのか(前編)
第54回 デジタルビデオの安定化処理の注意点
第53回 デジタルビデオの安定化処理の手順
第52回 デジタルビデオの安定化技術の概要
第51回 2種類のオプティカルフローの計算手法
第50回 画素ごと独立した移動量パラメータを割り当てる「オプティカルフロー」
第49回 パラメトリックモーション - 特定の1つの動き表現モデル
第48回 デジタルビデオ安定化技術
第47回 動画に対するシーム・カービング
第46回 メッシュ変形ベースのリターゲティング手法
第45回 重要度マップへの「主観」の追加
第44回 自動作成を行うために用いられることの多い3つの重要度マップ手法
第43回 元画像を「縮小」する時に自然にリサイズする技術 - リターゲティング
第42回 漫画カメラで使われる漫画風画像生成とトゥーンシェーディングの違い
第41回 iPhoneアプリ「漫画カメラ」で使われている画像処理手法その2
第40回 iPhoneアプリ「漫画カメラ」で使われている画像処理手法その1
第39回 iPhoneアプリ「漫画カメラ」に見るコンピュータビジョンの実応用例
第38回 パッチマッチによる画像編集の1つ - リシャッフリング
第37回 パッチ探索をランダムに実行することで高速化を目指す「パッチマッチ」
第36回 インペインティングの手法の1つ - パッチベースの手法
第35回 2つの目的で使われるコンピュータビジョンのインペインティング
第34回 人工知能/ロボット応用で使われるコンピュータビジョン技術(後編)
第33回 人工知能/ロボット応用で使われるコンピュータビジョン技術(前編)
第32回 ホモグラフィ変換における画像間のレジストレーション処理
第31回 張り合わせ先の座標系モデルと移動量の算出
第30回 各画像の「移動量」と「変形量」の算出による特徴点の対応づけ
第29回 キーポイントの検出とSIFT記述子の計算
第28回 パノラマ画像の生成手順
第27回 "画像の張り合わせ"で手軽に作れるようになったパノラマ画像
第26回 身近になったコンピュータビジョン技術を用いた写真・映像の編集技術
第25回 進むステレオカメラのDepth Mapを用いた3D道路表面モデリングの研究
第24回 車線逸脱警告システムにおけるレーン検出の仕組み
第23回 パーティクルフィルタによる観測技術
第22回 前方衝突防止システム - 人物をトラッキングする手法
第21回 前方衝突防止システム - 「平行等位ステレオ」による3次元形状復元
第20回 ビジョンべースの自動車運転手支援システム - 前方衝突防止システム
第19回 MAP推定はどのように行われるのか
第18回 超解像の計算アルゴリズム「MAP推定」
第17回 超解像で高画質化処理を担当する「ボケ補正」
第16回 入力画像が2枚以上(動画)の場合における画像レジストレーション
第15回 1枚画の静止画における画像レジストレーション
第14回 画像の劣化に対する「高解像度化」と「高画質化」のための3つの技術
第13回 超解像における劣化関数で改善すべき2種類の劣化
第12回 高解像かつ高画質の映像を作り出す技術 - 超解像
第11回 「顔検出」を高速化する技術
第10回 顔検出の主流アルゴリズム「Viola-Jones法」
第9回 人間の顔があるかを判断する「顔検出」技術(2) - テンプレートマッチング
第8回 人間の顔があるかを判断する「顔検出」技術(1) - 「顔検出」と「顔認識」
第7回 拡張現実感「AR」(3) - 「ARToolkit」の登場によりARが一気に普及期へ
第6回 拡張現実感「AR」(2) - マーカ有りARとマーカレスARの仕組み
第5回 拡張現実感「AR」(1)
第4回 動画編集技術「マッチムーブ」(3)
第3回 動画編集技術「マッチムーブ」(2)
第2回 動画編集技術「マッチムーブ」(1)
第1回 身近なものとなってきたコンピュータビジョンの世界

もっと見る

関連キーワード


人気記事

一覧

イチオシ記事

新着記事