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のマーカが有効かを返します。
 PVector marker2ScreenCoordSystem(int i_id, double i_x, double i_y, double i_z)
          この関数は、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, getProjectionMatrix, 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にセットできます。

パラメータ:
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以上のライフ値です。

marker2ScreenCoordSystem

public PVector marker2ScreenCoordSystem(int i_id,
                                        double i_x,
                                        double i_y,
                                        double i_z)
この関数は、idで示されるマーカ座標系の点をスクリーン座標へ変換します。

パラメータ:
i_id - マーカidを指定します。
i_x - マーカ座標系のX座標
i_y - マーカ座標系のY座標
i_z - マーカ座標系のZ座標
戻り値:
スクリーン座標

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(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.