MATLAB在三維坐標中顯示圖片 並 使得圖片部分透明


要畫一個光路圖,本來可以用proe,但是鼠標不好用,有些操作也忘了,用MATLAB畫了個。下面是用到的圖片。

但是三維坐標中顯示彩色圖片的目標沒有搞定,做了個灰度圖,然后用仿射程序將彩色圖片貼到了二維灰度圖中。


 

clear all;clc;close all;

im1 = rgb2gray(imread('F:\sup.jpg'));% 掩模,第一張圖,白色的部分在后面的surf中透明化了
im1 = imresize(im1,[64 64]);

im2 = rgb2gray(imread('F:\im3.jpg'));% 樣品,第二張圖
im2(:,end) = [];
im2 = imresize(im2,[64,64]);
im2 = flipud(im2);


im3 = rgb2gray(imread('F:\diff.jpg'));% 衍射圖樣,第三張圖
im3(513:end,:) = [];
im3(:,513:end) = [];
im3 = flipud(im3);

% figure;
% subplot(121);imshow(im1);
% subplot(122);imshow(im4);
mask = PIEmask(256,200,128,128);
mask = imresize(mask,[64 64]);
%%
figure('color','white');

N = size(im3);
[x z] = meshgrid(-N/2:N/2-1);
y = 0*ones(N,N);
a = surf(x,y,z,  double(im3) );   % 畫衍射圖
set(a,'linestyle','none');  %隱藏網格
colormap(gray);

hold on;
N = size(im2);
[x z] = meshgrid(-N/2:N/2-1);
y = -200*ones(N,N);
b = surf(x,y,z,  double(im2) );  % 畫樣品圖
set(b,'linestyle','none');  %隱藏網格
colormap(gray);

hold on;
N = size(im1);
[x z] = meshgrid(-N/2:N/2-1);
y = -210*ones(N,N);
% c = surf(x,y,z,  double(im1) );
c = surf(x,y,z,  double(im1),'FaceAlpha','flat','AlphaDataMapping','scaled','AlphaData',1-mask);  % 畫掩模圖,並將中間部分透明化
% alpha(0.5)
set(c,'linestyle','none');  %隱藏網格
colormap(gray);
%%  后面的部分就是畫紅色的‘光’了
[yy zz] = meshgrid(-500:-210,-32:32);
xx = 32*ones(size(yy));

p = surf(xx,yy,zz,double(255*ones(size(zz))),'FaceAlpha','flat',...
'AlphaDataMapping','scaled',...
'AlphaData',0.2*ones(size(zz)),...
'FaceColor','red');
set(p,'linestyle','none');  %隱藏網格

p = surf(-xx,yy,zz,double(255*ones(size(zz))),'FaceAlpha','flat',...
'AlphaDataMapping','scaled',...
'AlphaData',0.2*ones(size(zz)),...
'FaceColor','red');
set(p,'linestyle','none');  %隱藏網格
%==========================================
[xx yy] = meshgrid(-32:32,-500:-210);
zz = 32.*ones(size(xx));

p = surf(xx,yy,zz,double(255*ones(size(zz))),'FaceAlpha','flat',...
'AlphaDataMapping','scaled',...
'AlphaData',0.2*ones(size(zz)),...
'FaceColor','red');
set(p,'linestyle','none');  %隱藏網格

p = surf(xx,yy,-zz,double(255*ones(size(zz))),'FaceAlpha','flat',...
'AlphaDataMapping','scaled',...
'AlphaData',0.2*ones(size(zz)),...
'FaceColor','red');
set(p,'linestyle','none');  %隱藏網格
%%
t = 0:0.01:2*pi;
x = 25*cos(t');x = repmat(x,1,300);
z = 25*sin(t');z = repmat(z,1,300);

y = linspace(-210,-200,300);
y = repmat(y,629,1);

p = surf(x,y,z,x*0,'FaceAlpha','flat',...
'AlphaDataMapping','scaled',...
'AlphaData',0.5*ones(size(z)),...
'FaceColor','red');
set(p,'linestyle','none');  %隱藏網格
%%
s1 = -25*sqrt(2)/2;
s2 = -256;
t1 = linspace(s1,s2,100);
x = [];
t2 = linspace(-s1,-s2,100);
for k = 1:100;
    tmp = (linspace(t1(k),t2(k),200))';
    x = [x tmp];
end

y = linspace(-200,0,100);
y = repmat(y,200,1);
z = linspace(25*sqrt(2)/2,255,100);
z = repmat(z,200,1);

p = surf(x,y,z,x*0,'FaceAlpha','flat',...
'AlphaDataMapping','scaled',...
'AlphaData',0.2*ones(size(z)),...
'FaceColor','red');
set(p,'linestyle','none');  %隱藏網格

p = surf(x,y,-z,x*0,'FaceAlpha','flat',...
'AlphaDataMapping','scaled',...
'AlphaData',0.2*ones(size(z)),...
'FaceColor','red');
set(p,'linestyle','none');  %隱藏網格

p = surf(z,y,x,x*0,'FaceAlpha','flat',...
'AlphaDataMapping','scaled',...
'AlphaData',0.15*ones(size(z)),...
'FaceColor','red');
set(p,'linestyle','none');  %隱藏網格

p = surf(-z,y,x,x*0,'FaceAlpha','flat',...
'AlphaDataMapping','scaled',...
'AlphaData',0.15*ones(size(z)),...
'FaceColor','red');
set(p,'linestyle','none');  %隱藏網格
%%

grid off;
axis off;

view([150 -256 50]);
% view([150 -100 0]);
daspect([10,3,10]);%調節坐標軸比例

 效果如下

 

之后又用了個仿射程序把衍射圖樣彩色化了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM