数值矩阵的图形表示
数值矩阵的图形表示
用图形显示二维数值矩阵(数值表格),十分直观,容易理解矩阵元素之间的关系,是一种数据的可视化表达方法。显示数值矩阵的方式包括图像、三维图形、等值线等。二维数值矩阵可以认为是二元函数z=F(x,y)的抽样结果。离散数据点集(xi,yi,zi)可以经过插值抽样后生成数值矩阵。三维表面图形的光照、纹理、皮肤增强了图形显示效果,并通过旋转来观察各个侧面。数值矩阵、离散数据点或者离散三角形和四边形平面数据可以保存在ASCII码文本格式文件中。
对于n行m列二维数值矩阵v(i, j),i = 0, 1, …, n-1,j = 0, 1, …, m-1,可以用三维图形或者二维图像来显示,在三维图形中x轴代表列,y轴代表行,z轴代表矩阵元素的数值大小,在图像显示中,x轴代表列,y轴代表行,图像的颜色代表矩阵元素的数值大小。如果矩阵的行列数太大或者太小,可以经过二维插值抽样后得到合适的矩阵尺寸,以满足绘图需要。
(1)散乱数据插值
散乱数据并非矩阵数据,它们以离散点(xi, yi ,zi),i = 0, 1, …, N-1出现,相当于单值函数z=f(x,y)的离散取样点。为了便于用图形显示数据,需要将离散数据进行插值抽样,得到x和y轴上的等间隔取样值v(i,j) ,i = 0, 1, …, n-1,j = 0, 1, …, m-1。
下面简单的说明一下双自变量离散数据的插值问题。
【薄板样条法】薄板样条法也属于径向基函数插值法,其实质从力学的观点看是使插值函数所代表的弹性薄板受限于插值点,并且具有最小的弯曲能量。
【有限元方法】这些散乱数据的插值方法与求解偏微分方程的有限元方法相同,故称为散乱数据插值的有限元方法。主要包括Clough-Tocher插值法,Herron插值法,偏导数的估计法,最小模网法。
以上介绍的散乱数据插值方法适合于中小规模数据量,对于大规模散乱数据(如10000点以上)可一采用基于多层B样条的插值方法。这里采用的方法是局部化的与距离成反比的插值方法,即对于插值点(x, y),取与这个点最近的n点参与插值运算,这样就减少了参与插值运算的数据量,从而可以利用小规模散乱数据插值方法,加快了运算速度。散乱数据的插值问题一直引人关注,提出了很多算法。但是由于应用问题千差万别,数据量不同,对连续性的要求也不同,没有一种算法适合于所有的场合。特别是大规模散乱数据的插值问题还正在研究之中。
(2)等值线抽取算法
给定某一平面上的标量函数F=F(x, y),等值线是由所有点(xi, yi)定义,其中F(xi, yi) = Ft(Ft为一给定值),将这些点按一定的顺序连接组成了函数F(x, y)值为Ft时的等值线。等值线概念应用广泛,如工程和实验中常用的等高线、等压线、等温线等都是等值线的具体应用实例。
对于二维标量场,其数据往往是定义在某一网格面上的。根据网格类型的不同,其等值线抽取方法也各不相同。网格具体可分成两类:正规化网格(regular grid )和非正规化网格(irregular grid)。等值线的抽取方法具体可分为两类,即网格序列法和网格无关法。
网格序列法(grid sequence)的基本思想是按单元的排列次序,逐个处理每一单元,寻找每一单元内相应的等值线段。在处理所有单元后,就自然生成了该网格中的等值线分布。对于某一值的等值线,其穿过的单元数往往只占整个网格单元数的较小部分(10%以下),因此这种处理所有单元网格的方法效率不高,特别是在大型密集网格分布的情况下,效率就更低了。网格无关法就是针对这种情况的高效的等值线生成方法。网格无关法通过给定等值线的起点,或先求出其起始点,利用该点附近的局部几何性质,计算该等值线的下一点,然后,利用已经求出的新点,重复计算下一点,直至到达区域边界,或回到原起点。网格无关法主要有三类:步进法、适应法和递归法。
(3)三维图形绘制
用计算机生成三维形体的真实图形,是计算机图形学研究的重要内容之一。真实图形在仿真模型、几何造型、广告影视、指挥控制、科学计算的可视化等许多领域都有广泛的应用。在使用显示设备描绘物体的图形时,必须把三维信息经过某种投影变换,在二维的显示平面上绘制出来。由于投影变换失去了深度信息,往往导致图形的二义性。要消除二义性,就必须在绘制时消除实际不可见的线和面,习惯上称作消除隐藏线和隐藏面,或简称为消隐。经过消隐的投影图称为物体的真实图形。
当绘图仪或其他画线设备绘制图形时,要解决的主要是消除隐藏面问题。而用光栅图形显示器的像素阵列来绘制物体的明暗图时,就必须解决消除隐藏面问题。另外,在使用光栅图形显示器绘制物体的立体图时,不仅要判断物体之间的遮挡关系,还必须处理物体表面的明暗效应,以便用不同的色彩灰度来增加图形的真实感。
在绘制三维图形时必须解决消隐面和消隐线的问题。消隐方法包括:画家算法,Z缓冲区算法,扫描线算法,区域采样法等。
【消除隐藏面的画家算法】画家算法的大意是,先把屏幕设置成背景色,再把物体的各个面按其离视点的远近进行排序。离视点远者在表头,离视点近者在表尾,构成深度优先级表。然后由表头至表尾逐个取出多边形,投影到屏幕上,显示多边形所包含的实心区域。由于后显示的图形取代先显示的画面,而后显示的图形所代表的面离视点更近,所以由远及近地绘制各面,就相当于消除隐藏面。这与油画作家作画的过程类似,先画远景,再画中景,最后画近景。所以称之为画家算法或油画算法。
【消除隐藏面的Z缓冲区算法】画家算法中的深度排序计算量大,而且排序后还需检查相邻的面,以确保在深度优先级表中前者在前,后者在后。为了避免复杂运算,人们发明了Z缓冲区算法。在这个算法里,不仅需要帧缓冲区来存放每个象素的亮度值,还需要有一个Z缓冲区来存放每个象素的深度值。Z缓冲区算法的流程是:
①帧缓冲区置成背景色;
②Z缓冲区设置成最小的Z值;
③For(各个多边形)
{
扫描转换该多边形;
for(多边形所覆盖的每个象素(x, y))
{
计算多边形在该象素的深度值Z(x, y);
if(Z(x, y)大于Z缓冲区在(x, y)处的值)
{
把Z(x, y)存入Z缓冲区中的(x, y)处;
把多边形在(x, y)处的亮度值存入帧缓冲区的(x, y)处;
}
}
}
多边形在各个象素处的深度值可从顶点的深度值用增量方法求出。对于一个给定的多边形,它在某一点(x, y)的深度值可借助于平面方程ax + by + cz + d = 0 表示为:
z = ( -d – ax – by)/c
若在( x, y )处求出z值是z1,则在(x+dx, y)处的z值为z1 – a/c(dx)。这里a/c是常数,且一般取dx=1。所以,当已知(x, y)处的深度值时,求(x+1, y)处的深度值只要做一次减法。
Z缓冲区算法的基本思想是简单的,在象素级上以近物取代远物。这种取代方法比总体排序实现起来灵活简单,有利于硬件实现。然而Z缓冲区需要较多的存储空间。
【消除隐藏面的扫描线算法】扫描线算法的基本思想是,按扫描行的顺序处理一帧画面,在由视点和扫描线所决定的扫描平面上解决消隐问题。具体步骤是,先将物体各面投影到屏幕上,再计算扫描线与物体各投影面的相交区间。当两个区间在深度方向上重叠时,采用深度测试确定可见部分,扫描线算法的典型实现有两种:扫描线Z缓冲区算法和扫描线间隔连贯性算法。
【消除隐藏面的区域采样算法】画家算法、Z缓冲区算法和扫描线算法,都是点取样算法。用这三种算法绘制物体真实图形时,总是在投影面取一组离散点,在各个离散点解决消隐问题,以确定颜色、亮度,用于显示屏幕上的对应象素。区域采样算法,利用图形的区域连贯性,在连续的区域上确定可见面及其颜色、亮度。区域采样算法的基本思想是,把物体投影到全屏幕窗口上,然后递归地分割窗口,直到窗口内目标足够简单,可以直接显示为止。该算法把初始窗口取做边界平行于平面坐标系的矩形。如果窗口内没有物体,则按背景色显示。若窗口内只有一个面,则把该面显示出来。否则,窗口内含有两个以上的面,则把窗口等分成四个小窗口,对每个小窗口再做上述同样的处理。这样反复地进行下去。如果到某个时刻,窗口仅有象素那么大,而窗口内仍有两个以上的面,这时不必继续再分割,只要取窗口内最近的可见的颜色或所有可见面的平均做为该象素的值。
【明暗效应】所谓明暗效应,指的是对光照射到物体表面所产生的反射/透射现象的模拟。当光照射到物体表面时,可能被吸收、反射或透射。被物体吸收的那部分光转化为热,我们使用一些数学公式来近似计算物体表面按什么样的规律,什么样的比例来反射/透射光。这种公式称为明暗效应模型。三维体的图形在经过消隐后,再进行明暗效应处理,可进一步提高图形的真实感。
一般认为,光的颜色由其波长决定;光的亮度由光的强度决定。各种颜色光具有不同的波长。白光含有所有可见波长的光。当一束白光照射到物体表面时,若所有波长的光均被等量吸收,则物体呈白色、灰色或黑色。若物体有选择地吸收某些波长的光,则物体呈现出颜色。物体的颜色取决于未被吸收的那部分光的波长。
从物体表面反射、折射出来的光的强度取决许多因素,其中包括光源的位置与光强,物体表面的位置和朝向,物体表面的性质(如反射率、折射率和光滑度)以及视点的位置。
假定光源为点光源,且为单色光源。从某个点光源照射到物体表面上一点,再反射出来的光,可以分为三部分:泛光,漫反射和镜面反射光。
泛光在任何方向上的分布都相同。这里泛光用于模拟从环境中周围物体表面再反射出来的光。泛光项可以表示为:
漫反射光的空间分布也是均匀的,但是反射强度与入射光的入射角的余弦成正比。漫反射光的强度可表示为:
参考文献:
[1] 孙家广,杨长贵 编著. 计算机图形学[M]. 北京 清华大学出版社,1995年5月第1版. P459-497.
[2] 石教英,蔡文立 编著. 科学计算可视化算法与系统[M]. 北京 科学出版社,1996年9月第1版.
[3] 徐士良 编著. PC机C图形编程手册[M]. 北京 清华大学出版社,1994年2月第1版.
[4] 陆润民 编著. C语言绘图教程[M]. 北京 清华大学出版社,1996年4月第1版.
[5] 彭晓明,王坚 编著. OpenGL深入编程与实例揭秘[M]. 北京 人民邮电出版社,1999年6月第1版.
[6] 贾志刚 编著. 精通OpenGL[M]. 北京 电子工业出版社,1998年8月第1版.
(4)数据文件格式
【纯数值矩阵ASCII码文本格式】如果X、Y轴上的取样坐标间隔是等分的,且对实际的坐标值不感兴趣,则只需存储Z的取样值数值矩阵,以ASCII码保存,文件后缀为*.txt或者*.csv,对于n行m列数值矩阵,文件包含n行数据,每行m列,每个数据之间用空格或者逗号(,)隔开。例如6行5列数据:
0.12, 0.22, 0.30, 0.25, 0.15
0.32, 0.20, 0.20, 0.24, 0.14
0.11, 0.15, 0.41, 0.21, 0.13
0.10, 0.23, 0.62, 0.22, 0.14
0.18, 0.24, 0.24, 0.45, 0.16
0.21, 0.25, 0.31, 0.24, 0.17
外部工具三维图形1(cbsChart3D.exe),三维图形2(memChart.exe),三维图形3(cbsMatView.exe),内置工具“三维表面图形”四种三维图形绘制方法均支持此格式。
【带行列标题的纯数值矩阵ASCII码文本格式】与纯数值矩阵文本格式不同的是,第1行是每列标题,第1列是每行的标题,且标题均为字母开头,左上角第1个位置数据以字母开头,不具意义。例如:4行5列数值矩阵,
Row\Col, col1, col2, col3, col4, col5
Row1, 0.1, 0.2, 0.3, 0.4, 0.5
Row2, 0.3, 0.2, 0.1, 0.2, 0.4
Row 3, 0.0, 0.3, 0.4, 0.1,0.1
Row4, 0.2, 0.3, 0.5, 0.4, 0.3
外部工具三维图形2(memChart.exe),三维图形3(cbsMatView.exe),内置工具“三维表面图形”三种三维图形方法均支持此格式,但是三维图形1(cbsChart3D.exe)不支持该格式。
【离散样点ASCII码文本格式】存储三维空间样点,ASCII码文本文件,包含三列或者四列,第1列代表X轴,第2列代表Y轴,第3列代表Z轴,第4列代表颜色值,第4列可以缺省。每行的数值之间用空格或者逗号(,)隔开。如:
0.000 0.000 582.450012
1.000 0.020 584.517029
2.000 0.030 583.041016
3.000 0.040 579.934021
4.000 0.000 573.559021
5.000 0.010 560.921997
6.000 0.000 551.198975
支持该格式的软件:内部三维图形,三维图形1(cbsChart3D.exe),三维图形2(memChart.exe)。
【离散平面ASCII码文本格式】文件以ASCII码保存,文件后缀为*.vmat,前5行为文件头。既支持纯数值矩阵,也支持纯离散三维点,还支持由离散点构成的平面:三个点在一起构成三角形面,四个点在一起构成四边形面,由这些小平面构成立体图形。格式说明如下:
;ID=vmat
;XYZ=1
;nrows=1995
;ncols=3
;ndim=0
0.000 0.000 582.450012
1.000 0.000 584.517029
2.000 0.000 583.041016
3.000 0.000 579.934021
4.000 0.000 573.559021
5.000 0.000 560.921997
……
第1行:;ID=vmat,文件标志,表示该数据为三维表面图形数据;
第2行:;XYZ=x,图形的类型,x=0,1,2,3代表不同的含义,
x=0表示由行列组成的纯数值矩阵,此时总数据行数为nrows,列数为ncols,ndim=0;
x=1表示由XYZ三个坐标值构成离散样本,总数据行数为nrows,此时ncols=3, ndim=0,通过散乱数据插值后显示图形。
x=2 表示由XYZV四个坐标值构成的离散样本,此时ncols=4, ndim=0,第4个值表示颜色,用连续颜色表示这个点上的值,总数据行数为nrows;
x=3 表示由一系列小平面片组成的三维表面图形,此时ncols=3 or 4, ndim=3 or 4,总数据行数为nrows*ndim,每ndim行一组构成一个面(ndim=3三角形,ndim=4四边形),当ncols=4时第4列决定显示时该点的颜色值。
第3行:;nrows=1995,代表数据的行数(XYZ=0,1,2),或者四边形或者三角形的个数(XYZ=3);
第4行:;ncols=3,数据的列数,在XYZ=1,2,3时,ncols=3或者4,每列代表X,Y,Z,V,只有ncols=4时V才有意义,代表该点的颜色。
第5行:;ndim=0,3,4,表示四边形(ndim=4)或者三角形(ndim=3)的小平面片,ndim=0表示离散点。
当ndim=3 or 4时后面跟着的数据行数应该是ndim*nrows,表示有nrows个三角形或四边形,每个小片占用ndim行数据,ndim=3代表三角形,ndim=4代表四边形。当ndim=0时后面跟的数据为nrows行,每一行代表一个离散点。
第6行开始:存储相应的数据。
只有三维图形3(cbsMatView.exe)支持该文件格式,该软件还支持*.STL格式。
【软件对数据文件格式的支持情况】
序号 |
数据文件格式 |
内部三维图形 |
三维图形1 (cbsChart3D.exe) |
三维图形2 (memChart.exe) |
三维图形3 (cbsMatView.exe) |
1 |
纯数值矩阵ASCII码文本格式 |
Yes |
Yes |
Yes |
Yes |
2 |
带行列标题的纯数值矩阵ASCII码文本格式 |
Yes |
No |
Yes |
Yes |
3 |
离散样点ASCII码文本格式 |
Yes |
Yes |
Yes |
No |
4 |
离散平面ASCII码文本格式(*.vmat) |
No |
No |
No |
No |
5 |
三维模型格式(*.STL) |
No |
No |
No |
Yes |
(5)软件实现实例
(5.1) 内部工具三维表面图形。菜单操作:《工具箱》→ 《三维表面图形》。
菜单与热键操作
(5.2) 三维图形1(cbsChart3D.exe),支持OpenGL和MeshXYZ两种绘图方式,OpenGL绘图支持光照、纹理,而MeshXYZ方式支持网状线、填充、投影等。菜单操作:《工具箱》→《外部工具》→《三维图形1》,执行cbsChart3D.exe。
(5.3) 三维图形及等值线绘制,菜单操作:《工具箱》→《外部工具》→《三维图形2》,执行memChart.exe。
以等高线为例,可以设置等高线的线数以及每个高度的值,等高线显示风格为6,在图形中按下鼠标左键移动可以测量行号、列号以及高度值。
(5.4) 使用OpenGL绘制三维表面图形。菜单操作:《工具箱》→《外部工具》→《三维图形3》,执行cbsMatView.exe。
热键操作:
向上箭头(↑)、向下箭头(↓):绕X轴旋转图形;
向左箭头(←)、向右箭头(→):绕Z轴旋转图形;
加号(+)、减号(-):绕Y轴旋转图形;
空格键:恢复图形初始状态;
Home键:放大图形。
支持纯数值的ASCII码文本格式,支持带行列标题的纯数值ASCII码文本格式,支持*.vmat离散点ASCII码文本格式,支持*.STL(stereolithography,光固化立体造型术的缩写)三维模型文件格式。
参考:矩阵的三维图形显示
(5.5) 谱线阵列显示,时变功率谱显示
联系作者:chengbowork@163.com
相关文章
多通道信号分析软件系统
生物医学信号处理与分析软件系统设计
曲线拟合软件
离散小波变换用于信号滤波
多维特征参数机器学习算法
多维特征参数机器学习软件
Kohonen自组织特征映射神经网络(环形和球面形网络)
矩阵的三维图形显示软件
图片浏览软件工具
主成分分析(K-L变换)与信号的分解与合成(滤波)
信号的样本熵序列计算
信号的双谱分析
信号的经验模态分解(EMD)
希尔伯特(Hilbert)变换信号瞬时频率计算
给定概率分布的随机变量仿真
信号的特征参数计算
数据分布点纹图
多通道信号数据压缩存储
图像处理基本算法及软件简介
信号功率谱估计
特殊函数计算器
滤波器设计、自适应滤波、匹配滤波方法
离散正交变换及其应用
短时傅里叶变换时变功率谱分析
- 点赞
- 收藏
- 关注作者
评论(0)