画像特徴抽出に関する質問

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
SIFT・SURF

画像特徴抽出に関する質問

#1

投稿記事 by SIFT・SURF » 9年前

ちょっと「高度な」質問かもしれないので、申し訳ございません。
画像特徴(SIFT/SURF)点を抽出して、その位置を示すために、
選択した画像特徴点を中心に円や楕円で表示されます。
それにこれらの円や楕円の大きさや楕円の向きがまちまちです。

質問として上述の円や楕円の大きさや楕円の向きは何を表しているのでしょうか?

ご存じの方 どうぞ宜しくお願い致します

SIFT・SURF

Re: 画像特徴抽出に関する質問

#2

投稿記事 by SIFT・SURF » 9年前

補足:
選択した画像特徴点: keypoint と呼ばれます。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 画像特徴抽出に関する質問

#3

投稿記事 by usao » 9年前

まともに扱ったことが無いですけど,想像するに,
 スケール(DOGのレベルか何か) と 回転(勾配の主要な方向みたいなの)
とかじゃないですか.

少しはSIFTやSURFのざっくりとした内容くらいを調べてみてはいかがでしょうか.

いーくん

Re: 画像特徴抽出に関する質問

#4

投稿記事 by いーくん » 9年前

多分usaoさんの説明であってます。
そもそも、画像特徴のビジュアライズというものは、実装によってマチマチですので憶測で話します。
(というか、SIFTやSURFをビジュアライズするなら普通キーポイント+矢印でやるのが一般的で、円はFASTあたりのビジュアライズが一般的じゃないかなと思います。)

> 選択した画像特徴点を中心に円や楕円で表示されます。
> それにこれらの円や楕円の大きさや楕円の向きがまちまちです。

特徴点というのは、画像中の特異な座標(エッジのコーナーに当たる部分や勾配強度が抜きん出て強い点)のうち、幾つかの処理で更に厳選した座標を指します。
例えばHarissのコーナー検出等で抽出した場合、おそらくですが、コーナー部分で山程、座標が得られるはずです。
この座標を厳選したものが特徴点になります。
(SIFTでは実際にHarissのコーナー検出と類似のアルゴリズムで特徴点の厳選を行っていますが特徴点の抽出自体はDOG[Difference Of Gaussian]にて抽出しています)

この特徴点=KeyPointというのは問題なさそうですね。
このKeyPointについて画像特徴を抽出するのですが、その特徴として、SIFTでは勾配強度を用いています。

ここで、円の大きさ(半径)というのは勾配強度の主方向(勾配強度を何方向かに量子化した上で最も強い方向)の大きさになると思います。
さらに、円が楕円であったり真円であったりするのは、おそらく主方向が一方向に定まらないくらい、バラついているのではないでしょうか?

まあ、結構書きましたがSIFTについての細かい説明を省いているので勾配強度のあたりの説明は厳密性を欠いていますが。
(実際には回転の正規化を行っているため、ただ単に勾配強度を計算しているわけではありません。)

ちなみに、SURFはSIFTにおいて特徴点抽出について低速なガウシアンフィルタを近似計算することで高速化したアルゴリズムです。

参考までに、OpenCVのドキュメント(3系以降はsphinxからdoxygenに変わっていて整備が不完全なので、今回は2.4.13のものを見ました)を見ると、
[Lowe04] Lowe, D. G., “Distinctive Image Features from Scale-Invariant Keypoints”, International Journal of Computer Vision, 60, 2, pp. 91-110, 2004.
みたいな感じで論文の引用がされています。
なので、詳しい話が気になるなら論文を読みましょう。
それが無理でもSIFTやSURFくらい著名なアルゴリズムならという前提ですが、ググれば山程、資料がでてきます。

書いた後に気づいたのですがusaoさんの完全な焼きなましになってますが……消すのも勿体無いので、一応ポストしておきます

SIFT・SURF

Re: 画像特徴抽出に関する質問

#5

投稿記事 by SIFT・SURF » 9年前

お返答本当にありがとうございます。

// 「普通キーポイント+矢印でやるのが一般的」
想像にこうであるべきですが、
実際、円か楕円で何かを表しているのはよく見られて、
SURFやSIFTに関して、「矢印」で特徴量を表すのは、むしろ、「非常に少数派」ですね。

