Z docs:
colormap jest macierzą m po 3 liczb rzeczywistych pomiędzy 0,0 i 1,0. Każdy wiersz jest wektorem RGB, który definiuje jeden kolor. Kg wiersza barwy mapy definiuje k-kolor, gdzie mapa (k, :) = [r (k) g (k) b (k)]) określa intensywność czerwieni, zieleni i błękitu.
OK więc zacząć mamy zamiar utworzyć macierz m-by-3, w przypadku gdy m wynosi 161:
m = 161;
map = zeros(m , 3);
Teraz chcesz dolna być ciemne (jadę z czarnym) i pięćdziesiąty punkt za brązowy. ale puszczaj z czerwonym jako przykładem, bo łatwiej. Trójki RGB odpowiednio dla czerni i czerwieni: [0,0,0]
i [1,0,0]
OK, więc obecnie nasz kolormap jest czarny. Wiemy, że chcemy map(50,:) = [1, 0 ,0]
, tzn. Czerwony, ale teraz chcemy uzyskać gradient pomiędzy prawymi? Więc pozwala wykorzystanie linspace za to (zauważ, że istnieje lepsza metoda z użyciem interp1
zamiast linspace
na końcu tej odpowiedzi):
R0to50 = linspace(0,1,50)';
oddanie to na mapie:
map(1:50, 1) = R0to50;
pozwala więc teraz użyj brown zamiast czerwonego, aby uzyskać potrójny z tego linku, podzielić każdy składnik koloru przez 255, więc nasz potrójny jest t = [101, 67, 33]./255
. OK, więc teraz tylko powtórzyć tę procedurę linspace dla każdego koloru:
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;
A teraz powtórzyć dla każdej z pozostałych węzłów.
Na przykład
I = linspace(0,1,161);
imagesc(I(:, ones(10)))
colormap(map)
alternatywa do stosowania raz na kanał linspace
indywidualnie i powtórzenie tego dla każdego koloru jest użycie interpolacji liniowej.
Tworzenie się matrycy, gdzie każdy rząd jest kolor potrójne
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
A teraz, aby wektor, z czym każdy kolor powinien wynosić (tjWektor ten określa odstępy między kolorami, oni nie muszą być regularnie/równo rozmieszczone):
x = [0
50
120
160
255];
I wreszcie można utworzyć całą mapę z jednego prostego interpolacji:
map = interp1(x/255,T,linspace(0,1,255));
testowania
I = linspace(0,1,255);
imagesc(I(ones(1,10),:)')
colormap(map)
Spróbuj colormapeditor: http://www.mathworks.com/help/matlab/ref/colormapeditor.html – Dan
Chciałbym aby zrób to samo z colormapeditor, ale chcę napisać funkcję matlab. W tym przypadku mogę ręcznie zmienić progi dla kolorów zgodnie z używanym obrazem. Przepraszam za mój angielski! – ispanico