Почему цвета меняются с контуром MATLAB в цикле? - PullRequest
0 голосов
/ 16 октября 2018

У меня есть программа 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') программа изобретает новый масштаб.

1 Ответ

0 голосов
/ 16 октября 2018

Вы должны поддерживать постоянную цветовую гамму:

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 loop
  • , показывающий colorbar (который также показывает значения в f, связанные с картой цветов), может помочь вам понять проблему «изменения цвета», обсужденную выше.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...