8

私はジェットカラーマップを持っています:

ジェットカラーマップ

グレースケールに変換する方法があるかどうか知りたいです。最大値と最小値が同じ灰色になるため、平均を使用できません。または、別のカラー パレットに変換する方法がある場合。

Googleで変換する関数が見つかりません。MATLABはと呼ばれるものを使っていますrgb2indが、式が知りたいです。

4

4 に答える 4

9

まず、Jet カラーマップを使用してインデックス付きイメージを作成します。

img = repmat(uint8(0:255), 100, 1);
cmap = jet(256);

imshow(img, 'Colormap',cmap)

ジェット

IND2GRAY を使用した単純な変換では、次の結果が生成されます。

J = ind2gray(img,cmap);
imshow(J)

jet_to_gray

あなたが表現したように、最小/最大は同じ値に収束します。私が理解したことから、ジェットカラーマップをマッピングして、灰色の暗い色合いから明るい色合いに直線的に移動しようとしています。このために、RGB2HSV 関数で取得した色相値を使用して並べ替えることができます。以下を元のカラーマップと比較します。

[~,idx] = sortrows(rgb2hsv(cmap), -1);  %# sort by Hue
C = gray(256);
C = C(idx,:);

imshow(img, 'Colormap',C)

色相_並べ替え

于 2011-09-21T00:15:34.753 に答える
4

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]

于 2011-09-16T14:50:42.680 に答える
1

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 は使用しないでください。画像のダイナミック レンジが許容範囲を超えて拡大する可能性があります。

于 2011-09-20T11:04:43.513 に答える