当前位置: 首页 > news >正文

matlab使用教程(80)—修改图形对象的透明度

1.更改图像、填充或曲面的透明度

        此示例说明如何修改图像、填充或曲面的透明度。

1.1坐标区框中所有对象的透明度

        透明度值称为 alpha 值。使用 alpha 函数设置当前坐标区范围内所有图像、填充或曲面对象的透明度。指定一个介于 0(完全透明)和 1(完全不透明)之间的透明度值。

t = 0:0.1:2*pi;
x = sin(t);
y = cos(t);figure
patch(x,y,'r')
patch(x+0.8,y,'g')
patch(x+0.4,y+0.8,'b')
axis square tight 
alpha(0.3)

Figure contains an axes object. The axes object contains 3 objects of type patch.

1.2个别曲面的透明度

        曲面的透明度由其 AlphaData 属性定义。将 alpha 数据设置为用于指定曲面的每个顶点透明度的标量值或值矩阵。FaceAlpha 属性指示如何从顶点透明度确定曲面透明度。

[X,Y,Z] = peaks(20);
s2 = surf(X,Y,Z);s2.AlphaData = gradient(Z);    
s2.FaceAlpha = 'flat';

Figure contains an axes object. The axes object contains an object of type surface.

1.3个别图像的透明度

        与曲面一样,图像的透明度也由其 AlphaData 属性定义。对于图像,将 alpha 数据设置为用于指定图像数据的每个元素透明度的标量值或值矩阵。

        例如,使用透明度覆盖两个图像。首先,显示地球的图像。

earth = imread('landOcean.jpg');
image(earth)    
axis image

Figure contains an axes object. The axes object contains an object of type image.

        然后,使用透明度将云图层添加到地球图像。

clouds = imread('cloudCombined.jpg');
image(earth)
axis image
hold onim = image(clouds);
im.AlphaData = max(clouds,[],3);    
hold off

Figure contains an axes object. The axes object contains 2 objects of type image.

1.4个别填充的透明度

        填充的透明度由其 FaceAlpha 和 FaceVertexAlphaData 属性定义。若要在整个填充上实现单一的透明度,请将 FaceVertexAlphaData 设置为一个介于 0(完全透明)和 1(完全不透明)之间的常量,并将 FaceAlpha 属性设置为 'flat'

cla
p1 = patch(x,y,'r');
axis square tight
p1.FaceVertexAlphaData = 0.2;
p1.FaceAlpha = 'flat' ; 

Figure contains an axes object. The axes object contains an object of type patch.

        若要在整个填充上实现可变的透明度,请将 FaceVertexAlphaData 设置为用于指定填充的每个顶点或每个面的透明度的值矩阵。然后,通过 FaceAlpha 属性指示如何使用 FaceVertexAlphaData 确定面的透明度。如果为顶点指定了 alpha 数据,则必须将 FaceAlpha 设置为 'interp'

p1.FaceVertexAlphaData = x';
p1.FaceAlpha = 'interp';

Figure contains an axes object. The axes object contains an object of type patch.

1.5包含纹理映射的透明度

        纹理映射将二维图像映射到三维曲面上。通过将 CData 属性设置为图像数据并将 FaceColor 属性设置为 'texturemap',可将图像映射到曲面上。

        此示例创建地球和云的三维视图。它创建球形表面,并使用纹理映射将地球和云的图像映射到曲面上。

[px,py,pz] = sphere(50);sEarth = surface(py, px ,flip(pz));
sEarth.FaceColor = 'texturemap';
sEarth.EdgeColor = 'none';
sEarth.CData = earth;
hold on
sCloud = surface(px*1.02,py*1.02,flip(pz)*1.02); sCloud.FaceColor = 'texturemap'; 
sCloud.EdgeColor = 'none';
sCloud.CData = clouds;sCloud.FaceAlpha = 'texturemap';
sCloud.AlphaData = max(clouds,[],3);
hold off
view([80 2]) 
daspect([1 1 1])
axis off tight

        此示例中使用的图像来自 Visible Earth。

        致谢:美国国家航空航天局戈达德太空飞行中心图像,由 Reto Stöckli 拍摄(陆地表面、浅水、云)。Robert Simmon 提供增强效果(海洋颜色、合成、三维地球仪、动画)。数据和技术支持:MODIS 土地组;MODIS 科学数据支持团队;MODIS 大气组;MODIS 海洋组附加数据:美国地质调查局 EROS 数据中心(地貌);美国地质勘探局地球遥感弗拉格斯塔夫球场中心(南极洲);美国国防气象卫星计划(城市灯光)。

