だから私は座標平面、画像を表す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
この方法の問題点は、このアルゴリズムは自然に重心を最大のブロブ (最も赤いピクセルが多い領域) の近くに配置しますが、ターゲットから少し赤いちらつきが発生したときに十字線がターゲットから飛び出してしまうことです。グレアやその他の小さな干渉に。
私の質問はこれです:
このパターンを変更して、より重み付けされた重心を探すにはどうすればよいですか? 簡単に言えば、赤色の大きなブロブを小さなブロブよりもはるかに重要にし、遠く離れた小さなブロブを完全に無視することさえしたい.