電子書籍の厳選無料作品が豊富!

http://en.wikipedia.org/wiki/Shape_context
上記のサイトに、shape context(形状コンテキスト)と呼ばれる画像処理の手法が載っているのですが、Theoryの画像(c)のような蜘蛛の巣状のものの半径はどうやって求めているのでしょうか。
log(r)と書かれていますが、それ以前に半径rがよくわかりません。

よろしくお願いします。

A 回答 (2件)

ANo.1のコメントについてです。



> もしどのような大きさの画像に対しても不変なrでshape contextsを作ったとしたら、マッチングはできますが、精度が落ちる

 仰る所の「精度」とは何か、は最終的に何がやりたいかによって決まります。
 たとえば、文字の認識のために文字「A」~「Z」のshape contextを作ってテンプレートとし、入力画像のshape contextに対してどのテンプレートが最も高い相関を示したかによって識別をする、というやり方を採ったとすると、
(1)ヒトが見て「A」だと読めるものを機械が「A」だと認識する確率が高くて、
(2)ヒトが見て「A」ではないと判定するものを機械が「A」だと認識する確率が低い
という事こそが「精度」である。
 そして、形が崩れた文字を正しく識別するには、細かい寸法のばらつきにこだわらない方が旨く行く。
 寸法や角度を完全に無視して、「隣りの点との繋がり方がどうなっているか」だけに着目した方法(形式文法を使ったパターン分類)もありますが、それだと文字がめちゃくちゃ変形しても対応できる一方で、線の一部が欠けたりかすれたり変に繋がったりした場合にはまるで無力であり、つまり、現実に書かれる「A」という文字の崩れ具合に合っていない。shape contextsはこの点で勝っているように思われます。すなわち、形がめちゃくちゃ変形したものは相関が下がり、一方、少々の欠けやかすれには影響されにくい。

 しかしながらshape context法が「V」を「A」と間違える、ということも起こるでしょう。「いくらなんでも、Aを180度ひっくり返して書くということはない」という知識を入れてやれば、こういう間違いはなくなる。それには、相関マップに適当な重みを付けて、角度が0に近い時には得点が高く、さもなければ得点が低くなるようにしてやれば良い。
 また、「,」を「C」と間違えるということも起こるでしょう。「いくらなんでも、めちゃくちゃ小さい文字や、めちゃくちゃでっかい文字を混ぜて書く事はない」という知識も、相関マップに重みを与えることで表現できます。何か適当な方法で測定した「文字の大きさ」を基準にして、その値に近いときは得点が高く、さもなければ低くなるように重みを決める訳です。
 認識の精度を上げるためには、shape context法ひとつではなくて、汚れを除く前処理や、他の方法による認識結果との突き合わせなど、shape context法の弱点を補うようないろんな手を組み合わせてシステムを作り上げれば良いのです。

 一方、形も大きさも非常によく揃っているものが認識の対象だ、という場合には、必ずしもshape contextに拘らず、もっと他の方法を検討した方が良いかも知れません。その際に、shape context法の「回転していても大丈夫」という特長を活かし、しかし大きさや形が違うものははっきり別物として認識したい、ということであれば、log(r)ではなくrを縦軸にしてプロットすれば良いでしょう。
 「多数の部品がバラバラに置かれている写真がある。この中から、目的の部品を見つけろ」というような課題には、shape context法は明らかに適さない。ですがこの場合、何か別の方法によって写真を断片に切り分けて、個々の断片が1個の部品しか含まないようにする、という前処理ができれば、その後はshape context法を利用できるでしょう。
    • good
    • 0
この回答へのお礼

文献にはrについて何も触れていなかったのですが、
自分で臨機応変にしてよいのですね。
画像のそれぞれの大きさを考慮して、rを決定するようにしたいと思います。
重ね重ねありがとうございました。

お礼日時:2008/06/22 12:00

パターンPの輪郭からサンプルした点p[j] (j=1,2,…,N)について、p[j]からp[k]へのベクトルを考え、その長さをr, 方向をθとする。

で、ヨコ軸θ、縦軸log(r)のグラフ上にプロットするんです。これをjとkの全ての組み合わせ(ただしj≠k)について行ったものをC(P)としましょう。

そうすると、
(1) パターンPを回転したものをQとして、これについて同様にプロットC(Q)を作ると、C(Q)はC(P)を横軸に沿ってずらしただけのものである。
パターンPを拡大または縮小したものをQとして、これについて同様にプロットC(Q)を作ると、C(Q)はC(P)を縦軸に沿ってずらしただけのものである。
だから、パターンPと相似のパターンQについて、C(Q)とC(P)の相互相関を計算すれば、拡大率と回転角度が一発で分かる。従って、大きさや向きによらずマッチングができる訳です。

(2) 対数を取ることによって、距離が短いほど高い精度で測ることになる。点p[j]とp[k]の距離が遠いほど、「多少の誤差は気にしない」。
 極座標も同様の効果を持つ。すなわち、同じ精度の角度であっても、点p[j]とp[k]の距離が遠いほど、点p[k]の位置の誤差は大きくて良い。
 だから、点p[j]についてプロットをする際には、点p[j]の近くの点との関係を重視してプロットを描いていることになる。j=1,2,…,Nについてこれを行うので、C(P)は「それぞれの点から見て、その近くにある点までの距離と方向」を精度よく表し、「それぞれの点から見て、遠くにある点までの距離と方向」を大雑把に表したもの、と考えることができます。なので、各局所ごとに形状が似ていれば、全体が少々歪んでいても高い相関を示す訳です。

うーむむ、これじゃ分かりにくいかなあ。

この回答への補足

ありがとうございます。
shape contextsの概念についてさらに理解が進みました。
大きさや向きによらずマッチングできるのであって、「不変な」パラメータではないんですね。

(2)の同じ精度であっても、点p[j]とp[k]の距離が遠いほど、点p[k]の位置の誤差は大きくて良い。と言うのは、距離が遠くなるほど、扇が広がっていくから、だと理解しました。

説明していただいた内容は理解できましたが、半径rについてまだわかりません。
もしどのような大きさの画像に対しても不変なrでshape contextsを作ったとしたら、マッチングはできますが、精度が落ちるので、ある程度画像の大きさに対応させて半径を決めているのではないかと思うのですが、いかがでしょうか。

補足日時:2008/06/16 09:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!