Пример #1
0
 public static NyARNftFsetFile genFeatureSet(NyARNftIsetFile i_iset_file, int i_occupancy_size, double i_max_sim_th, double i_min_sim_th, double i_sd_th)
 {
     NyARNftIsetFile.ReferenceImage[]     items  = i_iset_file.items;
     NyARNftFsetFile.NyAR2FeaturePoints[] points = new NyARNftFsetFile.NyAR2FeaturePoints[items.Length];
     for (int i = 0; i < items.Length; i++)
     {
         NyARNftIsetFile.ReferenceImage rimg = items[i];
         //MAX-dpiとMIN-dpiを計算
         double max_dpi = Double.MaxValue;
         double min_dpi = rimg.dpi * 0.5;
         for (int j = 0; j < items.Length; j++)
         {
             if (rimg.dpi < items[j].dpi && max_dpi > items[j].dpi)
             {
                 max_dpi = items[j].dpi;
             }
             if (rimg.dpi > items[j].dpi && min_dpi < items[j].dpi)
             {
                 min_dpi = items[j].dpi;
             }
         }
         if (max_dpi == Double.MaxValue)
         {
             max_dpi = rimg.dpi * 2;
         }
         else
         {
             max_dpi = rimg.dpi * 0.8 + max_dpi * 0.2;
         }
         //MIN-dpiの計算(一番近い小さい値
         points[i] = new NyARNftFsetFile.NyAR2FeaturePoints(rimg, i_occupancy_size, i_max_sim_th, i_min_sim_th, i_sd_th, max_dpi, min_dpi, i);
     }
     return(new NyARNftFsetFile(points));
 }
 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から初期化済インスタンスを生成
 }
Пример #3
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 NyARNftFreakFsetFile genFeatureSet3(NyARNftIsetFile i_iset_file)
        {
            int max_features = 500;
            DogFeaturePointStack   _dog_feature_points = new DogFeaturePointStack(max_features);
            FreakFeaturePointStack query_keypoint      = new FreakFeaturePointStack(max_features);
            //
            List <NyARNftFreakFsetFile.RefDataSet> refdataset = new List <NyARNftFreakFsetFile.RefDataSet>();
            List <NyARNftFreakFsetFile.ImageInfo>  imageinfo  = new List <NyARNftFreakFsetFile.ImageInfo>();

            for (int ii = 0; ii < i_iset_file.items.Length; ii++)
            {
                NyARNftIsetFile.ReferenceImage rimg         = i_iset_file.items[ii];
                FREAKExtractor            mFeatureExtractor = new FREAKExtractor();
                int                       octerves          = BinomialPyramid32f.octavesFromMinimumCoarsestSize(rimg.width, rimg.height, 8);
                BinomialPyramid32f        _pyramid          = new BinomialPyramid32f(rimg.width, rimg.height, octerves, 3);
                DoGScaleInvariantDetector _dog_detector     = new DoGScaleInvariantDetector(rimg.width, rimg.height, octerves, 3, 3, 4, max_features);

                //RefDatasetの作成
                _pyramid.build(NyARGrayscaleRaster.createInstance(rimg.width, rimg.height, NyARBufferType.INT1D_GRAY_8, rimg.img));
                // Detect feature points
                _dog_feature_points.clear();
                _dog_detector.detect(_pyramid, _dog_feature_points);

                // Extract features
                query_keypoint.clear();
                mFeatureExtractor.extract(_pyramid, _dog_feature_points, query_keypoint);

                for (int i = 0; i < query_keypoint.getLength(); i++)
                {
                    FreakFeaturePoint ffp = query_keypoint.getItem(i);
                    NyARNftFreakFsetFile.RefDataSet rds = new NyARNftFreakFsetFile.RefDataSet();
                    rds.pageNo     = 1;
                    rds.refImageNo = ii;
                    rds.coord2D.setValue(ffp.x, ffp.y);
                    rds.coord3D.setValue((ffp.x + 0.5f) / rimg.dpi * 25.4f, ((rimg.height - 0.5f) - ffp.y) / rimg.dpi * 25.4f);
                    rds.featureVec.angle  = ffp.angle;
                    rds.featureVec.maxima = ffp.maxima ? 1 : 0;
                    rds.featureVec.scale  = ffp.scale;
                    ffp.descripter.getValueLe(rds.featureVec.v);
                    refdataset.Add(rds);
                }
                imageinfo.Add(new NyARNftFreakFsetFile.ImageInfo(rimg.width, rimg.height, ii));
            }
            NyARNftFreakFsetFile.PageInfo[] pi = new NyARNftFreakFsetFile.PageInfo[1];
            pi[0] = new NyARNftFreakFsetFile.PageInfo(1, imageinfo.ToArray());
            return(new NyARNftFreakFsetFile(refdataset.ToArray(), pi));
        }
Пример #8
0
 public static NyARNftFsetFile genFeatureSet(NyARNftIsetFile i_iset_file, int i_level)
 {
     int[] occs =
     {
         AR2_DEFAULT_OCCUPANCY_SIZE,
         AR2_DEFAULT_OCCUPANCY_SIZE,
         AR2_DEFAULT_OCCUPANCY_SIZE *2 / 3,
         AR2_DEFAULT_OCCUPANCY_SIZE *2 / 3,
         AR2_DEFAULT_OCCUPANCY_SIZE *1 / 2
     };
     double[][] data =
     {
         new double[] { AR2_DEFAULT_SD_THRESH_L0, AR2_DEFAULT_MIN_SIM_THRESH_L0, AR2_DEFAULT_MAX_SIM_THRESH_L0 },
         new double[] { AR2_DEFAULT_SD_THRESH_L1, AR2_DEFAULT_MIN_SIM_THRESH_L1, AR2_DEFAULT_MAX_SIM_THRESH_L1 },
         new double[] { AR2_DEFAULT_SD_THRESH_L2, AR2_DEFAULT_MIN_SIM_THRESH_L2, AR2_DEFAULT_MAX_SIM_THRESH_L2 },
         new double[] { AR2_DEFAULT_SD_THRESH_L3, AR2_DEFAULT_MIN_SIM_THRESH_L3, AR2_DEFAULT_MAX_SIM_THRESH_L3 },
         new double[] { AR2_DEFAULT_SD_THRESH_L3, AR2_DEFAULT_MIN_SIM_THRESH_L3, AR2_DEFAULT_MAX_SIM_THRESH_L3 }
     };
     return(genFeatureSet(i_iset_file, occs[i_level], data[i_level][2], data[i_level][1], data[i_level][0]));
 }
        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]))));
        }
Пример #10
0
 public static NyARNftFsetFile genFeatureSet(NyARNftIsetFile i_iset_file)
 {
     return(genFeatureSet(i_iset_file, 2));
 }
Пример #11
0
 public NyARSurfaceDataSet(NyARNftIsetFile i_iset, NyARNftFsetFile i_fset)
 {
     this.iset = i_iset;
     this.fset = i_fset;
 }