質問
そのため、座標平面、画像を表す2次元配列があります。その画像では、「赤い」ピクセルを探しています。カメラで見つかったすべての赤いピクセルに基づいた赤いLEDターゲットの位置を(できれば)見つけます。現在、私は単に交差路をすべての赤いピクセルの重心に叩いています:
// pseudo-code
for(cycle_through_pixels)
{
if( is_red(pixel[x][y]) )
{
vals++; // total number of red pixels
cx+=x; // sum the x's
cy+=y; // sum the y's
}
}
cx/=vals; // divide by total to get average x
cy/=vals; // divide by total to get average y
draw_crosshairs_at(pixel[cx][cy]); // found the centroid
この方法の問題は、このアルゴリズムが自然に重心を最大のブロブ(最も赤いピクセルのある領域)に近づけているが、少し赤いフリッカーが脇にフリッカーを離したとき、私の十字線がターゲットから飛び降りているのを見ていることです。まぶしさまたはその他の軽微な干渉に。
私の質問はこれです:
このパターンを変更するにはどうすればよいですか 加重 重心?簡単に言えば、私は赤の大きな塊を小さなものよりもはるかに重要にしたいと思っています。
解決
あなたは見つけることができます 接続されたコンポーネント 画像には、Centroid計算の特定のしきい値を上回る合計サイズのコンポーネントのみを含めます。
他のヒント
最も簡単な(そしておそらくナイーブな)答えは、ピクセル値だけをカウントする代わりに、周囲の8ピクセル(合計9で)をカウントすることだと思います。これで、取られた各値は0から9になり、同じ色のブロブの値が大きくなります。今、の代わりに vals++
周囲のエリアのピクセル数だけで値を増加させることになります。
所属していません StackOverflow