为什么颜色会随着MATLAB contourf在循环中变化?

问题描述 投票:1回答:1

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

这部分是代码(它很长,所以我认为最好只编写相关部分,告诉我是否应该复制所有内容和函数):

...
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')时,该程序发明了一个新的规模。

matlab loops video colors
1个回答
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(它还显示与colormap相关的f中的值)可以帮助您理解上面讨论的“变色”问题。
© www.soinside.com 2019 - 2024. All rights reserved.