\r
class RleElement\r
{\r
- short l;\r
- short r;\r
+ int l;\r
+ int r;\r
short id;\r
public static RleElement[] createArray(int i_length)\r
{\r
*/\r
private int toRel(int[] i_bin_buf, int i_st, int i_len, RleElement[] i_out)\r
{\r
- short current = 0;\r
- short r = -1;\r
+ int current = 0;\r
+ int r = -1;\r
// 行確定開始\r
int x = i_st;\r
final int right_edge = i_st + i_len - 1;\r
continue;\r
}\r
// 暗点発見→暗点長を調べる\r
- r = (short) (x - i_st);\r
+ r = (x - i_st);\r
i_out[current].l = r;\r
r++;// 暗点+1\r
x++;\r
} else {\r
// 暗点→カウント中でなければl1で追加\r
if (r >= 0) {\r
- i_out[current].r = (short) (r + 1);\r
+ i_out[current].r = (r + 1);\r
} else {\r
// 最後の1点の場合\r
- i_out[current].l = (short) (i_st + i_len - 1);\r
- i_out[current].r = (short) (i_st + i_len);\r
+ i_out[current].l = (i_st + i_len - 1);\r
+ i_out[current].r = (i_st + i_len);\r
}\r
current++;\r
}\r
\r
private void addFragment(RleElement i_rel_img, short i_nof, int i_row_index, int i_rel_index,RleLabelFragmentInfoStack o_stack) throws NyARException\r
{\r
+ int l=i_rel_img.l;\r
+ final int len=i_rel_img.r - l;\r
i_rel_img.id = i_nof;// REL毎の固有ID\r
RleLabelFragmentInfoStack.RleLabelFragmentInfo v = o_stack.prePush();\r
v.id = i_nof;\r
- v.entry_x = i_rel_img.l;\r
- v.entry_y = (short) i_row_index;\r
- v.area = i_rel_img.r - i_rel_img.l;\r
+ v.entry_x = l;\r
+ v.area =len;\r
+ v.clip_l=l;\r
+ v.clip_r=i_rel_img.r;\r
+ v.clip_t=i_row_index;\r
+ v.clip_b=i_row_index;\r
+ v.pos_x+=len*(2*l+(len-1)*1);\r
+ v.pos_y+=i_row_index*len;\r
+\r
+ \r
return;\r
}\r
\r
final RleLabelFragmentInfoStack.RleLabelFragmentInfo id_ptr = f_array[id];\r
prev_ptr = f_array[rle_prev[index_prev].id];\r
rle_current[i].id = id;\r
- id_ptr.area += (rle_current[i].r - rle_current[i].l);\r
- // エントリポイントの情報をコピー\r
+ //\r
+ final int l= rle_current[i].l;\r
+ final int r= rle_current[i].r;\r
+ final int len=rle_current[i].r - rle_current[i].l;\r
+ id_ptr.area += len;\r
id_ptr.entry_x = prev_ptr.entry_x;\r
- id_ptr.entry_y = prev_ptr.entry_y;\r
+ id_ptr.clip_l=l<prev_ptr.clip_l?l:prev_ptr.clip_l;\r
+ id_ptr.clip_r=r>prev_ptr.clip_r?r:prev_ptr.clip_r;\r
+ //id_ptr.clip_tは変更無し。\r
+ id_ptr.clip_b=y;\r
+ id_ptr.pos_x+=len*(2*l+(len-1)*1);\r
+ id_ptr.pos_y+=y*len;\r
// 多重リンクの確認\r
\r
index_prev++;\r
prev_ptr.area = 0;\r
// 結合対象->現在のidをインデクスにセット\r
prev_ptr.id = id;\r
- // エントリポイントを訂正\r
- if (id_ptr.entry_y > prev_ptr.entry_y) {\r
- // 現在のエントリポイントの方が下にある。(何もしない)\r
- }\r
- if (id_ptr.entry_y < prev_ptr.entry_y) {\r
- // 現在のエントリポイントの方が上にある。(エントリポイントの交換)\r
- prev_ptr.entry_y = id_ptr.entry_y;\r
- prev_ptr.entry_x = id_ptr.entry_x;\r
+ //tとentry_xの決定\r
+ if (id_ptr.clip_t > prev_ptr.clip_t) {\r
+ // 現在の方が下にある。\r
+ id_ptr.clip_t = prev_ptr.clip_t;\r
+ id_ptr.entry_x = prev_ptr.entry_x;\r
+ }else if (id_ptr.clip_t < prev_ptr.clip_t) {\r
+ // 現在の方が上にある。なにもしない。\r
} else {\r
// 水平方向で小さい方がエントリポイント。\r
- if (id_ptr.entry_x < prev_ptr.entry_x) {\r
- prev_ptr.entry_y = id_ptr.entry_y;\r
- prev_ptr.entry_x = id_ptr.entry_x;\r
+ if (id_ptr.entry_x > prev_ptr.entry_x) {\r
+ id_ptr.entry_x = prev_ptr.entry_x;\r
}\r
+ } \r
+ //bの決定(現状のまま)\r
+ //lの決定\r
+ if (id_ptr.clip_l > prev_ptr.clip_l) {\r
+ id_ptr.clip_l=prev_ptr.clip_l;\r
}\r
+ //rの決定\r
+ if (id_ptr.clip_r < prev_ptr.clip_r) {\r
+ id_ptr.clip_r=prev_ptr.clip_r;\r
+ }\r
+ id_ptr.pos_x+=prev_ptr.pos_x;\r
+ id_ptr.pos_y+=prev_ptr.pos_y; \r
+ \r
+\r
}\r
index_prev++;\r
}\r
package jp.nyatla.nyartoolkit.core.squaredetect;\r
\r
+\r
import jp.nyatla.nyartoolkit.NyARException;\r
import jp.nyatla.nyartoolkit.core.INyARSquareDetector;\r
import jp.nyatla.nyartoolkit.core.NyARSquare;\r
public final void detectMarker(NyARBinRaster i_raster, NyARSquareStack o_square_stack) throws NyARException\r
{\r
final RleLabelFragmentInfoStack flagment=this._stack;\r
- // 初期化\r
\r
// マーカーホルダをリセット\r
o_square_stack.clear();\r
// continue;\r
// }\r
// 輪郭を取得\r
- coord_num = _cpickup.getContour(i_raster,label_pt.entry_x,label_pt.entry_y, coord_max, xcoord, ycoord);\r
+ coord_num = _cpickup.getContour(i_raster,label_pt.entry_x,label_pt.clip_t, coord_max, xcoord, ycoord);\r
if (coord_num == coord_max) {\r
// 輪郭が大きすぎる。\r
continue;\r