public NyARNftDataSetFile(NyARNftIsetFile i_iset, NyARNftFsetFile i_fset, NyARNftFreakFsetFile i_freak_fset)
 {
     this.iset  = i_iset;
     this.fset  = i_fset;
     this.fset3 = i_freak_fset;
     //iset,fset,fset3から初期化済インスタンスを生成
 }
Пример #2
0
        public static NyARSurfaceDataSet loadFromSurfaceFiles(Stream i_iset_stream, Stream i_fset_stream)
        {
            NyARNftIsetFile iset = NyARNftIsetFile.loadFromIsetFile(i_iset_stream);
            NyARNftFsetFile fset = NyARNftFsetFile.loadFromFsetFile(i_fset_stream);

            return(new NyARSurfaceDataSet(iset, fset));
        }
        private static void scaling(NyARNftIsetFile i_iset, NyARNftFsetFile i_fset, NyARNftFreakFsetFile i_freak_fset, int i_freak_fset_page_id, double i_width_in_msec)
        {
            //比率計算
            double new_dpi  = (i_iset.items[0].width / i_width_in_msec) * 25.4;
            double dpi_rate = (new_dpi / i_iset.items[0].dpi);

            //isetの更新(dpiを)
            for (int i = 0; i < i_iset.items.Length; i++)
            {
                i_iset.items[i].dpi *= dpi_rate;
            }
            //fsetの更新
            for (int i = 0; i < i_fset.list.Length; i++)
            {
                i_fset.list[i].maxdpi *= dpi_rate;
                i_fset.list[i].mindpi *= dpi_rate;
                //ピクセル値に戻す係数
                foreach (NyARNftFsetFile.NyAR2FeatureCoord j in i_fset.list[i].coord)
                {
                    j.mx = j.mx / dpi_rate;
                    j.my = j.my / dpi_rate;
                }
            }
            //fset3の更新
            for (int i = 0; i < i_freak_fset.ref_point.Length; i++)
            {
                i_freak_fset.ref_point[i].coord3D.x /= dpi_rate;
                i_freak_fset.ref_point[i].coord3D.y /= dpi_rate;
            }
        }
 /**
  * 3種類のファイルに対応した入力ストリームから、特徴データを読み出します。
  * @param i_iset_stream
  * @param i_fset_stream
  * @param i_fset3_stream
  * @param i_freak_fset_page_id
  * @param i_width_in_msec
  * NFTターゲット画像の横幅をmmで指定します。スケーリングが不要な場合はNaNを指定します。
  * @return
  */
 public static NyARNftDataSet loadFromNftFiles(Stream i_iset_stream, Stream i_fset_stream, Stream i_fset3_stream, int i_freak_fset_page_id, double i_width_in_msec)
 {
     return(new NyARNftDataSet(
                NyARNftIsetFile.loadFromIsetFile(i_iset_stream),
                NyARNftFsetFile.loadFromFsetFile(i_fset_stream),
                NyARNftFreakFsetFile.loadFromfset3File(i_fset3_stream),
                i_freak_fset_page_id, i_width_in_msec));
 }
 /**
  * コンストラクタです。
  * ファイルイメージからデータセットを生成します。
  * @param i_iset
  * @param i_fset
  * @param i_freak_fset
  * @param i_freak_fset_page_id
  */
 public NyARNftDataSet(NyARNftIsetFile i_iset, NyARNftFsetFile i_fset, NyARNftFreakFsetFile i_freak_fset, int i_freak_fset_page_id, double i_width_in_msec)
 {
     if (!Double.IsNaN(i_width_in_msec))
     {
         scaling(i_iset, i_fset, i_freak_fset, i_freak_fset_page_id, i_width_in_msec);
     }
     this.surface_dataset = new NyARSurfaceDataSet(i_iset, i_fset);
     this.freak_fset      = new KeyframeMap(i_freak_fset, i_freak_fset_page_id);
 }
        public static NyARNftDataSetFile loadFromNftFilePack(byte[] i_byte)
        {
            jp.nyatla.nyartoolkit.cs.cs4.BinaryReader br = new jp.nyatla.nyartoolkit.cs.cs4.BinaryReader(i_byte, jp.nyatla.nyartoolkit.cs.cs4.BinaryReader.ENDIAN_LITTLE);
            //タイプチェック
            String header = byteArray2NullTerminateStr(br.getByteArray(32));

            if (header.CompareTo(HS_NFTPACK_V1) != 0)
            {
                throw new NyARRuntimeException("Invalid header");
            }

            //Entryの取得
            int num_of_entry = br.getInt();

            if (num_of_entry != 3)
            {
                throw new NyARRuntimeException("Invalid entry size");
            }
            int[] entry_info = br.getIntArray(num_of_entry * 2);
            return(new NyARNftDataSetFile(
                       NyARNftIsetFile.loadFromIsetFile(br.getByteArray(entry_info[2 * 0 + 1]), NyARNftIsetFile.FILE_FORMAT_ARTK_V5RAW),
                       NyARNftFsetFile.loadFromFsetFile(br.getByteArray(entry_info[2 * 1 + 1])),
                       NyARNftFreakFsetFile.loadFromfset3File(br.getByteArray(entry_info[2 * 2 + 1]))));
        }
