/** * この関数は、入力したセンサ入力値から、インスタンスの状態を更新します。 * 関数は、センサオブジェクトから画像を取得して、マーカ検出、一致判定、トラッキング処理を実行します。 * @param i_sensor * {@link MarkerSystem}に入力する画像を含むセンサオブジェクト。 * @throws NyARException */ public void update(NyARSensor i_sensor) { long time_stamp = i_sensor.getTimeStamp(); //センサのタイムスタンプが変化していなければ何もしない。 if (this._time_stamp == time_stamp) { return; } int th = this._bin_threshold == THLESHOLD_AUTO?this._hist_th.getThreshold(i_sensor.getGsHistogram()) : this._bin_threshold; this._sq_stack.clear(); //矩形情報の保持スタック初期化 //解析 this._tracking_list.prepare(); this._idmk_list.prepare(); this._armk_list.prepare(); //検出処理 this._on_sq_handler._ref_input_rfb = i_sensor.getPerspectiveCopy(); this._on_sq_handler._ref_input_gs = i_sensor.getGsImage(); //検出 this._sqdetect.detectMarkerCb(i_sensor, th, this._on_sq_handler); //検出結果の反映処理 this._tracking_list.finish(); this._armk_list.finish(); this._idmk_list.finish(); //期限切れチェック for (int i = this._tracking_list.Count - 1; i >= 0; i--) { TMarkerData item = this._tracking_list[i]; if (item.lost_count > this.lost_th) { item.life = 0; //活性off } } //各ターゲットの更新 for (int i = this._armk_list.Count - 1; i >= 0; i--) { MarkerInfoARMarker target = this._armk_list[i]; if (target.lost_count == 0) { target.time_stamp = time_stamp; this._transmat.transMatContinue(target.sq, target.marker_offset, target.tmat, target.tmat); } } for (int i = this._idmk_list.Count - 1; i >= 0; i--) { MarkerInfoNyId target = this._idmk_list[i]; if (target.lost_count == 0) { target.time_stamp = time_stamp; this._transmat.transMatContinue(target.sq, target.marker_offset, target.tmat, target.tmat); } } //解析/ //タイムスタンプを更新 this._time_stamp = time_stamp; this._last_gs_th = th; }
/** * この関数は、1個の範囲を持つidマーカをシステムに登録して、検出可能にします。 * インスタンスは、i_id_s<=n<=i_id_eの範囲にあるマーカを検出します。 * 例えば、1番から5番までのマーカを検出する場合に使います。 * 関数はマーカに対応したID値(ハンドル値)を返します。 * @param i_id_s * Id範囲の開始値 * @param i_id_e * Id範囲の終了値 * @param i_marker_size * マーカの四方サイズ[mm] * @return * マーカID(ハンドル)値。この値はNyIDの値ではなく、マーカのハンドル値です。 * @throws NyARException */ public int addNyIdMarker(long i_id_s, long i_id_e, double i_marker_size) { MarkerInfoNyId target = new MarkerInfoNyId(i_id_s, i_id_e, i_marker_size); this._idmk_list.Add(target); this._tracking_list.add(target); return((this._idmk_list.Count - 1) | IDTYPE_NYID); }