/** * ターゲットリストを参考に、sampleを振り分て、サンプルスタックに格納します。 * ターゲットは、rect>coord>new>ignoreの順に優先して振り分けられます。 * @param i_snapshot * @param i_source * @param i_new * @param i_ig * @param i_cood * @param i_rect * @param i_newsrc * @param i_igsrc * @param i_coodsrc * @param i_rectsrc * @throws NyARException */ private void sampleMapper( LowResolutionLabelingSamplerOut i_source, NyARTargetList i_new, NyARTargetList i_ig, NyARTargetList i_cood, NyARTargetList i_rect, SampleStack i_newsrc, SampleStack i_igsrc, SampleStack i_coodsrc, SampleStack i_rectsrc) { //スタックを初期化 i_newsrc.clear(); i_coodsrc.clear(); i_igsrc.clear(); i_rectsrc.clear(); // LowResolutionLabelingSamplerOut.Item[] sample_items = i_source.getArray(); for (int i = i_source.getLength() - 1; i >= 0; i--) { //サンプラからの値を其々のターゲットのソースへ分配 LowResolutionLabelingSamplerOut.Item sample_item = sample_items[i]; int id; id = i_rect.getMatchTargetIndex(sample_item); if (id >= 0) { i_rectsrc.push(sample_item); continue; } //coord id = i_cood.getMatchTargetIndex(sample_item); if (id >= 0) { i_coodsrc.push(sample_item); continue; } //newtarget id = i_new.getMatchTargetIndex(sample_item); if (id >= 0) { i_newsrc.push(sample_item); continue; } //ignore target id = i_ig.getMatchTargetIndex(sample_item); if (id >= 0) { i_igsrc.push(sample_item); continue; } //マップできなかったものは、NewTragetへ登録(種類別のListには反映しない) NyARTarget t = this.addNewTarget(sample_item); if (t == null) { continue; } i_newsrc.push(sample_item); } return; }
/** * コンストラクタです。 * @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; }
public void makePairIndexes(SampleStack igsource, NyARTargetList igtr, int[] index) { this.setPointDists(igsource.getArray(), igsource.getLength(), igtr.getArray(), igtr.getLength()); this.getMinimumPair(index); return; }