欢迎来到天天文库
浏览记录
ID:52715872
大小:219.50 KB
页数:5页
时间:2020-03-29
《立体球的深度图像生成.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、立体球的深度图像生成--《深度图像分析》实验报告实验目的:1,练习使用计算机生成深度图像的方法;2,通过编程计算,掌握深度图像,及表面高斯曲率,平均曲率和表面类型标号的概念和计算方法。实验要求:1.产生的图像大小:512×512;2.深度图像数据能够存盘和读取;3.深度数据与图像灰度值相适应,取8位整数,0-255之间;4.深度图像的参考平面取Z=-C,C为球半径。实验原理:立体球的表面公式为:2、。b5E2RGbCAP表面S在相对于已知的坐标系中的参数形式为:-<1)令,,,,,,为表面单位法向量,那么形状算子矩阵[S]为:5/5-<2)表面的高斯曲率函数K可由式<3)定义:-<3)表面的平均曲率函数H,定义为形状算子矩阵的迹的一半,即:-(4>表面的曲率函数K和H,是形状算子矩阵的两个“固有”的代数不变量,且它们独立于参数化方法。此外,高斯曲率唯一地确定凸表面地形状,而平均曲率在一定的辅佐条件下,可唯一地确定图形表面的形状。式<5)定义了一个符号函数:p1EanqFDPw-<5)可以用它来计算一个表面的类型符号,这种计算在每一点仅基于和,且3、使用零阀值和,计算方法为:-<6)这样计算出来的表面类型标号为1到9,见下表:K>0K=0K<0H<0T=1峰T=2脊T=3鞍脊H=0T=4无T=5平T=6最小表面H>0T=7凹T=8谷T=9鞍谷将立体球的直角坐标表示成参数形式,即球坐标形式:-<7),为伟度,为经度则:,球表面的高斯曲率函数为:-<8)平均曲率函数为:5/5-<9)由公式(5>,(6>,(8>,(9>可以计算得到球的表面类型标号为1,峰。编程实现:编程步骤:1.运行VC++AppWizard创建一单文档运用程序,在Step6中将视图类的基类选择为CFormView,建立一个对话框与4、窗口相结合的运用程序。DXDiTa9E3d2.在ResourceView中添加一个对话框,提示输入所要建立深度图像的立体球的半径。3.在程序View类中分别创建新建,保存和打开函数,与工具栏和菜单对应项分别关联。在新建函数中,调用了输入半径的对话框,将用户输入的半径radius保存入一个变量中,然后根据该半径计算平面坐标上各个坐标的深度,并用0-255的灰度值表示,最大深度radius为球的顶点,灰度为255,参考平面上的圆深度为0,灰度为128,最小深度-radius为球的背面顶点,灰度为0,由此一一对应,在运用程序的主窗口上显示,由于参考平面的遮5、挡,只能画出正面半个球;保存函数中,调用系统的保存函数GetSaveFileName(>,由用户选择保存路径,利用CFile类对象将深度图像以256色位图形式,大小为512×512的格式保存入磁盘中;打开函数中,创建CFileDialog对象,弹出系统的打开文件的对话框,利用CFile类对象打开文件,同时限制了打开文件的类型和大小,只允许打开保存函数中保存的格式,打开文件的同时计算球半径。RTCrpUDGiT4.在ResourceView中对话框:IDD_RI_FORM中添加5个EditBox控件,它们分别表示:球半径,图像深度,高斯曲率,平均曲率和6、表面类型标号。在ClassWizard中MemberVariables选项建立它们相对应的变量。5PCzVD7HxA5.建立函数CalculateKH(CPointpoint>,计算球表面的高斯曲率函数,平均曲率函数和表面类型标号。jLBHrnAILg6.建立响应windows鼠标移动消息WM_MOUSEMOVE的函数OnMouseMove<),在该函数中主要实现,当鼠标在深度图像上移动时,在图像右侧实时显示出各个坐标点的深度,高斯曲率,平均曲率和表面类型标号。当鼠标不在球体的范围内时,深度,高斯曲率和平均曲率的显示均为0,表面类型标号为5即表示平面7、。xHAQX74J0X实验结果:如图<1),为编译后的应用程序界面,图中新建了一个半径为140的球体的深度图像,鼠标移动在z=129处。LDAYtRyKfE5/5<1)从图中可以看出高斯曲率随着伟度变化而变化,在伟度为90度时达到最大,平均曲率由半径决定,球表面类型标号为1。Zzz6ZB2Ltk如图<2),半径仍为140,鼠标移动在球体范围之外。<2)从图中可以看到,图像深度,高斯曲率和平均曲率此时都为零,表面类型标号设为5,即表示平面。如图<3),半径为2305/5<3)申明:所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。5/5
2、。b5E2RGbCAP表面S在相对于已知的坐标系中的参数形式为:-<1)令,,,,,,为表面单位法向量,那么形状算子矩阵[S]为:5/5-<2)表面的高斯曲率函数K可由式<3)定义:-<3)表面的平均曲率函数H,定义为形状算子矩阵的迹的一半,即:-(4>表面的曲率函数K和H,是形状算子矩阵的两个“固有”的代数不变量,且它们独立于参数化方法。此外,高斯曲率唯一地确定凸表面地形状,而平均曲率在一定的辅佐条件下,可唯一地确定图形表面的形状。式<5)定义了一个符号函数:p1EanqFDPw-<5)可以用它来计算一个表面的类型符号,这种计算在每一点仅基于和,且
3、使用零阀值和,计算方法为:-<6)这样计算出来的表面类型标号为1到9,见下表:K>0K=0K<0H<0T=1峰T=2脊T=3鞍脊H=0T=4无T=5平T=6最小表面H>0T=7凹T=8谷T=9鞍谷将立体球的直角坐标表示成参数形式,即球坐标形式:-<7),为伟度,为经度则:,球表面的高斯曲率函数为:-<8)平均曲率函数为:5/5-<9)由公式(5>,(6>,(8>,(9>可以计算得到球的表面类型标号为1,峰。编程实现:编程步骤:1.运行VC++AppWizard创建一单文档运用程序,在Step6中将视图类的基类选择为CFormView,建立一个对话框与
4、窗口相结合的运用程序。DXDiTa9E3d2.在ResourceView中添加一个对话框,提示输入所要建立深度图像的立体球的半径。3.在程序View类中分别创建新建,保存和打开函数,与工具栏和菜单对应项分别关联。在新建函数中,调用了输入半径的对话框,将用户输入的半径radius保存入一个变量中,然后根据该半径计算平面坐标上各个坐标的深度,并用0-255的灰度值表示,最大深度radius为球的顶点,灰度为255,参考平面上的圆深度为0,灰度为128,最小深度-radius为球的背面顶点,灰度为0,由此一一对应,在运用程序的主窗口上显示,由于参考平面的遮
5、挡,只能画出正面半个球;保存函数中,调用系统的保存函数GetSaveFileName(>,由用户选择保存路径,利用CFile类对象将深度图像以256色位图形式,大小为512×512的格式保存入磁盘中;打开函数中,创建CFileDialog对象,弹出系统的打开文件的对话框,利用CFile类对象打开文件,同时限制了打开文件的类型和大小,只允许打开保存函数中保存的格式,打开文件的同时计算球半径。RTCrpUDGiT4.在ResourceView中对话框:IDD_RI_FORM中添加5个EditBox控件,它们分别表示:球半径,图像深度,高斯曲率,平均曲率和
6、表面类型标号。在ClassWizard中MemberVariables选项建立它们相对应的变量。5PCzVD7HxA5.建立函数CalculateKH(CPointpoint>,计算球表面的高斯曲率函数,平均曲率函数和表面类型标号。jLBHrnAILg6.建立响应windows鼠标移动消息WM_MOUSEMOVE的函数OnMouseMove<),在该函数中主要实现,当鼠标在深度图像上移动时,在图像右侧实时显示出各个坐标点的深度,高斯曲率,平均曲率和表面类型标号。当鼠标不在球体的范围内时,深度,高斯曲率和平均曲率的显示均为0,表面类型标号为5即表示平面
7、。xHAQX74J0X实验结果:如图<1),为编译后的应用程序界面,图中新建了一个半径为140的球体的深度图像,鼠标移动在z=129处。LDAYtRyKfE5/5<1)从图中可以看出高斯曲率随着伟度变化而变化,在伟度为90度时达到最大,平均曲率由半径决定,球表面类型标号为1。Zzz6ZB2Ltk如图<2),半径仍为140,鼠标移动在球体范围之外。<2)从图中可以看到,图像深度,高斯曲率和平均曲率此时都为零,表面类型标号设为5,即表示平面。如图<3),半径为2305/5<3)申明:所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。5/5
此文档下载收益归作者所有