22

matlab でカラーマップを作成したいと思います。ピクセルのグレーレベルに応じて色を薄くしたい。

例えば:

from 255 to 160 -> white 
from 159 to 120 -> pink
from 119 to 50 -> brown
from 49 to 0 -> dark
4

2 に答える 2

27

ドキュメントから:

カラーマップは、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)

ここに画像の説明を入力

于 2013-06-21T09:54:16.997 に答える