大規模データ処理への展開

 9,316 x 6,218 画素 ⇒  57,926,888 オブジェクト化

オリジナル画像
図1、NASAのサイトからダウンロードした画像(10%に縮小して表示:原画は 9316x6218 画素)
        http://www.nasa.gov/sites/default/files/thumbnails/image/23915159644_7c3247d4a7_o.jpg

色情報で領域分割後、ラベリング処理、疑似カラー化
図2、色情報を使って領域分割した画像に対して多値データ対応ラベリング処理を行い、各領域に疑似カラーを割り当てた画像

原画像をラベリングされた領域毎に平滑化
図3、ラベリングされた画像と原画像を比較し、識別領域毎の平均カラーを算出して、識別領域を平均カラーで置き換えた画像


この画像データ(図3)から、オブジェクトを生成し、ランダムに並び替えた後、二つのオブジェクトに対して下記の条件で
グループ化を行えは、カラー画像に対するラベリング(多値データの4連結ラベリング処理 図2)と等価な結果が得られる。
 1、選択された二つのオブジェクト中の、色情報要素に、同じ値を持っている。
 2、選択された二つのオブジェクト中の、座標情報において、下記条件を満たす。
   x の値が等しく、yの値が±1の範囲に収まるか、又は yの値が等しく、xの値が±1の範囲に収まる。
 3、全ての組み合わせに対し、上記条件 1,2 を満たす比較処理が行われ、結果を反映(グループ化)する。


画像を不規則なオブジェクト化する方法は、以下の通り
1、オブジェクトの要素を定義する。
   typedef struct OBJECT { int value, x, y, lx, ly, group_id, random; } OBJECT;
2、原画像の画素数( lx X ly 個 )分のオブジェクトを生成する。
3、生成したオブジェクトに、画像情報を登録する。(この時点でオブジェクトには、登録順の位置関連性が存在している)
4、OBJECT random 要素に乱数を登録する。
5、全オブジェクトを random 要素で、ソート処理を行う。(この時点でオブジェクトは、不規則な並びに置き換えられる)


画像をオブジェクト化後ランダムに並び替えたデータの画像化
図4、ランダムに並べ替えたオブジェクトからの要素を、座標原点より lx 方向に並べ、更に y 方向に ly 回繰り返し生成した画像

このオブジェクトデータを、前記ルールでグループ化すると、画像処理における多値ラベリング処理と等価な結果が得られる。
画像処理の場合、識別番号はラベル番号と呼ばれ、ラベリング処理はこの番号を付与する処理である。 
本処理においては、条件を満たすオブジェクトを纏めてグループ分けするので、この処理でグループに割り当てる識別番号は、
グループID と呼ぶ。
グループIDは、ラベル番号と同様に数値なので識別性は高くない。画像処理で、ラベル番号を疑似カラー化する手法を流用し、
グループID を画像表示に適した疑似カラー化を行う。グループ番号を疑似カラー化して画像を構築しても、図4と同様に配置
され、適応したルールが正しく反映されてグループ化が行われたかを判断する事は出来ない。
本問題を解決する為に、オブジェクトの要素である、座標情報を用いて画素の再配置処理を行う。もし、グループ化のルール
が正しく適応され、正しいグルーピンングがされたなら、グループIDを疑似カラー化し画像の画素データとした後、画素の再配
置処理を行えば、図2 と等価な画像が得られる。

ラベリング処理で割り当てられたラベル番号と、グループ化処理で割り当てたグループIDには何ら関連性が無い。
それ故、2種類の番号は全く異なった値となる。同じ疑似カラー手法を用いても、割り当てられた番号が異なるため、
同じ疑似カラーになる事はなく、その領域の形状のみが同じ(ラベリング処理と等価なルールを使用しているので)になる。


後は、グループ化処理を実行するのみ。       なのですが...