*/\r
public JmfNyARRaster_RGB(NyARIntSize i_size)\r
{\r
+ super(new NyARIntSize(i_size.w,i_size.w));\r
this._size.w = i_size.w;\r
this._size.h = i_size.h;\r
this._ref_buf = null;\r
}\r
public JmfNyARRaster_RGB(int i_width,int i_height)\r
{\r
- this._size.w = i_width;\r
- this._size.h = i_height;\r
+ super(new NyARIntSize(i_width,i_height));\r
this._ref_buf = null;\r
this._reader = new Reader(this._size);\r
} \r
*/\r
public QtNyARRaster_RGB(int i_width, int i_height)\r
{\r
- this._size.w = i_width;\r
- this._size.h = i_height;\r
+ super(new NyARIntSize(i_width,i_height));\r
this._ref_buf = null;\r
this._reader = new PixcelReader(this._size);\r
_raster = WritableRaster.createInterleavedRaster(DataBuffer.TYPE_BYTE, i_width, i_height, i_width * 3, 3, new int[] { 0, 1, 2 }, null);\r
import jp.nyatla.nyartoolkit.core.raster.*;\r
import jp.nyatla.nyartoolkit.core.rasterreader.INyARBufferReader;\r
import jp.nyatla.nyartoolkit.core.rasterreader.NyARBufferReader;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
\r
/**\r
*\r
protected NyARLabelingLabelStack _label_list;\r
protected int[] _index_table;\r
protected boolean _is_index_table_enable;\r
-\r
public NyARLabelingImage(int i_width, int i_height)\r
{\r
+ super(new NyARIntSize(i_width,i_height));\r
this._ref_buf =new int[i_height][i_width];\r
- this._size.w = i_width;\r
- this._size.h = i_height;\r
this._label_list = new NyARLabelingLabelStack(MAX_LABELS);\r
this._index_table=new int[MAX_LABELS];\r
this._is_index_table_enable=false;\r
*/\r
public class NyARLabelingLabelStack extends NyObjectStack\r
{\r
+ protected NyARLabelingLabelStack(NyARLabelingLabel[] i_label_array)\r
+ {\r
+ super(i_label_array); \r
+ }\r
public NyARLabelingLabelStack(int i_max_array_size)\r
{\r
super(new NyARLabelingLabel[i_max_array_size]);\r
}\r
return;\r
}\r
-/* 構造が変わるから、ハイスピード版実装するときに使う。\r
- private void updateLabelStackLarge(NyARLabelingLabelStack i_stack,int[] i_lindex,NyARIntSize i_size,int[][] i_work,int i_work_max,int i_number_of_label) throws NyARException\r
- {\r
- // ラベルバッファを予約\r
- i_stack.reserv(i_number_of_label);\r
- // エリアと重心、クリップ領域を計算\r
- final NyARLabelingLabel[] labels = i_stack.getArray();\r
- for (int i = 0; i < i_number_of_label; i++) {\r
- final NyARLabelingLabel label_pt =labels[i];\r
- label_pt.id =i+1;\r
- label_pt.area = 0;\r
- label_pt.pos_x = 0;\r
- label_pt.pos_y = 0;\r
- label_pt.clip_l = i_size.w;// wclip[i*4+0] = lxsize;\r
- label_pt.clip_r = 0;// wclip[i*4+0] = lxsize;\r
- label_pt.clip_t = i_size.h;// wclip[i*4+2] = lysize;\r
- label_pt.clip_b = 0;// wclip[i*4+3] = 0;\r
- }\r
-\r
- for (int i = 0; i < i_work_max; i++) {\r
- final NyARLabelingLabel label_pt = labels[i_lindex[i] - 1];\r
- final int[] work2_pt = i_work[i];\r
- label_pt.area += work2_pt[0];\r
- label_pt.pos_x += work2_pt[1];\r
- label_pt.pos_y += work2_pt[2];\r
- if (label_pt.clip_l > work2_pt[3]) {\r
- label_pt.clip_l = work2_pt[3];\r
- }\r
- if (label_pt.clip_r < work2_pt[4]) {\r
- label_pt.clip_r = work2_pt[4];\r
- }\r
- if (label_pt.clip_t > work2_pt[5]) {\r
- label_pt.clip_t = work2_pt[5];\r
- }\r
- if (label_pt.clip_b < work2_pt[6]) {\r
- label_pt.clip_b = work2_pt[6];\r
- }\r
- }\r
\r
- for (int i = 0; i < i_number_of_label; i++) {// for(int i = 0; i < *label_num; i++ ) {\r
- final NyARLabelingLabel label_pt = labels[i];\r
- label_pt.pos_x /= label_pt.area;\r
- label_pt.pos_y /= label_pt.area;\r
- }\r
- return; \r
- }\r
- */\r
}\r
\r
/**\r
{\r
private final static int ARRAY_APPEND_STEP = 256;\r
\r
- public final int[] work;\r
-\r
public final int[][] work2;\r
\r
private int allocate_size;\r
public NyARWorkHolder(int i_holder_size)\r
{\r
// ポインタだけははじめに確保しておく\r
- this.work = new int[i_holder_size];\r
this.work2 = new int[i_holder_size][];\r
this.allocate_size = 0;\r
}\r
return;\r
}\r
// 要求されたインデクスは範囲外\r
- if (i_index >= this.work.length) {\r
+ if (i_index >= this.work2.length) {\r
throw new NyARException();\r
}\r
// 追加アロケート範囲を計算\r
int range = i_index + ARRAY_APPEND_STEP;\r
- if (range >= this.work.length) {\r
- range = this.work.length;\r
+ if (range >= this.work2.length) {\r
+ range = this.work2.length;\r
}\r
// アロケート\r
for (int i = this.allocate_size; i < range; i++) {\r
package jp.nyatla.nyartoolkit.core.raster;\r
\r
import jp.nyatla.nyartoolkit.core.rasterreader.*;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
\r
public final class NyARBinRaster extends NyARRaster_BasicClass\r
{\r
\r
public NyARBinRaster(int i_width, int i_height)\r
{\r
+ super(new NyARIntSize(i_width,i_height));\r
this._ref_buf = new int[i_height][i_width];\r
- this._size.w = i_width;\r
- this._size.h = i_height;\r
this._buffer_reader=new NyARBufferReader(this._ref_buf,INyARBufferReader.BUFFERFORMAT_INT2D_BIN_8);\r
}\r
public INyARBufferReader getBufferReader()\r
\r
import jp.nyatla.nyartoolkit.core.rasterreader.INyARBufferReader;\r
import jp.nyatla.nyartoolkit.core.rasterreader.NyARBufferReader;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
\r
public final class NyARGlayscaleRaster extends NyARRaster_BasicClass\r
{\r
\r
public NyARGlayscaleRaster(int i_width, int i_height)\r
{\r
+ super(new NyARIntSize(i_width,i_height));\r
this._ref_buf = new int[i_height][i_width];\r
- this._size.w = i_width;\r
- this._size.h = i_height;\r
this._buffer_reader=new NyARBufferReader(this._ref_buf,INyARBufferReader.BUFFERFORMAT_INT2D_GLAY_8);\r
}\r
public INyARBufferReader getBufferReader()\r
\r
public abstract class NyARRaster_BasicClass implements INyARRaster\r
{\r
- final protected NyARIntSize _size = new NyARIntSize();\r
+ final protected NyARIntSize _size;\r
+ protected NyARRaster_BasicClass(final NyARIntSize i_size)\r
+ {\r
+ this._size= i_size;\r
+ }\r
\r
final public int getWidth()\r
{\r
package jp.nyatla.nyartoolkit.core.raster.rgb;\r
\r
import jp.nyatla.nyartoolkit.core.rasterreader.*;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
\r
public class NyARRgbRaster_BGRA extends NyARRgbRaster_BasicClass implements INyARRgbRaster\r
{\r
\r
private NyARRgbRaster_BGRA(byte[] i_buffer, int i_width, int i_height)\r
{\r
+ super(new NyARIntSize(i_width,i_height));\r
this._ref_buf = i_buffer;\r
- this._size.w = i_width;\r
- this._size.h = i_height;\r
this._rgb_reader = new PixelReader(this);\r
this._buffer_reader=new NyARBufferReader(i_buffer,INyARBufferReader.BUFFERFORMAT_BYTE1D_B8G8R8X8_32);\r
return;\r
import jp.nyatla.nyartoolkit.NyARException;\r
import jp.nyatla.nyartoolkit.core.raster.NyARRaster_BasicClass;\r
import jp.nyatla.nyartoolkit.core.rasterreader.INyARRgbPixelReader;\r
+import jp.nyatla.nyartoolkit.core.types.NyARIntSize;\r
\r
/**\r
* NyARRasterインタフェイスの基本関数/メンバを実装したクラス\r
*/\r
public abstract class NyARRgbRaster_BasicClass extends NyARRaster_BasicClass implements INyARRgbRaster\r
{\r
+ protected NyARRgbRaster_BasicClass(final NyARIntSize i_size)\r
+ {\r
+ super(i_size);\r
+ }\r
public INyARRgbPixelReader getRgbPixcelReader() throws NyARException\r
{\r
NyARException.notImplement();\r
import jp.nyatla.nyartoolkit.core.rasterreader.INyARBufferReader;\r
import jp.nyatla.nyartoolkit.core.rasterreader.INyARRgbPixelReader;\r
import jp.nyatla.nyartoolkit.core.rasterreader.NyARBufferReader;\r
+import jp.nyatla.nyartoolkit.core.types.NyARIntSize;\r
\r
/*\r
* 真っ黒の矩形を定義する。\r
\r
public NyARRgbRaster_Blank(int i_width, int i_height)\r
{\r
- this._size.w = i_width;\r
- this._size.h = i_height;\r
+ super(new NyARIntSize(i_width,i_height));\r
this._reader = new PixelReader();\r
this._buffer_reader=new NyARBufferReader(null,INyARBufferReader.BUFFERFORMAT_NULL_ALLZERO);\r
return;\r
package jp.nyatla.nyartoolkit.core.raster.rgb;\r
\r
import jp.nyatla.nyartoolkit.core.rasterreader.*;\r
+import jp.nyatla.nyartoolkit.core.types.NyARIntSize;\r
\r
public class NyARRgbRaster_RGB extends NyARRgbRaster_BasicClass\r
{\r
\r
private NyARRgbRaster_RGB(byte[] i_buffer, int i_width, int i_height)\r
{\r
+ super(new NyARIntSize(i_width,i_height));\r
this._ref_buf = i_buffer;\r
- this._size.w = i_width;\r
- this._size.h = i_height;\r
this._reader = new NyARRgbPixelReader_RGB24(i_buffer, this._size);\r
this._buffer_reader=new NyARBufferReader(i_buffer,INyARBufferReader.BUFFERFORMAT_BYTE1D_R8G8B8_24);\r
return;\r
import jp.nyatla.nyartoolkit.core.transmat.rotmatrix.NyARRotMatrix;\r
import jp.nyatla.nyartoolkit.core.types.NyARDoublePoint2d;\r
import jp.nyatla.nyartoolkit.core.types.NyARDoublePoint3d;\r
-\r
-public class NyARRotTransOptimize\r
+/**\r
+ * 基本姿勢と実画像を一致するように、角度を微調整→平行移動量を再計算\r
+ * を繰り返して、変換行列を最適化する。\r
+ *\r
+ */\r
+public class NyARRotTransOptimize implements INyARRotTransOptimize\r
{\r
private final static int AR_GET_TRANS_MAT_MAX_LOOP_COUNT = 5;// #define AR_GET_TRANS_MAT_MAX_LOOP_COUNT 5\r
private final static double AR_GET_TRANS_MAT_MAX_FIT_ERROR = 1.0;// #define AR_GET_TRANS_MAT_MAX_FIT_ERROR 1.0\r
public int h;\r
\r
public int w;\r
+ public NyARIntSize()\r
+ {\r
+ this.w=0;\r
+ this.h=0;\r
+ return;\r
+ \r
+ }\r
+ \r
+ public NyARIntSize(int i_width,int i_height)\r
+ {\r
+ this.w=i_width;\r
+ this.h=i_height;\r
+ return;\r
+ }\r
\r
/**\r
* サイズが同一であるかを確認する。\r
{\r
private final String code_file = "../Data/patt.hiro";\r
\r
-// private final String data_file = "../Data/320x240ABGR.raw";\r
- private final String data_file = "../Data/320x240RGB.raw";\r
+ private final String data_file = "../Data/320x240ABGR.raw";\r
\r
private final String camera_file = "../Data/camera_para.dat";\r
\r
// AR用カメラパラメタファイルをロード\r
NyARParam ap = new NyARParam();\r
ap.loadARParamFromFile(camera_file);\r
- ap.changeScreenSize(640, 480);\r
+ ap.changeScreenSize(320, 240);\r
\r
// AR用のパターンコードを読み出し\r
NyARCode code = new NyARCode(16, 16);\r
FileInputStream fs = new FileInputStream(data_file);\r
byte[] buf = new byte[(int) f.length()];\r
fs.read(buf);\r
- INyARRgbRaster ra = NyARRgbRaster_RGB.wrap(buf, 640, 480);\r
-// INyARRgbRaster ra = NyARRgbRaster_BGRA.wrap(buf, 320, 240);\r
+ INyARRgbRaster ra = NyARRgbRaster_BGRA.wrap(buf, 320, 240);\r
// Blank_Raster ra=new Blank_Raster(320, 240);\r
\r
// 1パターンのみを追跡するクラスを作成\r
\r
// マーカーを検出\r
Date d2 = new Date();\r
- for (int i = 0; i < 1000; i++) {\r
+ for (int i = 0; i < 10000; i++) {\r
// 変換行列を取得\r
ar.detectMarkerLite(ra, 110);\r
ar.getTransmationMatrix(result_mat);\r