}\r
public int createHistgramImpl(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram)\r
{\r
+ assert (i_reader.isEqualBufferType(INyARBufferReader.BUFFERFORMAT_INT1D_GLAY_8));\r
+\r
int sum=0;\r
final int[] input=(int[]) i_reader.getBuffer();\r
for (int y = i_size.h-1; y >=0 ; y-=this._v_interval){\r
return sum;\r
}\r
}\r
+ /**\r
+ * RGB24bitのヒストグラム計算クラス\r
+ *\r
+ */\r
final class CreateHistgramImpl_BYTE1D_RGB_24 implements ICreateHistgramImpl\r
{\r
private int _v_interval;\r
}\r
public int createHistgramImpl(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram)\r
{\r
+ assert (\r
+ i_reader.isEqualBufferType(INyARBufferReader.BUFFERFORMAT_BYTE1D_B8G8R8_24)||\r
+ i_reader.isEqualBufferType(INyARBufferReader.BUFFERFORMAT_BYTE1D_R8G8B8_24));\r
+ \r
final byte[] input=(byte[]) i_reader.getBuffer();\r
final int pix_count=i_size.w;\r
final int pix_mod_part=pix_count-(pix_count%8);\r
return sum; \r
}\r
}\r
+ /**\r
+ * RGBX32bitのヒストグラム計算クラス\r
+ *\r
+ */ \r
+ final class CreateHistgramImpl_BYTE1D_B8G8R8X8_32 implements ICreateHistgramImpl\r
+ {\r
+ private int _v_interval;\r
+ public CreateHistgramImpl_BYTE1D_B8G8R8X8_32(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
+ assert(i_reader.isEqualBufferType(INyARBufferReader.BUFFERFORMAT_BYTE1D_B8G8R8X8_32));\r
+ byte[] input = (byte[])i_reader.getBuffer();\r
+ int pix_count = i_size.w;\r
+ 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
+ {\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
+ {\r
+ v = ((input[pt + 0] & 0xff) + (input[pt + 1] & 0xff) + (input[pt + 2] & 0xff)) / 3;\r
+ o_histgram[v]++;\r
+ pt += 4;\r
+ }\r
+ //タイリング\r
+ for (; x >= 0; x -= 8)\r
+ {\r
+ v = ((input[pt + 0] & 0xff) + (input[pt + 1] & 0xff) + (input[pt + 2] & 0xff)) / 3;\r
+ o_histgram[v]++;\r
+ v = ((input[pt + 4] & 0xff) + (input[pt + 5] & 0xff) + (input[pt + 6] & 0xff)) / 3;\r
+ o_histgram[v]++;\r
+ v = ((input[pt + 8] & 0xff) + (input[pt + 9] & 0xff) + (input[pt + 10] & 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 + 16] & 0xff) + (input[pt + 17] & 0xff) + (input[pt + 18] & 0xff)) / 3;\r
+ o_histgram[v]++;\r
+ v = ((input[pt + 20] & 0xff) + (input[pt + 21] & 0xff) + (input[pt + 22] & 0xff)) / 3;\r
+ o_histgram[v]++;\r
+ v = ((input[pt + 24] & 0xff) + (input[pt + 25] & 0xff) + (input[pt + 26] & 0xff)) / 3;\r
+ o_histgram[v]++;\r
+ v = ((input[pt + 28] & 0xff) + (input[pt + 29] & 0xff) + (input[pt + 30] & 0xff)) / 3;\r
+ o_histgram[v]++;\r
+ pt += 4 * 8;\r
+ }\r
+ }\r
+ return sum;\r
+ }\r
+ } \r
private int _persentage;\r
private int _threshold;\r
private ICreateHistgramImpl _histgram;\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(i_vertical_interval);\r
- break;\r
- case INyARBufferReader.BUFFERFORMAT_INT1D_GLAY_8:\r
- this._histgram=new CreateHistgramImpl_INT1D_GLAY_8(i_vertical_interval);\r
- break;\r
- default:\r
- throw new NyARException();\r
- }\r
+ switch (i_raster_format)\r
+ {\r
+ case INyARBufferReader.BUFFERFORMAT_BYTE1D_B8G8R8_24:\r
+ case INyARBufferReader.BUFFERFORMAT_BYTE1D_R8G8B8_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_INT1D_GLAY_8(i_vertical_interval);\r
+ break;\r
+ case INyARBufferReader.BUFFERFORMAT_BYTE1D_B8G8R8X8_32:\r
+ this._histgram = new CreateHistgramImpl_BYTE1D_B8G8R8X8_32(i_vertical_interval);\r
+ break;\r
+ default:\r
+ throw new NyARException();\r
+ }\r
}\r
public void setVerticalInterval(int i_step)\r
{\r
private int[] _histgram_buf=new int[256];\r
public void analyzeRaster(INyARRaster i_input) throws NyARException\r
{\r
- final INyARBufferReader buffer_reader=i_input.getBufferReader(); \r
- assert (buffer_reader.isEqualBufferType(INyARBufferReader.BUFFERFORMAT_INT1D_GLAY_8));\r
-\r
final int[] histgram = this._histgram_buf;\r
final NyARIntSize size=i_input.getSize();\r
\r
private INyIdMarkerData _data_temp;\r
private INyIdMarkerData _data_current;\r
\r
- private int _current_threshold;\r
+ private int _current_threshold=110;\r
// [AR]検出結果の保存用\r
private NyARBinRaster _bin_raster;\r
\r
NyIdMarkerParam param=this._marker_param;\r
NyIdMarkerPattern patt_data =this._marker_data;\r
int number_of_square = i_stack.getLength();\r
- int square_index = 0;\r
+ NyARSquare current_square=null;\r
INyIdMarkerData marker_id=null;\r
for (int i = 0; i < number_of_square; i++) {\r
// 評価基準になるパターンをイメージから切り出す\r
- if (!this._id_pickup.pickFromRaster(i_raster, (NyARSquare) i_stack.getItem(i), patt_data, param)) {\r
+ current_square=(NyARSquare) i_stack.getItem(i);\r
+ if (!this._id_pickup.pickFromRaster(i_raster,current_square, patt_data, param)) {\r
continue;\r
}\r
//エンコード\r
}\r
\r
// 認識状態を更新\r
- final boolean is_id_found=updateStatus((NyARSquare) this._square_list.getItem(square_index),marker_id, param);\r
+ final boolean is_id_found=updateStatus(current_square,marker_id, param);\r
\r
//閾値フィードバック(detectExistMarkerにもあるよ)\r
if(is_id_found){\r
NyIdMarkerParam param=this._marker_param;\r
NyIdMarkerPattern patt_data =this._marker_data;\r
int number_of_square = i_stack.getLength();\r
- int square_index = 0;\r
+ NyARSquare current_square=null;\r
INyIdMarkerData marker_id=null;\r
for (int i = 0; i < number_of_square; i++){\r
//idマーカを認識\r
- if (!this._id_pickup.pickFromRaster(i_raster, (NyARSquare) i_stack.getItem(i), patt_data, param)) {\r
+ current_square=(NyARSquare) i_stack.getItem(i);\r
+ if (!this._id_pickup.pickFromRaster(i_raster, current_square, patt_data, param)) {\r
continue;\r
}\r
if(!this._encoder.encode(patt_data,this._data_temp)){\r
break;\r
}\r
// 認識状態を更新\r
- final boolean is_id_found=updateStatus((NyARSquare) this._square_list.getItem(square_index),marker_id,param);\r
+ final boolean is_id_found=updateStatus(current_square,marker_id,param);\r
\r
//閾値フィードバック(detectExistMarkerにもあるよ)\r
if(is_id_found){\r