`
googgoogle
  • 浏览: 65772 次
社区版块
存档分类
最新评论
阅读更多

   
[size=9pt;]作者:[/size]<span lang="EN-US" style="font-size: 9pt; font-family: Arial,sans-serif;">mznewfacer(Wolf Geek)  <span></span></span>[size=9pt;]时间[/size]<span lang="EN-US" style="font-size: 9pt; font-family: Arial,sans-serif;">:2011</span>[size=9pt;]年[/size]<span lang="EN-US" style="font-size: 9pt; font-family: Arial,sans-serif;">11</span>[size=9pt;]月[/size]<span lang="EN-US" style="font-size: 9pt; font-family: Arial,sans-serif;">30</span>[size=9pt;]日
     欢迎转载   ,请注明出处![/size]

[size=9pt;]</span>

[size=9pt;]  这两天又不能安生了,得写论文,好吧,先把[/size]<span lang="EN-US" style="font-size: 9pt; font-family: Arial,sans-serif;">arduino[/size][size=9pt;]断下来,似乎我同时只能干一件事,严重怀疑自己的智商!顺便写一些基础总结吧,已备后用。可能会比较枯燥,但是必须强调的是这些都是图形图像方面的数学基础,不可忽视啊![/size]<span lang="EN-US" style="font-size: 9pt; font-family: Arial,sans-serif;"></span>
  先看几个变换公式:

[size=9pt;]<img src="http://hi.csdn.net/attachment/201112/2/0_13227908775Ivi.gif" alt=""><br>[/size]

[size=9pt;]<img src="http://hi.csdn.net/attachment/201112/2/0_1322791009rRmc.gif" alt=""><br>[/size]

[size=9pt;]</span>
至此,二维平面上的所有变换集合就已叙述完毕,具体形式如下图所示。

<img src="http://hi.csdn.net/attachment/201112/2/0_1322791055KnDT.gif" alt=""><br>
[size=9pt;][/size]
对于三维图像而言,对应的变换矩阵就变为四阶矩阵。

<img src="http://hi.csdn.net/attachment/201112/2/0_1322791289Q16B.gif" alt=""><br>
[size=9pt;][/size]
<img src="http://hi.csdn.net/attachment/201112/2/0_1322791391Q51v.gif" alt=""><br>

<img src="http://hi.csdn.net/attachment/201112/2/0_1322792155E6Eo.gif" alt=""><br>

这就是初始化坐标系,对应的4阶齐次矩阵为四阶单位阵。


[size=9pt;]<span style="white-space: pre;">[/size][/size]
<img src="http://hi.csdn.net/attachment/201112/2/0_1322792341hAH0.gif" alt=""><br>

在此坐标系上画点[0.5 ; 0.5 ; 0.5],之后在Oxy平面上做投影,所得结果如下图所示:

<img src="http://hi.csdn.net/attachment/201112/2/0_1322793166nth4.gif" alt=""><br>

此时变换矩阵为

<img src="http://hi.csdn.net/attachment/201112/2/0_1322793236zmmA.gif" alt=""><br>

之后将坐标系绕z轴旋转45度并且在y轴方向上平移1.5个刻度,变换矩阵为<img src="http://hi.csdn.net/attachment/201112/2/0_1322794498mxC5.gif" alt="">

<img src="http://hi.csdn.net/attachment/201112/2/0_132279452236nD.gif" alt=""><br>

最后连续绕x轴,y轴,z轴分别旋转45度,得到结果如下图所示:

<img src="http://hi.csdn.net/attachment/201112/2/0_132279619473Oa.gif" alt=""><br>

变换矩阵可以由此推得:

<img src="http://hi.csdn.net/attachment/201112/2/0_13227962808PV8.gif" alt=""><br>

至于为什么引入齐次坐标系,这里就不做多余解释,详情可见这里

最后用opengl画一下类似的坐标系变换,



<textarea readonly name="code" class="cpp">#include <GL/glut.h>

float w, h, tip = 0, turn = 0;

float ORG[3] = {0,0,0};

float XP[3] = {1,0,0}, XN[3] = {-1,0,0},
YP[3] = {0,1,0}, YN[3] = {0,-1,0},
ZP[3] = {0,0,1}, ZN[3] = {0,0,-1},VP[3]={0, 0, -5};

void reshape (int nw, int nh)
{
w = nw;
h = nh;
}

void Turn (int key, int x, int y)
{
switch (key) {
case GLUT_KEY_RIGHT: turn += 5; break;
case GLUT_KEY_LEFT : turn -= 5; break;
case GLUT_KEY_UP : tip -= 5; break;
case GLUT_KEY_DOWN : tip += 5; break;
}
}

void Draw_Axes (void)
{
glPushMatrix ();

glTranslatef (-1.5, -1.5, -5);
glRotatef (tip , 1,0,0);
glRotatef (turn, 0,1,0);
glScalef (1, 1, 1);

glLineWidth (2.0);

glBegin (GL_LINES);
glColor3f (1,0,0); // X axis is red.
glVertex3fv (ORG);
glVertex3fv (XP );
glColor3f (0,1,0); // Y axis is green.
glVertex3fv (ORG);
glVertex3fv (YP );
glColor3f (0,0,1); // z axis is blue.
glVertex3fv (ORG);
glVertex3fv (ZP );
glEnd();

glTranslatef (1, 1, 1);
glBegin (GL_LINES);
glColor3f (1,0,0); // X axis is red.
glVertex3fv (ORG);
glVertex3fv (XN );
glColor3f (0,1,0); // Y axis is green.
glVertex3fv (ORG);
glVertex3fv (YN );
glColor3f (0,0,1); // z axis is blue.
glVertex3fv (ORG);
glVertex3fv (ZN );
glEnd();
glTranslatef (-1, 0, 0);
glRotatef (-90, 0,1,0);
glBegin (GL_LINES);
glColor3f (0,0,1); // X axis is blue.
glVertex3fv (ORG);
glVertex3fv (XN );
glColor3f (0,1,0); // Y axis is green.
glVertex3fv (ORG);
glVertex3fv (YN );
glColor3f (1,0,0); // z axis is red
glVertex3fv (ORG);
glVertex3fv (ZN);
glEnd();
glPointSize(4.0f);
glRotatef (-45, 0,1,0);
glBegin(GL_POINTS);
glColor3f (1,0,0); // X axis is red.
glVertex3f(-1.0f, -1.0f, 0.0f);
glEnd();
glRotatef (-90, 0,1,0);
glBegin(GL_POINTS);
glColor3f (1,0,0);
glVertex3f(1.0f, -1.0f, 0.0f);
glEnd();
glLoadIdentity();
glBegin(GL_POINTS);
glColor3f (1,0,0);
glVertex3fv(VP);
glEnd();
glPopMatrix ();
}


void display (void)
{
glViewport (0, 0, w, h);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Draw_Axes ();
glutSwapBuffers ();
}

void main (void)
{
glutInitWindowSize (600, 400);
glutInitWindowPosition (400, 300);
glutInitDisplayMode (GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB);
glutCreateWindow ("坐标系变换");
glutDisplayFunc (display);
glutIdleFunc (display);
glutReshapeFunc (reshape);
glutSpecialFunc (Turn);

glClearColor (0.1, 0.2, 0.1, 1.0);
glEnable (GL_DEPTH_TEST);
glMatrixMode (GL_PROJECTION);
gluPerspective (50.0, 1.5, 1.0, 10.0);
glMatrixMode (GL_MODELVIEW);

glutMainLoop ();
}</textarea>效果图<br><img src="http://hi.csdn.net/attachment/201112/2/0_1322797487GxHN.gif" alt=""><br>


  至于opengl的具体坐标系转换,像是世界坐标系到<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;">观察坐标系的转换,如何利用GL_PROJECTION投影矩阵将3维投影到2维上,投影时选择glFrustum()还是glOrtho(),以及各个变换的具体原理,<span style="color: rgb(102,102,102); font-family: arial,helvetica,sans-serif; font-size: 13px;"></span><a href="mailto:song.ahn@gmail.com" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-color: initial; background-color: white; color: rgb(102,102,102); font-family: arial,helvetica,sans-serif; font-size: 13px; text-align: right; text-decoration: none;">Song
Ho Ahn</a>的博客中已经写得相当详细,里面有两个例子也很不错。理论部分例子部分。</span>

<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;"><br></span>
 
0
0
分享到:
评论

相关推荐

    数字图像处理matlab——图像的几何变换(matlab源文件及训练文件)

    常见的数字图像的几何变换包括平移、镜像、旋转、缩放和错切等,是图像处理软件必须具备的操作手段。本次实验的目的是要求掌握各种变换的基本原理和方法,能够运用Matlab编写程序,实现这些变换。其中,由于变化产生...

    图像处理 MFC 几何变换

    在图像处理领域,几何变换是不可或缺的一部分,它主要用于改变图像的位置、大小、形状或方向,以适应不同的应用场景或实现特定的视觉效果。本项目聚焦于使用Microsoft Foundation Classes (MFC)库在Visual Studio ...

    图像的几何变换

    进行图像几何变换时,通常会先分析图像特点,例如图像的尺寸、分辨率和色彩模式,以确定合适的变换方法。在MATLAB中,可以使用`imresize`进行图像缩放,`flipud`和`fliplr`进行上下或左右镜像,`rot90`进行图像转置...

    二维图形几何变换算法

     图像几何变换的实质:改变像素的空间位置,估算新空间位置上的像素值。  图像几何变换的一般表达式:[,][(,),(,)]uvXxyYxy ,其中,[,]uv为变换后图像像素的笛卡尔坐标, [,]xy为原始图像中像素的笛卡尔坐标。...

    二维基本图形几何变换算法(用VC++实现)

    首先,让我们详细探讨每一种几何变换: 1. **平移(Translation)**:平移是指将图形沿x、y轴方向移动一定的距离。在二维空间中,可以通过一个包含三个元素的向量来表示平移量,这个向量可以加到图形的每一个顶点...

    计算机图形学图象几何变换

    在计算机图形学中,图像几何变换是不可或缺的基础概念和技术,它涉及到图像在二维或三维空间中的位置、形状和大小的变化。这篇文档将深入探讨图像几何变换的原理、方法以及在三维图形中的应用。 首先,我们要理解...

    MATLAB实现图像的几何变换(包含水平镜像、垂直错切、旋转和加倍)

    本资源提供的MATLAB代码实现了四种基本的几何变换:水平镜像、垂直错切、旋转和加倍。下面我们将详细探讨这些知识点。 首先,**水平镜像**是通过沿着图像的垂直轴翻转图像来实现的。这种变换在许多应用中都很常见,...

    图象处理实验报告 图像的几何变换包括图像的缩放、平移和旋转。

    在图像处理领域,几何变换是图像分析和处理中的基本操作,用于改变图像的形状和位置。本实验报告主要探讨了图像的几何变换,包括图像的缩放、平移和旋转,以及图像的正交变换,如傅里叶变换和离散变换。此外,还涉及...

    图像的几何变换(平移,镜像,缩放,旋转等)

    本主题将深入探讨四种基本的几何变换:平移、镜像、缩放和旋转,并通过源码的形式来理解这些操作的实现。 1. **平移(Translation)** 平移是最简单的几何变换,它涉及到图像在二维空间中的移动而不改变其形状或...

    图像的几何变换包括仿射变换等

    图像的几何变换是数字图像处理中的重要组成部分,它主要涉及图像在二维空间中的位置和形状的调整。在图像处理和计算机视觉领域,我们经常需要对图像进行各种几何操作,以便纠正图像失真、适应不同的显示设备或者进行...

    图像处理,几何图像的变换

    - 图像拼接:在全景图制作中,不同图片间的几何变换是关键步骤。 - 物体跟踪:通过几何变换预测物体的运动轨迹。 在编程实现上,这些变换通常用矩阵运算来表达,因为它们都可以表示为线性变换矩阵的乘积。例如,...

    数字图像处理使用matlab进行几何变换

    在MATLAB中,我们可以使用以下函数进行几何变换: 1. `imtranslate`:用于执行平移操作。该函数接受图像和一个包含两个元素的向量,分别表示在x轴和y轴上的位移量。 2. `imrotate`:实现图像的旋转。参数包括图像...

    计算机图形学-二维几何变换

    在二维几何变换中,我们关注的是如何通过数学运算来改变图形的位置、大小、形状和方向,以实现图像的平移、旋转、缩放、镜像反射等效果。这些变换在游戏开发、图像处理、动画制作、用户界面设计等诸多领域都有广泛的...

    图像几何变换(C++)代码(平移、镜像、转置、缩放、旋转)

    本主题将深入探讨C++实现的几种基本图像几何变换:平移、镜像、转置、缩放和旋转。这些操作对于图像分析、图像配准、图像增强等应用至关重要。 1. **平移(Translation)**: 平移是将图像在二维空间中沿着x轴和y...

    c++图像处理几何变换

    在C++中进行图像处理,几何变换是一项关键的技术。这些变换包括旋转、缩放和平移,它们在图像分析、计算机视觉以及图形用户界面设计等领域有着广泛应用。本篇将深入探讨如何利用C++来实现这些几何变换,并涉及形状的...

    音视频资料-图像仿射变换原理2:矩阵变换、线性变换和图像线性变换矩阵.rar

    在图像处理领域,仿射变换是一种重要的几何变换方法,它广泛应用于图像的旋转、缩放、平移和倾斜等操作。本资料包“音视频资料-图像仿射变换原理2:矩阵变换、线性变换和图像线性变换矩阵”深入探讨了这一主题,主要...

    几何变换 图像平移 水平镜像 垂直镜像 图像转置 图像缩小 图像放大 图像旋转.rar

    在计算机图形学中,几何变换是一种重要的操作,用于改变图像的位置、大小、形状或方向。在给定的压缩包文件中,包含了一系列关于几何变换的实际应用示例,这些示例在VS2017环境下已经编译通过并可以直接运行。让我们...

    案例11-二维图形几何变换算法.rar_二维几何变换_二维图形几何变换_二维图形变换_几何变换_几何图形

    在计算机图形学中,二维几何变换是至关重要的一个领域,它涉及到如何在平面上改变图形的位置、大小和形状。这个主题通常与编程语言如C++相结合,用于创建复杂的图形应用程序。"案例11-二维图形几何变换算法.rar"很...

    bmp图像几何变换数字图像处理

    在计算机视觉和数字图像处理领域,几何变换是至关重要的技术之一。本项目通过VC++编程语言实现对BMP图像的几何变换,包括180度旋转、平移等操作,这些变换有助于理解和处理图像的不同应用场景,如图像校正、目标识别...

Global site tag (gtag.js) - Google Analytics