画像処理・実習 第四回: 濃度変換(ヒストグラム平坦化), 空間フィルタ(平滑化) 東海大学 情報理工学部情報メディア学科 濱本和彦 今回の内容 課題解説 前回の続き 濃度変換(ヒストグラム平坦化) 2. 空間フィルタ 3.1 空間フィルタリングの手法 3.2 平滑化フィルタ 実習 平均値フィルタ 加重平均フィルタ(ガウシアンフィルタ) メディアンフィルタ エッジを保持した平滑化フィルタ 出力画像の濃度値 課題解説 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 出力 階調数 •中間レベルは 引き延ばされる (隙間が発生) コントラストの改善(復習) 非線形な濃度変換 非線形な濃度変換 変換式が二次関数や対数を含む。 変換曲線が直線では表せない。 出力画像の濃度値 255 z z ' zm zm 0 255 原画像の濃度値 画像全体を暗くする場合 2 non_Linear_Transformの結果(復習) 式2.2,図2.5(a) 255 2000 2000 1000 1000 0 0 頻度 頻度 255 100 0 0 200 階調数 100 200 階調数 コントラストの改善(復習) 非線形な濃度変換 演習2.3(図2.5(b)について) 変換式を作りなさい。 出力画像の濃度値 255 z ' zm z 255 原画像の濃度値 画像全体を明るくする場合 Ensyu2_3bの結果(復習) 演習2.3(図2.5(b)) 2000 255 1000 0 0 頻度 頻度 255 2000 1000 100 0 0 200 階調数 100 200 階調数 濃度変換 ヒストグラムの平坦化 変換曲線による濃度変換 パラメータの決定方法をどうするか? すべての濃度値を有効利用していない(ヒストグラム の隙間問題)=濃淡が滑らかに変化しない,不自然 ヒストグラムの平坦化 全ての濃度値の画素数を同じ数に変更する(濃度レ ンジの有効利用=隣接画素で滑らかに濃淡変化) 連続的に濃度が変化する,違和感のないコントラスト 改善が可能 まず,各濃度レベルにおいて,どのレベルへ何画素分 移動(変更)するか決定する 次に,ある規則に基づき画素値を移動(変更)する 濃度変換 ヒストグラムの平坦化 平均画素数=画素数/濃度階調数 =(256×256)/256 =256 画 素 数 画 素 数 平均画素数 (256) 濃度レベル 濃度レベル 濃度変換 ヒストグラム平坦化の流れ 変更する画素数の決定 例:6階調,画像サイズ6×4=24画素,平均画素数=4 nmove[i][j]: 濃度レベルiから,濃度レベルj へ変更する画素数 ① hist[i]: 濃度レベルiの画素数 ①nmove[i][i]=hist[i],その他は全て0 平均画素数 0 1 2 3 4 ヒストグラム 5 濃度レベル 濃度変換 ヒストグラム平坦化の流れ 変更する画素数の決定 例:6階調,画像サイズ6×4=24画素,平均画素数=4 nmove[i][j]: 濃度レベルiから,濃度レベルj へ変更する画素数 ② hist[i]: 濃度レベルiの画素数 ①nmove[i][i]=hist[i],その他は全て0 ②nmove[1][0]=1, nmove[1][1]=7 平均画素数 0 1 2 3 4 ヒストグラム 5 濃度レベル 濃度変換 ヒストグラム平坦化の流れ 変更する画素数の決定 例:6階調,画像サイズ6×4=24画素,平均画素数=4 nmove[i][j]: 濃度レベルiから,濃度レベルj へ変更する画素数 ③ hist[i]: 濃度レベルiの画素数 ①nmove[i][i]=hist[i],その他は全て0 ②nmove[1][0]=1, nmove[1][1]=7 ③nmove[1][2]=3, nmove[1][1]=4 平均画素数 0 1 2 3 4 ヒストグラム 5 濃度レベル 濃度変換 ヒストグラム平坦化の流れ 変更する画素数の決定 例:6階調,画像サイズ6×4=24画素,平均画素数=4 nmove[i][j]: 濃度レベルiから,濃度レベルj へ変更する画素数 ④ hist[i]: 濃度レベルiの画素数,処理中変化 ①nmove[i][i]=hist[i],その他は全て0 ②nmove[1][0]=1, nmove[1][1]=7 ③nmove[1][2]=3, nmove[1][1]=4 ④nmove[2][3]=1, nmove[2][2]=1 平均画素数 0 1 2 3 4 ヒストグラム 5 濃度レベル 濃度変換 ヒストグラム平坦化の流れ 変更する画素数の決定 例:6階調,画像サイズ6×4=24画素,平均画素数=4 nmove[i][j]: 濃度レベルiから,濃度レベルj へ変更する画素数 ⑤ hist[i]: 濃度レベルiの画素数,処理中変化 ①nmove[i][i]=hist[i],その他は全て0 ②nmove[1][0]=1, nmove[1][1]=7 ③nmove[1][2]=3, nmove[1][1]=4 ④nmove[2][3]=1, nmove[2][2]=1 ⑤nmove[4][3]=1, nmove[4][4]=0 平均画素数 0 1 2 3 4 ヒストグラム 5 濃度レベル 濃度変換 ヒストグラム平坦化の流れ 変更する画素数の決定 例:6階調,画像サイズ6×4=24画素,平均画素数=4 nmove[i][j]: 濃度レベルiから,濃度レベルj へ変更する画素数 ⑥ hist[i]: 濃度レベルiの画素数,処理中変化 ①nmove[i][i]=hist[i],その他は全て0 ②nmove[1][0]=1, nmove[1][1]=7 ③nmove[1][2]=3, nmove[1][1]=4 ④nmove[2][3]=1, nmove[2][2]=1 ⑤nmove[4][3]=1, nmove[4][4]=0 ⑥nmove[5][3]=1, nmove[5][5]=8 平均画素数 0 1 2 3 4 ヒストグラム 5 濃度レベル 濃度変換 ヒストグラム平坦化の流れ 変更する画素数の決定 例:6階調,画像サイズ6×4=24画素,平均画素数=4 nmove[i][j]: 濃度レベルiから,濃度レベルj へ変更する画素数 ⑦ hist[i]: 濃度レベルiの画素数,処理中変化 平均画素数 0 1 2 3 4 ヒストグラム ①nmove[i][i]=hist[i],その他は全て0 ②nmove[1][0]=1, nmove[1][1]=7 ③nmove[1][2]=3, nmove[1][1]=4 ④nmove[2][3]=1, nmove[2][2]=1 ⑤nmove[4][3]=1, nmove[4][4]=0 ⑥nmove[5][3]=1, nmove[5][5]=8 5 ⑦nmove[5][4]=4, nmove[5][5]=4 濃度レベル 濃度変換 ヒストグラム平坦化の流れ どの場所の画素レベルをどのレベルに変更するか? 前の例では,濃度レベル5から濃度レベル3へ変更する 画素が1つ(nmove[5][3]=1),レベル4へ変更する画素 が4つ(nmove[5][4]=4)存在する。 濃度レベル5の画素は,9つ存在する。 どこの画素の濃度レベルを3にし,どこをレベル4に変更 するのか? いろんな方法が提案されている。 確率的に決定 周囲の濃度に応じて決定 プログラム例では,濃度の低い方から優先的に割り当て る。つまり,順に画素を走査しながら,最初に見つかった レベル5をレベル3へ変更し,次に見つかったレベル5を レベル4に変更する。 濃度変換 実習:ヒストグラムの平坦化 imggrayc2.h内にあるvoid Heitan(void)を利用し ます。 histogram[i] 濃度レベルiの画素数。ヒストグラム mean 平均画素数 nmove[i][j] 濃度レベルiからjに変更する画素数 cnt[i][j] レベルiからレベルjに変更済みの画素数 (実際の濃度レベル変更時に利用) 実際に画像のヒストグラムの平坦化を行い,そ の画像を元の画像と比較しましょう。また,ヒスト グラムが確かに平坦になっていることを確認しま しょう。 濃度変換 2000 頻度 頻度 ヒストグラムの平坦化 1000 0 0 2000 1000 100 200 階調数 0 0 100 200 階調数 空間フィルタ 空間フィルタリングの手法 フィルタリングとは? 特定の信号のみを通過させたり遮断したりするもの 雑音や歪みを遮断する(除去する) エッジ(輪郭)のみを通過させる(抽出する) 着目画素について,雑音を除くなどの処理をした新し い画素値を決定する 近傍処理(局所処理) 着目画素とその近傍の画素値から着目点の新しい画 素値を決定する 点処理 着目画素のみの画素値から新しい画素値を決定する (濃度変換) 空間フィルタ 空間フィルタリングの手法 j i * 8近傍 着目画素 着目画素の 新しい画素値 フィルタ係数 空間フィルタ 空間フィルタリングの手法 f [i 1][ j 1] a[1][1] a[1][1] f [i ][ j ] g[i ][ j ] * f [i 1][ j 1] フィルタ係数 着目画素 f [i 1][ j 1] と8近傍 着目画素の 新しい画素値 それぞれを9つの要素をもつベクトルと考え,内積を計算 1 1 g[i][ j ] f [i k ][ j l ] a[k ][l ] l 1 k 1 空間フィルタ 平滑化フィルタ 雑音の特徴は? 大きさが不規則で,狭い範囲で激しく変化する では,どのようにすれば目立たなくなる? 大きさが激しく変化しないようにする 周りの値で平均化し,ならす(平らにする) 平滑化フィルタ 空間フィルタ 平滑化フィルタ <平均値フィルタ> 1 9 1 a[ k ][l ] 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 フィルタ係数の総和は1と なるように設定する フィルタ係数全てが1/9 8近傍の画素値との平均 値を求めて新しい画素値 とする 移動平均法とも呼ばれる 雑音は軽減されるが,同 時に画像(特に輪郭部 分)がボケてしまう 空間フィルタ 平滑化フィルタ <加重平均フィルタ> 1 1 1 10 10 10 1 2 1 a[k ][l ] 10 10 10 1 1 1 10 10 10 フィルタ係数の総和は1と なるように設定する 着目画素のみ係数(重 み)を大きくする 出力に対する着目点の寄 与率が大きくなるためボ ケを多少は軽減できる 代表的なものにガウシア ンフィルタがある 空間フィルタ <加重平均フィルタ> ガウシアンフィルタ ガウス分布 x2 y2 G ( x, y ) exp 2 2 2 2 2 1 24 24 2 12 a[ k ][l ] 24 24 2 1 24 24 1 1 24 2 24 1 24 N回適用することで,標 準偏差σがsqrt(N)に比 例するようなガウシア ンフィルタの効果を得 ることが可能な近似的 フィルタ 空間フィルタ <加重平均フィルタ> 演習3.1 1 1 1 フィルタ係数の総和は 11 11 11 1となるように設定す 1 3 1 る a[k ][l ] 着目画素のみ係数 11 11 11 (重み)を3とする 1 1 1 11 11 11 演習 20%のごま塩状のノイズを付加したlena画 像,lenan20.rawを利用。 Imgfilter.hをincludeすること。 imgfilter.h内の関数を完成させ,実行する。 mainは,image_processing4.cを利用。 演習 移動平均 void Moving_average(void)を完成しなさい lenan20.rawを処理した結果を表示しなさい 加重平均 void Ensyu3_1(void)を完成しなさい lenan20.rawを処理した結果を表示し,移動平均と比 較しなさい tmp_Image2[256][256]という配列を利用してい る理由は何でしょう? 結果 lenan20.raw 移動平均 加重平均 (演習3.1) 演習 ガウシアンフィルタ void Gaussian(void)を完成しなさい lenan20.rawを処理した結果を表示しなさい 3回連続でガウシアンフィルタをかけた結果を 出力し,1回のみの場合と比較しなさい 移動平均と加重平均の効果の違いについ て検討しましょう。加重平均では,着目画 素の重みが大きい程良いのでしょうか? 結果 lenan20.raw ガウシアンフィルタ 1回実行 ガウシアンフィルタ 3回実行 移動平均と加重平均 加重平均の極端な場合を考えましょう。 着目点の重みが1で,それ以外は0だとしたらど うなるでしょう? その出力は,入力と同じですね。 つまり,移動平均では雑音は減るがボケが発生 し,加重平均ではボケを抑制する代わりに雑音 が残ります。 加重平均では,このバランスが大事で,その代 表的なものがガウシアンフィルタというわけです。 空間フィルタ 平滑化フィルタ <メディアンフィルタ> 画素値の順に並べる 中央値(メディアン)を選択 着目画素 と8近傍 メディアンを着目画素の 新しい画素値とする 空間フィルタ <メディアンフィルタ> スパイク状の雑音を除去するのに有効 スパイク雑音は,他の画素値よりも大きい ため,近傍画素値を並べ替えたときに端に 寄る傾向にある メディアンを選択することにより除去できる スパイク雑音のみ除去でき,ボケの発生は ほとんどない(スパイク雑音が無い部分で はボケが発生する場合がある) 空間フィルタ <メディアンフィルタ> 演習3.2 ノイズを含む部分:値が上下 f [i] {...,0,0,1,0,1,8,6,8,8,....} 平均値フィルタの場合:ノイズは除去 エッジ部分 f [i] {...,0,0,1,3,5,7,7,....} エッジがボケている メディアンフィルタの場合:ノイズは除去 f [i] {...,0,0,1,1,6,8,8,....} エッジがボケていない 演習 メディアンフィルタ void Median(void)を完成しなさい lenan20.rawにメディアンフィルタをかけた結 果を出力しなさい 3回連続してメディアンフィルタをかけるとどう なりますか メディアンではなく,最大値や最小値を出力す るとどうなりますか 結果 lenan20.raw メディアンフィルタを メディアンフィルタを 1回かけた場合 3回かけた場合 メディアンフィルタ スパイク状のノイズを除去するのに有効 繰り返しフィルタをかけることにより,スパ イクノイズをほぼ完璧に除去できる ただし,既にスパイクノイズが除去された 領域については,画像がボケてしまう傾向 にある ノイズの特性と目的に応じたノイズ除去手 法を選択しなければならない 結果 lenan20.raw 最大値を選択した 場合 最小値を選択した 場合 空間フィルタ その他の平滑化フィルタ エッジ保存平滑化 領域1 領域2 領域3 領域4 9つの小領域 に分割 着目画素 と5×5近傍 領域5 それぞれの領域について, 画素値の平均と分散を求める 領域6 領域7 領域8 領域9 最も分散が小さい領域 の平均値を着目画素の 画素値とする 空間フィルタ エッジ保存平滑化 最も分散が小さい領域とは? 画素値がほとんど同じ領域であり,大きく異な る画素値(つまりノイズやエッジ)が無い領域 その平均値を着目画素の画素値とすることに より,エッジを保存した平滑化が可能 ただし,処理時間が他の手法より長い 演習 エッジ保存平滑化 void Edge_keep_smoothing(void)を実行し, 他の手法の結果と比較しなさい 結果 lenan20.raw エッジ保存平滑化 ガウシアンフィルタ (1回) 中間テストについて 5/22,4限目,教室は次回連絡します。 *3限目は復習(質問時間)とします。出席は自由です。 60分(15:10-16:10) 範囲はp.1-p.33(ただしプログラムリストは省く) プログラムを書かせる問題は無し 教科書にない内容についても出題しない 内容と配点 教科書の類似問題(教科書本文の穴埋めと演習問題から出題) 50点分(穴埋めは選択肢無し,太字のキーワードを中心に) 教科書を理解していれば解ける問題 30点分 深く考えさせる問題 20点分
© Copyright 2024 ExpyDoc