私はジェットカラーマップを持っています:
グレースケールに変換する方法があるかどうか知りたいです。最大値と最小値が同じ灰色になるため、平均を使用できません。または、別のカラー パレットに変換する方法がある場合。
Googleで変換する関数が見つかりません。MATLABはと呼ばれるものを使っていますrgb2ind
が、式が知りたいです。
まず、Jet カラーマップを使用してインデックス付きイメージを作成します。
img = repmat(uint8(0:255), 100, 1);
cmap = jet(256);
imshow(img, 'Colormap',cmap)
IND2GRAY を使用した単純な変換では、次の結果が生成されます。
J = ind2gray(img,cmap);
imshow(J)
あなたが表現したように、最小/最大は同じ値に収束します。私が理解したことから、ジェットカラーマップをマッピングして、灰色の暗い色合いから明るい色合いに直線的に移動しようとしています。このために、RGB2HSV 関数で取得した色相値を使用して並べ替えることができます。以下を元のカラーマップと比較します。
[~,idx] = sortrows(rgb2hsv(cmap), -1); %# sort by Hue
C = gray(256);
C = C(idx,:);
imshow(img, 'Colormap',C)
MATLAB で画像を作成する
image(1:64);axis off;colormap(jet);
画像を tiff として保存し、ペイントブラシで境界線を切り取り、'\directorypath\jetmage.tiff' として保存します。
画像を MATLAB に読み込む
jetmage=imread('\\directorypath\jetmage.tiff');
画像サイズを取得する
[szX,szY,szZ]=size(jetmage);
赤、緑、青の各色の画像の行を取得します。
r=reshape(jetmage(uint8(szX/2),:,1),[szY,1]);
g=reshape(jetmage(uint8(szX/2),:,2),[szY,1]);
b=reshape(jetmage(uint8(szX/2),:,3),[szY,1]);
その行の各色の強度プロファイルをプロットします。
plot(r,'r-');hold on;
plot(g,'g-');hold on;
plot(b,'b-');hold on;
プロットは次のようになります。
配列をルックアップテーブルとして使用する[r,g,b]
か、配列から「式」を取得する方法を見つけ出すことに基づいて使用できます[r,g,b]
rgb2ind
各ピクセルの RGB 値をカラー マップ内のインデックスに変換します。カラー マップ入力で 2 入力バージョンを使用すると、各ピクセルに一致するカラー マップ内の最も近い色が検索されます。これにより、基本的に、RGB 値ではなく、各ピクセルに対して 1 つの数値が得られます。
たとえば、画像をロードすると
RGB = imread(imagefilename);
次に、Jet カラー マップが によって返されるjet
ため、次を使用してインデックス付きデータを取得できます。
mapsize = 256;
map = jet(mapsize);
ind = rgb2ind(RGB, map);
その後、任意のカラー マップを使用してイメージを表示できます。
colormap(map)
image(ind)
colormap('gray')
imagesc は使用しないでください。画像のダイナミック レンジが許容範囲を超えて拡大する可能性があります。