5

私は何人かの友人と一緒にプロジェクトを行おうとしています。

このラビリンスをプログラムで解読しなければならないとしたら、どうすればそれを続けることができるでしょうか? 画像認識で迷路を解こうとするときの私の最初の決定は、明らかに単純にオープン パスをペイントすることです。この方法でペイントが終了します (迷路の開始点にある矢印は、認識が「OK、それが開始点です」と認識できるようにするためのものです)。 ) は出口を示します。

問題は、これらのフィルターを配置すると、ペイントできず、それを解決する方法について他にアイデアがないことです. では、Open CV でそれを行う方法はありますか? (または、可能であれば、他のオプションでも問題ありません)

この問題への取り組み方が本当にわからないので、可能であれば、オプションの方向性を教えてください。それについてさらに調査します。

どうもありがとう。

4

4 に答える 4

16

簡単にするために、この種のノイズが役に立たなくなるチャネルを与える色空間を考えてみましょう。たとえば、SからチャネルHSBを取得すると、左側の画像が取得されます。これは、大津によって簡単に2値化されます。右側の画像です。

ここに画像の説明を入力してください ここに画像の説明を入力してください

手動のしきい値を高くすると、開始点だけでなく終了点のみも取得されることに注意してください。そうすることで、これらのポイント(左の画像)を拡張し、結果の画像を右上の画像に追加できます。ここで、左側の画像をマーカーとして使用してこの結果の画像で測地線拡張を実行すると、少なくとも2つのポイント(右側の画像)を接続するパスが取得されます。

ここに画像の説明を入力してください ここに画像の説明を入力してください

開始点は、単純なテンプレートマッチングによって見つけることができるため、開始点を含まないパスを削除できます。これにより、次の画像が得られます。これで、開始点から出口点までの最小パスを取得するために、幅優先の方法でフラッドフィルを実行するだけです。

ここに画像の説明を入力してください

于 2013-02-19T03:41:59.253 に答える
1

迷路を解決するための興味深い方法は、迷路の壁が連結成分を構成しているという事実を調べることかもしれません。出口が1つしかない場合は、迷路の壁を2つのコンポーネントに分割して、入口と出口の間のパスに沿って結合することができます。いくつかの出口があるので、この迷路はいくつかの接続されたコンポーネントに分かれます。

画像にいくつかの非常に基本的なしきい値を実行することで、壁が黒でパスが白の単純化されたバージョンに縮小することができました。壁の接続された大きな部分を塗りつぶすことで、次のようなものが得られました。

両側が異なる色で縁取られているパスをたどることで、あるポイントから別のポイントへのパスを見つけることができます。これは、A出口で見ることができる島の周りに障害モードがあるようですが、入口からDへのパスは非常に明確です。

于 2013-02-19T03:19:16.277 に答える
0

この回答は、上記の回答を補完するものにすぎません。迷路を解く簡単な方法があります。それを「右手の法則」といいます。迷路に入るときは、右手を右の壁に置いて進みます。右の壁を決して手放さないでください。つまり、交差点がある場合は必ず右折します (そうしないと、右手が壁をつかめなくなります)。行き止まりになったら、U を左に回します (常に右側の壁に触れます)。

この原則に従ってアルゴリズムを実装します。正面を向いているときは、右側の隣のピクセルが迷路の壁であることを常に確認してください。

于 2013-02-20T11:33:13.860 に答える
-1

「経路探索」について話していると思います

ウィキペディアのエントリには、グリッド上のパスを見つけるための単純なアルゴリズムがあります: http://en.wikipedia.org/wiki/Pathfindingですが、グーグルで検索すると、選択した言語でいくつかのコード サンプルが提供されるはずです。

于 2013-02-19T02:19:33.957 に答える