• 検索結果がありません。

Microsoft PowerPoint - comprog11.pptx

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - comprog11.pptx"

Copied!
5
0
0

読み込み中.... (全文を見る)

全文

(1)

プログラミング演習 第11回

エッジを検出する

on 2013.01.24

電気通信大学情報理工学部

知能機械工学科

長井隆行

Outline

‡

画像の本質

‡

輝度の境目に情報あり!

‡

画像の微分と2階微分

‡

エッジ検出

‡

画像をぼかす

‡

本日の課題

2 http://apple.ee.uec.ac.jp/isyslab

画像の本質

3 0 20 40 60 80 100 120 140 160 0 20 40 60 80 100 120 140 160 180

†

画像の情報は境目にあり!

輝度

白い線で切った断面

エッジ

http://apple.ee.uec.ac.jp/isyslab 4

エッジ抽出

‡ エッジ ‡ 輝度が大きく変化しているところ(境界) ‡ 画像の情報はエッジにあり ‡ 人間の視覚系でも特定のエッジの方向に発火するニューロンが見つかって いる ‡ 画像の微分 ‡ 画像上の全ての点で微分を 計算すれば、変化していると ころが一目瞭然! ‡ 離散(時間)信号なので微分は、 差分として考えればよい ‡ 2階微分がゼロとなる点としても 検出できる

(2)

5

画像の微分

‡

横方向、縦方向の微分

) , ( ) , 1 ( 1 ) , ( ) , 1 ( ) , ( y x f y x f x x y x f y x f x y x f = + − + − + ≈ ∂ ∂ ) , ( ) 1 , ( 1 ) , ( ) 1 , ( ) , ( y x f y x f y y y x f y x f y y x f = + − + − + ≈ ∂ ∂ ) , 1 ( ) , 1 ( ) , ( y x f y x f x y x f + ∂ ∂ ) 1 , ( ) 1 , ( ) , ( + ∂ ∂ y x f y x f x y x f

(x, y)における微分とするために

6

画像の微分(実際の計算方法)

‡

縦方向(横方向)のエッジ(微分)

0

0

1

1

0

0

1

7

1

0

8

8

0

1

8

9

0

-1

1

0

1

1

-1

0

1

7

-1

0

7

8

-8

1

8

8

-8

‡

横方向(縦方向)のエッジ(微分)

足りないところは0で埋める

0

-1

1

どうなる?

積和の計算

http://apple.ee.uec.ac.jp/isyslab 7

オペレータ

‡

実際はノイズ除去のための平滑化と組み合わせる

‡

平滑化によって色々なパターンがある

‡

3×3がよく用いられる

-1

-1

-1

0

0

0

1

1

1

-1

-2

-1

0

0

0

1

2

1

-1

0

1

-1

0

1

-1

0

1

-1

0

1

-2

0

2

-1

0

1

Prewitt プレウィット Sobel ソーベル 縦方向微分 横方向平均 縦方向平均 横方向微分 中心を重視 した平均 http://apple.ee.uec.ac.jp/isyslab 8

オペレータ適用の例

prewitt

sobel

(3)

図解 オペレータ適用

‡ オペレータ適用(フィルタリング・2次元畳み込み)の計算手順を図解 9 0 0 1 1 0 0 1 7 1 0 8 8 0 1 8 9 -1 -1 -1 0 0 0 1 1 1 オペレータ 入力画像 0 0 1 1 0 0 1 7 1 0 8 8 0 1 8 9 -1 -1 -1 0 0 0 1 1 1 出力画像 中心 足りないところはゼロで補う 0 0 0 1 1 0 0 1 7 1 0 8 8 0 1 8 9 -1 -1 -1 0 0 0 1 1 1 2 0 0 0 1 1 0 0 1 7 1 0 8 8 0 1 8 9 -1 -1 -1 0 0 0 1 1 1 2 0 8 0 0 1 1 0 0 1 7 1 0 8 8 0 1 8 9 -1 -1 -1 0 0 0 1 1 1 2 0 8 -2 0 0 1 1 0 0 1 7 1 0 8 8 0 1 8 9 -1 -1 -1 0 0 0 1 1 1 2 0 8 0 -2 0 0 1 1 0 0 1 7 1 0 8 8 0 1 8 9 -1 -1 -1 0 0 0 1 1 1 2 0 8 0 -2 9 0 0 1 1 0 0 1 7 1 0 8 8 0 1 8 9 -1 -1 -1 0 0 0 1 1 1 右下

プログラムでの実現

‡

画像の横と縦を2重ループ

10 double pixel_val = 0.0;

for(y=1; y<height-1; y++){ for(x=1; x<width-1; x++){

pixel_val = -1.0*buffer[(y-1)*width+x-1]+buffer[(y-1)*width+x+1] -1.0*buffer[y*width+x-1]+buffer[y*width+x+1] -1.0*buffer[(y+1)*width+x-1]+buffer[(y+1)*width+x+1];

out_buffer[y*width+x] = (fabs(pixel_val) <= 255) ? (unsigned char) fabs(pixel_val) : 255; } } -1 -1 -1 0 0 0 1 1 1 ×-1 プレウィット(横)の場合

(注目画素)を画像の左上から右下まで動かす ⇒ 2重ループ

条件演算子

微分値の絶対値を画像で表示するため

p11-1.c

(x-1, y-1) ⇒ (y-1)width+x-1 ×0 ×1 (x+1, y+1) ⇒ (y+1)×width+x+1 (x, y) ⇒ y×width+x http://apple.ee.uec.ac.jp/isyslab

画像の境界問題

(補足)

‡

図解のスライドではゼロを補って考えましたが・・・

‡

前のプログラムでは端を処理しないことで対処しました

‡

単純に面倒だから

‡

境界をちゃんと処理するには

‡

ゼロを埋める

‡

対称拡張

11

if文で一生懸命場合分け

端を膨らませたバッファを用意する

画像

必要な分だけ

画像

ゼロを足す 必要な分だけ 画像を対称に拡張 マスクの中心 マスクの中心

ゼロ埋め

対称拡張法

http://apple.ee.uec.ac.jp/isyslab 12

2階微分

‡

微分の微分(差分の差分)

{

} {

}

{

} {

}

)