だから、なぜ「円か楕円」なの? と不思議に思います。
vector量なら、その方向は唯一であって、楕円だと180°関係のある二つの方向表す事になります。
vector強さも矢印の長さで明確に表せるし、なぜみんな、「円か楕円」で表すのでしょうか。

若しかして、
その「円か楕円」は他の意味で利用されているのではないかという疑念で質問しました。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 画像特徴抽出に関する質問

#6

投稿記事 by usao » 9年前

N次元の特徴量を「特徴ベクトル」と考えるならば確かにvector量でしょうが,
じゃあ N > 2 の特徴量を,2次元な画像の上にどうやって表示するんですか?

>そもそも、画像特徴のビジュアライズというものは、実装によってマチマチ

これが全てだと思いますが.
「SIFTのときはこのように表示しなさい」とかいう統一された方法は(きっと)無いでしょうから
結局見たい何らかの情報要素を限られた空間と手段の上でなんとかして表示して確認しているだけに過ぎないでしょう.


あなたが動かしているソフトの実装コードが見れるなら何をどう表示しているのか確認した方が早いし正確です.
コードが見れなくて,表示に関する説明も無いならば,
(SIFTやSURFの中身を知っていれば,それについての「どんな情報を確認できればうれしいか」をある程度は想像できる可能性はありますが)
どこまでいっても憶測にしかなりません.
オフトピック
>SURFやSIFTに関して、「矢印」で特徴量を表すのは、むしろ、「非常に少数派」ですね。

と言えるくらいの知見をお持ちなのであれば,
表示コードを書いた本人でもない不特定多数に質問しても得るものがあるのか疑問です.

>なぜみんな、「円か楕円」で表すのでしょうか。

「みんな」がそうなのか存じ上げませんが,
単純に,表せる情報量が 楕円>矢印 だから楕円が用いられているのではないでしょうか.
(例えば,短軸と長軸だけを描画しても,ざっくり言って 矢印×2 ですよね)

いーくん

Re: 画像特徴抽出に関する質問

#7

投稿記事 by いーくん » 9年前

>> だから、なぜ「円か楕円」なの? と不思議に思います。
>> vector量なら、その方向は唯一であって、楕円だと180°関係のある二つの方向表す事になります。
>> vector強さも矢印の長さで明確に表せるし、なぜみんな、「円か楕円」で表すのでしょうか。

SIFTの原著論文でも角度は360度を36分割したヒストグラムに投票すると書かれているので確かに、楕円で描画してしまうと逆方向のビンも大きくなっていることになりますね。
それならやはり矢印で描画されるべきだと、そうなりますね。
実際、SIFTの原著論文では矢印でSIFTのビジュアライズを行っています(Figure.7参照)。

なら、矢印で描画する方法の何が不味いのか。
おそらく、矢印でビジュアライズすると特徴点がある程度近くにあると矢印が潰れて見えなくなるからではないでしょうか?
SIFTを使う場合、数千点の特徴点が得られることもあるかと思います。
それらの特徴点を描画する際に矢印でビジュアライズするとおそらく潰れて見えなくなると思います
それに対して、円なら勾配強度が大きく、より重要となるキーポイントは半径がある程度大きくなり、円が多いせいで潰れるということは矢印に比べて少ないかと思います。(まあ、数千点全てをビジュアライズするわけがありませんが…)
楕円も同様ですね。

>> // 「普通キーポイント+矢印でやるのが一般的」
>> 想像にこうであるべきですが、
>> 実際、円か楕円で何かを表しているのはよく見られて、
>> SURFやSIFTに関して、「矢印」で特徴量を表すのは、むしろ、「非常に少数派」ですね。

質問に質問を重ねるような真似で申し訳ないが、何をもって「非常に小数派」と言っているのか是非教えていただきたいです。

私が円もしくは楕円で表現しているのを見たことがあるのはMatlabだけです。
それ以外だと、OpenCVや原著論文(先に挙げていた論文)では矢印で表現されていますね。

OpenCV Tutorial
http://opencv-python-tutroals.readthedo ... intro.html

さらに、「Scale Invariant Feature Transform」で画像検索を掛けるとやはり、矢印でビジュアライズされているのが多いですね。

