パッケージ | クラス | 使用 | 非推奨 API
前のクラス 次のクラス | フレームあり フレームなし
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド

## jp.nyatla.nyar4psg
クラス MultiMarker

    java.lang.Object
      jp.nyatla.nyar4psg.NyARPsgBaseClass
          jp.nyatla.nyar4psg.MultiMarker

    public class MultiMarker

extends NyARPsgBaseClass

このクラスは、複数のマーカに対応したARToolKit管理クラスです。 1映像中に異なる複数のマーカのあるユースケースで動作します。 入力画像はPImage形式です。

フィールドの概要
`static double` | `DEFAULT_CF_THRESHOLD` 初期値定数。
`static int` | `DEFAULT_LOST_DELAY` 初期値定数。
`static int` | `THLESHOLD_AUTO` 敷居値の定数です。

クラス jp.nyatla.nyar4psg.NyARPsgBaseClass から継承されたフィールド
`_ar_param, _config, _frustum, _preader, _ps_background_mv, _ps_projection, _ref_papplet, _src_raster, FRUSTUM_DEFAULT_FAR_CLIP, FRUSTUM_DEFAULT_NEAR_CLIP, VERSION`

コンストラクタの概要
`MultiMarker(PApplet parent, int i_width, int i_height, String i_cparam_file)` コンストラクタです。
`MultiMarker(PApplet parent, int i_width, int i_height, String i_cparam_file, NyAR4PsgConfig i_config)` コンストラクタです。

メソッドの概要
`int` | `addARMarker(String i_file_name, float i_width)` この関数は、ARToolKitスタイルのマーカーをファイルから読みだして、登録します。
`int` | `addARMarker(String i_file_name, int i_patt_resolution, float i_width)` この関数は、ARToolKitスタイルのマーカーをファイルから読みだして、登録します。
`int` | `addARMarker(String i_file_name, int i_patt_resolution, int i_edge_percentage, float i_width)` この関数は、ARToolKitスタイルのマーカーをファイルから読みだして、登録します。
`int` | `addNyIdMarker(int i_nyid, int i_width)` この関数は、NyIdマーカを追加します。
`int` | `addNyIdMarker(int i_nyid_range_s, int i_nyid_range_e, int i_width)` この関数は、NyIdマーカを範囲指定で追加します。
`void` | `beginTransform(int i_id)` この関数は、ProcessingのProjectionMatrixとModelview行列を、指定idのマーカ平面にセットします。
`void` | `detect(PImage i_image)` この関数は、画像からマーカーの検出処理を実行します。
`void` | `endTransform()` この関数は、`beginTransform(int)`でセットしたProjectionとModelViewを元に戻します。
`double` | `getConfidence(int i_id)` この関数は、指定idのARマーカパターンの一致率を返します。
`int` | `getCurrentThreshold()` この関数は、現在の二値化敷居値を返します。
`long` | `getLife(int i_id)` この関数は、指定idのマーカのライフ値を返します。
`int` | `getLostCount(int i_id)` この関数は、指定idのマーカの認識状態を返します。
`PMatrix3D` | `getMarkerMatrix(int i_id)` この関数は、マーカの姿勢行列を返します。
`PVector[]` | `getMarkerVertex2D(int i_id)` この関数は、マーカのスクリーン上の4頂点を返します。
`long` | `getNyId(int i_id)` この関数は、指定idのNyIdマーカから、現在のマーカIdを取得します。
`protected void` | `initInstance(PApplet parent, String i_cparam_file, int i_width, int i_height, NyAR4PsgConfig i_config)` インスタンスを初期化します。
`boolean` | `isExistMarker(int i_id)` この関数は、指定idのマーカが有効かを返します。
`PImage` | `pickupMarkerImage(int i_id, int i_x1, int i_y1, int i_x2, int i_y2, int i_x3, int i_y3, int i_x4, int i_y4, int i_out_w_pix, int i_out_h_pix)` この関数は、idで指定したマーカの画像のXY平面上の4頂点でかこまれた領域から、画像を取得します。
`PImage` | `pickupRectMarkerImage(int i_id, int i_l, int i_t, int i_w, int i_h, int i_out_w_pix, int i_out_h_pix)` この関数は、idで指定したマーカのXY平面上の矩形領域から、画像を取得します。
`PVector` | `screen2MarkerCoordSystem(int i_id, int i_x, int i_y)` この関数は、スクリーン座標を、idで指定したマーカ平面座標へ変換して返します。
`void` | `setConfidenceThreshold(double i_val)` この関数は、ARマーカパターン一致率の閾値を設定します。
`void` | `setLostDelay(int i_val)` この関数は、マーカ消失時の遅延数を設定します。
`void` | `setThreshold(int i_th)` この関数は、画像2値化の敷居値を設定します。