2.修改 alphamap

        每个图窗都有一个关联的 alphamap,它是一组 0 到 1 之间的向量值。默认的 alphamap 包含 0 到 1 范围内的 64 个线性变化值。可以使用图窗的 Alphamap 属性或使用 alphamap 函数来查看或修改 alphamap。

2.1默认的 alpha 映射

        默认的 alphamap 包含 0 到 1 范围内的 64 个线性变化值,如下图所示。

am = get(gcf,'Alphamap');
plot(am)

        此 alphamap 将最低的 alpha 数据值显示为完全透明,将最高的 alpha 数据值显示为完全不透明。

        alphamap函数可以创建一些有用的预定义 alphamap,还可以修改现有 alphamap。例如,

figure;
alphamap('vup')

        将图窗的 Alphamap 属性设置为值先增后减的 alphamap:

am = get(gcf,'Alphamap');
plot(am)

        您可以使用 increase 或 decrease 选项改变这些值。例如,

alphamap('increase',.4)

        将图窗当前 alphamap 中的所有值加上 0.4。重新绘制 'vup' alphamap 可以看出变化。这些值限制在 [0 1] 的范围内。

am = get(gcf,'Alphamap');
plot(am)

2.2示例 - 修改 alphamap

        此示例使用切片平面来查看三维体数据。切片平面使用颜色数据作为 alpha 数据,并使用递减的 alphamap(值范围从 1 到 0):

  1. 通过计算一个包含三个变量的函数来创建三维体数据。

    [x,y,z] = meshgrid(-1.25:.1:-.25,-2:.2:2,-2:.1:2);
    v = x.*exp(-x.^2-y.^2-z.^2);
  2. 创建切片平面,将 alpha 数据设置为等于颜色数据,并指定 FaceColor 和 FaceAlpha 插值。

    h = slice(x,y,z,v,[-1 -.75 -.5],[],[0]);
    set(h,'EdgeColor','none',...
    'FaceColor','interp',...
    'FaceAlpha','interp')
    alpha('color')
  3. 使用不透明度线性递减的 alphamap 并通过将 alphamap 中的每个值增加 0.1 来实现所需的透明度。指定 hsv 颜色图。

    alphamap('rampdown')
    alphamap('increase',.1)
    colormap hsv

        此 alphamap 用最小的透明度显示函数的最小值(接近零),用最大的透明度显示函数的最大值。这使您能够透视切片平面,同时保留了零附近的数据。

http://www.lryc.cn/news/351344.html

相关文章:

  • mysql bin 日志转成sql
  • 河南道路与桥梁乙级资质申请:注册证书与职称证书准备
  • 3D工业视觉
  • 使用auth_basic模块进行基础认证
  • 深度解析物联网平台:优化数据点位管理的实战策略
  • Spring常见问题
  • MiniMax Golang2轮面试,期望薪资25K
  • MyBatis系统学习篇 - MyBatis的缓存
  • K-means聚类模型
  • 免费分享一套微信小程序旅游推荐(智慧旅游)系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】,帅呆了~~
  • Matlab 2023b学习笔记1——界面认识
  • C++ sort排序的总和应用题
  • [力扣]——231.2的幂
  • 【css】引入背景图时候,路径写入@会报错
  • 【有手就行】使用你自己的声音做语音合成,CPU都能跑,亲测有效
  • 《ESP8266通信指南》番外-(附完整代码)ESP8266获取DHT11接入(基于Lua)
  • [IMX6ULL驱动开发]-Linux对中断的处理(一)
  • PHP基础学习笔记(面向对象OOP)
  • Mysql超详细安装配置教程(保姆级图文)
  • HR招聘测评,如何判断候选人的团队协作能力?
  • [STM32-HAL库]Flash库-HAL库-复杂数据读写-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C6T6
  • windows 下访问 csdn 异常问题
  • vue3结合element-plus之如何优雅的使用表格
  • 网络协议——Modbus-RTU
  • 【Qt】如何优雅的进行界面布局
  • 【八股系列】分别说一下nodeJS和浏览器的事件循环机制?
  • 关于基础的流量分析(1)
  • 数据结构---树,二叉树的简单概念介绍、堆和堆排序
  • MySQL聚合函数(多行函数)
  • 智慧教室课堂-专注度及考试作弊系统、课堂动态点名,情绪识别、表情识别和人脸识别结合