/** * ARTKパターンコードを、テーブルに追加します。このパターンコードのメタデータとして、IDと名前を指定できます。 * @param i_code * ARToolKit形式のパターンコードを格納したオブジェクト。このオブジェクトは、関数成功後はインスタンスに所有されます。 * パターンコードの解像度は、コンストラクタに指定した高さと幅である必要があります。 * @param i_id * このマーカを識別するユーザ定義のID値です。任意の値を指定できます。不要な場合は0を指定してください。 * @param i_name * ユーザ定義の名前です。任意の値を指定できます。不要な場合はnullを指定して下さい。 * @param i_width * マーカの高さ[通常mm単位] * @param i_height * マーカの幅[通常mm単位] * @return */ public bool addMarker(NyARCode i_code, int i_id, String i_name, double i_width, double i_height) { Debug.Assert(i_code.getHeight() == this._resolution_height && i_code.getHeight() == this._resolution_width); MarkerTable.SerialTableRow d = this._table.prePush(); if (d == null) { return(false); } d.setValue(i_code, i_id, i_name, i_width, i_height); return(true); }
/** * ARToolkit準拠のパターンファイルからパターンコードを生成して、テーブルへ追加します。 * @param i_filename * @param i_id * このマーカを識別するユーザ定義のID値です。任意の値を指定できます。不要な場合は0を指定してください。 * @param i_name * ユーザ定義の名前です。任意の値を指定できます。不要な場合はnullを指定して下さい。 * @param i_width * マーカの高さ[通常mm単位] * @param i_height * マーカの幅[通常mm単位] * @return * @throws NyARException */ public bool addMarkerFromARPatt(StreamReader i_stream, int i_id, String i_name, double i_width, double i_height) { MarkerTable.SerialTableRow d = this._table.prePush(); if (d == null) { return(false); } NyARCode c = NyARCode.createFromARPattFile(i_stream, this._resolution_width, this._resolution_height); d.setValue(c, i_id, i_name, i_width, i_height); return(true); }
/** * i_rasterからパターンコードを生成して、テーブルへ追加します。 * @param i_raster * @param i_id * このマーカを識別するユーザ定義のID値です。任意の値を指定できます。不要な場合は0を指定してください。 * @param i_name * ユーザ定義の名前です。任意の値を指定できます。不要な場合はnullを指定して下さい。 * @param i_width * マーカの高さ[通常mm単位] * @param i_height * マーカの幅[通常mm単位] * @return * @throws NyARException */ public bool addMarker(NyARRgbRaster i_raster, int i_id, String i_name, double i_width, double i_height) { MarkerTable.SerialTableRow d = this._table.prePush(); if (d == null) { return(false); } NyARCode c = new NyARCode(this._resolution_width, this._resolution_height); c.setRaster(i_raster); d.setValue(c, i_id, i_name, i_width, i_height); return(true); }
/** * ARToolkit準拠のパターンファイルからパターンコードを生成して、テーブルへ追加します。 * @param i_filename * @param i_id * このマーカを識別するユーザ定義のID値です。任意の値を指定できます。不要な場合は0を指定してください。 * @param i_name * ユーザ定義の名前です。任意の値を指定できます。不要な場合はnullを指定して下さい。 * @param i_width * マーカの高さ[通常mm単位] * @param i_height * マーカの幅[通常mm単位] * @return * @throws NyARException */ public bool addMarkerFromARPattFile(String i_filename, int i_id, String i_name, double i_width, double i_height) { MarkerTable.SerialTableRow d = this._table.prePush(); if (d == null) { return(false); } NyARCode c = new NyARCode(this._resolution_width, this._resolution_height); c.loadARPattFromFile(i_filename); d.setValue(c, i_id, i_name, i_width, i_height); return(true); }
/** * RealityTargetに最も一致するパターンをテーブルから検索して、メタデータを返します。 * @param i_target * Realityが検出したターゲット。 * Unknownターゲットを指定すること。 * @param i_rtsorce * i_targetを検出したRealitySourceインスタンス。 * @param o_result * 返却値を格納するインスタンスを設定します。 * 返却値がtrueの場合のみ、内容が更新されています。 * @return * 特定に成功すると、trueを返します。 * @throws NyARException */ public bool getBestMatchTarget(NyARRealityTarget i_target, NyARRealitySource i_rtsorce, GetBestMatchTargetResult o_result) { //パターン抽出 NyARMatchPattResult tmp_patt_result = this.__tmp_patt_result; INyARPerspectiveCopy r = i_rtsorce.refPerspectiveRasterReader(); r.copyPatt(i_target.refTargetVertex(), this._edge_x, this._edge_y, this._sample_per_pix, this._tmp_raster); //比較パターン生成 this._deviation_data.setRaster(this._tmp_raster); int ret = -1; int dir = -1; double cf = Double.MinValue; for (int i = this._table.getLength() - 1; i >= 0; i--) { this._match_patt.setARCode(this._table.getItem(i).code); this._match_patt.evaluate(this._deviation_data, tmp_patt_result); if (cf < tmp_patt_result.confidence) { ret = i; cf = tmp_patt_result.confidence; dir = tmp_patt_result.direction; } } if (ret < 0) { return(false); } //戻り値を設定 MarkerTable.SerialTableRow row = this._table.getItem(ret); o_result.artk_direction = dir; o_result.confidence = cf; o_result.idtag = row.idtag; o_result.marker_height = row.marker_height; o_result.marker_width = row.marker_width; o_result.name = row.name; return(true); }