数字摄影测量实习报告.docx

上传人:b****5 文档编号:4266654 上传时间:2022-11-28 格式:DOCX 页数:11 大小:829.64KB
下载 相关 举报
数字摄影测量实习报告.docx_第1页
第1页 / 共11页
数字摄影测量实习报告.docx_第2页
第2页 / 共11页
数字摄影测量实习报告.docx_第3页
第3页 / 共11页
数字摄影测量实习报告.docx_第4页
第4页 / 共11页
数字摄影测量实习报告.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数字摄影测量实习报告.docx

《数字摄影测量实习报告.docx》由会员分享,可在线阅读,更多相关《数字摄影测量实习报告.docx(11页珍藏版)》请在冰豆网上搜索。

数字摄影测量实习报告.docx

数字摄影测量实习报告

数字摄影测量实习报告书

 

学号:

20111000684

班级序号:

113112-05

姓名:

舒超

指导老师:

宋妍

成绩:

 

中国地质大学(武汉)

信息工程学院遥感科学技术系

2014年6月

目录

实习一:

Moravec算子点特征提取3

1.1实习目的:

3

1.2实习原理:

3

1.3实习步骤以及代码分析:

4

1.4结果分析:

8

实习二:

边缘提取算法10

2.1实习目的:

10

2.2实习原理:

10

2.3实习步骤以及代码:

10

2.4结果分析:

12

实习总结13

 

实习一:

Moravec算子点特征提取

1.1实习目的:

用程序设计语言(VisualC++或者C语言)编写一个完整的提取点特征的程序,通过对提供的图像数据进行特征点提取,输出提取出的点特征坐标。

本实验的目的在于让学生深入理解Moravec算子原理。

通过上机调试程序加强动手能力的培养,通过对实验结果的分析,增强学生综合运用所学知识解决实际问题的能力。

1.2实习原理:

Moravec角点检测算法是最早的角点检测算法之一。

该算法将角点定义为具有低“自相关性”的点。

算法会检测图像的每一个像素,将像素周边的一个邻域作为一个patch,并检测这个patch和周围其他patch的相关性。

这种相关性通过两个patch间的平方差之和(SSD)来衡量,SSD值越小则相似性越高。

如果像素位于平滑图像区域内,周围的patch都会非常相似。

如果像素在边缘上,则周围的patch在与边缘正交的方向上会有很大差异,在与边缘平行的方向上则较为相似。

而如果像素是各个方向上都有变化的特征点,则周围所有的patch都不会很相似。

Moravec会计算每个像素patch和周围patch的SSD最小值作为强度值,取局部强度最大的点作为特征点。

1.3实习步骤以及代码分析:

 

步骤流程图如下:

程序实现以及相关关键代码:

voidCMy2010302590183cylView:

:

OnMoravec()//读取图像以及相关算法

