要画一个光路图,本来可以用proe,但是鼠标不好用,有些操作也忘了,用MATLAB画了个。下面是用到的图片。

但是三维坐标中显示彩色图片的目标没有搞定,做了个灰度图,然后用仿射程序将彩色图片贴到了二维灰度图中。

  1. clear all;clc;close all;
  2.  
  3. im1 = rgb2gray(imread('F:\sup.jpg'));% 掩模,第一张图,白色的部分在后面的surf中透明化了
  4. im1 = imresize(im1,[64 64]);
  5.  
  6. im2 = rgb2gray(imread('F:\im3.jpg'));% 样品,第二张图
  7. im2(:,end) = [];
  8. im2 = imresize(im2,[64,64]);
  9. im2 = flipud(im2);
  10.  
  11. im3 = rgb2gray(imread('F:\diff.jpg'));% 衍射图样,第三张图
  12. im3(513:end,:) = [];
  13. im3(:,513:end) = [];
  14. im3 = flipud(im3);
  15.  
  16. % figure;
  17. % subplot(121);imshow(im1);
  18. % subplot(122);imshow(im4);
  19. mask = PIEmask(256,200,128,128);
  20. mask = imresize(mask,[64 64]);
  21. %%
  22. figure('color','white');
  23.  
  24. N = size(im3);
  25. [x z] = meshgrid(-N/2:N/2-1);
  26. y = 0*ones(N,N);
  27. a = surf(x,y,z, double(im3) ); % 画衍射图
  28. set(a,'linestyle','none'); %隐藏网格
  29. colormap(gray);
  30.  
  31. hold on;
  32. N = size(im2);
  33. [x z] = meshgrid(-N/2:N/2-1);
  34. y = -200*ones(N,N);
  35. b = surf(x,y,z, double(im2) ); % 画样品图
  36. set(b,'linestyle','none'); %隐藏网格
  37. colormap(gray);
  38.  
  39. hold on;
  40. N = size(im1);
  41. [x z] = meshgrid(-N/2:N/2-1);
  42. y = -210*ones(N,N);
  43. % c = surf(x,y,z, double(im1) );
  44. c = surf(x,y,z, double(im1),'FaceAlpha','flat','AlphaDataMapping','scaled','AlphaData',1-mask); % 画掩模图,并将中间部分透明化
  45. % alpha(0.5)
  46. set(c,'linestyle','none'); %隐藏网格
  47. colormap(gray);
  48. %% 后面的部分就是画红色的‘光’了
  49. [yy zz] = meshgrid(-500:-210,-32:32);
  50. xx = 32*ones(size(yy));
  51.  
  52. p = surf(xx,yy,zz,double(255*ones(size(zz))),'FaceAlpha','flat',...
  53. 'AlphaDataMapping','scaled',...
  54. 'AlphaData',0.2*ones(size(zz)),...
  55. 'FaceColor','red');
  56. set(p,'linestyle','none'); %隐藏网格
  57.  
  58. p = surf(-xx,yy,zz,double(255*ones(size(zz))),'FaceAlpha','flat',...
  59. 'AlphaDataMapping','scaled',...
  60. 'AlphaData',0.2*ones(size(zz)),...
  61. 'FaceColor','red');
  62. set(p,'linestyle','none'); %隐藏网格
  63. %==========================================
  64. [xx yy] = meshgrid(-32:32,-500:-210);
  65. zz = 32.*ones(size(xx));
  66.  
  67. p = surf(xx,yy,zz,double(255*ones(size(zz))),'FaceAlpha','flat',...
  68. 'AlphaDataMapping','scaled',...
  69. 'AlphaData',0.2*ones(size(zz)),...
  70. 'FaceColor','red');
  71. set(p,'linestyle','none'); %隐藏网格
  72.  
  73. p = surf(xx,yy,-zz,double(255*ones(size(zz))),'FaceAlpha','flat',...
  74. 'AlphaDataMapping','scaled',...
  75. 'AlphaData',0.2*ones(size(zz)),...
  76. 'FaceColor','red');
  77. set(p,'linestyle','none'); %隐藏网格
  78. %%
  79. t = 0:0.01:2*pi;
  80. x = 25*cos(t');x = repmat(x,1,300);
  81. z = 25*sin(t');z = repmat(z,1,300);
  82.  
  83. y = linspace(-210,-200,300);
  84. y = repmat(y,629,1);
  85.  
  86. p = surf(x,y,z,x*0,'FaceAlpha','flat',...
  87. 'AlphaDataMapping','scaled',...
  88. 'AlphaData',0.5*ones(size(z)),...
  89. 'FaceColor','red');
  90. set(p,'linestyle','none'); %隐藏网格
  91. %%
  92. s1 = -25*sqrt(2)/2;
  93. s2 = -256;
  94. t1 = linspace(s1,s2,100);
  95. x = [];
  96. t2 = linspace(-s1,-s2,100);
  97. for k = 1:100;
  98. tmp = (linspace(t1(k),t2(k),200))';
  99. x = [x tmp];
  100. end
  101.  
  102. y = linspace(-200,0,100);
  103. y = repmat(y,200,1);
  104. z = linspace(25*sqrt(2)/2,255,100);
  105. z = repmat(z,200,1);
  106.  
  107. p = surf(x,y,z,x*0,'FaceAlpha','flat',...
  108. 'AlphaDataMapping','scaled',...
  109. 'AlphaData',0.2*ones(size(z)),...
  110. 'FaceColor','red');
  111. set(p,'linestyle','none'); %隐藏网格
  112.  
  113. p = surf(x,y,-z,x*0,'FaceAlpha','flat',...
  114. 'AlphaDataMapping','scaled',...
  115. 'AlphaData',0.2*ones(size(z)),...
  116. 'FaceColor','red');
  117. set(p,'linestyle','none'); %隐藏网格
  118.  
  119. p = surf(z,y,x,x*0,'FaceAlpha','flat',...
  120. 'AlphaDataMapping','scaled',...
  121. 'AlphaData',0.15*ones(size(z)),...
  122. 'FaceColor','red');
  123. set(p,'linestyle','none'); %隐藏网格
  124.  
  125. p = surf(-z,y,x,x*0,'FaceAlpha','flat',...
  126. 'AlphaDataMapping','scaled',...
  127. 'AlphaData',0.15*ones(size(z)),...
  128. 'FaceColor','red');
  129. set(p,'linestyle','none'); %隐藏网格
  130. %%
  131.  
  132. grid off;
  133. axis off;
  134.  
  135. view([150 -256 50]);
  136. % view([150 -100 0]);
  137. daspect([10,3,10]);%调节坐标轴比例

效果如下

之后又用了个仿射程序把衍射图样彩色化了

MATLAB在三维坐标中显示图片 并 使得图片部分透明的更多相关文章

  1. MFC对话框中显示BMP,JPG图片

    //************************************ // 方法说明:    显示JPG和GIF.BMP图片 // 参数说明:    CDC * pDC           设 ...

  2. MATLAB:读取txt文件中物体的三维坐标,显示三维模型

    在MATLAB中建立一个脚本show3Dtxt.m文件,编写代码: clear; %%read 3D data fileID= fopen('E:\博士\深度学习与三维重建\代码实现\voxel_gr ...

  3. MATLAB:读取mat文件中物体的三维坐标,显示三维模型

    在MATLAB中建立一个脚本show3Dmat.m文件,编写代码: clc; clear; %%read 3D data load('E:\博士\深度学习与三维重建\代码实现\3DRecGAN\X_Y ...

  4. matlab如何保存figure中去掉白边的图片

    输出图片成可直接调入的灰度图,设置输出图片空白边距,以及调整图片大小,纵横比. 一.先显示图片,imshow.如果是plot,或者newplot,直接看“三”.imshow(strain_image, ...

  5. web中显示中文名称的图片,可以这样配置filter

    com.cy.filter.UrlFilter: package com.cy.filter; import java.io.IOException; import java.net.URLDecod ...

  6. [GDAL]在三维场景中显示DEM

    粗糙实现了个版本 存储波段的基本信息和数据: namespace RGeos.Terrain { //存储波段的基本信息和数据 public class RasterBandData { public ...

  7. 在应用中显示的图片很多情况不满足业务需求,我们需要动态根据图片的宽高进行缩放或加载中显示的缺省图片,这是我没就需要监听图片加载完成回调,来看看微信小程序怎么实现图片加载完成回调。

    <swiper-item> <image src="{{item.image}}" class="slide-image" mode=&quo ...

  8. matlab中显示灰阶图像

    matlab的数据源文件中400张图片,每张图片是一个112*92的矩阵表示,而400张图片存储在一个cell数组ime中,显示第一张图片,指令是: colormap(gray) imagesc(im ...

  9. Flash图表控件FusionCharts如何在图表中显示标识和图片

    在FusionCharts的图表中显示外部商标 使用FusionCharts之后,用户可以在运行时加载需要在图表中显示的外部标识/图片/图像.这个标识可以GIF / JPEG / PNG或SWF文件格 ...

随机推荐

  1. scrapy框架学习之路

    一.基础学习 - scrapy框架 介绍:大而全的爬虫组件. 安装: - Win: 下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted pip3 ...

  2. 关于vs设置其他主题配色问题

    可以再网上找其他的.vssettings文件导入 导入方法如下: 一般vs会将你之前设置下的配色方案自动保存下来,你也可以直接覆盖 2019-03-21  17:31:07

  3. jsp中的include静态包含与动态包含,

    d动态包含与静态包含的最大区别是 静态包含:<%@ include file = "文件名.jsp"%>,在<body>的标签外定义.在没有编译的时候,两个 ...

  4. 【spring源码分析】spring和@PostConstruct注解

    @PostConstruct注解好多人以为是Spring提供的.其实是Java自己的注解. Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法.被@Pos ...

  5. React Native使用 DeviceEventEmitter发送通知emit和监听接收addListener的用法

    js 向 js 发送数据 DeviceEventEmitter.emit('自定义名称',发送数据);   例:边看边买退出登录之后,我的淘宝和详情页的钱包数据应该改变.这时,我们可以在退出登录请求返 ...

  6. pnpm 快速节省磁盘工具的包管理工具

    nodejs 相关的包管理工具有很多,我们常用的有 npm cnpm(我基本已经不用了),yarn... pnpm 是另外一个不错的包管理工具,包含以下特性 快速 节省空间,一个版本的包只会在磁盘中存 ...

  7. madlib 集成 hasura graphql-engine 试用

    madlib 可以让我们直接在sql 中进行机器学习,集成了强大的sql 能力,以及分析能力,后边会尝试 集成graphql engine ,让功能更强大 docker 镜像准备 使用了一个别人的写好 ...

  8. microcks 微服务mocks 工具&&运行时

    microcks 是一个方便的微服务mock 工具,我们可以用来mock request.response,同时获取api 的服务契约,microcks 支持的部署模式也比较多,docker-comp ...

  9. 你不知道的JavaScript(中卷) (Kyle Simpson 著)

    第一部分 类型和语法 第1章 类型 1.1 类型 1.2 内置类型 1.3 值和类型 1.3.1 undefined和undeclared 1.3.2 typeof Undeclared 1.4 小结 ...

  10. 让使用SQLite的.NET应用自适应32位/64位系统

    如果一个.NET应用要自适应32位/64位系统,只需要在项目的“目标平台”设置为“Any CPU”.但是如果应用中使用了SQLite,情况就不同了. SQLite的.NET开发包来自是System.D ...