LoginSignup
3
6

More than 5 years have passed since last update.

MATLABで画像取り込み・グレースケール・保存

Last updated at Posted at 2015-12-24

画像を読み込み・表示する

画像の読み込みにはimread、画像の表示にはimtoolもしくはimshowを使います。両者の違いはそれぞれのToolでできる処理が異なってくることでしょうか。
imshowは異なるタイプの画像を表示させたい時に使います(グレースケール・トゥルーカラー等)。
imtoolはimshowで使える機能に加えて、ピクセル数や画像の情報を表示するなどの機能も仕様可能です。
リファレンス参照を推奨します。

pwd・lsコマンド等が使えるので、imreadに画像の置いてある場所を確認してパスを指定します。
e.g.

>> img = imread('bear.png'); %% load image file :)
>> imtool(img);

s_imtool.png

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);

s_threeBands.png

グレースケール

じゃあグレースケール化するには単にRGBを平均すればいいの?というとそういうわけではないそうです。
rgb2grayという関数が用意されています。
下の画像はそれぞれ、左が単に平均したもの、右がrgb2grayを使ったものです。
ちなみにuint8は8bit符号なし整数に変換・doubleはそのまま倍精度です。
整数クラスのままでは数値演算に不向きのためdoubleにキャストし直します。

>> avg = uint8((double(redBand)+double(greenBand)+double(blueBand))/3);
>> gray = rgb2gray(img);
>> imtool(avg), imtool(gray);

s_avg_gray.png

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');
3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6