代码之家  ›  专栏  ›  技术社区  ›  Shahzad Muhammad Sarwar

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

  •  0
  • Shahzad Muhammad Sarwar  · 技术社区  · 8 年前

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

    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切片从零开始向上移动的3d轴的电影。

    我试过这样的方法:

    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
    

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   halfer Jatin Pandey    4 年前

    要在循环中创建一组切片,必须通过替换调用中的最后一个参数来修改代码 contourslice 具体而言 i-th 数组的元素 Z .

    由于您没有发布输入数据,我已经在来自的示例数据上测试了拟议的解决方案 MatLab contourslice help 略微修改,其中

    Yoy必须调整 Sx , Sy Sz

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

    • videowriter 创建视频对象
    • open 打开视频文件
    • getframe 将轴或图形捕捉为电影帧
    • close 关闭并保存视频文件

    animated gif 通过使用函数 imwrite

    % 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