/** * NewTargetのステータスを更新します。 * @param i_sample * @throws NyARException */ public static void updateNewStatus(NyARTargetList i_list, NyARNewTargetStatusPool i_pool, LowResolutionLabelingSamplerOut.Item[] source, int[] index) { NyARTarget d_ptr; NyARTarget[] i_nes = i_list.getArray(); //ターゲットの更新 for (int i = i_list.getLength() - 1; i >= 0; i--) { d_ptr = i_nes[i]; int sample_index = index[i]; //年齢を加算 d_ptr._status_life--; if (sample_index < 0) { //このターゲットに合致するアイテムは無い。 ((NyARNewTargetStatus)d_ptr._ref_status).setValue(null); d_ptr._delay_tick++; continue; } LowResolutionLabelingSamplerOut.Item s = source[sample_index]; //先にステータスを作成しておく NyARNewTargetStatus st = i_pool.newObject(); if (st == null) { //ステータスの生成に失敗 d_ptr._delay_tick++; //System.out.println("updateNewStatus:status pool full"); continue; } //新しいステータス値のセット st.setValue(s); //ターゲットの更新 d_ptr.setSampleArea(s); d_ptr._delay_tick = 0; //ref_statusのセットと切り替え(失敗時の上書き防止のためにダブルバッファ化) d_ptr._ref_status.releaseObject(); d_ptr._ref_status = st; } }
/** * コンストラクタです。 * @param i_max_new * Newトラックターゲットの最大数を指定します。 * @param i_max_cont * Contourトラックターゲットの最大数を指定します。 * @param i_max_rect * Rectトラックターゲットの最大数を指定します。 * @throws NyARException */ public NyARTracker(int i_max_new, int i_max_cont, int i_max_rect) { //環境定数の設定 this.MAX_NUMBER_OF_NEW = i_max_new; this.MAX_NUMBER_OF_CONTURE = i_max_cont; this.MAX_NUMBER_OF_RECT = i_max_rect; this.MAX_NUMBER_OF_TARGET = (i_max_new + i_max_cont + i_max_rect) * 5; //ターゲットマップ用の配列と、リスト。この関数はNyARTargetStatusのIDと絡んでるので、気をつけて! this._temp_targets = new NyARTargetList[NyARTargetStatus.MAX_OF_ST_KIND + 1]; this._temp_targets[NyARTargetStatus.ST_NEW] = new NyARTargetList(i_max_new); this._temp_targets[NyARTargetStatus.ST_IGNORE] = new NyARTargetList(this.MAX_NUMBER_OF_TARGET); this._temp_targets[NyARTargetStatus.ST_CONTURE] = new NyARTargetList(i_max_cont); this._temp_targets[NyARTargetStatus.ST_RECT] = new NyARRectTargetList(i_max_rect); //ソースリスト this._newsource = new SampleStack(i_max_new); this._igsource = new SampleStack(this.MAX_NUMBER_OF_TARGET); this._coordsource = new SampleStack(i_max_cont); this._rectsource = new SampleStack(i_max_rect); //ステータスプール this.newst_pool = new NyARNewTargetStatusPool(i_max_new * 2); this.contourst_pool = new NyARContourTargetStatusPool(i_max_rect + i_max_cont * 2); this.rect_pool = new NyARRectTargetStatusPool(i_max_rect * 2); //ターゲットプール this.target_pool = new NyARTargetPool(this.MAX_NUMBER_OF_TARGET); //ターゲット this._targets = new NyARTargetList(this.MAX_NUMBER_OF_TARGET); //ここ注意!マップの最大値は、ソースアイテムの個数よりおおきいこと! this._map = new DistMap(this.MAX_NUMBER_OF_TARGET, this.MAX_NUMBER_OF_TARGET); this._index = new int[this.MAX_NUMBER_OF_TARGET]; //定数初期化 this._number_of_new = this._number_of_ignore = this._number_of_contoure = this._number_of_rect = 0; }