クラス jp.nyatla.nyar4psg.NyARPsgBaseClass から継承されたメソッド
`drawBackground, matResult2GLArray, matResult2PMatrix3D, pickupMarkerImage, PMatrix2GLProjection, PMatrix2GLProjection, screen2MarkerCoordSystem, setARClipping, setARPerspective, setBackgroundOrtho, setPerspective`

クラス java.lang.Object から継承されたメソッド
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

フィールドの詳細

### DEFAULT_CF_THRESHOLD

    public static final double DEFAULT_CF_THRESHOLD

  初期値定数。マーカ一致度の最小敷居値を示します。

  関連項目:
    定数フィールド値

### DEFAULT_LOST_DELAY

    public static final int DEFAULT_LOST_DELAY

  初期値定数。マーカ消失時の許容

  関連項目:
    定数フィールド値

### THLESHOLD_AUTO

    public static final int THLESHOLD_AUTO

  敷居値の定数です。敷居値を自動決定します。

  関連項目:
    定数フィールド値

コンストラクタの詳細

### MultiMarker

    public MultiMarker(PApplet parent,
                       int i_width,
                       int i_height,
                       String i_cparam_file,
                       NyAR4PsgConfig i_config)

  コンストラクタです。

  パラメータ:
    `parent` - 親となるAppletオブジェクトを指定します。このOpenGLのレンダリングシステムを持つAppletである必要があります。
    `i_cparam_file` - ARToolKitフォーマットのカメラパラメータファイルの名前を指定します。
    `i_width` - 入力画像の横解像度を指定します。通常、キャプチャ画像のサイズを指定します。
    `i_height` - 入力画像の横解像度を指定します。通常、キャプチャ画像のサイズを指定します。
    `i_config` - コンフィギュレーションオブジェクトを指定します。
  例外:
    `NyARException`

### MultiMarker

    public MultiMarker(PApplet parent,
                       int i_width,
                       int i_height,
                       String i_cparam_file)

  コンストラクタです。 `MultiMarker(PApplet, int, int, String, NyAR4PsgConfig)`のコンフィギュレーションに、`NyAR4PsgConfig.CONFIG_DEFAULT`を指定した物と同じです。

  パラメータ:
    `parent` - `MultiMarker(PApplet, int, int, String, NyAR4PsgConfig)`を参照。
    `i_width` - 入力画像の横解像度を指定します。通常、キャプチャ画像のサイズを指定します。
    `i_height` - 入力画像の横解像度を指定します。通常、キャプチャ画像のサイズを指定します。
    `i_cparam_file` - `MultiMarker(PApplet, int, int, String, NyAR4PsgConfig)`を参照。
  例外:
    `NyARException`

メソッドの詳細

### setConfidenceThreshold

    public void setConfidenceThreshold(double i_val)

  この関数は、ARマーカパターン一致率の閾値を設定します。 この値よりも一致率が低いマーカを認識しなくなります。 デフォルト値は`DEFAULT_CF_THRESHOLD`です。

  パラメータ:
    `i_val` - 設定する値。0.0<n<1.0の値を設定します。

### setLostDelay

    public void setLostDelay(int i_val)

  この関数は、マーカ消失時の遅延数を設定します。 ここに設定した回数以上、マーカが連続して認識できなかったときに、認識に失敗します。 デフォルト値は、`DEFAULT_LOST_DELAY`です。

  パラメータ:
    `i_val` - 設定する値。1以上の数値が必要です。

