5

だから私は座標平面、画像を表す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

この方法の問題点は、このアルゴリズムは自然に重心を最大のブロブ (最も赤いピクセルが多い領域) の近くに配置しますが、ターゲットから少し赤いちらつきが発生したときに十字線がターゲットから飛び出してしまうことです。グレアやその他の小さな干渉に。

私の質問はこれです:

このパターンを変更して、より重み付けされた重心を探すにはどうすればよいですか? 簡単に言えば、赤色の大きなブロブを小さなブロブよりもはるかに重要にし、遠く離れた小さなブロブを完全に無視することさえしたい.

4

2 に答える 2

1

ピクセル値だけを数える代わりに、周囲の 8 ピクセル (合計 9 ピクセル) も数えます。現在、各値は 0 から 9 の範囲で指定でき、同じ色のブロブにはより大きな値が含まれます。代わりにvals++、周囲の領域のピクセル数だけ値を増やします。

于 2011-09-06T22:35:29.950 に答える
1

画像内の連結成分を見つけて、合計サイズが特定のしきい値を超える成分のみを重心の計算に含めることができます。

于 2011-09-06T22:44:27.593 に答える