画像からデータを計測するのに、ラベリング処理を行う


ラベリング処理用のアプリケーションソフト         (2009/03/02)

画像データからの特徴量計測  で触れた、画像データから特徴量を計算できるように、対象物を識別
 (ラベリング)するソフトを提供しますので、興味のある方はご利用下さい。
 対象物を識別するラベルに、連続した番号を割り当てる方式に変更したバージョンも用意しました。
 ラベル番号の最大値は、画像上の対象物の数に相当します。 (2009/05/01)
 基本概念は、"Let's begin の・画像処理事始 『4、8連結のラベリング処理(簡易実装のソースを含む)』”
 を参照下さい。

obsolete New 高速ラベリングソフトウエア+α  2010/05/05
画像処理事始 を参照 4,8連結のラベリングソフト 2011/05/08
(教科書的実装:C言語のソースコード及びWindows用実行形式)
LabelingCrystSlow2.zip
(41,699byte)'09/05/01
連続ラベル番号割り当て
md5: 3f57db37c2aaeb283317778546de0eed
sha1: 9a17a291594aacbd469805ad0afd6b91bc021771
LabelingCrystSlow.zip
 (41,458byte)
md5: 1dfce93257f5dfd434450cd7795fc6d2
sha1: 828ce9d900ed60238115d05ee2d7d7e0b59c5685


はじめに

コンピューター画像処理では、画像データから対象物を特定し特徴量を計算する事は重要な機能です。
この機能を実現する為に、多くの基礎的な技術が培われて来ました。  基本的な処理手法の1つである
ラベリングも、自作しようとすると、若干敷居が高いかもしれません。

ここでは、誰でも画像処理を自分で試せるように、簡単なツール(プログラム)を用意してみました。
これらのプログラムにより、簡単に画像のラベル付けと、対象物の識別が出来ますので、色々と試して
みて下さい。 また、ラベル情報もディスクに保存されますので、自分自身でプログラムを書いてみては
如何でしょうか?  きっと理解が深まると思いますし興味も増すと思います。


画像に関して

画像は画素(ドット pixel )と呼ばれる単位で構成され、横方向と縦方向に並べていく事で、画像が構成されます。
また、画素は個別の色情報を持っています(カラー画像、濃淡画像、擬似カラー画像、白黒二値画像)。
ここでは、1画素が32ビット(RGB各8ビット+8ビットの予約部)の形式を標準形式として採用しています。

画像の構造

拡大してみると、かなりギザギザが目立ちます。 
画素の解像度を上げる(細かくする)ことで、より精細な表示が可能になりますが、データ量が増大します。また、アンチエイリアシング(antialiasing)処理(濃淡差ををつける)により、目立たなく出来ます。
 
画像対象物

此処では、画面上の黒い部分を背景部分、白い部分(0以外の部分)を対象部分ととします。 この絵の中では、イの部分を独立した1つの対象物、丸い円部をを別の対象物とします。
(包括関係は考慮されません)


ソフトに関して

アプリケーションソフトは、以下の2つのプログラムから構成されています。
LabelingCrystSlow.exe
pickupLabeledImage.exe


また、以下のファイルが同胞されています。
sample.bmp 画像解析処理用のサンプルBMPファイル
sample.c LabelingCrystSlow.exe が生成した、解析データファイルを使って、独自処理を実装する
為のサンプルソースコード(C言語)。 pickupLabeledImage 処理相当のサンプル。


LabelingCrystSlow

