全体説明
[2値ブローブ解析]


解析可能画像サイズ

本ブローブ解析ライブラリは、画像の幅、高さ共に 65535 以下の2値画像を 解析可能です。但し fnFIE_measure_execute() にて offset値を0以外に設定する場合には、 下記の制限が発生します。offsetを付加した画像の座標範囲、

が、それぞれ

を満たしていなければなりません。

これらの関係を図示すると、下図のようになり、 解析領域は、図の赤で示す領域の中に入っている必要があります。

measure_coordinate_max.png


解析対象色

本ブローブ解析ライブラリでは、解析時に前景色のみを解析するか、 又は前景色と背景色の両方を解析するかを選択することが出来ます。 (F_MEASURE_PARAMScolor_mode を参照。) 通常は前景と背景両方を解析するモードを設定することを推奨しますが、 処理時間に対する要求が厳しく、且つ前景のみ解析出来れば良い場合は、 前景のみの解析モードとすることで、処理時間の短縮を図ることが出来ます。

但し前景のみの解析モード(単色解析モード)の場合、背景を解析しないため親子関係を構築しません(下図)。 そのため、親子関係を利用する一部の特徴量は計算することが出来ないため注意してください。 (どの特徴量が計算不能かどうかは 特徴量 の表と各計算関数のドキュメントを参照)

measure_color_mode.png

Fig. 解析色モードによる親子関係の違い


背景

本ブローブ解析ライブラリでは、解析対象領域(画像)の外側には、 ブローブ番号0番の背景色ブローブが広がっていると定義しています。(下図参照)

measure_background1.png

この領域の外側と連結する背景色ブローブを「背景ブローブ」と呼び、 特殊な扱いをします。背景ブローブはブローブ番号が必ず0番になります。 背景ブローブが1画素も存在していない時でも、0番ブローブは 背景を指す番号として存在し、この場合は0番はヌル領域を指し示します。 また親子関係において、0番ブローブは必ずツリーの最上位となります。

但し、解析対象色の設定(F_MEASURE_PARAMScolor_mode )で、 前景色のみを解析するよう設定した場合は、 0番ブローブは存在するものの、常にヌル領域となります。

measure_background2.png

上図は解析対象色に前景=白、背景=黒を指定したときの例です。 このとき、青で示した領域は、解析領域の外側の0番ブローブと 連結していると見なせるため、0番ブローブとなります。


連結条件

連結条件とは、ある画素とその近傍にある画素が同一ブローブに属しているかどうかを決定する条件です。 本ブローブ解析ライブラリでは、画素の連結条件として、4連結と8連結を選択する事が出来ます。 4近傍の画素に対して連結をさせる場合を4連結、8近傍の画素に対して連結をさせる場合を8連結と呼びます。

measure_connectivity1.png

例えば、下図の黒画素について考えると、4連結の場合は5個のブローブとなり、 8連結の場合は、1個のブローブとなります。

measure_connectivity2.png

連結条件の設定は fnFIE_measure_execute() 実行時に F_MEASURE_PARAMS の neighborhood にて行います。 解析対象色の設定(F_MEASURE_PARAMScolor_mode )で、 前景と背景の両方を解析するよう設定した場合、前景の連結条件と、背景の連結条件は逆になります。 つまり、前景の連結条件として4連結を指定した場合、背景の連結条件は8連結に。 逆に、前景の連結条件として8連結を指定した場合、背景の連結条件は4連結になります。

この事は、下図の真ん中(青部)のブローブについて考えれば、何故そうしなければいけないのか自明です。

measure_connectivity3.png

白を4連結として考えると、上図青部は赤部と連結しないことになるため、 青部は緑部の子供にならなければ矛盾します。ということは、緑部(つまり黒)は8連結でなければなりません。 逆に白を8連結として考えると、上図青部は赤部と連結することになるため、 緑部は青部と赤部を合わせたブローブの子供にならなければ矛盾します。ということは、 緑部(つまり黒)は4連結でなければなりません。

参照:
fnFIE_measure_execute(), F_MEASURE_PARAMS

親子関係

親子関係とは、ブローブの幾何的な位置関係を木構造にて表したものです。 あるブローブAがあったときに、このブローブAの穴ブローブをブローブAの子供と呼びます。 逆に、この穴ブローブから見たブローブAを親と呼びます。 また、同じ階層にあるブローブ同士は兄弟と呼びます。

measure_hierarchy1.png
上図において、1,2,3 はそれぞれ兄弟ブローブです。 また、1,2,3の親は0であり、0の子供は 1,2,3 です。

全てのブローブにはブローブ番号が割り振られており、この番号によるリンクによって親子関係の木構造は取得できます。 但し、全てのリンクは1対1の関係で表されるため、親から子への関係など1対多の関係を取得する際には リンクをたどって行くことになります。各リンクの取得には、次の関数をそれぞれ利用します。

上図のブローブ例でのリンクを表したのが下図です。
measure_hierarchy2.png
fnFIE_measure_get_child() で取得される子供リンクは1番目の子供となります。 全ての子供を取得するには fnFIE_measure_get_child() で1番目の子供を取得した後、 その子供の兄弟を fnFIE_measure_get_sibling_next() 又は fnFIE_measure_get_sibling_back() にて 辿っていくことで取得します。また、兄弟リンクは双方向循環リストになっており、 リンクをたどっていくと自分に戻ってきます。 なお、兄弟の順番、及び、親からリンクされる子供(=兄弟のうちどのブローブが親から子としてリンクされるか) には特別の意味は無く、処理の都合によって決定されるものです。

