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_projection, _ref_papplet, _src_raster, 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 から継承されたメソッド
matResult2GLArray, matResult2PMatrix3D, pickupMarkerImage, PMatrix2GLProjection, PMatrix2GLProjection, screen2MarkerCoordSystem, setARPerspective, 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)を使うことはできません。
この関数は、次のコードと等価です。

:
PMatrix3D prev_mat=setARPerspective();//prev_matは現在の行列退避用。
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 - 出力画像のピクセル高さです。
戻り値:
取得したパターンを返します。


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