1、一 實驗名稱:運動目標跟蹤算法設計與實現二 實驗目的1. 熟悉各種圖像預處理方法,如直方圖處理、圖像去噪聲、圖像增強與復原、圖像變換等,了解這些方法在圖像分析與識別、目標檢測及跟蹤等各種應用中所起的作用。2. 熟悉基本的圖像分割原理。3. 能夠利用MATLAB 工具完整實現從圖像預處理、圖像分割、特征提取與分析及各種實際應用的完整流程。4. 該實驗為一個綜合設計及應用的實驗,目的是要求學生綜合利用學到的光電圖像處理知識,解決圖像識別、目標檢測及目標定位與跟蹤問題。進一步深入理解光電圖像處理的重要性,提高學生利用光電圖像處理基本理論、方法等解決實際問題及提高分析問題的能力。三 實驗原理及步驟1.
2、 序列圖像中的運動目標形心跟蹤(1) 序列圖像的讀取與顯示本實驗提供了200 幀的圖像序列,為BMP 文件,文件名后綴的序號按場景出現的先后順序排列。(2) 圖像分割首先,對圖像進行必要的閾值分析。根據實際情況自行確定合適的閾值后,再對圖像進行二值化處理。(3) 形心計算在分割的單幀圖像上,計算圖像中目標區(qū)的形心坐標(Xc,Yc),確定目標在像素平面上的位置坐標。(4) 形心跟蹤 MATLAB 確定跟蹤波門:即以形心位置為中心,在圖像中包含目標的區(qū)域添加一個合適的矩形框(如取32×16 pixels,32×32 pixels,64×32 pixels 等), 實時
3、跟蹤:循環(huán)讀取序列圖像,對每幀圖像均計算目標區(qū)的形心坐標,連續(xù)繪制包含目標區(qū)域的波門(即矩形框)。實現對200 幀序列圖像中運動目標的實時穩(wěn)定跟蹤。2. 序列圖像中的運動目標相關跟蹤實驗原理及步驟如下:(1) 序列圖像的讀取與顯示 同實驗內容1,序列圖像數據另選。(2) 參考模板制作 在起始幀圖像中,手動選取包含目標的矩形區(qū)域(根據目標尺寸,確定模板尺寸)。另(緩)存為預制圖像模板數據。(3) 模板匹配 確定搜索區(qū)域大?。涸诋斍皫繕藚^(qū)域擴大適當范圍作為下一幀圖像的搜索區(qū)域。 確定匹配準則:MSE、MAD、NCC 或MPC 等(選其一種),進行搜索區(qū)域的匹配度(相似度)計算,畫出搜索區(qū)域內的相
4、似度3D曲面圖(畫連續(xù)2 幀之間的搜索過程的結果即可),確定最佳的匹配位置。視頻數據若為彩色圖像,可先進行灰度化處理,然后用像素灰度值進行計算。實時跟蹤:重復步驟-,實現序列圖像中的目標的連續(xù)穩(wěn)定跟蹤。四 實驗結果及分析1. 序列圖像中的運動目標形心跟蹤通過對形心的定位,可以實現更好的目標跟蹤2. 序列圖像中的運動目標相關跟蹤該實驗采用MAD最小平均絕對差進行目標跟蹤,通過前后兩幀的最小差,可確定目標位置,實驗結果與理論相符。五 實驗心得體會和建議l 心得體會:通過該試驗不僅使我加深了對之前做過的圖像預處理的方法的理解,同時提高了自己運用這些知識的綜合能力。l 建議:使用多種匹配準則,進行搜索
5、區(qū)域的匹配度計算。六 程序源代碼1. 序列圖像中的運動目標形心跟蹤path='E:實驗6CODEimage200s'filecount = 200;for i=1:filecountname=num2str(i);if i<=9filename=strcat('0000000',name, '.bmp');elseif i<=99filename=strcat('000000',name,'.bmp');elseif i<=199filename=strcat('00000',na
6、me,'.bmp');endI=imread(path filename);I1=im2bw(I,0.75);m n=size(I1);k=0;xc=0;yc=0;for a=1:m for b=1:(n-30) if I1(a,b)=0; k=k+1; xc=xc+a; yc=yc+b; end endendimshow(I1,),rectangle('position',yc/k-32,xc/k-16,64,32);title('Frame NO. ' num2str(i);pause(0.01);end2. 序列圖像中的運動目標相關跟蹤pa
7、th = 'E:實驗6CODEf16takeoff_396s' prefix = '' fmt = '.jpg' nframes = 396; I0=rgb2gray(imread(' E:實驗6CODEf16takeoff_396s001.jpg');I0=double(I0);L=10;x0=90;y0=130;height=40;width=110;M1=I0(x0:x0+height,y0:y0+width);follow=zeros(2,1);for k = 1:nframes fnum = num2str(k,
8、9;%03d'); fileName = strcat(path,prefix,fnum,fmt); source=imread(fileName); sourceImg =im2double(rgb2gray(source); A=zeros(L+1,L+1); for i=(x0-L/2):(x0+L/2) for j=(y0-L/2):(y0+L/2) M2=sourceImg(i:i+height,j:j+width); A(i+(L/2)+1-x0,j+(L/2)+1-y0)=sum(sum(abs(M2-M1); end end q,p=find(A=min(min(A); x1=x0-(L/2)+q-1; y1=y0-(L/2)-1+p; imshow(source),hold on rectangle('Position',y1 x1 width height,'edgecolor','k'); title('Frame NO. ' num2str(k); x0=x1; y0=y1; M1=sourceImg(x0:x0+height,y0:y0+width);MAD(1:1
評論
0/150
提交評論