X-opengl立方体的简单三维交互式几何变换实验报告代码

X-opengl立方体的简单三维交互式几何变换实验报告代码
X-opengl立方体的简单三维交互式几何变换实验报告代码

立方体的简单三维交互式几何变换

立方体的简单三维交互式几何变换。

功能:键盘的方向键实现立方体的上下左右平移;A键,S键分别实现向前,向后旋转;J键,K键分别实现放大,缩小;C键退出。

程序模块:

1.重绘回调函数,在窗口首次创建或用户改变窗口尺寸时被调用。void reshape(int w, int h)

{

glViewport(0, 0, w, h);// 指定视口的位置和大小

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

//glFrustum(-1.0, 1.0, -1.0, 1.0, 3.1, 10.0);

//gluPerspective(45,1,0.1,10.0);

glOrtho(-2.0, 2.0, -2.0, 2.0, 2.0, 10.0);

}

2.绘制一个立方体。

void DrawBox()

{

glBegin(GL_QUADS);

//前面

glColor3f(1,0,0);

glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的左下glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的右下glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右上glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左上// 后面

glColor3f(0,1,0);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右下glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的右上glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的左上glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左下

// 顶面

glColor3f(0,0,1);

glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的左上glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左下glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右下glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上// 底面

glColor3f(1,1,0);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右上glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左上glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下

glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的右下

// 右面

glColor3f(0,1,1);

glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的右下

glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上

glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的左上

glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下

// 左面

glColor3f(1,0,1);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的左下

glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的右下

glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的右上

glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的左上

glEnd();

}

3.该模块设置屏幕颜色和深度缓存,设置立方体的平移,缩放,旋转变换。

void display()

{

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); //清空颜色和深度缓存

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

//gluLookAt(2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

glTranslatef(0.0f+tx,0.0f+ty,-4.0f);//平移变换

glScalef(1+sf,1+sf,1+sf); //缩放变换

glRotatef(ratX, 1.0f, 0.0f, 0.0f);//绕X轴的旋转变换

glRotatef(ratY, 0.0f, 1.0f, 0.0f);//绕Y轴的旋转变换

glRotatef(ratZ, 0.0f, 0.0f, 1.0f);//绕Z轴的旋转变换DrawBox();

glFlush();

glutSwapBuffers();

}

4.该模块为设置深度缓存和启动深度测试模式。

void init()

{

glClearColor (1.0, 1.0, 1.0, 1.0);

glEnable(GL_DEPTH_TEST); //启动深度测试模式}

5.该模块为设置键盘的交互式操作。

void myKeyboard(unsigned char key, int x, int y)

{

if(key == 'a' || key == 'A')

ratX += 2;

ratY += 2;

ratZ += 2;

if(key == 's' || key == 'S')

ratX -= 2;

ratY -= 2;

ratZ -= 2;

if(key == 'j' || key == 'J')

sf+=0.1;

if(key == 'k' || key == 'K')

sf-=0.1;

if(key == 'c' || key == 'C')

exit(0);

glutPostRedisplay(); //重新调用绘制函数

}

6.该模块为设置键盘方向键的交互式操作。void myspecialKeyboard(int key,int x,int y){ if(key == GLUT_KEY_UP )

ty+=0.1;

if(key == GLUT_KEY_DOWN)

ty-=0.1;

if(key ==GLUT_KEY_LEFT)

if(key==GLUT_KEY_RIGHT)

tx+=0.1;

glutPostRedisplay();

}

7.主函数模块,实现设置显示模式(窗口大小,位置),调用函数操作。int main(int argc, char** argv)

{

glutInit(&argc,argv); // 初始GLUT.

glutInitDisplayMode (GLUT_DEPTH |GLUT_DOUBLE | GLUT_RGB); //设定显示模式

glutInitWindowSize(400,400); // 设定窗口大小

glutInitWindowPosition(50,100); // 设定窗口位置

glutCreateWindow("立方体的简单三维交互式几何变换"); // 用前面指定参数创建

glutReshapeFunc(reshape); //指定重绘回调函数

glutDisplayFunc(display); // 进行一些初始化工作

glutKeyboardFunc( myKeyboard); //指定键盘回调函数

glutSpecialFunc(myspecialKeyboard); //指定键盘回调函数

init();

glutMainLoop();// 进入无穷循环,等待事件处理

}

立方体的平移:上平移

下平移:

左平移:

右平移:

放大:

旋转:

#include

#include

#include

float ratX = 60;

float ratY = 60;

float ratZ = 60;

float tx=0;

float ty=0;

float sf=0;

void DrawBox()

{

glBegin(GL_QUADS);

//前面

glColor3f(1,0,0);

glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的左下

glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的右下

glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右上

glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左上// 后面

glColor3f(0,1,0);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右下

glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的右上glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的左上glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左下

// 顶面

glColor3f(0,0,1);

glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的左上glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左下glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右下glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上// 底面

glColor3f(1,1,0);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右上glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左上glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的右下// 右面

glColor3f(0,1,1);

glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的右下glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的左上glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下// 左面

glColor3f(1,0,1);

glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的左下

glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的右下

glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的右上

glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的左上

glEnd();

}

void display()

{

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); //清空颜色和深度缓存

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

//gluLookAt(2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

glTranslatef(0.0f+tx,0.0f+ty,-4.0f);//平移变换

glScalef(1+sf,1+sf,1+sf); //缩放变换

glRotatef(ratX, 1.0f, 0.0f, 0.0f);//绕X轴的旋转变换

glRotatef(ratY, 0.0f, 1.0f, 0.0f);//绕Y轴的旋转变换

glRotatef(ratZ, 0.0f, 0.0f, 1.0f);//绕Z轴的旋转变换

DrawBox();

glFlush();

glutSwapBuffers();

}

void reshape(int w, int h) //重绘回调函数,在窗口首次创建或用户改变窗口尺寸时被调用