### setThreshold

    public void setThreshold(int i_th)

  この関数は、画像2値化の敷居値を設定します。 デフォルト値は`THLESHOLD_AUTO`です。

  パラメータ:
    `i_th` - 固定式位置を指定する場合は、0<n<256の値を指定します。 固定式位置以外に、次の自動敷居値を利用できます。
    - `THLESHOLD_AUTO` - 敷居値決定に`#NyARRasterThresholdAnalyzer_SlidePTile`を使います。パラメータは15%、スキップ値は、入力画像/80です。

### getCurrentThreshold

    public int getCurrentThreshold()

  この関数は、現在の二値化敷居値を返します。 自動敷居値を選択している場合でも、その時の敷居値を取得できます。

  戻り値:

### initInstance

    protected void initInstance(PApplet parent,
                                String i_cparam_file,
                                int i_width,
                                int i_height,
                                NyAR4PsgConfig i_config)
                         throws NyARException

  インスタンスを初期化します。

  オーバーライド:
    クラス `NyARPsgBaseClass` 内の `initInstance`
  パラメータ:
    `parent` -
    `i_width` -
    `i_height` -
    `i_cparam_file` -
    `i_patt_resolution` -
    `i_projection_coord_system` -
  例外:
    `NyARException`

### beginTransform

    public void beginTransform(int i_id)

  この関数は、ProcessingのProjectionMatrixとModelview行列を、指定idのマーカ平面にセットします。 必ず`endTransform()`とペアで使います。 関数を実行すると、現在のModelView行列とProjection行列がインスタンスに保存され、新しい行列がセットされます。 これらを復帰するには、`endTransform()`を使います。 復帰するまでの間は、再度`beginTransform(int)`を使うことはできません。
  この関数は、次のコードと等価です。

  :
  //prev_matは現在の行列退避用。endTransformで使用する。
  PMatrix3D prev_mat=new PMatrix3D(((PGraphics3D)g).projection);
  setARPerspective();
  pushMatrix();
  setMatrix(ar.getMarkerMatrix(i_id));
  :

  パラメータ:
    `i_id` - マーカidを指定します。

### endTransform

    public void endTransform()

  この関数は、`beginTransform(int)`でセットしたProjectionとModelViewを元に戻します。 この関数は、必ず`beginTransform(int)`とペアで使います。
  この関数は、次のコードと等価です。

  :
  setPerspective(prev_mat);//prev_matはsetARPerspectiveで退避した行列。
  pushMatrix();
  setMatrix(ar.getMarkerMatrix());
  :

### detect

    public void detect(PImage i_image)

  この関数は、画像からマーカーの検出処理を実行します。

  パラメータ:
    `i_image` - 検出処理を行う画像を指定します。

### addARMarker

    public int addARMarker(String i_file_name,
                           int i_patt_resolution,
                           int i_edge_percentage,
                           float i_width)

  この関数は、ARToolKitスタイルのマーカーをファイルから読みだして、登録します。 同じパターンを複数回登録した場合には、最後に登録したものを優先して認識します。

  パラメータ:
    `i_file_name` - マーカパターンファイル名を指定します。
    `i_patt_resolution` - マーカパターンの解像度を指定します。
    `i_edge_percentage` - マーカのエッジ幅を割合で指定します。 0<n<50の数値です。
    `i_width` - マーカの物理サイズをmm単位で指定します。
  戻り値:
    0から始まるマーカーIDを返します。 この数値は、マーカを区別するためのId値です。0から始まり、`addARMarker(java.lang.String, int, int, float)`と`addNyIdMarker(int, int)`関数を呼ぶたびにインクリメントされます。 `getMarkerMatrix(int)`,`getConfidence(int)`,`isExistMarker(int)`,`addARMarker(java.lang.String, int, int, float)`, `screen2MarkerCoordSystem(int, int, int)`,`pickupMarkerImage(int, int, int, int, int, int, int, int, int, int, int)`,`pickupRectMarkerImage(int, int, int, int, int, int, int)` のid値に使います。

### addARMarker

    public int addARMarker(String i_file_name,
                           int i_patt_resolution,
                           float i_width)

  この関数は、ARToolKitスタイルのマーカーをファイルから読みだして、登録します。 エッジ割合はARToolKitの標準マーカと同じ25%です。 重複するidを登録した場合には、最後に登録したidを優先して認識します。

  パラメータ:
    `i_file_name` - `#addARMarker(String, int, int, double)`を参照。
    `i_patt_resolution` - `#addARMarker(String, int, int, double)`を参照。
    `i_width` - `#addARMarker(String, int, int, double)`を参照。
  戻り値:
    `#addARMarker(String, int, int, double)`を参照。