Пример #7
0
 public NyARSurfaceDataSet(NyARNftIsetFile i_iset, NyARNftFsetFile i_fset)
 {
     this.iset = i_iset;
     this.fset = i_fset;
 }
Пример #8
0
        public void extractVisibleFeatures(
            NyARNftFsetFile i_fset, NyARSurfaceTransMatrixSet i_ctrans,
            NyARSurfaceFeatures candidate, NyARSurfaceFeatures candidate2)
        {
            //get work objects
            NyARDoublePoint2d ide2d    = this.__ide2d;
            NyARDoublePoint2d obs2d    = this.__obs2d;
            NyARDoublePoint2d rideal2d = this.__rideal2d;

            //		trans1.setCoefficient(i_cparam.getPerspectiveProjectionMatrix(), trans1);
            candidate.clear();
            candidate2.clear();

            int xsize = this._ref_size.w;
            int ysize = this._ref_size.h;
            INyARCameraDistortionFactor df = this._ref_dist_factor;


            for (int j = 0; j < i_fset.list.Length; j++)
            {
                NyARNftFsetFile.NyAR2FeaturePoints fpoint_ptr = i_fset.list[j];
                for (int k = 0; k < fpoint_ptr.coord.Length; k++)
                {
                    NyARNftFsetFile.NyAR2FeatureCoord coord_ptr = fpoint_ptr.coord[k];

                    //理想画面点を計算
                    i_ctrans.calculate2dPos(coord_ptr.mx, coord_ptr.my, ide2d);
                    df.ideal2Observ(ide2d.x, ide2d.y, obs2d);

                    //観察座標に変換後、画面内にあるか確認
                    if (obs2d.x < 0 || obs2d.x >= xsize)
                    {
                        continue;
                    }
                    if (obs2d.y < 0 || obs2d.y >= ysize)
                    {
                        continue;
                    }
                    //逆変換可能か確認
                    df.observ2Ideal(obs2d, rideal2d);
                    if (ide2d.sqDist(rideal2d) > 1.0)
                    {
                        continue;
                    }


                    //原点からのベクトルを計算
                    //Z軸が+だとつかえないので判定?
                    if (i_ctrans.calculateVd(coord_ptr.mx, coord_ptr.my) > -0.1)
                    {
                        continue;
                    }
                    //				double vd0 = trans1.m00 * coord_ptr.mx+ trans1.m01 * coord_ptr.my+ trans1.m03;
                    //				double vd1 = trans1.m10 * coord_ptr.mx+ trans1.m11 * coord_ptr.my+ trans1.m13;
                    //				double vd2 = trans1.m20 * coord_ptr.mx+ trans1.m21 * coord_ptr.my+ trans1.m23;
                    //				if( (vd0*trans1.m02 + vd1*trans1.m12 + vd2*trans1.m22)/Math.sqrt( vd0*vd0 + vd1*vd1 + vd2*vd2 ) > -0.1 ){
                    //					continue;
                    //				}


                    //撮影箇所のdpiを計算(x,y方向で計算して、大・小の順番で格納?)
                    double dpi = i_ctrans.ar2GetMinResolution(coord_ptr);

                    //dpiによってコレクトする候補を分離
                    if (dpi <= fpoint_ptr.maxdpi && dpi >= fpoint_ptr.mindpi)
                    {
                        NyARSurfaceFeatureItem item = candidate.prePush();
                        if (item == null)
                        {
                            return;
                        }
                        item.ref_feature = coord_ptr;
                        item.scale       = fpoint_ptr.scale;
                        item.x           = obs2d.x;
                        item.y           = obs2d.y;
                    }
                    else if (dpi <= fpoint_ptr.maxdpi * 2 && dpi >= fpoint_ptr.mindpi / 2)
                    {
                        NyARSurfaceFeatureItem item = candidate2.prePush();
                        if (item == null)
                        {
                            return;
                        }
                        item.ref_feature = coord_ptr;
                        item.scale       = fpoint_ptr.scale;
                        item.x           = obs2d.x;
                        item.y           = obs2d.y;
                    }
                }
            }
            return;
        }