1.算法仿真效果
matlab2022a仿真結(jié)果如下:
2.算法涉及理論知識概要
視頻圖像分析是近年來計算機視覺領(lǐng)域中備受關(guān)注的前沿方向。從技術(shù)角度而言,其研究內(nèi)容相當(dāng)豐富,主要涉及到模式識別璧函、圖像處理、計算機視覺勋桶、人工智能等學(xué)科知識脱衙;同時動態(tài)場景中運動的快速分割侥猬、非剛性運動、目標(biāo)之間互相遮擋或停止的處理等也為視頻圖像分析研究帶來了一定的挑戰(zhàn)捐韩。其中人運動的視覺分析是近年來計算機視覺領(lǐng)域中備受關(guān)注的前沿方向退唠,它從包含人的圖像序列中檢測、識別荤胁、跟蹤人并對其行為進行理解和描述瞧预,屬于圖像分析和理解的范疇。
其研究核心主要是從單個或多個視頻序列中檢測和跟蹤運動人體仅政,獲取數(shù)據(jù)信息垢油,進而描述和理解人體運動。這是一個很有挑戰(zhàn)性的跨學(xué)科的研究課題圆丹,涉及到計算機視覺滩愁、計算機圖形學(xué)、圖像處理辫封、模式識別和人工智能等多個學(xué)科硝枉。
目前,對于運動物體的檢測和跟蹤技術(shù)有著廣泛的應(yīng)用倦微,概括起來有如下幾個方面:
·智能監(jiān)控:在銀行妻味、商店、停車場等對安全要求敏感的場合的保安設(shè)施中常常都裝有一些可視化的監(jiān)控設(shè)備欣福。
·感知接口:在高級用戶接口應(yīng)用領(lǐng)域责球,希望計算機或機器人能更加智能的感知外部環(huán)境,即能通過識別跟蹤分析使用者的面部表情劣欢、身體姿勢和于勢等的含義棕诵,來達到與人的交流,提高計算機或機器人的智能水平凿将。
·運動分析:跟蹤圖像序列中感興趣的人體部位校套,獲得其運動特性。
·虛擬現(xiàn)實:目前許多電腦游戲中人體牧抵、動物行為的逼真設(shè)計效果得益于人體及動物的運動跟蹤分析笛匙。
2.1 背景提取
由于人群視頻空域上每個像素點的灰度值是沿時間軸不斷變化的一維隨機信號。該信號的非平穩(wěn)段意味著有前景人群通過該像素點犀变,而平穩(wěn)段意味著該點表示背景圖像妹孙。本算法的核心想法就是提取每個像素點的平穩(wěn)部分像素值。假設(shè)某一幀的圖像序列的像素值為I获枝,那么相鄰幀之間的像素值變化為:
式子1表示蠢正,當(dāng)差值大于某個門限值的時候,像素變化為兩者的差值省店,而當(dāng)小于某個門限的時候嚣崭,那么認為像素值沒有改變笨触,即為0.那么通常情況下,這個亮度變化會滿足的如下的變化情況:
從上圖的曲線可知雹舀,當(dāng)某一段的值為0的時候芦劣,這說明這段的像素值沒有發(fā)生改變,即這段的像素值即為實際的背景像素值说榆。
2.2 運動物體檢測
主要通過原視頻和提取的背景做差分運算虚吟,從而獲得實際的運動物體,運動物體的檢測签财,其主要流程為差分運算串慰,二值化處理,形態(tài)學(xué)處理荠卷,邊緣提取模庐,最后獲得運動物體的捕獲。經(jīng)過背景消減法獲取的前景油宜,可以通過設(shè)置閾值得二值圖像掂碱。
2.3 形態(tài)學(xué)處理
圖中運動物體基本被提取出來了,但是提取出來的視頻具有較大的噪聲干擾慎冤,這樣會嚴重影響實際的檢測效果疼燥,經(jīng)過背景減后的二值化圖像中,可能還存在一些噪聲以及斷裂蚁堤,可以通過數(shù)學(xué)形態(tài)學(xué)處理使人群信息更加清晰醉者、完整。數(shù)學(xué)形態(tài)學(xué)將二值圖象看成是集合披诗,并用結(jié)構(gòu)元素進行“探測”撬即。結(jié)構(gòu)元素是一個可以在圖象上平移、且尺寸比圖象小的集合呈队“保基本的數(shù)學(xué)形態(tài)學(xué)運算是將結(jié)構(gòu)元素在圖象范圍內(nèi)平移,同時施加交宪摧、并等基本集合運算粒竖。數(shù)學(xué)形態(tài)學(xué)的實質(zhì)是通過圖象集合與結(jié)構(gòu)元素間的相互作用來提取有意義的圖象信息,不同的結(jié)構(gòu)元素可以提取不同層面的圖像信息几于。常用的二值圖像的形態(tài)學(xué)運算有:膨脹運算蕊苗、腐蝕運算、閉運算和開運算沿彭。
3.MATLAB核心程序
%獲得視頻的長和寬
rows ?= size(seq,1); ???
cols ?= size(seq,2);
colors=['b.' , 'm.' , 'k.' , 'b*' , 'm*' , 'k*', 'bo' , 'mo' , 'ko',];
p = 1;
for k = 15:n_frames-90
disp('--------------------------------');
disp('Frame No.');k
figure(2);
subplot(331);
imshow(seq(:,:,k),[]);title('原始的圖像'); ???
%Frame differencing
images2(1:rows,1:cols) = func_framediff(seq(1:rows,1:cols,k),back3);
subplot(332);
imshow(images2,[]);title('差分結(jié)果');
%Morphological Processing
images3(1:rows,1:cols) = func_morpho(images2(1:rows,1:cols));
subplot(333);
imshow(images3,[]);title('濾波結(jié)果'); ???
%Edge detection
images4(1:rows,1:cols) = func_edgedetection(images3(1:rows,1:cols));
subplot(334);
imshow(images4,[]);title('邊緣檢測效果'); ????
%顯示檢測效果
[images5(1:rows,1:cols,1:3),images6(1:rows,1:cols,1:3),images7(1:rows,1:cols,1:3),Xcenters,Ycenters] = func_detect(images3,images4,seq(:,:,k));
subplot(335);
imshow(images5,[]);title('實際檢測結(jié)果'); ???
%進行跟蹤
subplot(336);
imshow(images6,[]);title('人物跟蹤');
subplot(337);
imshow(images7,[]);title('人物跟蹤');
%進行跟蹤
....................................................................
ind(p) = I;
if isempty(Xcenterst) == 0 & isempty(Xcenters) == 0
res3(1:rows,1:cols,1:3) = func_tracker(images3,seq(:,:,k),Xcenterst,Ycenterst,Xcenters,Ycenters,ind);
subplot(338);
imshow(res3,[]);title('人物跟蹤'); ????
else
subplot(338);
imshow(images7,[]);title('人物跟蹤'); ????
end
p = p + 1;
end