matlab でカラーマップを作成したいと思います。ピクセルのグレーレベルに応じて色を薄くしたい。
例えば:
from 255 to 160 -> white
from 159 to 120 -> pink
from 119 to 50 -> brown
from 49 to 0 -> dark
matlab でカラーマップを作成したいと思います。ピクセルのグレーレベルに応じて色を薄くしたい。
例えば:
from 255 to 160 -> white
from 159 to 120 -> pink
from 119 to 50 -> brown
from 49 to 0 -> dark
ドキュメントから:
カラーマップは、0.0 ~ 1.0 の間の実数の m 行 3 列の行列です。各行は、1 つの色を定義する RGB ベクトルです。カラーマップの k 番目の行は、k 番目の色を定義します。ここで、map(k,:) = [r(k) g(k) b(k)]) は、赤、緑、および青の強度を指定します。
では、まず m 行 3 列の行列を作成します。この場合、m は 161 です。
m = 161;
map = zeros(m , 3);
ここで、底を暗くし (私は黒にします)、50 番目のポイントを茶色にしたいと考えています。しかし、簡単なので、例として赤を使用しましょう。それぞれ黒と赤の RGB トリプル:[0,0,0]
および[1,0,0]
わかりましたので、現在、enitre カラーマップは黒です。赤、つまり赤が必要なのはわかってmap(50,:) = [1, 0 ,0]
いますが、その間にグラデーションが必要ですよね?したがって、これにlinspaceを使用できます(この回答の最後ではinterp1
なく、使用するより良い方法があることに注意してくださいlinspace
):
R0to50 = linspace(0,1,50)';
これを地図に入れる:
map(1:50, 1) = R0to50;
それでは、赤の代わりに茶色を使用して、そのリンクからトリプルを取得し、各色コンポーネントを 255 で割ると、トリプルはt = [101, 67, 33]./255
. OK では、色ごとに linspace 手順を繰り返します。
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;
そして、他のノードごとに繰り返します。
例えば:
I = linspace(0,1,161);
imagesc(I(:, ones(10)))
colormap(map)
linspace
チャンネルごとに個別に 1 回使用し、これを色ごとに繰り返す代わりに、線形補間を使用することもできます。
各行がカラー トリプルであるマトリックスを作成する
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
次に、各色の範囲のベクトルを作成します (つまり、このベクトルは色の間隔を定義します。規則的/等間隔である必要はありません)。
x = [0
50
120
160
255];
最後に、1 つの単純な補間でマップ全体を作成できます。
map = interp1(x/255,T,linspace(0,1,255));
テスト
I = linspace(0,1,255);
imagesc(I(ones(1,10),:)')
colormap(map)