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から初期化済インスタンスを生成 }
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); }
/** * FsetFileデータから、page_idに一致したキーマップを生成します。 * @param i_refDataSet * @param i_page_id */ public KeyframeMap(NyARNftFreakFsetFile i_refDataSet, int i_page_id) { NyARNftFreakFsetFile.PageInfo page_info = i_refDataSet.page_info[i_page_id]; int db_id = 0; for (int m = 0; m < page_info.image_info.Length; m++) { int image_no = page_info.image_info[m].image_no; int l = 0; //格納予定のデータ数を数える for (int i = 0; i < i_refDataSet.ref_point.Length; i++) { if (i_refDataSet.ref_point[i].refImageNo == image_no) { l++; } } FreakMatchPointSetStack fps = new FreakMatchPointSetStack(l); for (int i = 0; i < i_refDataSet.ref_point.Length; i++) { if (i_refDataSet.ref_point[i].refImageNo == image_no) { NyARNftFreakFsetFile.RefDataSet t = i_refDataSet.ref_point[i]; FreakMatchPointSetStack.Item fp = fps.prePush(); fp.x = t.coord2D.x; fp.y = t.coord2D.y; fp.angle = t.featureVec.angle; fp.scale = t.featureVec.scale; fp.maxima = t.featureVec.maxima > 0 ? true : false; if (i_refDataSet.ref_point[i].featureVec.v.Length != 96) { throw new NyARRuntimeException(); } fp.descripter.setValueLe(i_refDataSet.ref_point[i].featureVec.v); fp.pos3d.x = t.coord3D.x; fp.pos3d.y = t.coord3D.y; fp.pos3d.z = 0; } } Keyframe keyframe = new Keyframe(page_info.image_info[m].w, page_info.image_info[m].h, fps); this.Add(db_id++, keyframe); } return; }
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])))); }