画像を読み込み・表示する
画像の読み込みにはimread、画像の表示にはimtoolもしくはimshowを使います。両者の違いはそれぞれのToolでできる処理が異なってくることでしょうか。
imshowは異なるタイプの画像を表示させたい時に使います(グレースケール・トゥルーカラー等)。
imtoolはimshowで使える機能に加えて、ピクセル数や画像の情報を表示するなどの機能も仕様可能です。
リファレンス参照を推奨します。
pwd・lsコマンド等が使えるので、imreadに画像の置いてある場所を確認してパスを指定します。
e.g.
>> img = imread('bear.png'); %% load image file :)
>> imtool(img);
RGB画像の構成
RGB画像は三枚の二次元画像から成ります。文字通りR、G、Bが重なって一枚のRGB画像として表示されます。
sizeで確認してみました。
640x480(row x col)の二次元行列がz方向に3つあります。
>> size(img)
ans =
640 480 3
各帯を取り出してみると以下のようになります。
左からRGB、R、G、Bです。それぞれでグレーの色合いが違うことがわかります。
>> redBand = img(:,:,1);
>> greenBand = img(:,:,2);
>> blueBand = img(:,:,3);
>> imtool(redBand), imtool(greenBand), imtool(blueBand);
グレースケール
じゃあグレースケール化するには単にRGBを平均すればいいの?というとそういうわけではないそうです。
rgb2grayという関数が用意されています。
下の画像はそれぞれ、左が単に平均したもの、右がrgb2grayを使ったものです。
ちなみにuint8は8bit符号なし整数に変換・doubleはそのまま倍精度です。
整数クラスのままでは数値演算に不向きのためdoubleにキャストし直します。
>> avg = uint8((double(redBand)+double(greenBand)+double(blueBand))/3);
>> gray = rgb2gray(img);
>> imtool(avg), imtool(gray);
白 | 黒 | |
---|---|---|
uint8 | 255 | 0 |
double | 1 | 0 |
more realistic approximation of grayscale is given by the formula
gray = 0.3R + 0.59G + 0.11B
つまりrgb2grayは、よりリアルなグレースケールを上記の公式から導いて作ってくれます。
画像書き出し
加工した・作った画像を保存するにはimwriteを使います。
第一引数に画像の変数、第二引数に保存したい名前をあてます。
>> imwrite(gray, 'gray_bear.png');