From: nyatla Date: Sat, 29 Jan 2011 14:34:01 +0000 (+0000) Subject: git-svn-id: http://svn.sourceforge.jp/svnroot/nyartoolkit/NyARToolkit/trunk@808 7cac0... X-Git-Url: http://git.osdn.net/view?p=nyartoolkit-and%2Fnyartoolkit-and.git;a=commitdiff_plain;h=01fcfa9219a4ed84155c7c51257d3d502dc7739f;hp=ff9ebf7efe05f8cd3167983fabd4fefc28f7d62b git-svn-id: svn.sourceforge.jp/svnroot/nyartoolkit/NyARToolkit/trunk@808 7cac0a50-4618-4814-88d0-24b83990f816 --- diff --git a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/mklib/ARTKMarkerTable.java b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/mklib/ARTKMarkerTable.java index 91f14e2..fdb5580 100644 --- a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/mklib/ARTKMarkerTable.java +++ b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/mklib/ARTKMarkerTable.java @@ -15,9 +15,7 @@ import jp.nyatla.nyartoolkit.rpf.realitysource.nyartk.*; * マーカパターンにID番号とメタデータを関連付けたテーブルを持ち、パターンの一致検索機能を提供します。 * テーブルには、ARToolKitフォーマットのマーカパターンと、ID番号、ユーザ定義のデータのセットを格納します。 * このクラスは、テーブルの操作機能と、テーブル要素の検索機能を提供します。 - *

サンプル- - * このクラスのサンプルは、{@link Test_NyARRealityGl_ARMarker}を見てください。 - *