,

(

4

)

1

,

(

)

1

,

(

)

,

1

(

)

,

1

(

)

1

,

(

)

,

(

)

,

(

)

1

,

(

)

,

1

(

)

,

(

)

,

(

)

,

1

(

2

y

x

f

y

x

f

y

x

f

y

x

f

y

x

f

y

x

f

y

x

f

y

x

f

y

x

f

y

x

f

y

x

f

y

x

f

y

x

f

+

+

+

+

+

=

+

+

+

=

0

1

0

1

-4

1

0

1

0

laplacian 4近傍

1

1

1

1

-8

1

1

1

1

laplacian 8近傍

上下左右のみ考慮する

ななめも考慮する

(4)

13

2階微分の例

‡

4近傍のラプラシアン

注)表示を見やすくするために最小値を(負の値) 引いて、そのときの最大値で正規化している 白と黒にはさまれた灰色が 2階微分がゼロの点に相当する (ゼロクロス)

0

255

14

エッジ検出

‡

最終的には、その画素がエッジなのかエッジでないかを判定する必

要がある

⇒様々な手法が提案されている

‡

オペレータの結果を閾値処理する(最も簡単)

‡

ラプラシアンの結果のゼロクロスを抽出する

‡

ゼロクロスは符号の変化を捉えれば簡単に見つかる

‡

ノイズのために細かなエッジが大量に見つかってしまう

‡

対象としている点の周りの値が大きく変化しているかどうかをチェ

ックする(閾値)

‡

ラプラシアンの結果をガウスフィルタでぼかす(ノイズを除去する)

LOGフィルタ(Laplacian Of Gaussianフィルタ)

2 2

))

,

(

(

_

))

,

