線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2155
推到 Plurk!
推到 Facebook!

高斯混合模型建立背景

缺席
dmjohnny
一般會員


發表:3
回覆:9
積分:2
註冊:2008-10-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-02-02 15:47:39 IP:122.117.xxx.xxx 訂閱
我是用OPENCV開一個AVI的檔案然後用GMM去建立背景模型
但是遇到了幾個問題
1.不應該被移動到的背景物變得模糊不清
2.利用OPENCV的cvCvtColor可以轉成灰階卻無法轉回彩色
3.不知道為什麼一開始建立背景模型會有一些黑色的區塊(以解決主要是調整參數就好了)
請板上高手為我解答非常感謝
dmjohnny
一般會員


發表:3
回覆:9
積分:2
註冊:2008-10-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-02-03 18:50:04 IP:122.117.xxx.xxx 訂閱

===================引 用 dmjohnny 文 章===================
我是用OPENCV開一個AVI的檔案然後用GMM去建立背景模型
但是遇到了幾個問題
1.不應該被移動到的背景物變得模糊不清
2.利用OPENCV的cvCvtColor可以轉成灰階卻無法轉回彩色
3.不知道為什麼一開始建立背景模型會有一些黑色的區塊(以解決主要是調整參數就好了)
請板上高手為我解答非常感謝


以下是我發現可能有問題的地方請板上高手幫助我解決我的BUG
首先第一個問題我將影像調慢撥放後發現影像似乎沒有對齊所以才會造成不該移動的邊緣模糊不清
所以我嚐試驗證我的副程式但是我卻找不到我自己認為不合理的地方Orz
上半段是我認為比較可能發生錯誤的地方
下半段則是我button裡面的流程
請板上高手幫我解答非常感謝

[code cpp]
//----------------------------ProcessFrame-----------------------------
void TForm1::ProcessFrame(int wy, int hy)
{
int i,s,j,k,I,g;
int dvar0,mG,dsWt,nG,dvar,dp0,dp,deta;

for(i=0; i {
s = 1;
for(j=0; j {
k = i*wy*3 j;
I = cvmGet(m_pFrMat,i,j);
dvar0 = 100 * (1 (I-GmmMatrix[k 0].mean)*(I-GmmMatrix[k 0].mean)) / (1 GmmMatrix[k 0].variance);
mG = 0;
GmmMatrix[k 0].dweight = (multirate-dalpha)*GmmMatrix[k 0].dweight/multirate;
dsWt = GmmMatrix[k 0].dweight;
nG = 0;
for(g=1; g {
dvar = 100 * (1 (I-GmmMatrix[k g].mean)*(I-GmmMatrix[k g].mean)) / (1 GmmMatrix[k g].variance);
GmmMatrix[k g].dweight = (multirate-alpha)*GmmMatrix[k g].dweight/multirate;
dsWt = dsWt GmmMatrix[k g].dweight;
if(dvar < dvar0)
{
dvar0 = dvar;
mG = g; //matched
}
}
if(dvar0 > 100*num2)
{
nG = 0;
dp0 = 100 * (1 GmmMatrix[k 0].dweight*GmmMatrix[k 0].dweight) / (1 GmmMatrix[k 0].variance);
for(g=1; g {
dp = 100 * (1 GmmMatrix[k g].dweight*GmmMatrix[k g].dweight) / (1 GmmMatrix[k g].variance);
if(dp < dp0)
{
dp0 = dp;
nG = g;
}
}
GmmMatrix[k nG].mean = I;
GmmMatrix[k nG].variance = 50;
GmmMatrix[k nG].dweight = 30;
GmmMatrix[k nG].match = true;
GmmMatrix[k nG].matchLeng = 1;
GmmMatrix[k nG].matchTimes = 1;
continue;
}
deta = I-GmmMatrix[k mG].mean;
GmmMatrix[k mG].mean = GmmMatrix[k mG].mean deta/100;
GmmMatrix[k mG].variance = max((dOnemialpha*GmmMatrix[k mG].variance dalpha*(I-GmmMatrix[k mG].mean)*(I-GmmMatrix[k mG].mean))/multirate,25);
GmmMatrix[k mG].dweight = GmmMatrix[k mG].dweight alpha_rate*dalpha;
if(GmmMatrix[k mG].match == false)
{
GmmMatrix[k mG].matchTimes = 1;
GmmMatrix[k mG].match = true;
}
GmmMatrix[k mG].matchLeng = 1;
dsWt = dsWt alpha*alpha_rate;
for(g=0; g {
GmmMatrix[k g].dweight = GmmMatrix[k g].dweight*1000/dsWt;
if(g != mG)
{
GmmMatrix[k g].match = false;
}
}
}
}
}
//----------------------------ProcessFrame-----------------------------

//--------------------------BackgroungBuild----------------------------
void TForm1::BkBuild(int wy, int hy)
{
int i,j,k,b,g;
int dm0,dm;

for(i=0; i {
for(j=0; j {
k = i*wy*3 j;
dm0 = GmmMatrix[k 0].dweight;
b = 0;
for(g=1; g {
dm = GmmMatrix[k g].dweight;
if(dm > dm0)
{
dm0 = dm;
b = g;
}
}
if(GmmMatrix[k b].mean > 255)
{
GmmMatrix[k b].mean = 255;
}
if(GmmMatrix[k b].mean < 0)
{
GmmMatrix[k b].mean = 0;
}
cvmSet(m_pBkMat,i,j,GmmMatrix[k b].mean); //set background matrix
cvmSet(m_pBkVarMat,i,j,GmmMatrix[k b].variance);
}
}
}
//--------------------------BackgroungBuild----------------------------

[/code]

[code cpp]
pFrameData = cvCreateImage(fr,IPL_DEPTH_8U,3);
// cvCopy(FrameOri, pFrameData, NULL);
cvResize(FrameOri, pFrameData, CV_INTER_LINEAR);

cvCvtColor(pFrameData, pFrImg, CV_BGR2GRAY);
cvCopy(pFrImg, pFrImgB,NULL);

cvimg2array(pFrImg, wy/2, hy/2, ProcessData);

m_pFrMat = cvCreateMat(hy/2, wy/2, CV_32FC1);
cvConvert(pFrImg, m_pFrMat);

ProcessFrame(wy/2, hy/2);
BkBuild(wy/2, hy/2);
cvConvert(m_pBkMat, pBkImgG);

cvCvtColor(pBkImgG, pBkImgC, CV_GRAY2BGR);
cvResize(pBkImgC, pFrameLast, CV_INTER_LINEAR);
cvimg2array(pFrameLast,wf,hf,ProcessData);

[/code]


dmjohnny
一般會員


發表:3
回覆:9
積分:2
註冊:2008-10-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-04-15 17:52:01 IP:140.133.xxx.xxx 訂閱
問題已經解決只是我的一為陣列寫錯了
dmjohnny
一般會員


發表:3
回覆:9
積分:2
註冊:2008-10-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-04-22 15:31:57 IP:140.133.xxx.xxx 訂閱
是否可以請您告訴我書名呢?
系統時間:2024-04-20 6:56:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!