4

私の問題はここに示されています: problem statement。カメラ画像で検出する必要があるテンプレート画像が 1 つあります。検出された後、アフィン変換を使用してカメラ画像を正規化する必要があります。私の仕事の目標は、十字架を特定することです。画像の正規化ステップに SURF 機能を使用しようとしましたが、テンプレート画像は非常に規則的で、SURF マッチングには適していません。これを行う方法はありますか?多分ある種の輪郭マッチング?

4

4 に答える 4

5

だから私はこれにいくつかの考えを与えていました、そしてあなたがそのチケットのサブセットの代わりに全体のチケットを取り、それを通常の長方形に変換しようとしていることに気づきました。この問題は(少なくとも理論的には)それほど難しいことではなく、自分でそれを行うためのコードを書くことは比較的簡単です。

これの最も難しい部分は、これまでのところ、最初のコーナー検出です。チケット全体にのみ関心があるので、チケットのすべては何の意味もありません。あなたが興味を持っているのは四隅だけです。写真から、あるチケットが別のチケットの上にある場合、コーナーがはっきりしないことがわかります。すべての写真が非常に暗い表面の上に置かれたチケットである場合、これもまた些細なことですが、あいまいなケースでもうまく処理できるアプリケーションを作成することを目的としています。そうは言っても、私は次のアプローチを提案します。

1)画像フィルターを使用して、画像の明るい領域を明るくし、画像の暗い領域を暗くします。

この種のフィルターの名前を忘れましたが、基本的には、画像の暗い領域と明るい領域のコントラストを高めたいと考えています。

2)特定の明るさより上のすべての領域をシャープにし、特定の暗さより下のすべての領域をガウスぼかしします。

特徴発見アルゴリズムは、一般に、画像の「シャープネス」に依存して、コーナーやエッジを検出できるようにします。画像の明るい領域をすべてシャープにし(チケットが白であると見なす)、画像の暗い領域をすべてぼかして、探しているコーナーをアルゴリズムで検出できる可能性を高めます。

3)特徴検出を使用して四隅を検出します

これは物事が毛むくじゃらになるところです。写真を撮っている宝くじの山があり、アルゴリズムでそれを見つけて歪みなしで表示できるようにしたい場合は、現在研究されている最先端の素材について話していることになります。これがあなたがやろうとしていることであるなら、私はYanxi Liuの論文のいくつか、特に都市のシーンへの応用を伴う並進対称性に基づく知覚的グループ化を読むことを提案します。ほとんどの場合、チケットの事前に作成された画像からテンプレートを作成し、このテンプレートの正確な特徴をカメラ画像の同じ特徴の歪んだグリッドと一致させようとする必要があります。パーセンテージのしきい値を超える一致が得られたら、その四隅を見つけることができます。それらが正常に見つかった場合は、次のステップに進むことができます。

一方、最先端のことをしようとしていない場合は、本ごとの機能検出を行うことができます。コーナー検出には、Harris&Stephens / Plessey/Shi-Tomasiコーナー検出アルゴリズムを使用することをお勧めします。これは、Yanxiが多くの論文で使用しているのと同じアルゴリズムであり、コーナー検出のかなり良い仕事をします。フィルタが画像のグレースケールを取得するかどうか、または現在のカラースケールを取得するかどうかはわかりませんが、後者を使用する場合は、コーナー検出アルゴリズムを使用する前にキャニーエッジ検出フィルタを使用すると有利です。 。チケットのメインコーナーが(うまくいけば)検出されたら、(写真の視点と内容に基づいて)ある種のスマートな検索アルゴリズムを考案して「推測」する必要があります。

また、「平均シフト確率伝搬法」は、検出アルゴリズムの後で最も重要な機能を決定するのに役立つ可能性があることにも注意してください。基本的に、特定のボックス内のいくつかの特徴点を取得し、それらのすべての座標を平均してから、結果の座標にボックスを中央に配置します。ボックスを移動した後、ボックスに新しいポイントがある場合は、もう一度やり直します。ボックスの中央に単一の関心ポイントができるまで、これを続けます。これはアイデアの簡単な説明です。平均化の詳細がわからないので、さらに詳しく調べることをお勧めします。

4)双一次補間を使用して、最終画像に転送する必要のある色を決定します。

歪んだ画像から色を取りたくないことに注意することが重要です。画像に対してすべてのフィルターと検出アルゴリズムを実行する目的は、関心のある特徴点を見つけることです。これらの座標を取得したら、元の画像を使用して色を描画することに戻ります。

この質問をしている場合は、双一次補間の意味を知っていると思います。歪んだチケットの上端と下端は、0(左隅)で始まり、1(右隅)で終わると見なします。左端と右端を0(上隅)で開始し、1(下隅)で終了すると見なします。これと同じロジックを出力画像のサイズに適用します。出力画像をピクセルごとに移動すると、色を取得するために必要な補間座標が見つかり、双一次補間を使用して、入力画像から色を取得します。

以上です!(笑)あなたが求めていることはかなり複雑です、そして私はあなたがそうすることで幸運を祈っています。ユーザー入力なしですべての場合にこれを完全に実行するアルゴリズムを作成することは、私が言えることから、ほぼ不可能に近いです。また、宝くじを見ているという事実は、このプロジェクトがどれほど倫理的であるかという問題を提起します。いずれにせよ、うまくいけば、これはあなたの脳を始めるのに十分です。ここにいくつかの追加のリンクがあります:

キャニーエッジ検出: http: //en.wikipedia.org/wiki/Edge_detection

コーナー検出: http: //en.wikipedia.org/wiki/Corner_detection

Yanxi Liuの論文:http ://www.cse.psu.edu/~yanxi/

平均シフト信念伝搬法:私があなたに話した論文で使用されています

編集

レベル分離のコード

int threshold = 128;
float percentChange = .5;
int oldr, oldg, oldb, newr, newg, newb, grayscale;

//Assuming that pixels is a 1D array of pixel objects that make up the image you're currently working with. Syntax is of Processing.org

for (int i=0; i<pixels.length; i++) {

    oldr = red(pixels[i]);
    oldg = green(pixels[i]);
    oldb = blue(pixels[i]);

    grayscale = Math.floor((oldr + oldg + oldb) / 3.0);

    if (grayScale >= threshold) { //Brightness is above threshold, therefore increase brightness
        newr = oldr + (255-oldr)*percentChange;
        newg = oldg + (255-oldg)*percentChange;
        newb = oldb + (255-oldb)*percentChange;
    } else { //Brightness is below threshold, therefore increase darkness
        newr = oldr - oldr*percentChange;
        newg = oldg - oldg*percentChange;
        newb = oldb - oldb*percentChange;
    }

    pixels[i] = color(newr,newg,newb);

}
于 2011-07-13T14:07:13.210 に答える
0

直接(ピクセルベース)のアプローチは、機能ベースよりも優れている可能性があります。

ここで見つけることができる画像の配置に関する優れたチュートリアル: http://research.microsoft.com/apps/pubs/default.aspx? id = 70092

もう1つのアイデアは、ROIを選択することです。画像のすぐ上の領域が赤い四角で構成されていることがわかっている場合は、それをSURF検出から除外してみてください。さらに、「赤い四角い領域」の形状を検出し、変換推定に使用することができます。

于 2011-07-14T18:06:12.717 に答える
0

MoarCodePlz の回答に加えて、タスクの基本となる 2 つのキーワードがあります。ホモグラフィの解決ハフ変換です。

于 2011-07-13T22:03:20.350 に答える
0

最大の(太くて長い)赤い線を見つけて、アフィンワープを行うだけです。

于 2012-02-08T06:51:28.993 に答える