資源簡介
利用Scene_Data文件夾中的視頻幀序列實現基于GMM(高斯混合模型)的背景建模。
? 利用C語言或者Open_CV庫,或者是MATLAB軟件編寫混合高斯模型算法的程序。實現給定圖像幀序列的背景建模及跟蹤。代碼可以通過一個主函數直接運行出實驗結果。
? 要求寫出對算法即其實現遇到問題的理解和實時性問題,每秒能處理多少幀,錄制代碼運行時的視頻拷屏
代碼片段和文件信息
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%高斯背景建模()
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear?all
tic;%計時開始%取第一幅符合要求的背景圖、
%?------------??frame?size?variables?幀的變量定義-----------------------
fr?=?imread(‘00.jpg‘);???????????%?讀取第一幀圖片作為背景
fr_bw?=?rgb2gray(fr);?????%?將背景轉換為灰度圖像
fr_size?=?size(fr);??????%取幀的大小???????
width?=?fr_size(2);??????%將第一幀圖片矩陣列數賦給width
height?=?fr_size(1);??????%第一幀圖片矩陣行數賦給height
fg?=?zeros(height?width);??%定義一個相同大小的零矩陣?前景
bg_bw?=?zeros(height?width);%背景
%?------------?mog?variables?混合高斯模型變量定義----------------------------------
C?=?3;??????????????????????????????????%?組成混合高斯單高斯數目(一般為3~5)
M?=?3;??????????????????????????????????%?組成背景的數目
D?=?2.5;????????????????????????????????%?閾值(一般為2.5倍的標準差)
alpha?=?0.01;???????????????????????????%?學習率?(在?0?到?1之間)?(from?paper?0.01)決定更新速度
thresh?=?0.25;??????????????????????????%?前景閾值?(0.25?or?0.75?in?paper)
sd_init?=?6;????????????????????????????%?初始化標準差?(for?new?components)?var?=?36?in?paper
w?=?zeros(heightwidthC);??????????????%?初始化權值數組矩陣
mean?=?zeros(heightwidthC);???????????%?像素均值矩陣
sd?=?zeros(heightwidthC);?????????????%?像素標準差矩陣
u_diff?=?zeros(heightwidthC);?????????%?與均值作差的矩陣
p?=?alpha/(1/C);????????????????????????%?參與學習率?(用于更新?mean?和?sd)
rank?=?zeros(1C);??????????????????????%?梯度組成部分,越大愈好?(w/sd)
%?----?initialize?component?means?and?weights?初始化均值和權值-----------
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;?????%?隨機數?(0-255)
????????????w(ijk)?=?1/C;?????????????????????%?權值數組矩陣均勻
????????????sd(ijk)?=?sd_init;????????????????%?初始化?sd_init
????????????
????????end
????end
end
%------------?process?frames?處理幀-----------------------------------
for?n?=?0001:0200???????%循環共有200幅圖片
????fr?=?imread([‘0‘int2str(n)‘.jpg‘]);??????%?讀取幀
????fr_bw?=?rgb2gray(fr);???????%?轉換為灰度圖像
????
????%?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;??????????????????????????%?設置匹配記號
????????????????????
????????????????????%?update?weights?mean?sd?p?
????????????????????%?更新???權值?????均值??標準差??參數學習率
????????????????????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??????
- 上一篇:C語言課程設計小學生四則運算
- 下一篇:c++語言基礎教程課后答案_呂鳳翥編
評論
共有 條評論