过冷水诚挚邀请你加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载,qq:927550334
过冷水在往期的推文中经常会和大家分享一些绘图的程序,以及Matlab绘图图片,对于不太熟悉Matlab绘图设置的用户来说,会习惯性吐槽Matlab绘图太难看,本期过冷水就和大家分享一些不常见的图像绘图命令,让图像绘制上一个台阶。
(1) 绘图色彩调整
Matlab中提供了colormap 函数,可以根据颜色映像矩阵对图像对象的颜色进行调整。所谓颜色映像矩阵就是k*3的矩阵,k表示有k种颜色,每行3个元素分别表示红、绿、蓝三元色的灰度值,取值[0,1]之间。
colormap(map) %map为当前颜色映像矩阵
colormap('default') %映像默认值
cmap = colormap %获取当前映像矩阵
colormap(ax,…) %获取当前axes对象的颜色映像矩阵
(2) 着色方式调整
有了颜色之后,颜色的着色效果可以通过shading函数来调整。shading函数的训用格式如下;
shading flat 平面着色,同一个小网格面和相应的线段用同一种颜色着色。
shading faceted类似于shading flat,平面着色,只是网格线都用黑色,属于默认着色。
shading interp 通过颜色插值方式着色。
shading(axes handle,…) 为句柄值为axes_handle 的坐标系内的图形对象设置着色方式。
(3)透明度调整
可以训过alpha函数调整图形对象透明度,最简单调用格式:
alpha ( alpha_data),%% alpha_data是0~1之间的数,alpha_data=0表示完全透明, alpha_dat=1表示完全不透明。
figure; figure1=figure; subplot1=subplot(1,2,1,'Parent',figure1); hold(subplot1,'on'); [X,Y,Z] = sphere; surf(X,Y,Z,'Parent',subplot1); colormap(subplot1,lines); shading interp mesh(2*X,2*Y,2*Z,'Parent',subplot1) view(subplot1,[-1.21330827067669 32.2499982888347]); title(subplot1,'网格透视') hidden off axis equal axis off subplot2=subplot(1,2,2,'Parent',figure1); hold(subplot2,'on'); surf(X,Y,Z,'Parent',subplot2,'FaceColor','r'); hold on; surf(2*X,2*Y,2*Z,'Parent',subplot2,'FaceAlpha',0.4); title(subplot2,'面格透视') view(subplot2,[-0.303327067669173 43.5374986232897]); axis equal axis off
(4)光源设置与属性调整
用light函数可在当前坐标系中建立一个光源,该函数的调用格式:
light( 'ProDertName',propertyvalue,…) %光源对象的主要属性有:'Position' , 'Color'和Style' .'Position'是位置属性性
handle = light(…) %建立一个光源,开获取句柄handle ,之后可通过get(handle)查看光源所有属性
(5)调整完照模式
建立光源之后,可使用lighting函数调整光照模式,使用方法:
lighting flat %产生均匀光照
lighting gouraud %计算顶点法线并作线性插值修改表面颜色
lighting phong %做线性插值并计算每个像素反射率来修改表面颜色。
lighting none %关掉照明。
(6)图形表面对光照反射属性设置
不同材质物体对光照反射效果是不同的。MATLAB中提供了material函数,用来设置图形表面的材质属性,从而按制图形表面对光昭的反射效果。
material shiny %镜面效果,使图形对象有相对较高的镜面反射,镜而光的颜色仅取决于光源颜色。
material dull %类似于木质表面效果,健图形对象有事多的漫反时,反射光颜色取决于光源颜色。
materlal metal %金属表面效果,使图形对象有非高的镜面反射,反射光颜色取决于光源颜色。
material([ka kd ks])
material([ka kd ks n])
material([a kd ks n sc])
用ka , kd和ks分别设置图形对象的环境光、漫反射和镜面反射,n表示镜面指数,sc表示镜面颜色反射系数。
(7)调,视.点位置
在绘制三维图形时,视点位置决定了坐标轴方向,从不同视点来看,图形对象之间也可能有不同网挡关系。
view 函数调用格式:
view(az,el) %设置三维绘图视角,方位角az表示从y轴负向开始绕z轴旋转度数,逆时针旋转时z取正值,el表示相对于xoy平面仰角,在xoy平面上方取正值,在xoy平面的下方取负值。
view([x,y,z]) %设置视点的三维直角坐标[x,y,z]。
view(2) %设置默认的二维视角,az=0,el=90
view(3) %设置默认的三维视角az=-37.5, el=30。
view(ax,…) %设置句柄值为ax的坐标系的视角。
[az,el] = view
返回当前方向角和仰角。
t=0:pi/20:2*pi; [x,y,z]= cylinder(2 sin(t),100); surf(x,y,z); xlabel('X'); ylabel('Y'); zlabel('Z'); set(gca,'color','none'); set(gca,'XColor',[0.5 0.5 0.5]); set(gca,'YColor',[0.5 0.5 0.5]); set(gca,'ZColor',[0.5 0.5 0.5]); shading interp; colormap(copper); light('Posi',[-4 -1 0]); lighting phong; material metal; hold on; axis off
vert = [0 0 0;0 200 0;200 200 0;200 0 0;0 0 100;... 0 200 100;200 200 100;200 0 100]; fac = [1 2 3 4;2 6 7 3;4 3 7 8;1 5 8 4;1 2 6 5;5 6 7 8]; view(3); h = patch('faces',fac,'vertices',vert,'FaceColor','g'); set(h,'FaceAlpha',0.25); hold on; [x0,y0,z0] = sphere; x = 30 30*x0; y = 50 30*y0; z = 50 30*z0; h1 = surf(x,y,z,'linestyle','none','FaceColor','r','EdgeColor','none'); x = 110 30*x0; y = 110 30*y0; z = 50 30*z0; h2 = surf(x,y,z,'linestyle','none','FaceColor','b','EdgeColor','none'); x = 110 30*x0; y = 30 30*y0; z = 50 30*z0; h3 = surf(x,y,z,'linestyle','none','FaceColor','y','EdgeColor','none'); xlabel('X'); ylabel('Y'); zlabel('Z'); lightangle(45,30); lighting phong; axis equal; axis off
本期过冷水要和大家分享的图像处理命令就这么多,学会上述技巧,使用起来,让图像变的与众不同。
过冷水发表于 仿真秀 平台原创文章,未经授权禁止私自转载,如需转载请需要和作者沟通表明授权声明,未授权文章皆视为侵权行为,必将追责。如果您希望加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载均可加群:927550334。
精品回顾
过冷水和你分享 matlab读取存储各种文件的方法 文末有独家金曲分享