您將我們鏈接到的確切答案。 immovie
預計m x n x 1 x k
矩陣,其中m
和n
是來自3D矩陣的1個切片的行和列,並且k
是切片的數量。您目前的3D矩陣設置爲m x n x k
。因此,通過排列,您可以從3D原始矩陣中人爲創建一個4D矩陣。簡而言之,您可以將您的3D矩陣視爲具有單一四維維度:m x n x k x 1
。 permute
這裏的工作是swap第三和第四維 - 這就是爲什麼你在permute
調用中看到[1 2 4 3]
向量。第一個和第二個維度表示行和列,而您將這些空置空。
現在,回答permute
問題。 map
被定義爲色圖。這將3D矩陣中的每個值映射到獨特的顏色。基本上,顏色圖是一個M x 3
矩陣,矩陣中的行對應於唯一的顏色。每列表示一個顏色通道。因此,第一列表示您想要的紅色比例,第二個通道是綠色的比例,最後一個是藍色的比例。請記住,這些顏色應在[0,1]
之間標準化。
顏色貼圖的目標是獲取3D矩陣中的每個值,並確定該值映射到哪種顏色。做到這一點的方法是完全按照原樣使用3D矩陣中的每個值,並使用它來訪問顏色映射的行。這一行給你你想要的顏色。現在,我假設您的3D矩陣中的值範圍從0到100.
如果您希望顏色跨越藍色和紅色。假設標準化座標,藍色的顏色爲RGB = (0,0,1)
,同樣,紅色代表RGB = (1,0,0)
的確切顏色。因此,RGB = (0,0,1)
開始,然後開始線性增加紅色成分而線性遞減藍色分量直到紅色是1和藍色是0
我們所能做的是弄清楚有多少獨特值有在你的矩陣中,那麼我們可以用這種方式創建我們的色彩映射,這樣我們可以確保矩陣中的每個值都被賦予一種顏色。但是,這將需要重新定義a.movie
以確保我們可以爲顏色指定值。
因此,我想創建彩色地圖是這樣的:
[unq,~,id] = unique(a.movie);
movie_IDs = reshape(id, size(a.movie));
M = numel(unq);
map = [linspace(1,0,M).', zeros(M,1), linspace(0,1,M).'];
現在,繼續使用map
與上面的代碼來創建你的電影。
X = permute(movie_IDs,[1 2 4 3]); % 4D matrix
movie = immovie(X,map); % map is the colormap you want to use
implay(movie);
但是,你看色圖是jet
彩色地圖。因此,你可以簡單地只創建一個jet
彩色地圖:
map = jet(M);
但是,你必須確保你通過a.movie
每個值運行,並分配一個唯一的整數每個值,以確保有您的數據沒有間隙並且每個值都會被分配到一個從1到M
的新值,以便電影正確訪問正確的顏色。
MATLAB有一堆內置的彩色地圖供你使用,如果你不想設計自己的彩色地圖。 http://www.mathworks.com/help/matlab/ref/colormap.html#inputarg_map - 但是,從我在帖子中看到的內容,製作彩色地圖就是您想要做的事情。
你不能使用內置的[colormap](http://www.mathworks.com/help/matlab/ref/colormap.html#inputarg_map)嗎? – beaker
@beaker yup ...其實這個人可以使用'jet' :( – rayryeng
Noooo ...除jet之外的任何東西!我可以讓你感興趣的是一個不錯的'parula'嗎?或者'cool'?:) – beaker