LabelingCrystSlow.exe は、24ビット又は32ビットのBMPファイルを読み込み、画像中の対象物を
コンピュータで識別可能にするのに、個々の対象物毎に識別用の番号を割り当て、結果をファイルに保存
するプログラムです。 内部では、古典的なラスタースキャン方式の連結性解析※1 を行っていますので、 
1000x1000画素の画像に対象物が500個程度含まれる場合で3秒程度、2000x2000画素の画像に
対象物が1500個程度含まれる場合で20秒程度、(図形の形状によってはそれ以上)の時間がかかって
しまいますが、通常の使用であれば、1~3秒程度で処理が完了しますので、利用において支障は無いと
思われます。
(高速化アルゴリズムを使用時は、 2K*2K でも、1秒以内(50ms程度 Core2 Duo E7200 2.53GHz)で完了)
標準版及び高速版は、独自実装なので参照コードは存在しません が、基本的な周知アルゴリズムの
為、他のコードとの類似性を完全に否定はできません。
※1 連続するX軸方向(y=n、y=n+1)のデータを使用し、対象物か、他の対象物との連結性を評価する手法

LabelingCrystSlow は、処理対象の BMP ファイルを引数で指定して起動します。
LabelingCrystSlow.exe sample.bmp

LabelingCrystSlow を実行すると以下の、3つのファイルが作成されます。
LabeDataByCryst.raw 4バイト整数形式でLX、LY順に記録されたラベリング情報のファイル。
原画像及び、 LabelledImageByCryst.bmp  と位置関係は等価
AnalyticalResultByCryst.txt 対象物のナンバリングと、対象物に割り振られたラベル番号及び、個々の対象物の構成画素数が記録されたファイル。
個別の対象物を確認したい時は、このファイルに記載されている対象物のラベル番号と、画像データ(LabelledImageByCryst.bmp)、及びラベル情報ファイル(LabeDataByCryst.raw)を pickupLabeledImage で処理し、対象物を抽出した画像を作成し確認する。
LabelledImageByCryst.bmp ラベリング処理された画像中の対象物を、識別し易く、ラベル番号に対応して擬似的な色分けをした処理結果の確認用画像ファイル。

BMPファイルの輝度が0である部分を背景、それ以外の値を持つ部分を対象物と認識して処理を行います。
対象物が、画像のエッジ部分或いは、背景の輝度により囲まれていると、その領域を独立した対象物と認識
します。 複数の独立した部分(対象物)が存在する場合は、個々の対象物毎に異なる識別番号を与える必
要性が生じます。ここで重要となるのが連結性の解析です。 連結性の解析とは、対象となる特定画素の
隣接する領域に、対象物となる領域が存在するかを調べ、存在する場合は同一の対象物に属すると認識さ
せる処理です。
連結性の解析には、対象となる特定画素の上下左右4点を検査する4連結解析と、上下左右と斜め方向の
上下4点を加え計8点を検査する8連結解析の2通りがあります。このソフトでは、8連結解析による連結性
の解析を行っています。

pickupLabeledImage

pickupLabeledImage.exe は、画像データとラベル情報ファイルを元に、利用者が指定したラベル番号を
持つ対象物を強調表示した画像を生成するソフトです。このソフトを介して、利用者は計測結果ファイル中の、
対象物の番号、画素数、ラベル情報と、画像上の位置関係を視覚的に把握できるようになります。
この機能と等価な処理を実現するプログラムのソースコード(sample.c)が添付されていますので、利用者が
独自の処理を実装する事も可能です。

pickupLabeledImage は、BMP ファイル(Ex,LabelledImageByCryst.bmp)、BMPファイルに対応したラベリング
情報ファイル(Ex,LabeDataByCryst.raw)と、対象のラベル番号を引数で指定して起動します。 対象のラベル
番号は、 LabelingCrystSlow が作成した AnalyticalResultByCryst.txt 中に記録されています。

pickupLabeledImage.exe LabelledImageByCryst.bmp  LabeDataByCryst.raw  1

 

処理手順及び実行例

