jp.nyatla.nyar4psg
クラス MultiMarker

java.lang.Object
  上位を拡張 jp.nyatla.nyar4psg.NyARPsgBaseClass
      上位を拡張 jp.nyatla.nyar4psg.MultiMarker

public class MultiMarker
extends NyARPsgBaseClass

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


入れ子のクラスの概要
(package private)  class MultiMarker.PImageSensor
           
(package private)  class MultiMarker.PsgMsCfg
           
 
フィールドの概要
protected  jp.nyatla.nyartoolkit.markersystem.NyARMarkerSystem _ms
           
protected  MultiMarker.PImageSensor _ss
           
static double DEFAULT_CF_THRESHOLD
          初期値定数。
static int DEFAULT_LOST_DELAY
          初期値定数。
static int THLESHOLD_AUTO
          敷居値の定数です。
 
クラス jp.nyatla.nyar4psg.NyARPsgBaseClass から継承されたフィールド
_config, _ps_background_mv, _ref_papplet, FRUSTUM_DEFAULT_FAR_CLIP, FRUSTUM_DEFAULT_NEAR_CLIP, VERSION
 
コンストラクタの概要
MultiMarker(PApplet parent, int i_width, int i_height, double[] i_intrinsic_matrix, double[] i_distortion_coeffs)
          コンストラクタです。
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(PImage i_img, int i_patt_resolution, int i_edge_percentage, float i_width)
          この関数は、i_imgの画像をARマーカパターンとして登録します。
 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マーカを範囲指定で追加します。
 int addPsARPlayCard(int i_psarid, int i_width)
          この関数は、PSVitaのARプレイカードを検出対象に追加します。
 void beginTransform(int i_id)
          この関数は、ProcessingのProjectionMatrixとModelview行列を、指定idのマーカ平面にセットします。
 void detect(PImage i_image)
          この関数は、画像からマーカーの検出処理を実行します。
 void detectWithoutLoadPixels(PImage i_image)
          PImage.loadPixels()を伴わないdetect()です。
 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を取得します。
 PMatrix3D getProjectionMatrix()
          [readonly]この関数は、Processing形式のProjectionMatrixの参照値を返します。
 PMatrix3D getProjectionMatrix(PMatrix3D i_buf)
          この関数は、ProjectionMatrixをi_bufへ複製して返します。
protected  void initInstance(PApplet parent, NyARParam i_param, 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 setARClipping(float i_near, float i_far)
          この関数は、視錐台のクリップ面を設定します。
 void setConfidenceThreshold(double i_val)
          この関数は、ARマーカパターン一致率の閾値を設定します。
 void setLostDelay(int i_val)
          この関数は、マーカ消失時の遅延数を設定します。
 void setThreshold(int i_th)
          この関数は、画像2値化の敷居値を設定します。
 
クラス jp.nyatla.nyar4psg.NyARPsgBaseClass から継承されたメソッド
drawBackground, initInstance, matResult2GLArray, matResult2PMatrix3D, nyarMat2PsMat, PMatrix2GLProjection, PMatrix2GLProjection, setARPerspective, setBackgroundOrtho, setPerspective
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

_ss

protected MultiMarker.PImageSensor _ss

_ms

protected jp.nyatla.nyartoolkit.markersystem.NyARMarkerSystem _ms

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

MultiMarker

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

パラメータ:
parent - MultiMarker(PApplet, int, int, String, NyAR4PsgConfig)を参照。
i_width - 入力画像の横解像度を指定します。通常、キャプチャ画像のサイズを指定します。
i_height - 入力画像の横解像度を指定します。通常、キャプチャ画像のサイズを指定します。
i_size - カメラパラメータのサイズ値
i_intrinsic_matrix - 3x3 matrix このパラメータは、OpenCVのcvCalibrateCamera2関数が出力するintrinsic_matrixの値と合致します。
i_distortion_coeffs - 4x1 matrix このパラメータは、OpenCVのcvCalibrateCamera2関数が出力するdistortion_coeffsの値と合致します。
メソッドの詳細

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,
                            NyARParam i_param,
                            NyAR4PsgConfig i_config)
                     throws NyARException
インスタンスを初期化します。

パラメータ:
parent -
i_width -
i_height -
i_cparam_file -
i_patt_resolution -
i_projection_coord_system -
例外:
NyARException

getProjectionMatrix

public PMatrix3D getProjectionMatrix()
クラス NyARPsgBaseClass の記述:
[readonly]この関数は、Processing形式のProjectionMatrixの参照値を返します。

定義:
クラス NyARPsgBaseClass 内の getProjectionMatrix
戻り値:

getProjectionMatrix

public PMatrix3D getProjectionMatrix(PMatrix3D i_buf)
クラス NyARPsgBaseClass の記述:
この関数は、ProjectionMatrixをi_bufへ複製して返します。

定義:
クラス NyARPsgBaseClass 内の getProjectionMatrix
戻り値:
ProjectionMatrixです。

setARClipping

public void setARClipping(float i_near,
                          float i_far)
クラス NyARPsgBaseClass の記述:
この関数は、視錐台のクリップ面を設定します。この値のデフォルト値は、NyARPsgBaseClass.FRUSTUM_DEFAULT_NEAR_CLIPNyARPsgBaseClass.FRUSTUM_DEFAULT_FAR_CLIPです。 設定値は、次回のNyARPsgBaseClass.setARPerspective()から影響を及ぼします。現在の設定値にただちに影響を及ぼすものではありません。

オーバーライド:
クラス NyARPsgBaseClass 内の setARClipping
パラメータ:
i_near - NearPlaneの値を設定します。単位は[mm]です。
i_far - FarPlaneの値を設定します。単位は[mm]です。

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に対して1度だけPImage.loadPixels()を実行します。 PImage.loadPixels()のタイミングをコントロールしたい場合は、detectWithoutLoadPixels(processing.core.PImage)を使用してください。

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

detectWithoutLoadPixels

public void detectWithoutLoadPixels(PImage i_image)
PImage.loadPixels()を伴わないdetect()です。 引数と戻り値の詳細は、detect(PImage)を参照してください。

パラメータ:
i_image -
関連項目:
detect(PImage)

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(PImage i_img,
                       int i_patt_resolution,
                       int i_edge_percentage,
                       float i_width)
この関数は、i_imgの画像をARマーカパターンとして登録します。

パラメータ:
i_img - マーカパターンのカラー画像を指定します。 関数はi_imgのPImage.loadPixels()を1度だけ呼び出します。
i_patt_resolution - 作成するマーカパターンの解像度を指定します。ARToolkitと同一であれば16です。 数値が高いほどシビアな判定が出来ますが、速度は低下します。
i_edge_percentage - エッジ割合を指定します。この数値は、元画像と、抽出するマーカパターンの両方に影響を及ぼします。 ARToolKit互換のパターンの場合、25を指定します。
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)関数を呼ぶたびにインクリメントされます。

addPsARPlayCard

public int addPsARPlayCard(int i_psarid,
                           int i_width)
この関数は、PSVitaのARプレイカードを検出対象に追加します。

パラメータ:
i_psarid - PSVitaのARプレイカードのIDを指定します。1から6間での数値です。
i_width - マーカの物理サイズをmm単位で指定します。
戻り値:
0から始まるマーカーIDを返します。 この数値は、マーカを区別するためのId値です。

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までの数値です。 この値は、isExistMarker(int)がtrueの時だけ正しい数を返します。

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