由于OpenGLES的进度再度搁浅,所以准备从再次学习3D图形的深层次的知识,这一篇主要讲的是如何使用矩阵表示旋转、缩放、投影、镜像、切变,这些线性变换将会由浅入深,也算是为了后面的仿射变换做铺垫吧!接下来,我们一一看这些线性变换.
日常开发过程中旋转是一种很常见的图形变换,现在我们就对2D环境下和3D环境下的图像变换进行讲解说明.
假设现在物体现在就在原点位置,例如下图.
然后物体旋转角度为θ = 3/π,在旋转当中经常被认为逆时针为正方向,顺时针为负方向,那么对于基向量 p , q 是怎么变化的呢?如下图所示.这里我直接用绘图工具了,粗糙请见谅.
我们从中可以看到旋转后的新向量 p1 , q1 的值(当然了,实际上是根据三角函数计计算出来的),然后通过这两个值我们就可以构造出如下通用旋转矩阵.通过下面的矩阵,我们是不是很熟悉呢?有没有仿射变换的赶脚.不要着急,我们慢慢看.
</b>
在3D的环境下,我们讨论的不再是绕点旋转,而是绕轴旋转.虽然是绕轴旋转,我们也要定义出正负方向来.在左右坐标系中的情况是有所不同的,什么?不知道左右坐标系如何定义的?那么看下图所示.
那么在我们的坐标系中如何判断出正负方向呢?比如我们在左手坐标系中需要使用的左手法则俩判断正负方向,而在右手坐标系中则正好相反.我们就拿在左手左边系为例,法则示意图如下所示.(左右手法则不过多解释,如果不懂请自行查看高中物理相关知识)
|左手坐标系|
|:---:|:---:|:--:|
|从哪里看|正方向|负方向|
|从轴的负端点向正端点看|逆时针|顺时针|
|从轴的正端点向负端点看|顺时针|逆时针|
上面我们了解完旋转方向了,接下来我们先看看三种特殊情况,分别绕x,y,z轴进行旋转.
我们还是来看基向量的变化,首先对于3D中的基向量 p , q , r 由于是绕x轴进行旋转的,所以说基向量 p 是没有任何变化的,变化的只有 q , r 两个基向量,假设旋转的角度θ = 3/π,那么如下图所示.
然后如果在2D中通过三角函数公式,我们可以获得以下的旋转变换矩阵.
那么绕 y , z 轴与之类似,我就不做图了,直接上公式了.
那么上面看完了三种特殊的旋转方式,接下来,我们就看一下在3D中绕任意轴旋转的情况.
如图所示,如果向量v(粉色)绕轴向量n旋转得到向量v'(粉色),我们直接如果直接观察的话是非常困难的.
但是如果我们把向量v和向量v'进行分解,然后把旋转的θ放在一个平面中来解决问题,这样,我们的旋转问题就转化为简单的2D问题了.如下图所示.
这里我要对各个向量做一下解释说明,
其中 n 为 v 在旋转轴上的投影 (假设旋转轴为 n' ,那么 n=n'(v·n') );
v 为旋转之前的向量;
v' 为旋转之后的向量 ;
p 为 v 垂直于 n 的分量( p' 同理);
ω 为同时垂直于 n 和 p 的向量,长度与 p 相等.
上面基本我们把所有的向量解释了,现在已经知道的条件是向量 v 和旋转轴 n' 以及旋转角度θ要计算的是向量 v' .(怎么跟计算题似的?)
整体的思路是这样的,我们可以使用向量 n 和向量 p' 表示向量 v' , v' = n + p' ;然后 n=n'(v·n') 以及 p'=ωsinθ+ncosθ ,这三个向量表示公式来进行表示分解.计算过程如下.(说明:由于时间原因,本人就直接用纸写了计算过程了.骚栋的字是夏练三伏 冬练三九,终究还是败了)
首先我们先对 p'=ωsinθ+pcosθ 进行解析,步骤如下
上面我们已经计算出 p' 然后带入 v' = n + p' ,计算如下所示
现在我们既然有了转换关系,那么我们就要对三个基向量 p , q , r 进项转换了,我们就拿其中 p = [1,0,0] 来举例说明.其中旋转轴向量 n' = [nx ,ny,nz] ,那么经过旋转之后的基向量p'是什么情况呢?步骤如下所示.
同样的对于基向量 q = [0,1,0] , r = [0,0,1] ,我们使用公式 v' = (n' x v)sinθ +(v - ( v·n')n')cosθ +n'(v·n') 一样求出他们转换之后的基向量.具体的过程我就不在重复了,如果向量计算记不清楚的可以查看 3D图形:向量的相关计算 ,计算结果如下.
结果上面的重重计算,我们终于得到了绕任意轴 n = [nx ,ny,nz] ,的旋转矩阵.
如下图所示.
相比于旋转而言,缩放比较简单,(缩放的定义我就不过度的解释了),我们就从2D的环境和3D环境以及沿着任意方向缩放三个方面来看缩放这个知识点.
2D的环境和3D环境沿着坐标轴缩放
如果沿着坐标轴进行缩放,那么每一个坐标轴都有缩放因子,所以2D环境下有两个缩放因子Kx和Ky,那么基向量 p和q 根据缩放因子的影响,我们可以得到下面结论.
然后根据变换,我们就可以得到在2D环境下的缩放矩阵.如下所示.
那么,通过2D环境下的缩放矩阵,我们可以得到3D环境下的缩放矩阵.
沿着任意方向缩放
上面我们把在2D的环境和3D环境的缩放情况说明了一下,接下来我们看一下沿着任意方向缩放的情况,如图所示.(假设在向量 n 方向上的缩放因子为k)
在图中 n 为缩放方向, v 为缩放之前的向量, v' 为缩放之后的向量, a 和 a' 分别为 v和v' 垂直于缩放方向的分量, b 和 b' 分别为 v和v' 在缩放方向上的投影.
思路是这样的,
首先 v 只是在 n 的方向上进行了缩放,所以缩放前后 a 是没有任何改变的,也就是说, a = a' ;
b 和 b' 分别为 v和v' 在缩放方向上的投影,所以会有 b = (v·n)n 和 b' = (v'·n)n ;
然后,再就是通过向量的加减法,我们可以得知, v = a +b 和 v' = a' +b' ;
上面是三个具体的条件,我们根据条件用 n,v,k 来表示 v' .具体的计算过程如下.
上面我们已经得到了 v' 的表达式,然后我们就需要对各个基向量进行计算了,这里使用的是基向量 p = [1,0],具体的计算过程如下所示.
同理,基向量 q 与之类似,结果如下所示.
那么,在2D中的缩放矩阵如下所示.
3D因为原理一样就不在推导了,在3D中的缩放矩阵结果如下所示.
一般来说呢, 投影 就意味着降维操作.这篇博客主要研究的是正交投影.透视投影将在后面的博客中体现,但是我还是要那两张给来说明一下正交投影和透视投影的不同.简单点说正交投影原来的点和投影点的直线相互平行,但是透视投影所有的投影线会相交于一点.如下所示.
接下来我们就直接看看2D和3D环境下的正交投影矩阵.
</b>
当然了我们也是可以向 任意直线或者平面 投影,直线或者平面必须通过原点的.然后我们利用缩放的结果,有如下的结果.
镜像 是一种变换,其作用就是按照直线或者平面"翻折".如图所示.
镜像 和投影都是可以通过缩放矩阵进行变换的,我们只需要把缩放矩阵的缩放因子设置为-1即可,那么在2D和3D情况下的沿着任意轴的镜像矩阵如下所示.
切变是一种坐标系"扭曲"变换,非均匀的拉伸它,切变的时候角度会发生改变,但是面积(2D)或者是体积(3D)不会发生改变.
具体的解释意义如下所示.
那么在3D环境下的是切变的形式又是如何的呢?如下所示.
当然了,其实切变并不常用.?
经过两三天的写作,整理学习,总算是写完了旋转、缩放、投影、镜像、切变的线性变换,学习3D图形更多的是需要一个本子和一支笔,只有不断的演算才能真正的掌握这些.如果你喜欢骚栋,请继续关注,下一篇我将对矩阵的其他知识以及齐次矩阵的相关知识做研究整理.
最后还是要附上<<3D数学基础 图形与游戏开发>>的pdf版的传送门来结束线性变换的相关知识.
图像处理和分析工具主要功能是进行图像增强,便于后续的专业视觉工具进行识别和理解。常用的图像处理和分析工具包括:直方图工具、滤波操作、形态学操作、轮廓提前、几何变换、颜色空间变换。从输出关系角度,可将基本图像预处理算法分为:点变换算法、领域操作算法。
直方图分析
直方图分析是最基本的图像分析工具,直方图可对图像的整体灰度分布进行刻画,主要指标包括:均值、标准差等。
滤波操作
滤波是最常用使用的图像增强方法,主要包括:低通滤波、高通滤波、边缘检测、高斯滤波等。
形态学操作
形态学操作是常用的图像增强方法:主要包括:膨胀、腐蚀、开启、闭合、中值滤波等。
轮廓提取
轮廓是图像的重要边缘特征,轮廓提取的精度、速度和稳定性是轮廓提取工具的主要评价标准。
几何变换
常用的几何变换包括:旋转、平移、尺度、切变等,其统称为仿射变换。仿射采样也为集合变换范畴。
颜色空间转换
图像处理技术从图像格式上可以分为灰度图像处理和彩色图像处理。在图像处理技术发展的早期,由于受计算机处理能力的限制,图像处理技术领域的研究主要集中在灰度图像处理技术。随着计算机处理能力的飞速发展,彩色图像处理技术越来越受到关注。彩色图像处理相比灰度图像处理存在很多优势,其中最重要的有两点:(1)彩色图像所包含的信息量比灰度图像丰富很多(2)彩色图像更加符合人的视觉习惯。
一般情况下,相机输出的颜色数据为RGB颜色空间数据。然而,在工业用用中,经常需要再CIE色度学空间、人类视觉空间或者OD颜色密度空间进行彩色图像处理。颜色空间转换即指由RGB颜色空间到CIE LAB空间、CIE LCH空间、HSI空间、HSL空间以及OD颜色密度空间转换。
https://m.boliduo.cc/boduo/355.html https://wap.boliduo.cc/boduo/284.html https://m.boliduo.cc/boduo/330.html https://m.boliduo.cc/boduo/340.html https://wap.boliduo.cc/boduo/301.html https://wap.boliduo.cc/boduo/285.html https://wap.boliduo.cc/boduo/294.html https://wap.boliduo.cc/boduo/314.html https://wap.boliduo.cc/boduo/300.html https://m.boliduo.cc/boduo/321.html
本文来自作者[admin]投稿,不代表泰博号立场,如若转载,请注明出处:https://wak.staplesadv.cn/ds/69387.html
评论列表(3条)
我是泰博号的签约作者“admin”
本文概览:由于OpenGLES的进度再度搁浅,所以准备从再次学习3D图形的深层次的知识,这一篇主要讲的是如何使用矩阵表示旋转、缩放、投影、镜像、切变,这些线性变换将会由浅入深,也算是为...
文章不错《3D形-矩阵与线性变换》内容很有帮助