{

//TODO:

Addyourcommandhandlercodehere

CMmoravecDlgdlg;

dlg.DoModal();

CMy2010302590183cylDoc*pDoc=GetDocument();

LPSTRm_pDIB=(LPSTR):

:

GlobalLock((HGLOBAL)pDoc->hdib);//得到句柄内存起始地址存放位图数据hdib句柄变量存放BMP位图

:

:

GlobalUnlock((HGLOBAL)pDoc->hdib);

LPBITMAPINFOm_pBMP;//指向BITMAPINFO结构的指针

m_pBMP=(LPBITMAPINFO):

:

GlobalLock(pDoc->hdib);

//获取指向BITMAPINFO结构的指针

:

:

GlobalUnlock((HGLOBAL)pDoc->hdib);

intBitCount=m_pBMP->bmiHeader.biBitCount;

DWORDWidth=:

:

DIBWidth(m_pDIB);//获取位图宽

DWORDHeight=:

:

DIBHeight(m_pDIB);//获取位图高

LPBYTElpData=(LPBYTE):

:

FindDIBBits(m_pDIB);//定义字符指针变量,原位图指针

intWidthBytes=WIDTHBYTES(Width*BitCount);//获取字节

DWORDpixelCount=WidthBytes*Height;

intck1=dlg.c1;

intck2=dlg.c2;

doubleyz=dlg.m_yuzhi;

DWORDr,c;

INTh;

double*xx=newdouble[Width*Height];

intk;

k=INT(ck1/2);

for(r=ck1/2;r

for(c=ck1/2;c

{

doublemin,v[4]={0.0};

for(h=0;h<=ck1-1;h++){

v[0]+=pow((double)(*((BYTE*)(lpData+r*WidthBytes+(c-k+h)))-*((BYTE*)(lpData+(r)*WidthBytes+(c-k+1+h)))),2);//0°方向

v[1]+=pow((double)(*((BYTE*)(lpData+(r-k+h)*WidthBytes+(c+k-h)))-*((BYTE*)(lpData+(r-k+h+1)*WidthBytes+(c+k-h-1)))),2);

//45°方向

v[2]+=pow((double)(*((BYTE*)(lpData+(r-k+h)*WidthBytes+(c)))-*((BYTE*)(lpData+(r-k+1+h)*WidthBytes+(c)))),2);

//90°方向

v[3]+=pow((double)(*((BYTE*)(lpData+(r-k+h)*WidthBytes+(c-k+h)))-*((BYTE*)(lpData+(r-k+1+h)*WidthBytes+(c-k+h+1)))),2);

//135°方向

}

min=min(min(min(v[0],v[1]),v[2]),v[3]);

//求出v1,v2,v3,v4中的最小值

if(min>yz)

xx[r*Width+c]=min;

}

bool*bMatrix=newbool[Width*Height];

memset(bMatrix,0,Width*Height*sizeof(bool));

DWORDx,y;

doublemax2;

boolb=false;

inttempX(0),tempY(0);

for(x=ck2/2;x

{

for(y=ck2/2;y

{

max2=0;

for(DWORDm=(x-ck2/2);m<(x+ck2/2);m++)

{

for(DWORDn=(y-ck2/2);n<(y+ck2/2);n++)

if(xx[m*Width+n]>max2)

{

max2=xx[m*Width+n];

tempY=m;

tempX=n;

b=true;

}

}

if(b)

{bMatrix[tempY*Width+tempX]=1;}

}

}

 

intsum=0;//特征点总数

for(DWORDi=0;i

for(DWORDj=0;j

{

if(bMatrix[i*Width+j])

{

*((BYTE*)(lpData+i*WidthBytes+j))=0;

*((BYTE*)(lpData+i*WidthBytes+j+1))=0;

*((BYTE*)(lpData+i*WidthBytes+j-1))=0;

*((BYTE*)(lpData+(i+1)*WidthBytes+j))=0;

*((BYTE*)(lpData+(i-1)*WidthBytes+j))=0;

*((BYTE*)(lpData+i*WidthBytes+j+2))=0;

*((BYTE*)(lpData+i*WidthBytes+j-2))=0;

*((BYTE*)(lpData+(i+2)*WidthBytes+j))=0;

*((BYTE*)(lpData+(i-2)*WidthBytes+j))=0;

sum++;

}

}

if(sum<4000)

{

CStringstrInfo;

strInfo.Format("特征点数%d\n",sum);

MessageBox(strInfo,"提示",MB_OK);

}

else

{

CStringstrInfo;

strInfo.Format("特征点数较多,请设置合理参数");

MessageBox(strInfo,"提示",MB_OK);

}

Invalidate();

}

1.4结果分析:

按照提示,对老师所给数据进行分析,当窗口大小设置为5*5,,阈值设置为5000的时候,对右核线影像进行分析,得到特征点43个,同时图像分析,得出如下结果:

调整阈值和窗口大小,程序能够正常运行,且经过测试,结果精确度有较好的保证。

 

实习二:

边缘提取算法

2.1实习目的:

熟悉Matlab环境下的编程,熟悉边缘提取算法。

2.2实习原理:

Sobel算子实现思路如下:

对输入图像分别使用水平和垂直模板做卷积计算,对得到的两个处理结果求平方和,该平方和与阈值的平方比较。

只有当某点的两种卷积的平方大于阈值的平方,且水平占优(水平模板卷积结果大于垂直模板卷积的结果,且该点的卷积平方大于其左右两点的卷积平方和)或者垂直占优(垂直模板卷积的结果大于水平模板卷积的结果,且该点的卷积平方和大于其上下两点的卷积平方和)时,该点的输出结果为255,否则为0。

输出的结果为二值图像。

第一行和最后一行本来就是图像边界,不包括可用信息,因此相应的输出为0,按照这个思路课题编写了相应的Sobel算子实现程序

2.3实习步骤以及代码:

2.4结果分析:

原图像sobel边缘提取

实习总结

本次实习过程中,根据自身实际情况,我选择使用vc环境下的编程完成实习,而没有采用Matlab环境下的编程。

在实习过程中,我熟悉了sobel算法以及Moravec算子,在程序调试的过程中,我认识到任何算法都有其局限性,比如说本次实习过程中,sobel算子的边缘提取就将许多的噪音提取了出来,导致边缘特征提取的不准确性。

本次实习让我认识到了编程能力的重要性,学会编写基本的代码来实现基本的算法,能让我们摆脱软件已有算法的束缚,更多的按照需要来实现一些步骤。

总体来说,本次实习还是很成功的,让我认识到,在以后的学习生活中,我认识到,应该把理论和实践结合起来,多锻炼自己的动手能力,好好把握住每一次实习的机会.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1