5

所以我有一个代表坐标平面的二维数组,一个图像。在该图像上,我正在寻找“红色”像素,并根据我的相机找到的所有红色像素(希望)找到红色 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,并且对于具有相同颜色的 blob 包含更大的值。现在,vals++您也不必将值增加周围区域的像素数。

于 2011-09-06T22:35:29.950 回答
1

您可以在图像中找到连接的组件,并且在您的质心计算中仅包括总大小超过某个阈值的组件。

于 2011-09-06T22:44:27.593 回答