MATLAB中的光照处理

在用MATLAB绘制三维图形时,不仅可以画出带光照模式的曲面,还能在绘图时指定光线的来源。

1.带光照模式的三维曲面

surfl命令用来画一个带光照模式的三维曲面图,该命令显示一个带阴影的曲面,结合了周围的、散射的和镜面反射的光照模式。想获得较平滑的颜色过渡,则需要使用有线性强度变化的色图(如gray、copper、bone、pink等)。

surfl命令的使用格式如下:


调用格式                                           说明

surfl(Z)                                       以向量Z的元素生成一个三维的带阴影的曲面。其中阴影模式中的默认光源方位为从当前视角开始,逆时针转45°

surfl(X,Y,Z) 以矩阵X、Y、Z生成的一个三维的带阴影的曲面。其中阴影模式中默认光源方位为从当前视角开始,逆时针转45°

surfl(...,'light') 用一个MATLAB光照对象(light object)生成一个带颜色、带光照的曲面,这与用默认光照模式产生的效果不同

surfl(...,'cdata') 改变曲面颜色数据(color data),使曲面成为可反光的曲面

surfl(...,s) 指定光源与曲面之间的方位s,其中s为一个二维向量[azimuth,elevation],或者三维向量[sx,sy,sz]。默认光源方位

为从当前视角开始,逆时针转45

surfl(X,Y,Z,s,k) 指定反射常系数k,其中k为一个定义环境光(ambient light)系数(0≤ka≤1)、漫反射(diffuse reflection)系数(0≤kd≤1)、

镜面反射(specular reflection)系数(0≤ks≤1)与镜面反射亮度(以像素为单位)的四维向量[ka,kd,ks,shine],默认值为

k = [0.55 0.6 0.4 10]

h = surfl(...) 返回一个曲面图形句柄向量h


对于这个命令的使用格式需要说明的一点是,参数X、Y、Z确定的点定义了参数曲面的“里面”和“外面”,若用户想让曲面的“里面”有光照模式,只要

使用surfl(X',Y',Z')命令即可。


例:绘出山峰函数在有光照情况下的三维图形。

>> close all
>> [X,Y] = meshgrid(-5:0.25:5);
>> Z = peaks(X,Y);
>> subplot(1,2,1)
>> surfl(X,Y,Z)
>> title('外面有光照')
>> subplot(1,2,2)
>> surfl(X',Y',Z')
>> title('里面有光照')


2.光源位置及照明模式

在绘制带光照的三维图像时,可以利用light命令与lightangle命令来确定光源位置,其中light命令使用格式非常简单,即为:

light('color', s1, 'style', s2, 'position', s3)

其中color、style与position的位置可以互换,s1,s2,s3为相应的可选值。例如light('position',[1 0 0])表示光源从无穷远处沿x轴向原点照射过来。

lightangle命令的使用格式如下:

调用格式 说明

lightangle(az,el) 在由方位角和仰角确定的位置放置光源

light_handle= lightangle(az,el) 创建一个光源位置并在light_handle中返回light的句柄

lightangle(light_handle,az,el) 设置由light_handle确定的光源位置

[az,el] = lightangle(light_handle) 返回由light_handle确定的光源位置的方位角和仰角

在确定了光源位置后,用户可能还会用到一些照明模式,这一点可以利用lighting命令来实现,它主要有4种使用格式,也即有4种照明模式。

lighting flat                             produces uniform lighting across each of the faces of the object. Select this method to view faceted objects.

lighting gouraud                   calculates the vertex normals and interpolates linearly across the faces. Select this method to view curved surfaces.

lighting phong                       interpolates the vertex normals across each face and calculates the reflectance at each pixel. Select this choice to view 

                                                 curved surfaces. Phong lighting generally produces better results than Gouraud lighting, but it takes longer to render.

lighting none                         turns off lighting.


例:研读下面的程序并观察其输出图形,揣摩下面各个命令的作用。

>> close all
>> [x,y,z] = sphere(40);
>> colormap(jet)
>> subplot(1,2,1);
>> surf(x,y,z),shading interp
>> light('position',[2,-2,2],'style','local')
>> lighting phong
>> title('phong')
>> subplot(1,2,2)
>> surf(x,y,z,-z),shading flat
>> lighting flat
>> light('position',[-1,0.5,1],'style','local','color','w')
>> title('flat')
>> 



遗传算法优化BP神经网络(GABP)是一种结合了遗传算法(GA)和BP神经网络的优化预测方法。BP神经网络是一种多层前馈神经网络,常用于模式识别和预测问题,但其容易陷入局部最优。而遗传算法是一种模拟自然选择和遗传机制的全局优化方法,能够有效避免局部最优 。GABP算法通过遗传算法优化BP神经网络的权重和阈值,从而提高网络的学习效率和预测精度 。 种群:遗传算法中个体的集合,每个个体代表一种可能的解决方案。 编码:将解决方案转化为适合遗传操作的形式,如二进制编码。 适应度函数:用于评估个体解的质量,通常与目标函数相反,目标函数值越小,适应度越高。 选择:根据适应度保留优秀个体,常见方法有轮盘赌选择、锦标赛选择等。 交叉:两个父代个体交换部分基因生成子代。 变异:随机改变个体的部分基因,增加种群多样。 终止条件:当迭代次数或适应度阈值达到预设值时停止算法 。 初始化种群:随机生成一组神经网络参数(权重和阈值)作为初始种群 。 计算适应度:使用神经网络模型进行训练和预测,根据预测误差计算适应度 。 选择操作:根据适应度选择优秀个体 。 交叉操作:对选择的个体进行交叉,生成新的子代个体 。 变异操作:对子代进行随机变异 。 替换操作:用新生成的子代替换掉一部分旧种群 。 重复步骤2-6,直到满足终止条件 。 适应度函数通常以预测误差为基础,误差越小,适应度越高。常用的误差指标包括均方根误差(RMSE)或平均绝对误差(MAE)等 。 GABP代码中包含了适应度函数的定义、种群的生成、选择、交叉、变异以及训练过程。代码注释详尽,便于理解每个步骤的作用 。 GABP算法适用于多种领域,如时间序列预测、经济预测、工程问题的优化等。它特别适合解决多峰优化问题,能够有效提高预测的准确和稳定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值