### addARMarker

    public int addARMarker(String i_file_name,
                           float i_width)

  この関数は、ARToolKitスタイルのマーカーをファイルから読みだして、登録します。 エッジ割合とパターン解像度は、ARToolKitの標準マーカと同じ25%、16x16です。 重複するidを登録した場合には、最後に登録したidを優先して認識します。

  パラメータ:
    `i_file_name` - `#addARMarker(String, int, int, double)`を参照。
    `i_width` - `#addARMarker(String, int, int, double)`を参照。
  戻り値:
    `#addARMarker(String, int, int, double)`を参照。

### addNyIdMarker

    public int addNyIdMarker(int i_nyid,
                             int i_width)

  この関数は、NyIdマーカを追加します。 重複するidを登録した場合には、最後に登録したidを優先して認識します。

  パラメータ:
    `i_nyid` - NyIdを指定します。範囲は、0から33554431です。512以上の数値はmodel3のマーカが必要になるので、特に大量のマーカが必要でなければ512までの値にしてください。
    `i_width` - マーカの物理サイズをmm単位で指定します。
  戻り値:
    0から始まるマーカーIDを返します。 この数値は、マーカを区別するためのId値です。0から始まり、`addARMarker(java.lang.String, int, int, float)`と`addNyIdMarker(int, int)`関数を呼ぶたびにインクリメントされます。

### addNyIdMarker

    public int addNyIdMarker(int i_nyid_range_s,
                             int i_nyid_range_e,
                             int i_width)

  この関数は、NyIdマーカを範囲指定で追加します。 範囲指定を行うと、例えば1~10番までのマーカ全てを同じマーカとして扱うようになります。 範囲中のどのマーカidを認識したかは、`getNyId(int)`で知ることができます。 範囲が重なるidを登録した場合には、最後に登録したidを優先して認識します。

  パラメータ:
    `i_nyid_s` - NyIdの範囲開始値を指定します。範囲は、`addNyIdMarker(int, int)`を参照してください。
    `i_nyid_e` - NyIdの範囲終了値を指定します。 i_nyid_s<=i_nyid_eの関係を満たす値を設定します。
    `i_width` - マーカの物理サイズをmm単位で指定します。
  戻り値:
    0から始まるマーカーIDを返します。 この数値は、マーカを区別するためのId値です。0から始まり、`addARMarker(java.lang.String, int, int, float)`と`addNyIdMarker(int, int)`関数を呼ぶたびにインクリメントされます。

### getMarkerVertex2D

    public PVector[] getMarkerVertex2D(int i_id)

  この関数は、マーカのスクリーン上の4頂点を返します。

  戻り値:

### getMarkerMatrix

    public PMatrix3D getMarkerMatrix(int i_id)

  この関数は、マーカの姿勢行列を返します。 返却した行列は`PApplet.setMatrix(processing.core.PMatrix)`でProcessingにセットできます。

  パラメータ:
    `i_armk_id` - マーカidを指定します。
  戻り値:
    マーカの姿勢行列を返します。

### getConfidence

    public double getConfidence(int i_id)

  この関数は、指定idのARマーカパターンの一致率を返します。 がtrueを返すときだけ有効です。

  パラメータ:
    `i_id` - マーカidを指定します。`addARMarker(java.lang.String, int, int, float)`で登録したidである必要があります。
  戻り値:
    マーカの一致率を返します。0から1.0までの数値です。 この値は、delayが`getLostCount(int)`の時だけ正しい値を返します。それ以外の時には、0を返します。

### getNyId

    public long getNyId(int i_id)

  この関数は、指定idのNyIdマーカから、現在のマーカIdを取得します。 値範囲を持つNyIdの場合は、この関数で現在のId値を得ることができます。

  パラメータ:
    `i_id` - マーカidを指定します。`addNyIdMarker(int, int)`で登録したidである必要があります。
  戻り値:
    現在のNyIdマーカを返します。

