import jp.nyatla.nyartoolkit.core.labeling.artoolkit.NyARLabelingLabelStack;\r
import jp.nyatla.nyartoolkit.core.labeling.artoolkit.NyARLabeling_ARToolKit;\r
import jp.nyatla.nyartoolkit.core.raster.NyARBinRaster;\r
+import jp.nyatla.nyartoolkit.core.types.NyARIntCoordinates;\r
import jp.nyatla.nyartoolkit.core.types.NyARIntSize;\r
\r
\r
-\r
-public class NyARSquareContourDetector_ARToolKit extends NyARSquareContourDetector\r
+/**\r
+ * このクラスは、{@link NyARLabeling_ARToolKit}クラスを用いた矩形検出器です。\r
+ * 検出した矩形を、自己コールバック関数{@link #onSquareDetect}へ通知します。\r
+ * 継承クラスで自己コールバック関数{@link #onSquareDetect}を実装する必要があります。\r
+ */\r
+public abstract class NyARSquareContourDetector_ARToolKit extends NyARSquareContourDetector\r
{\r
private static final int AR_AREA_MAX = 100000;// #define AR_AREA_MAX 100000\r
private static final int AR_AREA_MIN = 70;// #define AR_AREA_MIN 70\r
private final NyARLabelingImage _limage;\r
\r
private final NyARLabelOverlapChecker<NyARLabelingLabel> _overlap_checker = new NyARLabelOverlapChecker<NyARLabelingLabel>(32,NyARLabelingLabel.class);\r
- private final NyARContourPickup _cpickup=new NyARContourPickup();\r
+ private final NyARContourPickup_ARToolKit _cpickup=new NyARContourPickup_ARToolKit();\r
private final NyARCoord2SquareVertexIndexes _coord2vertex=new NyARCoord2SquareVertexIndexes();\r
- \r
- private final int _max_coord;\r
- private final int[] _xcoord;\r
- private final int[] _ycoord; \r
+\r
+ private final NyARIntCoordinates _coord;\r
private final int[] __detectMarker_mkvertex = new int[4];\r
/**\r
- * 最大i_squre_max個のマーカーを検出するクラスを作成する。\r
- * \r
- * @param i_param\r
+ * コンストラクタです。\r
+ * 入力画像のサイズを指定して、インスタンスを生成します。\r
+ * @param i_size\r
+ * 入力画像のサイズ\r
*/\r
public NyARSquareContourDetector_ARToolKit(NyARIntSize i_size) throws NyARException\r
{\r
int number_of_coord = (this._width + this._height) * 2;\r
\r
// 輪郭バッファは頂点変換をするので、輪郭バッファの2倍取る。\r
- this._max_coord = number_of_coord;\r
- this._xcoord = new int[number_of_coord];\r
- this._ycoord = new int[number_of_coord];\r
+ this._coord=new NyARIntCoordinates(number_of_coord);\r
return;\r
}\r
-\r
/**\r
- * arDetectMarker2を基にした関数\r
- * この関数はNyARSquare要素のうち、directionを除くパラメータを取得して返します。\r
- * directionの確定は行いません。\r
- * @param i_raster\r
- * 解析する2値ラスタイメージを指定します。\r
- * @param o_square_stack\r
- * 抽出した正方形候補を格納するリスト\r
- * @throws NyARException\r
+ * この関数は、ラスタから矩形を検出して、自己コールバック関数{@link #onSquareDetect}で通知します。\r
+ * ARToolKitのarDetectMarker2を基にしています。\r
*/\r
- public final void detectMarkerCB(NyARBinRaster i_raster, IDetectMarkerCallback i_callback) throws NyARException\r
+ public final void detectMarker(NyARBinRaster i_raster) throws NyARException\r
{\r
final NyARLabelingImage limage = this._limage;\r
\r
}\r
final int xsize = this._width;\r
final int ysize = this._height;\r
- final int[] xcoord = this._xcoord;\r
- final int[] ycoord = this._ycoord;\r
- final int coord_max = this._max_coord;\r
+ final NyARIntCoordinates coord = this._coord;\r
final int[] mkvertex =this.__detectMarker_mkvertex;\r
\r
final NyARLabelOverlapChecker<NyARLabelingLabel> overlap = this._overlap_checker;\r
continue;\r
}\r
// 輪郭を取得\r
- final int coord_num = _cpickup.getContour(limage,limage.getTopClipTangentX(label_pt),label_pt.clip_t, coord_max, xcoord, ycoord);\r
- if (coord_num == coord_max) {\r
- // 輪郭が大きすぎる。\r
+ if(!this._cpickup.getContour(limage,limage.getTopClipTangentX(label_pt),label_pt.clip_t, coord)){\r
continue;\r
}\r
//輪郭線をチェックして、矩形かどうかを判定。矩形ならばmkvertexに取得\r
- if (!this._coord2vertex.getVertexIndexes(xcoord, ycoord,coord_num,label_area, mkvertex)) {\r
+ if (!this._coord2vertex.getVertexIndexes(coord,label_area, mkvertex)) {\r
// 頂点の取得が出来なかった\r
continue;\r
}\r
//矩形を発見したことをコールバック関数で通知\r
- i_callback.onSquareDetect(this,xcoord,ycoord,coord_num,mkvertex);\r
+ this.onSquareDetect(coord,mkvertex);\r
\r
// 検出済の矩形の属したラベルを重なりチェックに追加する。\r
overlap.push(label_pt);\r