『OpenCVによる画像処理入門』のまとめ続き。
フィルタ処理
画像処理において、入力画像の「画素値」だけでなく、「その周り(矩形)の画素値」も利用して出力を求める処理を空間フィルタ処理と呼ぶ。
例えば、以下のようなフィルタを作り、入力画像の全画素に対してフィルタを適用する。
表の数値は重み付けの値であり、入力画像の1つ1つの画素に対して、(その画素×-8)+(右隣の画素×1)+(下の画素×1)..のように計算を行い、出力画像を生成する。
周りの画素も考慮して変換するため、画像のノイズ(周りが白いのに1画素だけ黒くなっているような点)をぼかしたり、画像の画素が急激に変わる部分だけを取り出して輪郭を検出するのに使える。
例はすべて白黒画像であり、カラー画像の場合は、チャンネルごとにフィルタ処理を行う。
フィルタ処理の種類
空間フィルタ処理には、矩形(1画素の周りを含めた9画素)の重み付けに積和演算を用いる「線形フィルタ処理」と積和演算以外を用いる「非線形フィルタ処理」がある。
線形フィルタ処理の公式
g(i,j):出力画像、f(i,j):入力画像、h(m,n):m列n行目の重み付け係数
元画像:https://www.visco-tech.com/newspaper/column/detail19/
上で書いたように、入力画像の1つ1つの画素に対して、(その画素×フィルタの真ん中の係数)+(右隣の画素×フィルタの右隣の係数)+(下の画素×フィルタの下の係数)..のように計算を行い、出力画像を生成する。
また、フィルタ計算の種類とは別に、目的によってもフィルタ処理は分類される。代表的なものに「平滑化フィルタ処理」と「エッジ検出フィルタ処理」がある。
平滑化フィルタ処理
平滑化フィルタ処理は、画像を滑らかにする処理で、画像をぼかしたり、ノイズ除去などに使用される。
<線形フィルタ処理>
平均化オペレータ:周辺の画素値の平均を計算し、注目画素の画素値とする。オペレータのサイズによってぼやける。
加重平均オペレータ:注目画素に近いほど重みをつける。注目画素の度合いを維持できる。
バイラテラルオペレータ:注目画素との近さ+注目画素との画素の差に応じて重み付け。輝度が近い範囲だけ適用されるため、エッジ(輪郭)部分はそのまま残すことができる。
<非線形フィルタ処理>
中央値フィルタ処理:注目画素の周辺の画素値をソートし、中央値を画素値をする。ノイズ除去に効果的。
やってみた。
平均化オペレータ(サイズ(3,3) = 矩形のサイズを3×3とする)
中央値フィルタ処理
ノイズ画像を使ってないのであまりありがたみがわからん。
エッジ検出フィルタ処理
画像の中で急激に変わった部分を取り出す処理。
微分オペレータ:画素値に対して微分演算を行い画素の勾配を求め、大きな勾配を持つ部分を抽出することで画像の境界を際立たせる。
Sobelオペレータ:微分オペレータ+平滑化
2次微分オペレータ:2次微分を用いて境界をさらに際立たせる。
鮮鋭化フィルタ処理
入力画像から2次微分画像を引くと、輪郭が消え、急激に画素値が変化する画像が出来上がる。
画素値の変化を強調することで鮮明な画像を得る処理を鮮鋭化という。