### isExistMarker

    public boolean isExistMarker(int i_id)

  この関数は、指定idのマーカが有効かを返します。 がtrueを返すときだけ有効です。

  パラメータ:
    `i_id` - マーカidを指定します。
  戻り値:
    マーカが有効ならばtrueです。無効ならfalseです。

### getLostCount

    public int getLostCount(int i_id)

  この関数は、指定idのマーカの認識状態を返します。 数値は、マーカが連続して認識に失敗した回数です。

  パラメータ:
    `i_id` - マーカidを指定します。
  戻り値:
    0から`setLostDelay(int)`で設定した範囲の値を返します。

### getLife

    public long getLife(int i_id)

  この関数は、指定idのマーカのライフ値を返します。 ライフ値は、マーカが認識されるたびにインクリメントされる値です。 例えば、idマーカとARマーカの分離が難しい時に、十分な値のあるマーカだけを認識することにより、問題を解決できます。

  パラメータ:
    `i_id` - マーカidを指定します。
  戻り値:
    0以上のライフ値です。

### screen2MarkerCoordSystem

    public PVector screen2MarkerCoordSystem(int i_id,
                                            int i_x,
                                            int i_y)

  この関数は、スクリーン座標を、idで指定したマーカ平面座標へ変換して返します。

  パラメータ:
    `i_id` - マーカidを指定します。
    `i_x` - スクリーン座標を指定します。
    `i_y` - スクリーン座標を指定します。
  戻り値:
    マーカ平面上の座標点です。

### pickupMarkerImage

    public PImage pickupMarkerImage(int i_id,
                                    int i_x1,
                                    int i_y1,
                                    int i_x2,
                                    int i_y2,
                                    int i_x3,
                                    int i_y3,
                                    int i_x4,
                                    int i_y4,
                                    int i_out_w_pix,
                                    int i_out_h_pix)

  この関数は、idで指定したマーカの画像のXY平面上の4頂点でかこまれた領域から、画像を取得します。 取得元画像には、最後に`detect(processing.core.PImage)`関数に入力した画像を使います。 座標点は、[mm]単位です。出力解像度はo_outの解像度に伸縮します。 座標点の指定順序は、右手系`#CS_RIGHT_HAND`なら右上から反時計回りです。 座標点の指定順序は、左手系`#CS_LEFT_HAND`なら左上から時計回りです。

  パラメータ:
    `i_id` - マーカIdを指定します。
    `i_x1` - 頂点座標1です。
    `i_y1` - 頂点座標1です。
    `i_x2` - 頂点座標2です。
    `i_y2` - 頂点座標2です。
    `i_x3` - 頂点座標3です。
    `i_y3` - 頂点座標3です。
    `i_x4` - 頂点座標4です。
    `i_y4` - 頂点座標4です。
    `i_out_w_pix` - 出力画像のピクセル幅です。
    `i_out_h_pix` - 出力画像のピクセル高さです。
  戻り値:
    取得したパターンを返します。

### pickupRectMarkerImage

    public PImage pickupRectMarkerImage(int i_id,
                                        int i_l,
                                        int i_t,
                                        int i_w,
                                        int i_h,
                                        int i_out_w_pix,
                                        int i_out_h_pix)

  この関数は、idで指定したマーカのXY平面上の矩形領域から、画像を取得します。 座標点は、[mm]単位です。出力は、o_outの解像度に伸縮します。

  パラメータ:
    `i_id` - 画像を指定します。
    `i_l` - 左上の点を指定します。
    `i_t` - 左上の点を指定します。
    `i_w` - 矩形の幅を指定します。
    `i_h` - 矩形の高さを指定します。
    `i_out_w_pix` - 出力画像のピクセル幅です。
    `i_out_h_pix` - 出力画像のピクセル高さです。
  戻り値:
    取得したパターンを返します。

パッケージ | クラス | 使用 | 非推奨 API
前のクラス 次のクラス | フレームあり フレームなし
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド

NyAR4psgは、NyARToolkit projectで開発している、NyARToolKitのProcessingフロントエンドです。ソースコードは、sorceforge.jpNyARToolkitからダウンロードできます。
Copyright 2011 NyARToolkit project. All rights reserved.