ARToolKit Java class library NyARToolkit.\r
Copyright (C)2008 R.Iizuka\r
\r
-version 2.2.0\r
+version 2.3.0\r
\r
http://nyatla.jp/nyartoolkit/\r
airmail(at)ebony.plala.or.jp\r
+wm(at)nyatla.jp\r
--------------------------------------------------\r
\r
\r
\r
\r
-・NyARToolkit/2.2\r
+・NyARToolkit/2.3\r
\r
NyARToolkitは、Pure Javaで実装したARToolKitクラスライブラリです。\r
\r
ARToolKit 2.72.1をベースに構築されています。\r
\r
-NyARToolkit/2.0系はNyARToolkit/1.xと比較して、処理速度と可読性、\r
-モジュールの分離性が向上しています。\r
-\r
-\r
-\r
J2SEでのみ動作を確認しました。\r
J2MEやMIDP2.0にはそのうち対応します。\r
\r
\r
-取り扱えるマーカー個数の最大値が可変です。\r
\r
+ -Idマーカシステム(NyId)が利用できます。(Version/2.3.0より)\r
+\r
\r
\r
\r
JOGL/JMFを使ったサンプルプログラムがあります。\r
\r
-jp.nyatla.nyartoolkit.jogl.sample.JavaSimpleLite\r
- 単一のマーカーを認識するARToolkitのsimpleLite相当のサンプルです。\r
+ 単一のARToolKit用マーカーを認識するARToolkitのsimpleLite相当のサンプルです。\r
-jp.nyatla.nyartoolkit.jogl.sample.JavaSimpleLite2\r
- 複数のマーカーを認識するサンプルです。~100個程度のマーカーを同時に\r
- 認識します。\r
+ 複数のARToolKit用マーカーを認識するサンプルです。1~100個程度のマーカーを\r
+ 同時に認識します。\r
+ -jp.nyatla.nyartoolkit.jogl.sample.SingleNyIdMarker\r
+ 単一のNyIdマーカを認識するためのサンプルです。アプリケーションフレームワーク\r
+ SingleNyIdMarkerProcesserのリファレンス実装です。\r
\r
\r
NyARToolkit.sample.java3d\r
JOGL/JMFを使ったサンプルプログラムです。\r
\r
-jp.nyatla.nyartoolkit.java3d.sample\r
- simpleLiteをJava3Dで動かすサンプルがあります。\r
+ simpleLiteをJava3Dで動かすサンプルがあります。\r
\r
NyARToolkit.sample.jmf\r
JMFを使ったサンプルプログラムです。\r
\r
-jp.nyatla..nyartoolkit.jmf.sample\r
- JMFでキャプチャした画像をNyARToolkitで処理するサンプルプログラムです。\r
+ JMFでキャプチャした画像をNyARToolkitで処理するサンプルプログラムです。\r
\r
\r
NyARToolkit.sample.qt\r
Quicktime for Javaを使ったサンプルプログラムです。\r
\r
-jp.nyatla.nyartoolkit.qt.sample\r
- QuickTimeでキャプチャした画像をNyARToolkitで処理するサンプルプログラムです。\r
+ QuickTimeでキャプチャした画像をNyARToolkitで処理するサンプルプログラムです。\r
\r
\r
\r
\r
\r
・ライセンス\r
-GPLv2以降です。詳しくはLICENCE.txtをみてください。\r
-ソースコード毎のライセンスは、各ソースファイルを参照してください。\r
+\r
+NyARToolkitは、商用ライセンスとGPLv2以降のデュアルライセンスを採用しています。\r
+\r
+GPLについては、LICENCE.txtをお読みください。\r
+\r
+商用ライセンスについては、ARToolWorks社に管理を委託しておりますので、\r
+下記URLを参考に、ARToolWorks社へお問い合わせください。\r
+http://nyatla.jp/nyartoolkit/wiki/index.php?Licence\r
+\r
+\r
+ライセンスに関する日本語でのお問い合わせについては、下記URLの連絡先にて受け付けています。\r
+http://nyatla.jp/nyartoolkit/wiki/index.php?PressRelease%2F20090407%20forward%20order%20email%20service\r
+\r
+\r
+ソースコード毎のライセンスについては、ソースコード先頭の署名をご確認ください。\r
\r
\r
\r
public class NyARRasterThresholdAnalyzer_SlidePTile implements INyARRasterThresholdAnalyzer\r
{\r
interface ICreateHistgramImpl{\r
- public void createHistgramImpl(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram);\r
+ public int createHistgramImpl(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram);\r
}\r
/**\r
* Glayscale(MAX256)のヒストグラム計算クラス\r
*/\r
final class CreateHistgramImpl_INT1D_GLAY_8 implements ICreateHistgramImpl\r
{\r
- public void createHistgramImpl(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram)\r
+ public int _v_interval;\r
+ public CreateHistgramImpl_INT1D_GLAY_8(int i_v_interval)\r
{\r
+ this._v_interval=i_v_interval;\r
+ return;\r
+ }\r
+ public int createHistgramImpl(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram)\r
+ {\r
+ int sum=0;\r
final int[] input=(int[]) i_reader.getBuffer();\r
- int pt = 0;\r
- for (int y = i_size.h-1; y >=0 ; y--) {\r
+ for (int y = i_size.h-1; y >=0 ; y-=this._v_interval){\r
+ sum+=i_size.w;\r
+ int pt=y*i_size.w;\r
for (int x = i_size.w-1; x >=0; x--) {\r
o_histgram[input[pt]]++;\r
pt++;\r
}\r
}\r
- return;\r
+ return sum;\r
}\r
}\r
final class CreateHistgramImpl_BYTE1D_RGB_24 implements ICreateHistgramImpl\r
{\r
- public void createHistgramImpl(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram)\r
+ private int _v_interval;\r
+ public CreateHistgramImpl_BYTE1D_RGB_24(int i_v_interval)\r
+ {\r
+ this._v_interval=i_v_interval;\r
+ return;\r
+ }\r
+ public int createHistgramImpl(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram)\r
{\r
final byte[] input=(byte[]) i_reader.getBuffer();\r
- int pt = 0;\r
- for (int y = i_size.h-1; y >=0 ; y--) {\r
- for (int x = i_size.w-1; x >=0; x--) {\r
- final int v=((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3;\r
+ final int pix_count=i_size.w;\r
+ final int pix_mod_part=pix_count-(pix_count%8);\r
+ int sum=0;\r
+ for (int y = i_size.h-1; y >=0 ; y-=this._v_interval) {\r
+ sum+=i_size.w;\r
+ int pt=y*i_size.w*3;\r
+ int x,v;\r
+ for (x = pix_count-1; x >=pix_mod_part; x--) {\r
+ v=((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3;\r
o_histgram[v]++;\r
pt+=3;\r
}\r
+ //タイリング\r
+ for (;x>=0;x-=8){\r
+ v=((input[pt+ 0]& 0xff)+(input[pt+ 1]& 0xff)+(input[pt+ 2]& 0xff))/3;\r
+ o_histgram[v]++;\r
+ v=((input[pt+ 3]& 0xff)+(input[pt+ 4]& 0xff)+(input[pt+ 5]& 0xff))/3;\r
+ o_histgram[v]++;\r
+ v=((input[pt+ 6]& 0xff)+(input[pt+ 7]& 0xff)+(input[pt+ 8]& 0xff))/3;\r
+ o_histgram[v]++;\r
+ v=((input[pt+ 9]& 0xff)+(input[pt+10]& 0xff)+(input[pt+11]& 0xff))/3;\r
+ o_histgram[v]++;\r
+ v=((input[pt+12]& 0xff)+(input[pt+13]& 0xff)+(input[pt+14]& 0xff))/3;\r
+ o_histgram[v]++;\r
+ v=((input[pt+15]& 0xff)+(input[pt+16]& 0xff)+(input[pt+17]& 0xff))/3;\r
+ o_histgram[v]++;\r
+ v=((input[pt+18]& 0xff)+(input[pt+19]& 0xff)+(input[pt+20]& 0xff))/3;\r
+ o_histgram[v]++;\r
+ v=((input[pt+21]& 0xff)+(input[pt+22]& 0xff)+(input[pt+23]& 0xff))/3;\r
+ o_histgram[v]++;\r
+ pt+=3*8;\r
+ }\r
}\r
- return; \r
+ return sum; \r
}\r
}\r
private int _persentage;\r
* 0<=50であること。白/黒マーカーの場合は10~20を推奨 正の場合、黒点を基準にします。 負の場合、白点を基準にします。\r
* (CMOSカメラの場合、基準点は白点の方が良い)\r
*/\r
- public NyARRasterThresholdAnalyzer_SlidePTile(int i_persentage,int i_raster_format) throws NyARException\r
+ public NyARRasterThresholdAnalyzer_SlidePTile(int i_persentage,int i_raster_format,int i_vertical_interval) throws NyARException\r
{\r
assert (0 <= i_persentage && i_persentage <= 50);\r
this._persentage = i_persentage;\r
switch(i_raster_format){\r
case INyARBufferReader.BUFFERFORMAT_BYTE1D_B8G8R8_24:\r
case INyARBufferReader.BUFFERFORMAT_BYTE1D_R8G8B8_24:\r
- this._histgram=new CreateHistgramImpl_BYTE1D_RGB_24();\r
+ this._histgram=new CreateHistgramImpl_BYTE1D_RGB_24(i_vertical_interval);\r
break;\r
case INyARBufferReader.BUFFERFORMAT_INT1D_GLAY_8:\r
- this._histgram=new CreateHistgramImpl_BYTE1D_RGB_24();\r
+ this._histgram=new CreateHistgramImpl_INT1D_GLAY_8(i_vertical_interval);\r
break;\r
default:\r
throw new NyARException();\r
for (int i = 0; i < 256; i++) {\r
o_histgram[i] = 0;\r
}\r
- this._histgram.createHistgramImpl(i_reader, i_size, o_histgram);\r
+ int sum_of_pixel=this._histgram.createHistgramImpl(i_reader, i_size, o_histgram);\r
\r
// 閾値ピクセル数確定\r
- final int th_pixcels = i_size.w * i_size.h * this._persentage / 100;\r
+ final int th_pixcels = sum_of_pixel * this._persentage / 100;\r
int th_wk;\r
int th_w, th_b;\r
\r