輪郭と画像処理 - Tokushima U•1次,...

16
輪郭と画像処理 色で塗り分けた絵 線画 輪郭(エッジ)= 「物体の外縁を表す線」 人間は絵で表現する時に、 “線画”を用いる。 つまり、面を描かなくても、 輪郭(線)を書くだけで理解 できる。 輪郭=物体を見て理解するための手掛り =「画像を特徴づける線要素」 1

Transcript of 輪郭と画像処理 - Tokushima U•1次,...

Page 1: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

輪郭と画像処理

色で塗り分けた絵 線画

輪郭(エッジ)=

「物体の外縁を表す線」

人間は絵で表現する時に、

“線画”を用いる。

つまり、面を描かなくても、

輪郭(線)を書くだけで理解

できる。

輪郭=物体を見て理解するための手掛り

=「画像を特徴づける線要素」 1

Page 2: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

輪郭の性質

画像データの"輪郭"→ 明度が急激に変化している所

2

Page 3: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

実際の画像の輪郭

A

B

C

3

Page 4: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

微分を用いた輪郭抽出(基本的な考え方) 明度f(x)

f ' (x)

0

255

0

0

f '' (x)

1次微分値の大きい所が

エッジの位置

正→0→負(負→0→正)と

変化している所が

エッジの位置

(ゼロクロス点)

画像データ 明度

断面図

1次

微分

2次

微分

4

Page 5: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

差分を用いた輪郭抽出 明度f(x)

f ' (x)

0

255

0

0

f '' (x)

画像データはディジタルデータ

→微分を差分で近似

明度の1次差分

