数字摄影测量实习报告_摄影测量集中实习报告

2020-02-28 实习报告 下载本文

数字摄影测量实习报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“摄影测量集中实习报告”。

数字摄影测量实习报告书

学 号:20111000684 班级序号: 113112-05 姓 名: 舒 超 指导老师: 宋 妍 成 绩:

中国地质大学(武汉)信息工程学院遥感科学技术系

2014年6月

目录

实习一:Moravec算子点特征提取........................................................................................3 1.1 实习目的:....................................................................................................................3 1.2 实习原理:....................................................................................................................3 1.3 实习步骤以及代码分析:............................................................................................3 1.4 结果分析:....................................................................................................................7 实习二:边缘提取算法...........................................................................................................9 2.1 实习目的:....................................................................................................................9 2.2 实习原理:....................................................................................................................9 2.3 实习步骤以及代码:....................................................................................................9 2.4 结果分析:..................................................................................................................11 实习总结.................................................................................................................................12

实习一: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

{

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

{

for(DWORDn=(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

{

CStringstrInfo;

strInfo.Format(“特征点数%dn”,sum);

MeageBox(strInfo,“提示”,MB_OK);

}

else

{

CStringstrInfo;

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

MeageBox(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算子的边缘提取就将许多的噪音提取了出来,导致边缘特征提取的不准确性。本次实习让我认识到了编程能力的重要性,学会编写基本的代码来实现基本的算法,能让我们摆脱软件已有算法的束缚,更多的按照需要来实现一些步骤。

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

《数字摄影测量实习报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
数字摄影测量实习报告
点击下载文档
相关专题 摄影测量集中实习报告 实习报告 测量 数字 摄影测量集中实习报告 实习报告 测量 数字
[实习报告]相关推荐
    [实习报告]热门文章
      下载全文