【发布时间】:2011-11-11 17:12:37
【问题描述】:
所以我有一个代表坐标平面的二维数组,一个图像。在该图像上,我正在寻找“红色”像素,并根据我的相机找到的所有红色像素(希望)找到红色 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
这种方法的问题在于,虽然这种算法自然地将质心放置在靠近最大斑点(红色像素最多的区域)的位置,但当一点红色闪烁到由于眩光或其他轻微干扰而导致的侧面。
我的问题是这样的:
如何更改此模式以寻找更加权的质心?简而言之,我想让较大的红色斑点比较小的红色斑点更重要,甚至可能完全忽略远处的小斑点。
【问题讨论】:
-
如果您必须在飞机的左侧和右侧“相同”的红点。质心算法不会在没有红色的图像中心绘制十字准线吗?如果你给方程增加权重,这个问题仍然存在,即使它不太可能。
-
是的,在这种情况下,算法的表现非常糟糕。然而,这一切都与我计划进行的涉及跟踪特定目标的实际演示有关,其想法是虽然会有一些干扰,但绝不应该有任何与现场目标接近相同的东西(它是一个非常可区分的目标)。这里的想法是让算法更加关注我更大的红色来源,同时保持一些能力,如果它变得更远或受到轻微阻碍,可以保持它“锁定”。
标签: math image-processing centroid