メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp...

77
担当教員:健山 智子 [email protected] (教) メディア処理演習 画像メディア処理 2013年度前期 情報理工学部

Upload: truonghanh

Post on 15-May-2018

229 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

担当教員:健山 智子

[email protected]

(教) メディア処理演習

画像メディア処理

2013年度前期 情報理工学部

Page 2: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

講義内容

• 課題1:デシタル画像の性質,画像処理の概要

• 課題2:MA TLAB の操作と画像の濃淡変化

• 課題3:画像のヒストクラムと 2 値化処理

• 課題4:空間フィルタとエッシ情報抽出

Page 3: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

課題1:デシタル画像の性質,画像処理の概要

• デシタル画像とは

• 画像の構成

• 画像の種類

• 画像の表現

• ソフトウェアによる様々な画像処理

• 画像の擬似コード

Page 4: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

画像の種類

種類 形式 備考

二値化画像

文字,線画, 指紋等

濃淡画像

(GrayScale) 通常の写真

n = 6~8が標準

カラー画像 カラー3原色(R, G, B)

マルチスペクトル画像 リモートセンシンク用

m=4~8が多い

ステレオ画像 左右視点からの対画像

立体視用

動画像 動態解析,アニメーション

0

1),( jif

12),(0 njif

BGRkjifk ,,)},,({

mkjifk ,,1)},,({

},{ RL ff

nt tttjif ,,)},,({ 1

Page 5: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

画像処理とは

• コンピュータなどの計算機に画像を入力(デシタル化)し,

入力された画像に対して処理を行うこと

• 処理した出力結果の形態

– 入力情報に対し,処理結果を画像で出力

–コントラスト調整,エッシ抽出,ノイズ除去

–コンピュータビション など

– 入力画像に対し,処理結果を記述情報によって出力

–画像解析

–画像認識

–画像計測 など

Page 6: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

画像処理とは(その1)

• 画質の改善

入力された画像を見えやすくする

– 入力:画像

– 出力:画像

– 処理内容

• ノイズ除去,画像強調,画像復元等

Page 7: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

画像処理とは(その2)

入力画像に対し,処理結果を記述情報による出力

入力画像に対しその情報を抽出,認識を行う 入力:画像

出力:必要な情報,パターン等の記述情報

処理内容:画像解析,画像認識,画像計測 など

Page 8: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

画像処理とは(その3)

• コンピュータビション,コンピュータクラフィックス

– 画像の人的作成

• 入力:関数や点群

• 出力:画像や図形

画像処理は特に1と2の処理を示す

Page 9: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

画像処理の流れ

計算機へ 画像入力

計算機上での 画像処理,解析など

画像出力

情報記述

Page 10: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

画像処理で何ができるのか

画質の改善,画像計測,認識などを幅広く行える

– 人物の認識

顔や指紋などの自動認識によるセキュリティ対策

– ロボティックス

機械の知能化,外界情報を如何に効率よく取り入れるか

– 医用画像処理

医用画像デシタル化に伴い,効率的な病変部位の特定、術前および治療計画等

– 工業系における検査支援

検査パターンを取り込むことで,検査精度の高精度化

画像処理技術は各種産業,医療,航空宇宙,工業分野等, 多岐の分野に渡って多く利用されている

など

Page 11: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

デシタル画像とは

• 画像情報をコンピュータなどで取り扱えるよう数値化した画像

– 画素(ピクセル):画像の中の「小さな正方形領域」

– 画素毎に色や明るさ等の数値情報により画像を構成

アナロク:連続的な波形を持つ

デシタル:離散的な数値情報

画素

デシタル画像

Page 12: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

画像の構成(数式化)

• デシタル画像:

– 画像情報をコンピュータなどで取り扱えるよう数値化した画像

– 画素を単位として,画素の数値で色や明るさを表現する

画像の数式化

valuejif ),(

m×nの画像

Page 13: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

デシタル画像の種類

種類 形式 備考

二値化画像

文字,線画, 指紋等

濃淡画像

(GrayScale) 通常の写真

n = 6~8が標準

カラー画像 カラー3原色(R, G, B)

マルチスペクトル画像 リモートセンシンク用

m=4~8が多い

ステレオ画像 左右視点からの対画像

立体視用

動画像 動態解析,アニメーション

0

1),( jif

12),(0 njif

BGRkjifk ,,)},,({

mkjifk ,,1)},,({

},{ RL ff

nt tttjif ,,)},,({ 1

Page 14: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

画像の種類

• 2値画像 (binary image)

(各ピクセルに0か1をもつ)

• 濃淡画像(grayscale image)

(各ピクセルに0から255の間の整数をもつ)

• カラー画像(color image)

(各ピクセルに三つの整数データをもつ)

画像はピクセル(画素)の集合

各ピクセルは輝度と色などの情報をもつ

Page 15: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

二値画像と濃淡画像

• 二値画像 – 完全な白色と完全な黒色の2色のみで表現された画像

– 間の中間色(クレー色)を混ぜず,黒(1)と白(0)の数値で画像表現

• 濃淡画像(クレイスケール) – ある範囲内の数値のみで表現された画像

– おもに,0~255の範囲内で表現する

二値画像 クレイスケール画像

Page 16: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

カラー画像

• 画像を光の3原色(R, G, B)を合成して表現した画像 – カラー画像の式

BGRkjifk ,,)},,({

R成分画像 G成分画像 B成分画像

Page 17: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

画像処理の擬似コード

for i=1:N,

for j=1:M

Output[i][j] の処理

end

end

画像処理は基本,ピクセル(画素)単位で処理を行う

画像サイズを N*M(N行M列)とすると,以下が成り立つ

Page 18: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

課題1:ソフトウェアを用いた画像処理

1. GIMPを用いて,画像を読み込む

2. GIMPに用意されている画像処理機能を使って 画像の性質に慣れる

3. 課題について,テキストに記述してます

Page 19: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

GIMPとは

• 画像編集用のフリーソフト

• Photoshopと同様にさまざまな画像処理を行うことが可能

講義ではGIMPを利用して画像処理を体験する

Page 20: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

課題2:MA TLAB の操作と画像の濃淡変化

• MATLABに慣れよう

• 画像処理の擬似コード

• MATLABによる濃淡変化

Page 21: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

コマンドウィンド

ワークスペース

コマンドヒストリ

MATLABの起動画面

Page 22: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

画像処理の擬似コード

for i=1:N,

for j=1:M

Output[i][j] の処理

end

end

画像処理は基本,ピクセル(画素)単位で処理を行う

画像サイズを N*M(N行M列)とすると,以下が成り立つ

Page 23: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

行列やベクトルの計算も簡単にできる

• 例:以下の行列AとBとの積を求める

• 実行方法

>> A=[1 2; 3 4] %行列Aの入力

>> B=[5 6; 7 8] %行列Bの入力

>> C=A*B %行列C=A*Bの計算

87

65,

43

21BA

C =

19 22

43 50

のような結果が表示される.

Page 24: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

様々な行列計算

• 行列の転置 x’

• 逆行列 inv(x)

• 行列式 det(x)

• 行列の要素 x(2,1) %2行1列の要素

Page 25: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

クラフィックス表示

t=0:pi/100:2*pi; % 0~2πまでの時刻の範囲,刻みπ/100

x=sin(t); % 横軸の計算

y1=sin(t+0.25); % 出力1の計算

y2=sin(t+0.5); % 出力2の計算

plot(x,y1,'r-',x,y2,'g--'); % 出力の表示 y1は赤の実線;y2はクリーンの波線

title=('Phase Shift'); % タイトルの指定

xlabel('x=sin(t)'); ylabel('y=sin(t+)'); % 座標軸名の設定

Page 26: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

x=sin(t)

y=sin(t+)

Page 27: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

MATLAB練習問題

• Matlabを使って、以下の連立方程式を解きなさい

23

642

yx

yx

Page 28: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

画像関係

• 画像の読み込み imread

• 画像の書き込み imwrite

• 画像の表示 imagesc

例 a=imread(‘lena.bmp’) %lena.bmpという画像ファイルをaという

2次元配列に読み込み

a=double(a); % 2次元配列aを倍精度の実数に変換する

[m, n]=size(a); %2次元配列(画像)のサイズ

処理

a=uint8(a); %倍精度を8ビットの整数に変換する

imagesc(a); %結果の画像を表示

colormap(gray);

imwrite(a, ‘image.pgm’) %結果の画像をimage.pgmというファイルに出力

Page 29: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

MATLABによる画像処理プロクラミンク例

この部分を変更する

Page 30: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

画像の濃淡変化

• 入力画像と出力画像の関係のクラフは基本的に線形

0

50

100

150

200

250

300

0 50 100 150 200 250

入力画像

出力画像

Input O

utp

ut

この入出力を変化させる

Page 31: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

濃淡の反転(ネガ・ポシ反転)

Page 32: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

トーンカーブ

• 画像の濃淡を変化させるために、入力画像のそれぞれの画素値が出力画像の画素値との対応関係を諧調変換関数(gray-level transform function)という。

• それをクラフで表したものをトーンカーブ(tone-curve)という。

1.直線より上に出ている部分(図のA)では、入力より出力のほうが明るい

2.直線より下に出ている部分(図のB)では、入力より出力のほうが暗い

3.傾きが1より大きな部分(図のC)では、出力における濃淡の範囲が広げられ、

コントラストがあげられる

Page 33: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

折れ線型トーンカーブによる変換(1)

• 画像全体が明るくなり、コントラストを上げる例(傾きが1より大きい)

Output(i, j) =a* Input(i, j) Input(i, j) <Th

255 Input(i, j) ³Th

ì

íï

îï

Page 34: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

折れ線型トーンカーブによる変換(2)

• 明るさを抑え、コントラストを上げる例(傾きが1より大きい)

Output(i, j) =0 Input(i, j) <Th

a* Input(i, j) Input(i, j) ³Th

ì

íï

îï

Page 35: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

折れ線型トーンカーブによる変換(3)

• コントラストを下げる例(傾きが1より小さい)

Output(i, j) = a* Input(i, j)+Th a <1

Output(i, j) =Th1 Output(i, j) <Th1

Output(i, j) = a* Input(i, j)+Th1 Th1£Output(i, j) <Th2

Output(i, j) =Th2 Output(i, j) ³Th2

ì

íï

îïï

Page 36: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

ソラリゼーション(solarization)

ネガ画像とポシ画像が混じりあったような効果

Output(i, j) = a1 * Input(i, j) a1 = 255 /Th1

Output(i, j) = a2 * Input(i, j) a2 = -255 / (Th2 -Th1)

Output(i, j) = a3 * Input(i, j) a2 = 255 / (Th3-Th2)

ì

íï

îïï

Page 37: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

複数画像によるブレンディンク

• 2枚の画像を重ねあわせてみる

Output(i, j) = a* Input1(i, j)+ (1-a)* Input1(i, j)0 £ a £1

Input1 Input2

Page 38: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

複数画像によるブレンディンク

a = 0.1 a = 0.3 a = 0.5

a = 0.7 a = 0.9

Page 39: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

カラー画像の画像処理コード

この部分を変更する

Page 40: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

ポスタリゼーションと2値化

Page 41: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

ポスタリゼーションと2値化

Output(i, j) = 0 0 < Input(i, j) <Th1

Output(i, j) =Th1 Th1£ Input(i, j) <Th2

Output(i, j) =Th2 Th2 £ Input(i, j) <Th3

Output(i, j) =Thn-1 Thn-1£ Input(i, j) < Thn

ì

í

ïïï

î

ïïï

ポスタリゼーション

二値画像

Output(i, j) = 0 Input(i, j) <Th

Output(i, j) = 255 Input(i, j) ³Th

ì

íï

îï解析的に閾値を求める

Page 42: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

課題3:画像のヒストクラムと 2 値化処理

• デシタル画像とは

• 画像の構成

• 画像の種類

• 画像の表現

• ソフトウェアによる様々な画像処理

Page 43: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

画像ヒストクラム

• 各濃度値に対して、画像中におけるその濃度値をもった画素数をもとめたもの

• 横軸を濃度値、縦軸を画素数

原画像

ヒストクラム

Page 44: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

ヒストクラムのプロクラム例

Page 45: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

ヒストクラムの性質

• 空間情報がないため、異なる画像が同一ヒストクラムをもつことがある。

• 画像をいくつかの領域に分割し、それぞれの領域のヒストクラムの和は画像全体のヒストクラムの和と同じである。

Page 46: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

ヒストクラムは適切にスケールされることが重要

コントラストが最もよい コントラストが低い 一部分の濃淡変化が失われる

Page 47: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

ヒストクラムの平滑化

画像

ヒストクラム

Original 平滑化後

Page 48: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

ヒストクラムを利用した2値化

Page 49: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

2値化

• 任意の値(閾値)を境に画素値を1(白),0(黒)で表現する

• 2値化は画像処理における基本かつ重要な処理 – 対象領域を白,その他を黒で分ける

– パターン認識等でも重要な役割を担っている

– 閾値の決定法はさまざまな手法が提案されており,問題によってその手法が変わる

二値画像(t = 150) クレイスケール画像

tjif

tjifjif

),(0

),(1),(

Page 50: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

2値化処理

• 処理方法 – 閾値指定法

ある閾値を指定し,その閾値より大きい値と小さい値で2値化を行う処理

– 大津の判別法 背景と対象に対して分離度がもっとも大きくなるような閾値を決定し,

自動的に二値化を行う処理

• 応用例 – 製品欠陥検査,検出

– ラベリンク処理

– 領域分割, 抽出

Page 51: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

大津の2値化処理例

• 背景と人物の分離が最もよく行えるように,それぞれの分散が最大になるよう閾値を決定する

元の画像 大津の2値化による2値化処理

Page 52: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

レポート課題3

• ヒストクラムを求めるプロクラムをMATLABで作成せよ

• Imageフォルダ内のカラー画像を選択し,濃淡画像に変換せよ

• 画像のヒストクラムを求めよ

• 適当なしきい値により,2値画像を提示せよ

(内容はテキストに書いてます)

Page 53: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

課題4:空間フィルタとエッシ情報抽出

• デシタル画像とは

• 画像の構成

• 画像の種類

• 画像の表現

• ソフトウェアによる様々な画像処理

Page 54: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

空間フィルタリンク(filtering)

• 入力画像の対応する画素値だけではなく、その周囲の画素も含めた領域内の画素値を用いた計算を領域に基づく濃度変換まはた空間フィルタリンクという。

(トーンカープ) 

諧調変換関数:][

)],([),(

T

jifTjig

g(i,j) f(i,j) f(i,

j)

g(i,j)

)12)(12(:

:),(

),(),(*),(

ww

kenelnmh

nmhnjmifhfjigw

wn

w

wm

幅)フィルタのサイズ(窓

ともいう)フィルタ関数(

(領域に基づく濃度変換)

Page 55: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

空間フィルタ

• 画像にノイズを加えたり,画素の近傍の画素に重みをかけて 足し合わせた画像を作ること

– 近傍処理とも呼ばれる

• 出力画像は原画像と空間フィルタとの演算により与えられる

• 処理の種類

– ノイズ除去

– エッシ抽出

1

1

1

1

),()2/,2/(),(m

p

n

q

qpwnqjmpifjif

Page 56: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

具体的な計算(フィルタ関数:3x3)

h(-1,-1) h(-1,0) h(-1,1)

h(0,-1) h(0,0) h(0,1)

h(1,-1) h(1,0) h(1,1)

f(i-1,j-1) f(i-1,j) f(i-1,j+1)

f(i,j-1) f(i,j) f(i,j+1)

f(i+1,j+1) f(i+1,j) f(i+1,j+1)

例えば:フィルタ関数が3x3の場合、w=1 (-w~w)

*

)1,1()1,1(),1()0,1()1,1()1,1(

)1,()1,0(),()0,0()1,()1,0(

)1,1()1,1(),1()0,1()1,1()1,1(

),(),(*),(

jifhjifhjifh

jifhjifhjifh

jifhjifhjifh

nmhnjmifhfjigw

wn

w

wm

Page 57: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

空間フィルタ(イメーシ)

周辺画素を含めた領域内の画素値を使って、畳み込み演算することで濃淡変換して出力画像を得る

Page 58: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

畳み込みによるfilteringのアルゴリズム

Input f(i,j) (i,j=0,N-1) and h(m,n) (m,n=-w, w) For i=m, N-1-m; For j=m, N-1-m; g(i,j)=0: For n=-w, w; For m=-w,w; g(i,j) += h(m,n) x f(i+m,j+n); next m, n; next i,j;

画像f:NxN; フィルタ関数h:(2w+1)x(2w+1)

Page 59: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

ノイズ除去

• 画像にはカメラの撮影素子や様々な要因で起因するノイズが含まれる場合がある

• ノイズは細かい変動成分のため,画像処理で妨げになる

• 処理の種類 – 処理方法は問題によって異なる

– 移動平均フィルタ,メディアンフィルタなど

目的の情報を効率的に行う前処理として重要

原画像 ノイズ付加画像

Page 60: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

ノイズ除去

原画像

ノイズ付加画像 ノイズ除去画像

Page 61: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

空間フィルタ(代表例)

• 平均化フィルタ – 注目画素の値をフィルタ領域内の画素値の平均にして画像全体を平滑化するフィルタ

• 微分フィルタ – 濃度値の変化量を求めて、明るさが変化する「輪郭」となる部分を抽出するフィルタ

– X方向の微分とY方向の微分を使って、エッシを抽出する。

• Prewitt フィルタ

– 微分方向と直交する方向に平滑化することで、エッシを残しつつノイズを低減させるフィルタ

• Sobel フィルタ

– 中央に重みを付けて平滑化したものと組み合わせたフィルタ

平均化フィルタ

Page 62: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

平均値フィルタ例

Page 63: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

平均値フィルタ(mean filter)

0 1 0

1 1 1

0 1 0 5

1

5

),1()1,(),()1,(),1(),(

ijfijfjifijfijfijg

f(j-1,i-1) f(j-1,i) f(j-1,i+1)

f(j,i-1) f(j,i) f(j,i+1)

f(j+1,i+1) f(j+1,i) f(j+1,i+1)

*

Page 64: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

平均値フィルタ出力例

Page 65: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

重み付き平均値フィルタ

0 1 0

1 2 1

0 1 0 6

1

6

),1()1,(),(2)1,(),1(),(

ijfijfjifijfijfijg

f(j-1,i-1) f(j-1,i) f(j-1,i+1)

f(j,i-1) f(j,i) f(j,i+1)

f(j+1,i+1) f(j+1,i) f(j+1,i+1)

*

Page 66: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

重み付き平均値フィルターの例(Kernel:3x3)

0 1 0

1 2 1

0 1 0

6

),1()1,(),(2)1,(),1(

6/)]1,1(0),1(1)1,1(0

)1,(1),(2)1,(1

)1,1(0),1(1)1,1(0[

)1,1()1,1(),1()0,1()1,1()1,1(

)1,()1,0(),()0,0()1,()1,0(

)1,1()1,1(),1()0,1()1,1()1,1(

),(),(*),(

jifjifjifjifjif

jifjifjif

jifjifjif

jifjifjif

jifhjifhjifh

jifhjifhjifh

jifhjifhjifh

vjuifvuhhfjigm

mu

m

mv

6

1

Page 67: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

Gaussianフィルタ(重み付き平均)

)2

exp(2

1),(

)2

exp(2

1)(

2

22

2

2

2

yxyxh

xxh

g

g

1次元

2次元

Page 68: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

中間値フィルタ

20

3.

(1)

3x3

1/9 1/9 1/9

1/9 1/9 1/9

1/9 1/9 1/9

(2)

.

4 5

4.

(1)

目画素とその近傍(窓の範囲内)の濃度 値全体をソートし,

その中間に位置する濃度値を注目画素に埋め込む

Page 69: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

ノイズ除去(メディアンフィルタ)

• n×nの局所領域における濃度値を小さい順に並べ、 真ん中にくる濃度値を領域中央の画素の出力濃度とする処理

• 平滑化ではエッシのボケが生じるが, メディアンフィルタの場合、エッシはそのまま残る.

ノイズ画像 メディアンフィルタ画像

Page 70: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

エッシ抽出(high-pass filter)

• 画像の中に急激に変化する部分(高周波成分)をエッシと呼ぶ

• エッシは視覚的に境界線として認識される

• エッシの検出には、勾配( 1次微分)やラプラシアン( 2次微分)などの微分operatorを用いる。

エッシ信号

勾配:最大値

ラプラシアン:零交点

Page 71: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

中心差分による偏微分

0 0 0

-1 0 1

0 0 0

2

)1,()1,(

2

,,),(

2

),1(),1(

2

,,),(

yxfyxf

y

yyxfyyxfyxf

yxfyxf

x

yxxfyxxfyxf

y

x

x

y

0 -1 0

0 0 0

0 1 0

/2 /2

fx fy

Page 72: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

勾配

fの勾配:偏微分fxとfyを成分とするベクトル

fの最も急速に変化する方向

),( yx fff

22

yx fff

エッシ検出:

otherwise

fyxedge

,0

,255),(

2値エッシ画像

Page 73: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

ノイズを含む画像を微分すると、ノイズを増幅してしまう

ノイズの影響を抑えるために、偏微分の差分計算に、画素値

ではなく、その画素を中心とする周辺の平均値を用いる

2

)1()1(),(

2

)1(1),(

xx

y

yy

x

yfyfyxf

xfxfyxf

ノイズの影響を抑えるためのエッシ抽出フィルタ

Sobelフィルタ、Prewittフィルタ

Page 74: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

ノイズを抑えたエッシ抽出(Sobel Filter)

• 中央に重みを付けて平滑化したものと組み合わせたフィルタ

元の画像 Sobelフィルタ処理した画像

Page 75: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

ノイズを抑えたエッシ抽出

• ラプラシアンフィルタ

– 1次微分はX方向とY方向の1次元データをそれぞれ扱うが,2次微分は1度に2方向のデータを扱う

– そのため、方向性に取られにくいエッシを抽出ができる

– このようなフィルタのことをラプラシアンフィルタという

元の画像 ラプラシアンフィルタ処理した画像

Page 76: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

空間フィルタ(代表例)

• ラプラシアンフィルタ

– 1次微分はX方向とY方向の1次元データをそれぞれ扱うが,2次微分は1度に2方向のデータを扱う

– そのため、方向性に取られにくいエッシを抽出ができる

– このようなフィルタのことをラプラシアンフィルタという

0 +1 0

+1 -4 +1

0 +1 0

+1 +1 +1

+1 -8 +1

+1 +1 +1

4方向ラプラシアン 8方向ラプラシアン

Page 77: メディア処理演習 画像メディア処理imread(‘lena.bmp’) %lena.bmp という画像ファイルをaという 2次元配列に読み込み a=double(a); % 2 次元配列aを倍精度の実数に変換する

Laplacian filters(エッシ検出)

0 -1 0

-1 4 -1

0 -1 0

1

),1()1,(),(4)1,(),1(),('

ijfijfjifijfijfijf