8

ねえ、私は単純なチェス プレイ ロボットの視覚システムをコーディングしています。以前の研究を改善して、カメラと標準のチェス セットを使用し、ゲーム中に両方を動かすことができるようにしようとしています。これまでのところ、Web カメラを介して取得した画像でボードを見つけることができます。連続した画像の差分をとって何が変わったかを判断し、ボードの占有率に関する以前の情報を使用して動きを検出することで動きを検出したいと考えています。

私の問題は、現時点では変更を確実に検出できないように見えることです。現在のパイプラインは次のようになります。コピーして距離変換を行う->最大のブロブを取得します(DTおよびフラッドがそのブロブを埋める後の最大値に対応します)->DTが変更を無視するのに十分小さい値を返すまで繰り返します。

これらすべてを OpenCV と C++ でコーディングしています。しかし、私の塗りつぶしは常にブロブを塗りつぶしていないように見えるため、ほとんどの場合、検出された変更は1つだけです。私も使用してみcv::inpaintましたが、どちらも役に立ちませんでした。私の質問は次のとおりです。私は間違ったアプローチを使用しているだけですか、それとも何らかの形でチューリングを行うと、変更検出の信頼性が向上します。前者の場合、妥当な時間内に C++/Python および/または OpenCV でコーディング可能な代替ルートを提案できますか?

ありがとう

4

1 に答える 1

3

ボードを修正してピースの動きを検出する問題は、ピースを動かしながらボードを動かさないと仮定すると、独立して解決できます。

私がそれにどのようにアプローチするかについてのいくつかの考え:

ボードの向きを検出する

ピースが見える角度が維持されている限り、ボードをその場で回転させたり、動かしたりできる必要があります。ボード上に簡単に識別できるもの (各コーナーのマーカーなど) があれば、向きを失った場合 (たとえば、誰かがボードをカメラから完全に遠ざけるなど) に簡単に見つけることができます。

ボードを追跡するには、3D 空間でボードに対するカメラの位置をモデル化する必要があります。これは、固定されたボードの周りを移動しているカメラの位置を決定するのと同じ問題です。エゴモーションの問題。それを解決したら、動きを検出してオブジェクトを追跡する次の段階に進むことができます。

ピースの動きの検出

これはおそらく問題のより単純な部分です。ビデオ内のオブジェクト検出には、多くのアルゴリズムがあります。「キー」フレームを使用できることだけを追加します。つまり、1 回の移動の前後にボードのみが表示されるフレームを特定するということです。たとえば、手が動いているのが見えず、ピースが隠れているなどです。前/後のフレームを取得すると、何が移動し、ボードに対してどこに配置されているかを把握できます。

連続性を仮定すれば (つまり、よく知られているボードの最初の配置以降のすべての動きを追跡したと仮定すると)、各ピースの形状を認識できなくてもおそらく回避できます。

于 2011-05-06T16:44:13.687 に答える