{

glViewport(0, 0, w, h);// 指定视口的位置和大小

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

//glFrustum(-1.0, 1.0, -1.0, 1.0, 3.1, 10.0);

//gluPerspective(45,1,0.1,10.0);

glOrtho(-2.0, 2.0, -2.0, 2.0, 2.0, 10.0);

}

void init()

{

glClearColor (1.0, 1.0, 1.0, 1.0);

glEnable(GL_DEPTH_TEST); //启动深度测试模式

}

void myKeyboard(unsigned char key, int x, int y) {

if(key == 'a' || key == 'A')

ratX += 2;

ratY += 2;

ratZ += 2;

if(key == 's' || key == 'S')

ratX -= 2;

ratY -= 2;

ratZ -= 2;

if(key == 'j' || key == 'J')

sf+=0.1;

if(key == 'k' || key == 'K')

sf-=0.1;

if(key == 'c' || key == 'C')

exit(0);

glutPostRedisplay(); //重新调用绘制函数

}

void myspecialKeyboard(int key,int x,int y){

if(key == GLUT_KEY_UP )

ty+=0.1;

if(key == GLUT_KEY_DOWN)

ty-=0.1;

if(key ==GLUT_KEY_LEFT)

tx-=0.1;

if(key==GLUT_KEY_RIGHT)

tx+=0.1;

glutPostRedisplay();

}

int main(int argc, char** argv)

{

glutInit(&argc,argv); // 初始GLUT.

glutInitDisplayMode (GLUT_DEPTH |GLUT_DOUBLE | GLUT_RGB); //设定显示模式

glutInitWindowSize(400,400); // 设定窗口大小

glutInitWindowPosition(50,100); // 设定窗口位置

glutCreateWindow("立方体的简单三维交互式几何变换"); // 用前面指定参数创建

glutReshapeFunc(reshape); //指定重绘回调函数

glutDisplayFunc(display); // 进行一些初始化工作

glutKeyboardFunc( myKeyboard); //指定键盘回调函数

glutSpecialFunc(myspecialKeyboard); //指定键盘回调函数init();

glutMainLoop();// 进入无穷循环,等待事件处理

}

几何画板实验报告

一.实验内容:画出一个正方形 二.实验目的:学会使用变换中的旋转按钮 三.实验步骤: ①画出一条线段; ②选中线段左端点双击,标记中心; ③选中线段和另一端点,选择变换中的旋转按钮,并设置旋转角度为90°,然后在依次做出另外两条边。 四.实验结果 实验二 一实验内容:构造三角形的中线 二实验目的:学会构造线段中点

三实验步骤: ①单击线段工具,构造出一个三角形ABC; ②选中线段AB,执行构造-中点命令,构造出AB中点D ③单击线段工具,连接CD. 四实验结果 实验三 一实验内容:构造三角形的外心 二实验目的:学会构造线段的中垂线 三实验步骤: ①单击线段工具,构造出一个三角形ABC; ②选中线段AB,执行构造-中点命令,构造出AB中点D,同时选中AB和D,执行构造-垂线

③在AC上重复②,两垂线交点即为外心 四实验结果 一实验内容:绘制三角形的内心 二实验目的:学会构造已知角的平分线 三实验步骤: ①画出任意三点A,B,C,选中A,B.C三点,执行构造-线段,构造出三角形ABC; ②依次选中B,A,C,执行构造-角平分线,构造出BAC ∠的角平分线i; ③按照②的步骤做出ABC ∠的角平分线j; ④选中i,j,执行构造-中点命令,构造出三角形内心D; ⑤选中i,j,执行显示-隐藏平分线,隐藏平分线。 四实验结果:

实验五 一实验内容:绘制函数x =的函数图像 y3 二实验目的:绘图菜单的使用方法 三实验步骤: ①执行绘图-定义坐标系命令,新建坐标系,并将原点坐标的标签设为O; ②执行数据-新建函数命令,新建函数x =; y3 ③选中函数,执行绘图-绘制函数命令,画出x =的函数图像. y3 四实验结果

图形学实验报告

计 算 机 图 形 学 实验指导书 学号:1441901105 姓名:谢卉