+ */ public class ARTKMarkerTable { diff --git a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/mklib/ASyncIdMarkerTable.java b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/mklib/ASyncIdMarkerTable.java index a5a608b..cd1c382 100644 --- a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/mklib/ASyncIdMarkerTable.java +++ b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/mklib/ASyncIdMarkerTable.java @@ -21,9 +21,6 @@ import jp.nyatla.nyartoolkit.rpf.realitysource.nyartk.NyARRealitySource; * 但し、毎回外部サーバに問い合わせるとパフォーマンスの劣化が激しいので、実際には結果をキャッシュ * するなどの対策が必要になります。 *

- *

サンプル- - * このクラスのサンプルは、{@link Test_NyARRealityGl_AsyncIdMarker}を見てください。 - *

*/ public class ASyncIdMarkerTable { diff --git a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/mklib/CardDetect.java b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/mklib/CardDetect.java index 85d3512..4125eb7 100644 --- a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/mklib/CardDetect.java +++ b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/mklib/CardDetect.java @@ -1,8 +1,8 @@ package jp.nyatla.nyartoolkit.rpf.mklib; -import jp.nyatla.nyartoolkit.NyARException; +import jp.nyatla.nyartoolkit.*; import jp.nyatla.nyartoolkit.core.types.NyARDoublePoint2d; -import jp.nyatla.nyartoolkit.rpf.reality.nyartk.NyARRealityTarget; +import jp.nyatla.nyartoolkit.rpf.reality.nyartk.*; /** * 未知の矩形を認識するサンプル。 * 絶対的な寸法は求められないので、矩形の辺比率を推定して返します。 @@ -22,9 +22,6 @@ import jp.nyatla.nyartoolkit.rpf.reality.nyartk.NyARRealityTarget; *

ヒント- * 既知のカードを認識したいのならば、比率推定後にターゲットの模様からその絶対サイズを特定すると良いかもしれません。 *

- *

サンプル- - * このクラスのサンプルは、{@link Test_NyARRealityGl_CreditCardDetect}を見てください。 - *

*/ public class CardDetect { @@ -34,7 +31,7 @@ public class CardDetect */ public static class UnknownRectInfo { - /** 内部使用。推定している{@link RealityTarget}のシリアルID。*/ + /** 内部使用。推定している{@link NyARRealityTarget}のシリアルID。*/ public long _target_serial; /** 内部使用。成功回数のカウンタ*/ public int _success_point; @@ -52,15 +49,15 @@ public class CardDetect this._target_serial=NyARRealityTarget.INVALID_REALITY_TARGET_ID; } } - /** {@link #UnknownRectInfo}のステータス値。 このターゲットを推定するには、より正面から撮影が必要です。*/ + /** {@link UnknownRectInfo}のステータス値。 このターゲットを推定するには、より正面から撮影が必要です。*/ public final static int MORE_FRONT_CENTER=0; - /** {@link #UnknownRectInfo}のステータス値。矩形比率を推定中です。*/ + /** {@link UnknownRectInfo}のステータス値。矩形比率を推定中です。*/ public final static int ESTIMATE_NOW=1; - /** {@link #UnknownRectInfo}のステータス値。矩形比率を推定完了。io_resultのメンバ変数が利用可能です。*/ + /** {@link UnknownRectInfo}のステータス値。矩形比率を推定完了。io_resultのメンバ変数が利用可能です。*/ public final static int ESTIMATE_COMPLETE=2; - /** {@link #UnknownRectInfo}のステータス値。推定に失敗しました。変な形のRECTだったのかも。*/ + /** {@link UnknownRectInfo}のステータス値。推定に失敗しました。変な形のRECTだったのかも。*/ public final static int FAILED_ESTIMATE=3; - /** {@link #UnknownRectInfo}のステータス値。推定に失敗しました。入力値が間違っている?*/ + /** {@link UnknownRectInfo}のステータス値。推定に失敗しました。入力値が間違っている?*/ public final static int FAILED_TARGET_MISSMATCH=4; /** * この関数は、i_targetの矩形比率を推定します。 @@ -74,15 +71,15 @@ public class CardDetect *

{@link UnknownRectInfo#last_status}のステータス値について。 * ステータス値の意味により、アプリケーションが何をするべきかが変わります。 *

*

@@ -150,11 +147,15 @@ public class CardDetect return; } /** - * p1->p2とp2->p3の作る角のsin値の絶対値を得ます。 + * この関数は、ベクトル(p1-<p2)と(p2-<p3)の作る角のsin値の絶対値を得ます。 * @param p1 + * 点1 * @param p2 + * 点2 * @param p3 + * 点3 * @return + * sin値(0<=n<=1) */ public final static double getAbsSin(NyARDoublePoint2d p1,NyARDoublePoint2d p2,NyARDoublePoint2d p3) { diff --git a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/reality/nyartk/NyARReality.java b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/reality/nyartk/NyARReality.java index f32a942..2e9c84e 100644 --- a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/reality/nyartk/NyARReality.java +++ b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/reality/nyartk/NyARReality.java @@ -67,9 +67,6 @@ import jp.nyatla.nyartoolkit.rpf.tracker.nyartk.status.NyARTargetStatus; * 要らないものと消失した者はDeadステータスで終了します。UnknownステータスとKnownステータスの違いは、外部情報(マーカパターンに関する物理知識) * の有無です。Knownステータスのターゲットはより多くの外部情報により、Unknownステータスのターゲットよりも多くの情報を提供します。 *

- *

サンプル- - * {@link Test_NyARRealityGl_ARMarker}や、{@link Test_NyARRealityGl_IdMarker}が参考になります。 - *

*/ public class NyARReality { @@ -495,7 +492,7 @@ public class NyARReality * RTターゲットのシリアル番号を示す値。この値は、{@link NyARRealityTarget#getSerialId()}で得られる値です。 * @param i_dir * このRTターゲットが、ARToolKitのdirectionでどの方位であるかを示す値 - * @param i_marker_size + * @param i_marker_width * マーカーの高さ/幅がいくらであるかを示す値[mm単位] * @return * 成功すると、trueを返します。 diff --git a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/reality/nyartk/NyARRealityTargetList.java b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/reality/nyartk/NyARRealityTargetList.java index 9da40ba..5d381f1 100644 --- a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/reality/nyartk/NyARRealityTargetList.java +++ b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/reality/nyartk/NyARRealityTargetList.java @@ -23,7 +23,7 @@ public class NyARRealityTargetList extends NyARPointerStack /** * この関数は、シリアル番号をキーに、リストからターゲットを探索します。 * @param i_serial - * 検索するシリアルID。{@link RealityTarget}を参照。 + * 検索するシリアルID。{@link NyARRealityTarget}を参照。 * @return * 見つかると、そのオブジェクトの参照値。無ければnull */ @@ -41,7 +41,7 @@ public class NyARRealityTargetList extends NyARPointerStack /** * この関数は、シリアル番号をキーに、リストからターゲットを探索して、そのインデクス番号を返します。 * @param i_serial - * 検索するシリアルID。{@link RealityTarget}を参照。 + * 検索するシリアルID。{@link NyARRealityTarget}を参照。 * @return * リスト中のインデクス番号。 */ @@ -61,7 +61,7 @@ public class NyARRealityTargetList extends NyARPointerStack * 配列サイズが十分でない場合、見つかった順に、配列の上限まで要素を返します。 * @param i_type * 検索するRTターゲットのステータス値。{@link NyARRealityTarget}で定義される、RT_から始まるステータスタイプ値を指定します。 - * @param o_list + * @param o_result * 選択したターゲットを格納する配列です。 * @return * 選択できたターゲットの個数です。o_resultのlengthと同じ場合、取りこぼしが発生した可能性があります。 diff --git a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/realitysource/nyartk/NyARRealitySource.java b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/realitysource/nyartk/NyARRealitySource.java index 9dba59c..4407ed2 100644 --- a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/realitysource/nyartk/NyARRealitySource.java +++ b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/realitysource/nyartk/NyARRealitySource.java @@ -71,8 +71,8 @@ public abstract class NyARRealitySource this._tracksource.syncResource(); } /** - * RGBソースラスタ{@link #_rgb_source}を参照する{@link PerspectiveRasterReader}を返します。 - * @return [read only] {@link #_rgb_source}にリンクした{@link PerspectiveRasterReader}オブジェクト + * RGBソースラスタ{@link #_rgb_source}を参照する{@link NyARPerspectiveRasterReader}を返します。 + * @return [read only] {@link #_rgb_source}にリンクした{@link NyARPerspectiveRasterReader}オブジェクト */ public NyARPerspectiveRasterReader refPerspectiveRasterReader() { diff --git a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/realitysource/nyartk/NyARRealitySource_Reference.java b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/realitysource/nyartk/NyARRealitySource_Reference.java index 4ad645f..5ee0840 100644 --- a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/realitysource/nyartk/NyARRealitySource_Reference.java +++ b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/realitysource/nyartk/NyARRealitySource_Reference.java @@ -58,7 +58,7 @@ public class NyARRealitySource_Reference extends NyARRealitySource } /** * 所有するラスタが読出し可能であるかを返します。このクラスの場合には、常にtrueです。 - * @see {@link NyARRealitySource#isReady()} + * @see NyARRealitySource#isReady() */ public final boolean isReady() { @@ -66,7 +66,7 @@ public class NyARRealitySource_Reference extends NyARRealitySource } /** * RGBソースとトラッカのリソースとの内容の同期を取ります。 - * @see {@link NyARRealitySource#syncResource()} + * @see NyARRealitySource#syncResource() */ public final void syncResource() throws NyARException { @@ -75,7 +75,7 @@ public class NyARRealitySource_Reference extends NyARRealitySource } /** * RGBソースとトラッカのグレースケール画像との同期を取ります。 - * @see {@link NyARRealitySource#makeTrackSource()} + * @see NyARRealitySource#makeTrackSource() */ public final NyARTrackerSource makeTrackSource() throws NyARException { diff --git a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/sampler/lrlabel/LowResolutionLabelingSampler.java b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/sampler/lrlabel/LowResolutionLabelingSampler.java index 5a2a24f..9419000 100644 --- a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/sampler/lrlabel/LowResolutionLabelingSampler.java +++ b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/sampler/lrlabel/LowResolutionLabelingSampler.java @@ -1,9 +1,9 @@ package jp.nyatla.nyartoolkit.rpf.sampler.lrlabel; import jp.nyatla.nyartoolkit.*; -import jp.nyatla.nyartoolkit.core.labeling.rlelabeling.NyARLabeling_Rle; -import jp.nyatla.nyartoolkit.core.labeling.rlelabeling.NyARRleLabelFragmentInfo; +import jp.nyatla.nyartoolkit.core.labeling.rlelabeling.*; import jp.nyatla.nyartoolkit.core.raster.*; +import jp.nyatla.nyartoolkit.rpf.tracker.nyartk.*; diff --git a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARTracker.java b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARTracker.java index a436ecd..83d3e74 100644 --- a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARTracker.java +++ b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARTracker.java @@ -7,11 +7,36 @@ import jp.nyatla.nyartoolkit.rpf.sampler.lrlabel.*; import jp.nyatla.nyartoolkit.rpf.tracker.nyartk.status.*; - - /** - * このクラスは、四角形のトラッキングクラスです。画面内にある複数の矩形を、ターゲットとして識別して、追跡します。 - * @author nyatla + * このクラスは、画像中の四角形をトラッキングして、その状態を公開します。 + * 入力データは、専用画像データコンテナの{@link NyARTrackerSource}クラスを使います。 + * クラスはトラッキングしているターゲット(トラックターゲット)のリストを所有し、公開します。 + * ユーザは、このリストを参照し、編集することで、トラックターゲットの状態を得ることができます。 + *

アルゴリズム - + * トラッカは既知サンプルリストと未知サンプルリストの2つのリストを持っています。 + * このトラッキングアルゴリズムでは、サンプリングとトラッキングの2段構成で、これらのリストを編集して処理を進めます。 + *

サンプリング - + * サンプリングは、ラべリングした輪郭線から四角形(サンプル)を見つけ、既知のものと未知のものに分離する作業です。 + * 判定は、ターゲットのリストとサンプルの値を比較して行います。既知のターゲットは既知サンプルリストへ保存し、 + * 未知のものはそのまま新しいターゲットとして、ターゲットリストへ登録します。 + * ここで、ラべリングを軽量な画像(1/2^nのエッジ画像)に対して行うことで、負荷軽減を達成します。 + *

+ *

トラッキング + * トラッキングは少々複雑です。トラッキングは、4つのステージがあり、各ステージで必要な情報のみをトラックターゲットから抽出します。 + * 4つのターゲットは、new,ignore,contoure,rectです。 + *

    + *
  • new - 新規ターゲットです。contourターゲットへ遷移するのを待っています。得られる情報は、2D画像上でのクリップ範囲のみです。 + *
  • ignore - 分析を必要としないターゲットです。一定時間が経過すると、自動的に消失します。得られる情報は、2D画像上でのクリップ範囲のみです。 + *
  • contur - 輪郭線まで分析するターゲットです。rectターゲットへ遷移するのを待っています。得られる情報は、2D画像上でのクリップ範囲、輪郭線情報です。 + *
  • rect - 矩形頂点まで分析するターゲットです。得られる情報は、2D画像上でのクリップ範囲、矩形の頂点座標です。 + *
+ *

+ * まずはじめに、トラッカはサンプリングで得られた既知サンプルを適切なターゲットにディスパッチします。 + * 全てのディスパッチが完了した後に、ディスパッチされた情報を元に、各ターゲットの状態を更新します。 + * ステージによっては、ディスパッチが行われなかった場合でも、ステージ独自のサンプリング方法で状態を更新する場合があります。 + * 通常は、new,contur,rectの順で遷移します。各ステージに置かれるターゲットの数を調整することで、負荷量をコントロールすることができます。 + * ignoreは分析の必要ないターゲットを意図的に無視するためのステージです。認識に失敗したターゲットや、消失したターゲットなどがここに集められ、消滅していきます。 + *

* */ public class NyARTracker @@ -26,7 +51,7 @@ public class NyARTracker private NyARTargetPool target_pool; /** * ターゲットリストです。このプロパティは内部向けです。 - * refTrackTarget関数を介してアクセスしてください。 + * {@link #refTrackTarget}関数を介してアクセスしてください。 */ public NyARTargetList _targets; @@ -49,40 +74,45 @@ public class NyARTracker private int _number_of_rect; /** - * newターゲットの数を返します。 + * この関数は、newステータスのターゲット数を返します。 * @return + * newターゲットの数 */ public final int getNumberOfNew() { return this._number_of_new; } /** - * ignoreターゲットの数を返します。 + * この関数は、ignoreステータスのターゲット数を返します。 * @return + * ignoreターゲットの数 */ public final int getNumberOfIgnore() { return this._number_of_ignore; } /** - * contourターゲットの数を返します。 + * この関数は、contourターゲットの数を返します。 * @return + * contourターゲットの数 */ public final int getNumberOfContur() { return this._number_of_contoure; } /** - * rectターゲットの数を返します。 + * この関数は、rectターゲットの数を返します。 * @return + * rectターゲットの数 */ public final int getNumberOfRect() { return this._number_of_rect; } /** - * ターゲットリストの参照値を返します。 + * この関数は、ターゲットリストの参照値を返します。 * @return + * [read only]ターゲットリストの参照値 */ public final NyARTargetList refTrackTarget() { @@ -90,6 +120,7 @@ public class NyARTracker } /** * コンストラクタです。 + * ステージごとのターゲットの最大数を指定して、インスタンスを生成します。 * @param i_max_new * Newトラックターゲットの最大数を指定します。 * @param i_max_cont @@ -138,8 +169,11 @@ public class NyARTracker } /** - * Trackerの状態を更新します。 - * @param i_source + * この関数は、{@link NyARTrackerSource}の情報から、インスタンスの状態を更新します。 + * 関数の実行後に、インスタンスの所有するトラックターゲットの状態は更新されます。 + * この関数は、{@link NyARTrackerSource#makeSampleOut}を呼び出してトラックソース内の画像を同期をします。 + * @param i_s + * 基本画像にイメージを書き込んだコンテナを指定します。 * @throws NyARException */ public void progress(NyARTrackerSource i_s) throws NyARException @@ -355,7 +389,7 @@ public class NyARTracker * @param i_sample * @throws NyARException */ - public final static void updateNewStatus(NyARTargetList i_list,NyARNewTargetStatusPool i_pool,LowResolutionLabelingSamplerOut.Item[] source,int[] index) throws NyARException + private final static void updateNewStatus(NyARTargetList i_list,NyARNewTargetStatusPool i_pool,LowResolutionLabelingSamplerOut.Item[] source,int[] index) throws NyARException { NyARTarget d_ptr; NyARTarget[] i_nes=i_list.getArray(); @@ -401,7 +435,7 @@ public class NyARTracker * @param index * @throws NyARException */ - public static void updateContureStatus(NyARTargetList i_list,INyARVectorReader i_vecreader,NyARContourTargetStatusPool i_stpool,LowResolutionLabelingSamplerOut.Item[] source,int[] index) throws NyARException + private static void updateContureStatus(NyARTargetList i_list,INyARVectorReader i_vecreader,NyARContourTargetStatusPool i_stpool,LowResolutionLabelingSamplerOut.Item[] source,int[] index) throws NyARException { NyARTarget[] crd=i_list.getArray(); NyARTarget d_ptr; @@ -437,7 +471,7 @@ public class NyARTracker d_ptr._ref_status=st; } } - public static void updateRectStatus(NyARTargetList i_list,INyARVectorReader i_vecreader,NyARRectTargetStatusPool i_stpool,LowResolutionLabelingSamplerOut.Item[] source,int[] index) throws NyARException + private static void updateRectStatus(NyARTargetList i_list,INyARVectorReader i_vecreader,NyARRectTargetStatusPool i_stpool,LowResolutionLabelingSamplerOut.Item[] source,int[] index) throws NyARException { NyARTarget[] rct=i_list.getArray(); NyARTarget d_ptr; @@ -593,10 +627,15 @@ public class NyARTracker this._number_of_ignore--; return; } - /** - * このターゲットのステータスを、IgnoreStatusへ変更します。 - * @throws NyARException + * この関数は、指定したターゲットのステータスを、ignoreにします。 + * @param i_target + * 遷移させるトラックターゲットを指定します。 + * このターゲットのステータスは、{@link NyARTargetStatus#ST_NEW},{@link NyARTargetStatus#ST_CONTURE},{@link NyARTargetStatus#ST_RECT}の何れかである必要があります。 + * このオブジェクトは、インスタンスに所有されている必要があります。 + * @param i_life + * ignoreに遷移した後の、生存時間をサイクル数で指定します。 + * @throws NyARException */ public final void changeStatusToIgnore(NyARTarget i_target,int i_life) throws NyARException { @@ -675,10 +714,17 @@ public class NyARTracker } /** - * サンプルを格納するスタックです。このクラスは、一時的なリストを作るために使います。 + * このクラスは、サンプルの参照値を格納するスタックです。 + * {@link NyARTracker}から使います。ユーザが使うことはありません。 */ final class SampleStack extends NyARPointerStack { + /** + * コンストラクタです。 + * @param i_size + * リストの最大数 + * @throws NyARException + */ public SampleStack(int i_size) throws NyARException { super(); @@ -688,16 +734,35 @@ final class SampleStack extends NyARPointerStack * 継承クラスでは、_rbraster,_base_raster,_vec_readerメンバ変数の実体と、abstract関数を実装してください。 *

*/ public abstract class NyARTrackerSource { + /** ヒント画像(Roberts画像)の解像度値。1/n表記*/ protected int _rob_resolution; //継承クラスで設定されるべきオブジェクト + + /** ヒント画像を格納するオブジェクト。継承クラスで割り当てること。*/ protected NyARGrayscaleRaster _rbraster; + /** 基本GS画像を格納するオブジェクト。継承クラスで割り当てること。*/ protected NyARGrayscaleRaster _base_raster; - protected INyARVectorReader _vec_reader; + /** 基本画像に対する画素ベクトル読出しオブジェクト。継承クラスで割り当てること。*/ + protected INyARVectorReader _vec_reader; + /** サンプリングアウトを格納するオブジェクト。継承クラスで割り当てること。*/ protected LowResolutionLabelingSamplerOut _sample_out; /** - * Robertsエッジ画像の解像度を指定する。 + * コンストラクタです。 + * ヒント画像の解像度値を指定して、インスタンスを作成します。 * @param i_rob_resolution + * ヒント画像の解像度値。 */ protected NyARTrackerSource(int i_rob_resolution) { this._rob_resolution=i_rob_resolution; } /** - * 基本GS画像に対するVector読み取り機を返します。 - * このインスタンスは、基本GS画像と同期していないことがあります。 - * 基本GS画像に変更を加えた場合は、getSampleOut,またはsyncResource関数を実行して同期してから実行してください。 + * この関数は、Vector読み取りオブジェクトを返します。 + * このオブジェクトは、使用前にインスタンスの同期が必要な事があります。 + * 基本GS画像に変更を加えた後に{@link NyARTracker#progress}を実行せずに使用する場合は、 + * {@link #makeSampleOut},または{@link #syncResource}関数を実行してから使用してください。 * @return + * 基本画像、ヒント画像を元にしたVectorリーダ */ public final INyARVectorReader getBaseVectorReader() { @@ -39,46 +50,51 @@ public abstract class NyARTrackerSource } /** - * エッジ画像を返します。 - * このインスタンスは、基本GS画像と同期していないことがあります。 - * 基本GS画像に変更を加えた場合は、makeSampleOut,またはsyncResource関数を実行して同期してから実行してください。 - * 継承クラスでは、エッジ画像を返却してください。 + * この関数は、ヒント画像(エッジ画像)の参照値を返します。 + * このオブジェクトは、使用前にインスタンスの同期が必要な事があります。 + * 基本GS画像に変更を加えた後に{@link NyARTracker#progress}を実行せずに使用する場合は、 + * {@link #makeSampleOut},または{@link #syncResource}関数を実行してから使用してください。 * @return + * ヒント画像のオブジェクト。 */ public final NyARGrayscaleRaster refEdgeRaster() { return this._rbraster; } /** - * 基準画像を返します。 - * 継承クラスでは、基本画像を返却してください。 + * この関数は、基準画像の参照値を返します。 * @return + * 基本画像のオブジェクト。 */ public final NyARGrayscaleRaster refBaseRaster() { return this._base_raster; } /** - * 最後に作成した{@link LowResolutionLabelingSamplerOut}へのポインタを返します。 - * この関数は、{@link NyARTracker#progress}、または{@link #syncResource}の後に呼び出すことを想定しています。 - * それ以外のタイミングでは、返却値の内容が同期していないことがあるので注意してください。 + * この関数は、{@link LowResolutionLabelingSamplerOut}オブジェクトの参照値を返します。 + * へのポインタを返します。 + * このオブジェクトは、使用前にインスタンスの同期が必要な事があります。 + * 基本GS画像に変更を加えた後に{@link NyARTracker#progress}を実行せずに使用する場合は、 + * {@link #makeSampleOut}の戻り値を使うか、{@link #syncResource}関数を実行してから使用してください。 * @return + * 現在のSampleOutオブジェクトの参照値 */ public final LowResolutionLabelingSamplerOut refLastSamplerOut() { return this._sample_out; } /** - * 基準画像と内部状態を同期します。(通常、アプリケーションからこの関数を使用することはありません。) - * エッジ画像から{@link _sample_out}を更新する関数を実装してください。 + * この関数は、基準画像と内部状態を同期します。 + * 通常、ユーザがこの関数を使用することはありません。 + * 実装クラスでは、{@link #_sample_out}を更新する関数を実装してください。 * @throws NyARException */ public abstract void syncResource() throws NyARException; /** - * SampleOutを計算して、参照値を返します。 - * この関数は、{@link NyARTracker#progress}が呼び出します。 - * 継承クラスでは、エッジ画像{@link _rbraster}から{@link _sample_out}を更新して、返却する関数を実装してください。 + * この関数は、インスタンスのメンバを同期した後に、SampleOutを計算して、参照値を返します。 + * この関数は、{@link NyARTracker#progress}が呼び出します。通常、ユーザが使用することはありません。 + * 実装クラスでは、インスタンスの同期後に、{@link #_sample_out}を更新する関数を実装してください。 * @throws NyARException */ public abstract LowResolutionLabelingSamplerOut makeSampleOut() throws NyARException; diff --git a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARTrackerSource_Reference.java b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARTrackerSource_Reference.java index a678c39..3104d9c 100644 --- a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARTrackerSource_Reference.java +++ b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARTrackerSource_Reference.java @@ -8,8 +8,17 @@ import jp.nyatla.nyartoolkit.rpf.sampler.lrlabel.LowResolutionLabelingSampler; import jp.nyatla.nyartoolkit.rpf.sampler.lrlabel.LowResolutionLabelingSamplerOut; /** - * NyARTrackerSourceのリファレンス実装です。 + * このクラスは、NyARTrackerSourceのリファレンス実装です。 * 全ての画像処理を処理系のソフトウェアで実装します。 + *

基本的な使い方 - + * このクラスは、次のような手順で使います。 + *

    + *
  • {@link #refBaseRaster}関数で、基本グレースケール画像を得る。 + *
  • 基本グレースケール画像に、新しいイメージを書込む。 + *
  • {@link NyARTracker#progress}関数に入力する。 + *
+ * インスタンスの所有するラスタ間の同期は、{@link NyARTracker#progress}がコールする{@link #makeSampleOut}関数で行います。 + *

*/ public class NyARTrackerSource_Reference extends NyARTrackerSource { @@ -20,6 +29,8 @@ public class NyARTrackerSource_Reference extends NyARTrackerSource private NyARGrayscaleRaster _rb_source; private NegativeSqRoberts _rfilter=new NegativeSqRoberts(NyARBufferType.INT1D_GRAY_8); /** + * コンストラクタです。 + * ヒント画像 * @param i_number_of_sample * サンプラが検出する最大数。 * 通常100~200以上を指定します。(QVGA画像あたり、100個を基準にします。) @@ -65,7 +76,9 @@ public class NyARTrackerSource_Reference extends NyARTrackerSource this._base_raster.wrapBuffer(i_ref_source.getBuffer()); } - + /** + * この関数は、基準画像と内部状態を同期します。 通常、ユーザがこの関数を使用することはありません。 + */ public void syncResource() throws NyARException { //内部状態の同期 @@ -75,8 +88,7 @@ public class NyARTrackerSource_Reference extends NyARTrackerSource /** * SampleOutを計算して返します。 * この関数は、NyARTrackerが呼び出します。 - * @param samplerout - * @throws NyARException + * 通常、ユーザがこの関数を使用することはありません。 */ public LowResolutionLabelingSamplerOut makeSampleOut() throws NyARException { diff --git a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARVectorReader_Base.java b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARVectorReader_Base.java index 6d750cf..63c749b 100644 --- a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARVectorReader_Base.java +++ b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARVectorReader_Base.java @@ -13,36 +13,39 @@ import jp.nyatla.nyartoolkit.core.utils.NyARMath; import jp.nyatla.nyartoolkit.rpf.utils.VecLinearCoordinates; /** - * NyARVectorReaderインタフェイスのうち、画素形式に依存しない関数を実装するクラス。 + * このクラスは、NyARVectorReaderインタフェイスのうち、画素形式に依存しない関数を実装する抽象クラスです。 + * {@link #getAreaVector33}と{@link #getAreaVector22}関数が未実装です。 * 派生クラスで画素アクセス関数を実装して、最終的なクラスに仕上げます。 - * */ public abstract class NyARVectorReader_Base implements INyARVectorReader { private VecLinearCoordinates.VecLinearCoordinatePoint[] _tmp_coord_pos; private int _rob_resolution; + /** 参照する基本GS画像の参照値*/ protected NyARGrayscaleRaster _ref_base_raster; + /** 参照するヒント画像の参照値*/ private NyARGrayscaleRaster _ref_rob_raster; + /** 参照する歪み矯正オブジェクトの参照値*/ protected NyARCameraDistortionFactor _factor; /** - * 継承を必須とするため、コンストラクタを隠蔽。 + * コンストラクタです。 + * 継承を必須とするため、隠蔽します。 */ protected NyARVectorReader_Base() { - } /** + * この関数は、インスタンスを初期化します。 * 継承クラスのコンストラクタから呼び出す。 * @param i_ref_raster - * 基本画像 + * 基本GS画像の参照値。 * @param i_ref_raster_distortion * 歪み解除オブジェクト(nullの場合歪み解除を省略) * @param i_ref_rob_raster - * エッジ探索用のROB画像 + * 基本GS画像のヒント画像の参照値。 * @param i_contour_pickup - * 輪郭線取得クラス - * @param + * 輪郭線取得オブジェクト */ public void initInstance(NyARGrayscaleRaster i_ref_raster,NyARCameraDistortionFactor i_ref_raster_distortion,NyARGrayscaleRaster i_ref_rob_raster,NyARContourPickup i_contour_pickup) { @@ -55,13 +58,15 @@ public abstract class NyARVectorReader_Base implements INyARVectorReader this._cpickup = i_contour_pickup; return; } - /** - * ワーク変数 - */ + /** ワーク変数*/ protected NyARIntCoordinates _coord_buf; private NyARContourPickup _cpickup; + /** ベクトルマージ用の敷居値*/ protected final double _MARGE_ANG_TH = NyARMath.COS_DEG_10; - + /** + * この関数は、ヒント画像の基点から輪郭点をトレースして、元画像の輪郭ベクトルを配列に返します。 + * 輪郭ベクトルの検出特性については、{@link #traceConture(NyARIntCoordinates, int, int, VecLinearCoordinates)}を確認してください。 + */ public boolean traceConture(int i_th, NyARIntPoint2d i_entry, VecLinearCoordinates o_coord) throws NyARException @@ -82,19 +87,9 @@ public abstract class NyARVectorReader_Base implements INyARVectorReader /** - * 点1と点2の間に線分を定義して、その線分上のベクトルを得ます。点は、画像の内側でなければなりません。 320*240の場合、(x>=0 && - * x<320 x+w>0 && x+w<320),(y>0 && y<240 y+h>=0 && y+h<=319)となります。 - * - * @param i_pos1 - * 点1の座標です。 - * @param i_pos2 - * 点2の座標です。 - * @param i_area - * ベクトルを検出するカーネルサイズです。1の場合(n*2-1)^2のカーネルになります。 点2の座標です。 - * @param o_coord - * 結果を受け取るオブジェクトです。 - * @return - * @throws NyARException + * この関数は、元画像の点1と点2の間に線分を定義して、その線分上のベクトルを配列に得ます。 点は、画像の内側でなければなりません。 + * この関数はクリッピング処理を行いません。クリッピングが必要な時には、traceLineWithClipを使います。 + * 輪郭ベクトルの検出特性については、{@link #traceConture(NyARIntCoordinates, int, int, VecLinearCoordinates)}を確認してください。 */ public boolean traceLine(NyARIntPoint2d i_pos1, NyARIntPoint2d i_pos2,int i_edge, VecLinearCoordinates o_coord) { @@ -133,7 +128,11 @@ public abstract class NyARVectorReader_Base implements INyARVectorReader // 点数は20点程度を得る。 return traceConture(coord, 1, s, o_coord); } - + /** + * この関数は、元画像の点1と点2の間に線分を定義して、その線分上のベクトルを配列に得ます。 点は、画像の内側でなければなりません。 + * この関数はクリッピング処理を行いません。クリッピングが必要な時には、traceLineWithClipを使います。 + * 輪郭ベクトルの検出特性については、{@link #traceConture(NyARIntCoordinates, int, int, VecLinearCoordinates)}を確認してください。 + */ public boolean traceLine(NyARDoublePoint2d i_pos1,NyARDoublePoint2d i_pos2, int i_edge, VecLinearCoordinates o_coord) { NyARIntCoordinates coord = this._coord_buf; @@ -190,13 +189,8 @@ public abstract class NyARVectorReader_Base implements INyARVectorReader return false; } /** - * 輪郭線を取得します。 - * 取得アルゴリズムは、以下の通りです。 - * 1.輪郭座標(n)の画素周辺の画素ベクトルを取得。 - * 2.輪郭座標(n+1)周辺の画素ベクトルと比較。 - * 3.差分が一定以下なら、座標と強度を保存 - * 4.3点以上の集合になったら、最小二乗法で直線を計算。 - * 5.直線の加重値を個々の画素ベクトルの和として返却。 + * この関数は、カーネルサイズを指定して、ヒント画像の輪郭座標から、元画像の輪郭線のベクトルを得ます。 + * 輪郭ベクトルは、隣接する要素が似ている場合、加算してまとめられます。隣接していないベクトルはまとめられません。 */ public boolean traceConture(NyARIntCoordinates i_coord, int i_pos_mag,int i_cell_size, VecLinearCoordinates o_coord) { @@ -339,14 +333,7 @@ public abstract class NyARVectorReader_Base implements INyARVectorReader private NyARLinear __temp_l = new NyARLinear(); /** - * クリッピング付きのライントレーサです。 - * - * @param i_pos1 - * @param i_pos2 - * @param i_edge - * @param o_coord - * @return - * @throws NyARException + * この関数は、クリッピング付きのライントレーサです。 元画像の点1と点2の間に線分を定義して、その線分上のベクトルを配列に得ます。 座標は、適切に画像内にクリッピングします。 */ public boolean traceLineWithClip(NyARDoublePoint2d i_pos1, NyARDoublePoint2d i_pos2, int i_edge, VecLinearCoordinates o_coord) diff --git a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARVectorReader_INT1D_GRAY_8.java b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARVectorReader_INT1D_GRAY_8.java index 1385480..b42b626 100644 --- a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARVectorReader_INT1D_GRAY_8.java +++ b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/NyARVectorReader_INT1D_GRAY_8.java @@ -31,20 +31,19 @@ import jp.nyatla.nyartoolkit.core.types.*; /** - * グレイスケールラスタに対する、特殊な画素アクセス手段を提供します。 - * + * このクラスは、{@link NyARBufferType#INT1D_GRAY_8}の画素形式に対応した画素ベクトルリーダーです。 */ public class NyARVectorReader_INT1D_GRAY_8 extends NyARVectorReader_Base { /** - * + * コンストラクタです。 + * 基本GS画像、ヒント画像のセットから、インスタンスを作ります。 * @param i_ref_raster - * 基本画像 + * 基本GS画像の参照値 * @param i_ref_raster_distortion - * 歪み解除オブジェクト(nullの場合歪み解除を省略) + * 基本画像の歪み補正オブジェクトの参照値 * @param i_ref_rob_raster - * エッジ探索用のROB画像 - * @param + * ヒント画像の参照値 */ public NyARVectorReader_INT1D_GRAY_8(NyARGrayscaleRaster i_ref_raster,NyARCameraDistortionFactor i_ref_raster_distortion,NyARGrayscaleRaster i_ref_rob_raster) { @@ -54,71 +53,57 @@ public class NyARVectorReader_INT1D_GRAY_8 extends NyARVectorReader_Base this.initInstance(i_ref_raster, i_ref_raster_distortion, i_ref_rob_raster,new NyARContourPickup()); } + +// /** +// * 画素の4近傍の画素ベクトルを取得します。 取得可能な範囲は、Rasterの1ドット内側です。 0 ,-1, 0 0, 0, 0 0 , x, +// * 0 + -1, y,+1 0 ,+1, 0 0, 0, 0 +// * +// * @param i_raster +// * @param x +// * @param y +// * @param o_v +// */ +// public void getPixelVector4(int x, int y, NyARIntPoint2d o_v) +// { +// assert ((x > 0) && (y > 0) && (x) < this._ref_base_raster.getWidth() && (y) < this._ref_base_raster.getHeight()); +// int[] buf = (int[])(this._ref_base_raster.getBuffer()); +// int w = this._ref_base_raster.getWidth(); +// int idx = w * y + x; +// o_v.x = (buf[idx + 1] - buf[idx - 1]) >> 1; +// o_v.y = (buf[idx + w] - buf[idx - w]) >> 1; +// //歪み補正どうすんの +// } +// +// /** +// * 画素の8近傍画素ベクトルを取得します。 取得可能な範囲は、Rasterの1ドット内側です。 +// * -1,-2,-1    -1, 0,+1 +// * 0, y, 0 +  -2, x,+2 +// * +1,+2,+1     -1, 0,+1 +// * +// * @param i_raster +// * @param x +// * @param y +// * @param o_v +// */ +// public void getPixelVector8(int x, int y, NyARIntPoint2d o_v) { +// assert ((x > 0) && (y > 0) && (x) < this._ref_base_raster.getWidth() && (y) < this._ref_base_raster.getHeight()); +// int[] buf = (int[])this._ref_base_raster.getBuffer(); +// int sw = this._ref_base_raster.getWidth(); +// int idx_0 = sw * y + x; +// int idx_p1 = idx_0 + sw; +// int idx_m1 = idx_0 - sw; +// int b = buf[idx_m1 - 1]; +// int d = buf[idx_m1 + 1]; +// int h = buf[idx_p1 - 1]; +// int f = buf[idx_p1 + 1]; +// o_v.x = ((buf[idx_0 + 1] - buf[idx_0 - 1]) >> 1) +// + ((d - b + f - h) >> 2); +// o_v.y = ((buf[idx_p1] - buf[idx_m1]) >> 1) + ((f - d + h - b) >> 2); +// //歪み補正どうするの? +// } + /** - * 画素の4近傍の画素ベクトルを取得します。 取得可能な範囲は、Rasterの1ドット内側です。 0 ,-1, 0 0, 0, 0 0 , x, - * 0 + -1, y,+1 0 ,+1, 0 0, 0, 0 - * - * @param i_raster - * @param x - * @param y - * @param o_v - */ -/* 未使用につきコメントアウト - public void getPixelVector4(int x, int y, NyARIntPoint2d o_v) - { - assert ((x > 0) && (y > 0) && (x) < this._ref_base_raster.getWidth() && (y) < this._ref_base_raster.getHeight()); - int[] buf = (int[])(this._ref_base_raster.getBuffer()); - int w = this._ref_base_raster.getWidth(); - int idx = w * y + x; - o_v.x = (buf[idx + 1] - buf[idx - 1]) >> 1; - o_v.y = (buf[idx + w] - buf[idx - w]) >> 1; - //歪み補正どうすんの - } -*/ - /** - * 画素の8近傍画素ベクトルを取得します。 取得可能な範囲は、Rasterの1ドット内側です。 - * -1,-2,-1    -1, 0,+1 - * 0, y, 0 +  -2, x,+2 - * +1,+2,+1     -1, 0,+1 - * - * @param i_raster - * @param x - * @param y - * @param o_v - */ -/* 未使用につきコメントアウト - public void getPixelVector8(int x, int y, NyARIntPoint2d o_v) { - assert ((x > 0) && (y > 0) && (x) < this._ref_base_raster.getWidth() && (y) < this._ref_base_raster.getHeight()); - int[] buf = (int[])this._ref_base_raster.getBuffer(); - int sw = this._ref_base_raster.getWidth(); - int idx_0 = sw * y + x; - int idx_p1 = idx_0 + sw; - int idx_m1 = idx_0 - sw; - int b = buf[idx_m1 - 1]; - int d = buf[idx_m1 + 1]; - int h = buf[idx_p1 - 1]; - int f = buf[idx_p1 + 1]; - o_v.x = ((buf[idx_0 + 1] - buf[idx_0 - 1]) >> 1) - + ((d - b + f - h) >> 2); - o_v.y = ((buf[idx_p1] - buf[idx_m1]) >> 1) + ((f - d + h - b) >> 2); - //歪み補正どうするの? - } -*/ - /** - * RECT範囲内の画素ベクトルの合計値と、ベクトルのエッジ中心を取得します。 320*240の場合、 - * RECTの範囲は(x>=0 && x<319 x+w>=0 && x+w<319),(y>=0 && y<239 x+w>=0 && x+w<319)となります。 - * @param ix - * ピクセル取得を行う位置を設定します。 - * @param iy - * ピクセル取得を行う位置を設定します。 - * @param iw - * ピクセル取得を行う範囲を設定します。 - * @param ih - * ピクセル取得を行う範囲を設定します。 - * @param o_posvec - * エッジ中心とベクトルを返します。 - * @return - * ベクトルの強度を返します。強度値は、差分値の二乗の合計です。 + * この関数は、元画像の矩形領域を集計して、その領域内のエッジ中心と、エッジの方位ベクトルを返します。 画素の集計には、3x3のカーネルを使います。 矩形領域は、例えば取得元の画像が320*240の場合、(x>=0 && x<=320 x+w>=0 && x+w<=320),(y>=0 && y<=240 y+h>=0 && y+h<=240)です。 */ public final int getAreaVector33(int ix, int iy, int iw, int ih,NyARVecLinear2d o_posvec) { @@ -183,6 +168,9 @@ public class NyARVectorReader_INT1D_GRAY_8 extends NyARVectorReader_Base //加重平均の分母を返却 return sum_wx+sum_wy; } + /** + * この関数は、元画像の矩形領域を集計して、その領域内のエッジ中心と、エッジの方位ベクトルを返します。 画素の集計には、2x2のカーネルを使います。 矩形領域は、例えば取得元の画像が320*240の場合、(x>=0 && x<=320 x+w>=0 && x+w<=320),(y>=0 && y<=240 y+h>=0 && y+h<=240)です。 + */ public final int getAreaVector22(int ix, int iy, int iw, int ih,NyARVecLinear2d o_posvec) { assert (ih >= 3 && iw >= 3); diff --git a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/status/NyARContourTargetStatus.java b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/status/NyARContourTargetStatus.java index 74e0baa..c5c603d 100644 --- a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/status/NyARContourTargetStatus.java +++ b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/status/NyARContourTargetStatus.java @@ -3,40 +3,40 @@ package jp.nyatla.nyartoolkit.rpf.tracker.nyartk.status; import jp.nyatla.nyartoolkit.NyARException; import jp.nyatla.nyartoolkit.rpf.sampler.lrlabel.LowResolutionLabelingSamplerOut; import jp.nyatla.nyartoolkit.rpf.tracker.nyartk.INyARVectorReader; -import jp.nyatla.nyartoolkit.rpf.tracker.nyartk.NyARTrackerSource; -import jp.nyatla.nyartoolkit.rpf.tracker.nyartk.NyARVectorReader_INT1D_GRAY_8; import jp.nyatla.nyartoolkit.rpf.utils.VecLinearCoordinates; + /** - * 輪郭ソース1個を格納するクラスです。 - * + * このクラスは、輪郭ステータスのターゲットステータスを格納します。 + * 輪郭ステータスは、ベクトル化した輪郭点配列をメンバに持ちます。 */ public final class NyARContourTargetStatus extends NyARTargetStatus { /** - * ベクトル要素を格納する配列です。 + * [readonly]輪郭点のベクトル要素を格納する配列です。 */ public VecLinearCoordinates vecpos=new VecLinearCoordinates(100); - - - // //制御部 /** + * コンストラクタです。 + * この関数は、所有されるプールオブジェクトが使います。ユーザは使いません。 * @param i_ref_pool_operator - * @param i_shared - * 共有ワークオブジェクトを指定します。 - * + * プールオブジェクトのコントロールインタフェイス */ public NyARContourTargetStatus(INyARManagedObjectPoolOperater i_ref_pool_operator) { super(i_ref_pool_operator); } /** + * この関数は、サンプル値を元に、ベクトル輪郭を生成して、インスタンスを更新します。 * @param i_vecreader + * 画素ベクトルの読出しオブジェクト。 * @param i_sample + * 輪郭点の基点情報に使う、サンプルオブジェクト。 * @return + * 成功するとtrueを返します。 * @throws NyARException */ public boolean setValue(INyARVectorReader i_vecreader,LowResolutionLabelingSamplerOut.Item i_sample) throws NyARException diff --git a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/status/NyARContourTargetStatusPool.java b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/status/NyARContourTargetStatusPool.java index 6875e70..773ecda 100644 --- a/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/status/NyARContourTargetStatusPool.java +++ b/lib/src.rpf/jp/nyatla/nyartoolkit/rpf/tracker/nyartk/status/NyARContourTargetStatusPool.java @@ -5,15 +5,17 @@ import jp.nyatla.nyartoolkit.core.utils.NyARManagedObjectPool; -/* - * 輪郭情報を保管します。 - * このクラスの要素は、他の要素から参照する可能性があります。 +/** + * このクラスは、{@link NyARContourTargetStatus}型のプールクラスです。 + * 通常、ユーザが使うことはありません。 */ public final class NyARContourTargetStatusPool extends NyARManagedObjectPool { /** + * コンストラクタです。 + * プールの最大サイズを利用して、インスタンスを生成します。 * @param i_size - * スタックの最大サイズ + * プールの最大サイズです。 * @throws NyARException */ public NyARContourTargetStatusPool(int i_size) throws NyARException @@ -21,7 +23,7 @@ public final class NyARContourTargetStatusPool extends NyARManagedObjectPool { /** * コンストラクタです。 + * プールの最大サイズを利用して、インスタンスを生成します。 * @param i_size - * poolのサイズ + * プールの最大サイズです。 * @throws NyARException */ public NyARNewTargetStatusPool(int i_size) throws NyARException @@ -17,7 +21,7 @@ public class NyARNewTargetStatusPool extends NyARManagedObjectPool { - /** - * 要素間で共有するオブジェクト。この変数は、NyARRectTargetStatus以外から使わないでください。 - */ + /** 要素間で共有するオブジェクト。この変数は、NyARRectTargetStatus以外から使わないでください。*/ public VecLinearCoordinates _vecpos=new VecLinearCoordinates(100); + /** 要素間で共有するオブジェクト。この変数は、NyARRectTargetStatus以外から使わないでください。*/ public LineBaseVertexDetector _line_detect=new LineBaseVertexDetector(); + /** 要素間で共有するオブジェクト。この変数は、NyARRectTargetStatus以外から使わないでください。*/ public VecLinearCoordinatesOperator _vecpos_op=new VecLinearCoordinatesOperator(); + /** 要素間で共有するオブジェクト。この変数は、NyARRectTargetStatus以外から使わないでください。*/ public VecLinearCoordinates.VecLinearCoordinatePoint[] _indexbuf=new VecLinearCoordinates.VecLinearCoordinatePoint[4]; + /** 要素間で共有するオブジェクト。この変数は、NyARRectTargetStatus以外から使わないでください。*/ public NyARLinear[] _line=NyARLinear.createArray(4); /** + * コンストラクタです。 + * プールの最大サイズを利用して、インスタンスを生成します。 * @param i_size - * スタックの最大サイズ - * @param i_cood_max - * 輪郭ベクトルの最大数 + * プールの最大サイズです。 * @throws NyARException */ public NyARRectTargetStatusPool(int i_size) throws NyARException { super.initInstance(i_size,NyARRectTargetStatus.class); } + /** + * この関数は、リスト要素を生成して返します。 + */ protected NyARRectTargetStatus createElement() { return new NyARRectTargetStatus(this); @@ -37,12 +45,16 @@ public class NyARRectTargetStatusPool extends NyARManagedObjectPoolメモ - + * ST_XXXの定数値は、{@link NyARTracker}のコンストラクタ実装と密接に絡んでいます。 + * 変更するときは注意すること! + *

* */ public class NyARTargetStatus extends NyARManagedObject { + /** 定数値。IGNOREステータスを表します。*/ public final static int ST_IGNORE=0; + /** 定数値。NEWステータスを表します。*/ public final static int ST_NEW=1; + /** 定数値。RECTステータスを表します。*/ public final static int ST_RECT=2; + /** 定数値。CONTUREステータスを表します。*/ public final static int ST_CONTURE=3; + /** 定数値。ステータスの種類を表します。*/ public final static int MAX_OF_ST_KIND=3; + /** + * コンストラクタです。 + * 所有されるプールオブジェクトを指定して、インスタンスを生成します。 + * @param iRefPoolOperator + * プールオブジェクトのコントロールインタフェイス。 + */ protected NyARTargetStatus(INyARManagedObjectPoolOperater iRefPoolOperator) { super(iRefPoolOperator); diff --git a/lib/test/jp/nyatla/nyartoolkit/test/NyIdTest.java b/lib/test/jp/nyatla/nyartoolkit/test/NyIdTest.java index 32530bd..16e3507 100644 --- a/lib/test/jp/nyatla/nyartoolkit/test/NyIdTest.java +++ b/lib/test/jp/nyatla/nyartoolkit/test/NyIdTest.java @@ -41,18 +41,37 @@ import jp.nyatla.nyartoolkit.nyidmarker.data.*; import jp.nyatla.nyartoolkit.processor.*; /** - * 320x240のBGRA32で記録されたIdmarkerを撮影したRAWイメージから、 - * Idマーカを認識します。 - * + * このプログラムは、NyIdマーカ検出クラス{@link SingleNyIdMarkerProcesser}の動作チェックプログラムです。 + * 静止画から1個のIDマーカを読み取り、その数値を得る動作を確認できます。 + * + * このプログラムには結果を表示する機能がありません。 + * 数値の確認は、ブレークポイントを仕掛けるなどして行ってください。 */ public class NyIdTest { + /** + * このクラスは、{@link SingleNyIdMarkerProcesser}の自己コールバック関数を実装したクラスです。 + * 自己コールバック関数は、{@link #detectMarker}の内部から呼び出さます。 + * これにより、アプリケーションにマーカ状態の変化を通知します。 + * 通知される条件については、それぞれの関数の説明を見てください。 + */ public class MarkerProcessor extends SingleNyIdMarkerProcesser { private Object _sync_object = new Object(); + /** {@link #onUpdateHandler}関数で得た姿勢行列のポインタ*/ public NyARTransMatResult transmat = null; + /** {@link #onEnterHandler}関数で得た姿勢行列のポインタ*/ public int current_id = -1; - + /** + * コンストラクタです。 + * パラメータを{@link #initInstance}へセットして初期化します。 + * ここでは、{@link #initInstance}へ値を引き渡すだけです。 + * @param i_cparam + * カメラパラメータ。 + * @param i_raster_format + * 入力ラスタのフォーマット。 + * @throws Exception + */ public MarkerProcessor(NyARParam i_cparam, int i_raster_format) throws Exception { super();// @@ -61,7 +80,10 @@ public class NyIdTest return; } /** - * アプリケーションフレームワークのハンドラ(マーカ出現) + * この関数は、{@link #detectMarker}から呼び出される自己コールバック関数です。 + * 画像にマーカが現われたときに呼び出されます。 + * ここでは、例として、マーカの情報を読み取り、それを{@link NyIdMarkerData_RawBit}を使って + * int値にエンコードする処理を実装しています。 */ protected void onEnterHandler(INyIdMarkerData i_code) { @@ -87,7 +109,10 @@ public class NyIdTest } } /** - * アプリケーションフレームワークのハンドラ(マーカ消滅) + * この関数は、{@link #detectMarker}から呼び出される自己コールバック関数です。 + * 画像からマーカが消え去った時に呼び出されます。 + * ここでは、マーカが消えた場合の後始末処理をします。 + * このサンプルでは、メンバ変数をリセットしています。 */ protected void onLeaveHandler() { @@ -99,7 +124,11 @@ public class NyIdTest return; } /** - * アプリケーションフレームワークのハンドラ(マーカ更新) + * この関数は、{@link #detectMarker}から呼び出される自己コールバック関数です。 + * 画像中のマーカの位置が変化したときに呼び出されます。 + * この関数は、{@link #onEnterHandler}直後に呼び出されることもあります。 + * + * このサンプルでは、引数で通知されたマーカの姿勢を、メンバ変数に保存しています。 */ protected void onUpdateHandler(NyARSquare i_square, NyARTransMatResult result) { @@ -111,9 +140,19 @@ public class NyIdTest } private final String data_file = "../Data/320x240NyId.raw"; private final String camera_file = "../Data/camera_para.dat"; + /** + * コンストラクタです。 + * ここで行う処理はありません。 + */ public NyIdTest() { } + /** + * テスト関数の本体です。 + * 設定ファイル、サンプル画像の読み込んだのちに{@link MarkerProcessor}を生成し、 + * 1回だけ画像を入力して、マーカ検出を試行します。 + * @throws Exception + */ public void Test() throws Exception { //AR用カメラパラメタファイルをロード @@ -134,6 +173,12 @@ public class NyIdTest pr.detectMarker(ra); return; } + /** + * プログラムのエントリーポイントです。 + * サンプルプログラム{@link NyIdTest}を実行します。 + * @param args + * 引数はありません。 + */ public static void main(String[] args) { diff --git a/lib/test/jp/nyatla/nyartoolkit/test/RawFileTest.java b/lib/test/jp/nyatla/nyartoolkit/test/RawFileTest.java index 2a01a05..c2aad09 100644 --- a/lib/test/jp/nyatla/nyartoolkit/test/RawFileTest.java +++ b/lib/test/jp/nyatla/nyartoolkit/test/RawFileTest.java @@ -41,9 +41,10 @@ import jp.nyatla.nyartoolkit.detector.NyARSingleDetectMarker; import jp.nyatla.nyartoolkit.core.types.*; /** - * 320x240のBGRA32で記録されたRAWイメージから、1種類のパターンを認識し、 - * その変換行列を1000回求め、それにかかったミリ秒時間を表示します。 - * + * このサンプルは、{@link NyARSingleDetectMarker}クラスの動作チェック&ベンチマークプログラムです。 + * 静止画から1個のHiroマーカを認識して、その姿勢変換行列、パターン一致率を得る動作を確認できます。 + * 同時に、この処理を1000回実行して、処理時間を計測します。この数値は、NyARToolkitの基本性能の + * 指標として使うことができます。 */ public class RawFileTest { diff --git a/lib/test/jp/nyatla/nyartoolkit/test/RpfTest.java b/lib/test/jp/nyatla/nyartoolkit/test/RpfTest.java index 78fe55f..45793d5 100644 --- a/lib/test/jp/nyatla/nyartoolkit/test/RpfTest.java +++ b/lib/test/jp/nyatla/nyartoolkit/test/RpfTest.java @@ -8,6 +8,7 @@ import java.util.Date; import jp.nyatla.nyartoolkit.core.param.NyARParam; import jp.nyatla.nyartoolkit.core.types.NyARBufferType; import jp.nyatla.nyartoolkit.core.types.NyARDoublePoint3d; +import jp.nyatla.nyartoolkit.detector.NyARSingleDetectMarker; import jp.nyatla.nyartoolkit.rpf.reality.nyartk.NyARReality; import jp.nyatla.nyartoolkit.rpf.reality.nyartk.NyARRealityTarget; import jp.nyatla.nyartoolkit.rpf.realitysource.nyartk.NyARRealitySource; @@ -19,20 +20,23 @@ import jp.nyatla.nyartoolkit.rpf.realitysource.nyartk.NyARRealitySource_Referenc /** - * NyARRealityのテストプログラム。動作保証なし。 - * - * ターゲットプロパティの取得実験用のテストコードです。 - * クリックしたマーカや、その平面周辺から、画像を取得するテストができます。 - * + * このサンプルは、{@link NyARReality}クラスの動作チェック&ベンチマークプログラムです。 + * 静止画からからUnknownステータスのマーカを検出して、Knownステータスに遷移できるかと、 + * {@link NyARReality}が正常に動作するかを確認できます。 + * また、{@link NyARReality#progress}を1000回実行して、処理時間を計測します。 + * この数値は、{@link NyARReality}の基本性能の指標として使うことができます。 */ - public class RpfTest { private final static String PARAM_FILE = "../Data/camera_para.dat"; private final static String DATA_FILE = "../Data/320x240ABGR.raw"; private static final long serialVersionUID = -2110888320986446576L; - + /** + * メイン関数です。 + * 次のフローで処理を実行します。 + * @param args + */ public static void main(String[] args) {