MATLAB将图形数据保存在当前视图和光照中

时间:2018-02-12 15:52:56

标签: matlab matlab-figure

我需要创建一个随机曲面(我使用warDirectory.toFile().toURI().toURL() 创建)并将其保存在某些光照条件下(我使用peaks添加)。该图本身是使用light创建的。然后我使用surf设置所需的视角。

view(2)

Z矩阵的尺寸 161x161 。我想保存与图中的光照/阴影对应的 161x161矩阵。有什么想法吗?

样本生成图:

A sample generated plot

修改我打算使用保存的图片。总体目标是执行photometric stereosomething on these lines)。因此,我需要在不同的光照条件下生成几个表面图像。

PS:感谢[X,Y] = meshgrid(-2:.025:2); Z = peaks(X,Y); h = surf(X,Y,Z); % Necessary for task h.AmbientStrength = 0.; h.SpecularStrength = 0.; h.DiffuseStrength = 1.; h.BackFaceLighting = 'unlit'; h.FaceLighting = 'gouraud'; view(2); l = light('Position',[-2, -2, 50],'Style','local','Color',[1 1 1]);

2 个答案:

答案 0 :(得分:1)

我认为除了处理数据之外还有其它原因,因为从情节中获取数据是最糟糕的情况。假设你忘了h.LineStyle='none';,否则你就不会看到它们。

此代码将大致完成工作:

% get the frame plotted in the figure
test=getframe(gca);
% the size of the image will be arbitrary, depends on the size of the figure on screen and your screen resolution. Lets interpolate, so we can get the values at the exact points you want. I use the same bounds as in your description
[Xi,Yi]=meshgrid(linspace(-2,2,size(test.cdata,2)),linspace(-2,2,size(test.cdata,1)));

% Only works if grayscale, repeat x3 for each dimension if you have color
img=interp2(Xi,Yi,double(test.cdata(:,:,1)),X,Y)/255;

figure;imshow(img);

答案 1 :(得分:0)

Z矩阵仅包含用于表示曲面的3D数据,它不受后来应用于其可视化的光照/着色设置的影响。

如果您想通过加载"某些保存的数据"来重现您获得的数字,则必须保存Z矩阵(最好还保存{{ 1}}和X)沿着灯光设置的值。

为此,首先必须通过将lightig值分配给相应的变量集来修改代码,然后必须使用此变量来设置光照。

最后你必须保存所有这些变量。

Y

要重现该图,将来可以使用如下脚本:

[X,Y] = meshgrid(-2:.025:2);
Z = peaks(X,Y);
h = surf(X,Y,Z);

% Necessary for task

%h.AmbientStrength = 0.;
%h.SpecularStrength = 0.;
%h.DiffuseStrength = 1.;
%h.BackFaceLighting = 'unlit';
%h.FaceLighting = 'gouraud';

% Assign the setting values to a set of varialbles
AmbientStrength_val=0.;
SpecularStrength_val=0.;
DiffuseStrength_val=1.;
BackFaceLighting_val='unlit';
FaceLighting_val='gouraud';


h.AmbientStrength = AmbientStrength_val;
h.SpecularStrength = SpecularStrength_val;
h.DiffuseStrength = DiffuseStrength_val;
h.BackFaceLighting = BackFaceLighting_val;
h.FaceLighting = FaceLighting_val;

view_val=2;
%view(2);
view(view_val);

light_pos=[-2, -2, 50]
light_style='local'
light_color=[1 1 1]
%l = light('Position',[-2, -2, 50],'Style','local','Color',[1 1 1]);
l = light('Position',light_pos,'Style',light_style,'Color',light_color);

save('data_peaks.mat','X','Y','Z','AmbientStrength_val','SpecularStrength_val', ...
                     'DiffuseStrength_val','BackFaceLighting_val', ...
                     'FaceLighting_val','light_pos','light_style', ...
                     'light_color','view_val')