/** * この関数は、インスタンスを初期化します。 * 継承先のクラスから呼び出してください。 * @param i_param * カメラパラメータオブジェクト。このサイズは、{@link #detectMarker}に入力する画像と同じサイズである必要があります。 * @param i_encoder * IDマーカの値エンコーダを指定します。 * @param i_marker_width * マーカの物理縦横サイズをmm単位で指定します。 * @ */ protected void initInstance(NyARParam i_param, INyIdMarkerDataEncoder i_encoder, double i_marker_width) { //初期化済? Debug.Assert(this._initialized == false); NyARIntSize scr_size = i_param.getScreenSize(); // 解析オブジェクトを作る this._square_detect = new RleDetector( i_param, i_encoder, new NyIdMarkerPickup()); this._transmat = new NyARTransMat(i_param); // 2値画像バッファを作る this._gs_raster = new NyARGrayscaleRaster(scr_size.w, scr_size.h); this._histmaker = (INyARHistogramFromRaster)this._gs_raster.createInterface(typeof(INyARHistogramFromRaster)); //ワーク用のデータオブジェクトを2個作る this._data_current = i_encoder.createDataInstance(); this._threshold_detect = new NyARHistogramAnalyzer_SlidePTile(15); this._initialized = true; this._is_active = false; this._offset = new NyARRectOffset(); this._offset.setSquare(i_marker_width); return; }
/** * この関数は、画像を処理して、適切なマーカ検出イベントハンドラを呼び出します。 * イベントハンドラの呼び出しは、この関数を呼び出したスレッドが、この関数が終了するまでに行います。 * @param i_raster * 検出処理をする画像を指定します。 * @ */ public void detectMarker(INyARRgbRaster i_raster) { // サイズチェック Debug.Assert(this._gs_raster.getSize().isEqualSize(i_raster.getSize().w, i_raster.getSize().h)); if (this._last_input_raster != i_raster) { this._histmaker = (INyARHistogramFromRaster)this._gs_raster.createInterface(typeof(INyARHistogramFromRaster)); this._togs_filter = (INyARRgb2GsFilter)i_raster.createInterface(typeof(INyARRgb2GsFilter)); this._last_input_raster = i_raster; } //GSイメージへの変換とヒストグラムの生成 this._togs_filter.convert(this._gs_raster); this._histmaker.createHistogram(4, this._hist); // スクエアコードを探す this._detectmarker.init(i_raster, this._current_arcode_index); this._detectmarker.detectMarker(this._gs_raster, this._thdetect.getThreshold(this._hist), this._detectmarker); // 認識状態を更新 this.updateStatus(this._detectmarker.square, this._detectmarker.code_index); return; }
/** * この関数は、画像を処理して、適切なマーカ検出イベントハンドラを呼び出します。 * イベントハンドラの呼び出しは、この関数を呼び出したスレッドが、この関数が終了するまでに行います。 * @param i_raster * 検出処理をする画像を指定します。 * @ */ public void detectMarker(INyARRgbRaster i_raster) { // サイズチェック Debug.Assert(this._gs_raster.getSize().isEqualSize(i_raster.getSize().w, i_raster.getSize().h)); if (this._last_input_raster != i_raster) { this._histmaker = (INyARHistogramFromRaster)this._gs_raster.createInterface(typeof(INyARHistogramFromRaster)); this._togs_filter = (INyARRgb2GsFilter)i_raster.createInterface(typeof(INyARRgb2GsFilter)); this._last_input_raster = i_raster; } //GSイメージへの変換とヒストグラムの生成 this._togs_filter.convert(this._gs_raster); this._histmaker.createHistogram(4, this._hist); // スクエアコードを探す this._detectmarker.init(i_raster, this._current_arcode_index); this._detectmarker.detectMarker(this._gs_raster, this._thdetect.getThreshold(this._hist),this._detectmarker); // 認識状態を更新 this.updateStatus(this._detectmarker.square, this._detectmarker.code_index); return; }
public NyARSensor(NyARIntSize i_size) { this.initInstance(i_size); this._hist_drv = (INyARHistogramFromRaster)this._gs_raster.createInterface(typeof(INyARHistogramFromRaster)); }
public NyARGsEqualizeHistFilter_Any(INyARGrayscaleRaster i_raster) { this._tone_table = NyARGsFilterFactory.createCustomToneTableFilter(i_raster); this._histdrv = (INyARHistogramFromRaster)i_raster.createInterface(typeof(INyARHistogramFromRaster)); }