北京航空航天大學目標檢測與跟蹤實驗報告
圖像探測、跟蹤與識別技術(shù)實驗報告(一)專業(yè):探測制導(dǎo)與控制技術(shù) 學號: 姓名: 目錄一、實驗?zāi)康?二、實驗要求3三、實驗步驟3四、實驗結(jié)果41、使用自適應(yīng)閾值進行閾值化以及定位跟蹤結(jié)果41.1閾值結(jié)果及坐標41.2二值化圖樣及定位、跟蹤結(jié)果42、使用固定閾值進行閾值化以及定位跟蹤結(jié)果52.1.1閾值為150的結(jié)果及坐標52.1.2二值化圖樣及定位、跟蹤結(jié)果52.2.1閾值為250的結(jié)果及坐標62.2.2二值化圖樣及定位、跟蹤結(jié)果6五、實驗感想7附實驗程序:7實驗一 基于形心的目標檢測方法一、實驗?zāi)康?. 學習常用的圖像閾值分割方法以及不同方法對目標的不同分割效果;2. 學習如何利用形心方法將目標定位;3. 了解目標檢測方法的本質(zhì)并為課堂教學提供配套的實踐機會。二、實驗要求要求學生能夠根據(jù)目標圖像特點,自行選擇在不同噪聲條件下和背景條件下的目標分割算法。完成規(guī)定圖像的目標檢測,并利用檢測跟蹤窗來表示檢測到的目標位置信息。三、實驗步驟1. 分別利用固定閾值和自適應(yīng)閾值T,對圖像二值化。2在VC6.0平臺下編寫閾值計算函數(shù),形心計算函數(shù);3. 觀察不同閾值方法對目標的分割效果以及對目標的定位準確性;4. 打印結(jié)果并進行討論。四、實驗結(jié)果1、使用自適應(yīng)閾值進行閾值化以及定位跟蹤結(jié)果1.1閾值結(jié)果及坐標1.2二值化圖樣及定位、跟蹤結(jié)果2、使用固定閾值進行閾值化以及定位跟蹤結(jié)果2.1.1閾值為150的結(jié)果及坐標2.1.2二值化圖樣及定位、跟蹤結(jié)果2.2.1閾值為250的結(jié)果及坐標2.2.2二值化圖樣及定位、跟蹤結(jié)果從以上實驗結(jié)果中可以看出,大津法得到的閾值使得前景和背景的錯分像素點數(shù)最少,因而使得二值化的分類結(jié)果和最終的檢測追蹤結(jié)果都非常地好。而固定閾值因為有人的因素在里邊,隨意性大,因而導(dǎo)致了二值化的結(jié)果較差,并最終使得檢測跟蹤的結(jié)果較差。在閾值設(shè)置為150的時候無法檢測跟蹤到目標,在閾值設(shè)置為250的時候雖然檢測到目標,但跟蹤框的位置明顯小了,說明在二值化的時候講過多的飛機上的像素點當成了背景,因而結(jié)果較差。五、實驗感想這是在我們進行的第一次圖像探測、跟蹤與識別技術(shù)的實驗,實驗中我們嘗試了使用大津法求得的閾值和固定閾值對同一幅圖片進行二值化,從結(jié)果來看,大津法得到的閾值的準確程度明顯比人為選擇的閾值要準確地多,這是因為大津閾值法對0-255灰度進行遍歷,當前景和背景錯分最少時的灰度作為最終灰度,因而二值化的準確程度要高很多。除了閾值化之外,我們還計算了目標的型心,并加入了跟蹤框,以對目標進行跟蹤。實驗總體雖然簡單,但是讓我們了解了一種,目標檢測跟蹤的方法,另外還提高了我們的編程能力??傮w上來說,這次試驗收獲很多。附實驗程序:#include <stdio.h>#include "StdAfx.h"#include <cv.h>#include <cxcore.h>#include <highgui.h>#include <iostream>using std:cout;using std:endl;int otsuThreshold(IplImage* img) int T = 0; int height = img->height; int width = img->width; int step = img->widthStep; int channels = img->nChannels; uchar* data = (uchar*)img->imageData; double gSum0;/ double gSum1; double N0 = 0;/ double N1 = 0;/ double u0 = 0;/度 double u1 = 0;/度 double w0 = 0;/ 0 double w1 = 0;/ double u = 0;/ double tempg = -1;/ double g = -1; double Histogram256=0; double N = width*height;/ for(int i=0;i<height;i+) for(int j=0;j<width;j+) double temp =datai*step + j ;/ temp = temp<0? 0:temp; temp = temp>255? 255:temp; Histogram(int)temp+; for (int i = 0;i<256;i+) gSum0 = 0; gSum1 = 0; N0 += Histogrami; N1 = N-N0; if(0=N1)break; w0 = N0/N; w1 = 1-w0; for (int j = 0;j<=i;j+) gSum0 += j*Histogramj; u0 = gSum0/N0; for(int k = i+1;k<256;k+) gSum1 += k*Histogramk; u1 = gSum1/N1; u = w0*u0 + w1*u1; g = w0*w1*(u0-u1)*(u0-u1); if (tempg<g) tempg = g; T = i; return T; int main()IplImage* pImg;pImg = cvLoadImage("plane1.bmp",0);int T=250;cout<<"設(shè)定/大津法求得?的?閾D值為a:o"<<T;cout<<endl;int count=0;/int xsumx=0;int ysumy=0int xmin=pImg->height;int ymin=pImg->width;int xmax=0;int ymax=0;IplImage* pImg1=pImg;for(int i=0;i<pImg1->height;i+) uchar* ptr=(uchar*)(pImg1->imageData+i*pImg1->widthStep);for(int j=0;j<pImg1->width;j+) double temp =ptrj; if(temp>T)ptrj=255;count+;xsumx+=j;ysumy+=i;if(i>=ymax)ymax=i;if(j>=xmax)xmax=j;if(i<=ymin)ymin=i;if(j<=xmin)xmin=j;elseptrj=0; int xzuobiao=(int)xsumx/count;int yzuobiao=(int)ysumy/count;cout<<"中D心?坐?標X為a:o"<<xzuobiao;cout<<endl;cout<<"中D心?坐?標Y為a:o"<<yzuobiao;cout<<endl;/IplImage* pImg3=cvLoadImage("plane1.bmp",0);CvPoint2D32f point4;int jukuandu=80;int jugaodu=45;point0.x=xmin-10;point1.x=xmin-10;point2.x=xmax+10;point3.x=xmax+10;point0.y=ymin-10;point1.y=ymax+10;point2.y=ymax+10;point3.y=ymin-10;CvPoint pt4; for (int i=0; i<4; i+) pti.x = (int)pointi.x; pti.y = (int)pointi.y; cvLine( pImg3, pt0, pt1,CV_RGB(255,255,255), 1, 1, 0 ); cvLine( pImg3, pt1, pt2,CV_RGB(255,255,255), 1, 1, 0 ); cvLine( pImg3, pt2, pt3,CV_RGB(255,255,255), 1, 1, 0 ); cvLine( pImg3, pt3, pt0,CV_RGB(255,255,255), 1, 1, 0 ); cvNamedWindow( "Image1",1); cvShowImage( "Image1", pImg1 );cvNamedWindow("Image3",1);cvShowImage("Image3",pImg3); cvWaitKey(0); cvDestroyWindow( "Image1" );cvDestroyWindow( "Image3" ); cvReleaseImage( &pImg ); cvReleaseImage( &pImg1 );cvReleaseImage( &pImg3 );return 0;