2011-07-08 21 views
1

行列の値に特定の色を割り当てる方法を教えてください。 たとえば、0〜9の値を持つ10by10の行列があります。 その後、0 =白、1 =黒、2 =青...などの「チェスボード」を取得したいと考えています。希望する色のプロット行列

2番目の質問 私の行列が各ループで変わるいくつかの演算を実行し、10ループ(k = 10)としましょう - 各ループの後にこの10個のプロット画像からビデオを作ることは可能ですか? 。 (私はいくつかの種類のセルオートマトンをプログラミングしているので、時間の経過とともに状況がどのように変化するかを見たい)。

答えて

1

この例検討ありがとう:

%# lets create a 10-by-10 matrix, of values in the range [0,9] 
M = fspecial('gaussian',10,2.5); 
M = (M-min(M(:))) ./ range(M(:)); 
M = round(M*9); 

%# prepare video output 
vid = VideoWriter('vid.avi'); 
vidObj.Quality = 100; 
vid.FrameRate = 5; 
open(vid); 

%# display matrix 
h = imagesc(M); 
axis square 
caxis([0 10]) 
colormap(jet(10)) 
colorbar 

%# capture frame 
writeVideo(vid,getframe); 

%# iterate changing matrix 
for i=1:50 
    M = rem(M+1,10);   %# circular increment 
    set(h, 'CData',M)   %# update displayed matrix 

    writeVideo(vid,getframe); %# capture frame 

    drawnow     %# force redisplay 
end 

%# close and save video output 
close(vid); 

enter image description here

あなたは、単にサイズ10×3のマトリックスcmapを作成し、カスタムカラーマップを使用することができるが、各列は、RGBを含ん値を入力して電話に渡すcolormap(cmap)


R2010bよりも古いMATLABバージョンの場合

、あなたの代わりにVideoWriterの、avifile機能を使用することができます:M =(M-分(M(:)):あなたはこれをしなかった理由を

%# prepare video output 
vid = avifile('vid.avi', 'fps',5, 'quality',100); 

%# iterations 
for i=1:50 
    %# ... 

    %# capture frame 
    vid = addframe(vid, getframe(gcf)); 

    drawnow 
end 

%# close and save video output 
vid = close(vid); 
+0

おかげで、私は理解していません)./ range(M(:));範囲(M(:))が1で、M-min(M(:))を1で割った値が同じ場合は? – kojikurac

+0

どうすればそれを書く:vid = VideoWriter( 'vid.avi'); matlabが返す:???未定義の関数またはメソッド 'VideoWriter'は、 'char'型の入力引数ですか? – kojikurac

+2

@kojikurac:最初の3行は、記述したようなサンプル行列(0から9の自然数を含む)を作成するためのものでした。これはあなたが持っている実際のデータに置き換えてください。他の部分については、VideoWriterがMATLAB R2010bで導入されました。古いバージョンの場合は、古い 'avifile'関数を使うことができます。この関数の使い方を示す答えを更新します。 – Amro