Example #1
0
 /**
  * ターゲットリストを参考に、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;
 }
Example #2
0
        /**
         * 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);
        }
Example #3
0
        /**
         * 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;
        }