import jp.nyatla.nyartoolkit.core.*;
import jp.nyatla.nyartoolkit.detector.*;
+import jp.nyatla.nyartoolkit.core.transmat.*;
//画像チェックしてマーカー探して、背景を書く\r
boolean is_marker_exist;\r
synchronized(cap_image){\r
- is_marker_exist=nya.detectMarkerLite(cap_image,110);\r
+ is_marker_exist=nya.detectMarkerLite(cap_image,20);\r
//背景を書く\r
glnya.drawBackGround(cap_image, 1.0);\r
}\r
import java.awt.image.WritableRaster;\r
\r
import jp.nyatla.nyartoolkit.NyARException;\r
-import jp.nyatla.nyartoolkit.core.raster.INyARRaster;\r
+import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
\r
\r
-public class QtNyARRaster_RGB implements INyARRaster\r
+public class QtNyARRaster_RGB implements NyARRaster\r
{\r
protected byte[] ref_buf;\r
protected int width=0;\r
import javax.vecmath.*;\r
\r
import jp.nyatla.nyartoolkit.core.NyARParam;\r
-import jp.nyatla.nyartoolkit.core.NyARTransMatResult;\r
import jp.nyatla.nyartoolkit.detector.NyARSingleDetectMarker;\r
import jp.nyatla.nyartoolkit.jmf.*;\r
import jp.nyatla.nyartoolkit.jmf.utils.JmfCameraCapture;\r
import jp.nyatla.nyartoolkit.jmf.utils.JmfCaptureListener;\r
import jp.nyatla.nyartoolkit.*;\r
import jp.nyatla.nyartoolkit.core.*;\r
+import jp.nyatla.nyartoolkit.core.transmat.NyARTransMatResult;\r
\r
/**\r
* NyARToolkitと連動したBehaviorを返却するクラスです。\r
{\r
private Dimension image_size;\r
private JmfCaptureListener capture_listener;\r
- private DataSource jmf_data_source;\r
+// private DataSource jmf_data_source;\r
private MonitorStream jmf_monitor_stream;\r
private Processor jmf_processor;\r
private VideoFormat jmf_video_format;\r
// that is also the MonitorStream object.\r
jmf_monitor_stream=(MonitorStream)ds.getControl("jmfsample.MonitorStream");\r
jmf_monitor_stream.setCaptureListener(capture_listener);\r
- jmf_data_source=ds;\r
+// jmf_data_source=ds;\r
jmf_processor=processor;\r
jmf_processor.start();\r
}\r
\r
import javax.media.format.RGBFormat;\r
import java.awt.Dimension;\r
-import jp.nyatla.nyartoolkit.NyARException;\r
-import jp.nyatla.nyartoolkit.core.raster.INyARRaster;\r
+import jp.nyatla.nyartoolkit.*;\r
+import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.raster.NyARRaster_BasicClass;\r
\r
\r
-public class JmfNyARRaster_RGB implements INyARRaster\r
+public class JmfNyARRaster_RGB extends NyARRaster_BasicClass\r
{\r
public final static int PIXEL_ORDER_RGB=1;\r
public final static int PIXEL_ORDER_BGR=2;\r
- protected int pix_type;\r
- private int red_idx;\r
- private int green_idx;\r
- private int blue_idx;\r
- protected byte[] ref_buf;\r
- protected int width=0;\r
- protected int height=0;\r
+ protected int _pix_type;\r
+ private int _red_idx;\r
+ private int _green_idx;\r
+ private int _blue_idx;\r
+ protected byte[] _ref_buf;\r
\r
/**\r
* RGB形式のJMFバッファをラップするオブジェクトをつくります。\r
*/\r
public JmfNyARRaster_RGB(int i_width,int i_height)\r
{\r
- ref_buf=null;\r
- width=i_width;\r
- height=i_height;\r
+ this._ref_buf=null;\r
+ this._size.w=i_width;\r
+ this._size.h=i_height;\r
}\r
+ public void getPixel(int i_x,int i_y,int[] i_rgb)\r
+ {\r
+ int bp=(i_x+i_y*this._size.w)*3;\r
+ byte[] ref=this._ref_buf;\r
+ i_rgb[0]=(ref[bp+this._red_idx] & 0xff);//R\r
+ i_rgb[1]=(ref[bp+this._green_idx] & 0xff);//G\r
+ i_rgb[2]=(ref[bp+this._blue_idx] & 0xff);//B\r
+ }\r
+ public void getPixelSet(int[] i_x,int i_y[],int i_num,int[] o_rgb)\r
+ {\r
+ int ri=this._red_idx;\r
+ int bi=this._green_idx;\r
+ int gi=this._blue_idx;\r
+ int width=this._size.w;\r
+ byte[] ref=this._ref_buf;\r
+ int bp;\r
+ for(int i=i_num-1;i>=0;i--){\r
+ bp=(i_x[i]+i_y[i]*width)*3;\r
+ o_rgb[i*3+0]=(ref[bp+ri] & 0xff);//R\r
+ o_rgb[i*3+1]=(ref[bp+gi] & 0xff);//G\r
+ o_rgb[i*3+2]=(ref[bp+bi] & 0xff);//B\r
+ } \r
+ return;\r
+ }\r
+ public Object getBufferObject()\r
+ {\r
+ return this._ref_buf;\r
+ }\r
+ public int getBufferType() throws NyARException\r
+ {\r
+ switch(this._pix_type){\r
+ case PIXEL_ORDER_RGB:return BUFFERFORMAT_BYTE_R8G8B8_24;\r
+ case PIXEL_ORDER_BGR:return BUFFERFORMAT_BYTE_B8G8R8_24;\r
+ default:\r
+ throw new NyARException();\r
+ }\r
+ } \r
/**\r
* フォーマットを解析して、インスタンスのフォーマットプロパティを初期化します。\r
* \r
{\r
//データサイズの確認\r
Dimension s=i_fmt.getSize();\r
- if(width!=s.width || height !=s.height){\r
+ if(this._size.w!=s.width || this._size.h !=s.height){\r
throw new NyARException();\r
}\r
//データ配列の確認\r
- red_idx =i_fmt.getRedMask()-1;\r
- green_idx=i_fmt.getGreenMask()-1;\r
- blue_idx =i_fmt.getBlueMask()-1;\r
+ this._red_idx =i_fmt.getRedMask()-1;\r
+ this._green_idx=i_fmt.getGreenMask()-1;\r
+ this._blue_idx =i_fmt.getBlueMask()-1;\r
\r
//色配列の特定\r
- if(red_idx==0 && blue_idx==2){\r
- pix_type=PIXEL_ORDER_RGB;\r
- }else if(red_idx==2 && blue_idx==0){\r
- pix_type=PIXEL_ORDER_BGR;\r
+ if(this._red_idx==0 && this._blue_idx==2){\r
+ this._pix_type=PIXEL_ORDER_RGB;\r
+ }else if(this._red_idx==2 && this._blue_idx==0){\r
+ this._pix_type=PIXEL_ORDER_BGR;\r
}else{\r
throw new NyARException("Unknown pixel order.");\r
} \r
public void setBuffer(javax.media.Buffer i_buffer) throws NyARException\r
{\r
initFormatProperty((RGBFormat)i_buffer.getFormat());\r
- ref_buf=(byte[])i_buffer.getData();\r
- }\r
- public int getPixelTotal(int i_x,int i_y)\r
- {\r
- int bp=(i_x+i_y*width)*3;\r
- byte[] ref=this.ref_buf;\r
- return (ref[bp] & 0xff)+(ref[bp+1] & 0xff)+(ref[bp+2] & 0xff);\r
- }\r
- public void getPixelTotalRowLine(int i_row,int[] o_line)\r
- {\r
- final byte[] ref=this.ref_buf;\r
- int bp=(i_row+1)*this.width*3-3;\r
- for(int i=this.width-1;i>=0;i--){\r
- o_line[i]=(ref[bp] & 0xff)+(ref[bp+1] & 0xff)+(ref[bp+2] & 0xff);\r
- bp-=3;\r
- }\r
+ this._ref_buf=(byte[])i_buffer.getData();\r
} \r
- public int getWidth()\r
- {\r
- return width;\r
- }\r
- public int getHeight()\r
- {\r
- return height;\r
- }\r
- public void getPixel(int i_x,int i_y,int[] i_rgb)\r
- {\r
- int bp=(i_x+i_y*this.width)*3;\r
- byte[] ref=this.ref_buf;\r
- i_rgb[0]=(ref[bp+this.red_idx] & 0xff);//R\r
- i_rgb[1]=(ref[bp+this.green_idx] & 0xff);//G\r
- i_rgb[2]=(ref[bp+this.blue_idx] & 0xff);//B\r
- }\r
/**\r
* ピクセルの順序タイプを返します。\r
* @return\r
*/\r
public int getPixelOrder()\r
{\r
- return pix_type;\r
+ return this._pix_type;\r
}\r
/**\r
* データを持っているかを返します。\r
*/\r
public boolean hasData()\r
{\r
- return ref_buf!=null;\r
- }\r
- public void getPixelSet(int[] i_x,int i_y[],int i_num,int[] o_rgb)\r
- {\r
- int ri=this.red_idx;\r
- int bi=this.green_idx;\r
- int gi=this.blue_idx;\r
- int width=this.width;\r
- byte[] ref=this.ref_buf;\r
- int bp;\r
- for(int i=i_num-1;i>=0;i--){\r
- bp=(i_x[i]+i_y[i]*width)*3;\r
- o_rgb[i*3+0]=(ref[bp+ri] & 0xff);//R\r
- o_rgb[i*3+1]=(ref[bp+gi] & 0xff);//G\r
- o_rgb[i*3+2]=(ref[bp+bi] & 0xff);//B\r
- } \r
- return;\r
- }\r
+ return this._ref_buf!=null;\r
+ } \r
}\r
import jp.nyatla.nyartoolkit.NyARException;\r
import jp.nyatla.nyartoolkit.core.NyARCode;\r
import jp.nyatla.nyartoolkit.core.NyARParam;\r
-import jp.nyatla.nyartoolkit.core.NyARTransMatResult;\r
+import jp.nyatla.nyartoolkit.core.transmat.NyARTransMatResult;\r
import jp.nyatla.nyartoolkit.detector.*;\r
\r
public class GLNyARDetectMarker extends NyARDetectMarker\r
\r
public class GLNyARRaster_RGB extends JmfNyARRaster_RGB\r
{\r
- private byte[] gl_buf;\r
- private int gl_flag;\r
+ private byte[] _gl_buf;\r
+ private int _gl_flag;\r
\r
public GLNyARRaster_RGB(GL i_ref_gl,NyARParam i_param)\r
{\r
super(i_param.getX(),i_param.getY());\r
- this.gl_flag=GL.GL_RGB;\r
- this.gl_buf=new byte[this.width*this.height*3];\r
+ this._gl_flag=GL.GL_RGB;\r
+ this._gl_buf=new byte[this._size.w*this._size.h*3];\r
}\r
public void setBuffer(javax.media.Buffer i_buffer,boolean i_is_reverse) throws NyARException\r
{\r
byte[] src_buf=(byte[])i_buffer.getData();\r
//GL用のデータを準備\r
if(i_is_reverse){\r
- int length=this.width*3;\r
+ int length=this._size.w*3;\r
int src_idx=0;\r
- int dest_idx=(this.height-1)*length;\r
- for(int i=0;i<this.height;i++){\r
- System.arraycopy(src_buf,src_idx,this.gl_buf,dest_idx,length);\r
+ int dest_idx=(this._size.h-1)*length;\r
+ for(int i=0;i<this._size.h;i++){\r
+ System.arraycopy(src_buf,src_idx,this._gl_buf,dest_idx,length);\r
src_idx+=length;\r
dest_idx-=length;\r
}\r
}else{\r
- System.arraycopy(src_buf,0,gl_buf,0,src_buf.length);\r
+ System.arraycopy(src_buf,0,this._gl_buf,0,src_buf.length);\r
}\r
//GLのフラグ設定\r
- switch(this.pix_type){\r
+ switch(this._pix_type){\r
case GLNyARRaster_RGB.PIXEL_ORDER_BGR:\r
- this.gl_flag=GL.GL_BGR;\r
+ this._gl_flag=GL.GL_BGR;\r
break;\r
case GLNyARRaster_RGB.PIXEL_ORDER_RGB:\r
- this.gl_flag=GL.GL_RGB;\r
+ this._gl_flag=GL.GL_RGB;\r
break;\r
default:\r
throw new NyARException();\r
}\r
//ref_bufをgl_bufに差し替える\r
- ref_buf=gl_buf;\r
+ this._ref_buf=this._gl_buf;\r
}\r
/**\r
* GLでそのまま描画できるRGBバッファを返す。\r
*/\r
public byte[] getGLRgbArray()\r
{\r
- return this.ref_buf;\r
+ return this._ref_buf;\r
}\r
/**\r
* GL用のRGBバッファのバイト並びタイプを返す。\r
*/\r
public int getGLPixelFlag()\r
{\r
- return this.gl_flag;\r
+ return this._gl_flag;\r
}\r
}\r
import jp.nyatla.nyartoolkit.NyARException;\r
import jp.nyatla.nyartoolkit.core.NyARCode;\r
import jp.nyatla.nyartoolkit.core.NyARParam;\r
-import jp.nyatla.nyartoolkit.core.NyARTransMatResult;\r
+import jp.nyatla.nyartoolkit.core.transmat.NyARTransMatResult;\r
import jp.nyatla.nyartoolkit.detector.*;\r
\r
public class GLNyARSingleDetectMarker extends NyARSingleDetectMarker\r
import java.awt.*;
import jp.nyatla.nyartoolkit.core.*;
+import jp.nyatla.nyartoolkit.core.transmat.NyARTransMatResult;
import jp.nyatla.nyartoolkit.detector.*;
import java.awt.image.WritableRaster;\r
\r
import jp.nyatla.nyartoolkit.NyARException;\r
-import jp.nyatla.nyartoolkit.core.raster.INyARRaster;\r
+import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
\r
\r
-public class QtNyARRaster_RGB implements INyARRaster\r
+public class QtNyARRaster_RGB implements NyARRaster\r
{\r
protected byte[] ref_buf;\r
protected int width=0;\r
+++ /dev/null
-package jp.nyatla.nyartoolkit.base;\r
-\r
-public class Config {\r
- //Version系情報\r
-// public static final int AR_HEADER_VERSION_MAJOR=2; //#define AR_HEADER_VERSION_MAJOR 2\r
-// public static final int AR_HEADER_VERSION_MINOR=72;//#define AR_HEADER_VERSION_MINOR 72\r
-//\r
-// public static final int AR_HEADER_VERSION_TINY=0;//#define AR_HEADER_VERSION_TINY 0\r
-//\r
-// public static final int AR_HEADER_VERSION_BUILD=0;//#define AR_HEADER_VERSION_BUILD 0\r
-// \r
-// public static final String AR_HEADER_VERSION_STRING="2.72.0";//#define AR_HEADER_VERSION_STRING "2.72.0"\r
-//\r
-// public static final boolean AR_HAVE_HEADER_VERSION_2=true;//#define AR_HAVE_HEADER_VERSION_2\r
-// public static final boolean AR_HAVE_HEADER_VERSION_2_72=true;//#define AR_HAVE_HEADER_VERSION_2_72\r
-\r
-\r
- /*ビデオ入力系?*/\r
- /*------------------------------------------------------------*/\r
-\r
-// public static final int AR_DRAW_BY_GL_DRAW_PIXELS =0;//#define AR_DRAW_BY_GL_DRAW_PIXELS 0\r
-// public static final int AR_DRAW_BY_TEXTURE_MAPPING=1;//#define AR_DRAW_BY_TEXTURE_MAPPING 1\r
-// public static final int AR_DRAW_TEXTURE_FULL_IMAGE=0;//#define AR_DRAW_TEXTURE_FULL_IMAGE 0\r
-// public static final int AR_DRAW_TEXTURE_HALF_IMAGE=1;//#define AR_DRAW_TEXTURE_HALF_IMAGE 1\r
-// public static final int AR_IMAGE_PROC_IN_FULL=0;//#define AR_IMAGE_PROC_IN_FULL 0\r
-// public static final int AR_IMAGE_PROC_IN_HALF=1;//#define AR_IMAGE_PROC_IN_HALF 1\r
-// public static final int AR_FITTING_TO_IDEAL=0;//#define AR_FITTING_TO_IDEAL 0\r
-// public static final int AR_FITTING_TO_INPUT=1;//#define AR_FITTING_TO_INPUT 1\r
-\r
-// public static final int AR_TEMPLATE_MATCHING_COLOR=0;//#define AR_TEMPLATE_MATCHING_COLOR 0\r
-// public static final int AR_TEMPLATE_MATCHING_BW=1;//#define AR_TEMPLATE_MATCHING_BW 1\r
-// public static final int AR_MATCHING_WITHOUT_PCA=0;//#define AR_MATCHING_WITHOUT_PCA 0\r
-// public static final int AR_MATCHING_WITH_PCA=1;//#define AR_MATCHING_WITH_PCA 1\r
- \r
-// public static final int DEFAULT_TEMPLATE_MATCHING_MODE=AR_TEMPLATE_MATCHING_BW;//#define DEFAULT_TEMPLATE_MATCHING_MODE AR_TEMPLATE_MATCHING_COLOR\r
-// public static final int DEFAULT_MATCHING_PCA_MODE=AR_MATCHING_WITH_PCA;//#define DEFAULT_MATCHING_PCA_MODE AR_MATCHING_WITHOUT_PCA\r
-\r
-\r
- //#ifdef _WIN32\r
-// public static final int DEFAULT_IMAGE_PROC_MODE =AR_IMAGE_PROC_IN_FULL;//# define DEFAULT_IMAGE_PROC_MODE AR_IMAGE_PROC_IN_FULL\r
-// public static final int DEFAULT_FITTING_MODE =AR_FITTING_TO_INPUT;//# define DEFAULT_FITTING_MODE AR_FITTING_TO_INPUT\r
-// public static final int DEFAULT_DRAW_MODE =AR_DRAW_BY_TEXTURE_MAPPING;//# define DEFAULT_DRAW_MODE AR_DRAW_BY_TEXTURE_MAPPING\r
-// public static final int DEFAULT_DRAW_TEXTURE_IMAGE =AR_DRAW_TEXTURE_FULL_IMAGE;//# define DEFAULT_DRAW_TEXTURE_IMAGE AR_DRAW_TEXTURE_FULL_IMAGE\r
- //#endif\r
-\r
-// public static final int AR_PIX_SIZE_DEFAULT=\r
-// (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ABGR) || (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGRA) || (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGBA) || (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_ARGB)?4:\r
-// ((AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_BGR) || (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_RGB)?3:\r
-// ((AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_2vuy) || (AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_yuvs)?2:\r
-// ((AR_DEFAULT_PIXEL_FORMAT == AR_PIXEL_FORMAT_MONO)?1:-1)));\r
-// public static final int AR_GET_TRANS_MAT_MAX_LOOP_COUNT=5;//#define AR_GET_TRANS_MAT_MAX_LOOP_COUNT 5\r
-// public static final double AR_GET_TRANS_MAT_MAX_FIT_ERROR=1.0;//#define AR_GET_TRANS_MAT_MAX_FIT_ERROR 1.0\r
-// public static final double AR_GET_TRANS_CONT_MAT_MAX_FIT_ERROR=1.0;//#define AR_GET_TRANS_CONT_MAT_MAX_FIT_ERROR 1.0\r
-\r
-// public static final int AR_AREA_MAX=100000;//#define AR_AREA_MAX 100000\r
-// public static final int AR_AREA_MIN=70;//#define AR_AREA_MIN 70\r
-\r
-\r
-// public static final int AR_SQUARE_MAX=30;//#define AR_SQUARE_MAX 30\r
-// public static final int AR_CHAIN_MAX=10000;//#define AR_CHAIN_MAX 10000\r
-// public static final int AR_PATT_NUM_MAX=50;//#define AR_PATT_NUM_MAX 50 \r
-// public static final int AR_PATT_SIZE_X=16;//#define AR_PATT_SIZE_X 16 \r
-// public static final int AR_PATT_SIZE_Y=16;//#define AR_PATT_SIZE_Y 16 \r
-// public static final int AR_PATT_SAMPLE_NUM=64;//#define AR_PATT_SAMPLE_NUM 64\r
-\r
-// public static final double AR_GL_CLIP_NEAR=50.0;//#define AR_GL_CLIP_NEAR 50.0\r
-// public static final double AR_GL_CLIP_FAR=5000.0;//#define AR_GL_CLIP_FAR 5000.0\r
-\r
-// public static final int AR_HMD_XSIZE=640;//#define AR_HMD_XSIZE 640\r
-// public static final int AR_HMD_YSIZE=480;//#define AR_HMD_YSIZE 480\r
-\r
-// public static final int AR_PARAM_NMIN=6;//#define AR_PARAM_NMIN 6\r
-// public static final int AR_PARAM_NMAX=1000;//#define AR_PARAM_NMAX 1000\r
-// public static final double AR_PARAM_C34=100.0;//#define AR_PARAM_C34 100.0\r
-}\r
+++ /dev/null
-package jp.nyatla.nyartoolkit.base;\r
-\r
-import jp.nyatla.nyartoolkit.NyARException;\r
-import jp.nyatla.nyartoolkit.core.NyARMat;\r
-\r
-\r
-\r
-\r
-public class Param {\r
- private static final int AR_PARAM_NMIN=6;//#define AR_PARAM_NMIN 6\r
- private static final int AR_PARAM_NMAX=1000;//#define AR_PARAM_NMAX 1000\r
- private static final double AR_PARAM_C34=100.0;//#define AR_PARAM_C34 100.0\r
-\r
- /*\r
- typedef struct {\r
- int xsize, ysize;\r
- double matL[3][4];\r
- double matR[3][4];\r
- double matL2R[3][4];\r
- double dist_factorL[4];\r
- double dist_factorR[4];\r
- } ARSParam;*/\r
-/* static class ARSParam{\r
- int xsize, ysize;\r
- Double2dArray matL=new Double2dArray(3,4);\r
- Double2dArray matR=new Double2dArray(3,4);\r
- Double2dArray matL2R=new Double2dArray(3,4);\r
- double[] dist_factorL=new double[4];\r
- double[] dist_factorR=new double[4];\r
- }*/\r
- private static final int arParamGet_AR_PARAM_CDMIN = 12;\r
- /*int arParamGet( double global[][3], double screen[][2], int data_num,double mat[3][4] );*/\r
- public static int arParamGet( double global[][], double[][] screen, int num,double[][] mat) throws NyARException\r
- {\r
- NyARMat mat_a, mat_at, mat_r;//ARMat *mat_a, *mat_at, *mat_r, mat_cpara;\r
- NyARMat mat_wm1,mat_wm2;//ARMat *mat_wm1, *mat_wm2;\r
- int i;\r
- \r
- if(num < AR_PARAM_NMIN){\r
- return( -1 );\r
- }\r
- if(num > AR_PARAM_NMAX){\r
- return( -1 );\r
- }\r
- NyARException.trap("未チェックのパス");{\r
- mat_a = new NyARMat(2*num,arParamGet_AR_PARAM_CDMIN-1 );//mat_a = arMatrixAlloc( 2*num, AR_PARAM_CDMIN-1 );\r
- mat_at =new NyARMat(arParamGet_AR_PARAM_CDMIN-1, 2*num );//mat_at = arMatrixAlloc( AR_PARAM_CDMIN-1, 2*num );\r
- mat_r = new NyARMat(2*num,1);//mat_r = arMatrixAlloc( 2*num, 1 );\r
- mat_wm1 =new NyARMat(arParamGet_AR_PARAM_CDMIN-1, arParamGet_AR_PARAM_CDMIN-1 );//mat_wm1 = arMatrixAlloc( AR_PARAM_CDMIN-1, AR_PARAM_CDMIN-1 );\r
- mat_wm2 =new NyARMat(arParamGet_AR_PARAM_CDMIN-1, 2*num );//mat_wm2 = arMatrixAlloc( AR_PARAM_CDMIN-1, 2*num );\r
- }\r
-/*\r
- mat_a = Matrix.arMatrixAlloc( 2*num, arParamGet_AR_PARAM_CDMIN-1 );//mat_a = arMatrixAlloc( 2*num, AR_PARAM_CDMIN-1 );\r
- if( mat_a == null){\r
- return -1;\r
- }\r
- mat_at =Matrix.arMatrixAlloc(arParamGet_AR_PARAM_CDMIN-1, 2*num );//mat_at = arMatrixAlloc( AR_PARAM_CDMIN-1, 2*num );\r
- if(mat_at == null){\r
- return -1;\r
- }\r
- mat_r = Matrix.arMatrixAlloc( 2*num, 1 );//mat_r = arMatrixAlloc( 2*num, 1 );\r
- if(mat_r ==null){\r
- return -1;\r
- }\r
- mat_wm1 = Matrix.arMatrixAlloc(arParamGet_AR_PARAM_CDMIN-1, arParamGet_AR_PARAM_CDMIN-1 );//mat_wm1 = arMatrixAlloc( AR_PARAM_CDMIN-1, AR_PARAM_CDMIN-1 );\r
- if( mat_wm1 == null) {\r
- return -1;\r
- }\r
- mat_wm2 = Matrix.arMatrixAlloc(arParamGet_AR_PARAM_CDMIN-1, 2*num );//mat_wm2 = arMatrixAlloc( AR_PARAM_CDMIN-1, 2*num );\r
- if( mat_wm2 == null ) {\r
- return -1;\r
- }\r
-*/\r
- /* Initializing array */\r
- mat_a.zeroClear();//Javaではゼロクリアされるので不要\r
-// pa1=mat_a.getPointer();//pa1 = mat_a->m;\r
-// for(i = 0; i < 2 * num * (arParamGet_AR_PARAM_CDMIN-1); i++){\r
-// {//*pa1++ = 0.0;\r
-// pa1.set(0.0);\r
-// pa1.incPtr();}\r
-// }\r
- double[][] pa1 =mat_a.getArray();\r
- double[][] pa2 =mat_a.getArray();\r
- /* Calculate A,R matrix */\r
- double[][] pr=mat_r.getArray();\r
- int pr_ptr_col=0;\r
- for(i = 0; i < num; i++) {//for(i = 0, pr = mat_r->m; i < num; i++) {\r
- int pa1_ptr_row =2*i; //pa1 = &(mat_a->m[ (2*i) * (AR_PARAM_CDMIN-1)\r
- int pa2_ptr_row =2*i+1;//pa2 = &(mat_a->m[ (2*i+1) * (AR_PARAM_CDMIN-1) + 4]);\r
-\r
-\r
-// pa1=mat_a.getPointer((2*i)*(arParamGet_AR_PARAM_CDMIN-1)); ]);\r
-// pa2=mat_a.getPointer((2*i+1)*(arParamGet_AR_PARAM_CDMIN-1) + 4);\r
- //*pa1++ = global[i][0]; *pa1++ = global[i][1];\r
- pa1[pa1_ptr_row][ 0]=global[i][0];\r
- pa1[pa1_ptr_row][ 1]=global[i][1];\r
- //*pa1++ = global[i][2]; *pa1++ = 1.0;\r
- pa1[pa1_ptr_row][ 2]=global[i][2];\r
- pa1[pa1_ptr_row][ 3]=1.0;\r
- //*pa2++ = global[i][0]; *pa2++ = global[i][1];\r
- pa2[pa2_ptr_row][ 4]=global[i][0];\r
- pa2[pa2_ptr_row][ 5]=global[i][1];\r
- //*pa2++ = global[i][2]; *pa2++ = 1.0;\r
- pa2[pa2_ptr_row][ 6]=global[i][2];\r
- pa2[pa2_ptr_row][ 7]=1.0;\r
- //pa1 += 4;\r
- //*pa1++ = -global[i][0] * screen[i][0];\r
- pa1[pa1_ptr_row][ 8]=-global[i][0] * screen[i][0];\r
- //*pa1++ = -global[i][1] * screen[i][0];\r
- pa1[pa1_ptr_row][ 9]=-global[i][1] * screen[i][0];\r
- //*pa1 = -global[i][2] * screen[i][0];\r
- pa1[pa1_ptr_row][10]=-global[i][2]* screen[i][0];\r
- //*pa2++ = -global[i][0] * screen[i][1];\r
- pa2[pa2_ptr_row][ 8]=-global[i][0] * screen[i][1];\r
- //*pa2++ = -global[i][1] * screen[i][1];\r
- pa2[pa2_ptr_row][ 9]=-global[i][1] * screen[i][1];\r
- //*pa2 = -global[i][2] * screen[i][1];\r
- pa2[pa2_ptr_row][10]=-global[i][2] * screen[i][1];\r
- //*pr++ = screen[i][0] * AR_PARAM_C34;\r
- pr[0][pr_ptr_col]=screen[i][0] * AR_PARAM_C34;pr_ptr_col++;\r
- //*pr++ = screen[i][1] * AR_PARAM_C34;\r
- pr[0][pr_ptr_col]=screen[i][1] * AR_PARAM_C34;pr_ptr_col++;\r
- }\r
-\r
- NyARException.trap("未チェックのパス");\r
- NyARMat.matrixTrans(mat_at, mat_a );//if( arMatrixTrans( mat_at, mat_a ) < 0 ){\r
-\r
- NyARException.trap("未チェックのパス");\r
- mat_wm1.matrixMul(mat_at, mat_a );//if( arMatrixMul( mat_wm1, mat_at, mat_a ) < 0 ) {\r
- NyARException.trap("未チェックのパス");\r
- mat_wm1.matrixSelfInv();//if( arMatrixSelfInv( mat_wm1 ) < 0 ) {\r
-\r
- NyARException.trap("未チェックのパス");\r
- mat_wm2.matrixMul(mat_wm1, mat_at );//if( arMatrixMul( mat_wm2, mat_wm1, mat_at ) < 0 ) {\r
-\r
- //mat_cpara.row = AR_PARAM_CDMIN-1;//mat_cpara.row = AR_PARAM_CDMIN-1;\r
- //mat_cpara.clm = 1;\r
- //mat_cpara.m = &(mat[0][0]);\r
- /*1次元行列から3x4行列に転写。高負荷なところじゃないから地道に転写でOK*/\r
- NyARMat mat_cpara=new NyARMat(arParamGet_AR_PARAM_CDMIN-1,1);\r
- double[][] mat_cpara_array=mat_cpara.getArray();\r
- NyARException.trap("未チェックのパス");\r
- mat_cpara.matrixMul(mat_wm2, mat_r );//if( arMatrixMul( &mat_cpara, mat_wm2, mat_r ) < 0 ) {\r
-\r
- for(int i2=0;i<3;i++){\r
- for(int i3=0;i3<4;i3++){\r
- mat[i2][i3]=mat_cpara_array[i2*4+i3][0];\r
- }\r
- }\r
- //ARMat.wrap(mat.array(),arParamGet_AR_PARAM_CDMIN-1,1);}\r
-\r
- mat[2][3]=AR_PARAM_C34;//mat[2][3] = AR_PARAM_C34;\r
-\r
- return 0;\r
- }\r
-\r
-/* //int arsParamChangeSize( ARSParam *source, int xsize, int ysize, ARSParam *newparam );\r
- public static int arsParamChangeSize( ARSParam source, int xsize, int ysize, ARSParam newparam)\r
- {\r
- double scale;\r
-\r
- newparam.xsize=xsize;//newparam->xsize = xsize;\r
- newparam.ysize=ysize;//newparam->ysize = ysize;\r
-\r
- scale=(double)xsize/ (double)(source.xsize);//scale = (double)xsize / (double)(source->xsize);\r
- for(int i = 0; i < 4; i++ ){\r
- newparam.matL.set(0,i,source.matL.get(0,i)*scale);//newparam->matL[0][i] = source->matL[0][i] * scale;\r
- newparam.matL.set(1,i,source.matL.get(1,i)*scale);//newparam->matL[1][i] = source->matL[1][i] * scale;\r
- newparam.matL.set(2,i,source.matL.get(2,i));//newparam->matL[2][i] = source->matL[2][i];\r
- }\r
- for(int i = 0; i < 4; i++ ) {\r
- newparam.matR.set(0,i,source.matR.get(0,i)*scale);//newparam->matR[0][i] = source->matR[0][i] * scale;\r
- newparam.matR.set(1,i,source.matR.get(1,i)*scale);//newparam->matR[1][i] = source->matR[1][i] * scale;\r
- newparam.matR.set(2,i,source.matR.get(2,i));//newparam->matR[2][i] = source->matR[2][i];\r
- }\r
- for(int i = 0; i < 4; i++ ) {\r
- newparam.matL2R.set(0,i,source.matL2R.get(0,i));//newparam->matL2R[0][i] = source->matL2R[0][i];\r
- newparam.matL2R.set(1,i,source.matL2R.get(1,i));//newparam->matL2R[1][i] = source->matL2R[1][i];\r
- newparam.matL2R.set(2,i,source.matL2R.get(2,i));//newparam->matL2R[2][i] = source->matL2R[2][i];\r
- }\r
-\r
- newparam.dist_factorL[0] = source.dist_factorL[0] * scale;//newparam->dist_factorL[0] = source->dist_factorL[0] * scale;\r
- newparam.dist_factorL[1] = source.dist_factorL[1] * scale;//newparam->dist_factorL[1] = source->dist_factorL[1] * scale;\r
- newparam.dist_factorL[2] = source.dist_factorL[2] / (scale*scale);//newparam->dist_factorL[2] = source->dist_factorL[2] / (scale*scale);\r
- newparam.dist_factorL[3] = source.dist_factorL[3];//newparam->dist_factorL[3] = source->dist_factorL[3];\r
-\r
- newparam.dist_factorR[0] = source.dist_factorR[0] * scale;//newparam->dist_factorR[0] = source->dist_factorR[0] * scale;\r
- newparam.dist_factorR[1] = source.dist_factorR[1] * scale;//newparam->dist_factorR[1] = source->dist_factorR[1] * scale;\r
- newparam.dist_factorR[2] = source.dist_factorR[2] / (scale*scale);//newparam->dist_factorR[2] = source->dist_factorR[2] / (scale*scale);\r
- newparam.dist_factorR[3] = source.dist_factorR[3];//newparam->dist_factorR[3] = source->dist_factorR[3];\r
-\r
- return 0;\r
- }*/\r
-/* //int arsParamSave( char *filename, ARSParam *sparam );\r
- public static int arsParamSave(String filename, ARSParam sparam) throws Exception\r
- { \r
- //int xsize, ysize;\r
- //Double2dArray matL=new Double2dArray(3,4);\r
- //Double2dArray matR=new Double2dArray(3,4);\r
- //Double2dArray matL2R=new Double2dArray(3,4);\r
- //double dist_factorL[]=new double[4];\r
- //double dist_factorR[]=new double[4];\r
-\r
- byte[] buf=new byte[(4+4+(3*4*8)*3+(4*8)*2)];\r
- \r
- //バッファをラップ\r
- ByteBuffer bb = ByteBuffer.wrap(buf);\r
- bb.order(ByteOrder.BIG_ENDIAN);\r
-\r
- //書き込み\r
- bb.putInt(sparam.xsize);\r
- bb.putInt(sparam.ysize);\r
- for(int i=0;i<3;i++){\r
- for(int i2=0;i2<4;i2++){\r
- bb.putDouble(sparam.matL.get(i, i2));\r
- }\r
- }\r
- for(int i=0;i<3;i++){\r
- for(int i2=0;i2<4;i2++){\r
- bb.putDouble(sparam.matR.get(i, i2));\r
- }\r
- }\r
- for(int i=0;i<3;i++){\r
- for(int i2=0;i2<4;i2++){\r
- bb.putDouble(sparam.matL2R.get(i, i2));\r
- }\r
- }\r
- for(int i=0;i<4;i++){\r
- bb.putDouble(sparam.dist_factorL[i]);\r
- }\r
- for(int i=0;i<4;i++){\r
- bb.putDouble(sparam.dist_factorR[i]);\r
- }\r
- //ファイルに保存\r
- FileOutputStream fs=new FileOutputStream(filename);\r
- fs.write(buf);\r
- fs.close();\r
- \r
- return 0;\r
- }*/\r
-/* //int arsParamLoad( char *filename, ARSParam *sparam );\r
- public static int arsParamLoad(String filename, ARSParam sparam ) throws Exception\r
- {\r
- //ファイルを読んどく\r
- FileInputStream fs=new FileInputStream(filename);\r
- File f=new File(filename);\r
- int file_size=(int)f.length();\r
- byte[] buf=new byte[file_size];\r
- fs.read(buf);\r
- fs.close();\r
- \r
- //バッファを加工\r
- ByteBuffer bb = ByteBuffer.wrap(buf);\r
- bb.order(ByteOrder.BIG_ENDIAN);\r
- \r
- //固定回数パースして配列に格納 \r
- sparam.xsize=bb.getInt();\r
- sparam.ysize=bb.getInt();\r
- for(int i=0;i<3;i++){\r
- for(int i2=0;i2<4;i2++){\r
- sparam.matL.set(i,i2,bb.getDouble());\r
- }\r
- }\r
- for(int i=0;i<3;i++){\r
- for(int i2=0;i2<4;i2++){\r
- sparam.matR.set(i,i2,bb.getDouble());\r
- }\r
- }\r
- for(int i=0;i<3;i++){\r
- for(int i2=0;i2<4;i2++){\r
- sparam.matL2R.set(i,i2,bb.getDouble());\r
- }\r
- }\r
- for(int i=0;i<3;i++){\r
- sparam.dist_factorL[i]=bb.getDouble();\r
- }\r
- for(int i=0;i<3;i++){\r
- sparam.dist_factorR[i]=bb.getDouble();\r
- }\r
- return 0;\r
- }*/\r
-/*\r
- // int arsParamGetMat( double matL[3][4], double matR[3][4],double cparaL[3][4], double cparaR[3][4], double matL2R[3][4] );\r
- public static int arsParamGetMat(double[][] matL, double[][] matR,double[][] cparaL, double[][] cparaR, double[][] matL2R) throws JartkException\r
- {\r
- ARMat t1,t2,t3;//ARMat *t1, *t2, *t3;\r
- //double transL[3][4], transR[3][4];\r
- Double2dArray transL=new Double2dArray(3,4);\r
- Double2dArray transR=new Double2dArray(3,4);\r
- \r
- arParamDecompMat( matL,cparaL,transL);\r
- arParamDecompMat( matR,cparaR,transR);\r
- JartkException.trap("未チェックパス");{\r
- t1=new ARMat(4,4);//t1 = arMatrixAlloc( 4, 4 );\r
- t2=new ARMat(4,4);//t2 = arMatrixAlloc( 4, 4 );\r
- }\r
- double[][] t1_array=t1.getArray();\r
- double[][] t2_array=t2.getArray();\r
- for(int j = 0; j < 3; j++ ){\r
- for(int i = 0; i < 4; i++ ) {\r
- JartkException.trap("未チェックパス");{\r
- t1_array[j][i]=transL.get(j,i);//t1->m[j*4+i] = transL[j][i];\r
- t2_array[j][i]=transL.get(j,i);//t2->m[j*4+i] = transR[j][i];\r
- }\r
- }\r
- }\r
- JartkException.trap("未チェックパス");{\r
- t1_array[3][0]=t1_array[3][1]=t1_array[3][2]=0.0;//t1->m[12] = t1->m[13] = t1->m[14] = 0.0;\r
- t1_array[3][3]=1.0;//t1->m[15] = 1.0;\r
- t2_array[3][0]=t2_array[3][1]=t2_array[3][2]=0.0;//t2->m[12] = t2->m[13] = t2->m[14] = 0.0;\r
- t2_array[3][3]=1.0;//t2->m[15] = 1.0;\r
- }\r
- JartkException.trap("未チェックのパス");\r
- t1.matrixSelfInv();//if( arMatrixSelfInv(t1) != 0 ) {\r
-\r
- JartkException.trap("未チェックのパス"); \r
- t3 =ARMat.matrixAllocMul(t2, t1);//t3 = arMatrixAllocMul(t2, t1);\r
- double[][] t3_array=t3.getArray();\r
- if(t3==null){\r
- return -1;\r
- }\r
- \r
- for(int j = 0; j < 3; j++ ) {\r
- for(int i = 0; i < 4; i++ ) {\r
- JartkException.trap("未チェックパス");\r
- matL2R[j][i]=t3_array[j][i];//matL2R[j][i] = t3->m[j*4+i];\r
- }\r
- }\r
- return 0;\r
- }\r
-*/ //int arsParamDisp( ARSParam *sparam )\r
-/* public static int arsParamDisp( ARSParam sparam)\r
- {\r
- System.out.println("--------------------------------------");//printf("--------------------------------------\n");\r
- System.out.println("SIZE = "+sparam.xsize+", "+sparam.ysize);// printf("SIZE = %d, %d\n", sparam->xsize, sparam->ysize);\r
- System.out.println("-- Left --");//printf("-- Left --\n");\r
- System.out.println("Distotion factor = "+sparam.dist_factorL[0]+" "+sparam.dist_factorL[1]+" "+sparam.dist_factorL[2]+" "+sparam.dist_factorL[3]);//printf("Distotion factor = %f %f %f %f\n", sparam->dist_factorL[0],sparam->dist_factorL[1], sparam->dist_factorL[2], sparam->dist_factorL[3] );\r
- for(int j = 0; j < 3; j++ ) {\r
- for(int i = 0; i < 4; i++ ){\r
- System.out.print(sparam.matL.get(j,i)+" ");//printf("%7.5f ", sparam->matL[j][i]);\r
- }\r
- System.out.println();//printf("\n");\r
- }\r
- \r
- System.out.println("-- Right --");//printf("-- Right --\n");\r
- System.out.println("Distotion factor = "+sparam.dist_factorR[0]+" "+sparam.dist_factorR[1]+" "+sparam.dist_factorR[2]+" "+sparam.dist_factorR[3]);//printf("Distotion factor = %f %f %f %f\n", sparam->dist_factorR[0],sparam->dist_factorR[1], sparam->dist_factorR[2], sparam->dist_factorR[3]);\r
- for(int j = 0; j < 3; j++ ){\r
- for(int i = 0; i < 4; i++ ){\r
- System.out.println(sparam.matR.get(j,i)+" ");//printf("%7.5f ", sparam->matR[j][i]);\r
- }\r
- System.out.println();//printf("\n");\r
- }\r
- \r
- System.out.println("-- Left => Right --");//printf("-- Left => Right --\n");\r
- for(int j = 0; j < 3; j++ ) {\r
- for(int i = 0; i < 4; i++ ){\r
- //printf("%7.5f ", sparam->matL2R[j][i]);\r
- }\r
- System.out.println();//printf("\n");\r
- }\r
- \r
- System.out.println("--------------------------------------");//printf("--------------------------------------\n");\r
- \r
- return 0; \r
- }*/\r
-}\r
* @param clip\r
* @throws NyARException\r
*/\r
- private final void arGetContour(NyARMarker o_marker,int[][] limage,int i_labelnum, NyLabelingLabel i_label) throws NyARException\r
+ private final void arGetContour(NyARMarker o_marker,int[][] limage,int i_labelnum, NyARLabelingLabel i_label) throws NyARException\r
{\r
final int[] xcoord=wk_arGetContour_xcoord;\r
final int[] ycoord=wk_arGetContour_ycoord;\r
* 抽出したマーカーを格納するリスト\r
* @throws NyARException\r
*/\r
- public final void detectMarker(NyLabelingImage i_labeling,double i_factor,NyARMarkerList o_marker_list) throws NyARException\r
+ public final void detectMarker(NyARLabelingImage i_labeling,double i_factor,NyARMarkerList o_marker_list) throws NyARException\r
{\r
int label_area;\r
int i;\r
int xsize, ysize;\r
- NyLabelingLabel[] labels=i_labeling.getLabelList().getArray();\r
+ NyARLabelingLabel[] labels=i_labeling.getLabelList().getArray();\r
// int[] warea =i_labeling.getArea();\r
int label_num =i_labeling.getLabelList().getCount();\r
// int[][] wclip =i_labeling.getClip();\r
ysize =height;\r
// マーカーをmarker_holderに蓄積する。\r
NyARMarker current_marker=o_marker_list.getCurrentHolder();\r
- NyLabelingLabel label_pt;\r
+ NyARLabelingLabel label_pt;\r
for(i=0; i<label_num; i++ ){\r
label_pt=labels[i];\r
label_area=label_pt.area;\r
package jp.nyatla.nyartoolkit.core;\r
\r
import jp.nyatla.nyartoolkit.*;\r
-import jp.nyatla.nyartoolkit.core.raster.*;\r
+import jp.nyatla.nyartoolkit.core.raster.operator.*;\r
import jp.nyatla.nyartoolkit.core.labeling.*;\r
-import jp.nyatla.nyartoolkit.core.labeling.processor.NyARLabeling;\r
+import jp.nyatla.nyartoolkit.core.labeling.processor.ARToolKitLabeling;\r
\r
public class NyARDetectSquare\r
{\r
- private final NyARLabeling _labeling;\r
+ private final ARToolKitLabeling _labeling;\r
private final NyARDetectMarker _detecter;\r
- private final NyLabelingImage _limage;\r
+ private final NyARLabelingImage _limage;\r
private final NyARParam _param;\r
private final NyARMarkerList _marker_list;\r
\r
\r
\r
this._detecter=new NyARDetectMarker(width,height);\r
- this._labeling=new NyARLabeling();\r
- this._limage=new NyLabelingImage(width,height);\r
+ this._labeling=new ARToolKitLabeling();\r
+ this._limage=new NyARLabelingImage(width,height);\r
this._marker_list=new NyARMarkerList(i_max_marker);\r
\r
this._labeling.attachDestination(this._limage);\r
* @param i_square_holder\r
* @throws NyARException\r
*/\r
- public void detectSquare(INyARRaster i_image,int i_thresh,NyARSquareList o_square_list) throws NyARException\r
+ public void detectSquare(INyARRasterReader i_reader,int i_thresh,NyARSquareList o_square_list) throws NyARException\r
{\r
this._labeling.setThresh(i_thresh);\r
- this._labeling.labeling(i_image);\r
+ this._labeling.labeling(i_reader);\r
//ラベル数が0ならマーカー検出をしない。 \r
if(this._limage.getLabelList().getCount()<1){\r
return;\r
\r
import jp.nyatla.nyartoolkit.core.types.*;\r
\r
-public class NyLabelingImage\r
+public class NyARLabelingImage\r
{\r
- private TNyIntSize _size;\r
+ private TNyARIntSize _size;\r
private int[][] _image;\r
- private NyLabelingLabelList _label_list;\r
+ private NyARLabelingLabelList _label_list;\r
/**\r
* \r
* @param i_width\r
* @param i_height\r
*/\r
- public NyLabelingImage(int i_width,int i_height)\r
+ public NyARLabelingImage(int i_width,int i_height)\r
{\r
- this._size=new TNyIntSize();\r
+ this._size=new TNyARIntSize();\r
this._size.w=i_width;\r
this._size.h=i_height;\r
this._image=new int[i_height][i_width];\r
- this._label_list=new NyLabelingLabelList();\r
+ this._label_list=new NyARLabelingLabelList();\r
}\r
- public TNyIntSize getSize()\r
+ public TNyARIntSize getSize()\r
{\r
return this._size;\r
}\r
{\r
return this._image;\r
}\r
- public NyLabelingLabelList getLabelList()\r
+ public NyARLabelingLabelList getLabelList()\r
{\r
return this._label_list;\r
}\r
package jp.nyatla.nyartoolkit.core.labeling;\r
\r
-public class NyLabelingLabel\r
+public class NyARLabelingLabel\r
{\r
public int area;\r
public int clip_r;//0\r
* NyLabelの予約型動的配列\r
*\r
*/\r
-public class NyLabelingLabelList\r
+public class NyARLabelingLabelList\r
{ \r
private final static int ARRAY_APPEND_STEP=128;\r
private final static int ARRAY_MAX=1024*16;\r
- private final NyLabelingLabel[] _labels;\r
+ private final NyARLabelingLabel[] _labels;\r
private int _allocated_size;\r
private int _length;\r
/**\r
* 最大ARRAY_MAX個の動的割り当てバッファを準備する。\r
* @param i_holder_size\r
*/\r
- public NyLabelingLabelList()\r
+ public NyARLabelingLabelList()\r
{\r
//ポインタだけははじめに確保しておく\r
- this._labels=new NyLabelingLabel[ARRAY_MAX];\r
+ this._labels=new NyARLabelingLabel[ARRAY_MAX];\r
//現在アロケート中の個数は0\r
this._allocated_size=0;\r
this._length=0;\r
//アロケート\r
for(int i=this._allocated_size;i<range;i++)\r
{\r
- this._labels[i]=new NyLabelingLabel();\r
+ this._labels[i]=new NyARLabelingLabel();\r
}\r
this._allocated_size=range;\r
}\r
- public final NyLabelingLabel[] getArray()\r
+ public final NyARLabelingLabel[] getArray()\r
{\r
return this._labels;\r
}\r
+++ /dev/null
-package jp.nyatla.nyartoolkit.core.labeling;\r
-\r
-import jp.nyatla.nyartoolkit.core.raster.*;\r
-import jp.nyatla.nyartoolkit.*;\r
-/**\r
- * \r
- * @author nyatla\r
- * モノクロ256段階ラスタデータ保持クラス\r
- */\r
-public class NyLabelingRaster\r
-{\r
- private INyARRaster _related_raster;\r
- private int[][] _pixcels;\r
- private int[] _average;\r
- private int _width;\r
- private int _height;\r
- \r
- /**\r
- * 現状の設定でラスタの保持データを初期化する。\r
- */\r
- private void initRaster()\r
- {\r
- //ワーク領域を確保\r
- if(this._pixcels==null)\r
- {\r
- \r
- }\r
- //値を初期化(_averageが)\r
- \r
- \r
- }\r
- public NyLabelingRaster(int i_width,int i_height)\r
- {\r
- this._height=i_height;\r
- this._width=i_width;\r
- //指定サイズで初期化をする。\r
- this._pixcels=new int[i_height][];\r
-\r
- }\r
- /**\r
- * 連携するラスタオブジェクトを指定する。\r
- * @param i_raster\r
- */\r
- public void SetRelatedRaster(INyARRaster i_raster) throws NyARException\r
- {\r
- //新しいラスタをセット\r
- this._related_raster=i_raster;\r
- //ラスタサイズが一致しているかを確認する。(一致していなければ例外を発生する)\r
- if(i_raster.getSize().isEqualSize(this._width,this._height))\r
- {\r
- throw new NyARException();\r
- }\r
- //キャッシュしている情報を無効化\r
- this._pixcels=new int[this._height][];\r
- this._average=new int[this._height];\r
- }\r
- \r
- public int[] GetLine(int i_line_no)\r
- {\r
- int[] line=this._pixcels[i_line_no];\r
- if(line==null){\r
- //ラインを作る。\r
- line=new int[this._width];\r
- this._related_raster.getPixelTotalRowLine(i_line_no,line);\r
- this._pixcels[i_line_no]=line;\r
- //平均値の計算\r
- int ave=0;\r
- for(int i=this._width-1;i>=0;i++){\r
- ave+=line[i];\r
- }\r
- this._average[i_line_no]=ave/this._width;\r
- }\r
- return line;\r
- }\r
- public int GetLineAverage(int i_line_no)\r
- {\r
- if(this._pixcels[i_line_no]==null){\r
- this.GetLine(i_line_no);\r
- }\r
- return this._average[i_line_no];\r
- }\r
- \r
-}\r
\r
import jp.nyatla.nyartoolkit.NyARException;\r
import jp.nyatla.nyartoolkit.core.raster.*;\r
+import jp.nyatla.nyartoolkit.core.raster.operator.INyARRasterReader;\r
import jp.nyatla.nyartoolkit.core.labeling.*;\r
import jp.nyatla.nyartoolkit.core.types.*;\r
\r
* ARToolKitと同一な評価結果を返します。\r
*\r
*/\r
-public class NyARLabeling implements INyLabeling\r
+public class ARToolKitLabeling implements INyARLabeling\r
{\r
private static final int WORK_SIZE=1024*32;//#define WORK_SIZE 1024*32\r
private final NyARWorkHolder work_holder=new NyARWorkHolder(WORK_SIZE);\r
private int _thresh;\r
- private TNyIntSize _dest_size;\r
- private NyLabelingImage _out_image;\r
- public NyARLabeling()\r
+ private TNyARIntSize _dest_size;\r
+ private NyARLabelingImage _out_image;\r
+ public ARToolKitLabeling()\r
{\r
this._thresh=110;\r
}\r
}\r
//コンストラクタで作ること\r
private int[] wk_reservLineBuffer_buf;\r
- public void attachDestination(NyLabelingImage i_destination_image) throws NyARException\r
+ public void attachDestination(NyARLabelingImage i_destination_image) throws NyARException\r
{\r
//サイズチェック\r
- TNyIntSize size=i_destination_image.getSize();\r
+ TNyARIntSize size=i_destination_image.getSize();\r
this._out_image=i_destination_image;\r
\r
//ラインバッファの準備\r
* 関数の代替品\r
* ラスタimageをラベリングして、結果を保存します。\r
* Optimize:STEP[1514->1493]\r
- * @param i_image\r
+ * @param i_reader\r
* @param thresh\r
* @throws NyARException\r
*/\r
- public void labeling(INyARRaster i_input_raster) throws NyARException\r
+ public void labeling(INyARRasterReader i_reader) throws NyARException\r
{\r
int wk_max; /* work */\r
int m,n; /* work */\r
int thresht3 = this._thresh * 3;\r
int i,j,k;\r
- NyLabelingImage out_image=this._out_image; \r
+ NyARLabelingImage out_image=this._out_image; \r
\r
//サイズチェック\r
- TNyIntSize in_size=i_input_raster.getSize();\r
+ TNyARIntSize in_size=i_reader.getRasterSize();\r
this._dest_size.isEqualSize(in_size);\r
\r
int lxsize=in_size.w;//lxsize = arUtil_c.arImXsize;\r
for(j = 1; j < lysize - 1; j++) {//for (int j = 1; j < lysize - 1; j++, pnt += poff*2, pnt2 += 2) {\r
label_img_pt0=label_img[j];\r
label_img_pt1=label_img[j-1];\r
- i_input_raster.getPixelTotalRowLine(j,line_bufferr);\r
+ i_reader.readRow(j,line_bufferr);\r
\r
for(i = 1; i < lxsize-1; i++) {//for(int i = 1; i < lxsize-1; i++, pnt+=poff, pnt2++) {\r
//RGBの合計値が閾値より小さいかな?\r
\r
\r
//ラベル情報の保存等\r
- NyLabelingLabelList label_list=out_image.getLabelList();\r
+ NyARLabelingLabelList label_list=out_image.getLabelList();\r
\r
//ラベルバッファを予約\r
label_list.reserv(wlabel_num);\r
\r
//エリアと重心、クリップ領域を計算\r
- NyLabelingLabel label_pt;\r
- NyLabelingLabel[] labels=label_list.getArray();\r
+ NyARLabelingLabel label_pt;\r
+ NyARLabelingLabel[] labels=label_list.getArray();\r
for(i=0;i<wlabel_num;i++)\r
{\r
label_pt=labels[i];\r
--- /dev/null
+package jp.nyatla.nyartoolkit.core.labeling.processor;\r
+\r
+import jp.nyatla.nyartoolkit.*;\r
+import jp.nyatla.nyartoolkit.core.labeling.*;\r
+import jp.nyatla.nyartoolkit.core.raster.operator.*;\r
+\r
+public interface INyARLabeling\r
+{\r
+ public void attachDestination(NyARLabelingImage i_destination_image) throws NyARException;\r
+ public void labeling(INyARRasterReader i_reader) throws NyARException;\r
+}\r
+++ /dev/null
-package jp.nyatla.nyartoolkit.core.labeling.processor;\r
-\r
-import jp.nyatla.nyartoolkit.*;\r
-import jp.nyatla.nyartoolkit.core.labeling.NyLabelingImage;\r
-import jp.nyatla.nyartoolkit.core.raster.*;\r
-\r
-\r
-public interface INyLabeling\r
-{\r
- public void attachDestination(NyLabelingImage i_destination_image) throws NyARException;\r
- public void labeling(INyARRaster i_input_raster) throws NyARException;\r
-}\r
\r
import jp.nyatla.nyartoolkit.NyARException;\r
import jp.nyatla.nyartoolkit.core.NyARCode;\r
-import jp.nyatla.nyartoolkit.core.pickup.INyColorPatt;\r
+import jp.nyatla.nyartoolkit.core.pickup.INyARColorPatt;\r
\r
\r
\r
public double getConfidence();\r
public int getDirection();\r
public void evaluate(NyARCode i_code);\r
- public boolean setPatt(INyColorPatt i_target_patt) throws NyARException;\r
+ public boolean setPatt(INyARColorPatt i_target_patt) throws NyARException;\r
}\r
\r
\r
\r
import jp.nyatla.nyartoolkit.NyARException;\r
import jp.nyatla.nyartoolkit.core.*;\r
-import jp.nyatla.nyartoolkit.core.pickup.INyColorPatt;\r
+import jp.nyatla.nyartoolkit.core.pickup.INyARColorPatt;\r
\r
/**\r
* AR_TEMPLATE_MATCHING_BWと同等のルールで\r
private int dir=0;\r
private int ave;\r
private int[][][] input=new int[height][width][3];\r
- public boolean setPatt(INyColorPatt i_target_patt) throws NyARException\r
+ public boolean setPatt(INyARColorPatt i_target_patt) throws NyARException\r
{\r
width=i_target_patt.getWidth();\r
height=i_target_patt.getHeight();\r
\r
import jp.nyatla.nyartoolkit.NyARException;\r
import jp.nyatla.nyartoolkit.core.*;\r
-import jp.nyatla.nyartoolkit.core.pickup.INyColorPatt;\r
+import jp.nyatla.nyartoolkit.core.pickup.INyARColorPatt;\r
\r
/**\r
* AR_TEMPLATE_MATCHING_COLORかつAR_MATCHING_WITHOUT_PCAと同等のルールで\r
this.height=i_height;\r
this.width =i_width;\r
}\r
- public boolean setPatt(INyColorPatt i_target_patt) throws NyARException\r
+ public boolean setPatt(INyARColorPatt i_target_patt) throws NyARException\r
{ \r
int i,k;\r
int[][][] data,linput;\r
\r
import jp.nyatla.nyartoolkit.NyARException;\r
import jp.nyatla.nyartoolkit.core.NyARCode;\r
-import jp.nyatla.nyartoolkit.core.pickup.INyColorPatt;\r
+import jp.nyatla.nyartoolkit.core.pickup.INyARColorPatt;\r
\r
/**\r
* AR_TEMPLATE_MATCHING_COLORかつAR_MATCHING_WITH_PCAと同等のルールで\r
public int getDirection(){\r
return dir;\r
}\r
- public boolean setPatt(INyColorPatt i_target_patt) throws NyARException\r
+ public boolean setPatt(INyARColorPatt i_target_patt) throws NyARException\r
{\r
width=i_target_patt.getWidth();\r
height=i_target_patt.getHeight();\r
import jp.nyatla.nyartoolkit.core.NyARSquare;\r
import jp.nyatla.nyartoolkit.core.raster.*;\r
\r
-public interface INyColorPatt\r
+public interface INyARColorPatt\r
{\r
// 消すかも。\r
// /**\r
* ラスターの取得に成功するとTRUE/失敗するとFALSE\r
* @throws NyARException\r
*/\r
- public boolean pickFromRaster(INyARRaster image, NyARSquare i_square) throws NyARException;\r
+ public boolean pickFromRaster(NyARRaster image, NyARSquare i_square) throws NyARException;\r
}
\ No newline at end of file
import jp.nyatla.nyartoolkit.NyARException;\r
import jp.nyatla.nyartoolkit.core.NyARMat;\r
import jp.nyatla.nyartoolkit.core.NyARSquare;\r
-import jp.nyatla.nyartoolkit.core.raster.INyARRaster;\r
+import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
\r
/**\r
* 24ビットカラーのマーカーを保持するために使うクラスです。\r
* 演算順序以外の最適化をしたもの\r
*\r
*/\r
-public class NyARColorPatt_O1 implements INyColorPatt\r
+public class NyARColorPatt_O1 implements INyARColorPatt\r
{\r
private static final int AR_PATT_SAMPLE_NUM=64;//#define AR_PATT_SAMPLE_NUM 64\r
private int extpat[][][];\r
* 切り出しに失敗した\r
* @throws Exception\r
*/\r
- public boolean pickFromRaster(INyARRaster image, NyARSquare i_square) throws NyARException\r
+ public boolean pickFromRaster(NyARRaster image, NyARSquare i_square) throws NyARException\r
{\r
double d, xw, yw;\r
int xc, yc;\r
import jp.nyatla.nyartoolkit.NyARException;\r
import jp.nyatla.nyartoolkit.core.NyARMat;\r
import jp.nyatla.nyartoolkit.core.NyARSquare;\r
-import jp.nyatla.nyartoolkit.core.raster.INyARRaster;\r
+import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
\r
/**\r
* 24ビットカラーのマーカーを保持するために使うクラスです。\r
* 演算順序を含む最適化をしたもの\r
*\r
*/\r
-public class NyARColorPatt_O3 implements INyColorPatt\r
+public class NyARColorPatt_O3 implements INyARColorPatt\r
{\r
private static final int AR_PATT_SAMPLE_NUM=64;//#define AR_PATT_SAMPLE_NUM 64\r
private int extpat[][][];\r
* @param i_marker\r
* @throws Exception\r
*/\r
- public boolean pickFromRaster(INyARRaster image, NyARSquare i_square) throws NyARException\r
+ public boolean pickFromRaster(NyARRaster image, NyARSquare i_square) throws NyARException\r
{\r
NyARMat cpara=this.wk_pickFromRaster_cpara;\r
int[][] local=i_square.imvertex;\r
return;\r
}\r
\r
- private void updateExtpat(INyARRaster image,NyARMat i_cpara,int i_xdiv2,int i_ydiv2) throws NyARException\r
+ private void updateExtpat(NyARRaster image,NyARMat i_cpara,int i_xdiv2,int i_ydiv2) throws NyARException\r
{\r
int img_x=image.getWidth();\r
int img_y=image.getHeight();\r
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster;\r
+\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
+import jp.nyatla.nyartoolkit.*;\r
+\r
+public abstract class NyARRaster\r
+{\r
+ //\r
+ //定数\r
+ //\r
+ \r
+ //getBufferType関数の返すバッファフォーマット\r
+\r
+ /**\r
+ * RGB24フォーマットで、全ての画素が0\r
+ */\r
+ public static final int BUFFERFORMAT_NULL_ALLZERO=0x0001;\r
+ /**\r
+ * byte[]で、R8G8B8の24ビットで画素が格納されている。\r
+ */\r
+ public static final int BUFFERFORMAT_BYTE_R8G8B8_24=0x0101;\r
+ /**\r
+ * byte[]で、B8G8R8の24ビットで画素が格納されている。\r
+ */\r
+ public static final int BUFFERFORMAT_BYTE_B8G8R8_24=0x0102;\r
+ /**\r
+ * byte[]で、R8G8B8X8の32ビットで画素が格納されている。\r
+ */\r
+ public static final int BUFFERFORMAT_BYTE_B8G8R8X8_32=0x0201;\r
+\r
+ public static final int BUFFERFORMAT_INT2D=0x0301;\r
+ \r
+ //\r
+ //abstract関数\r
+ //\r
+ \r
+ /**\r
+ * 1ピクセルをint配列にして返します。\r
+ * @param i_x\r
+ * @param i_y\r
+ * @param i_rgb\r
+ */\r
+ public abstract void getPixel(int i_x,int i_y,int[] i_rgb);\r
+ /**\r
+ * 複数のピクセル値をi_rgbへ返します。\r
+ * @param i_x\r
+ * xのインデックス配列\r
+ * @param i_y\r
+ * yのインデックス配列\r
+ * @param i_num\r
+ * 返すピクセル値の数\r
+ * @param i_rgb\r
+ * ピクセル値を返すバッファ\r
+ */\r
+ public abstract void getPixelSet(int[] i_x,int i_y[],int i_num,int[] o_rgb);\r
+ public abstract int getWidth();\r
+ public abstract int getHeight();\r
+ public abstract TNyARIntSize getSize();\r
+ /**\r
+ * バッファオブジェクトを返します。\r
+ * @return\r
+ */\r
+ public abstract Object getBufferObject();\r
+ /**\r
+ * バッファオブジェクトのタイプを返します。\r
+ * @return\r
+ */\r
+ public abstract int getBufferType() throws NyARException;\r
+}\r
+\r
+\r
+\r
*/\r
package jp.nyatla.nyartoolkit.core.raster;\r
\r
-\r
public class NyARRaster_BGRA extends NyARRaster_BasicClass\r
{\r
- private byte[] ref_buf;\r
+ private byte[] _ref_buf;\r
+\r
public static NyARRaster_BGRA wrap(byte[] i_buffer,int i_width,int i_height)\r
{\r
NyARRaster_BGRA new_inst=new NyARRaster_BGRA();\r
- new_inst.ref_buf=i_buffer;\r
+ new_inst._ref_buf=i_buffer;\r
new_inst._size.w=i_width;\r
new_inst._size.h=i_height;\r
return new_inst;\r
}\r
- //RGBの合計値を返す\r
- public int getPixelTotal(int i_x,int i_y)\r
- {\r
- int bp=(i_x+i_y*this._size.w)*4;\r
- byte[] ref=this.ref_buf;\r
- return (ref[bp] & 0xff)+(ref[bp+1] & 0xff)+(ref[bp+2] & 0xff);\r
- }\r
+ //\r
+ //仮想関数の実装\r
+ //\r
+\r
public void getPixelTotalRowLine(int i_row,int[] o_line)\r
{\r
- final byte[] ref=this.ref_buf;\r
+ final byte[] ref=this._ref_buf;\r
int bp=(i_row+1)*this._size.w*4-4;\r
for(int i=this._size.w-1;i>=0;i--){\r
o_line[i]=(ref[bp] & 0xff)+(ref[bp+1] & 0xff)+(ref[bp+2] & 0xff);\r
}\r
public void getPixel(int i_x,int i_y,int[] i_rgb)\r
{\r
- byte[] ref=this.ref_buf;\r
+ byte[] ref=this._ref_buf;\r
int bp=(i_x+i_y*this._size.w)*4;\r
i_rgb[0]=(ref[bp+2] & 0xff);//R\r
i_rgb[1]=(ref[bp+1] & 0xff);//G\r
public void getPixelSet(int[] i_x,int i_y[],int i_num,int[] o_rgb)\r
{\r
int width=this._size.w;\r
- byte[] ref=this.ref_buf;\r
+ byte[] ref=this._ref_buf;\r
int bp;\r
for(int i=i_num-1;i>=0;i--){\r
bp=(i_x[i]+i_y[i]*width)*4;\r
o_rgb[i*3+2]=(ref[bp+0] & 0xff);//B\r
} \r
}\r
+ public Object getBufferObject()\r
+ {\r
+ return this._ref_buf;\r
+ }\r
+ public int getBufferType()\r
+ {\r
+ return BUFFERFORMAT_BYTE_B8G8R8X8_32;\r
+ }\r
}\r
\r
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
package jp.nyatla.nyartoolkit.core.raster;\r
\r
import jp.nyatla.nyartoolkit.core.types.*;\r
* \r
*\r
*/\r
-public abstract class NyARRaster_BasicClass implements INyARRaster \r
+public abstract class NyARRaster_BasicClass extends NyARRaster \r
{\r
- final protected TNyIntSize _size=new TNyIntSize();\r
+ final protected TNyARIntSize _size=new TNyARIntSize();\r
final public int getWidth()\r
{\r
return this._size.w;\r
{\r
return this._size.h;\r
}\r
- final public TNyIntSize getSize()\r
+ final public TNyARIntSize getSize()\r
{\r
return this._size;\r
}\r
this._size.w=i_width;\r
this._size.h=i_height;\r
}\r
- //RGBの合計値を返す\r
- public int getPixelTotal(int i_x,int i_y)\r
- {\r
- return 0;\r
- }\r
- public void getPixelTotalRowLine(int i_row,int[] o_line)\r
- {\r
- for(int i=this._size.w-1;i>=0;i--){\r
- o_line[i]=0;\r
- }\r
- } \r
public void getPixel(int i_x,int i_y,int[] i_rgb)\r
{\r
i_rgb[0]=0;\r
o_rgb[i*3+1]=0;//G\r
o_rgb[i*3+2]=0;//B\r
} \r
+ }\r
+ public Object getBufferObject()\r
+ {\r
+ return null;\r
+ }\r
+ public int getBufferType()\r
+ {\r
+ return BUFFERFORMAT_NULL_ALLZERO;\r
} \r
}\r
*/\r
package jp.nyatla.nyartoolkit.core.raster;\r
\r
-import jp.nyatla.nyartoolkit.core.types.*;\r
\r
-public interface INyARRaster{\r
- //RGBの合計値を返す\r
- public int getPixelTotal(int i_x,int i_y);\r
- /**\r
- * 一行単位でi_row番目の合計値配列を計算して返す。\r
- * @param i_row\r
- * @param o_line\r
- * getWidth()の戻り値以上のサイズが必要。\r
- */\r
- public void getPixelTotalRowLine(int i_row,int[] o_line);\r
- public void getPixel(int i_x,int i_y,int[] i_rgb);\r
+\r
+\r
+\r
+public class NyARRaster_Int2d extends NyARRaster_BasicClass\r
+{\r
+ protected int[][] _ref_buf;\r
+ public NyARRaster_Int2d(int i_width,int i_height)\r
+ {\r
+ this._ref_buf=new int[i_height][i_width];\r
+ this._size.w=i_width;\r
+ this._size.h=i_height;\r
+ \r
+ }\r
+ \r
+ \r
+ public void getPixel(int i_x,int i_y,int[] i_rgb)\r
+ {\r
+ int[][] ref=this._ref_buf;\r
+ int v=ref[i_x][i_y];\r
+ i_rgb[0]=v;\r
+ i_rgb[1]=v;\r
+ i_rgb[2]=v;\r
+ }\r
+ public void getPixelSet(int[] i_x,int i_y[],int i_num,int[] o_rgb)\r
+ {\r
+ int[][] ref=this._ref_buf;\r
+ for(int i=i_num-1;i>=0;i--){\r
+ int v=ref[i_x[i]][i_y[i]];\r
+ o_rgb[i*3+0]=v;\r
+ o_rgb[i*3+1]=v;\r
+ o_rgb[i*3+2]=v;\r
+ } \r
+ }\r
+ public Object getBufferObject()\r
+ {\r
+ return this._ref_buf;\r
+ }\r
/**\r
- * 複数のピクセル値をi_rgbへ返します。\r
- * @param i_x\r
- * xのインデックス配列\r
- * @param i_y\r
- * yのインデックス配列\r
- * @param i_num\r
- * 返すピクセル値の数\r
- * @param i_rgb\r
- * ピクセル値を返すバッファ\r
+ * バッファオブジェクトのタイプを返します。\r
+ * @return\r
*/\r
- public void getPixelSet(int[] i_x,int i_y[],int i_num,int[] o_rgb);\r
- public int getWidth();\r
- public int getHeight();\r
- public TNyIntSize getSize();\r
+ public int getBufferType()\r
+ {\r
+ return BUFFERFORMAT_INT2D;\r
+ } \r
}\r
\r
-\r
-\r
\r
\r
\r
+\r
public class NyARRaster_RGB extends NyARRaster_BasicClass\r
{\r
- protected byte[] ref_buf;\r
+ protected byte[] _ref_buf;\r
public static NyARRaster_RGB wrap(byte[] i_buffer,int i_width,int i_height)\r
{\r
NyARRaster_RGB new_inst=new NyARRaster_RGB();\r
- new_inst.ref_buf=i_buffer;\r
+ new_inst._ref_buf=i_buffer;\r
new_inst._size.w=i_width;\r
new_inst._size.h=i_height;\r
return new_inst;\r
}\r
- //RGBの合計値を返す\r
- public int getPixelTotal(int i_x,int i_y)\r
- {\r
- byte[] ref=this.ref_buf;\r
- int bp=(i_x+i_y*this._size.w)*3;\r
- return (ref[bp] & 0xff)+(ref[bp+1] & 0xff)+(ref[bp+2] & 0xff);\r
- }\r
- public void getPixelTotalRowLine(int i_row,int[] o_line)\r
- {\r
- final byte[] ref=this.ref_buf;\r
- int bp=(i_row+1)*this._size.w*3-3;\r
- for(int i=this._size.w-1;i>=0;i--){\r
- o_line[i]=(ref[bp] & 0xff)+(ref[bp+1] & 0xff)+(ref[bp+2] & 0xff);\r
- bp-=3;\r
- }\r
- }\r
public void getPixel(int i_x,int i_y,int[] i_rgb)\r
{\r
int bp=(i_x+i_y*this._size.w)*3;\r
- byte[] ref=this.ref_buf;\r
+ byte[] ref=this._ref_buf;\r
i_rgb[0]=(ref[bp+0] & 0xff);//R\r
i_rgb[1]=(ref[bp+1] & 0xff);//G\r
i_rgb[2]=(ref[bp+2] & 0xff);//B\r
public void getPixelSet(int[] i_x,int i_y[],int i_num,int[] o_rgb)\r
{\r
int width=this._size.w;\r
- byte[] ref=this.ref_buf;\r
+ byte[] ref=this._ref_buf;\r
int bp;\r
for(int i=i_num-1;i>=0;i--){\r
bp=(i_x[i]+i_y[i]*width)*3;\r
o_rgb[i*3+2]=(ref[bp+2] & 0xff);//B\r
} \r
}\r
+ public Object getBufferObject()\r
+ {\r
+ return this._ref_buf;\r
+ }\r
+ /**\r
+ * バッファオブジェクトのタイプを返します。\r
+ * @return\r
+ */\r
+ public int getBufferType()\r
+ {\r
+ return BUFFERFORMAT_BYTE_R8G8B8_24;\r
+ } \r
}\r
\r
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.filter;\r
+\r
+import jp.nyatla.nyartoolkit.*;\r
+import jp.nyatla.nyartoolkit.core.raster.*;\r
+\r
+public interface INyARRasterFilter\r
+{\r
+ public void doFilter(NyARRaster i_input,NyARRaster i_output) throws NyARException;\r
+}
\ No newline at end of file
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.filter;\r
+\r
+import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
+/**\r
+ * 平均移動法を使った2値化フィルタ\r
+ *\r
+ */\r
+public class NyARRasterFilter_AreaAverage implements INyARRasterFilter\r
+{\r
+ private int _area=4;\r
+ public void doFilter(NyARRaster i_input,NyARRaster i_output) throws NyARException\r
+ {\r
+ assert(i_input.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ assert(i_output.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+\r
+ TNyARIntSize size=i_output.getSize();\r
+ assert(i_input.getSize().isEqualSize(i_output.getSize())==true);\r
+ assert(size.h%8==0 && size.w%8==0);\r
+ \r
+ int[][] out_buf=(int [][])i_output.getBufferObject();\r
+ int[][] in_buf=(int[][])i_input.getBufferObject();\r
+ \r
+ \r
+ int area=this._area;\r
+ int y1=area;\r
+ int x1=area;\r
+ int y2=size.h-area;\r
+ int x2=size.w-area;\r
+ \r
+ for(int y=y1;y<y2;y++){\r
+ int sum,nn;\r
+ sum=nn=0;\r
+ for(int yy=y-area;yy<y+area+1;yy++){\r
+ for(int xx=x1-area;xx<x1+area;xx++){\r
+ sum+=in_buf[yy][xx];\r
+ nn++;\r
+ }\r
+ }\r
+ boolean first=true;\r
+ for(int x=area;x<x2;x++){\r
+ if(!first){\r
+ for(int yy=y-area;yy<y+area;yy++){\r
+ sum+=in_buf[yy][x+area];\r
+ sum-=in_buf[yy][x-area];\r
+ }\r
+ }\r
+ first=false;\r
+ int th=(sum/nn);\r
+ \r
+ int g=in_buf[y][x];\r
+ out_buf[y][x]=th<g?255:0;\r
+ }\r
+ }\r
+ return;\r
+ } \r
+\r
+}\r
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.filter;\r
+\r
+import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.types.TNyARIntSize;\r
+/**\r
+ * エッジ検出フィルタ\r
+ * 入力\r
+ * BUFFERFORMAT_INT2D\r
+ * 出力\r
+ * BUFFERFORMAT_INT2D\r
+ */\r
+public class NyARRasterFilter_Edge implements INyARRasterFilter\r
+{\r
+ public void doFilter(NyARRaster i_input,NyARRaster i_output) throws NyARException\r
+ {\r
+ assert(i_input.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ assert(i_output.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ assert(i_input.getSize().isEqualSize(i_output.getSize())==true);\r
+ \r
+ int[][] out_buf=(int [][])i_output.getBufferObject();\r
+ int[][] in_buf=(int[][])i_input.getBufferObject();\r
+ \r
+ int bp=0;\r
+ TNyARIntSize size=i_output.getSize();\r
+ for(int y=1;y<size.h;y++){\r
+ int prev=128;\r
+ for(int x=1;x<size.w;x++){\r
+ int w=in_buf[y][x];\r
+ out_buf[y][x]=(Math.abs(w-prev)+Math.abs(w-in_buf[y-1][x]))/2;\r
+ prev=w;\r
+ bp+=3;\r
+ }\r
+ }\r
+ return;\r
+ }\r
+}\r
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.filter;\r
+\r
+import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.types.TNyARIntSize;\r
+/**\r
+ * \r
+ *\r
+ */\r
+public class NyARRasterFilter_RgbAnd implements INyARRasterFilter\r
+{ \r
+ public void doFilter(NyARRaster i_input,NyARRaster i_output) throws NyARException\r
+ {\r
+ assert(i_input.getBufferType()==NyARRaster.BUFFERFORMAT_BYTE_B8G8R8_24);\r
+ assert(i_output.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ assert(i_input.getSize().isEqualSize(i_output.getSize())==true);\r
+ \r
+ int [][] out_buf=(int [][])i_output.getBufferObject();\r
+ byte[] in_buf=(byte[])i_input.getBufferObject();\r
+ \r
+ int bp=0;\r
+ TNyARIntSize size=i_output.getSize();\r
+ for(int y=0;y<size.h;y++){\r
+ for(int x=0;x<size.w;x++){\r
+ out_buf[y][x]=((in_buf[bp] & 0xff)&(in_buf[bp+1] & 0xff)&(in_buf[bp+2] & 0xff));\r
+ bp+=3;\r
+ }\r
+ }\r
+ return;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.filter;\r
+\r
+import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.types.TNyARIntSize;\r
+\r
+public class NyARRasterFilter_RgbMul implements INyARRasterFilter\r
+{\r
+ public void doFilter(NyARRaster i_input,NyARRaster i_output) throws NyARException\r
+ {\r
+ assert(i_input.getBufferType()==NyARRaster.BUFFERFORMAT_BYTE_B8G8R8_24);\r
+ assert(i_output.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ assert(i_input.getSize().isEqualSize(i_output.getSize())==true);\r
+ \r
+ int [][] out_buf=(int [][])i_output.getBufferObject();\r
+ byte[] in_buf=(byte[])i_input.getBufferObject();\r
+ \r
+ int bp=0;\r
+ TNyARIntSize size=i_output.getSize();\r
+ for(int y=0;y<size.h;y++){\r
+ for(int x=0;x<size.w;x++){\r
+ out_buf[y][x]=((in_buf[bp] & 0xff)*(in_buf[bp+1] & 0xff)*(in_buf[bp+2] & 0xff))>>16;\r
+ bp+=3;\r
+ }\r
+ }\r
+ return;\r
+ }\r
+}\r
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.filter;\r
+\r
+import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.types.TNyARIntSize;\r
+\r
+public class NyARRasterFilter_RgbOr implements INyARRasterFilter\r
+{ \r
+ public void doFilter(NyARRaster i_input,NyARRaster i_output) throws NyARException\r
+ {\r
+ assert(i_input.getBufferType()==NyARRaster.BUFFERFORMAT_BYTE_B8G8R8_24);\r
+ assert(i_output.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ assert(i_input.getSize().isEqualSize(i_output.getSize())==true);\r
+ \r
+ int [][] out_buf=(int [][])i_output.getBufferObject();\r
+ byte[] in_buf=(byte[])i_input.getBufferObject();\r
+ \r
+ int bp=0;\r
+ TNyARIntSize size=i_output.getSize();\r
+ for(int y=0;y<size.h;y++){\r
+ for(int x=0;x<size.w;x++){\r
+ out_buf[y][x]=((in_buf[bp] & 0xff)|(in_buf[bp+1] & 0xff)|(in_buf[bp+2] & 0xff));\r
+ bp+=3;\r
+ }\r
+ }\r
+ return;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.filter;\r
+\r
+import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.types.TNyARIntSize;\r
+\r
+public class NyARRasterFilter_RgbSum implements INyARRasterFilter\r
+{ \r
+ public void doFilter(NyARRaster i_input,NyARRaster i_output) throws NyARException\r
+ {\r
+ assert(i_input.getBufferType()==NyARRaster.BUFFERFORMAT_BYTE_B8G8R8_24);\r
+ assert(i_output.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ assert(i_input.getSize().isEqualSize(i_output.getSize())==true);\r
+ \r
+ int [][] out_buf=(int [][])i_output.getBufferObject();\r
+ byte[] in_buf=(byte[])i_input.getBufferObject();\r
+ \r
+ int bp=0;\r
+ TNyARIntSize size=i_output.getSize();\r
+ for(int y=0;y<size.h;y++){\r
+ for(int x=0;x<size.w;x++){\r
+ out_buf[y][x]=((in_buf[bp] & 0xff)+(in_buf[bp+1] & 0xff)+(in_buf[bp+2] & 0xff))/3;\r
+ bp+=3;\r
+ }\r
+ }\r
+ return;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.filter;\r
+\r
+import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.types.TNyARIntSize;\r
+\r
+public class NyARRasterFilter_RgbXor implements INyARRasterFilter\r
+{ \r
+ public void doFilter(NyARRaster i_input,NyARRaster i_output) throws NyARException\r
+ {\r
+ assert(i_input.getBufferType()==NyARRaster.BUFFERFORMAT_BYTE_B8G8R8_24);\r
+ assert(i_output.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ assert(i_input.getSize().isEqualSize(i_output.getSize())==true);\r
+ \r
+ int [][] out_buf=(int [][])i_output.getBufferObject();\r
+ byte[] in_buf=(byte[])i_input.getBufferObject();\r
+ \r
+ int bp=0;\r
+ TNyARIntSize size=i_output.getSize();\r
+ for(int y=0;y<size.h;y++){\r
+ for(int x=0;x<size.w;x++){\r
+ out_buf[y][x]=((in_buf[bp] & 0xff)^(in_buf[bp+1] & 0xff)^(in_buf[bp+2] & 0xff));\r
+ bp+=3;\r
+ }\r
+ }\r
+ return;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.filter;\r
+\r
+import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.types.TNyARIntSize;\r
+\r
+/**\r
+ * 定数閾値による2値化をする。\r
+ *\r
+ */\r
+public class NyARRasterFilter_Threshold implements INyARRasterFilter\r
+{\r
+ private int _threshold;\r
+ public NyARRasterFilter_Threshold(int i_threshold)\r
+ {\r
+ this._threshold=i_threshold;\r
+ }\r
+ public void doFilter(NyARRaster i_input,NyARRaster i_output) throws NyARException\r
+ {\r
+ assert(i_input.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ assert(i_output.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ assert(i_input.getSize().isEqualSize(i_output.getSize())==true);\r
+ \r
+ int[][] out_buf=(int [][])i_output.getBufferObject();\r
+ int[][] in_buf=(int[][])i_input.getBufferObject();\r
+ \r
+ int bp=0;\r
+ TNyARIntSize size=i_output.getSize();\r
+ for(int y=0;y<size.h-1;y++){\r
+ for(int x=0;x<size.w;x++){\r
+ out_buf[y][x]=in_buf[y][x]>this._threshold?255:0;\r
+ bp+=3;\r
+ }\r
+ }\r
+ return;\r
+ }\r
+}\r
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.operator;\r
+\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
+\r
+public interface INyARRasterReader\r
+{\r
+ public void readRow(int i_row,int[] out_line);\r
+ public int getThreshold();\r
+ public TNyARIntSize getRasterSize();\r
+}\r
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.operator;\r
+\r
+import jp.nyatla.nyartoolkit.*;\r
+import jp.nyatla.nyartoolkit.core.raster.*;\r
+\r
+public interface INyARRasterReaderFactory\r
+{\r
+ public INyARRasterReader createReader(NyARRaster i_raster) throws NyARException;\r
+}
\ No newline at end of file
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.operator;\r
+\r
+import jp.nyatla.nyartoolkit.core.raster.*;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
+import jp.nyatla.nyartoolkit.*;\r
+\r
+public final class NyARRasterReaderFactory_RgbMul implements INyARRasterReaderFactory{\r
+ public INyARRasterReader createReader(NyARRaster i_raster) throws NyARException\r
+ {\r
+ switch(i_raster.getBufferType()){\r
+ case NyARRaster.BUFFERFORMAT_BYTE_B8G8R8X8_32:\r
+ return new NyARRasterReader_RgbMul_BYTE_C8C8C8X8(i_raster);\r
+ case NyARRaster.BUFFERFORMAT_BYTE_B8G8R8_24:\r
+ case NyARRaster.BUFFERFORMAT_BYTE_R8G8B8_24:\r
+ return new NyARRasterReader_RgbMul_BYTE_C8C8C8(i_raster);\r
+ case NyARRaster.BUFFERFORMAT_NULL_ALLZERO:\r
+ return new NyARRasterReader_RgbMul_NULL_ALLZERO(i_raster);\r
+ default:\r
+ throw new NyARException();\r
+ }\r
+ }\r
+}\r
+\r
+abstract class NyARRasterReader_RgbMul_BaseClass implements INyARRasterReader\r
+{\r
+ protected NyARRaster _raster;\r
+ protected TNyARIntSize _size; \r
+ public final TNyARIntSize getRasterSize()\r
+ {\r
+ return this._size;\r
+ }\r
+ public final int getThreshold()\r
+ {\r
+ int[] work=new int[this._size.w];\r
+ int hi=0;int low=16581375;\r
+ int ave,sum2;\r
+ ave=0;\r
+ for(int i2=0;i2<8;i2++){ \r
+ this.readRow(this._size.h*i2/8,work);\r
+ sum2=0;\r
+ for(int i=0;i<this._size.w;i++){\r
+ int v=work[i];\r
+ if(hi<v){\r
+ hi=v;\r
+ }\r
+ if(low>v){\r
+ low=v;\r
+ }\r
+ sum2+=v;\r
+ }\r
+ ave+=sum2;\r
+ }\r
+ \r
+ return (((hi-low)/10*8)+low)>>2;\r
+ } \r
+}\r
+\r
+\r
+/**\r
+ * byte[] RGB24/BGR24等、画素並びは問わない\r
+ *\r
+ */\r
+class NyARRasterReader_RgbMul_BYTE_C8C8C8 extends NyARRasterReader_RgbMul_BaseClass\r
+{\r
+ public NyARRasterReader_RgbMul_BYTE_C8C8C8(NyARRaster i_raster) throws NyARException\r
+ {\r
+ this._raster=i_raster;\r
+ this._size=i_raster.getSize();\r
+ }\r
+ public void readRow(int i_row,int[] o_line)\r
+ {\r
+ final byte[] buf=(byte[])this._raster.getBufferObject();\r
+ int bp=(i_row+1)*this._size.w*3-3;\r
+ for(int i=this._size.w-1;i>=0;i--){\r
+ o_line[i]=((buf[bp] & 0xff)*(buf[bp+1] & 0xff)*(buf[bp+2] & 0xff))>>16;\r
+ bp-=3;\r
+ }\r
+ }\r
+}\r
+\r
+/**\r
+ * byte[] RGBX/BGRX等、先頭24bitの画素並びは問わない\r
+ *\r
+ */\r
+class NyARRasterReader_RgbMul_BYTE_C8C8C8X8 extends NyARRasterReader_RgbMul_BaseClass\r
+{\r
+ public NyARRasterReader_RgbMul_BYTE_C8C8C8X8(NyARRaster i_raster) throws NyARException\r
+ {\r
+ this._raster=i_raster;\r
+ this._size=i_raster.getSize();\r
+ }\r
+ public void readRow(int i_row,int[] o_line)\r
+ {\r
+ final byte[] buf=(byte[])this._raster.getBufferObject();\r
+ int bp=(i_row+1)*this._size.w*4-4;\r
+ for(int i=this._size.w-1;i>=0;i--){\r
+ o_line[i]=((buf[bp] & 0xff)*(buf[bp+1] & 0xff)*(buf[bp+2] & 0xff))>>16;\r
+ bp-=4;\r
+ }\r
+ } \r
+}\r
+\r
+/**\r
+ * ゼロ配列\r
+ *\r
+ */\r
+class NyARRasterReader_RgbMul_NULL_ALLZERO extends NyARRasterReader_RgbMul_BaseClass\r
+{\r
+ public NyARRasterReader_RgbMul_NULL_ALLZERO(NyARRaster i_raster) throws NyARException\r
+ {\r
+ this._size=i_raster.getSize();\r
+ }\r
+ public void readRow(int i_row,int[] o_line)\r
+ {\r
+ for(int i=this._size.w-1;i>=0;i--){\r
+ o_line[i]=0;\r
+ }\r
+ } \r
+}
\ No newline at end of file
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.operator;\r
+\r
+import jp.nyatla.nyartoolkit.core.raster.*;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
+import jp.nyatla.nyartoolkit.*;\r
+\r
+public final class NyARRasterReaderFactory_RgbTotal implements INyARRasterReaderFactory{\r
+ public INyARRasterReader createReader(NyARRaster i_raster) throws NyARException\r
+ {\r
+ switch(i_raster.getBufferType()){\r
+ case NyARRaster.BUFFERFORMAT_BYTE_B8G8R8X8_32:\r
+ return new NyARRasterReader_RgbTotal_BYTE_C8C8C8X8(i_raster);\r
+ case NyARRaster.BUFFERFORMAT_BYTE_B8G8R8_24:\r
+ case NyARRaster.BUFFERFORMAT_BYTE_R8G8B8_24:\r
+ return new NyARRasterReader_RgbTotal_BYTE_C8C8C8(i_raster);\r
+ case NyARRaster.BUFFERFORMAT_NULL_ALLZERO:\r
+ return new NyARRasterReader_RgbTotal_NULL_ALLZERO(i_raster);\r
+ default:\r
+ throw new NyARException();\r
+ }\r
+ }\r
+}\r
+\r
+abstract class NyARRasterReader_RgbTotal_BaseClass implements INyARRasterReader\r
+{\r
+ protected NyARRaster _raster;\r
+ protected TNyARIntSize _size; \r
+ public final TNyARIntSize getRasterSize()\r
+ {\r
+ return this._size;\r
+ }\r
+ public final int getThreshold()\r
+ {\r
+ int[] work=new int[this._size.w];\r
+ int hi=0;int low=256*3;\r
+ for(int i2=0;i2<8;i2++){ \r
+ this.readRow(this._size.h*i2/8,work);\r
+ for(int i=0;i<this._size.w;i++){\r
+ if(hi<work[i]){\r
+ hi=work[i];\r
+ }\r
+ if(low>work[i]){\r
+ low=work[i];\r
+ }\r
+ }\r
+ }\r
+ return (hi-low)/3+low;\r
+ } \r
+}\r
+\r
+\r
+/**\r
+ * byte[] RGB24/BGR24等、画素並びは問わない\r
+ *\r
+ */\r
+ class NyARRasterReader_RgbTotal_BYTE_C8C8C8 extends NyARRasterReader_RgbTotal_BaseClass\r
+ {\r
+ public NyARRasterReader_RgbTotal_BYTE_C8C8C8(NyARRaster i_raster) throws NyARException\r
+ {\r
+ this._raster=i_raster;\r
+ this._size=i_raster.getSize();\r
+ }\r
+ public void readRow(int i_row,int[] o_line)\r
+ {\r
+ final byte[] buf=(byte[])this._raster.getBufferObject();\r
+ int bp=(i_row+1)*this._size.w*3-3;\r
+ for(int i=this._size.w-1;i>=0;i--){\r
+ o_line[i]=((buf[bp] & 0xff)+(buf[bp+1] & 0xff)+(buf[bp+2] & 0xff))/3;\r
+ bp-=3;\r
+ }\r
+ }\r
+ }\r
+\r
+ /**\r
+ * byte[] RGBX/BGRX等、先頭24bitの画素並びは問わない\r
+ *\r
+ */\r
+ class NyARRasterReader_RgbTotal_BYTE_C8C8C8X8 extends NyARRasterReader_RgbTotal_BaseClass\r
+ {\r
+ public NyARRasterReader_RgbTotal_BYTE_C8C8C8X8(NyARRaster i_raster) throws NyARException\r
+ {\r
+ this._raster=i_raster;\r
+ this._size=i_raster.getSize();\r
+ }\r
+ public void readRow(int i_row,int[] o_line)\r
+ {\r
+ final byte[] buf=(byte[])this._raster.getBufferObject();\r
+ int bp=(i_row+1)*this._size.w*4-4;\r
+ for(int i=this._size.w-1;i>=0;i--){\r
+ o_line[i]=((buf[bp] & 0xff)+(buf[bp+1] & 0xff)+(buf[bp+2] & 0xff))/3;\r
+ bp-=4;\r
+ }\r
+ } \r
+ }\r
+\r
+ /**\r
+ * ゼロ配列\r
+ *\r
+ */\r
+ class NyARRasterReader_RgbTotal_NULL_ALLZERO extends NyARRasterReader_RgbTotal_BaseClass\r
+ {\r
+ public NyARRasterReader_RgbTotal_NULL_ALLZERO(NyARRaster i_raster) throws NyARException\r
+ {\r
+ this._size=i_raster.getSize();\r
+ }\r
+ public void readRow(int i_row,int[] o_line)\r
+ {\r
+ for(int i=this._size.w-1;i>=0;i--){\r
+ o_line[i]=0;\r
+ }\r
+ } \r
+ }
\ No newline at end of file
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.operator;\r
+\r
+import jp.nyatla.nyartoolkit.core.raster.*;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
+import jp.nyatla.nyartoolkit.*;\r
+\r
+public final class NyARRasterReaderFactory_Test implements INyARRasterReaderFactory{\r
+ public INyARRasterReader createReader(NyARRaster i_raster) throws NyARException\r
+ {\r
+ switch(i_raster.getBufferType()){\r
+// case NyARRaster.BUFFERFORMAT_BYTE_B8G8R8X8_32:\r
+// return new NyARRasterReader_RgbMul_BYTE_C8C8C8X8(i_raster);\r
+ case NyARRaster.BUFFERFORMAT_BYTE_B8G8R8_24:\r
+ case NyARRaster.BUFFERFORMAT_BYTE_R8G8B8_24:\r
+ return new NyARRasterReader_RgbTest_BYTE_C8C8C8(i_raster);\r
+// case NyARRaster.BUFFERFORMAT_NULL_ALLZERO:\r
+// return new NyARRasterReader_RgbMul_NULL_ALLZERO(i_raster);\r
+ default:\r
+ throw new NyARException();\r
+ }\r
+ }\r
+}\r
+\r
+abstract class NyARRasterReader_RgbTest_BaseClass implements INyARRasterReader\r
+{\r
+ protected NyARRaster _raster;\r
+ protected TNyARIntSize _size; \r
+ public final TNyARIntSize getRasterSize()\r
+ {\r
+ return this._size;\r
+ }\r
+ public final int getThreshold()\r
+ {\r
+ int[] work=new int[this._size.w];\r
+ int hi=0;int low=16581375;\r
+ int ave,sum2;\r
+ ave=0;\r
+ for(int i2=0;i2<8;i2++){ \r
+ this.readRow(this._size.h*i2/8,work);\r
+ sum2=0;\r
+ for(int i=0;i<this._size.w;i++){\r
+ int v=work[i];\r
+ if(hi<v){\r
+ hi=v;\r
+ }\r
+ if(low>v){\r
+ low=v;\r
+ }\r
+ sum2+=v;\r
+ }\r
+ ave+=sum2;\r
+ }\r
+ \r
+ return (((hi-low)/10*8)+low)>>2;\r
+ } \r
+}\r
+\r
+\r
+/**\r
+ * byte[] RGB24/BGR24等、画素並びは問わない\r
+ *\r
+ */\r
+class NyARRasterReader_RgbTest_BYTE_C8C8C8 extends NyARRasterReader_RgbMul_BaseClass\r
+{\r
+ public NyARRasterReader_RgbTest_BYTE_C8C8C8(NyARRaster i_raster) throws NyARException\r
+ {\r
+ this._raster=i_raster;\r
+ this._size=i_raster.getSize();\r
+ }\r
+ public void readRow(int i_row,int[] o_line)\r
+ {\r
+ final byte[] buf=(byte[])this._raster.getBufferObject();\r
+ int bp=(i_row)*this._size.w*3;\r
+ int w;\r
+ int prev=255;\r
+ int ave=0;\r
+ o_line[0]=0;\r
+ for(int i=1;i<this._size.w-1;i++){ \r
+ w=((buf[bp] & 0xff)*(buf[bp+1] & 0xff)*(buf[bp+2] & 0xff))>>16;\r
+// if(w>prev && (w>ave+16)){\r
+// ave=w;\r
+ o_line[i]=Math.abs(w-ave);\r
+// }else if(w<prev && (ave-16>w)){\r
+ ave=w;\r
+// o_line[i]=w; \r
+// }else{\r
+ ave=(w+ave)/2;\r
+// o_line[i]=o_line[i-1]; \r
+// }\r
+ prev=w;\r
+ bp+=3;\r
+ }\r
+ }\r
+\r
+\r
+ \r
+}
\ No newline at end of file
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.threshold;\r
+\r
+import jp.nyatla.nyartoolkit.*;\r
+import jp.nyatla.nyartoolkit.core.raster.*;\r
+\r
+public interface INyARRasterThresholdDetector\r
+{\r
+ public void analyzeRaster(NyARRaster i_input) throws NyARException;\r
+ public int getThreshold();\r
+ public int getThreshold(int i_x,int i_y);\r
+}\r
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.threshold;\r
+\r
+import jp.nyatla.nyartoolkit.core.raster.*;\r
+import jp.nyatla.nyartoolkit.*;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
+/**\r
+ * Pタイル法による閾値検出\r
+ *\r
+ */\r
+public class NyARRasterThresholdDetector_PTile implements INyARRasterThresholdDetector\r
+{\r
+ private int _persentage;\r
+ private int _threshold;\r
+ /**\r
+ * @param i_persentage\r
+ * -100<=0<=100であること。\r
+ * 正の場合、黒点を基準にします。\r
+ * 負の場合、白点を基準にします。\r
+ * (CMOSカメラの場合、基準点は白点の方が良い)\r
+ */\r
+ public NyARRasterThresholdDetector_PTile(int i_persentage)\r
+ {\r
+ assert(-100<=i_persentage && i_persentage<=100);\r
+ this._persentage=i_persentage;\r
+ }\r
+ private int createHistgram(NyARRaster i_input,int[] o_histgram) throws NyARException\r
+ {\r
+ int[][] in_buf=(int[][])i_input.getBufferObject();\r
+ int[] histgram=o_histgram;\r
+ TNyARIntSize size=i_input.getSize();\r
+ \r
+ //ヒストグラムを作成\r
+ for(int i=0;i<256;i++){\r
+ histgram[i]=0;\r
+ }\r
+ int sum=0;\r
+ for(int y=0;y<size.h;y++){\r
+ int sum2=0;\r
+ for(int x=0;x<size.w;x++){\r
+ int v=in_buf[y][x];\r
+ histgram[v]++;\r
+ sum2+=v;\r
+ }\r
+ sum=sum+sum2/size.w;\r
+ }\r
+ //閾値ピクセル数確定\r
+ int th_pixcels=size.w*size.h*this._persentage/100;\r
+ \r
+ //閾値判定\r
+ int i;\r
+ if(th_pixcels>0){\r
+ //黒点基準\r
+ for(i=0;i<254;i++){\r
+ th_pixcels-=histgram[i];\r
+ if(th_pixcels<=0){\r
+ break;\r
+ }\r
+ }\r
+ }else{\r
+ //白点基準\r
+ for(i=255;i>1;i--){\r
+ th_pixcels+=histgram[i];\r
+ if(th_pixcels>=0){\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ //閾値の保存\r
+ return i;\r
+ }\r
+ \r
+ public void analyzeRaster(NyARRaster i_input) throws NyARException\r
+ {\r
+ assert(i_input.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ int[] histgram=new int[256];\r
+ this._threshold=createHistgram(i_input,histgram);\r
+ }\r
+ /**\r
+ * ヒストグラムをラスタに書き出す。\r
+ * @param i_output\r
+ */\r
+ public void debugDrawHistgramMap(NyARRaster i_input,NyARRaster i_output) throws NyARException\r
+ {\r
+ assert(i_input.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ assert(i_output.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ TNyARIntSize size=i_output.getSize();\r
+ \r
+ int[][] out_buf=(int[][])i_output.getBufferObject();\r
+ //0で塗りつぶし\r
+ for(int y=0;y<size.h;y++){\r
+ for(int x=0;x<size.w;x++){\r
+ out_buf[y][x]=0;\r
+ }\r
+ }\r
+ //ヒストグラムを計算\r
+ int[] histgram=new int[256];\r
+ int threshold=createHistgram(i_input,histgram);\r
+\r
+ //ヒストグラムの最大値を出す\r
+ int max_v=0;\r
+ for(int i=0;i<255;i++){\r
+ if(max_v<histgram[i]){\r
+ max_v=histgram[i];\r
+ }\r
+ }\r
+ //目盛り\r
+ for(int i=0;i<size.h;i++){\r
+ out_buf[i][0]=128;\r
+ out_buf[i][128]=128;\r
+ out_buf[i][255]=128;\r
+ } \r
+ //スケーリングしながら描画\r
+ for(int i=0;i<255;i++){\r
+ out_buf[histgram[i]*(size.h-1)/max_v][i]=255;\r
+ }\r
+ //値\r
+ for(int i=0;i<size.h;i++){\r
+ out_buf[i][threshold]=255;\r
+ }\r
+ return;\r
+ }\r
+ public int getThreshold()\r
+ {\r
+ return this._threshold;\r
+ }\r
+ public int getThreshold(int i_x,int i_y)\r
+ {\r
+ return this._threshold;\r
+ }\r
+}\r
--- /dev/null
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
+package jp.nyatla.nyartoolkit.core.raster.threshold;\r
+\r
+import jp.nyatla.nyartoolkit.core.raster.*;\r
+import jp.nyatla.nyartoolkit.*;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
+/**\r
+ * 明点と暗点をPタイル法で検出して、その中央値を閾値とする。\r
+ * \r
+ *\r
+ */\r
+public class NyARRasterThresholdDetector_SlidePTile implements INyARRasterThresholdDetector\r
+{\r
+ private int _persentage;\r
+ private int _threshold;\r
+ \r
+ /**\r
+ * @param i_persentage\r
+ * 0<=50であること。白/黒マーカーの場合は10~20を推奨\r
+ * 正の場合、黒点を基準にします。\r
+ * 負の場合、白点を基準にします。\r
+ * (CMOSカメラの場合、基準点は白点の方が良い)\r
+ */\r
+ public NyARRasterThresholdDetector_SlidePTile(int i_persentage)\r
+ {\r
+ assert(0<=i_persentage && i_persentage<=50);\r
+ this._persentage=i_persentage;\r
+ }\r
+ private int createHistgram(NyARRaster i_input,int[] o_histgram) throws NyARException\r
+ {\r
+ int[][] in_buf=(int[][])i_input.getBufferObject();\r
+ int[] histgram=o_histgram;\r
+ TNyARIntSize size=i_input.getSize();\r
+ \r
+ //ヒストグラムを作成\r
+ for(int i=0;i<256;i++){\r
+ histgram[i]=0;\r
+ }\r
+ int sum=0;\r
+ for(int y=0;y<size.h;y++){\r
+ int sum2=0;\r
+ for(int x=0;x<size.w;x++){\r
+ int v=in_buf[y][x];\r
+ histgram[v]++;\r
+ sum2+=v;\r
+ }\r
+ sum=sum+sum2/size.w;\r
+ }\r
+ //閾値ピクセル数確定\r
+ int th_pixcels=size.w*size.h*this._persentage/100;\r
+ int th_wk;\r
+ int th_w,th_b;\r
+\r
+ //黒点基準\r
+ th_wk=th_pixcels;\r
+ for(th_b=0;th_b<254;th_b++){\r
+ th_wk-=histgram[th_b];\r
+ if(th_wk<=0){\r
+ break;\r
+ }\r
+ }\r
+ //白点基準\r
+ th_wk=th_pixcels;\r
+ for(th_w=255;th_w>1;th_w--){\r
+ th_wk-=histgram[th_w];\r
+ if(th_wk<=0){\r
+ break;\r
+ }\r
+ }\r
+ //閾値の保存\r
+ return (th_w+th_b)/2;\r
+ }\r
+ \r
+ public void analyzeRaster(NyARRaster i_input) throws NyARException\r
+ {\r
+ assert(i_input.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ int[] histgram=new int[256];\r
+ //閾値の基準値を出す。\r
+ int th=createHistgram(i_input,histgram);\r
+ this._threshold=th;\r
+ \r
+ \r
+ }\r
+ /**\r
+ * ヒストグラムをラスタに書き出す。\r
+ * @param i_output\r
+ */\r
+ public void debugDrawHistgramMap(NyARRaster i_input,NyARRaster i_output) throws NyARException\r
+ {\r
+ assert(i_input.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ assert(i_output.getBufferType()==NyARRaster.BUFFERFORMAT_INT2D);\r
+ TNyARIntSize size=i_output.getSize();\r
+ \r
+ int[][] out_buf=(int[][])i_output.getBufferObject();\r
+ //0で塗りつぶし\r
+ for(int y=0;y<size.h;y++){\r
+ for(int x=0;x<size.w;x++){\r
+ out_buf[y][x]=0;\r
+ }\r
+ }\r
+ //ヒストグラムを計算\r
+ int[] histgram=new int[256];\r
+ int threshold=createHistgram(i_input,histgram);\r
+ for(int i=255;i>0;i--){\r
+ histgram[i]=Math.abs(histgram[i]);\r
+ }\r
+\r
+ //ヒストグラムの最大値を出す\r
+ int max_v=0;\r
+ for(int i=0;i<255;i++){\r
+ if(max_v<histgram[i]){\r
+ max_v=histgram[i];\r
+ }\r
+ }\r
+ //目盛り\r
+ for(int i=0;i<size.h;i++){\r
+ out_buf[i][0]=128;\r
+ out_buf[i][128]=128;\r
+ out_buf[i][255]=128;\r
+ } \r
+ //スケーリングしながら描画\r
+ for(int i=0;i<255;i++){\r
+ out_buf[histgram[i]*(size.h-1)/max_v][i]=255;\r
+ }\r
+ //値\r
+ for(int i=0;i<size.h;i++){\r
+ out_buf[i][threshold]=255;\r
+ }\r
+ return;\r
+ }\r
+ public int getThreshold()\r
+ {\r
+ return this._threshold;\r
+ }\r
+ public int getThreshold(int i_x,int i_y)\r
+ {\r
+ return this._threshold;\r
+ }\r
+}\r
+/* \r
+ * PROJECT: NyARToolkit\r
+ * --------------------------------------------------------------------------------\r
+ * This work is based on the original ARToolKit developed by\r
+ * Hirokazu Kato\r
+ * Mark Billinghurst\r
+ * HITLab, University of Washington, Seattle\r
+ * http://www.hitl.washington.edu/artoolkit/\r
+ *\r
+ * The NyARToolkit is Java version ARToolkit class library.\r
+ * Copyright (C)2008 R.Iizuka\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this framework; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ * \r
+ * For further information please contact.\r
+ * http://nyatla.jp/nyatoolkit/\r
+ * <airmail(at)ebony.plala.or.jp>\r
+ * \r
+ */\r
package jp.nyatla.nyartoolkit.core.transmat;\r
\r
import jp.nyatla.nyartoolkit.NyARException;\r
--- /dev/null
+package jp.nyatla.nyartoolkit.core.types;\r
+\r
+public class NyARSquare\r
+{\r
+ public TNyARIntLine[] line=new TNyARIntLine[4];\r
+ public TNyARIntPoint[] vertex=new TNyARIntPoint[4];\r
+\r
+}\r
+++ /dev/null
-package jp.nyatla.nyartoolkit.core.types;\r
-\r
-public class NySquare\r
-{\r
- public TNyIntLine[] line=new TNyIntLine[4];\r
- public TNyIntPoint[] vertex=new TNyIntPoint[4];\r
-\r
-}\r
* @author nyatla\r
*\r
*/\r
-public class TNyIntLine\r
+public class TNyARIntLine\r
{\r
public int x;\r
public int y;\r
package jp.nyatla.nyartoolkit.core.types;\r
\r
-public class TNyIntPoint\r
+public class TNyARIntPoint\r
{\r
public int x;\r
public int y;\r
\r
import jp.nyatla.nyartoolkit.NyARException;\r
\r
-public class TNyIntSize\r
+public class TNyARIntSize\r
{\r
public int h;\r
public int w;\r
* @return\r
* @throws NyARException\r
*/ \r
- public boolean isEqualSize(TNyIntSize i_size)\r
+ public boolean isEqualSize(TNyARIntSize i_size)\r
{\r
if(i_size.w==this.w && i_size.h==this.h)\r
{\r
*/\r
package jp.nyatla.nyartoolkit.detector;\r
\r
-import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.*;\r
import jp.nyatla.nyartoolkit.core.*;\r
-import jp.nyatla.nyartoolkit.core.match.NyARMatchPatt_Color_WITHOUT_PCA;\r
-import jp.nyatla.nyartoolkit.core.pickup.INyColorPatt;\r
-import jp.nyatla.nyartoolkit.core.pickup.NyARColorPatt_O3;\r
+import jp.nyatla.nyartoolkit.core.match.*;\r
+import jp.nyatla.nyartoolkit.core.pickup.*;\r
import jp.nyatla.nyartoolkit.core.raster.*;\r
-import jp.nyatla.nyartoolkit.core.transmat.INyARTransMat;\r
-import jp.nyatla.nyartoolkit.core.transmat.NyARTransMatResult;\r
-import jp.nyatla.nyartoolkit.core.transmat.NyARTransMat_O2;\r
-\r
+import jp.nyatla.nyartoolkit.core.transmat.*;\r
+import jp.nyatla.nyartoolkit.core.raster.operator.*;\r
\r
\r
class NyARDetectMarkerResult\r
private double[] marker_width;\r
private int number_of_code;\r
//検出結果の保存用\r
- private INyColorPatt patt;\r
+ private INyARColorPatt patt;\r
\r
private NyARDetectMarkerResultHolder result_holder=new NyARDetectMarkerResultHolder();\r
\r
//評価器を作る。\r
this.match_patt=new NyARMatchPatt_Color_WITHOUT_PCA(); \r
}\r
+ NyARRasterReaderFactory_RgbTotal _reader_factory=new NyARRasterReaderFactory_RgbTotal();\r
/**\r
* i_imageにマーカー検出処理を実行し、結果を記録します。\r
* @param i_image\r
* マーカーが見つからない場合は0を返します。\r
* @throws NyARException\r
*/\r
- public int detectMarkerLite(INyARRaster i_image,int i_thresh) throws NyARException\r
+ public int detectMarkerLite(NyARRaster i_image,int i_thresh) throws NyARException\r
{\r
NyARSquareList l_square_list=this.square_list;\r
//スクエアコードを探す\r
- square.detectSquare(i_image,i_thresh,l_square_list);\r
+ square.detectSquare(this._reader_factory.createReader(i_image),i_thresh,l_square_list);\r
\r
final int number_of_square=l_square_list.getCount();\r
//コードは見つかった?\r
\r
import jp.nyatla.nyartoolkit.NyARException;\r
import jp.nyatla.nyartoolkit.core.*;\r
-import jp.nyatla.nyartoolkit.core.match.NyARMatchPatt_Color_WITHOUT_PCA;\r
-import jp.nyatla.nyartoolkit.core.pickup.INyColorPatt;\r
-import jp.nyatla.nyartoolkit.core.pickup.NyARColorPatt_O3;\r
+import jp.nyatla.nyartoolkit.core.match.*;\r
+import jp.nyatla.nyartoolkit.core.pickup.*;\r
import jp.nyatla.nyartoolkit.core.raster.*;\r
-import jp.nyatla.nyartoolkit.core.transmat.INyARTransMat;\r
-import jp.nyatla.nyartoolkit.core.transmat.NyARTransMatResult;\r
-import jp.nyatla.nyartoolkit.core.transmat.NyARTransMat_O2;\r
+import jp.nyatla.nyartoolkit.core.raster.operator.*;\r
+import jp.nyatla.nyartoolkit.core.transmat.*;\r
+\r
/**\r
* 画像からARCodeに最も一致するマーカーを1個検出し、その変換行列を計算するクラスです。\r
*\r
private int detected_direction;\r
private double detected_confidence;\r
private NyARSquare detected_square;\r
- private INyColorPatt patt;\r
+ private INyARColorPatt patt;\r
/**\r
* 検出するARCodeとカメラパラメータから、1個のARCodeを検出するNyARSingleDetectMarkerインスタンスを作ります。\r
* @param i_param\r
//評価器を作る。\r
this.match_patt=new NyARMatchPatt_Color_WITHOUT_PCA(); \r
}\r
+// INyARRasterReaderFactory _reader_factory=new NyARRasterReaderFactory_RgbTotal();\r
+ INyARRasterReaderFactory _reader_factory=new NyARRasterReaderFactory_RgbMul();\r
/**\r
* i_imageにマーカー検出処理を実行し、結果を記録します。\r
* @param i_image\r
* マーカーが検出できたかを真偽値で返します。\r
* @throws NyARException\r
*/\r
- public boolean detectMarkerLite(INyARRaster i_image,int i_thresh) throws NyARException\r
+ public boolean detectMarkerLite(NyARRaster i_image,int i_thresh) throws NyARException\r
{\r
detected_square=null;\r
NyARSquareList l_square_list=this.square_list;\r
//スクエアコードを探す\r
- square.detectSquare(i_image, i_thresh,l_square_list);\r
+ square.detectSquare(this._reader_factory.createReader(i_image), i_thresh,l_square_list);\r
\r
int number_of_square=l_square_list.getCount();\r
//コードは見つかった?\r
--- /dev/null
+/**
+ * VFM+ARToolkitテストプログラム
+ * カメラから取り込んだデータからマーカーを検出して、一致度と変換行列を表示します。
+ * (c)2008 A虎@nyatla.jp
+ * airmail(at)ebony.plala.or.jp
+ * http://nyatla.jp/
+ */
+package jp.nyatla.nyartoolkit.dev;
+
+import javax.media.*;
+
+import javax.media.util.BufferToImage;
+import javax.media.format.*;
+
+import jp.nyatla.nyartoolkit.NyARException;
+import jp.nyatla.nyartoolkit.jmf.utils.*;
+import jp.nyatla.nyartoolkit.core.raster.threshold.*;
+
+import java.awt.*;
+
+
+import jp.nyatla.nyartoolkit.core.labeling.*;
+import jp.nyatla.nyartoolkit.core.labeling.processor.*;
+import jp.nyatla.nyartoolkit.core.raster.operator.*;
+import jp.nyatla.nyartoolkit.core.raster.*;
+import jp.nyatla.nyartoolkit.core.raster.filter.*;
+import jp.nyatla.util.j2se.LabelingBufferdImage;
+
+public class LabelingCamera extends Frame implements JmfCaptureListener {
+ private JmfNyARRaster_RGB _raster;
+ private JmfCameraCapture capture;
+
+
+ public LabelingCamera() throws NyARException, NyARException
+ {
+ setBounds(0, 0, 640 + 64, 720 + 64);
+ // キャプチャの準備
+ capture = new JmfCameraCapture(320, 240, 30f,
+ JmfCameraCapture.PIXEL_FORMAT_RGB);
+ capture.setCaptureListener(this);
+
+ // キャプチャイメージ用のラスタを準備
+ this._raster = new JmfNyARRaster_RGB(320, 240);
+ }
+
+ private NyARRaster _workraster=new NyARRaster_Int2d(320,240);
+ private NyARRaster _workraster2=new NyARRaster_Int2d(320,240);
+ private NyARLabelingImage _limage=new NyARLabelingImage(320, 240);
+ private LabelingBufferdImage _bimg=new LabelingBufferdImage(320, 240,LabelingBufferdImage.COLOR_256_MONO);
+ private LabelingBufferdImage _bimg2=new LabelingBufferdImage(320, 240,LabelingBufferdImage.COLOR_256_MONO);
+ private INyARRasterReaderFactory _factory2=new NyARRasterReaderFactory_Test();
+ private INyARRasterReaderFactory _factory1=new NyARRasterReaderFactory_RgbTotal();
+
+ public void onUpdateBuffer(Buffer i_buffer)
+ {
+ try {
+ // キャプチャしたバッファをラスタにセット
+ _raster.setBuffer(i_buffer);
+ INyARRasterFilter filter;
+
+ Graphics g = getGraphics();
+ //キャプチャ画像
+ BufferToImage b2i = new BufferToImage((VideoFormat) i_buffer.getFormat());
+ Image img = b2i.createImage(i_buffer);
+ this.getGraphics().drawImage(img, 32, 32, this);
+
+ //画像1
+ filter=new NyARRasterFilter_RgbSum();
+ filter.doFilter(_raster, _workraster);
+ this._bimg2.setImage(this._workraster);
+ this.getGraphics().drawImage(this._bimg2, 32+320, 32,320+320+32,240+32,0,240,320,0, this);
+
+ //画像2
+ NyARRasterThresholdDetector_PTile threshold=new NyARRasterThresholdDetector_PTile(50);
+ threshold.analyzeRaster(_workraster);
+ filter=new NyARRasterFilter_Threshold(128);
+ filter.doFilter(_workraster, _workraster2);
+ this._bimg.setImage(this._workraster2);
+ this.getGraphics().drawImage(this._bimg, 32, 32+240,320+32,240+32+240,0,240,320,0, this);
+ //画像3
+ //threshold.debugDrawHistgramMap(_workraster, _workraster2);
+ //this._bimg2.setImage(this._workraster2);
+ //this.getGraphics().drawImage(this._bimg2, 32+320, 32+240,320+32+320,240+32+240,0,240,320,0, this);
+
+ //画像4
+ NyARRasterThresholdDetector_SlidePTile threshold2=new NyARRasterThresholdDetector_SlidePTile(20);
+ threshold2.analyzeRaster(_workraster);
+ filter=new NyARRasterFilter_Threshold(threshold2.getThreshold());
+ filter.doFilter(_workraster, _workraster2);
+ this._bimg.setImage(this._workraster2);
+ this.getGraphics().drawImage(this._bimg, 32, 32+480,320+32,480+32+240,0,240,320,0, this);
+ //画像5
+ threshold2.debugDrawHistgramMap(_workraster, _workraster2);
+ this._bimg2.setImage(this._workraster2);
+ this.getGraphics().drawImage(this._bimg2, 32+320, 32+480,320+32+320,480+32+240,0,240,320,0, this);
+
+
+ // this.getGraphics().drawImage(this._bimg, 32, 32, this);
+
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+ private INyARLabeling labelingFactory(int i_idx)
+ {
+ switch(i_idx){
+ case 0:{ARToolKitLabeling l=new ARToolKitLabeling();l.setThresh(4);return l;}
+ case 1:{return new NyLineLabeling();}
+ }
+ return null;
+
+
+ }
+
+ private void startCapture()
+ {
+ try {
+ capture.start();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void main(String[] args) {
+ try {
+ LabelingCamera mainwin = new LabelingCamera();
+ mainwin.setVisible(true);
+ mainwin.startCapture();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+}
--- /dev/null
+package jp.nyatla.nyartoolkit.dev;\r
+\r
+import java.awt.Frame;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+\r
+import jp.nyatla.nyartoolkit.core.raster.*;\r
+import jp.nyatla.nyartoolkit.core.raster.operator.*;\r
+import jp.nyatla.nyartoolkit.core.labeling.processor.*;\r
+import jp.nyatla.nyartoolkit.core.labeling.*;\r
+import jp.nyatla.util.j2se.*;\r
+\r
+public class LabelingTest extends Frame\r
+{\r
+ private final String data_file ="../Data/320x240ABGR.raw";\r
+ public void drawImage() throws Exception\r
+ {\r
+ File f=new File(data_file);\r
+ FileInputStream fs=new FileInputStream(data_file);\r
+ byte[] buf=new byte[(int)f.length()];\r
+ fs.read(buf);\r
+ NyARRaster_BGRA ra=NyARRaster_BGRA.wrap(buf, 320, 240);\r
+ NyARLabelingImage limage=new NyARLabelingImage(320,240);\r
+ INyARLabeling labeling=new ARToolKitLabeling();\r
+// INyARLabeling labeling=new NyLineLabeling();\r
+ INyARRasterReaderFactory rf=new NyARRasterReaderFactory_RgbTotal();\r
+ labeling.attachDestination(limage);\r
+ labeling.labeling(rf.createReader(ra));\r
+ LabelingBufferdImage img=new LabelingBufferdImage(320,240,LabelingBufferdImage.COLOR_125_COLOR);\r
+ img.setLabelingImage(limage);\r
+ this.getGraphics().drawImage(img, 32,32,this);\r
+ }\r
+ public static void main(String[] args)\r
+ {\r
+ try{\r
+ LabelingTest app=new LabelingTest();\r
+ app.setVisible(true);\r
+ app.setBounds(0,0,640,480);\r
+ app.drawImage();\r
+ }catch(Exception e){\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+}\r