チェンジセット 1752
- コミット日時:
- 2008/10/29 19:01:00 (2 ヶ月前)
- ファイル:
-
- as3/FLARToolKit/trunk/samples/org/tarotaro/flash/ar/layers/FLARMultiMarkerLayer.as (更新) (2 diffs)
- as3/FLARToolKit/trunk/src/org/libspark/flartoolkit/core/raster/FLARRaster_BasicClass.as (更新) (1 diff)
- as3/FLARToolKit/trunk/src/org/libspark/flartoolkit/core/types/FLARIntSize.as (更新) (2 diffs)
- as3/FLARToolKit/trunk/src/org/libspark/flartoolkit/detector/CubeMarker.as (追加)
- as3/FLARToolKit/trunk/src/org/libspark/flartoolkit/detector/CubeMarkerDetector.as (更新) (7 diffs)
- as3/FLARToolKit/trunk/src/org/libspark/flartoolkit/detector/CubeMarkerDirection.as (追加)
- as3/FLARToolKit/trunk/src/org/libspark/flartoolkit/detector/FLARMultiMarkerDetector.as (更新) (1 diff)
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
as3/FLARToolKit/trunk/samples/org/tarotaro/flash/ar/layers/FLARMultiMarkerLayer.as
r1743 r1752 38 38 import org.libspark.flartoolkit.core.raster.rgb.IFLARRgbRaster; 39 39 import org.libspark.flartoolkit.core.transmat.FLARTransMatResult; 40 import org.libspark.flartoolkit.detector.CubeMarkerDetector; 40 import org.libspark.flartoolkit.detector.FLARMultiMarkerDetector; 41 import org.libspark.flartoolkit.detector.FLARMultiMarkerDetector; 41 42 import org.libspark.flartoolkit.detector.FLARMultiMarkerDetectorResult; 42 43 … … 62 63 { 63 64 super(src, thresh); 64 this._detector = new CubeMarkerDetector(param, codeList, markerWidthList, codeList.length);65 this._detector = new FLARMultiMarkerDetector(param, codeList, markerWidthList, codeList.length); 65 66 this._detector.sizeCheckEnabled = false; 66 67 this._resultMat = new FLARTransMatResult(); as3/FLARToolKit/trunk/src/org/libspark/flartoolkit/core/raster/FLARRaster_BasicClass.as
r1630 r1752 1 /*1 /* 2 2 * PROJECT: FLARToolKit 3 3 * -------------------------------------------------------------------------------- as3/FLARToolKit/trunk/src/org/libspark/flartoolkit/core/types/FLARIntSize.as
r1630 r1752 1 /*1 /* 2 2 * PROJECT: FLARToolKit 3 3 * -------------------------------------------------------------------------------- … … 76 76 return false; 77 77 } 78 79 override public function toString():String 80 { 81 return "(width=" + _size.w + " , height=" + this._size.h + ")"; 82 } 78 83 } 79 84 } as3/FLARToolKit/trunk/src/org/libspark/flartoolkit/detector/CubeMarkerDetector.as
r1743 r1752 23 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 24 24 * 25 * For further information please contact.25 * For further information of this Class please contact. 26 26 * http://www.libspark.org/wiki/saqoosha/FLARToolKit 27 * < saq(at)saqoosha.net>27 * <taro(at)tarotaro.org> 28 28 * 29 29 */ … … 49 49 import org.libspark.flartoolkit.core.transmat.IFLARTransMat; 50 50 import org.libspark.flartoolkit.core.types.FLARIntSize; 51 import org.tarotaro.flash.ar.detector.CubeMarker; 51 52 52 53 /** … … 69 70 70 71 private var _codes:Array; // FLARCode[] 72 private var _marker:CubeMarker; 71 73 private var _codeResult:Array; 72 74 … … 82 84 private var _result_holder:FLARMultiMarkerDetectorResultHolder = new FLARMultiMarkerDetectorResultHolder(); 83 85 84 /** 85 * 複数のマーカーを検出し、最も一致するARCodeをi_codeから検索するオブジェクトを作ります。 86 * 87 * @param i_param 88 * カメラパラメータを指定します。 89 * @param i_code FLARCode[] 90 * 検出するマーカーのARCode配列を指定します。配列要素のインデックス番号が、そのままgetARCodeIndex関数で 得られるARCodeインデックスになります。 例えば、要素[1]のARCodeに一致したマーカーである場合は、getARCodeIndexは1を返します。 91 * 先頭からi_number_of_code個の要素には、有効な値を指定する必要があります。 92 * @param i_marker_width double[] 93 * i_codeのマーカーサイズをミリメートルで指定した配列を指定します。 先頭からi_number_of_code個の要素には、有効な値を指定する必要があります。 94 * @param i_number_of_code 95 * i_codeに含まれる、ARCodeの数を指定します。 96 * @throws FLARException 97 */ 98 public function CubeMarkerDetector(i_param:FLARParam, i_code:Array, i_marker_width:Array, i_number_of_code:int) { 86 /** 87 * 88 * @param i_param カメラパラメータを指定します。 89 * @param i_code キューブ型マーカを指定します。 90 */ 91 public function CubeMarkerDetector(i_param:FLARParam, i_code:CubeMarker) { 92 93 //scrとは、「screen」の略。srcの打ち間違いではない事に注意! 99 94 const scr_size:FLARIntSize = i_param.getScreenSize(); 95 100 96 // 解析オブジェクトを作る 101 97 this._square_detect = new FLARSquareDetector(i_param.getDistortionFactor(), scr_size); 102 98 this._transmat = new FLARTransMat(i_param); 99 103 100 // 比較コードを保存 104 this._codes = i_code; 105 this._codeResult = new Array(i_number_of_code); 106 for (var r:int = 0; r < this._codeResult.length; r++) { 107 this._codeResult[r] = false; 108 } 109 // 比較コードの解像度は全部同じかな?(違うとパターンを複数種つくらないといけないから) 110 const cw:int = i_code[0].getWidth(); 111 const ch:int = i_code[0].getHeight(); 112 for (var i:int = 1; i < i_number_of_code; i++) { 113 if (cw != i_code[i].getWidth() || ch != i_code[i].getHeight()) { 114 // 違う解像度のが混ざっている。 115 throw new FLARException(); 116 } 117 } 101 this._marker = i_code; 102 118 103 // 評価パターンのホルダを作る 119 this._patt = new FLARColorPatt_O3(cw, ch); 120 this._number_of_code = i_number_of_code; 121 122 this._marker_width = i_marker_width; 104 this._patt = new FLARColorPatt_O3(this._marker.top.getWidth(), this._marker.top.getWidth()); 105 106 //マーカの幅を記録 107 this._marker_width = this._marker.size; 108 123 109 // 評価器を作る。 124 110 this._match_patt = new FLARMatchPatt_Color_WITHOUT_PCA(); 111 125 112 //2値画像バッファを作る 126 // this._bin_raster = new FLARBinRaster(scr_size.w, scr_size.h);127 113 this._bin_raster = new FLARRaster_BitmapData(scr_size.w, scr_size.h); 128 114 } 129 115 116 /** 117 * #detectMarkerLiteで使用する作業領域 118 */ 130 119 private var _bin_raster:IFLARRaster; 131 120 132 // private var _tobin_filter:FLARRasterFilter_ARToolkitThreshold = new FLARRasterFilter_ARToolkitThreshold(100); 121 /** 122 * #detectMarkerLiteで使用するフィルタ(画像を2値化) 123 */ 133 124 private var _tobin_filter:FLARRasterFilter_BitmapDataThreshold = new FLARRasterFilter_BitmapDataThreshold(100); 134 125 135 126 /** 136 * i_imageにマーカー検出処理を実行し、結果を記録します。 137 * 127 * i_rasterにマーカー検出処理を実行し、結果を記録します。 128 * 終了条件: 129 * 1.一致度が0.9を超えるマーカが見つかった場合⇒そのマーカが一致とし、即時終了 130 * 2.Squareに対する全マーカ発見後、一致度が0.75を超えるマーカが見つかり、かつそれがSquareに対する最高一致度⇒そのマーカが一致とみなす 131 * 探索条件: 132 * 1.Squareに対して最高一致度を出したマーカは、他のSquareで評価しない 133 * 138 134 * @param i_raster 139 135 * マーカーを検出するイメージを指定します。 … … 146 142 // サイズチェック 147 143 if(this._sizeCheckEnabled && !this._bin_raster.getSize().isEqualSizeO(i_raster.getSize())) { 148 throw new FLARException( );144 throw new FLARException("サイズ不一致(" + this._bin_raster.getSize() + ":" + i_raster.getSize()); 149 145 } 150 146 … … 153 149 this._tobin_filter.doFilter(i_raster, this._bin_raster); 154 150 151 // マーカ候補となるSquareを探す 155 152 var l_square_list:FLARSquareStack = this._square_list; 156 // スクエアコードを探す157 153 this._square_detect.detectMarker(this._bin_raster, l_square_list); 158 154 155 // マーカ候補となるSquareが1個も無い場合、終了 159 156 const number_of_square:int = l_square_list.getLength(); 160 // コードは見つかった?161 157 if (number_of_square < 1) { 162 // ないや。おしまい。163 //return 0;164 158 return null; 165 159 } 160 166 161 // 保持リストのサイズを調整 167 162 this._result_holder.reservHolder(number_of_square); 168 163 169 //あれの結果の初期化 170 for (var r:int = 0; r < this._codeResult.length; r++) { 171 this._codeResult[r] = false; 172 } 173 174 // 1スクエア毎に、一致するコードを決定していく 175 var i:int; 176 var square:FLARSquare; 177 var code_index:int; 178 var confidence:Number; 179 var direction:int; 180 var i2:int; 181 var c2:Number; 182 for (i = 0; i < number_of_square; i++) { 164 // Square毎に、一致するコードを決定していく 165 var square:FLARSquare; //検査対象のSquareを格納しておく 166 var code_index:int; // 167 var confidence:Number; //マーカパターンとSquareの一致度 168 var direction:int; //マーカの向き 169 var i2:int; // 170 var c2:Number; //一致度2 171 172 //Squareリストを走査する 173 for (var i:int = 0; i < number_of_square; i++) { 174 //Squareを取り出す 183 175 square = l_square_list.getItem(i) as FLARSquare; 176 184 177 // 評価基準になるパターンをイメージから切り出す 185 178 if (!this._patt.pickFromRaster(i_raster, square)) { … … 190 183 if (!this._match_patt.setPatt(this._patt)) { 191 184 // 計算に失敗した。 192 throw new FLARException( );185 throw new FLARException("パターンを評価器にセット:失敗!"); 193 186 } 194 187 // コードと順番に比較していく 195 code_index = 0; 196 _match_patt.evaluate(_codes[0]); 188 189 190 //まずはTOPから 191 _match_patt.evaluate(this._marker.top); 197 192 confidence = _match_patt.getConfidence(); 198 193 direction = _match_patt.getDirection(); 199 trace(i,0, confidence,"(",square.label.area,")"); 194 if (confidence > 0.9) { 195 //終了条件1に一致 196 return ; 197 } 200 198 for (i2 = 1; i2 < this._number_of_code; i2++) { 201 199 if (this._codeResult[i2]) continue; as3/FLARToolKit/trunk/src/org/libspark/flartoolkit/detector/FLARMultiMarkerDetector.as
r1743 r1752 141 141 // サイズチェック 142 142 if(this._sizeCheckEnabled && !this._bin_raster.getSize().isEqualSizeO(i_raster.getSize())) { 143 throw new FLARException( );143 throw new FLARException("サイズ不一致(" + this._bin_raster.getSize() + ":" + i_raster.getSize()); 144 144 } 145 145
