2011-07-08 51 views
1

怎樣才能將某種顏色分配給矩陣中的某個值。 例如,我有一個10by10矩陣,其值爲0到9. 然後,我想要一個「棋盤」,其中0 =白色,1 =黑色,2 =藍色等...以所需顏色繪製矩陣

第二個問題 如果我運行一些操作,其中我的矩陣隨着每個循環而改變,並且我運行了讓我們說10個lops(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)


對於老版本的MATLAB比R2010b中,你可以使用avifile功能,而不是VideoWriter:

%# 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

謝謝,我只是不明白你爲什麼這樣做:M =(M-分鐘(M(:)) )./範圍(M(:));當範圍(M(:))是1並且M-min(M(:))除以1時是相同的數字? – kojikurac

+0

當我寫作時,怎麼會這樣:vid = VideoWriter('vid.avi'); matlab返回:??? 'char'類型的輸入參數未定義函數或方法'VideoWriter'? – kojikurac

+2

@kojikurac:前三行只是爲了創建一個樣例矩陣,就像您所描述的那樣(包含從0到9的自然數)。這應該用您擁有的實際數據替換。另一方面,VideoWriter是在MATLAB R2010b中引入的。如果你有一箇舊版本,你可以使用舊的'avifile'功能。我更新答案以顯示如何使用此功能。 – Amro