先日、画像がプログラムの中でどのように表現されており、
画像の特徴がどのように表現されているか、について記載しました。
今回は、画像に対しどのような処理が存在するのか、ご紹介したいと思います!
画像処理手法一覧
グレースケール
画像を輝度情報のみで表現します。
そのため、明るい画素は白っぽく、暗い画素は黒く表現されます。
色情報が失われるため、処理において色が必要でないとき等は処理対象となる画像が軽くなります。
また、色情報を落として、物体の形だけわかるようにデータを軽くして、処理を高速化したい場合にも使われます。
プログラムは以下に掲載しています!
二値化
一番、シンプルな処理です。
カラフルな画像を2色で表現する処理です。
画素に含まれるRGBAの値や、輝度情報を用いて、
ある閾値以上であれば白、その他は黒という処理を行います。
(もちろん、白黒である必要はなく、他の色でも大丈夫です)
画像によってはうまく閾値を調整すれば、画像の背景と前景を分離することができます。
プログラムはこちら
膨張・収縮処理
主に二値化処理が行われた画像に対して行われます。
注目している画素に対して、その周りの画素の状態から注目している画素を白にするか黒にするか決定します。
注目している画素の周りに白があれば、注目している画素を白にする処理を膨張処理、
注目している画素の周りに黒があれば、注目している画素を黒にする処理を縮小処理と呼びます。
例として、注目画素の周囲8近傍(上下左右)の画素の状態をもって処理を行った場合を以下に示します(真ん中の画素が注目画素です)。
ラベリング処理
二値化処理で得られた白黒画像に対し、白の塊(もしくは黒の塊)ごとにラベルを振ります。
これにより、二値化により背景と複数の物体を分離させたときに、物体ごとに固有のラベルを割り振ることができます。
勾配の計算
勾配と書くと難しく聞こえますが、要は画素を横や縦に見ていったときに、
どのようにRGB値や輝度が変化しているかを計算することを指します。
用途としてはエッジ検出等に使われます。
(うっすら白線が見えますでしょうか,,,?)
ハフ変換
画像中から直線や円を検出する処理です。
厳密なアルゴリズムについて説明すると、
「極座標空間において、rとθを一定の範囲内で,,,」
と眠たくなってしまうのでやめておきますね。
出力結果はこんな感じです~。画像は引用させていただきました。
OpenCVとVisual C++による画像処理と認識(8)—– Hough変換を用いて、直線と円を検出する —– より引用
ノイズ除去
画像上のノイズを除去します。
ノイズ除去の方法として、さまざまな方法があります。
例えば、
- ラベリング処理を行った後、同一のラベルが割り振られた領域の面積から小さいものを除去する
- 収縮を繰り返しノイズを除去した後、膨張処理で復元する。
- 周波数解析を行い、除去したい帯域を削る
こちらについては、以下の記事をご参考ください。
さいごに
ざっと思いついた処理を挙げてみました。
今回ご紹介した処理以外にも、空間フィルタリングがあります。
そちらに関する記事も掲載していますので、ご参考ください。
画像処理はこんなことができるんだなぁということをわかっていただけると幸いです。
ではでは!
コメント
[…] 先日画像処理に関する記事を掲載いたしました。 […]
[…] […]