【问题标题】:Why are the colors changing with MATLAB contourf in a loop?为什么颜色会随着 MATLAB contourf 在循环中发生变化?
【发布时间】:2019-03-21 02:00:13
【问题描述】:

我有一个 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】:

    你必须保持你的颜色范围不变:

    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 中与颜色图关联的值)可以帮助您理解上面讨论的“颜色变化”问题。

    【讨论】:

      猜你喜欢
      • 2018-09-25
      • 2021-02-13
      • 2019-12-20
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      相关资源
      最近更新 更多