/** * インデクス番号を特徴点配列に反変換する。 * @param features * @param indics * @return */ private static FreakMatchPointSetStack.Item[] intArray2FeaturePointArray(FreakMatchPointSetStack.Item[] features, int[] indics) { FreakMatchPointSetStack.Item[] r = new FreakMatchPointSetStack.Item[indics.Length]; for (int i = 0; i < r.Length; i++) { r[i] = features[indics[i]]; } return(r); }
/** * 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; }