資源簡介
利用Scene_Data文件夾中的視頻幀序列實現(xiàn)基于GMM(高斯混合模型)的背景建模。
? 利用C語言或者Open_CV庫,或者是MATLAB軟件編寫混合高斯模型算法的程序。實現(xiàn)給定圖像幀序列的背景建模及跟蹤。代碼可以通過一個主函數(shù)直接運(yùn)行出實驗結(jié)果。
? 要求寫出對算法即其實現(xiàn)遇到問題的理解和實時性問題,每秒能處理多少幀,錄制代碼運(yùn)行時的視頻拷屏
代碼片段和文件信息
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%高斯背景建模()
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear?all
tic;%計時開始%取第一幅符合要求的背景圖、
%?------------??frame?size?variables?幀的變量定義-----------------------
fr?=?imread(‘00.jpg‘);???????????%?讀取第一幀圖片作為背景
fr_bw?=?rgb2gray(fr);?????%?將背景轉(zhuǎn)換為灰度圖像
fr_size?=?size(fr);??????%取幀的大小???????
width?=?fr_size(2);??????%將第一幀圖片矩陣列數(shù)賦給width
height?=?fr_size(1);??????%第一幀圖片矩陣行數(shù)賦給height
fg?=?zeros(height?width);??%定義一個相同大小的零矩陣?前景
bg_bw?=?zeros(height?width);%背景
%?------------?mog?variables?混合高斯模型變量定義----------------------------------
C?=?3;??????????????????????????????????%?組成混合高斯單高斯數(shù)目(一般為3~5)
M?=?3;??????????????????????????????????%?組成背景的數(shù)目
D?=?2.5;????????????????????????????????%?閾值(一般為2.5倍的標(biāo)準(zhǔn)差)
alpha?=?0.01;???????????????????????????%?學(xué)習(xí)率?(在?0?到?1之間)?(from?paper?0.01)決定更新速度
thresh?=?0.25;??????????????????????????%?前景閾值?(0.25?or?0.75?in?paper)
sd_init?=?6;????????????????????????????%?初始化標(biāo)準(zhǔn)差?(for?new?components)?var?=?36?in?paper
w?=?zeros(heightwidthC);??????????????%?初始化權(quán)值數(shù)組矩陣
mean?=?zeros(heightwidthC);???????????%?像素均值矩陣
sd?=?zeros(heightwidthC);?????????????%?像素標(biāo)準(zhǔn)差矩陣
u_diff?=?zeros(heightwidthC);?????????%?與均值作差的矩陣
p?=?alpha/(1/C);????????????????????????%?參與學(xué)習(xí)率?(用于更新?mean?和?sd)
rank?=?zeros(1C);??????????????????????%?梯度組成部分,越大愈好?(w/sd)
%?----?initialize?component?means?and?weights?初始化均值和權(quán)值-----------
pixel_depth?=?8;????????????????????????%?像素深度為8位
pixel_range?=?2^pixel_depth?-1;?????????%?像素范圍2的7次方0-255
for?i=1:height
????for?j=1:width
????????for?k=1:C
????????????
????????????mean(ijk)?=?rand*pixel_range;?????%?隨機(jī)數(shù)?(0-255)
????????????w(ijk)?=?1/C;?????????????????????%?權(quán)值數(shù)組矩陣均勻
????????????sd(ijk)?=?sd_init;????????????????%?初始化?sd_init
????????????
????????end
????end
end
%------------?process?frames?處理幀-----------------------------------
for?n?=?0001:0200???????%循環(huán)共有200幅圖片
????fr?=?imread([‘0‘int2str(n)‘.jpg‘]);??????%?讀取幀
????fr_bw?=?rgb2gray(fr);???????%?轉(zhuǎn)換為灰度圖像
????
????%?calculate?difference?of?pixel?values?from?mean計算像素差值
????for?m=1:C
????????u_diff(::m)?=?abs(double(fr_bw)?-?double(mean(::m)));
????end
?????
????%?update?gaussian?components?for?each?pixel?更新每個像素的背景模型
????for?i=1:height
????????for?j=1:width
????????????
????????????match?=?0;
????????????for?k=1:C???????????????????????
????????????????if?(abs(u_diff(ijk))?<=?D*sd(ijk))???????%?像素匹配了模型
????????????????????
????????????????????match?=?1;??????????????????????????%?設(shè)置匹配記號
????????????????????
????????????????????%?update?weights?mean?sd?p?
????????????????????%?更新???權(quán)值?????均值??標(biāo)準(zhǔn)差??參數(shù)學(xué)習(xí)率
????????????????????w(ijk)?=?(1-alpha)*w(ijk)?+?alpha;
????????????????????p?=?alpha/w(ijk);??????????????????
????????????????????mean(ijk)?=?(1-p)*mean(ijk)?+?p*double(fr_bw(ij));
????????????????????sd(ijk)?=???sqrt((1-p)*(sd(ijk)^2)?+?p*((double(fr_bw(ij))?-?mean(ijk)))^2);
????????????????else??????
評論
共有 條評論