MATLAB による画像・映像処理2
目的
カラー画像処理と映像のサンプリン グについて理解する
カラー画像の輝度と色差成分の分離
カラー画像の成分の表現方法として、
様々な方式が提案され、利用されている。
ここでは、画像・映像の符号化において よく用いられている
YCbCr
方式を取り上げ て、その効果について実感する。YCbCr 方式への変換
RGB
カラー画像から、YCbCr カラー方式への変換は、次 に示す線形方程式によって表される。(1)
ここで、示した係数は JPEG で用いられているものである。
Y 成分は輝度成分、Cb 成分は青−黄成分の青らしさ、Cr 成分は赤−緑成分の赤らしさを示している。
CbY
Cr = 0.299 0.587 0.114
−0.169 −0.331 0.5 0.5 −0.419 0.081
RG
B + 0 128128
YC b Cr カラーから RGB カラーへの変換
YCbCr
方式からRGB
カラー方式への逆変換は、次に示す線形方 程式によってあらわされる。
(2)
ここで、示した係数は JPEG で用いられているものである。
RGB から YCbCr への変換
関数名 rgb2ycbcr(rgb画像変数名)
YCbCr から RGB への変換
関数名 ycbcr2rgb(ycbcr 画像変数名)
R G
B = 1 0 1.402
1 −0.344 −0.714
1 1.772 0
Cb − Y 128
Cr − 128
YCbCr カラーと RBG カラー画像
次のプログラムは、
RGB
カラー画像F
を読み込み、先の変換により
YCbCr
カラー画像H
を求め、Y
成 分の解像度を4分の1
にした後、RGB
成分に逆変換 してオリジナル画像とともに表示するものである。このとき、
Y
成分はH(:,:,1)
、Cb
成分はH(:,:,2)
、Cr
成分はH(:,:,3)
として求められている。このプログラム中で、
RGB
成分のヒストグラムも表 示している。色変換のプログラム(例2−1)
F=imread(‘color?.bmp');
H=rgb2ycbcr(F);
figure(1);
subplot(2,2,1); imshow(F);
subplot(2,2,2); imhist(F(:,:,1));
subplot(2,2,3); imhist(F(:,:,2));
subplot(2,2,4); imhist(F(:,:,3));
HL=H;
HL(:,:,1)=lowRes2(H(:,:,1), 4);
FL=ycbcr2rgb(HL);
figure(2);
subplot(2,2,1); imshow(FL);
subplot(2,2,2); imhist(FL(:,:,1));
subplot(2,2,3); imhist(FL(:,:,2));
subplot(2,2,4); imhist(FL(:,:,3));
提出課題5
指定された
RGB カラー画像 F
を読み込み、YCbCr 方式のカ
ラー画像 H
に変換し、Cb, Cr 成分の解像度を4分の 1 にした画像 HL
を求めなさい。さらに、HL の RGB 変換画像 FL
を求めない。このとき、
kadai5_1
として、画像FL と、 HL のヒストグラムを
表示して提出しなさい。また、オリジナル画像
F
のR 成分と B 成分について解像度を4 分の 1 に変更した画像 FL2
を求めなさい。kadai5_2 として、 FL2 と
HL2 ( FL を Yc b Cr 成分に変換したもの)の各成分のヒストグラム表示 したものを提出しなさい。
解像度の変更には、関数
lowRes2
を用いること。subplot
は2
行2
列とすること。kadai*_*
の拡張子はjpgとする。※参考 例2−1
映像の表現
映像は、モノクロ、またはカラー画像を 一定の時間間隔でサンプリングした画像 の集まりとして表現される。
各々の画像はフレームと呼ばれ、映画 では
24
フレーム/
秒、TV
では30
フレーム/
秒 などが用いられている。したがって、映像の属性を示すパラメー タは、次のように与えられる。
映像の属性
フレーム数:
F
フレームレート:
1
秒あたりのフレーム数 画像サイズ:M
×N
色成分: モノクロ画像の
1
成分、RGB
など3
成分 各成分の諧調レベル数:記録用
8
ビット符号なし整数表現(uint8
型)、256
レベル、0
から255
の画素値演算用 倍精度浮動小数点数表現(
double
型)、0
から1.0
の画素値MATLAB における映像表現
ムービー方式においては、映像は、モノクロ 画像、または
RGB
カラー画像をメンバー名cdata
として持つ構造体として表現される。映像の変数名を
M
とすると、各フレームはM(1), M(2), …, M(F)
と表される。また、フレー ムM(f)
の画像はM(f).cdata
と表され、その画素 値は、モノクロ画像の時にはM(f).cdata(i,j)
、RGB
カラー画像の時にはM(f).cdata
(i,j,k)
とな る。ここで、(i,j)
は画素位置、k
はRGB
成分を示 す番号である。映像の入力と表示
映像の読み込み
aviread(
ファイル名 ) 映像の属性の読み出しaviinfo(
ファイル名 ) 映像の表示movie(
映像変数名、表示回数、フレームレート)フレームの画像への変換
frame2im(
映像変数名)
画像のフレームへの変換im2frame(
映像変数名)
構造体による映像の表現
構造体の作成 フィールド名 フィールドの値
M=struct(‘cdata’,uint8(zeros(128,128,3)),
‘colormap’, uint8(zeros(0))), ;
符号なし整数フレームの作成 第2フィールド名 第2フィールドの値
M(1).cdata(:,:,1)=255;
赤の成分M(1:15)=M(1); 1
〜15
フレームは赤M(16).cdata(:,:,2)=255;
緑の成分M(16:30)=M(16); 16
〜30
フレームは緑M(31).cdata(:,:,3)=255;
赤の成分M(31:45)=M(31); 31
〜45
フレームは青映像の表示 表示回数
movie(M,2,15);
配列名 フレームレート
映像のコピーと表示
・映像のコピー
xterm
のウィンドウで次のコマンドを実行するcp /thome/lct/lct-d189/image/mother.avi mother.avi
・映像の表示
matlab
のコマンド・ウィンドウで次の命令を実行するM=aviread(‘mother.avi’);
movie( M,1,15);
画像変数名 表示回数 フレームレート
映像の属性の表示例
コマンド
Minfo=aviinfo(‘mother.avi’)
表示例Minfo =
Filename: ‘mother.avi' FileSize: 11410944
FileModDate: '06-Apr-2010 12:43:45' NumFrames: 150
FramesPerSecond: 15 Width: 176
Height: 144
ImageType: 'truecolor'
VideoCompression: 'none' Quality: 0
NumColormapEntries: 0
時間サンプリング削減関数 lowFrm
次に示す関数は連続する2フレームごと に後のフレームの画素値を先のフレーム の値に置き換えることにより、実質的に時 間サンプリング・レートを
2
分の1
にする関 数である。ファイル名は
lowFrm.m
とする。時間軸のサンプルレートの変更(例
2-2
)function ML=lowFrm(M) ML=M;
s=size(M); fn=s(2); %s(2)
がフレーム数を示しているfor f=1:2:fn % for
変数=初期値:増分:終値picture=M(f).cdata;
for i=f+1:f+2-1 if i<=fn
ML(i).cdata=picture;
end end
end end
時間サンプリングの変更(例2−3)
次のプログラムは、ファイル名
sampleMovie.avi
を読み込み、関数lowFrm
を 用いて、偶数フレームを直前のフレームで書 き換え、時間軸のサンプリング・レートを実質 的に2
分の1
に削減するものである。このとき、表示のフレーム・レートは入力画 像と同じにする。
時間軸のサンプルレートの変更(例2−3)
V=aviread(‘mother.avi ');
VL=lowFrm(V);
figure(1);
subplot(1,2,1) movie(V,1,15);
subplot(1,2,2);
movie(VL,1,15);
提出課題6
関数
lowFrm
を変更して、映像の時間サンプルレートを実質的に k 分の1にする関数 lowFrm2(M,k)
を作成しなさい。そして、指定された映像
V
を読み込み、関数lowFrm2
を用いて時間軸のサンプルレートを実質的に
2 分の 1
、4 分の1、
8 分の1にした映像を変数 VL2
、VL4
、VL8
に求めるプログラムを 作成し、実行しなさい。表示は、subplot
を2
行2
列として、V
、VL2
、VL4
、VL8
を描画する。提出物として、作成したプログラム
kadai6 と関数 lowFrm 2の m ファイル ( 拡張子を txt とする)をメールで送りなさい。
※ txt
形式のファイルは、save as
において、拡張子なし、All
files
として保存することで作成する。