北京航空航天大学目标检测与跟踪实验报告1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《图像探测、跟踪与识别技术》实验报告(一)
专业:探测制导与控制技术
学号:
姓名:
目录
一、实验目的 (3)
二、实验要求 (3)
三、实验步骤 (3)
四、实验结果 (4)
1、使用自适应阈值进行阈值化以及定位跟踪结果 (4)
1.1阈值结果及坐标 (4)
1.2二值化图样及定位、跟踪结果 (4)
2、使用固定阈值进行阈值化以及定位跟踪结果 (5)
2.1.1阈值为150的结果及坐标 (5)
2.1.2二值化图样及定位、跟踪结果 (5)
2.2.1阈值为250的结果及坐标 (6)
2.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
#include"StdAfx.h"
#include
#include
#include
#include
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 Histogram[256]={0};
double N = width*height;/
for(int i=0;i { for(int j=0;j { double temp =data[i*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 += Histogram[i]; N1 = N-N0; if(0==N1)break; w0 = N0/N; w1 = 1-w0; for (int j = 0;j<=i;j++) { gSum0 += j*Histogram[j]; } u0 = gSum0/N0; for(int k = i+1;k<256;k++) { gSum1 += k*Histogram[k]; } u1 = gSum1/N1; u = w0*u0 + w1*u1; g = w0*w1*(u0-u1)*(u0-u1); if (tempg