rgb = imread('peppers.png');
imshow(rgb(:,:,1));
これを配置すると、画像は灰色で、緑でも青でも赤でもありません。何故ですか?
私は何か間違ったことをしていますか?
rgb = imread('peppers.png');
imshow(rgb(:,:,1));
これを配置すると、画像は灰色で、緑でも青でも赤でもありません。何故ですか?
私は何か間違ったことをしていますか?
イメージがグレーになっているのは、1 つの色のみの値を見ているためです。MATLAB は色の値を認識していますが、それがどの色であるかを知る方法がないため、グレーが表示されます。
例として、値 154 は何色ですか? 値のマトリックスだけを渡すimshow
と、グレースケールで表示されます。
imshow(rgb(:,:,1)); %Shows the values of the red component of the image in grey
rgb = imread('peppers.png');
r = rgb;
r(:,:,2:3) = 0; % The red component without the other components
g = rgb;
g(:,:,1:2:3) = 0; % The green component without the other components
b = rgb;
b(:,:,1:2) = 0; % The blue component without the other components
figure();
imshow(r);
figure();
imshow(g);
figure();
imshow(b);
上記を実行すると、色の大きさの表現を独自の色値で見ることができます。
1 つのカラー チャネルのみを表示する場合は、他のカラー チャネルをゼロに設定します。
peppers = imread('peppers.png');
onlyred_peppers = peppers;
onlyred_peppers(:,:,2:3)=0;
imshow(onlyred_peppers);
imshow
のみをフィードする場合は、imshow によってグレースケールとして解釈されるマトリックスのみを指定します。こちらを参照peppers(:,:,1)
してください。NxMx1
本当に必要な場合は、カラーマップを変更してグレースケール イメージをレッドスケールに変更できます。
imshow(peppers(:,:,1));
cm_red = [linspace(0,1,256)' zeros(256,2)];
colormap(cm_red);
上記と同じ画像が得られます。
読み込んだ画像のカラー スパンをスケーリングして、使用可能なスパン全体 (0-1 / 0-255) を使用する場合は、次のようにします。
red_scaled_peppers = peppers(:,:,1);
red_scaled_peppers = double(red_scaled_peppers)/double(max(red_scaled_peppers(:)));
imshow(red_scaled_peppers);
colormap([linspace(0,1,256)' zeros(256,2)]);
この場合、赤チャネルのカラー スパンが既に最大になっているため、違いはありません。
RGBカラー モデルは、赤、緑、青の色をある比率で「混合」することによって色を表します。知っておく必要があるのは、色が 3 つの数字で表されることだけです。
したがって、画像は赤いレイヤーを表すrgb
3 つのマトリックスで表されます。rgb(:,:,1)
さて、見てみるrgb(:,:,1)
と、たくさんの数字が表示されます (おそらく 0 ~ 255 または 0 ~ 1 の間)。
したがって、要素rgb(i,j,1)
はピクセルの赤の成分を表し(i,j)
ます。したがって、マトリックスrgb(:,:,1)
を表示すると、グレースケール (0 = 黒、255 = 白) として表示される一連の値を持つマトリックスが表示されるだけです。