以下に示す例では、添付された画像データを LabelingCrystSlow でラベリング処理し、画面上にある対象物の
個々のデータを、 LabelingCrystSlow が計測結果を記録した AnalyticalResultByCryst.txt ファイルの中から
確認します。 今回は、対象物011(オブジェクト番号011、識別用のラベル番号15、構成画素数5833) に
興味を持ったので、この対象物が画面上のどのデータであるかを、pickupLabeledImage コマンドを使って確認
して見ます。 pickupLabeledImage に 画像データファイルと、ラベルデータファイル及び、対象物のラベル番号
を指定して実行します。 処理結果は画像ファイルとして書き出されます。 この画像中で、対象物は、255の
輝度で表現されます。それ以外の対象物は中間輝度で表示されますので、興味のある対象物と他の対象物
の位置関係も一目で判断できます。 pickupLabeledImage に相当のプログラムサンプル(sample.c) も同胞して
有りますので、興味の有る方はソースを読んで見てください。
D:\>LabelingCrystSlow.exe sample.bmp
D:\>more AnalyticalResultByCryst.txt
obj[001].Label = 1, Pixel = 8783
obj[002].Label = 2, Pixel = 2606
obj[003].Label = 3, Pixel = 128
obj[004].Label = 4, Pixel = 4107
obj[005].Label = 5, Pixel = 230
obj[006].Label = 6, Pixel = 169
obj[007].Label = 7, Pixel = 696
obj[008].Label = 8, Pixel = 2457
obj[009].Label = 9, Pixel = 12873
obj[010].Label = 10, Pixel = 718
obj[011].Label = 15, Pixel = 5833
obj[012].Label = 18, Pixel = 172
obj[013].Label = 20, Pixel = 153
obj[014].Label = 23, Pixel = 306
obj[015].Label = 34, Pixel = 1710
:
D:\>pickupLabeledImage.exe LabelledImageByCryst.bmp LabeDataByCryst.raw 15
D:\>%SystemRoot%\system32\mspaint.exe processed.bmp


pickupLabeledImage で、 ラベル情報ファイル LabeDataByCryst.raw から、ラベル番号 15 を
持つ対象物を抽出した画像

特定対象物の選択画像
 obj[011].Label = 15, Pixel = 5833





連結性に関する補足
基準点と近傍点
     
     
     
4連結
     
     
     
8連結
     
     
     
真ん中が、
現在の処理の起点
上下左右の4ヶ所が評価対象
オレンジ色の部分の4点が対象
下左右と斜め方向の上下
ピンク色の部分8点が対象

4連結接続している例

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
隣接する8画素において、上下左右の何れかの場所で接している場合。
8連結接続は、隣接する8画素において何れか一箇所以上の場所で接している場合。




添付されている、ラベル情報を利用するソフトに関する説明
sample.c
sample.c は、4つの関数から構成されている。
int  main( .... )
void processing( .... )
int  saveDataAsBMP( .... )
void img2image( .... )
main では引数を解析し、イメージとラベルの各ファイルをメモリー上のバッファーに読み込む。イメージ
ファイルは、ヘッダー部分(ファイルヘッダーと画像情報ヘッダー)及び、データ部分に分割管理される。
BMPファイルのデータ部は、内部処理用のバッファー(4バイト形式)に img2image() により転送される。
processing() は、内部処理用バッファーのデータ、ラベル情報データ、指定されたラベル番号を使用し
処理を行い、その結果を内部処理用バッファーに格納する。
最後に、saveDataAsBMP() が呼び出されて、処理結果が格納されている、 内部処理用バッファーのデータ
を BMP ファイルとして、外部に書き出し処理を終了する。


最後に

高度な画像処理も、基礎的な画像処理を積み重ねていく事で進歩して来ました。 ラベリング(連結情報)と原画像が
あれば、容易により高度な処理を実装する事が可能となります。 例えば、特定の色を何パーセント以上含む対象物
のみを抽出する。 特定の位置にある対象物の形状や大きさ色の測定など。 是非トライしてみてください。

コンピューター画像処理の分野に、深く興味をもってもらうきっかけとなれば幸いです。

また、本件に関しまて不具合等が見つかりましたら、対応に関しては未定で申し訳ありませんが vision@cryst.tv まで
ご連絡頂ければ幸いです。



go to TopPage go to CategoryTop