/** * ターゲットリストを参考に、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; }
/** * i_inのデータをサンプリングして、o_outにサンプル値を作成します。 * この関数は、o_outにi_inのサンプリング結果を出力します。既にo_outにあるデータは初期化されます。 * @param i_in * 入力元のデータです。 * @param i_th * ラべリングの敷居値です。 * @param o_out * 出力先のデータです。 * @throws NyARException */ public void Sampling(NyARGrayscaleRaster i_in, int i_th, LowResolutionLabelingSamplerOut o_out) { //クラスのパラメータ初期化 Main_Labeling lb = this._main_labeling; lb.current_output = o_out; lb.current_th = i_th; //パラメータの設定 o_out.initializeParams(); //ラべリング lb.setAreaRange(10000, 3); lb.labeling(i_in, i_th); }
/** * Trackerの状態を更新します。 * @param i_source * @throws NyARException */ public void progress(NyARTrackerSource i_s) { //SampleOutを回収 LowResolutionLabelingSamplerOut sample_out = i_s.makeSampleOut(); NyARTargetList[] targets = this._temp_targets; NyARTargetList newtr = targets[NyARTargetStatus.ST_NEW]; NyARTargetList igtr = targets[NyARTargetStatus.ST_IGNORE]; NyARTargetList cotr = targets[NyARTargetStatus.ST_CONTURE]; NyARTargetList retw = targets[NyARTargetStatus.ST_RECT]; INyARVectorReader vecreader = i_s.getBaseVectorReader(); //ターゲットリストの振り分け NyARTarget[] target_array = this._targets.getArray(); newtr.clear(); igtr.clear(); cotr.clear(); retw.clear(); for (int i = this._targets.getLength() - 1; i >= 0; i--) { targets[target_array[i]._st_type].pushAssert(target_array[i]); } int[] index = this._index; //サンプルをターゲット毎に振り分け sampleMapper(sample_out, newtr, igtr, cotr, retw, this._newsource, this._igsource, this._coordsource, this._rectsource); //ターゲットの更新 this._map.makePairIndexes(this._igsource, igtr, index); updateIgnoreStatus(igtr, this._igsource.getArray(), index); this._map.makePairIndexes(this._newsource, newtr, index); updateNewStatus(newtr, this.newst_pool, this._newsource.getArray(), index); this._map.makePairIndexes(this._rectsource, retw, index); updateRectStatus(retw, vecreader, this.rect_pool, this._rectsource.getArray(), index); this._map.makePairIndexes(this._coordsource, cotr, index); updateContureStatus(cotr, vecreader, this.contourst_pool, this._coordsource.getArray(), index); //ターゲットのアップグレード for (int i = this._targets.getLength() - 1; i >= 0; i--) { switch (target_array[i]._st_type) { case NyARTargetStatus.ST_IGNORE: upgradeIgnoreTarget(i); continue; case NyARTargetStatus.ST_NEW: upgradeNewTarget(target_array[i], vecreader); continue; case NyARTargetStatus.ST_RECT: upgradeRectTarget(target_array[i]); continue; case NyARTargetStatus.ST_CONTURE: upgradeContourTarget(target_array[i]); continue; } } return; }