贝叶斯'更新概率图的公式

时间:2014-03-19 20:31:23

标签: c#-4.0 math statistics mapping probability

我试图让一个移动机器人根据它从相机上看到的东西来映射竞技场。我创建了一张地图,并设法让机器人识别放置在竞技场中的物品并给出估计的位置,但是,由于我只使用RGB相机,因此结果数字可能会有所不同。噪音,或照明等的变化。现在我要做的是使用贝叶斯'创建概率图。提供更好的竞技场地图的公式。

贝叶斯'式

 P(i | x) =  (p(i)p(x|i))/(sum(p(j)(p(x|j))

这是我到目前为止所得到的。地图上的所有点都初始化为0.5。

// Gets the Likely hood of the event being correct
// Para 1 = Is the object likely to be at that location
// Para 2 = is the sensor saying it's at that location
private double getProbabilityNum(bool world, bool sensor)
{

    if (world && sensor)
    {
    // number to test the function works
        return 0.6;
    }
    else if (world && !sensor)
    {
    // number to test the function works
        return 0.4;
    }
    else if (!world && sensor)
    {
    // number to test the function works
        return 0.2;
    }
    else //if (!world && !sensor)
    {
    // number to test the function works
        return 0.8;
    }
}


// A function to update the map's probability of an object being at location (x,y)
// Para 3 = does the sensor pick up the an object at (x,y)
public double probabilisticMap(int x,int y,bool sensor)
{
    // gets the current likelihood from the map (prior Probability)
    double  mapProb = get(x,y);
    //decide if object is at location (x,y)
    bool world = (mapProb < threshold);
     //Bayes' formula to update the probability
     double newProb =
(getProbabilityNum(world, sensor) * mapProb) / ((getProbabilityNum(world, sensor) * mapProb) + (getProbabilityNum(!world, sensor) * (1 - mapProb)));

        // update the location on the map
        set(x,y,newProb);
        // return the probability as well
        return newProb;
    }

它确实有效,但数字似乎快速跳跃,然后当它们位于顶部时闪烁,如果数字下降得太接近零,它也会出错。任何人都知道为什么会发生这种情况?我认为它与方程编码的方式有关,但我不太确定。 (我发现this,但我不太了解它,所以我不确定它的相关性,但它似乎在谈论同样的事情

先谢谢。

1 个答案:

答案 0 :(得分:0)

在进行涉及概率的数值计算时使用 log-likelihoods

考虑

P(i | x) = (p(i)p(x|i))/(sum(p(j)(p(x|j)).

由于x是固定的,分母p(x)是常量。因此

P(i | x) ~ p(i)p(x|i)

其中~表示“与......成正比。”

对数似然函数就是这个的日志。也就是说,

L(i | x) = log(p(i)) + log(p(x|i)).