mog-关于OPENCV 中MOG的问题,关于背景比例阈值的理解。

问题描述

关于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:图片粘贴不上去,所以只能凑合看公式了!

解决方案二:

下文就是对上文的正解!哈哈,一贴出来救你知道自己 的问题在哪了!

解决方案三:

下文就是对上文的正解!哈哈,一贴出来救你知道自己 的问题在哪了!

时间: 2024-11-01 07:34:39

mog-关于OPENCV 中MOG的问题,关于背景比例阈值的理解。的相关文章

opencv中的kmeans函数

问题描述 opencv中的kmeans函数 LBPimage是一个3通道的灰度图像.通过kmeans函数之后,分的两类,labels的各个分量都是0,只有第一个和最后一个元素是1.请问大神们,错在哪里. Mat LBPimage=LBP(imgs); int nl = LBPimage.rows; int nc = LBPimage.cols; Mat points; points.create(nc*nl, 1, CV_32FC1); int n = 0; for (int i = 0; i

OpenCV中读取视频帧像素值的一般方法

OpenCV中读取视频帧像素值的一般方法可以分为以下几个步骤: 1.打开AVI格式的视频 CvCapture *capture=NULL; IplImage *img=NULL; capture = cvCaptureFromFile("E:\\Sequence_mask\\crossroad.avi"); if(!capture) { cout<<endl<<"failed to open mask file"<<endl; r

OpenCV中保存视频的一般方法

在OpenCV中,保存视频一般分为三步骤: 1.初始化工作 //初始化保存视频文件 CvVideoWriter* video=NULL; video=cvCreateVideoWriter("E:\\Sequence_mask\\out.avi",CV_FOURCC('X', 'V', 'I', 'D'), m_inputfps,cvSize(m_inputwidth,m_inputheight),0);//1代表彩色视频,0代表黑白视频,即mask if(video) cout<

c++和opencv-利用opencv中的张正友方法进行摄像机标定

问题描述 利用opencv中的张正友方法进行摄像机标定 利用opencv和c++进行摄像机标定,采用的程序是网上的基于张正友的标定方法,网上说的结果和我的执行结果不同,是采用了不同角度的20张图片,理论上这20张图片的旋转向量和平移向量应该不相同,但是我最后求出来的旋转矩阵和平移向量竟然都是相同的,结果如下,,,,,,不知道是怎么回事儿??请教高手解答啊 第1幅图像的旋转向量: {{-2.65698e+303,-2.65698e+303,-2.65698e+303}} 第1幅图像的旋转矩阵: {

opencv 区域检测-Opencv中cvfindcontours原理

问题描述 Opencv中cvfindcontours原理 Opencv中的cvfindcontours原理是什么啊,有没有什么比较著名的算法在里面,自己看不懂代码,网上也没有介绍~但是想学习一下轮廓检测-- 解决方案 OpenCV人脸识别的原理 .OpenCV人脸识别的原理 .opencv cvFindContours---------------------- 解决方案二: opencv文档中的内容有写: "") The function retrieves contours fro

目标跟踪学习笔记_1(opencv中meanshift和camshift例子的应用)

在这一节中,主要讲目标跟踪的一个重要的算法Camshift,因为它是连续自使用的meanShift,所以这2个函数opencv中都有,且都很重要.为了让大家先达到一个感性认识.这节主要是看懂和运行opencv中给的sample并稍加修改.      Camshift函数的原型为:RotatedRect CamShift(InputArray probImage, Rect& window, TermCriteria criteria).      其中probImage为输入图像直方图的反向投影

在opencv中利用findContours进行轮廓检测,程序运行结束时为什么会报中断错误,求解?

问题描述 在opencv中利用findContours进行轮廓检测,程序运行结束时为什么会报中断错误,求解? 代码如下: #include #include #include #include #include #include using namespace cv; using namespace std; //一.将源图片转成单通道的灰阶图片 Mat changeSourceImg(Mat img){ Mat great(img.size(), CV_8U); cvtColor(img, g

计算方差-请教大神在opencv中怎么计算图像局部方差

问题描述 请教大神在opencv中怎么计算图像局部方差 请教大神在opencv中怎么计算图像局部方差, 请教大神在opencv中怎么计算图像局部方差, 请教大神在opencv中怎么计算图像局部方差,谢谢 解决方案 你也在学opencv吗,可以交流下 解决方案二: 局部,是正常的矩形还是不规则区域 矩形: 坐标的x y即像素点的x y根据长宽遍历 不规则: 我暂时没有计算过 你图像是灰阶还是RGB 如果灰阶 按照灰阶度使用公式即可,如果是RGB建议先用cvmerxx 函数忘记了 把RGB通道合成之

opencv中的sift算法是不是只能检测一个匹配目标啊?

问题描述 opencv中的sift算法是不是只能检测一个匹配目标啊? 初学sift算法,现在做一个小程序,用opencv里的sift算法匹配目标,现在假设场景中存在多个匹配的目标,但是每次检测好像都只检测到第一个.怎样让它把多个目标都识别出来啊?小白求指导!先谢谢各位大神 解决方案 sift算法是基于图像特征进行匹配的,你可以尝试基于图像区域的一些算法,看你的匹配目标在哪里,将其设定为匹配区域就可以了