为什么使用MATLAB outlinef循环改变颜色?

时间:2018-10-16 13:51:45

标签: matlab loops video colors

我有一个matlab程序,应该用来描述某种扩散现象。我制作了一个带循环的视频,但在我看来,每次缩放时颜色的比例都在变化:

部分是代码(很长,所以我认为最好只写relevent部分,告诉我是否应该复制所有内容并使用函数):

...
w = VideoWriter('video_lin.avi');
MovDC(maxt) = struct('cdata',[],'colormap',[]);
...

for k=1:maxt
...
 contourf(f);
 colormap('hot')
 MovDC(:,k) = getframe;

end

 open(w)
 writeVideo(w,MovDC)
 close(w)

当我编写colormap('hot')时,程序似乎发明了一个新的比例尺。

1 个答案:

答案 0 :(得分:2)

您必须保持颜色范围恒定:

contourf(f);
caxis([0 1]); % replace the range [0 1] with one that fits your data in f

颜色在变化,因为contourf自动缩放颜色图以增强色彩对比度(就像imagesc行为与image一样)。换句话说,默认情况下,整个颜色图将应用于范围[min(f) max(f)],该范围可能会因示例中的每一帧而改变。为了避免这种行为,只需使用caxis来固定范围。

另外两个提示:

  • colormap('hot')行可以在for循环开始之前安全地移动
  • 显示colorbar(还向您显示f中与颜色图关联的值)可以帮助您理解上面讨论的“变色”问题。