/**
         * この関数は、入力したセンサ入力値から、インスタンスの状態を更新します。
         * 関数は、センサオブジェクトから画像を取得して、マーカ検出、一致判定、トラッキング処理を実行します。
         * @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);
        }