1 package jp.nyatla.nyartoolkit.rpf.sampler.lrlabel;
\r
3 import jp.nyatla.nyartoolkit.*;
\r
4 import jp.nyatla.nyartoolkit.core.labeling.rlelabeling.*;
\r
5 import jp.nyatla.nyartoolkit.core.raster.*;
\r
6 import jp.nyatla.nyartoolkit.rpf.tracker.nyartk.*;
\r
13 * 画像データのサンプラです。画像データから、輪郭線抽出のヒントを計算して、出力コンテナに格納します。
\r
14 * 入力-LowResolutionLabelingSamplerIn
\r
15 * 出力-LowResolutionLabelingSamplerOut
\r
18 * このクラスは、{@link NyARTracker}が使う、ラべリングクラスです。
\r
19 * 1/2^nに縮尺した画像をラべリングして、元画像の解像度でラベルデータを返します。
\r
20 * このクラスに入力されるデータは縮尺されたエッジ画像のため、その為のパラメータ調整がしてあります。
\r
22 public class LowResolutionLabelingSampler
\r
25 * 1/n画像のラべリングをするクラス。
\r
27 private class Main_Labeling extends NyARLabeling_Rle
\r
30 public int current_th;
\r
31 public LowResolutionLabelingSamplerOut current_output;
\r
32 public Main_Labeling(int i_width,int i_height,int i_pix_base) throws NyARException
\r
34 super(i_width,i_height);
\r
35 this._pix=i_pix_base;
\r
40 protected void onLabelFound(NyARRleLabelFragmentInfo iRefLabel)throws NyARException
\r
43 int w=iRefLabel.clip_r-iRefLabel.clip_l;
\r
44 int h=iRefLabel.clip_b-iRefLabel.clip_t;
\r
45 //1*1(1bitPixelの5*5)以下の場合は、検出不能
\r
46 //未実装部分:2*2(1bitPixelの8*8)以下の場合は、解像度1で再検出
\r
47 //未実装部分:3*3,4*4(1bitPixelの12*12,16*16)以下の場合は、解像度2で再検出
\r
52 LowResolutionLabelingSamplerOut.Item item=current_output.prePush();
\r
57 item.entry_pos.x=iRefLabel.entry_x;
\r
58 item.entry_pos.y=iRefLabel.clip_t;
\r
59 item.base_area.x=iRefLabel.clip_l*pix;
\r
60 item.base_area.y=iRefLabel.clip_t*pix;
\r
61 item.base_area.w=w*pix;
\r
62 item.base_area.h=h*pix;
\r
63 item.base_area_center.x=item.base_area.x+item.base_area.w/2;
\r
64 item.base_area_center.y=item.base_area.y+item.base_area.h/2;
\r
65 item.base_area_sq_diagonal=(w*w+h*h)*(pix*pix);
\r
66 item.lebeling_th=this.current_th;
\r
70 private Main_Labeling _main_labeling;
\r
73 * 入力画像解像度と、サンプリングパラメータを指定して、インスタンスを初期化します。
\r
80 * 例えば1/2画像(面積1/4)のサンプリング結果を元画像サイズに戻すときは、2を指定する。
\r
81 * @throws NyARException
\r
83 public LowResolutionLabelingSampler(int i_width,int i_height,int i_pix_size) throws NyARException
\r
85 this._main_labeling=new Main_Labeling(i_width/i_pix_size,i_height/i_pix_size,i_pix_size);
\r
88 * この関数は、入力ラスタをサンプリングして、o_outにラベル情報を出力します。
\r
95 * オブジェクトのデータは、初期化されます。
\r
96 * @throws NyARException
\r
98 public void sampling(NyARGrayscaleRaster i_in,int i_th,LowResolutionLabelingSamplerOut o_out) throws NyARException
\r
101 Main_Labeling lb=this._main_labeling;
\r
102 lb.current_output=o_out;
\r
103 lb.current_th=i_th;
\r
107 o_out.initializeParams();
\r
109 lb.setAreaRange(10000,3);
\r
110 lb.labeling(i_in,i_th);
\r