实验一:图形的几何变换 实验学时:4学时 实验类型:验证 实验要求:必修 一、实验目的 二维图形的平移、缩放、旋转和投影变换(投影变换可在实验三中实现)等是最基本的图形变换,被广泛用于计算机图形学的各种应用程序中,本实验通过算法分析以及程序设计实验二维的图形变换,以了解变换实现的方法。如可能也可进行裁剪设计。 二、实验内容 掌握平移、缩放、旋转变换的基本原理,理解线段裁剪的算法原理,并通过程序设计实现上述变换。建议采用VC++实现OpenGL程序设计。 三、实验原理、方法和手段 1.图形的平移 在屏幕上显示一个人或其它物体(如图1所示),用交互操作方式使其在屏幕上沿水平和垂直方向移动Tx和Ty,则有 x’=x+Tx y’=y+Ty 其中:x与y为变换前图形中某一点的坐标,x’和y’为变换后图形中该点的坐标。其交互方式可先定义键值,然后操作功能键使其移动。 2.图形的缩放 在屏幕上显示一个帆船(使它生成在右下方),使其相对于屏幕坐标原点缩小s倍(即x方向和y方向均缩小s倍)。则有: x’=x*s y’=y*s 注意:有时图形缩放并不一定相对于原点,而是事先确定一个参考位置。一般情况下,参考点在图形的左下角或中心。设参考点坐标为xf、yf则有变换公式x’=x*Sx+xf*(1-Sx)=xf+(x-xf)*Sx y’=y*Sy+yf*(1-Sy)=yf+(y-yf)*Sy 式中的x与y为变换前图形中某一点的坐标,x’和y’为变换后图形中该点的坐标。当Sx>1和Sy>1时为放大倍数,Sx<1和Sy<1时为缩小倍数(但Sx和Sy

实验二、应用轨迹与跟踪功能绘制图形(几何画板)

实验二、应用轨迹与跟踪功能绘制图形 一、实验目的: 认识、分清主动点和被动点,学会应用轨迹与追踪功能绘制图形 二、实验内容 1、作出双曲线、抛物线的轨迹 2、设ABCD为矩形,P是AB上的一动点,过P作PE⊥AC于E,PF⊥BD于F, (1)作出EF的中点轨迹。 (2)作出线段EF运动的轨迹。 3、三角形ABC顶点A在一定圆上运动,另外两个顶点固定,作出三角形ABC外心的轨迹。并讨论分出各种情形。 4、作出与已知定圆、定直线都相切的圆的圆心的轨迹。 三、实验步骤 1、(1)做一条射线,取端点A和射线上一点B构成线段作为定长2a 做一条直线,上面取两点F1 、F2为焦点。|F1 F2| >|AB| 再在射线上取点C 构造线段AC、BC 以F1为圆心,AC为半径做圆,F2为圆心,BC为半径做圆。 两圆相交的两点分别记为F、G。 选中点C、F构造轨迹,选中点C、G构造轨迹。则得到双曲线的一支。同理作图得双曲线另一支。 (2)做一条直线,取点上两点A、B 构造线段AB,并以A为圆心,AB为半径做圆,交直线于点C

选中点A和直线构造垂线I 在此垂线上取一点E。 选中点E和垂线I,构造垂线m。 选中点E、B构造线段。并选择它作中点F。 选中F和线段构造垂线n。 m与n交于一点G。 选中点E、G构造轨迹。则得到抛物线。 2、(1)制作矩形ABCD,取P上一点。连接AC、BD。 选中P和AC构造垂线,与AC的交点为E。 选中P和BD构造垂线,与BD的交点为F。 选中E、F构造线段。选择线段EF构造中点。 选中P、及EF的中点构造轨迹。 (2)选中点P及线段EF构造轨迹。 3、在平面上作一个圆。取圆上一点O。构造三角形BCD 分别取三条边的中点作垂线。三条垂线交于一点即是外心E。 选中点A和外心E,构造轨迹。 讨论:当三角形为锐角三角形时,轨迹在三角形内或与三角形最长边相交;当三角形为直角三角形,该轨迹的一个端点为三角形斜边中点,其他点均在三角形外,并平行于竖直的直角边;当三角形为钝角时,轨迹完全在三角形外,或与三角形最长边相交。 结论:外心运动轨迹在定点CD边所做的中垂线上。 4、构造定圆O和定直线k。

图像灰度变换实验报告

图像灰度变换报告 一.实验目的 1.学会使用Matlab ; 2.学会用Matlab 软件对图像进行灰度变换,观察采用各种不同灰度变换发法对最终图像效果的影响; 二.实验内容 1.熟悉Matlab 中的一些常用处理函数 读取图像:img=imread('filename'); //支持TIF,JPEG,GIF,BMP,PNG 等文件格式。 显示图像:imshow(img,G); //G 表示显示该图像的灰度级数,如省略则默认为256。 保存图片:imwrite(img,'filename'); //不支持GIF 格式,其他与imread 相同。 亮度变换:imadjust(img,[low_in,high_in],[low_out,high_out]); //将low_in 至high_in 之间的值映射到low_out 至high_out 之 间,low_in 以下及high_in 以上归零。 绘制直方图:imhist(img); 直方图均衡化:histeq(img,newlevel); //newlevel 表示输出图像指定的灰度级数。 2.获取实验用图像:rice.jpg. 使用imread 函数将图像读入Matlab 。 3 .产生灰度变换函数T1,使得: 0.3r r < 0.35 s = 0.105 + 2.6333(r – 0.35) 0.35 ≤ r ≤ 0.65 1 + 0.3(r – 1) r > 0.65 用T1对原图像rice.jpg 进行处理,使用imwrite 函数保存处理后的新图像。 4.产生灰度变换函数T2,使得: s = 5.用T2imwrite 保存处理后的新图像。 6.分别用 s = r 0.6; s = r 0.4; s = r 0.3 对kids.tiff 图像进行处理。为简便起见,使用Matlab 中的imadjust 函数,最后用imwrite 保存处理后的新图像。 7.对circuit.jpg 图像实施反变换(Negative Transformation )。s =1-r; 使

AMI、HDB3码型变换实验

实验二码型变换AMI/HDB3实验 一.实验目的 1.了解二进制单极性码变换为AMI/HDB3 码的编码规则; 2.熟悉AMI码与HDB3 码的基本特征; 3.熟悉HDB3 码的编译码器工作原理和实现方法; 4.根据测量和分析结果,画出电路关键部位的波形; 二.实验仪器 1.JH7001 通信原理综合实验系统一台 2.双踪示波器一台 3.函数信号发生器一台 三、实验任务与要求 1实验原理和电路说明 1.1.1 实验原理 AMI 码的全称是传号交替反转码。这是一种将消息代码0(空号)和1(传号)按如下规则进行编码的码:代码的0 仍变换为传输码的0,而把代码中的1 交替地变换为传输码的+1、–1、+1、–1…由于AMI 码的传号交替反转,故由它决定的基带信号将出现正负脉冲交替,而0 电位保持不变的规律。由此看出,这种基带信号无直流成分,且只有很小的低频成分,因而它特别适宜在不允许这些成分通过的信道中传输。 由AMI 码的编码规则看出,它已从一个二进制符号序列变成了一个三进制符号序列,即把一个二进制符号变换成一个三进制符号。把一个二进制符号变换成一个三进制符号所构成的码称为1B/1T 码型。。AMI 码对应的波形是占空比为0.5 的双极性归零码,即脉冲宽度τ与码元宽度(码元周期、码元间隔)TS 的关系是τ=0.5TS。 AMI 码除有上述特点外,还有编译码电路简单及便于观察误码情况等优点,它是一种基本的线路码,并得到广泛采用。但是,AMI 码有一个重要缺点,即接收端从该信号中来获取定时信息时,由于它可能出现长的连0 串,因而会造成提取定时信号的困难。为了保持AMI 码的优点而克服其缺点,人们提出了许多种类的改进AMI 码,HDB3 码就是其中有代表性的一种。 HDB3码的全称是三阶高密度双极性码。它的编码原理是这样的:先把消息代码变换成AMI码,然后去检查AMI 码的连0串情况,当没有4个以上连0串时,则这时的AMI码就是HDB3码;当出现4个以上连0串时,则将每4个连0小段的第4个0变换成与其前一非0符号(+1 或–1)同极性的符号。显然,这样做可能破坏“极性交替反转”的规律。这个符号就称为破坏符号,用V 符号表示(即+1 记为+V, –1记为–V)。为使附加V符号后的序列不破坏“极性交替反转”造成的无直流特性,还必须保证相邻V符号也应极性交替。这一点,当相邻符号之间有奇数个非0符号时,则是能得到保证的;当有偶数个非0 符号时,则就得不到保证,这时再将该小段的第1个0 变换成+B 或–B符号的极性与前一非0 符号的相反,并让后面的非0符号从V 符号开始再交替变化。 虽然HDB3码的编码规则比较复杂,但译码却比较简单。从上述原理看出,每一个破坏

几何画板实验报告(函数y=Asin(ωx+φ)图象)

实验报告 实验项目:设计制作课堂教学型的课件 班级:姓名: 学号:实验时间:2013 年月日 一、实验目的:通过计算机辅助教学的理论与实践相结合,查阅资料,设计制作中学数学某一节课(自选内容)的课堂教学型课件,在实验过程中掌握课堂教学型课件设计方法与制作技巧。 二、实验设备:多媒体计算机、几何画板等 三、教学设计方案

四、课件的创作思路 按照课本要求,考虑到函数y=Asin(ωx+φ)的图象相对难掌握,特选取几何画板作为课件的制作软件。课件设计由浅入境,通过对旧知识点的回顾复习,再慢慢计入新知识点的学习,以问题为基本主导线,注重学生自主动手,自主学习能力,通过讨论,探讨问题渐渐深入课程学习,渐渐把握参数φ、ω、A对函数y=Asin(ωx+φ)的图象的影响。所以课件在设计中看重问题,情景的设计,以及如何让学生更容易,更直观地了解,掌握参数φ,ω,A对函数y=Asin(ωx+φ)的图象的变换规律。讲授新知识点后及时进行例题讲解,让学生查漏补缺,真正把知识学懂,学通,学透,本课件按照人教版要求,符合普遍学生的学习接受能力,通过提出问题观察图片,吸引学生的注意力,以带动学生思考问题。在传递新内容上,通过图文解说,形象表达学习内容,层次分明,能让学生容易理解、学习和掌握知识。学习完新知识后,进行一段小结,巩固学生记忆。最后布置几道与这节课内容相关的习题,是为了巩固本节课内容。使学生通过本节课,能基本掌握参数φ,ω,A对函数y=Asin(ωx+φ)的图象的变换规律。 五、思考题

分析课件所使用的媒体在课堂教学实践中的作用。 本课件主要应用了几何画板软件,应用几何画板的“形象、直观”的动态效果,能很好的演示课本上的内容和几何图片,容易让学生理解掌握新概念。本节课的一些思考及练习,能很好的培养学生的发散思维,达到举一反三的目的。几何画板的重要作用就是能准确地表达几何图像。本课件适用大部分地区高中学校的课堂教学。

实验报告二 Matlab图像代数运算和几何变换

实验二Matlab图像代数运算和几何变换 一、实验目的 1、掌握不同图像类型的转换 2、掌握图像代数运算和几何变换的方法; 3、掌握灰度级插值法的实验方法。 二、实验内容 1、练习图像类型转换的相关命令(ind2rgb,mat2gray,grayslice,rgb2gray,rgb2ind,im2bw,ind2gray,dither)(p69-73); 2、练习课本6.3.2(p139-p143)图像代数运算的内容; 3、练习图像平移 (p148),图像比例变换(p153),图像旋转(p156),图像镜像变换(p158),图像切割(p160)Matlab实现例题; 4、练习灰度级插值法(p171)。 三、实验步骤和结果 1、练习图像类型转换的相关命令(ind2rgb,mat2gray,grayslice,rgb2gray,rgb2ind,im2bw,ind2gray,dither) (1)mat2gray()函数 I=imread('rice.png'); >> J=filter2(fspecial('sobel'),I); >> K=mat2gray(J); >> imshow(I); >> figure,imshow(K) (2)、grayslice()函数 >> I=imread('snowflakes.png'); >> X=grayslice(I,16); >> imview(I) imview(X,jet(16)) (3)、rgb2ind()函数 > RGB=imread('peppers.png'); >> imshow(RGB); >> figure,imshow(RGB) >> [X,map]=rgb2ind(RGB,128); >> figure,imshow(X,map) (4)、im2bw()函数 >> load trees >> BW=im2bw(X,map,0.4); >> figure,imshow(X,map) >> figure,imshow(BW) (5)、ind2gray()函数 load trees >> I=ind2gray(X,map); >> figure,imshow(X,map) >> figure,imshow(I) (6)、dither()函数 >> RGB=imread('peppers.png'); >> [X,map]=rgb2ind(RGB,256); >> I=dither(RGB,map); >> BW=dither(I); >> imshow(RGB,map); >> figure,imshow(RGB,map); >> figure,imshow(BW) Result: (1)转换后图像(2)索引色图像

HDB3码型变换实验报告

实验二HDB3码型变换实验 一、实验目的 1、了解几种常用的数字基带信号的特征和作用。 2、掌握HDB3码的编译规则。 3、了解滤波法位同步在的码变换过程中的作用。 二、实验器材 1、主控&信号源、2号、8号、13号模块各一块 2、双踪示波器一台 3、连接线若干 三、实验原理 1、HDB3编译码实验原理框图

HDB3编译码实验原理框图 2、实验框图说明 我们知道AMI编码规则是遇到0输出0,遇到1则交替输出+1和-1。而HDB3编码由于需要插入破坏位B,因此,在编码时需要缓存3bit的数据。当没有连续4个连0时与AMI编码规则相同。当4个连0时最后一个0变为传号A,其极性与前一个A的极性相反。若该传号与前一个1的极性不同,则还要将这4个连0的第一个0变为B,B的极性与A相同。实验框图中编码过程是将信号源经程序处理后,得到HDB3-A1和HDB3-B1两路信号,再通过电平转换电路进行变换,从而得到HDB3编码波形。 同样AMI译码只需将所有的±1变为1,0变为0即可。而HDB3译码只需找到传号A,将传号和传号前3个数都清0即可。传号A的识别方法是:该符号的极性与前一极性相同,该符号即为传号。实验框图中译码过

程是将HDB3码信号送入到电平逆变换电路,再通过译码处理,得到原始码元。 四、实验步骤 实验项目一HDB3编译码(256KHz归零码实验) 概述:本项目通过选择不同的数字信源,分别观测编码输入及时钟,译码输出及时钟,观察编译码延时以及验证HDB3编译码规则。 1、关电,按表格所示进行连线。 2、开电,设置主控菜单,选择【主菜单】→【通信原理】→【HDB3编译码】→【256K归零码实验】。将模块13的开关S3分频设置拨为0011,即提取512K同步时钟。 3、此时系统初始状态为:编码输入信号为256K的PN序列。 4、实验操作及波形观测。

使用“平移”“旋转”与“轨迹”功能绘制复杂几何图形

几何画板实验报告:使用“平移”“旋转”与“轨迹”功能绘制复 杂几何图形 一、实验目的 掌握“平移”“旋转”与“轨迹”功能及其应用,能熟练将前两者结合绘制复杂图形。 二、实验内容 题目1、绘制正五边形并设置控制按钮使其绕中心旋转180度。 步骤:1、先绘制正五边形。 (1)、任意绘制一条线段,选择旋转72度,连续旋转5次(图1) (2)、连接端点,构成正五边形并得出中点O(图2) 图1 图2 2、【构造】一个圆E,【构造】圆上的半段弧GF,并【构造】弧上的一点D(图3) 图3 图4 3、设定角度DEF为标记角度,选中正五边形,点击【变换】,【旋转】,选择标记角度并以中心O为旋转中心。(图4) 4、选中点G,E选择【编辑】,【操作类按钮】,【移动】命令,得到名为“从D→G移动”的按钮,同理得名为“从D→F移动”的按钮.图5为旋转180度的图像和两个按钮。

图5 题目2、作出圆柱及过其棱上一点且与底面平行的截面。并设置截面的平行移动。 步骤:1、作出一个同心圆A,过A作水平线,在大圆上任取一点E作水平线的垂线EF,连接AE与小圆交于点G,过点G作EF的垂线,交于点H,以E为主动点,H为被动对象构造轨迹,一次选中点E和点H【构造】【轨迹】,即圆柱的底面。(图1) 图1 图2 2、将其余图形隐藏,只留下椭圆。过椭圆中点A作水平线交于G,过A点作AG的垂线AF,并标记AF向量;将G绕A点旋转180度到G’点,在椭圆上任取一点H,将H沿AF向量的方向平移到H’点,再以H为主动点,H’为被动对象构造轨迹,得到圆柱的上底面也是一个椭圆;同理将G与G’也平移上去,再连接棱,即得到圆柱;( 图2) 3、在棱G’C上任取一点N,标记G’N向量,把H按照J’N向量的方向平移到H’’点,同样以H为主动点,H’’为被动对象构造轨迹,得到截面;(图3)

计算机图形学实验报告 (2)

中南大学信息科学与工程学院 实验报告实验名称 实验地点科技楼四楼 实验日期2014年6月 指导教师 学生班级 学生姓名 学生学号 提交日期2014年6月

实验一Window图形编程基础 一、实验类型:验证型实验 二、实验目的 1、熟练使用实验主要开发平台VC6.0; 2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序; 3、掌握Window图形编程的基本方法; 4、学会使用基本绘图函数和Window GDI对象; 三、实验内容 创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求: 1、用户可以通过菜单选择绘图颜色; 2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形; 四、实验要求与指导 1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。 2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形 其中“曲线”项有级联菜单,包括:圆、椭圆。 3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。

五、实验结果: 六、实验主要代码 1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this); 在OnDraw函数中添加: m_pDC=new CClientDC(this); m_pDC->MoveTo(10,10); m_pDC->LineTo(100,100); m_pDC->SetPixel(100,200,RGB(0,0,0)); m_pDC->TextOut(100,100); 2、画圆: void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC) { int dx = xb - xa; int dy = yb - ya; int Steps, k; float xIncrement,yIncrement; float x = xa,y= ya; if(abs(dx)>abs(dy))

opengl立方体的简单三维交互式几何变换实验报告+代码

立方体的简单三维交互式几何变换 这个学期对opengl的学习,使我对计算机图形学的一些算法过程有了更多的了解。因为对三维图形的显示比较感兴趣,就做了立方体的简单三维交互式几何变换。 功能:键盘的方向键实现立方体的上下左右平移;A键,S键分别实现向前,向后旋转;J键,K键分别实现放大,缩小;C键退出。 程序模块: 1.该模块为绘制一个立方体。 void DrawBox() { glBegin(GL_QUADS); //前面 glColor3f(1,0,0); glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的左下 glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的右下 glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右上 glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左上 // 后面 glColor3f(0,1,0); glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右下 glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的右上

glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左下 // 顶面 glColor3f(0,0,1); glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的左上glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左下glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右下glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上// 底面 glColor3f(1,1,0); glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右上glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左上glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的右下// 右面 glColor3f(0,1,1); glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的右下glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的左上glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下// 左面 glColor3f(1,0,1);

实验十五 码型变换实验

实验十五码型变换实验 一、实验目的 1、了解几种常用的数字基带信号。 2、掌握常用数字基带传输码型的编码规则。 3、掌握常用CPLD实现码型变换的方法。 二、实验内容 1、观察NRZ码、RZ码、AMI码、HDB3码、CMI码、BPH码的波形。 2、观察全0码或全1码时各码型的波形。 3、观察HDB3码、AMI码的正负极性波形。 4、观察RZ码、AMI码、HDB3码、CMI码、BPH码经过码型反变换后的输出波形。 5、自行设计码型变换电路,下载并观察波形。 三、实验器材 1、信号源模块一块 2、⑥号模块一块 3、⑦号模块一块 4、20M双踪示波器一台 5、连接线若干 四、实验原理 (一)基本原理 在数字通信中,有些场合可以不经过载波调制和解调过程而让基带信号直接进行传输。例如,在市区内利用电传机直接进行电报通信,或者利用中继方式在长距离上直接传输PCM 信号等。这种不使用载波调制装置而直接传送基带信号的系统,我们称它为基带传输系统,它的基本结构如图15-1所示。 信道信号形成器信道接收 滤波器 抽样 判决器 基带脉冲 输出 基带脉冲 输入 干扰 图15-1 基带传输系统的基本结构 该结构由信道信号形成器、信道、接收滤波器以及抽样判决器组成。这里信道信号形成

器用来产生适合于信道传输的基带信号,信道可以是允许基带信号通过的媒质(例如能够通过从直流至高频的有线线路等);接收滤波器用来接收信号和尽可能排除信道噪声和其他干扰;抽样判决器则是在噪声背景下用来判定与再生基带信号。 若一个变换器把数字基带信号变换成适合于基带信号传输的基带信号,则称此变换器为数字基带调制器;相反,把信道基带信号变换成原始数字基带信号的变换器,称之为基带解调器。 基带信号是代码的一种电表示形式。在实际的基带传输系统中,并不是所有的基带电波形都能在信道中传输。例如,含有丰富直流和低频成分的基带信号就不适宜在信道中传输,因为它有可能造成信号严重畸变。单极性基带波形就是一个典型例子。再例如,一般基带传输系统都从接收到的基带信号流中提取定时信号,而收定时信号又依赖于代码的码型,如果代码出现长时间的连“0”符号,则基带信号可能会长时间出现0电位,而使收定时恢复系统难以保证收定时信号的准确性。归纳起来,对传输用的基带信号的主要要求有两点:(1)对各种代码的要求,期望将原始信息符号编制成适合于传输用的码型;(2)对所选码型的电波形要求,期望电波形适宜于在信道中传输。 (二)编码规则 1、 NRZ 码 NRZ 码的全称是单极性不归零码,在这种二元码中用高电平和低电平(这里为零电平)分别表示二进制信息“1”和“0”,在整个码元期间电平保持不变。例如: +E 0 1 0 1 0 0 1 1 0 2、 RZ 码 RZ 码的全称是单极性归零码,与NRZ 码不同的是,发送“1”时在整个码元期间高电平只持续一段时间,在码元的其余时间内则返回到零电平。例如: 1 0 1 0 0 1 1 0 +E 0 3、 AMI 码 AMI 码的全称是传号交替反转码。这是一种将信息代码0(空号)和1(传号)按如下方式进行编码的码:代码的0仍变换为传输码的0,而把代码中的1交替地变换为传输码的+1,-1,

几何画板实验报告要点

实验一数学教学软件基本操作 一、实验目的: 二、实验内容: 1、作出三角形的垂心。 2、作出三角形的外接圆与内切圆。 外接圆 内切圆 3、验证:三角形三边的中点、三条高的垂足、垂心到三顶点的中点共圆。

4、作出两圆的内外公切线。 三、实验步骤 1、作出三角形的垂心。 步骤: ○1构造△ABC; ○2选中点A和线段BC,构造垂线; ○3同理,构造线段AB、BC上的垂线; ○4交点D即为垂心。 2、作出三角形的外接圆与内切圆。 外接圆步骤:

○1构造△ABC; ○2选中线段AB,构造中点E; ○3选中线段AB和点E,构造垂线; ○4同理构造线段AC、BC上的中垂线,交点为K; ○5选中点K、A,构造圆。 内切圆步骤: ○1构造△ABC; ○2选中线段AB、AC,构造角平分线; ○3选中AB、BC,构造角平分线,交点为D; ○4选中A、D,构造圆。 3、验证:三角形三边的中点、三条高的垂足、垂心到三顶点的中点共圆。 步骤: ○1构造△ABC; ○2选中线段AB、BC、AC分别构造中点D、E、F; ○3选中线段BC和点A构造垂线,垂足为H,同理得到垂足L、K,三条 垂线的交点为M; ○4选中点A和M构造线段,再选中线段AM构造中点O,同理得到点N、P; ○5选中点E、P、O构造过三点的弧,选中点O、D、E构造过三点的弧; 4、作出两圆的内外公切线。 外公切线步骤: ○1构造两圆C、D,圆心分别为C、D(注:圆C 的半径大于圆 D 的半径); ○2选中点C、D,构造直线CD; ○3在圆D 上任意取一点F,连接构造线段DF; ○4选中点C、线段DF,构造平行线交圆 C 于点G、P ○5选中点G、F,再构造直线GF 交直线CD 于点H; ○6选中点D、H,构造线段DH,再构造线段DH 的中点M; ○7依次选中M、D(H),接着“构造”—“以圆心和圆周上的点作圆”—“生成一个圆M 交圆 D 于点O 和N ; ○8分别构造出直线OH 和直线NH,即为所求的外公切线。 内公切线步骤: ○1构造线段FP 交直线CD 于点Q; ○2选中点C、Q,构造线段,再构造中点R; ○3依次选中点R、C(Q),构造圆交圆C 于点S、T; ○4分别构造出直线QT 和直线QS,即为所求的内公切线。 四、实验的结论及实验中存在的问题。

X-opengl立方体的简单三维交互式几何变换实验报告代码

立方体的简单三维交互式几何变换 立方体的简单三维交互式几何变换。 功能:键盘的方向键实现立方体的上下左右平移;A键,S键分别实现向前,向后旋转;J键,K键分别实现放大,缩小;C键退出。 程序模块: 1.重绘回调函数,在窗口首次创建或用户改变窗口尺寸时被调用。void reshape(int w, int h) { glViewport(0, 0, w, h);// 指定视口的位置和大小 glMatrixMode(GL_PROJECTION); glLoadIdentity(); //glFrustum(-1.0, 1.0, -1.0, 1.0, 3.1, 10.0); //gluPerspective(45,1,0.1,10.0); glOrtho(-2.0, 2.0, -2.0, 2.0, 2.0, 10.0); } 2.绘制一个立方体。 void DrawBox() { glBegin(GL_QUADS); //前面

glColor3f(1,0,0); glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的左下glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的右下glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右上glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左上// 后面 glColor3f(0,1,0); glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右下glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的右上glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的左上glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左下 // 顶面 glColor3f(0,0,1); glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的左上glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左下glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右下glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上// 底面 glColor3f(1,1,0); glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右上glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左上glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下

实验三 码型变换实验

实验三码型变换实验 一、实验目的 1.了解几种常见的数字基带信号。 2.掌握常用数字基带传输码型的编码规则。 3.掌握用FPGA实现码型变换的方法。 二、实验内容 1.观察NRZ、RZ码、BRZ码、BNRZ码、AMI码、CMI码、HDB3码、BPH码的波形。2.观察全0码或全1码时各码型波形。 3.观察HDB3码、AMI码、BNRZ码正、负极性波形。 4.观察NRZ码、RZ码、BRZ码、BNRZ码、AMI码、CMI码、HDB3码、BPH码经过码型反变换后的输出波形。 5.自行设计码型变换电路,下载并观察输出波形。 三、实验器材 1.信号源模块 2.码型变换模块 3.20M双踪示波器一台 4.频率计(可选)一台 5.PC机(可选)一台 6.连接线若干 四、实验原理 1.编码规则 ①NRZ码(见教材) ②RZ码(见教材) ③BNRZ码-双极性不归零码 1 0 1 0 0 1 1 0 +E -E ④BRZ码-双极性归零码 1 0 1 0 0 1 1 0 +E -E ⑤AMI码(见教材) ⑥HDB3码(见教材) ⑦BPH码

BPH码的全称是数字双相码(Digital Diphase),又叫分相码(Biphase,Split-phase)或曼彻斯特码(Manchester),其编码规则之一是: 0 01(零相位的一个周期的方波); 110(π相位的一个周期的方波)。例如: 代码: 1 1 0 0 1 0 1 双相码: 10 10 01 01 10 01 10 这种码既能提取足够的定时分量,又无直流漂移,编码过程简单。但带宽要宽些。⑧CMI码 CMI码的全称是传号反转码,其编码规则如下:信息码中的“1”码交替用“11”和“00”表示,“0”码用“01”表示。例如: 代码: 1 1 0 1 0 0 1 0 CMI码: 11 00 01 11 01 01 00 01 这种码型有较多的电平跃变,因此,含有丰富的定时信息。该码已被ITU-T推荐为PCM四次群的接口码型。在光纤传输系统中有时也用CMI码作线路传输码型。 2.电路原理 将信号源产生的NRZ码和位同步信号BS送入U900(EPM7128SLC84-15)进行变换,可以直接得到各种单极性码和各种双极性码的正、负极性编码信号。解码时同样也需要送入FPGA进行解码,得到NRZ码。 ①NRZ码 从信号源“NRZ”点输出的数字码型即为NRZ码,请参考信号源工作原理。 ②BRZ、BNRZ码 将NRZ码和位同步信号BS分别送入双四路模拟开关U902(4052)的控制端作为控制信号,在同一时刻,NRZ码和BS信号电平高低的不同组合(00、01、10、11)将控制U902分别接通不同的通道,输出BRZ码和BNRZ码。X通道的4个输入端X0、X1、X2、X3分别接-5V、GND、+5V、GND,在控制信号控制下输出BRZ码;Y通道的4个输入端Y0、Y1、Y2、Y3分别接-5V、-5V、+5V、+5V,在控制信号控制下输出BNRZ 码。解码时通过电压比较器U907(LM339)将双极性的BRZ和BNRZ码转换为两路单极性码,即双—单(极性)变换,再送入U900进行解码,恢复出原始的NRZ码。 ③RZ、BPH码 同BRZ、BNRZ,因是单极性码,其编解码过程全在U900中完成,在这里不再赘述。 ④AMI码 由于AMI码是双极性的码型,所以它的变换过程分成了两个部分。首先,在U900中,将NRZ码经过一个时钟为BS的JK触发器后,再与NRZ信号相与后得到控制信号AMIB,该信号与NRZ码作为控制信号送入单八路模拟开关U905(4051)的控制端,U905的输出即为AMI码。解码过程与BNRZ码一样,也需先经过双—单变换,再送入U900进行解码。 ⑤HDB3码 HDB3码的编、解码框图分别如图3-1、3-2所示,其编、解码过程与AMI码相同,这里不再赘述。

图像处理实验报告

实验报告 实验课程名称:数字图像处理 班级:学号:姓名: 注:1、每个实验中各项成绩按照10分制评定,每个实验成绩为两项总和20分。 2、平均成绩取三个实验平均成绩。 2016年 4 月18日

实验一 图像的二维离散傅立叶变换 一、实验目的 掌握图像的二维离散傅立叶变换以及性质 二、实验要求 1) 建立输入图像,在64?64的黑色图像矩阵的中心建立16?16的白色矩形图像点阵, 形成图像文件。对输入图像进行二维傅立叶变换,将原始图像及变换图像(三维、中心化)都显示于屏幕上。 2) 调整输入图像中白色矩形的位置,再进行变换,将原始图像及变换图像(三维、中 心化)都显示于屏幕上,比较变换结果。 3) 调整输入图像中白色矩形的尺寸(40?40,4?4),再进行变换,将原始图像及变 换图像(三维、中心化)都显示于屏幕上,比较变换结果。 三、实验仪器设备及软件 HP D538、MATLAB 四、实验原理 傅里叶变换作为分析数字图像的有利工具,因其可分离性、平移性、周期性和共轭对称性可以定量地方分析数字化系统,并且变换后的图像使得时间域和频域间的联系能够方便直观地解决许多问题。实验通过MATLAB 实验该项技能。 设),(y x f 是在空间域上等间隔采样得到的M ×N 的二维离散信号,x 和y 是离散实变量,u 和v 为离散频率变量,则二维离散傅里叶变换对一般地定义为 ∑∑ -=-=+-= 101 )],( 2ex p[),(1 ),(M x N y N yu M xu j y x f MN v u F π,1,0=u …,M-1;y=0,1,…N-1 ∑∑-=-=+=101 )],( 2ex p[),(),(M x N y N uy M ux j v u F y x f π ,1,0=x …,M-1;y=0,1,…N-1 在图像处理中,有事为了讨论上的方便,取M=N ,这样二维离散傅里叶变换对就定义为 ,]) (2ex p[),(1 ),(101 ∑∑ -=-=+- = N x N y N yu xu j y x f N v u F π 1,0,=v u …,N-1 ,]) (2ex p[ ),(1 ),(101 ∑∑-=-=+= N u N v N vy ux j v u F N y x f π 1,0,=y x ,…,N-1 其中,]/)(2exp[N yv xu j +-π是正变换核,]/)(2exp[N vy ux j +π是反变换核。将二维离散傅里叶变换的频谱的平方定义为),(y x f 的功率谱,记为 ),(),(|),(|),(222v u I v u R v u F v u P +== 功率谱反映了二维离散信号的能量在空间频率域上的分布情况。 五、实验步骤、程序及结果: 1、实验步骤: (1)、编写程序建立输入图像; (2)、对上述图像进行二维傅立叶变换,观察其频谱 (3)、改变输入图像中白框的位置,在进行二维傅里叶变换,观察频谱;

几何画板实验报告8

实验报告 姓名 学号 日期 一、实验目的 二、实验内容及步骤 1.在极坐标系中绘制θ ρcos 1?-= e ep ,其中e,p 为待定常数. 步骤: ①先做出两条垂直于x 轴正向的直线,在直线上任取两点A 和B ,度量它们纵坐标的值,分别令为e 和p. ②绘制新函数θ cos 1?-= e ep r ③拖动点A,我们可发现当10<e 时,原方程表示双曲线. 2.作出???==θ θtan sec b y a x ,θ为参数 .

步骤: ①在坐标系中做两条垂直于x 轴的直线,分别直线上任取两点A 、B ,计算这两点的纵坐标,分别用a 、b 来表示;画出单位圆O,度量DFE ∠,作为参数θ的值. ②分别计算θθtan sec b a 和,分别以它们为横、纵坐标做出点; ③以D 为主动点,()θ θtan sec b a ,为被动点,做轨迹。 3.在极坐标系中做出曲线???==) cos() sin(bt at r θ(0≤t <2π),调整a ,b 的值,得到不同的图象并给 这些图像取名字。 数字8

翅膀 四叶草

两个月牙 步骤: ①先在直角坐标系中做两条x 轴的垂线,分别在上面取两点A 和B ,度量他们的纵坐标记为a ,b 。在轴上标出点(2π,0),连接该点与坐标中心,在该线段上选中任意一点C 度量横坐标计为t 。 ②切换至极坐标系,计算)sin(t a ?和)cos(t b ?的值,分别以它们为横纵坐标绘制点,以该点为被动点,C 为主动点构造轨迹。 4. 在极坐标系中画出曲线? ??=+=t bt a r θ) sin(,()π2 0≤≤t 的图像,调整a 与b 的值得到不同的图像。 步骤: ①先在直角坐标系中做两条x 轴的垂线,分别在上面取两点A 和B ,度量他们的 纵坐标记为a ,b 。在轴上标出点(-2π,0),连接该点与坐标中心,在该线段上选中任意一点C 度量横坐标计为t 。 ②切换至极坐标系,计算)sin(t b a ?+的值,分别以)sin(t b a ?+及t 为横纵坐标做点D ,以点D 为被动点,C 为主动点构造轨迹。

北航数字图象处理实验报告

数字图像处理实验报告 实验二图像变换实验 1.实验目的 学会对图像进行傅立叶等变换,在频谱上对图像进行分析,增进对图像频域上的感性认识,并用图像变换进行压缩。 2.实验内容 对Lena或cameraman图像进行傅立叶、离散余弦、哈达玛变换。在频域,对比他们的变换后系数矩阵的频谱情况,进一步,通过逆变换观察不同变换下的图像重建质量情况。 3. 实验要求 实验采用获取的图像,为灰度图像,该图像每象素由8比特表示。具体要求如下: (1)输入图像采用实验1所获取的图像(Lena、Cameraman); (2)对图像进行傅立叶变换、获得变换后的系数矩阵; (3)将傅立叶变换后系数矩阵的频谱用图像输出,观察频谱; (4)通过设定门限,将系数矩阵中95%的(小值)系数置为0,对图像进行反变换,获得逆变换后图像; (5)观察逆变换后图像质量,并比较原始图像与逆变后的峰值信噪比(PSNR)。 (6)对输入图像进行离散余弦、哈达玛变换,重复步骤1-5; (7)比较三种变换的频谱情况、以及逆变换后图像的质量(PSNR)。 4. 实验结果 1. DFT的源程序及结果 J=imread('10021033.bmp'); P=fft2(J); for i=0:size(P,1)-1 for j=1:size(P,2) G(i*size(P,2)+j)=P(i+1,j); end end Q=sort(G); for i=1:size(Q,2) if (i=size(Q,2)*0.95) t=Q(i); end end G(abs(G)

相关文档
最新文档