您链接到我们的帖子正好回答了这个问题。 immovie 需要一个 m x n x 1 x k 矩阵,其中 m 和 n 是 3D 矩阵中 1 个切片的行和列,k 是切片数。您当前将 3D 矩阵设置为 m x n x k。因此,通过置换,您是从 3D 原始矩阵人为地创建 4D 矩阵。简单地说,您可以将您的 3D 矩阵视为具有单例 4D 维度:m x n x k x 1。 permute 的工作是交换第 3 维和第 4 维 - 这就是您在 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 - 但是,根据我在您的帖子中看到的,制作彩色地图是您想要做的。