画像処理

「画像処理」二値画像の表現方法

本記事では二値画像の表現方法を紹介します。

さっそく見ていきましょう。

 

今回使用する2値画像は下の図です。画素の総数が8×8の64画素になります。

固定閾値法で2値化します。閾値を4として、4より大きい値を1、それ以外を0とします。

このときの出力される2値画像は、背景(0)が黒く、オブジェクト(1)は白くなる画像です。

本記事では、その2値化画像を画像Aと呼ぶことにします。

 

ラベリング

ラベリングとは、画像の中にある塊りごとにラベルを付けることをいいます。

ここでは、ピクセル値に1があるとラベルAを与えるとします。

すると、画像Aにラベリングすると下のようになります。

 

今回の図では、1つのオブジェクトにラベルAを与えました。

複数のオブジェクトがある場合は、異なるラベルを与えます。こうすると、1つの画像に複数のオブジェクトがあることがわかります。

ラベルは、各画素値が格納されている配列やメモリとは別に用意された配列やメモリに格納されます。異なる領域に属する画素に異なるラベルを割り当てるのです。

 

ラングレス符号化

ラングレス符号化は、連長圧縮とも言われ、連続する同一の値を,その連なり(run)の長さ(length)を示す数字に置き換えることを言います。

画像Aの行に着目して、順番に左から順に画素を確認していきます。下の図のように、それぞれの行の連続した数値(run)の長さ(length)で表していきます。

こうすることで、少ないビット数で表現できるようになります。

 

背景画素値が0、オブジェクト画素値が1、背景画素がオブジェクトの周囲に常に存在するという3つの前提がわかっているならラングレスの長さだけで表せます。

また、その前提条件なしの場合では、データ中のオブジェクトを連続する値で符号化していきます。

チェーンコード化

チェーンエンコードとは、2値画像データを符号化する手法の事を言います。また、オブジェクトと背景の境界をトラッキングし、方向に応じてエンコードします。

背景とオブジェクトの等高線(境界線)を抽出する方法は下記のステップで行います。

step1

ラングレス符号化のように左上から順にオブジェクト値1が出るまでスキャンしていきます。そして、画素値1が出たらスキャンを止めます。この画素がオブジェクトの始点となります。

step2

この始点画素を輪郭の一部として記録する。

step3

1画素前にスキャンした画素に戻ります。(0の画素ではなく、1の画素)

1回目ならstep3はスキップします。

step4

時計回りに周りのある8個の隣接画素をチェックします。画素値1が見つかったら、ステップ2に戻ります。

このstepの繰り返しにとって、画素値が1の等高線(境界線)を抽出することができます。

 

等高線をエンコードしていきましょう。

下図のChain Encoding Coding表で、等高線を符号化していきます。

始点となる画素(座標は(3,2))からChain Encoding Coding表に従って符号化します。

すると、(3,2) 0, 0, 1, 2, 3, 4, 3, 5, 6, 6, 7という結果になりますね。

 

 

特徴抽出

画像処理では、特徴抽出により次元削減をします。

面積、境界長、円形度、重心の特徴を計算していきます。例は先ほどと同じ二値画像です。

 

面積

面積とは、オブジェクトの面積の中の画素数のことです。つまり、画素値が1の画素の数の個数です。この場合は、18になります。

境界の長さ

境界線の長さは、境界線上のピクセル数になりますが、矢印の個数を数えたほうがわかりやすいです。

境界線が対角線のときは、長さは2の平方根を掛けたものになります。

したがって、対角線の矢印は6個で、対角線を除いた矢印は3個なので、境界線の長さは√2×6+3で11.5になります。

円度

円度=(境界線の長さ / 面積)の2乗

したがって、11.5の2乗/18で7.35になります。

重心

重心は、座標値の和を面積で割ったものです。

オブジェクトの座標の和を計算します。すると、(69,67)になるので面積18で割ると

(3.8,3.7)になります

-画像処理

Copyright© KunstMemorandum , 2022 All Rights Reserved Powered by AFFINGER5.