问题描述
- 关于OPENCV 中MOG的问题,关于背景比例阈值的理解。
-
for( x = 0; x < cols; x++, mptr += K )
{
float wsum = 0;
float pix = src[x];//每个像素
int kHit = -1, kForeground = -1;//是否属于模型,是否属于前景for( k = 0; k < K; k++ )//每个高斯模型 { float w = mptr[k].weight;//当前模型的权值 wsum += w;//权值累加 float mu = mptr[k].mean;//当前模型的均值 float var = mptr[k].var;//当前模型的方差 float diff = pix - mu;//当前像素与模型均值之差 float d2 = diff*diff;//平方
//是否小于方门限,即是否属于该模型
if( d2 < vT*var )
{//属于本高斯模型
。。。
kHit = k1+1;//记录属于哪个模型
break;//如果找到相应的模型,则退出,即:此像素点不在进行匹配,只矫正最靠近前面的高斯模型。
}
}if( kHit < 0 )
//如果没有找到合适的高斯模型,重新新建一个高斯模型,用来代替最弱的高斯模型
//当前像素不属于任何一个模型
{
//初始化一个新模型
kHit = k = min(k, K-1);//有两种情况,当最开始的初始化时,k并不是等于K-1的
wsum += w0 - mptr[k].weight;//从权值总和中减去原来的那个模型,并加上默认权值
mptr[k].weight = w0;//初始化权值
mptr[k].mean = pix;//初始化均值
mptr[k].var = var0; //初始化方差
mptr[k].sortKey = sk0;//初始化权值
}
else//找到匹配的模型,并且用kHit进行了标记。
for( ; k < K; k++ )
wsum += mptr[k].weight;//求出剩下的总权值
//对权值进行归一化处理。float wscale = 1.f/wsum;//归一化
wsum = 0;
for( k = 0; k < K; k++ )
{
wsum += mptr[k].weight *= wscale;
mptr[k].sortKey *= wscale;//计算归一化权值
_ if( wsum > T && kForeground < 0 )// T = (float)backgroundRatio
//问一下,为什么背景权值和大于T后,竟然被认为是前景了?
kForeground = k+1;//第几个模型之后就判为前景了_
}dst[x] = (uchar)(-(kHit >= kForeground)); } }
问题: T = (float)backgroundRatio,为什么高斯模型的权重之和大于T后,被认为是前景了。不是已经根据优先级(权重/标准差)排序了么,应该权重越大的,越靠前,代表此高斯模型模拟背景的效果越好。
不知道自己哪儿理解错了,请指教!谢谢
解决方案
可以这么理解么?看该像素点是先匹配背景,还是先匹配前景。先匹配谁就被认为和谁一类。
The K distributions are ordered based on the fitness value k k w σ and the first B distributions are used as a
model of the background of the scene where B is estimated as
B=argmin( (从1到b对w求和)>T )
The threshold T is the minimum fraction of the background model. In other words, it is the minimum prior
probability that the background is in the scene.
PS:图片粘贴不上去,所以只能凑合看公式了!
解决方案二:
下文就是对上文的正解!哈哈,一贴出来救你知道自己 的问题在哪了!
解决方案三:
下文就是对上文的正解!哈哈,一贴出来救你知道自己 的问题在哪了!