明度の2次差分

)()1()(' xfxfxf

)()1(2)2(

)(')1(')(''

xfxfxf

xfxfxf

5

Page 6: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

画像データの輪郭抽出(1)

1次微分(グラディエント)

x 方向の微分(差分)

y 方向の微分(差分)

※負になる場合もあるので,画像データの型に注意.

•エッジの強さ (微分値の大きさ)

または (簡易版)

•エッジの方向(暗い方から

明るい方への向き)

ベクトル の向き

),()1,(),(

),(),1(),(

yxfyxfyxf

yxfyxfyxf

y

x

22

yx ff

|||| yx ff

),( yx ff

6

Page 7: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

画像データの輪郭抽出(2)

2次微分(ラプラシアン)

エッジの強さのみで方向は求めていない

と定義すると

)1,(),(),(

),1(),(),(

),(),(),(

yxfyxfyxf

yxfyxfyxf

yxfyxfyxL

yyyy

xxxx

yyxx

),(4

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

yxf

yxfyxfyxfyxfyxL

x方向の2次微分と y方向の2次微分の和,つまり,

7

Page 8: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

輪郭抽出の計算方法 ipConvolvFilter() 画像データ 微分オペレータ

(グラディエントの fx を求めるオペレータ)

微分(差分)値

0 0 0 0 -1 1 0 0 0

60

対応する要素同士を掛けて、その結果の全ての要素の和を求める。(積和演算, 畳み込み演算)

60・0 + 120・0 + 120・0 + 60・0 + 60・(-1) + 120・1 + 60・0 + 60・0 + 60・0 = 60

0 0 0 0 -1 1 0 0 0

60 0

オペレータの位置を一つずらして、同様の計算を繰り返す。

60 120 120 120 120 60 60 120 120 120 60 60 60 120 120 60 60 60 60 120 60 60 60 60 60

0 0 0 0 -1 1 0 0 0

60 0 0 0 60 0 0 0 60

60 0 0 0 0

0 0 0

0 0 0

*****

周囲の部分の微分値の計算方法は場合に依る。

60 120 120 120 120 60 60 120 120 120 60 60 60 120 120 60 60 60 60 120 60 60 60 60 60

60 120 120 120 120 60 60 120 120 120 60 60 60 120 120 60 60 60 60 120 60 60 60 60 60

8

Page 9: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

微分オペレータ 配列ipFILTER[ ][ ]

1次微分(グラディエント)

fx

fy

通常の差分 Roberts オペレータ Sobel オペレータ

0 0 0 0 -1 1 0 0 0

0 0 0 0 -1 0 0 1 0

0 0 0 0 -1 0 0 0 1

0 0 0 0 0 -1 0 1 0

1 0 -1 2 0 -2 1 0 -1

1 2 1 0 0 0-1 -2 -1

2次微分(ラプラシアン)

ラプラシアン1 ラプラシアン3ラプラシアン2

0 1 0 1 -4 1 0 1 0

1 1 1 1 -8 1 1 1 1

-1 2 -1 2 -4 2 -1 2 -1

(斜め方向のエッジに有効)

(中心に近い部分の重みを増やしている。)

9

Page 10: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

テンプレートマッチング

Image processing is

very useful in …

A a 1B b 2C c 3: : :I i 9J j 0K k: :Z z

入力画像

テンプレート(文字パターン)

•文字認識などに利用 •あらかじめ用意されたテンプレートのパターンと 入力画像との類似度(相関)を求め、そのパターンが 画像中のどこにあるのか探索する。

10

Page 11: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

テンプレートマッチングによる輪郭抽出

・類似度最大の パターンが 対応するエッジ

・その時の類似度 がエッジの強さ

原画像

マスクパターン

対応するエッジ 畳み込み計算の結果(類似度) 1 1 1

1 -2 1 -1 -1 -1

50 100 100 0 80 100 0 0 100

(Prewitt オペレータ)

1 1 1 1 -2 -1 1 -1 -1

1 1 -1 1 -2 -1 1 1 -1

1 -1 -1 1 -2 -1 1 1 1

-1 -1 -1 1 -2 1 1 1 1

-1 -1 1 -1 -2 1 1 1 1

-1 1 1 -1 -2 1 -1 1 1

1 1 1 -1 -2 1 -1 -1 1

90

-110

-310

-210

-310

-10

190

290ipEdgeTemplate() 11

Page 12: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

輪郭抽出の結果

•1次微分の場合は、 それぞれについて求めた後、 エッジの強さを計算する。 •1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。

yx ff ,

12

Page 13: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

輪郭部分の明度変化

A

B

C

13

Page 14: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

輪郭を整える(細線化)

・基本的には、外側(境界)の 画素を削っていく。

・ただし、境界の画素であっても、 他の画素と連結している部分が 2個所以下の場合は、削除しない。

よりきれいな輪郭画像にする。 →輪郭の濃淡画像を2値化し、 輪郭線の太さを同一(1画素の幅)にする。 →細線化

細線化の方法

ipThinning () (thinning.cpp)

14

Page 15: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

細線化の結果

2値画像 細線化した画像

15

Page 16: 輪郭と画像処理 - Tokushima U•1次, 2次微分とも、微分値を画像として表示するために、 微分値を定数倍している。 f x, f y 12 輪郭部分の明度変化

関数とサンプルプログラムの説明と問題 • ip.cpp

- ipConvolv():畳み込み演算(微分フィルタは3×3.9個の一次元配列として与える.この関数では,(1<=x<=w-2, 1<=y<=h-2)の範囲のみ処理することに注意)

- ipPixelConvert():差分値等を +128し,0から255の範囲内に変換. - ipEdgeTemplate():テンプレートマッチングによる輪郭抽出 - ipThinning() (thinning.cpp):細線化(その他にもありますが,今回は説明を省略)

• ip05-1_main.cpp:「通常の差分」にて, x方向,y方向のエッジ画像とエッジ強度を表示.(使用・生成される画像データとその処理の順番を,よく確認すること.)

• ip05-2_main.cpp:モノクロ画像を二値化して,細線化

問題5-1 ip05-1_main.cpp について,Sobelオペレータによって,x方向,y方向それぞれのエッジ画像を求め,さらに,関数edge_norm2()にて,エッジ強度( )を求めるようにし,その結果を表示するように改良しなさい.

問題5-2 ip05-1_main.cpp について,ラプラシアンオペレータ(1~3のいずれか)によって,エッジ画像を求め,さらに,関数edge_norm3()にて,エッジ強度( )を求めるようにし,その結果を表示するように改良しなさい. (この問題では,正負の値を持つエッジ画像は1種類であり,x方向とy方向の2種類ではないことに注意)

22

yx ff

),( yxL

16