画像処理・実習 第五回: 空間フィルタ(特徴抽出,ラプラシアン,鮮鋭化) 東海大学 情報理工学部情報メディア学科 濱本和彦 今回の内容 課題解説 画質の評価(PSNRについて) 3. 空間フィルタ 3.3 特徴抽出フィルタ-画像の一次微分 実習 Robertsフィルタ Prewittフィルタ Sobelフィルタ 線検出 出力画像の濃度値 課題解説 255 128 128 2 z 2 z m zm z' 2 z zm z m 2 1 zm 255 zm 0 z 2 zm z z m 2 原画像の濃度値 • 導出過程? • プログラム?→ imggrayc2.hで確認 • 実行結果? • ヒストグラム? 課題解説 1000 800 600 400 200 0 0 100 200 なぜこのような ヒストグラムになるのか? 課題解説 •暗いレベル(変換 曲線の変化の割 合が1以下)は, より暗くなる。隙 間発生無し。 出 力 C B A 頻度 頻度 入力 2000 A B A C B C 1000 1000 0 0 2000 •明るいレベル(同 上)は,より明る くなる。隙間発生 無し。 100 入力 0 0 200 階調数 100 200 出力 階調数 •中間レベルは 引き延ばされる (隙間が発生) 空間フィルタ その他の平滑化フィルタ エッジ保存平滑化 領域1 領域2 領域3 領域4 9つの小領域 に分割 着目画素 と5×5近傍 領域5 それぞれの領域について, 画素値の平均と分散を求める 領域6 領域7 領域8 領域9 最も分散が小さい領域 の平均値を着目画素の 画素値とする 空間フィルタ エッジ保存平滑化 最も分散が小さい領域とは? 画素値がほとんど同じ領域であり,大きく異な る画素値(つまりノイズやエッジ)が無い領域 その平均値を着目画素の画素値とすることに より,エッジを保存した平滑化が可能 ただし,処理時間が他の手法より長い 演習 エッジ保存平滑化 void Edge_keep_smoothing(void)を実行し, 他の手法の結果と比較しなさい 結果 lenan20.raw エッジ保存平滑化 ガウシアンフィルタ (1回) 画質の評価 PSNR MAX 2 P SNR[dB] 10 log10 MSE ^ 1 N 1 M 1 2 MSE ( f [ i ][ j ] f [ i ][ j ]) N M i 0 j 0 MAX 最大濃度値(255) f [i ][ j ] : 原画像 ^ f [i ][ j ] : 評価画像 N : 行数, M : 列数 ( N M 256) 画質を評価する代表 的な指標 平均自乗誤差に対す る濃度最大値のS/N 通常,32[dB]程度で原 画像との違いは視認 できないと言われる S/Nであるので,大き い値ほど高画質 結果 移動平均 25.61dB 演習3.1 25.49dB ガウシアン(1回) 22.98dB ガウシアン(3回) 24.38dB メディアン(1回) 29.75dB メディアン(3回) 28.77dB エッジ保存平滑化 25.55dB 人間の視覚とは必ずしも一致した評価にならないことに注意! 特徴抽出フィルタ 画像解析 画像の特徴を抽出し目的に応じて処理 画像の特徴 濃度値,色,模様(テクスチャ)など 領域(region) 特徴が似通っている部分 エッジ(edge) 領域と領域の境界で,特徴が急激に変化している部 分 エッジ検出は重要かつ基本的な画像解析 特徴抽出フィルタ 濃度差のエッジ検出:画像の微分 一次微分(勾配:gradient) 画像の微分って? そもそも,微分って何? 微分とは,変化の割合 つまり,「隣の画素との間で,濃度がどれ だけ変化したか?」 ディジタルデータの微分は,「差分」を求め ること。 特徴抽出フィルタ 濃度差のエッジ検出:画像の微分 一次微分(勾配:gradient) 微分(差分)の定義 f [ y ][x] x f f [ y ][x 1] f [ y ][x] x f [ y ][x] y f f [ y 1][x] f [ y ][x] y 対称性を考慮して x f f [ y][x 1] f [ y][x 1] y f f [ y 1][x] f [ y 1][x] 特徴抽出フィルタ 濃度差のエッジ検出:画像の微分 一次微分(勾配:gradient) x f f [ y][x 1] f [ y][x 1] y f f [ y 1][x] f [ y 1][x] x f y f 2 2 簡易版 x f y f 1 tan y f x f 縦方向のエッジだけ検出 横方向のエッジだけ検出 エッジの方向に依存しない 勾配の大きさを計算 勾配の方向 特徴抽出フィルタ 濃度差のエッジ検出:画像の微分 一次微分(勾配:gradient) 演習3.3の計算を行いなさい。 式(3.6)の実習をしましょう。 image_processing5.cを利用します。 imgfilter2.hに関数定義します。 void Eqn3_6x(void) void Eqn3_6y(void) y方向微分です。フィルタオペレータを完成させてください。 void Eqn3_6(void) x方向の微分です。フィルタオペレータを完成させてください。 式(3.7)で勾配の大きさを出力します。式を完成してください。 Lenaでエッジ検出の効果を確認してください。 エッジを黒画素で表示する場合はInverse()を実行してください。 特徴抽出フィルタ 濃度差のエッジ検出:画像の微分 一次微分(勾配:gradient) x方向微分 y方向微分 縦エッジ検出 横エッジ検出 式(3.6)の結果 勾配の大きさ 特徴抽出フィルタ 一次微分フィルタ:Roberts Δuf Δvf 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 -1 1 0 斜め方向の画素の濃 度差を利用 Δuf はx方向の微分, Δvf はy方向の微分と して扱われる 特徴抽出フィルタ 一次微分フィルタ:Prewitt Δx Δy 1 1 1 0 -1 0 -1 0 -1 1 1 1 0 0 0 -1 -1 -1 8近傍を有効に利用 する Robertsのように一カ 所の差分を求めるよ りは,比較的局所的 な雑音の影響が少な い 特徴抽出フィルタ 一次微分フィルタ:Sobel Δx Δy 1 2 1 0 -1 0 -2 0 -1 1 2 1 0 0 0 -1 -2 -1 中央の重みを大きく する 傾きを大きく計算する ことになり,エッジが 強調される Prewittより検出感度 が高いフィルタ 重みは大きい程良い のか? 実習 void Roberts(void),void Prewitt(void),void Sobel(void)を完成しなさい。ただし,これらの関 数は勾配の大きさのみ出力します。 lena.rawの処理結果を比較しなさい。Inverse() を実行してエッジが濃く表示されるようにすると分 かり易いです。 ノイズがある場合(lenan20.raw)の処理結果を比 較しなさい。 ノイズがある場合について,平滑化フィルタ処理 後にエッジ検出するとどうなりますか? 結果 lena.rawの処理結果 Roberts Prewitt 低 Sobel 高 検出感度の違い 結果 lenan20.rawの処理結果 Roberts Prewitt 低 Sobel 高 ノイズに対する感度も高くなってしまう 差分=変化の割合≠濃度の大きさ こういう理由 ノイズ (振幅は小さいが傾き急峻) 元の画像 変化の割合 元の画像 正の大きい傾き ノイズの方が 目立つ!! 微分された画像 負の大きい傾き 微分された画像 結果 平滑化処理(移動平均)後のエッジ検出 Roberts Prewitt Sobel 平滑化してノイズレベルをならしてからエッジ検出 演習3.4 表3.5の代わりに,square10.rawを利用し ます。 PrewittフィルタとSobelフィルタをかけて, その結果を比較しなさい。 演習3.4結果 square10.raw Prewitt Sobel 最大濃度 120 最大濃度 160 特徴抽出フィルタ 一次微分フィルタ:線検出フィルタ 縦線検出 -1 1 -1 -1 1 -1 -1 1 -1 横線検出 -1 -1 -1 1 1 1 -1 -1 -1 線幅1の縦線,または 横線の検出が可能 検出したい形状に合 わせて1,-1を配置す ることにより任意の形 状の検出が可能 -1をすべて-1/2で置き 換えると,エッジ検出 も可能 線検出,演習3.5, 演習3.6 表3.4の線検出オペレータで,線幅1の線が検出可能である 理由を考えましょう。 -1を-1/2にすることでエッジが検出できる理由を考えましょう。 関数Longitudinal_line(), Lateral_line()を完成させ, grid.rawまたはsquare.rawを入力画像としたときの出力画 像を示し,線幅1の線のみが検出できることを確認してくださ い。 関数Oblique_line()を完成させ,線幅1の斜線が検出できる ことを確認してください。 関数Longitudinal_edge(), Lateral_edge()を完成させ,同 様な実験を行い,エッジが検出できること,線幅1の線の検 出は出来ないことを確認してください。 線検出フィルタ 線幅1の線が検出できる理由 幅1の線の時のみ,フィルタ 出力が正になればよい。 -1 1 -1 -1 1 -1 -1 1 -1 フィルタ出力は3 フィルタ出力は0 幅1の領域のみ正の係数とし (+1とする),他を負の係数とする。 幅2の線の場合に出力を0以下に するためには,幅1の領域の係数 を相殺する係数を設定する。 -1より小さい係数を設定すれば 良い。 幅3の場合は,明らかにフィルタ 出力は負となる。 線検出フィルタ エッジが検出できる理由 エッジを検出するためには,幅2の線の 場合に出力を正にする必要がある。 -1/2 1 -1/2 -1/2 1 -1/2 -1/2 1 -1/2 フィルタ出力は0以下 フィルタ出力は正 相殺されるように設定した負の係数を大 きくし,出力が正になるようにする。 しかし,幅3の場合には出力は0以下で なければならない。 幅3の場合にはフィルタ出力が0以下に なるようにフィルタ係数を設定する。 -1より大きく,-1/2以下の間で設定すれ ば良い。 例えばこんな結果になります grid.raw Longitudinal_line( ) square.raw 中間テストについて 5/28,3限目は自習,4限目にテストを行います。 場所: 6B-101 座席はこちらで指定します 時間:60分(15:10-16:10) 範囲はp.1-p.36(ただしプログラムリストは省く) プログラムを書かせる問題は無し 教科書にない内容についても出題しない 内容と配点 教科書の類似問題(教科書本文の穴埋めと演習問題から出題) 50点分(穴埋めは選択肢無し,太字のキーワードを中心に) 教科書を理解していれば解ける問題 30点分 深く考えさせる問題 20点分
© Copyright 2024 ExpyDoc