また、全てのブローブは背景の子供か又はその子孫になるため、 親子関係の木構造のルートは必ず0番ブローブになります。 0番が背景以外のブローブに割り当てられる事はないため、 0番から順に親子関係の木構造を辿っていけば全てのブローブを参照できます。 背景の項でも述べたとおり、背景が1画素も存在していない場合や、 解析対象色の設定(F_MEASURE_PARAMScolor_mode )で前景のみ を解析対象とするよう設定した場合でも、0番ブローブは存在するため、 この事は成り立ちます。

解析対象色の設定(F_MEASURE_PARAMScolor_mode )で前景のみ を解析対象とするよう設定した場合は、全てのブローブは0番の子供となります。


有効/無効ブローブ

fnFIE_measure_continue() を使用する場合は、無効ブローブが現れます。 無効ブローブとは、元々有効ブローブとして存在していたブローブが、 fnFIE_measure_continue() によって追加された部分によって 他のブローブに連結するなどして無くなってしまったブローブのことを言います。 あるブローブが有効ブローブか無効ブローブかどうかを調べるためには、 fnFIE_measure_get_is_valid() 関数を使用します。 無効ブローブは親子関係の木構造から切り離されるため fnFIE_measure_get_parent() などの リンク取得関数でリンクを取得することは出来ません(エラーになる)。 また、特徴量も取得することは出来ず、取得しようとした場合はエラーになります。


領域の取得

解析後のブローブに対して後処理を行いたい場合は、 そのブローブのリージョンを取得して処理を行います。 ( fnFIE_measure_get_region() を参照 ) 濃淡特徴量を取得したい場合も、ブローブの領域をリージョンオブジェクトとして 取得し、それを使用して処理を行います。


特徴量

本ブローブ解析ライブラリで取得可能なブローブの特徴量は下表の通りです。

特徴量 取得関数 内部保存 単色解析

ブローブ色fnFIE_measure_get_color()
面積 面積(穴を含まない) fnFIE_measure_get_area()
面積(穴を含む)fnFIE_measure_get_area_with_hole()×

穴数fnFIE_measure_get_hole_num()×
穴面積fnFIE_measure_get_hole_area()×
穴面積比fnFIE_measure_get_hole_ratio()×

子供距離最大・最小・平均fnFIE_measure_get_distance_to_childs()××

隣接エリア
(兄弟エリア)
隣接エリア間距離 最大・最小・平均 fnFIE_measure_get_distance_to_siblings()××
隣接エリア数fnFIE_measure_get_sibling_num()××

x/y座標最大最小 fnFIE_measure_get_xyrange()
fnFIE_measure_get_maxminpos()

モーメント 1次モーメントfnFIE_measure_get_moment1()
2次モーメントfnFIE_measure_get_moment2()
3次モーメントfnFIE_measure_get_moment3()×
N次モーメントfnFIE_measure_get_moment()×
重心2次モーメントfnFIE_measure_get_central_moment2()×
重心3次モーメントfnFIE_measure_get_central_moment3()×
重心N次モーメントfnFIE_measure_get_central_moment()×
Huモーメント不変量fnFIE_measure_get_hu_moments()×

重心 fnFIE_measure_get_center()

慣性等価楕円 主軸長・副軸長・主軸角・主軸/副軸長比 fnFIE_measure_get_equivalent_ellipse()

等価円 面積等価円 fnFIE_measure_get_equivalent_disk()×
周囲長等価円fnFIE_measure_get_equivalent_circle()×

外接長方形(角度0) 頂点座標x/y座標最大最小 と等しい------
縦・横長fnFIE_measure_get_xydiff()
面積fnFIE_measure_get_rect1_area()
縦横比fnFIE_measure_get_rect1_lratio()
面積比fnFIE_measure_get_rect1_sratio()

外接長方形(慣性主軸と平行) 頂点座標fnFIE_measure_get_rect2pos()×
角度等価楕円の主軸角と等しい------
縦・横長fnFIE_measure_get_rect2_size()
面積fnFIE_measure_get_rect2_area()
縦横比fnFIE_measure_get_rect2_lratio()
面積比fnFIE_measure_get_rect2_sratio()

外接長方形(指定角) 頂点座標 fnFIE_measure_get_bounding_rotated_rect_pos()×

フェレ径 角度指定 fnFIE_measure_get_feret_diameter()×
最大最小フェレ径 長さ・角度fnFIE_measure_get_feret_diameter_maxmin()×

周囲長 fnFIE_measure_get_perimeter()

面積周囲長比 Peround真円度#1と同じ。------
PPSfnFIE_measure_get_pps()×

凸包 頂点座標 fnFIE_measure_get_convex2d()×
面積・周囲長fnFIE_measure_get_convexfeature()×
面積比・周囲長比fnFIE_measure_get_convexratio()×

最小外接円 fnFIE_measure_get_circmcircle()×

境界座標点列 fnFIE_measure_get_boundary()×

外周距離 最大・最小・標準偏差 fnFIE_measure_get_distance_to_boundary()

真円度 #1fnFIE_measure_get_circularity1()×
#2fnFIE_measure_get_circularity2()×
#3fnFIE_measure_get_circularity3()×


Documentation copyright © 2009-2024 FAST Corporation.
Generated on Fri Aug 9 16:38:47 2024 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2