📄 gmoriginal.cpp
字号:
#include "GMOriginal.h"
#include <math.h>
#include "gmm.h"
/*
*用来建立最初的GMM模型,所有w是平均分配的,gama[i]=1
*/
GMOriginal::GMOriginal()
{
w=1.0/K;//a small w
wf=1.0/K;
for(int i=0;i<3;i++)
{
u[i]=0;
this->gama=1;
}
newGMM=false;
}
/*
*用来建立一个新加入的GM模型,所有w是一个较小的值,gama[i]是一个较大的值V0
*/
GMOriginal::GMOriginal(int xt[3])
{
w=0.05;//a small w
wf=0.95;
for(int i=0;i<3;i++)
{
u[i]=xt[i];
this->gama=V0;
}
newGMM=true;
}
GMOriginal::~GMOriginal()
{
}
void GMOriginal::initdata()
{
//for(int i=0;i<=2;i++)
//{
gama=1;
//}
w=1.0/K;
}
/**
* update w if the model is not a match
*/
void GMOriginal::updateData()
{
w=(1-ALPHA)*w;
}
/**
*update all the data if a model is a match
*/
void GMOriginal::updateData(int* xt)
{
if(xt!=NULL)
{
w=(1-ALPHA)*w+ALPHA;
update_u_gama(xt,3);
//update_gama(xt,3);
}
else
{
AfxMessageBox("in updateData(int *xt),the xt is null");
}
}
/**
* update u, the mean value
*@param xt the current pixel value
*/
bool GMOriginal::update_u_gama(int* xt,int length)
{
ASSERT(xt!=NULL);
//int* u_return=new int[length];
//vectorMulNum(1-ALPHA,u,u_return,length);
//int* x_tmp=new int[length];
//vectorMulNum(ALPHA,xt,x_tmp,length);
for(int i=0;i<length;i++)
{
u[i]=(int)((1-ALPHA)*u[i]+ALPHA*xt[i]);
}
double gama_tmp=0.3*abs(xt[0]-u[0])+0.59*abs(xt[1]-u[1])+0.11*abs(xt[2]-u[2]);
gama=(1-ALPHA)*gama+(ALPHA*gama_tmp*gama_tmp);
//gama=gama*gama;
//delete [] x_tmp;
// delete [] u_return;
return true;
}
double GMOriginal::update_wf(bool b)
{
if(b)
{
wf=(1-ALPHA)*wf+ALPHA;
}
else
{
wf=(1-ALPHA)*wf;
}
return wf;
}
/**
* update gama, the variance value
*@param xt the current pixel value
*/
bool GMOriginal::update_gama(int* xt, int length)
{
/*ASSERT(xt!=NULL);
double* gama_return=new double[length];
vectorMulNum(1-ALPHA,gama,gama_return,length);
int* tmp=new int [length];
vectorSub(xt,u,tmp,length);
double* gama_tmp=new double[length];
vectorMul(tmp,tmp,gama_tmp,length);
double* Mul_tmp=new double[length];
vectorMulNum(ALPHA,gama_tmp,Mul_tmp,length);
vectorAdd(gama_return,Mul_tmp,gama,length);
delete [] gama_return;
delete [] tmp;
delete [] gama_tmp;
delete [] Mul_tmp;*/
double gama_tmp=0.3*(xt[0]-u[0])+0.59*(xt[1]-u[1])+0.11*(xt[3]-u[3]);
gama=(1-ALPHA)*gama+(ALPHA*gama_tmp*gama_tmp);
return true;
}
GMOriginal& GMOriginal::operator = (GMOriginal& g)
{
for(int i=0;i<3;i++)
{
this->u[i]=g.u[i];
}
this->gama=g.gama;
this->newGMM=g.newGMM;
this->w=g.w;
return *this;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -