OSDN Git Service

git-svn-id: http://svn.sourceforge.jp/svnroot/nyartoolkit/NyARToolkit/trunk@802 7cac0...
[nyartoolkit-and/nyartoolkit-and.git] / lib / src / jp / nyatla / nyartoolkit / core / squaredetect / NyARSquareContourDetector_ARToolKit.java
index 18aac9e..3b01785 100644 (file)
@@ -37,11 +37,16 @@ import jp.nyatla.nyartoolkit.core.labeling.artoolkit.NyARLabelingLabel;
 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
@@ -53,17 +58,16 @@ public class NyARSquareContourDetector_ARToolKit extends NyARSquareContourDetect
        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
@@ -76,23 +80,14 @@ public class NyARSquareContourDetector_ARToolKit extends NyARSquareContourDetect
                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
@@ -118,9 +113,7 @@ public class NyARSquareContourDetector_ARToolKit extends NyARSquareContourDetect
                }\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
@@ -147,18 +140,16 @@ public class NyARSquareContourDetector_ARToolKit extends NyARSquareContourDetect
                                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