创建一个循环以保存轮廓切片中的图像

时间:2017-07-29 15:59:11

标签: matlab matlab-figure

我有以下代码在流体体积的任何位置绘制切片。

clc, clear all, close all
format long
%a ddpath('\\ds.leeds.ac.uk\staff\staff6\censsar\Polydisperse'); % <------Change

%% Import data
input = importdata('lci_000210.dat',' ',3);
nx = 96;
ny = 96;
nz = 49;

x = input.data(:,1);
y = input.data(:,2);
z = input.data(:,3);
Lci = input.data(:,4);

L3d = reshape(Lci,[nx,ny,nz]); 
x3d = reshape(x,[nx,ny,nz]); 
y3d = reshape(y,[nx,ny,nz]); 
z3d = reshape(z,[nx,ny,nz]); 

contourslice(y3d,x3d,z3d,L3d,[],[],[0.3]);
ax=gca;
ax.Children(1).LineStyle='none';
ax.Children(2).LineStyle='none';
ax.Children(3).LineStyle='none';
view(25,20);
colormap jet
colorbar

我想要做的是在循环中使用轮廓切片,以便在每个z位置创建并保存切片。我希望创建一个z切片的电影,它从零开始向上移动。

我尝试过类似的事情:

Z=[0 0.1 0.5];
for S = 1:length(Z)
    h = figure
    contourslice(y3d,x3d,z3d,L3d,[],[],[Z],10); 
    saveas(h,sprintf('Fig%d.png',S));
end

但这不起作用,我不知道如何在循环中定义z轴,因此它在每个点创建一个切片。

这是link to my data,它是一个.dat文件,因此它包含4列数据。

1 个答案:

答案 0 :(得分:1)

要在循环中创建一组切片,您必须通过指定数组的contourslice元素i-th来替换调用Z中的最后一个参数来修改代码。 }。

由于您没有发布您的输入数据,我已经对MatLab contourslice help稍微修改过的示例数据测试了建议的解决方案

  

在yz平面中创建九个等值线图,在xz平面中没有绘图,在xy平面中创建一个绘图,通过将Sx指定为九个元素的向量,Sy作为空向量,Sz作为标量(来自MatLab帮助)。

Yoy必须根据您的需要调整SxSySz参数的定义。

要创建电影,您可以使用以下功能:

  • videowriter创建视频对象
  • open打开视频文件
  • getframe捕捉轴或计算为电影画面
  • close关闭并保存视频文件

作为电影的替代方案,您可以使用imwrite

功能创建animated gif
% Load input data
[X,Y,Z,V] = flow;
% Define the parameters for the set of slices
Sx = 1:9;
Sy = [];
Sz = [];
cvals = linspace(-8,2,10);
% Open the FIGURE window
figure
% Create the axes and set tehiur properties
axis([0,10,-3,3,-3,3])
hold on
daspect([1,1,1])
campos([0,-20,7])
box on
% Create the movie object
mov=VideoWriter('contour_slice_movie.avi');
% Open the movie file
open(mov);
% Define the number of frames to be captured for each slice
n_frame_x_image=33;
% Loop over the desired number of slices
for i=1:length(Sx)
   contourslice(X,Y,Z,V,Sx(i),Sy,Sz,cvals)
   % Capture the frames
   for j=1:n_frame_x_image
      FF=getframe(gcf);
      writeVideo(mov,FF);
   end
end
% Close the movie file
close(mov);

enter image description here

希望这有帮助,

Qapla