2012-04-25 2 views
2

Я пытаюсь реализовать цветную панель в Matlab, которая выглядит линейной при печати серым цветом. Самый прямой подход, я бы хотел реализовать цветовое пространство gnuplot pm3d 30,31,32 RGB. На this website Я нашел хорошее введение, которое работает нормально для некоторых более простых схем gnuplot. Однако при попытке реализовать схему 30,31,32 я столкнулся с проблемой.Matlab colormap воспроизводящий gnuplot pm3d 30,31,32 RGB цветовое пространство

инструкции GNUPLOT являются

30: x/0.32-0.78125 31: 2*x-0.84  32: 4x;1;-2x+1.84;x/0.08-11.5 

И я интерпретировал это такое, что для синего канала я должен применить четыре уравнения. Один за каждую четверть значений интенсивности. Это то, что я пробовал до сих пор

x  = linspace(0,1,128); 
r        = x/0.32-0.78125; 
g        = 2*x-0.84; 
b(1:length(x)/4)    = 4*x(1:length(x)/4); 
b(length(x)/4:length(x)/2)  = 1; 
b(length(x)/2:length(x)*.75) = -2*x(length(x)/2:length(x)*.75)+1.84; 
b(length(x)*.75:end)   = x(length(x)*.75:end)/0.08-11.5; 
pm3d303132=[r;g;b]'; 

, но, к сожалению, он не работает. Я заканчиваю отрицательными значениями и значениями, превышающими 1, которые Matlab не может интерпретировать.

Я прочитал в show palette rgbformulae помощи,

* negative numbers mean inverted=negative colour component 

Но я не знаю, как реализовать это в Matlab; и я также не понимаю, как справляться со значениями, превышающими 1. Может ли кто-нибудь помочь?

ответ

0

Игнорирование значений, не соответствующих значениям, похоже, сработало. (Http://juluribk.com/2011/05/18/843/)

pm3d303132 (pm3d303132 < 0) = 0;

pm3d303132 (pm3d303132> 1) = 1;

+0

Отлично, это действительно работает - я должен был подумать об этом сам. Спасибо. –

Смежные вопросы