Vom docs:
A colormap ist eine m-mal-3-Matrix von reellen Zahlen zwischen 0,0 und 1,0. Jede Zeile ist ein RGB-Vektor, der eine Farbe definiert. Die k-te Zeile der Colormap definiert die k-te Farbe, wobei map (k, :) = [r (k) g (k) b (k)]) die Intensität von Rot, Grün und Blau angibt.
OK so beginnen wir eine m-mal-3-Matrix, in Ihrem Fall m schaffen werden, ist 161:
m = 161;
map = zeros(m , 3);
Jetzt wollen Sie die Unterseite dunkel zu sein (Ich werde mit Schwarz) und der 50. Punkt ist braun. aber lass uns mit rot als Beispiel gehen, da es einfacher ist. RGB-Tripel für Schwarz bzw. Rot: [0,0,0]
und [1,0,0]
OK also momentan ist unsere entire colormap schwarz. Wir wissen, wir wollen map(50,:) = [1, 0 ,0]
, d. H. Rot, aber jetzt wollen wir einen Gradienten zwischen rechts? So verwenden linspace hierfür können (beachten Sie, dass es eine bessere Methode ist interp1
anstelle von linspace
am Ende dieser Antwort):
R0to50 = linspace(0,1,50)';
dies in der Karte setzen:
map(1:50, 1) = R0to50;
So, jetzt können Verwenden Sie brown anstelle von rot, um das Tripel von diesem Link zu erhalten, teilen Sie jede Farbkomponente durch 255, so ist unser Triple t = [101, 67, 33]./255
. OK so jetzt nur wiederholen, dass linspace Prozedur für jede Farbe:
R = linspace(0,t(1),50);
G = linspace(0,t(2),50);
B = linspace(0,t(3),50);
T = [R', G', B'];
map(1:50, :) = T;
Und nun für jede Ihrer anderen Knoten wiederholen.
Zum Beispiel:
I = linspace(0,1,161);
imagesc(I(:, ones(10)))
colormap(map)
Eine Alternative zur Verwendung linspace
einmal pro Kanal einzeln und dies für jede Farbe zu wiederholen ist, eine lineare Interpolation zu verwenden.
eine Matrix erstellen, wobei jede Zeile eine Farb
T = [0, 0, 0 %// dark
101, 67, 33 %// brown
255, 105, 180 %// pink
255, 255, 255 %// white
255, 255, 255]./255; %// white again -> note that this means values between 161 and 255 will be indistinguishable
Und jetzt triple
einen Vektor aus, was Range jede Farbe auf sein sollte machen (d.h.dieser Vektor definiert den Abstand der Farben, die sie benötigen, nicht regelmäßig/gleichem Abstand zu sein):
x = [0
50
120
160
255];
Und schließlich können Sie die gesamte Karte mit einer einfachen Interpolation erstellen:
map = interp1(x/255,T,linspace(0,1,255));
Prüfung
I = linspace(0,1,255);
imagesc(I(ones(1,10),:)')
colormap(map)
Versuchen Sie, die colormapeditor: http://www.mathworks.com/help/matlab/ref/colormapeditor.html – Dan
I d‘wie zu mache dasselbe mit colormapeditor, aber ich möchte eine Matlab-Funktion schreiben. In diesem Fall bin ich in der Lage, die Schwellenwerte für die Farben entsprechend Bild, das ich verwende, manuell zu ändern. Entschuldigung für mein Englisch! – ispanico