(

(

_

)

,

(

x

y

prewitt

x

f

x

y

prewitt

y

f

x

y

p

=

+

⎩ ⎨ ⎧ < ≥ = ) ( 0 ) ( 255 ) , ( エッジではない   閾値:  エッジ   閾値:  y x p http://apple.ee.uec.ac.jp/isyslab 15

Canny エッジ検出器

(補足)

‡

最もよく使われる手法

‡

性能がよい

‡

画像をぼかす(ガウシアンでノイズを除去)

‡

微分の計算(大きさと方向)

‡

エッジの細線化(エッジの方向を利用)

‡

2つの閾値で値の大きい(信頼性の高いエッジ)と値の

小さい(信頼性の低いエッジ)を選ぶ

‡

信頼性の高いエッジをもとに、それに接続した信頼性

の低いエッジを選んで行く

|

|

|

|

|

|

G

=

G

x

+

G

y y x

G

G

1

tan

=

θ

http://apple.ee.uec.ac.jp/isyslab

画像をぼかす

‡

画像をぼかすためには

‡

エッジのような変化を小さくする

‡

近傍画素を平均化すればよい

⇒平滑化(平らにするということ)

⇒積分と考えてもよい

16 1/9 1/9 1/9 1/9 1/9 1/9 1/9 1/9 1/9 平均化フィルタ (移動平均) 1/16 2/16 1/16 2/16 4/16 2/16 1/16 2/16 1/16 3×3ガウシアン フィルタ 移動平均よりもなめらかになる ガウス関数をベースに作られる

オペレータのサイズはN×Nにできる

(5)

フィルタリング

(補足)

‡

オペレータの適用による処理は一般化できる

⇒フィルタリング(時間領域での畳み込み)

⇒周波数領域では

微分は

ハイパスフィルタ

平滑化は

ローパスフィルタ

‡

用いるオペレータ(フィルタ)の係数を変えれ

ば同じプログラムが使える

17

フィルタリングプログラム

int x,y,i,k; double mask[3][3]={{1.0/9, 1.0/9, 1.0/9}, {1.0/9, 1.0/9, 1.0/9}, {1.0/9, 1.0/9, 1.0/9}}; double pixel_val;

for(y=1; y<height-1; y++){ for(x=1; x<width-1; x++){ /*ここで3×3のフィルタリング(オペレータを適用)*/ pixel_val = 0.0; for(i=-1:i<2;i++){ for(k=-1;k<2;k++){ pixel_val += mask[i+1][k+1]*buffer[(y+i)*width+x+k]; } } /*オーバーフローの処理*/

out_buffer[y*width+x] = (unsigned char) pixel_val; if(pixel_val>255) out_buffer[y*width+x] = 255; if(pixel_val<0) out_buffer[y*width+x] = 0; } } 18 3×3のオペレータ

p11-2.c

http://apple.ee.uec.ac.jp/isyslab 19

本日の演習

ー準備ー ‡ まずは、p11-1.c(画像を横方向に微分するプログラム)をダウンロードする ‡ p11-1.cを実行して画像の縦方向の線が検出されていることを確かめる ‡ 画像はgray_girl.bmpを使う(自分で用意してもよいがサイズに注意) ー課題ー (ここから先をメールで送る) ‡ 画像のエッジを検出するプログラムを作る ‡ p11-3.cを完成させる ‡ 手法は、横方向のプレウィットと縦方向のプレウィットの出力の二乗和の平方根を閾値処理する ⇒ p.14の式 ‡ 閾値(threshold)を変えると結果の画像はどのように変化するかを観察する ‡ ソースコードと結果の画像(どの閾値でもよい)をメールで送る ‡ 送る画像のサイズは小さいものを送る(こちらで用意した画像と同じ程度) ‡ 送る際には注意事項をよく確認すること http://apple.ee.uec.ac.jp/COMPROG ⇒ 諸注意 ‡ 今日の講義の感想・質問をメール本文に書いてください ‡ よく分かった、ここが分からない、など http://apple.ee.uec.ac.jp/isyslab

課題のヒント

20 /*****************画像処理をここで行う********************/ for(y=1; y<height-1; y++){

for(x=1; x<width-1; x++){ /*ここで横方向の微分を計算してpixel_val1に代入*/ pixel_val1 = 0.0; for(i=-1;i<2;i++){ for(k=-1;k<2;k++){ pixel_val1 += mask1[i+1][k+1]*Rbuffer[(y+i)*width+x+k]; } } /*ここで縦方向の微分を計算してpixel_val2に代入*/ pixel_val2=0.0; /************************************************************ ************************************************************/ /*微分値の2乗和の平方根が閾値(threshold)より大きければ255そうでなければ0を代入*/ if( /*ここの条件を書く*/ ) { out_buffer[y*width+x] = 255; }else{ out_buffer[y*width+x] = 0; } } } /*******************画像処理ここまで******************************/

ここを参考にする

)) , ( ( _x f x y prewitt )) , ( ( _y f x y prewitt

⇒ pixel_val1

⇒ pixel_val2

参照

関連したドキュメント

 複雑性・多様性を有する健康問題の解決を図り、保健師の使命を全うするに は、地域の人々や関係者・関係機関との

READ UNCOMMITTED 発生する 発生する 発生する 発生する 指定してもREAD COMMITEDで動作 READ COMMITTED 発生しない 発生する 発生する 発生する デフォルト.

参考資料ー経済関係機関一覧(⑤各項目に関する機関,組織,企業(2/7)) ⑤各項目に関する機関,組織,企業 組織名 概要・関係項目 URL

図 キハダマグロのサプライ・チェーン:東インドネシアの漁村からアメリカ市場へ (資料)筆者調査にもとづき作成 The Yellowfin Tuna Supply Chain: From Fishing Villages in

平成 26 年の方針策定から 10 年後となる令和6年度に、来遊個体群の個体数が現在の水

北海道の来遊量について先ほどご説明がありましたが、今年も 2000 万尾を下回る見 込みとなっています。平成 16 年、2004

国の5カ年計画である「第11次交通安全基本計画」の目標値は、令和7年までに死者数を2千人以下、重傷者数を2万2千人

・大都市に近接する立地特性から、高い県外就業者の割合。(県内2 県内2 県内2/ 県内2 / / /3、県外 3、県外 3、県外 3、県外1/3 1/3