もしかして、商用だと楕円を用いた方法が多いかもしれないので、可能であれば、教えていただきたいです。
まあ、OpenCVのビジュアライズ方法を円という場合は確かに円が多いとは思いますが、矢印も決して少数派とは言いがたいとは思います。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 画像特徴抽出に関する質問

#8

投稿記事 by usao » 9年前

オフトピック
関係ないけど,個人的に,矢印描画には苦い経験しかないので,盛大にディスっておきますね.

(1)矢印を描画することそれ自体がわりとめんどくさい
線分や円,楕円くらいの単純図形なら大抵は描いてくれる関数がライブラリにあるので,一個関数呼ぶだけで済ませられるけど
矢印そのものを所望の感じで描くのは線分を何本か描くコードみたいなのをとりあえず自分で用意するところから始める必要がある.
「矢印描画くらい関数一個書けばいいだろ」とか思うと(2)のような状態に陥る

(2)結局見難い
描画対象の何らかの量を用いて矢印の描画倍率を決めた結果,
でかすぎて「邪魔!ぱっと見わからん!うざい!」みたいな結果に高確率で陥る.
描画倍率下げると今度は小さいやつらがつぶれて見えない.
小さすぎて先端がつぶれてしまうなら「線分」でいいじゃんっていう感じになるし,
先端がでかいとそれはそれで非常に邪魔.
(先端座標が画像外になって,その矢印先端部を描画するための(データとして本質でない)線分の一部だけが画像内に含まれるような形とか最悪)

(3)ぶっちゃけ線と円で良くね?
線分だけだと根元と先端の区別がつかないなら,根本に小円でも描画しとけばまず事足りる.
特徴量を素敵にビジュアライズするお仕事とかじゃないなら,かっこつけて矢印とか描く必要性がない.

SIFT・SURF

Re: 画像特徴抽出に関する質問

#9

投稿記事 by SIFT・SURF » 9年前

皆さん丁寧なご指導有難う御座います。

// もしかして、商用だと楕円を用いた方法が多いかもしれないので、可能であれば、教えていただきたいです。

おそらく商用とか関係なく、慣習でしょう。
その根拠を「教えてくれ」と言われたら、ちょっと難しい感じですね。
「円と楕円の多用」とは自分の印象と経験ですから、たくさんのIEEE論文などをもう一度ブラウズし、統計しなければなりません。
ただ、簡単な方法として(厳密的な根拠にはならないが)
yahoo ---> "SIFT" or "SURF" をキーワードとして入力し、「画像」を選択して ----> 「検索」を押します。
結果画像の中に
矢印でkeypointを表しているのは多いか、それとも円か楕円で表しているのは多いか、一目瞭然かな。

また何か良い考え方があれば、ご教授お願い致します。

SIFT・SURF

Re: 画像特徴抽出に関する質問

#10

投稿記事 by SIFT・SURF » 9年前

十分に確信とは言えませんが、
皆さんのアイディアを受け入れたいです。
楕円と円はDOGの強さと認め、楕円の向きをDOG(gradient)の方向と認識します。

でも、よく観察すると、非常に平凡な画像位置に円の半径が非常に大きい現象も良く見られます。
不思議に不思議に思います。

果たして、その円の半径は本当にその中心のDOGの強さなのか。。。。???

確かに、専門過ぎかも知れませんが、たまにはそういう専門家も現れるでしょう。
画像認識って流行っている技術と聞いていますね。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 画像特徴抽出に関する質問

#11

投稿記事 by usao » 9年前

アイディアを受け入れるだとか認めるだとか
ちょっと何言ってるかわからない というか あなたの目的がわからない感じです.

>あなたが動かしているソフトの実装コードが見れるなら何をどう表示しているのか確認した方が早いし正確です.

と申し上げたのですが,
結局それはできたのでしょうか? できなかったのでしょうか?
(それともそこまで労力は割きたくはないとか?)



>非常に平凡な画像位置に円の半径が非常に大きい現象も良く見られます

「平凡」という表現がいまいち謎ですが,輝度値が「平坦」とかいうことでしょうか.
(「平坦」なエリアのほぼ中心あたりに位置していたりとかする感じですかね)
一見して輝度勾配が無いところにでかいのがでてくるということであれば
描画のでかさは(最初に想像したように)スケールなのではないかと想像しますが.

閉鎖

“C言語何でも質問掲示板” へ戻る