MATLABによる画像処理1

ページトップへ 一つ上へ

ポイント


imagesc、imread



さてさて、今回は画像処理についてやっていきます。
MATLABはその名の通り行列演算が強いです。
そして、画像データも一種の行列データです。
という事はMATLABで画像データを扱うのはとても簡単なのです。
そういうわけで、今回は画像処理について学びます。

それではまず以下の画像を用意します。



この画像はIEEEの研究用標準画像です。
いろんな人が研究する際に同じ画像を使わないと
比較する事が出来ないので、IEEEが標準画像を決めました。
というわけで今後画像処理の時にはこの画像を使っていきます。

それではまずMATLABでこの画像を読み込んで処理してみましょう。
function image_proc

%
% 画像処理
% 画像を読み込んで表示
%
%

imagedata=imread('woman.bmp');	% 画像データの読み込み

imagesc(imagedata);		% データの描画
colormap(gray(256));		% グレースケール256階調で表示


さてこれだけでいいのです。
では実行してみましょう。



ちゃんと表示出来ましたね。
なんとなく横長になってるのは気にしないで下さい。

さて、では画像処理の基本的な事項のフィルタリングについて話します。
フィルタリングというのは原画像に対して何らかの処理を加えます。
フィルタfと原画像gの間の畳み込み積分で計算できます。

y=f*g

画像処理では主に正方行列のフィルタが使われます。
原画像のサイズをn×m、Lサイズのフィルタとすれば



で計算されます。
このややこしい式をプログラミングしても問題はないですが、
MATLABではこのような計算をしてくれる関数があります。

y=filter2(F,G)

です。
これが、上式と同じ意味を持ちます。

では実際にフィルタリングをしてみましょう。
今回は画像を平滑化してみましょう。
今回の平滑化ではかなり一般的な加算平均をしてみます。
用いるフィルタ行列は以下です。



それでは実際のプログラミングです。
さっきのプログラムを以下のように書きなおして下さい。
function image_proc

%
% 画像処理
% 画像に平滑化フィルタをかける
%

imagedata=imread('woman.bmp');
imagedata=double(imagedata);			% 実数行列に変換

f=[1,1,1;1,1,1;1,1,1]/9;			% フィルタ行列の作成

filt_image=filter2(f,imagedata,'same');		% フィルタリング

image(filt_image);
colormap(gray(256));

さて、これを実行すると以下のような画像が表示されます。



これを上の画像と比較して頂けるとわかると思いますが、
きちんと平滑化が出来ていると思います。
実際にやってみるとわかると思います。
このようにMATLABでは画像処理も簡単に行えます。