如何将数据转换为图片(MATLAB)

时间:2013-01-11 22:06:18

标签: image matlab vectorization

我只是一名新手程序员,我想帮助解决这个问题。

我目前正在运行在二维点阵上相互作用和移动的粒子模拟。粒子在任何点的位置数据存储在我在模拟过程中使用的二维数组中。模拟后,我希望能够直观地看到所有粒子的最终位置。目前,我将数据发送到MATLAB,并将其逐字地绘制在图形上。这可以工作,并创建我的系统配置的“图片”。然而,对于大格子中的大量粒子(尺寸像600个粒子宽,1200个粒子高),这使得图像处理速度过慢,MATLAB和文字处理处理速度非常慢,并且占用了很多记忆和空间。

必须有更好的方法来做到这一点,是否有人对更好地查看我的系统或控制数据有任何想法?

我的matlab代码如下:

%--------------------------------------- Particle Picture
clc; clear all;
particle_file = fopen('ABC_Particles_600X1200T1.txt');
particles = fscanf(particle_file,'%f');
fclose(particle_file);

figure(3);
hold on;
sizex = 600;
sizey = 1200;

for a = 1:1:sizey*sizex
    b = int32(a);
    if particles(a) == 0
        plot(mod(b,sizex)+1,idivide(b,sizex)+1,'c')
    end
    if particles(a) == 1
        plot(mod(b,sizex)+1,idivide(b,sizex)+1,'r')
    end
    if particles(a) == 2
        plot(mod(b,sizex)+1,idivide(b,sizex)+1,'k')
    end
end    
title('Size 600X1200; Time T = 1')
axis([0 sizex 0 sizey])

1 个答案:

答案 0 :(得分:0)

您可以使用逻辑条件而不是循环来矢量化代码。例如,z=(particles==0)01的向量,您可以在其中获得值1,其中粒子元素= 0。这取代了代码:

for a=1:n
     if particles(a) == 0
        z(a)=1
    else
        z(a)=0
    end
end

所以,首先我们将particles从长向量重构为矩阵:

p=reshape(particles,600,1200);

然后我们可以像以前一样使用逻辑条件,或类似地使用函数find来根据你写的内容获得p的x和y坐标

[x0 y0]=find(p==0);
[x1 y1]=find(p==1);
[x2 y2]=find(p==2);

然后我们可以绘制它:

plot(x0,y0,'c',x1,y1,'r',x2,y2,'k')

顺便说一句,如果0,1,2是您的数据所具有的唯一值,则可以跳过所有这些并使用:

imagesc(p)

这将以不同方式对您的积分进行颜色编码,但您可以将colormap更改为您想要的任何内容