北京航空航天大学目标检测与跟踪实验报告.docx
图像探测、跟踪与识别技术实验报告(一)专业:探测制导与控制技术 学号: 姓名: 目录一、实验目的3二、实验要求3三、实验步骤3四、实验结果41、使用自适应阈值进行阈值化以及定位跟踪结果41.1阈值结果及坐标41.2二值化图样及定位、跟踪结果42、使用固定阈值进行阈值化以及定位跟踪结果52.1.1阈值为150的结果及坐标52.1.2二值化图样及定位、跟踪结果52.2.1阈值为250的结果及坐标62.2.2二值化图样及定位、跟踪结果6五、实验感想7附实验程序:7实验一 基于形心的目标检测方法一、实验目的1. 学习常用的图像阈值分割方法以及不同方法对目标的不同分割效果;2. 学习如何利用形心方法将目标定位;3. 了解目标检测方法的本质并为课堂教学提供配套的实践机会。二、实验要求要求学生能够根据目标图像特点,自行选择在不同噪声条件下和背景条件下的目标分割算法。完成规定图像的目标检测,并利用检测跟踪窗来表示检测到的目标位置信息。三、实验步骤1. 分别利用固定阈值和自适应阈值T,对图像二值化。2在VC6.0平台下编写阈值计算函数,形心计算函数;3. 观察不同阈值方法对目标的分割效果以及对目标的定位准确性;4. 打印结果并进行讨论。四、实验结果1、使用自适应阈值进行阈值化以及定位跟踪结果1.1阈值结果及坐标1.2二值化图样及定位、跟踪结果2、使用固定阈值进行阈值化以及定位跟踪结果2.1.1阈值为150的结果及坐标2.1.2二值化图样及定位、跟踪结果2.2.1阈值为250的结果及坐标2.2.2二值化图样及定位、跟踪结果从以上实验结果中可以看出,大津法得到的阈值使得前景和背景的错分像素点数最少,因而使得二值化的分类结果和最终的检测追踪结果都非常地好。而固定阈值因为有人的因素在里边,随意性大,因而导致了二值化的结果较差,并最终使得检测跟踪的结果较差。在阈值设置为150的时候无法检测跟踪到目标,在阈值设置为250的时候虽然检测到目标,但跟踪框的位置明显小了,说明在二值化的时候讲过多的飞机上的像素点当成了背景,因而结果较差。五、实验感想这是在我们进行的第一次图像探测、跟踪与识别技术的实验,实验中我们尝试了使用大津法求得的阈值和固定阈值对同一幅图片进行二值化,从结果来看,大津法得到的阈值的准确程度明显比人为选择的阈值要准确地多,这是因为大津阈值法对0-255灰度进行遍历,当前景和背景错分最少时的灰度作为最终灰度,因而二值化的准确程度要高很多。除了阈值化之外,我们还计算了目标的型心,并加入了跟踪框,以对目标进行跟踪。实验总体虽然简单,但是让我们了解了一种,目标检测跟踪的方法,另外还提高了我们的编程能力。总体上来说,这次试验收获很多。附实验程序:#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<<"设¦¨¨定¡§/大䨮津¨°法¤¡§求¨®得Ì?的Ì?阈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;