From 6fbc22785252f8be4ee0dee5738e62bf97bd50e4 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Thu, 8 Nov 2012 04:35:56 -0800 Subject: [PATCH 01/46] Initial commit --- README.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..0eb532b --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +jsfeat +====== + +JavaScript Computer Vision library. \ No newline at end of file From 231dae1584d602ff2c109d49645a9441ffa8793a Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Thu, 8 Nov 2012 17:02:35 +0400 Subject: [PATCH 02/46] initial commit --- README.md | 45 ++++- src/jsfeat.js | 12 ++ src/jsfeat_fast_corners.js | 342 ++++++++++++++++++++++++++++++++++ src/jsfeat_imgproc.js | 148 +++++++++++++++ src/jsfeat_math.js | 38 ++++ src/jsfeat_optical_flow_lk.js | 238 +++++++++++++++++++++++ src/jsfeat_struct.js | 50 +++++ 7 files changed, 869 insertions(+), 4 deletions(-) create mode 100644 src/jsfeat.js create mode 100644 src/jsfeat_fast_corners.js create mode 100644 src/jsfeat_imgproc.js create mode 100644 src/jsfeat_math.js create mode 100644 src/jsfeat_optical_flow_lk.js create mode 100644 src/jsfeat_struct.js diff --git a/README.md b/README.md index 0eb532b..6623562 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,41 @@ -jsfeat -====== - -JavaScript Computer Vision library. \ No newline at end of file +jsfeat +====== + +#### JavaScript Computer Vision library #### + +The project aim is to explore JS/HTML5 possibilities using modern & state-of-art computer vision algorithms. + +### Features ### + +* Basic image processing methods (grayscale, derivatives, box-blur, resample, etc.) +* Fast Corners feature detector (16/12/8 pattern size) +* Lucas-Kanade optical flow +* Fast math methods +* Custom data structures +* more is coming... + +### Change log ### + +2012 10 8 - **alpha** + +* First commit + +
+Copyright 2012 Eugene Zatepyakin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
+and associated documentation files (the "Software"), to deal in the Software without restriction, 
+including without limitation the rights to use, copy, modify, merge, publish, distribute, 
+sublicense, and/or sell copies of the Software, and to permit persons to whom the Software 
+is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies 
+or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 
+PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE 
+FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 
+OR OTHER DEALINGS IN THE SOFTWARE.
+
\ No newline at end of file diff --git a/src/jsfeat.js b/src/jsfeat.js new file mode 100644 index 0000000..308f164 --- /dev/null +++ b/src/jsfeat.js @@ -0,0 +1,12 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + */ + +// namespace ? +var jsfeat = jsfeat || { REVISION: 'ALPHA' }; + +// use typed arrays if possible +self.Int32Array = self.Int32Array || Array; +self.Uint32Array = self.Uint32Array || Array; +self.Uint8Array = self.Uint8Array || Array; +self.Float32Array = self.Float32Array || Array; \ No newline at end of file diff --git a/src/jsfeat_fast_corners.js b/src/jsfeat_fast_corners.js new file mode 100644 index 0000000..36e8aa9 --- /dev/null +++ b/src/jsfeat_fast_corners.js @@ -0,0 +1,342 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + * This is FAST corner detector, contributed to OpenCV by the author, Edward Rosten. + */ + +/* +The references are: + * Machine learning for high-speed corner detection, + E. Rosten and T. Drummond, ECCV 2006 + * Faster and better: A machine learning approach to corner detection + E. Rosten, R. Porter and T. Drummond, PAMI, 2009 +*/ + +(function(global) { + "use strict"; + // + var fast_corners = (function() { + + var offsets16 = new Int32Array([0, 3, 1, 3, 2, 2, 3, 1, 3, 0, 3, -1, 2, -2, 1, -3, 0, -3, -1, -3, -2, -2, -3, -1, -3, 0, -3, 1, -2, 2, -1, 3]); + var offsets12 = new Int32Array([0, 2, 1, 2, 2, 1, 2, 0, 2, -1, 1, -2, 0, -2, -1, -2, -2, -1, -2, 0, -2, 1, -1, 2]); + var offsets8 = new Int32Array([0, 1, 1, 1, 1, 0, 1, -1, 0, -1, -1, -1, -1, 0, -1, 1]); + + var threshold_tab = new Uint8Array(512); + var pixel_off = new Int32Array(25); + var score_diff = new Int32Array(25); + + // private functions + var _cmp_offsets = function(pixel, step, pattern_size) { + var k = 0; + var offsets = pattern_size == 16 ? offsets16 : (pattern_size == 12 ? offsets12 : offsets8); + for( ; k < pattern_size; ++k ) + { + pixel[k] = offsets[k<<1] + offsets[(k<<1)+1] * step; + } + for( ; k < 25; ++k ) + { + pixel[k] = pixel[k - pattern_size]; + } + }, + + _cmp_score_8 = function(src, off, pixel, d, threshold) { + var N = 15, k = 0, v = src[off]; + var a0 = threshold,a=0,b0=0,b=0; + var _imin = jsfeat.math.imin; + var _imax = jsfeat.math.imax; + + for( ; k < N; ++k ) { + d[k] = v - src[off+pixel[k]]; + } + + for( k = 0; k < 8; k += 2 ) + { + a = _imin(d[k+1], d[k+2]); + + if( a <= a0 ) continue; + + a = _imin(a, d[k+3]); + a = _imin(a, d[k+4]); + a0 = _imax(a0, _imin(a, d[k])); + a0 = _imax(a0, _imin(a, d[k+5])); + } + + b0 = -a0; + for( k = 0; k < 8; k += 2 ) + { + b = _imax(d[k+1], d[k+2]); + b = _imax(b, d[k+3]); + + if( b >= b0 ) continue; + + b = _imax(b, d[k+4]); + b0 = _imin(b0, _imax(b, d[k])); + b0 = _imin(b0, _imax(b, d[k+5])); + } + + return -b0-1; + }, + + _cmp_score_12 = function(src, off, pixel, d, threshold) { + var N = 19, k = 0, v = src[off]; + var a0 = threshold,a=0,b0=0,b=0; + var _imin = jsfeat.math.imin; + var _imax = jsfeat.math.imax; + + for( ; k < N; ++k ) { + d[k] = v - src[off+pixel[k]]; + } + + for( k = 0; k < 12; k += 2 ) + { + a = _imin(d[k+1], d[k+2]); + + if( a <= a0 ) continue; + + a = _imin(a, d[k+3]); + a = _imin(a, d[k+4]); + a = _imin(a, d[k+5]); + a = _imin(a, d[k+6]); + a0 = _imax(a0, _imin(a, d[k])); + a0 = _imax(a0, _imin(a, d[k+7])); + } + + b0 = -a0; + for( k = 0; k < 12; k += 2 ) + { + b = _imax(d[k+1], d[k+2]); + b = _imax(b, d[k+3]); + b = _imax(b, d[k+4]); + + if( b >= b0 ) continue; + + b = _imax(b, d[k+5]); + b = _imax(b, d[k+6]); + b0 = _imin(b0, _imax(b, d[k])); + b0 = _imin(b0, _imax(b, d[k+7])); + } + + return -b0-1; + }, + + _cmp_score_16 = function(src, off, pixel, d, threshold) { + var N = 25, k = 0, v = src[off]; + var a0 = threshold,a=0,b0=0,b=0; + var _imin = jsfeat.math.imin; + var _imax = jsfeat.math.imax; + + for( ; k < N; ++k ) { + d[k] = v - src[off+pixel[k]]; + } + + for( k = 0; k < 16; k += 2 ) + { + a = _imin(d[k+1], d[k+2]); + a = _imin(a, d[k+3]); + + if( a <= a0 ) continue; + + a = _imin(a, d[k+4]); + a = _imin(a, d[k+5]); + a = _imin(a, d[k+6]); + a = _imin(a, d[k+7]); + a = _imin(a, d[k+8]); + a0 = _imax(a0, _imin(a, d[k])); + a0 = _imax(a0, _imin(a, d[k+9])); + } + + b0 = -a0; + for( k = 0; k < 16; k += 2 ) + { + b = _imax(d[k+1], d[k+2]); + b = _imax(b, d[k+3]); + b = _imax(b, d[k+4]); + b = _imax(b, d[k+5]); + + if( b >= b0 ) continue; + b = _imax(b, d[k+6]); + b = _imax(b, d[k+7]); + b = _imax(b, d[k+8]); + b0 = _imin(b0, _imax(b, d[k])); + b0 = _imin(b0, _imax(b, d[k+9])); + } + + return -b0-1; + }; + + var _threshold = 20; + + return { + set_threshold: function(threshold) + { + _threshold = _imin(_imax(threshold, 0), 255); + for (var i = -255; i <= 255; ++i) + { + threshold_tab[(i + 255)] = (i < -_threshold ? 1 : (i > _threshold ? 2 : 0)); + } + return _threshold; + }, + + detect: function(img, w, h, corners, border, pattern_size) + { + if (typeof pattern_size === "undefined") { pattern_size = 16; } + if (typeof border === "undefined") { border = 3; } + + var K = (pattern_size/2)|0, N = (pattern_size + K + 1)|0; + var i=0, j=0, k=0, vt=0, x=0, m3=0; + var buf = new Uint8Array(w*3); + var cpbuf = new Int32Array((w+1)*3); + var pixel = pixel_off; + var sd = score_diff; + var sy = _imax(3, border); + var ey = _imin((h-2), (h-border)); + var sx = _imax(3, border); + var ex = _imin((w - 3), (w - border)); + var _count = 0, corners_cnt = 0; + var score_func = pattern_size == 16 ? _cmp_score_16 : (pattern_size == 12 ? _cmp_score_12 : _cmp_score_8); + var thresh_tab = threshold_tab; + var threshold = _threshold; + + var v=0,tab=0,d=0,ncorners=0,cornerpos=0,curr=0,ptr=0,prev=0,pprev=0; + var jp1=0,jm1=0,score=0; + + _cmp_offsets(pixel, w, pattern_size); + + // local vars are faster? + var pixel0 = pixel[0]; + var pixel1 = pixel[1]; + var pixel2 = pixel[2]; + var pixel3 = pixel[3]; + var pixel4 = pixel[4]; + var pixel5 = pixel[5]; + var pixel6 = pixel[6]; + var pixel7 = pixel[7]; + var pixel8 = pixel[8]; + var pixel9 = pixel[9]; + var pixel10 = pixel[10]; + var pixel11 = pixel[11]; + var pixel12 = pixel[12]; + var pixel13 = pixel[13]; + var pixel14 = pixel[14]; + var pixel15 = pixel[15]; + + for(i = 0; i < w*3; ++i) { + buf[i] = 0; + } + + for(i = sy; i < ey; ++i) { + ptr = ((i * w) + sx)|0; + m3 = _mod3(i - 3); + curr = (m3*w)|0; + cornerpos = (m3*(w+1))|0; + for (j = 0; j < w; ++j) buf[curr+j] = 0; + ncorners = 0; + + if( i < (ey - 1) ) { + j = sx; + + for( ; j < ex; ++j, ++ptr ) { + v = img[ptr]; + tab = ( - v + 255 ); + d = ( thresh_tab[tab+img[ptr+pixel0]] | thresh_tab[tab+img[ptr+pixel8]] ); + + if( d == 0 ) { + continue; + } + + d &= ( thresh_tab[tab+img[ptr+pixel2]] | thresh_tab[tab+img[ptr+pixel10]] ); + d &= ( thresh_tab[tab+img[ptr+pixel4]] | thresh_tab[tab+img[ptr+pixel12]] ); + d &= ( thresh_tab[tab+img[ptr+pixel6]] | thresh_tab[tab+img[ptr+pixel14]] ); + + if( d == 0 ) { + continue; + } + + d &= ( thresh_tab[tab+img[ptr+pixel1]] | thresh_tab[tab+img[ptr+pixel9]] ); + d &= ( thresh_tab[tab+img[ptr+pixel3]] | thresh_tab[tab+img[ptr+pixel11]] ); + d &= ( thresh_tab[tab+img[ptr+pixel5]] | thresh_tab[tab+img[ptr+pixel13]] ); + d &= ( thresh_tab[tab+img[ptr+pixel7]] | thresh_tab[tab+img[ptr+pixel15]] ); + + if( d & 1 ) { + vt = (v - threshold); + _count = 0; + + for( k = 0; k < N; ++k ) { + x = img[(ptr+pixel[k])]; + if(x < vt) { + ++_count; + if( _count > K ) { + ++ncorners; + cpbuf[cornerpos+ncorners] = j; + buf[curr+j] = score_func(img, ptr, pixel, sd, threshold); + break; + } + } + else { + _count = 0; + } + } + } + + if( d & 2 ) { + vt = (v + threshold); + _count = 0; + + for( k = 0; k < N; ++k ) { + x = img[(ptr+pixel[k])]; + if(x > vt) { + ++_count; + if( _count > K ) { + ++ncorners; + cpbuf[cornerpos+ncorners] = j; + buf[curr+j] = score_func(img, ptr, pixel, sd, threshold); + break; + } + } + else { + _count = 0; + } + } + } + } + } + + cpbuf[cornerpos+w] = ncorners; + + if ( i == sy ) { + continue; + } + + m3 = _mod3(i - 4 + 3); + prev = (m3*w)|0; + cornerpos = (m3*(w+1))|0; + m3 = _mod3(i - 5 + 3); + pprev = (m3*w)|0; + + ncorners = cpbuf[cornerpos+w]; + + for( k = 0; k < ncorners; ++k ) { + j = cpbuf[cornerpos+k]; + jp1 = (j+1)|0; + jm1 = (j-1)|0; + score = buf[prev+j]; + if( (score > buf[prev+jp1] && score > buf[prev+jm1] && + score > buf[pprev+jm1] && score > buf[pprev+j] && score > buf[pprev+jp1] && + score > buf[curr+jm1] && score > buf[curr+j] && score > buf[curr+jp1]) ) { + // save corner + corners[corners_cnt*3] = j; + corners[corners_cnt*3+1] = (i-1); + corners[corners_cnt*3+2] = score; + corners_cnt++; + } + } + } // y loop + return corners_cnt; + } + }; + })(); + + global.fast_corners = fast_corners; + fast_corners.set_threshold(20); // set default + +})(jsfeat); \ No newline at end of file diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js new file mode 100644 index 0000000..b4999d3 --- /dev/null +++ b/src/jsfeat_imgproc.js @@ -0,0 +1,148 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + */ + +(function(global) { + "use strict"; + // + + var imgproc = (function() { + + var RGBA_2_GRAY_LUT = new Int32Array(256*3); + + return { + + init_grayscale_lut: function(blueIdx) { + var coeffs = new Int32Array(3); + coeffs[0] = 4899; coeffs[1] = 9617; coeffs[2] = 1868; + + var b = 0, g = 0, r = (1 << (14-1)); + var db = coeffs[blueIdx^2], dg = coeffs[1], dr = coeffs[blueIdx]; + for( var i = 0; i < 256; i++, b += db, g += dg, r += dr ) { + RGBA_2_GRAY_LUT[i] = b; + RGBA_2_GRAY_LUT[i+256] = g; + RGBA_2_GRAY_LUT[i+512] = r; + } + }, + + grayscale: function(src, dst) { + var srcLength = src.length | 0; + var _lut = RGBA_2_GRAY_LUT; + var j = 0; + for (var i = 0; i < srcLength; i += 4, ++j) { + dst[j] = (_lut[src[i]] + _lut[src[i+1]+256] + _lut[src[i+2]+512]) >> 14; + //dst[j] = ((src[i]*77)+(src[i+1]*151)+(src[i+2]*28)) >> 8; + } + }, + + box_blur: function(src, dst, w, h, hwin) { + var win = (2*hwin+1)|0; + var _buf = new Int32Array(w*win+w); + var sums = (w*win)|0; + var next_row=0,oldest_row=0; + var i=0, j=0, s0=0, s1=0; + var hsum = 0, back=0; + + var input = 0, output = (w*hwin - hwin) | 0; + + for(i = 0; i < w; ++i){ _buf[sums+i] = 0; } + + for (i=0; i= win-1) { + for(j = win-1; j <= w-2; j+=2) { + s0 = _buf[sums+j]; s1 = _buf[sums+j+1]; + dst[output+j] = s0; dst[output+j+1] = s1; + _buf[sums+j] = s0 - _buf[oldest_row+j]; + _buf[sums+j+1] = s1 - _buf[oldest_row+j+1]; + } + for(; j < w; ++j) { + s0 = _buf[sums+j]; + dst[output+j] = s0; + _buf[sums+j] = s0 - _buf[oldest_row+j]; + } + output += w; + oldest_row += w; + oldest_row = (oldest_row < sums) * oldest_row; + } + input += w; + next_row += w; + next_row = (next_row < sums) * next_row; + } + }, + + pyrdown_fast_u8: function(src, dst) { + var w = src.width | 0; + var w2 = w >> 1, h2 = src.height >> 1; + var src_data = src.data_u8; + var dst_data = dst.data_u8; + var x=0,y=0,sptr=0,sline=0,dptr=0; + + for(y = 0; y < h2; ++y) { + sline = sptr; + for(x = 0; x < w2; ++x, ++dptr) { + dst_data[dptr] = (src_data[sline] + src_data[sline+1] + + src_data[sline+w] + src_data[sline+w+1] + 2) >> 2; + sline += 2; + } + sptr += w << 1; + } + }, + + shar_derivatives: function(img, dst, w, h) { + var dstep = w<<1,x=0,y=0,x1=0,t0=0,t1=0; + var srow0=0,srow1=0,srow2=0,drow=0; + var trow0 = new Int32Array(w+2); + var trow1 = new Int32Array(w+2); + + for(y=0; y < h; ++y) { + srow1 = (y*w)|0; + srow0 = ((y > 0 ? y-1 : 1)*w)|0; + srow2 = ((y < h-1 ? y+1 : h-2)*w)|0; + drow = (y*dstep)|0; + // do vertical convolution + for(x = 0, x1 = 1; x < w; ++x,++x1) { + t0 = ( ((img[srow0+x]) + (img[srow2+x]))*3 + (img[srow1+x])*10 ); + t1 = ( (img[srow2+x]) - (img[srow0+x]) ); + trow0[x1] = t0; + trow1[x1] = t1; + } + // make border + x = (w + 1)|0; + trow0[0] = trow0[1]; trow0[x] = trow0[w]; + trow1[0] = trow1[1]; trow1[x] = trow1[w]; + // do horizontal convolution, interleave the results and store them + for(x = 0; x < w; ++x) { + t0 = ( (trow0[x+2] - trow0[x]) ); + t1 = ( ((trow1[x+2] + trow1[x])*3 + trow1[x+1]*10) ); + dst[drow++] = t0; + dst[drow++] = t1; + } + } + } + }; + })(); + + global.imgproc = imgproc; + +})(jsfeat); diff --git a/src/jsfeat_math.js b/src/jsfeat_math.js new file mode 100644 index 0000000..2c411b9 --- /dev/null +++ b/src/jsfeat_math.js @@ -0,0 +1,38 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + */ + +(function(global) { + "use strict"; + // + + var math = (function() { + + return { + imin: function(value0, value1) { + return value1 ^ ((value0 ^ value1) & -(value0 < value1)); + }, + imax: function(value0, value1) { + return value0 ^ ((value0 ^ value1) & -(value0 < value1)); + }, + imod3: function(a) { + a = ((a >> 16) + (a & 0xFFFF)); /* sum base 2**16 digits a <= 0x1FFFE */ + a = ((a >> 8) + (a & 0xFF)); /* sum base 2**8 digits a <= 0x2FD */ + a = ((a >> 4) + (a & 0xF)); /* sum base 2**4 digits a <= 0x3C; worst case 0x3B */ + a = ((a >> 4) + (a & 0xF)); /* sum base 2**4 digits a <= 0x3C; worst case 0x3B */ + a = ((a >> 2) + (a & 0x3)); /* sum base 2**2 digits a <= 0x1D; worst case 0x1B */ + a = ((a >> 2) + (a & 0x3)); /* sum base 2**2 digits a <= 0x9; worst case 0x7 */ + //a = ((a >> 2) + (a & 0x3)); /* sum base 2**2 digits a <= 0x4 */ + //if (a > 2) a = (a - 3); + return (a - 3*(a > 2)); + }, + fabs: function (value) { + return value * (1.0 - ((value < 0.0) << 1)); + } + }; + + })(); + + global.math = math; + +})(jsfeat); \ No newline at end of file diff --git a/src/jsfeat_optical_flow_lk.js b/src/jsfeat_optical_flow_lk.js new file mode 100644 index 0000000..92c3f19 --- /dev/null +++ b/src/jsfeat_optical_flow_lk.js @@ -0,0 +1,238 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + * this code is a rewrite from OpenCV's Lucas-Kanade optical flow implementation + */ + +(function(global) { + "use strict"; + // + var optical_flow_lk = (function() { + + // short link to shar deriv + var shar_deriv = jsfeat.imgproc.shar_derivatives; + + return { + track: function(prev_pyr, curr_pyr, prev_xy, curr_xy, count, win_size, max_iter, status, eps, min_eigen_threshold) { + if (typeof max_iter === "undefined") { max_iter = 30; } + if (typeof status === "undefined") { status = new Uint8Array(count); } + if (typeof eps === "undefined") { eps = 0.01; } + if (typeof min_eigen_threshold === "undefined") { min_eigen_threshold = 0.0001; } + + var half_win = (win_size-1)*0.5; + var win_area = (win_size*win_size)|0; + var win_area2 = win_area << 1; + var prev_imgs = prev_pyr.images, next_imgs = curr_pyr.images; + var img_prev=prev_imgs[0].data_u8,img_next=next_imgs[0].data_u8; + var w0 = prev_imgs[0].width, h0 = prev_imgs[0].height,lw=0,lh=0; + + var iwin_buf = new Int32Array(win_area); + var deriv_iwin = new Int32Array(win_area2); + var deriv_lev = new Int32Array((w0*h0)*2); + + var dstep=0,src=0,dsrc=0,iptr=0,diptr=0,jptr=0; + var lev_sc=0.0,prev_x=0.0,prev_y=0.0,next_x=0.0,next_y=0.0; + var prev_delta_x=0.0,prev_delta_y=0.0,delta_x=0.0,delta_y=0.0; + var iprev_x=0,iprev_y=0,inext_x=0,inext_y=0; + var i=0,j=0,x=0,y=0,level=0,ptid=0,iter=0; + var brd_tl=0,brd_r=0,brd_b=0; + var a=0.0,b=0.0,b1=0.0,b2=0.0; + + var fabs = jsfeat.math.fabs; + + // fixed point math + var W_BITS14 = 14; + var W_BITS4 = 14; + var W_BITS1m5 = W_BITS4 - 5; + var W_BITS1m51 = (1 << ((W_BITS1m5) - 1)); + var W_BITS14_ = (1 << W_BITS14); + var W_BITS41 = (1 << ((W_BITS4) - 1)); + var FLT_SCALE = 1.0/(1 << 20); + var iw00=0,iw01=0,iw10=0,iw11=0,ival=0,ixval=0,iyval=0; + var A11=0.0,A12=0.0,A22=0.0,D=0.0,min_eig=0.0; + + var FLT_EPSILON = 0.00000011920929; + eps *= eps; + + // reset status + for(; i < count; ++i) { + status[i] = 1; + } + + var max_level = (prev_pyr.levels - 1)|0; + level = max_level; + + for(; level >= 0; --level) { + lev_sc = (1.0/(1 << level)); + lw = w0 >> level; + lh = h0 >> level; + dstep = lw << 1; + img_prev = prev_imgs[level].data_u8; + img_next = next_imgs[level].data_u8; + + brd_r = (lw - win_size)|0; + brd_b = (lh - win_size)|0; + + // calculate level derivatives + shar_deriv(img_prev, deriv_lev, lw, lh); + + // iterate through points + for(ptid = 0; ptid < count; ++ptid) { + i = ptid << 1; + j = i + 1; + prev_x = prev_xy[i]*lev_sc; + prev_y = prev_xy[j]*lev_sc; + + if( level == max_level ) { + next_x = prev_x; + next_y = prev_y; + } else { + next_x = curr_xy[i]*2.0; + next_y = curr_xy[j]*2.0; + } + curr_xy[i] = next_x; + curr_xy[j] = next_y; + + prev_x -= half_win; + prev_y -= half_win; + iprev_x = prev_x|0; + iprev_y = prev_y|0; + + // border check + x = (iprev_x <= brd_tl)|(iprev_x >= brd_r)|(iprev_y <= brd_tl)|(iprev_y >= brd_b); + if( x != 0 ) { + if( level == 0 ) { + status[ptid] = 0; + } + continue; + } + + a = prev_x - iprev_x; + b = prev_y - iprev_y; + iw00 = (((1.0 - a)*(1.0 - b)*W_BITS14_) + 0.5)|0; + iw01 = ((a*(1.0 - b)*W_BITS14_) + 0.5)|0; + iw10 = (((1.0 - a)*b*W_BITS14_) + 0.5)|0; + iw11 = (W_BITS14_ - iw00 - iw01 - iw10); + + A11 = 0.0, A12 = 0.0, A22 = 0.0; + + // extract the patch from the first image, compute covariation matrix of derivatives + for( y = 0; y < win_size; ++y ) { + src = ( (y + iprev_y)*lw + iprev_x )|0; + dsrc = src << 1; + + iptr = (y*win_size)|0; + diptr = iptr << 1; + for(x = 0 ; x < win_size; ++x, ++src, ++iptr, dsrc += 2) { + ival = ( (img_prev[src])*iw00 + (img_prev[src+1])*iw01 + + (img_prev[src+lw])*iw10 + (img_prev[src+lw+1])*iw11 ); + ival = (((ival) + W_BITS1m51) >> (W_BITS1m5)); + + ixval = ( deriv_lev[dsrc]*iw00 + deriv_lev[dsrc+2]*iw01 + + deriv_lev[dsrc+dstep]*iw10 + deriv_lev[dsrc+dstep+2]*iw11 ); + ixval = (((ixval) + W_BITS41) >> (W_BITS4)); + + iyval = ( deriv_lev[dsrc+1]*iw00 + deriv_lev[dsrc+3]*iw01 + deriv_lev[dsrc+dstep+1]*iw10 + + deriv_lev[dsrc+dstep+3]*iw11 ); + iyval = (((iyval) + W_BITS41) >> (W_BITS4)); + + iwin_buf[iptr] = ival; + deriv_iwin[diptr++] = ixval; + deriv_iwin[diptr++] = iyval; + + A11 += ixval*ixval; + A12 += ixval*iyval; + A22 += iyval*iyval; + } + } + + A11 *= FLT_SCALE; A12 *= FLT_SCALE; A22 *= FLT_SCALE; + + D = A11*A22 - A12*A12; + min_eig = (A22 + A11 - Math.sqrt((A11-A22)*(A11-A22) + 4.0*A12*A12)) / win_area2; + + if( min_eig < min_eigen_threshold || D < FLT_EPSILON ) + { + if( level == 0 ) { + status[ptid] = 0; + } + continue; + } + + D = 1.0/D; + + next_x -= half_win; + next_y -= half_win; + prev_delta_x = 0.0; + prev_delta_y = 0.0; + + for( iter = 0; iter < max_iter; ++iter ) { + inext_x = next_x|0; + inext_y = next_y|0; + + x = (inext_x <= brd_tl)|(inext_x >= brd_r)|(inext_y <= brd_tl)|(inext_y >= brd_b); + if( x != 0 ) { + if( level == 0 ) { + status[ptid] = 0; + } + break; + } + + a = next_x - inext_x; + b = next_y - inext_y; + iw00 = (((1.0 - a)*(1.0 - b)*W_BITS14_) + 0.5)|0; + iw01 = ((a*(1.0 - b)*W_BITS14_) + 0.5)|0; + iw10 = (((1.0 - a)*b*W_BITS14_) + 0.5)|0; + iw11 = (W_BITS14_ - iw00 - iw01 - iw10); + b1 = 0.0, b2 = 0.0; + + for( y = 0; y < win_size; ++y ) { + jptr = ( (y + inext_y)*lw + inext_x )|0; + + iptr = (y*win_size)|0; + diptr = iptr << 1; + for( x = 0 ; x < win_size; ++x, ++jptr, ++iptr ) { + ival = ( (img_next[jptr])*iw00 + (img_next[jptr+1])*iw01 + + (img_next[jptr+lw])*iw10 + (img_next[jptr+lw+1])*iw11 ); + ival = (((ival) + W_BITS1m51) >> (W_BITS1m5)); + ival = (ival - iwin_buf[iptr]); + + b1 += ival * deriv_iwin[diptr++]; + b2 += ival * deriv_iwin[diptr++]; + } + } + + b1 *= FLT_SCALE; + b2 *= FLT_SCALE; + + delta_x = ((A12*b2 - A22*b1) * D); + delta_y = ((A12*b1 - A11*b2) * D); + + next_x += delta_x; + next_y += delta_y; + curr_xy[i] = next_x + half_win; + curr_xy[j] = next_y + half_win; + + if( delta_x*delta_x + delta_y*delta_y <= eps ) { + break; + } + + if( iter > 0 && fabs(delta_x + prev_delta_x) < 0.01 && + fabs(delta_y + prev_delta_y) < 0.01 ) { + curr_xy[i] -= delta_x*0.5; + curr_xy[j] -= delta_y*0.5; + break; + } + + prev_delta_x = delta_x; + prev_delta_y = delta_y; + } + } // points loop + } // levels loop + } + }; + })(); + + global.optical_flow_lk = optical_flow_lk; + +})(jsfeat); \ No newline at end of file diff --git a/src/jsfeat_struct.js b/src/jsfeat_struct.js new file mode 100644 index 0000000..6956b80 --- /dev/null +++ b/src/jsfeat_struct.js @@ -0,0 +1,50 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + */ + +(function(global) { + "use strict"; + // + + var img_t = (function () { + function img_t(w, h, elem_size) { + this.width = w; + this.height = h; + this.buffer = new ArrayBuffer(w*h*elem_size); + this.data_u8 = new Uint8Array(this.buffer); + this.data_i32 = new Int32Array(this.buffer); + this.data_f32 = new Float32Array(this.buffer); + } + return img_t; + })(); + + var img_pyr_t = (function () { + + function img_pyr_t(l) { + this.levels = l; + this.images = new Array(l); + this.pyrdown = jsfeat.imgproc.pyrdown_fast_u8; + } + + img_pyr_t.prototype.allocate = function(start_w, start_h, elem_size) { + var i = this.levels; + while(--i >= 0) { + this.images[i] = new img_t(start_w >> i, start_h >> i, elem_size); + } + } + + img_pyr_t.prototype.build = function(src) { + this.pyrdown(src, this.images[1]); + var i = 1; + for(; i < this.levels; ++i) { + this.pyrdown(this.images[i-1], this.images[i]); + } + } + + return img_pyr_t; + })(); + + global.img_t = img_t; + global.img_pyr_t = img_pyr_t; + +})(jsfeat); \ No newline at end of file From be375de1d2a5e2502fcd9f85031a712b13d86f93 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Thu, 8 Nov 2012 17:04:17 +0400 Subject: [PATCH 03/46] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6623562..0c0d7de 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ jsfeat ====== -#### JavaScript Computer Vision library #### +### JavaScript Computer Vision library ### The project aim is to explore JS/HTML5 possibilities using modern & state-of-art computer vision algorithms. From 00ef6a09f01ffcea78957a50b48938be1af7845c Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Thu, 8 Nov 2012 17:33:35 +0400 Subject: [PATCH 04/46] removed some flash based hacks --- src/jsfeat_fast_corners.js | 100 +++++++++++++++++-------------------- src/jsfeat_math.js | 6 --- 2 files changed, 47 insertions(+), 59 deletions(-) diff --git a/src/jsfeat_fast_corners.js b/src/jsfeat_fast_corners.js index 36e8aa9..2437235 100644 --- a/src/jsfeat_fast_corners.js +++ b/src/jsfeat_fast_corners.js @@ -42,8 +42,6 @@ The references are: _cmp_score_8 = function(src, off, pixel, d, threshold) { var N = 15, k = 0, v = src[off]; var a0 = threshold,a=0,b0=0,b=0; - var _imin = jsfeat.math.imin; - var _imax = jsfeat.math.imax; for( ; k < N; ++k ) { d[k] = v - src[off+pixel[k]]; @@ -51,27 +49,27 @@ The references are: for( k = 0; k < 8; k += 2 ) { - a = _imin(d[k+1], d[k+2]); + a = Math.min(d[k+1], d[k+2]); if( a <= a0 ) continue; - a = _imin(a, d[k+3]); - a = _imin(a, d[k+4]); - a0 = _imax(a0, _imin(a, d[k])); - a0 = _imax(a0, _imin(a, d[k+5])); + a = Math.min(a, d[k+3]); + a = Math.min(a, d[k+4]); + a0 = Math.max(a0, Math.min(a, d[k])); + a0 = Math.max(a0, Math.min(a, d[k+5])); } b0 = -a0; for( k = 0; k < 8; k += 2 ) { - b = _imax(d[k+1], d[k+2]); - b = _imax(b, d[k+3]); + b = Math.max(d[k+1], d[k+2]); + b = Math.max(b, d[k+3]); if( b >= b0 ) continue; - b = _imax(b, d[k+4]); - b0 = _imin(b0, _imax(b, d[k])); - b0 = _imin(b0, _imax(b, d[k+5])); + b = Math.max(b, d[k+4]); + b0 = Math.min(b0, Math.max(b, d[k])); + b0 = Math.min(b0, Math.max(b, d[k+5])); } return -b0-1; @@ -80,8 +78,6 @@ The references are: _cmp_score_12 = function(src, off, pixel, d, threshold) { var N = 19, k = 0, v = src[off]; var a0 = threshold,a=0,b0=0,b=0; - var _imin = jsfeat.math.imin; - var _imax = jsfeat.math.imax; for( ; k < N; ++k ) { d[k] = v - src[off+pixel[k]]; @@ -89,31 +85,31 @@ The references are: for( k = 0; k < 12; k += 2 ) { - a = _imin(d[k+1], d[k+2]); + a = Math.min(d[k+1], d[k+2]); if( a <= a0 ) continue; - a = _imin(a, d[k+3]); - a = _imin(a, d[k+4]); - a = _imin(a, d[k+5]); - a = _imin(a, d[k+6]); - a0 = _imax(a0, _imin(a, d[k])); - a0 = _imax(a0, _imin(a, d[k+7])); + a = Math.min(a, d[k+3]); + a = Math.min(a, d[k+4]); + a = Math.min(a, d[k+5]); + a = Math.min(a, d[k+6]); + a0 = Math.max(a0, Math.min(a, d[k])); + a0 = Math.max(a0, Math.min(a, d[k+7])); } b0 = -a0; for( k = 0; k < 12; k += 2 ) { - b = _imax(d[k+1], d[k+2]); - b = _imax(b, d[k+3]); - b = _imax(b, d[k+4]); + b = Math.max(d[k+1], d[k+2]); + b = Math.max(b, d[k+3]); + b = Math.max(b, d[k+4]); if( b >= b0 ) continue; - b = _imax(b, d[k+5]); - b = _imax(b, d[k+6]); - b0 = _imin(b0, _imax(b, d[k])); - b0 = _imin(b0, _imax(b, d[k+7])); + b = Math.max(b, d[k+5]); + b = Math.max(b, d[k+6]); + b0 = Math.min(b0, Math.max(b, d[k])); + b0 = Math.min(b0, Math.max(b, d[k+7])); } return -b0-1; @@ -122,8 +118,6 @@ The references are: _cmp_score_16 = function(src, off, pixel, d, threshold) { var N = 25, k = 0, v = src[off]; var a0 = threshold,a=0,b0=0,b=0; - var _imin = jsfeat.math.imin; - var _imax = jsfeat.math.imax; for( ; k < N; ++k ) { d[k] = v - src[off+pixel[k]]; @@ -131,34 +125,34 @@ The references are: for( k = 0; k < 16; k += 2 ) { - a = _imin(d[k+1], d[k+2]); - a = _imin(a, d[k+3]); + a = Math.min(d[k+1], d[k+2]); + a = Math.min(a, d[k+3]); if( a <= a0 ) continue; - a = _imin(a, d[k+4]); - a = _imin(a, d[k+5]); - a = _imin(a, d[k+6]); - a = _imin(a, d[k+7]); - a = _imin(a, d[k+8]); - a0 = _imax(a0, _imin(a, d[k])); - a0 = _imax(a0, _imin(a, d[k+9])); + a = Math.min(a, d[k+4]); + a = Math.min(a, d[k+5]); + a = Math.min(a, d[k+6]); + a = Math.min(a, d[k+7]); + a = Math.min(a, d[k+8]); + a0 = Math.max(a0, Math.min(a, d[k])); + a0 = Math.max(a0, Math.min(a, d[k+9])); } b0 = -a0; for( k = 0; k < 16; k += 2 ) { - b = _imax(d[k+1], d[k+2]); - b = _imax(b, d[k+3]); - b = _imax(b, d[k+4]); - b = _imax(b, d[k+5]); + b = Math.max(d[k+1], d[k+2]); + b = Math.max(b, d[k+3]); + b = Math.max(b, d[k+4]); + b = Math.max(b, d[k+5]); if( b >= b0 ) continue; - b = _imax(b, d[k+6]); - b = _imax(b, d[k+7]); - b = _imax(b, d[k+8]); - b0 = _imin(b0, _imax(b, d[k])); - b0 = _imin(b0, _imax(b, d[k+9])); + b = Math.max(b, d[k+6]); + b = Math.max(b, d[k+7]); + b = Math.max(b, d[k+8]); + b0 = Math.min(b0, Math.max(b, d[k])); + b0 = Math.min(b0, Math.max(b, d[k+9])); } return -b0-1; @@ -169,7 +163,7 @@ The references are: return { set_threshold: function(threshold) { - _threshold = _imin(_imax(threshold, 0), 255); + _threshold = Math.min(Math.max(threshold, 0), 255); for (var i = -255; i <= 255; ++i) { threshold_tab[(i + 255)] = (i < -_threshold ? 1 : (i > _threshold ? 2 : 0)); @@ -188,10 +182,10 @@ The references are: var cpbuf = new Int32Array((w+1)*3); var pixel = pixel_off; var sd = score_diff; - var sy = _imax(3, border); - var ey = _imin((h-2), (h-border)); - var sx = _imax(3, border); - var ex = _imin((w - 3), (w - border)); + var sy = Math.max(3, border); + var ey = Math.min((h-2), (h-border)); + var sx = Math.max(3, border); + var ex = Math.min((w - 3), (w - border)); var _count = 0, corners_cnt = 0; var score_func = pattern_size == 16 ? _cmp_score_16 : (pattern_size == 12 ? _cmp_score_12 : _cmp_score_8); var thresh_tab = threshold_tab; diff --git a/src/jsfeat_math.js b/src/jsfeat_math.js index 2c411b9..4550cc9 100644 --- a/src/jsfeat_math.js +++ b/src/jsfeat_math.js @@ -9,12 +9,6 @@ var math = (function() { return { - imin: function(value0, value1) { - return value1 ^ ((value0 ^ value1) & -(value0 < value1)); - }, - imax: function(value0, value1) { - return value0 ^ ((value0 ^ value1) & -(value0 < value1)); - }, imod3: function(a) { a = ((a >> 16) + (a & 0xFFFF)); /* sum base 2**16 digits a <= 0x1FFFE */ a = ((a >> 8) + (a & 0xFF)); /* sum base 2**8 digits a <= 0x2FD */ From 957e8b735ec369cd5fe85f9db6dfc03ac51eba30 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Thu, 8 Nov 2012 18:05:35 +0400 Subject: [PATCH 05/46] fix missing mod3 link have to test if it actually faster then using %3 --- src/jsfeat_fast_corners.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/jsfeat_fast_corners.js b/src/jsfeat_fast_corners.js index 2437235..5cdb7b9 100644 --- a/src/jsfeat_fast_corners.js +++ b/src/jsfeat_fast_corners.js @@ -190,6 +190,7 @@ The references are: var score_func = pattern_size == 16 ? _cmp_score_16 : (pattern_size == 12 ? _cmp_score_12 : _cmp_score_8); var thresh_tab = threshold_tab; var threshold = _threshold; + var mod3 = jsfeat.math.imod3; var v=0,tab=0,d=0,ncorners=0,cornerpos=0,curr=0,ptr=0,prev=0,pprev=0; var jp1=0,jm1=0,score=0; @@ -220,7 +221,7 @@ The references are: for(i = sy; i < ey; ++i) { ptr = ((i * w) + sx)|0; - m3 = _mod3(i - 3); + m3 = mod3(i - 3); curr = (m3*w)|0; cornerpos = (m3*(w+1))|0; for (j = 0; j < w; ++j) buf[curr+j] = 0; @@ -301,10 +302,10 @@ The references are: continue; } - m3 = _mod3(i - 4 + 3); + m3 = mod3(i - 4 + 3); prev = (m3*w)|0; cornerpos = (m3*(w+1))|0; - m3 = _mod3(i - 5 + 3); + m3 = mod3(i - 5 + 3); pprev = (m3*w)|0; ncorners = cpbuf[cornerpos+w]; From ddd78284eeeb685e056a468d561c9509f2caebc6 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Thu, 8 Nov 2012 18:46:33 +0400 Subject: [PATCH 06/46] roll back to original Math class --- src/jsfeat_fast_corners.js | 40 ++++++++++++----------------------- src/jsfeat_math.js | 17 +++------------ src/jsfeat_optical_flow_lk.js | 6 ++---- 3 files changed, 19 insertions(+), 44 deletions(-) diff --git a/src/jsfeat_fast_corners.js b/src/jsfeat_fast_corners.js index 5cdb7b9..14d2dd0 100644 --- a/src/jsfeat_fast_corners.js +++ b/src/jsfeat_fast_corners.js @@ -29,12 +29,10 @@ The references are: var _cmp_offsets = function(pixel, step, pattern_size) { var k = 0; var offsets = pattern_size == 16 ? offsets16 : (pattern_size == 12 ? offsets12 : offsets8); - for( ; k < pattern_size; ++k ) - { + for( ; k < pattern_size; ++k ) { pixel[k] = offsets[k<<1] + offsets[(k<<1)+1] * step; } - for( ; k < 25; ++k ) - { + for( ; k < 25; ++k ) { pixel[k] = pixel[k - pattern_size]; } }, @@ -47,8 +45,7 @@ The references are: d[k] = v - src[off+pixel[k]]; } - for( k = 0; k < 8; k += 2 ) - { + for( k = 0; k < 8; k += 2 ) { a = Math.min(d[k+1], d[k+2]); if( a <= a0 ) continue; @@ -60,8 +57,7 @@ The references are: } b0 = -a0; - for( k = 0; k < 8; k += 2 ) - { + for( k = 0; k < 8; k += 2 ) { b = Math.max(d[k+1], d[k+2]); b = Math.max(b, d[k+3]); @@ -83,8 +79,7 @@ The references are: d[k] = v - src[off+pixel[k]]; } - for( k = 0; k < 12; k += 2 ) - { + for( k = 0; k < 12; k += 2 ) { a = Math.min(d[k+1], d[k+2]); if( a <= a0 ) continue; @@ -98,8 +93,7 @@ The references are: } b0 = -a0; - for( k = 0; k < 12; k += 2 ) - { + for( k = 0; k < 12; k += 2 ) { b = Math.max(d[k+1], d[k+2]); b = Math.max(b, d[k+3]); b = Math.max(b, d[k+4]); @@ -123,8 +117,7 @@ The references are: d[k] = v - src[off+pixel[k]]; } - for( k = 0; k < 16; k += 2 ) - { + for( k = 0; k < 16; k += 2 ) { a = Math.min(d[k+1], d[k+2]); a = Math.min(a, d[k+3]); @@ -140,8 +133,7 @@ The references are: } b0 = -a0; - for( k = 0; k < 16; k += 2 ) - { + for( k = 0; k < 16; k += 2 ) { b = Math.max(d[k+1], d[k+2]); b = Math.max(b, d[k+3]); b = Math.max(b, d[k+4]); @@ -161,18 +153,15 @@ The references are: var _threshold = 20; return { - set_threshold: function(threshold) - { + set_threshold: function(threshold) { _threshold = Math.min(Math.max(threshold, 0), 255); - for (var i = -255; i <= 255; ++i) - { + for (var i = -255; i <= 255; ++i) { threshold_tab[(i + 255)] = (i < -_threshold ? 1 : (i > _threshold ? 2 : 0)); } return _threshold; }, - detect: function(img, w, h, corners, border, pattern_size) - { + detect: function(img, w, h, corners, border, pattern_size) { if (typeof pattern_size === "undefined") { pattern_size = 16; } if (typeof border === "undefined") { border = 3; } @@ -190,7 +179,6 @@ The references are: var score_func = pattern_size == 16 ? _cmp_score_16 : (pattern_size == 12 ? _cmp_score_12 : _cmp_score_8); var thresh_tab = threshold_tab; var threshold = _threshold; - var mod3 = jsfeat.math.imod3; var v=0,tab=0,d=0,ncorners=0,cornerpos=0,curr=0,ptr=0,prev=0,pprev=0; var jp1=0,jm1=0,score=0; @@ -221,7 +209,7 @@ The references are: for(i = sy; i < ey; ++i) { ptr = ((i * w) + sx)|0; - m3 = mod3(i - 3); + m3 = (i - 3)%3; curr = (m3*w)|0; cornerpos = (m3*(w+1))|0; for (j = 0; j < w; ++j) buf[curr+j] = 0; @@ -302,10 +290,10 @@ The references are: continue; } - m3 = mod3(i - 4 + 3); + m3 = (i - 4 + 3)%3; prev = (m3*w)|0; cornerpos = (m3*(w+1))|0; - m3 = mod3(i - 5 + 3); + m3 = (i - 5 + 3)%3; pprev = (m3*w)|0; ncorners = cpbuf[cornerpos+w]; diff --git a/src/jsfeat_math.js b/src/jsfeat_math.js index 4550cc9..1e8d2a5 100644 --- a/src/jsfeat_math.js +++ b/src/jsfeat_math.js @@ -9,20 +9,9 @@ var math = (function() { return { - imod3: function(a) { - a = ((a >> 16) + (a & 0xFFFF)); /* sum base 2**16 digits a <= 0x1FFFE */ - a = ((a >> 8) + (a & 0xFF)); /* sum base 2**8 digits a <= 0x2FD */ - a = ((a >> 4) + (a & 0xF)); /* sum base 2**4 digits a <= 0x3C; worst case 0x3B */ - a = ((a >> 4) + (a & 0xF)); /* sum base 2**4 digits a <= 0x3C; worst case 0x3B */ - a = ((a >> 2) + (a & 0x3)); /* sum base 2**2 digits a <= 0x1D; worst case 0x1B */ - a = ((a >> 2) + (a & 0x3)); /* sum base 2**2 digits a <= 0x9; worst case 0x7 */ - //a = ((a >> 2) + (a & 0x3)); /* sum base 2**2 digits a <= 0x4 */ - //if (a > 2) a = (a - 3); - return (a - 3*(a > 2)); - }, - fabs: function (value) { - return value * (1.0 - ((value < 0.0) << 1)); - } + // looks like latest V8 engine is super smart :) + // so it turns none of hacks i published here can beat Math class + // probably next time... }; })(); diff --git a/src/jsfeat_optical_flow_lk.js b/src/jsfeat_optical_flow_lk.js index 92c3f19..179542b 100644 --- a/src/jsfeat_optical_flow_lk.js +++ b/src/jsfeat_optical_flow_lk.js @@ -38,8 +38,6 @@ var brd_tl=0,brd_r=0,brd_b=0; var a=0.0,b=0.0,b1=0.0,b2=0.0; - var fabs = jsfeat.math.fabs; - // fixed point math var W_BITS14 = 14; var W_BITS4 = 14; @@ -217,8 +215,8 @@ break; } - if( iter > 0 && fabs(delta_x + prev_delta_x) < 0.01 && - fabs(delta_y + prev_delta_y) < 0.01 ) { + if( iter > 0 && Math.abs(delta_x + prev_delta_x) < 0.01 && + Math.abs(delta_y + prev_delta_y) < 0.01 ) { curr_xy[i] -= delta_x*0.5; curr_xy[j] -= delta_y*0.5; break; From 5683dba1b0ab92b7d26ca23df76f583f474d6d47 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Thu, 8 Nov 2012 18:55:52 +0400 Subject: [PATCH 07/46] fixed readme no more fast math :) --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 0c0d7de..458fae7 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,8 @@ The project aim is to explore JS/HTML5 possibilities using modern & state-of-art * Basic image processing methods (grayscale, derivatives, box-blur, resample, etc.) * Fast Corners feature detector (16/12/8 pattern size) * Lucas-Kanade optical flow -* Fast math methods * Custom data structures -* more is coming... +* more coming... ### Change log ### From 605319ed2b6c055215e6c1a5c81e38e4a9b6fdde Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Fri, 9 Nov 2012 18:58:44 +0400 Subject: [PATCH 08/46] additions & improvements gaussian filter generic qsort implementation median for numeric vectors imgproc methods optimized with loop unrolling added simple build scripts to concat and minify lib --- LICENSE | 21 + README.md | 20 - build/jsfeat-min.js | 1 + build/jsfeat.js | 1157 +++++++++++++++++++++++++++++++ compile/build.xml | 25 + compile/yuicompressor-2.4.2.jar | Bin 0 -> 851219 bytes src/jsfeat_imgproc.js | 175 +++-- src/jsfeat_math.js | 271 +++++++- src/jsfeat_struct.js | 18 +- 9 files changed, 1618 insertions(+), 70 deletions(-) create mode 100644 LICENSE create mode 100644 build/jsfeat-min.js create mode 100644 build/jsfeat.js create mode 100644 compile/build.xml create mode 100644 compile/yuicompressor-2.4.2.jar diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d3a024d --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2012 Eugene Zatepyakin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 458fae7..749655a 100644 --- a/README.md +++ b/README.md @@ -18,23 +18,3 @@ The project aim is to explore JS/HTML5 possibilities using modern & state-of-art 2012 10 8 - **alpha** * First commit - -
-Copyright 2012 Eugene Zatepyakin
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
-and associated documentation files (the "Software"), to deal in the Software without restriction, 
-including without limitation the rights to use, copy, modify, merge, publish, distribute, 
-sublicense, and/or sell copies of the Software, and to permit persons to whom the Software 
-is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies 
-or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
-INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 
-PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE 
-FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 
-OR OTHER DEALINGS IN THE SOFTWARE.
-
\ No newline at end of file diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js new file mode 100644 index 0000000..81945aa --- /dev/null +++ b/build/jsfeat-min.js @@ -0,0 +1 @@ +var jsfeat=jsfeat||{REVISION:"ALPHA"};self.Int32Array=self.Int32Array||Array;self.Uint32Array=self.Uint32Array||Array;self.Uint8Array=self.Uint8Array||Array;self.Float32Array=self.Float32Array||Array;(function(c){var a=2,g=4,b=8,e=16;var d=(function(){function h(i,k,j){this.width=i;this.height=k;this.buffer=new ArrayBuffer(i*k*j);this.data_u8=new Uint8Array(this.buffer);this.data_i32=new Int32Array(this.buffer);this.data_f32=new Float32Array(this.buffer)}return h})();var f=(function(){function h(i){this.levels=i;this.images=new Array(i);this.pyrdown=jsfeat.imgproc.pyrdown_fast_u8}h.prototype.allocate=function(j,m,l){var k=this.levels;while(--k>=0){this.images[k]=new d(j>>k,m>>k,l)}};h.prototype.build=function(m){var l=2,k=m,j=this.images[1];this.pyrdown(k.data_u8,k.width,k.height,j.data_u8);for(;l>1){case 0:h[0]=1;f=1;break;case 1:h[0]=0.25,h[1]=0.5,h[2]=0.25;f=0.25+0.5+0.25;break;case 2:h[0]=0.0625,h[1]=0.25,h[2]=0.375,h[3]=0.25,h[4]=0.0625;f=0.0625+0.25+0.375+0.25+0.0625;break;case 3:h[0]=0.03125,h[1]=0.109375,h[2]=0.21875,h[3]=0.28125,h[4]=0.21875,h[5]=0.109375,h[6]=0.03125;f=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{l=k>0?k:((n-1)*0.5-1)*0.3+0.8;c=-0.5/(l*l);for(;e=0){j=k[z<<1];D=k[(z<<1)+1];z--;for(;;){w=(D-j)+1;if(w<=A){for(e=j+1;e<=D;e++){for(v=e;v>j&&q(o[v],o[v-1]);v--){r=o[v];o[v]=o[v-1];o[v-1]=r}}break}else{f=0;u=j;h=D;l=j+(w>>1);if(w>40){B=w>>3;F=j,E=j+B,C=j+2*B;j=q(o[F],o[E])?(q(o[E],o[C])?E:(q(o[F],o[C])?C:F)):(q(o[C],o[E])?E:(q(o[F],o[C])?F:C));F=l-B,E=l,C=l+B;l=q(o[F],o[E])?(q(o[E],o[C])?E:(q(o[F],o[C])?C:F)):(q(o[C],o[E])?E:(q(o[F],o[C])?F:C));F=D-2*B,E=D-B,C=D;D=q(o[F],o[E])?(q(o[E],o[C])?E:(q(o[F],o[C])?C:F)):(q(o[C],o[E])?E:(q(o[F],o[C])?F:C))}F=j,E=l,C=D;l=q(o[F],o[E])?(q(o[E],o[C])?E:(q(o[F],o[C])?C:F)):(q(o[C],o[E])?E:(q(o[F],o[C])?F:C));if(l!=u){r=o[l];o[l]=o[u];o[u]=r;l=u}j=s=u+1;D=g=h;for(;;){while(j<=D&&!q(o[l],o[j])){if(!q(o[j],o[l])){if(j>s){r=o[s];o[s]=o[j];o[j]=r}f=1;s++}j++}while(j<=D&&!q(o[D],o[l])){if(!q(o[l],o[D])){if(DD){break}r=o[j];o[j]=o[D];o[D]=r;f=1;j++;D--}if(f==0){j=u,D=h;for(e=j+1;e<=D;e++){for(v=e;v>j&&q(o[v],o[v-1]);v--){r=o[v];o[v]=o[v-1];o[v-1]=r}}break}w=Math.min((s-u),(j-s));for(y=0;y1){if(x>1){if(w>x){++z;k[z<<1]=u;k[(z<<1)+1]=u+w-1;j=h-x+1,D=h}else{++z;k[z<<1]=h-x+1;k[(z<<1)+1]=h;j=u,D=u+w-1}}else{j=u,D=u+w-1}}else{if(x>1){j=h-x+1,D=h}else{break}}}}}},median:function(j,c,h){var d;var e=0,i=0,f=0,g=(c+h)>>1;for(;;){if(h<=c){return j[g]}if(h==(c+1)){if(j[c]>j[h]){d=j[c];j[c]=j[h];j[h]=d}return j[g]}e=((c+h)>>1);if(j[e]>j[h]){d=j[e];j[e]=j[h];j[h]=d}if(j[c]>j[h]){d=j[c];j[c]=j[h];j[h]=d}if(j[e]>j[c]){d=j[e];j[e]=j[c];j[c]=d}i=(c+1);d=j[e];j[e]=j[i];j[i]=d;f=h;for(;;){do{++i}while(j[c]>j[i]);do{--f}while(j[f]>j[c]);if(f=g){h=(f-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{grayscale:function(g,h){var f=g.length|0,c=(f-16)|0;var d=0;for(var e=0;e<=c;e+=16,d+=4){h[d]=((g[e]*77)+(g[e+1]*151)+(g[e+2]*28))>>8;h[d+1]=((g[e+4]*77)+(g[e+5]*151)+(g[e+6]*28))>>8;h[d+2]=((g[e+8]*77)+(g[e+9]*151)+(g[e+10]*28))>>8;h[d+3]=((g[e+12]*77)+(g[e+13]*151)+(g[e+14]*28))>>8}for(;e>8}},box_blur:function(g,x,l,u,r){var f=(2*r+1)|0;var c=new Int32Array(l*f+l);var n=(l*f)|0;var q=0,v=0;var t=0,s=0,e=0,d=0;var o=0,p=0;var m=0,k=(l*r-r)|0;for(;t=f-1){for(s=f-1;s<=l-2;s+=2){e=c[n+s];d=c[n+s+1];x[k+s]=e;x[k+s+1]=d;c[n+s]=e-c[v+s];c[n+s+1]=d-c[v+s+1]}for(;s>1;var p=0,n=0,l=0,r=0,m=0,e=0,g=0,o=u<<1;var f=new Uint8Array(s+Math.max(q,u));var d=new Int32Array(s);jsfeat.math.get_gaussian_kernel(s,v,d,jsfeat.U8_t);for(;p>8;t[g+n+1]=m>>8}for(;n>8}e+=u;g+=u}for(p=0;p>8;t[g+u]=m>>8}for(;n>8}}},pyrdown_fast_u8:function(d,l,f,i){var e=l>>1,g=f>>1;var k=0,j=0,c=0,n=0,m=0;for(j=0;j>2;i[m+1]=(d[n+2]+d[n+3]+d[n+l+2]+d[n+l+3]+2)>>2}for(;k>2}c+=l<<1}},shar_derivatives:function(d,g,n,e){var f=n<<1,k=0,i=0,c=0;var q=0,o=0,m=0,p=0;var l=new Int32Array(n+2);var j=new Int32Array(n+2);for(;i0?i-1:1)*n)|0;m=((i=y){continue}w=Math.max(w,u[r+4]);y=Math.min(y,Math.max(w,u[r]));y=Math.min(y,Math.max(w,u[r+5]))}return -y-1},j=function(n,q,o,u,s){var t=19,r=0,z=n[q];var p=s,x=0,y=0,w=0;for(;r=y){continue}w=Math.max(w,u[r+5]);w=Math.max(w,u[r+6]);y=Math.min(y,Math.max(w,u[r]));y=Math.min(y,Math.max(w,u[r+7]))}return -y-1},h=function(n,q,o,u,s){var t=25,r=0,z=n[q];var p=s,x=0,y=0,w=0;for(;r=y){continue}w=Math.max(w,u[r+6]);w=Math.max(w,u[r+7]);w=Math.max(w,u[r+8]);y=Math.min(y,Math.max(w,u[r]));y=Math.min(y,Math.max(w,u[r+9]))}return -y-1};var g=20;return{set_threshold:function(n){g=Math.min(Math.max(n,0),255);for(var o=-255;o<=255;++o){f[(o+255)]=(o<-g?1:(o>g?2:0))}return g},detect:function(z,W,aq,I,D,G){if(typeof G==="undefined"){G=16}if(typeof D==="undefined"){D=3}var C=(G/2)|0,y=(G+C+1)|0;var ao=0,am=0,ak=0,E=0,V=0,ap=0;var J=new Uint8Array(W*3);var F=new Int32Array((W+1)*3);var M=k;var L=i;var A=Math.max(3,D);var Y=Math.min((aq-2),(aq-D));var B=Math.max(3,D);var Z=Math.min((W-3),(W-D));var ag=0,O=0;var P=G==16?h:(G==12?j:d);var H=f;var r=g;var X=0,an=0,at=0,av=0,T=0,U=0,au=0,Q=0,ar=0;var S=0,R=0,q=0;l(M,W,G);var al=M[0];var aj=M[1];var ai=M[2];var ah=M[3];var af=M[4];var ae=M[5];var ad=M[6];var ac=M[7];var ab=M[8];var aa=M[9];var u=M[10];var t=M[11];var s=M[12];var p=M[13];var o=M[14];var n=M[15];for(ao=0;aoC){++av;F[T+av]=am;J[U+am]=P(z,au,M,L,r);break}}else{ag=0}}}if(at&2){E=(X+r);ag=0;for(ak=0;akE){++ag;if(ag>C){++av;F[T+av]=am;J[U+am]=P(z,au,M,L,r);break}}else{ag=0}}}}}F[T+W]=av;if(ao==A){continue}ap=(ao-4+3)%3;Q=(ap*W)|0;T=(ap*(W+1))|0;ap=(ao-5+3)%3;ar=(ap*W)|0;av=F[T+W];for(ak=0;akJ[Q+S]&&q>J[Q+R]&&q>J[ar+R]&&q>J[ar+am]&&q>J[ar+S]&&q>J[U+R]&&q>J[U+am]&&q>J[U+S])){I[O*3]=am;I[O*3+1]=(ao-1);I[O*3+2]=q;O++}}}return O}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.shar_derivatives;return{track:function(n,s,am,aH,k,L,P,I,f,q){if(typeof P==="undefined"){P=30}if(typeof I==="undefined"){I=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(L-1)*0.5;var h=(L*L)|0;var X=h<<1;var r=n.images,Q=s.images;var g=r[0].data_u8,B=Q[0].data_u8;var K=r[0].width,ax=r[0].height,av=0,aD=0;var u=new Int32Array(h);var Z=new Int32Array(X);var aw=new Int32Array((K*ax)*2);var Y=0,G=0,aI=0,ap=0,aE=0,aq=0;var ai=0,aB=0,az=0,ac=0,ab=0;var A=0,v=0,V=0,T=0;var p=0,o=0,aA=0,ay=0;var O=0,N=0,H=0,F=0,af=0,ah=0,l=0;var d=0,w=0,M=0;var S=0,R=0,at=0,ar=0;var ae=14;var z=14;var W=z-5;var au=(1<<((W)-1));var aa=(1<=0;--af){ai=(1/(1<>af;aD=ax>>af;Y=av<<1;g=r[af].data_u8;B=Q[af].data_u8;w=(av-L)|0;M=(aD-L)|0;c(g,aw,av,aD);for(ah=0;ah=w)|(o<=d)|(o>=M);if(H!=0){if(af==0){I[ah]=0}continue}S=aB-p;R=az-o;aG=(((1-S)*(1-R)*aa)+0.5)|0;aF=((S*(1-R)*aa)+0.5)|0;ao=(((1-S)*R*aa)+0.5)|0;an=(aa-aG-aF-ao);al=0,ak=0,ad=0;for(F=0;F>(W));t=(aw[aI]*aG+aw[aI+2]*aF+aw[aI+Y]*ao+aw[aI+Y+2]*an);t=(((t)+m)>>(z));C=(aw[aI+1]*aG+aw[aI+3]*aF+aw[aI+Y+1]*ao+aw[aI+Y+3]*an);C=(((C)+m)>>(z));u[ap]=aj;Z[aE++]=t;Z[aE++]=C;al+=t*t;ak+=t*C;ad+=C*C}}al*=U;ak*=U;ad*=U;ag=al*ad-ak*ak;aC=(ad+al-Math.sqrt((al-ad)*(al-ad)+4*ak*ak))/X;if(aC=w)|(ay<=d)|(ay>=M);if(H!=0){if(af==0){I[ah]=0}break}S=ac-aA;R=ab-ay;aG=(((1-S)*(1-R)*aa)+0.5)|0;aF=((S*(1-R)*aa)+0.5)|0;ao=(((1-S)*R*aa)+0.5)|0;an=(aa-aG-aF-ao);at=0,ar=0;for(F=0;F>(W));aj=(aj-u[ap]);at+=aj*Z[aE++];ar+=aj*Z[aE++]}}at*=U;ar*=U;V=((ak*ar-ad*at)*ag);T=((ak*at-al*ar)*ag);ac+=V;ab+=T;aH[O]=ac+e;aH[N]=ab+e;if(V*V+T*T<=f){break}if(l>0&&Math.abs(V+A)<0.01&&Math.abs(T+v)<0.01){aH[O]-=V*0.5;aH[N]-=T*0.5;break}A=V;v=T}}}}}})();b.optical_flow_lk=a})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js new file mode 100644 index 0000000..5d90441 --- /dev/null +++ b/build/jsfeat.js @@ -0,0 +1,1157 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + */ + +// namespace ? +var jsfeat = jsfeat || { REVISION: 'ALPHA' }; + +// use typed arrays if possible +self.Int32Array = self.Int32Array || Array; +self.Uint32Array = self.Uint32Array || Array; +self.Uint8Array = self.Uint8Array || Array; +self.Float32Array = self.Float32Array || Array; +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + */ + +(function(global) { + "use strict"; + // + + var U8_t = 2, + U32_t = 4, + I32_t = 8, + F32_t = 16; + + var img_t = (function () { + function img_t(w, h, elem_size) { + this.width = w; + this.height = h; + this.buffer = new ArrayBuffer(w*h*elem_size); + this.data_u8 = new Uint8Array(this.buffer); + this.data_i32 = new Int32Array(this.buffer); + this.data_f32 = new Float32Array(this.buffer); + } + return img_t; + })(); + + var img_pyr_t = (function () { + + function img_pyr_t(l) { + this.levels = l; + this.images = new Array(l); + this.pyrdown = jsfeat.imgproc.pyrdown_fast_u8; + } + + img_pyr_t.prototype.allocate = function(start_w, start_h, elem_size) { + var i = this.levels; + while(--i >= 0) { + this.images[i] = new img_t(start_w >> i, start_h >> i, elem_size); + } + } + + img_pyr_t.prototype.build = function(src) { + var i = 2, a = src, b = this.images[1]; + this.pyrdown(a.data_u8, a.width, a.height, b.data_u8); + for(; i < this.levels; ++i) { + a = b; + b = this.images[i]; + this.pyrdown(a.data_u8, a.width, a.height, b.data_u8); + } + } + + return img_pyr_t; + })(); + + global.U8_t = U8_t; + global.U32_t = U32_t; + global.I32_t = I32_t; + global.F32_t = F32_t; + + global.img_t = img_t; + global.img_pyr_t = img_pyr_t; + +})(jsfeat); +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + */ + +(function(global) { + "use strict"; + // + + var math = (function() { + + return { + get_gaussian_kernel: function(size, sigma, kernel, data_type) { + var i=0,x=0.0,t=0.0,sigma_x=0.0,scale_2x=0.0; + var sum = 0.0; + var _kernel = new Float32Array(size); + + if((size&1) == 1 && size <= 7 && sigma <= 0) { + switch(size>>1) { + case 0: + _kernel[0] = 1.0; + sum = 1.0; + break; + case 1: + _kernel[0] = 0.25, _kernel[1] = 0.5, _kernel[2] = 0.25; + sum = 0.25+0.5+0.25; + break; + case 2: + _kernel[0] = 0.0625, _kernel[1] = 0.25, _kernel[2] = 0.375, + _kernel[3] = 0.25, _kernel[4] = 0.0625; + sum = 0.0625+0.25+0.375+0.25+0.0625; + break; + case 3: + _kernel[0] = 0.03125, _kernel[1] = 0.109375, _kernel[2] = 0.21875, + _kernel[3] = 0.28125, _kernel[4] = 0.21875, _kernel[5] = 0.109375, _kernel[6] = 0.03125; + sum = 0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125; + break; + } + } else { + sigma_x = sigma > 0 ? sigma : ((size-1)*0.5 - 1.0)*0.3 + 0.8; + scale_2x = -0.5/(sigma_x*sigma_x); + + for( ; i < size; ++i ) + { + x = i - (size-1)*0.5; + t = Math.exp(scale_2x*x*x); + + _kernel[i] = t; + sum += t; + } + } + + if(data_type & jsfeat.U8_t) { + // int based kernel + sum = 256.0/sum; + for (i = 0; i < size; ++i) { + kernel[i] = (_kernel[i] * sum + 0.5)|0; + } + } else { + // classic kernel + sum = 1.0/sum; + for (i = 0; i < size; ++i) { + kernel[i] = _kernel[i] * sum; + } + } + }, + + // The current implementation was derived from *BSD system qsort(): + // Copyright (c) 1992, 1993 + // The Regents of the University of California. All rights reserved. + qsort: function(array, low, high, cmp) { + var isort_thresh = 7; + var t; + var sp = 0,left=0,right=0,i=0,n=0,m=0,ptr=0,ptr2=0,d=0; + var left0=0,left1=0,right0=0,right1=0,pivot=0,a=0,b=0,c=0,swap_cnt=0; + + var stack = new Int32Array(48*2); + + if( (high-low+1) <= 1 ) return; + + stack[0] = low; + stack[1] = high; + + while( sp >= 0 ) { + + left = stack[sp<<1]; + right = stack[(sp<<1)+1]; + sp--; + + for(;;) { + n = (right - left) + 1; + + if( n <= isort_thresh ) { + //insert_sort: + for( ptr = left + 1; ptr <= right; ptr++ ) { + for( ptr2 = ptr; ptr2 > left && cmp(array[ptr2],array[ptr2-1]); ptr2--) { + t = array[ptr2]; + array[ptr2] = array[ptr2-1]; + array[ptr2-1] = t; + } + } + break; + } else { + swap_cnt = 0; + + left0 = left; + right0 = right; + pivot = left + (n>>1); + + if( n > 40 ) { + d = n >> 3; + a = left, b = left + d, c = left + 2*d; + left = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) + : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + + a = pivot - d, b = pivot, c = pivot + d; + pivot = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) + : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + + a = right - 2*d, b = right - d, c = right; + right = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) + : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + } + + a = left, b = pivot, c = right; + pivot = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) + : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + if( pivot != left0 ) { + t = array[pivot]; + array[pivot] = array[left0]; + array[left0] = t; + pivot = left0; + } + left = left1 = left0 + 1; + right = right1 = right0; + + for(;;) { + + while( left <= right && !cmp(array[pivot], array[left]) ) { + if( !cmp(array[left], array[pivot]) ) { + if( left > left1 ) { + t = array[left1]; + array[left1] = array[left]; + array[left] = t; + } + swap_cnt = 1; + left1++; + } + left++; + } + + while( left <= right && !cmp(array[right], array[pivot]) ) { + if( !cmp(array[pivot], array[right]) ) { + if( right < right1 ) { + t = array[right1]; + array[right1] = array[right]; + array[right] = t; + } + swap_cnt = 1; + right1--; + } + right--; + } + + if( left > right ) break; + + t = array[left]; + array[left] = array[right]; + array[right] = t; + swap_cnt = 1; + left++; + right--; + } + + if( swap_cnt == 0 ) { + left = left0, right = right0; + //goto insert_sort; + for( ptr = left + 1; ptr <= right; ptr++ ) { + for( ptr2 = ptr; ptr2 > left && cmp(array[ptr2],array[ptr2-1]); ptr2--) { + t = array[ptr2]; + array[ptr2] = array[ptr2-1]; + array[ptr2-1] = t; + } + } + break; + } + + n = Math.min( (left1 - left0), (left - left1) ); + for( i = 0; i < n; i++ ) { + t = array[left0+i]; + array[left0+i] = array[left+i-n]; + array[left+i-n] = t; + } + + n = Math.min( (right0 - right1), (right1 - right) ); + for( i = 0; i < n; i++ ) { + t = array[left+i]; + array[left+i] = array[right0+i-n+1]; + array[right0+i-n+1] = t; + } + n = (left - left1); + m = (right1 - right); + if( n > 1 ) { + if( m > 1 ) { + if( n > m ) { + ++sp; + stack[sp<<1] = left0; + stack[(sp<<1)+1] = left0 + n - 1; + left = right0 - m + 1, right = right0; + } else { + ++sp; + stack[sp<<1] = right0 - m + 1; + stack[(sp<<1)+1] = right0; + left = left0, right = left0 + n - 1; + } + } else { + left = left0, right = left0 + n - 1; + } + } + else if( m > 1 ) + left = right0 - m + 1, right = right0; + else + break; + } + } + } + }, + + median: function(array, low, high) { + var w; + var middle=0,ll=0,hh=0,median=(low+high)>>1; + for (;;) { + if (high <= low) return array[median]; + if (high == (low + 1)) { + if (array[low] > array[high]) { + w = array[low]; + array[low] = array[high]; + array[high] = w; + } + return array[median]; + } + middle = ((low + high) >> 1); + if (array[middle] > array[high]) { + w = array[middle]; + array[middle] = array[high]; + array[high] = w; + } + if (array[low] > array[high]) { + w = array[low]; + array[low] = array[high]; + array[high] = w; + } + if (array[middle] > array[low]) { + w = array[middle]; + array[middle] = array[low]; + array[low] = w; + } + ll = (low + 1); + w = array[middle]; + array[middle] = array[ll]; + array[ll] = w; + hh = high; + for (;;) { + do ++ll; while (array[low] > array[ll]); + do --hh; while (array[hh] > array[low]); + if (hh < ll) break; + w = array[ll]; + array[ll] = array[hh]; + array[hh] = w; + } + w = array[low]; + array[low] = array[hh]; + array[hh] = w; + if (hh <= median) + low = ll; + else if (hh >= median) + high = (hh - 1); + } + return 0; + } + }; + + })(); + + global.math = math; + +})(jsfeat); +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + */ + +(function(global) { + "use strict"; + // + + var imgproc = (function() { + + return { + // TODO: add support for RGB/BGR order + grayscale: function(src, dst) { + var srcLength = src.length|0, srcLength_16 = (srcLength - 16)|0; + var j = 0; + for (var i = 0; i <= srcLength_16; i += 16, j += 4) { + dst[j] = ((src[i] * 77) + (src[i + 1] * 151) + (src[i + 2] * 28)) >> 8; + dst[j + 1] = ((src[i + 4] * 77) + (src[i + 5] * 151) + (src[i + 6] * 28)) >> 8; + + dst[j + 2] = ((src[i + 8] * 77) + (src[i + 9] * 151) + (src[i + 10] * 28)) >> 8; + dst[j + 3] = ((src[i + 12] * 77) + (src[i + 13] * 151) + (src[i + 14] * 28)) >> 8; + } + for (; i < srcLength; i += 4, ++j) { + dst[j] = ((src[i] * 77) + (src[i + 1] * 151) + (src[i + 2] * 28)) >> 8; + } + }, + + box_blur: function(src, dst, w, h, hwin) { + var win = (2*hwin+1)|0; + var _buf = new Int32Array(w*win+w); + var sums = (w*win)|0; + var next_row=0,oldest_row=0; + var i=0, j=0, s0=0, s1=0; + var hsum = 0, back=0; + + var input = 0, output = (w*hwin - hwin) | 0; + + for(; i < w; ++i){ _buf[sums+i] = 0; } + + for (i=0; i= win-1) { + for(j = win-1; j <= w-2; j+=2) { + s0 = _buf[sums+j]; s1 = _buf[sums+j+1]; + dst[output+j] = s0; dst[output+j+1] = s1; + _buf[sums+j] = s0 - _buf[oldest_row+j]; + _buf[sums+j+1] = s1 - _buf[oldest_row+j+1]; + } + for(; j < w; ++j) { + s0 = _buf[sums+j]; + dst[output+j] = s0; + _buf[sums+j] = s0 - _buf[oldest_row+j]; + } + output += w; + oldest_row += w; + oldest_row = (oldest_row < sums) * oldest_row; + } + input += w; + next_row += w; + next_row = (next_row < sums) * next_row; + } + }, + + gaussian_blur_u8: function(src, dst, w, h, kernel_size, sigma) { + if (typeof sigma === "undefined") { sigma = 0.0; } + if (typeof kernel_size === "undefined") { kernel_size = 0; } + kernel_size = kernel_size == 0 ? (Math.max(1, (4.0 * sigma + 1.0 - 1e-8)|0) * 2 + 1)|0 : kernel_size; + var half_kernel = kernel_size >> 1; + var i=0,j=0,k=0,sum=0,sum1=0,sp=0,dp=0,w2=w<<1; + var buf = new Uint8Array(kernel_size + Math.max(h, w)); + // we use int based kernel + var filter = new Int32Array(kernel_size); + + jsfeat.math.get_gaussian_kernel(kernel_size, sigma, filter, jsfeat.U8_t); + + // hor pass + for (; i < h; ++i) { + sum = src[sp]; + for (j = 0; j < half_kernel; ++j) { + buf[j] = sum; + } + for (j = 0; j <= w-2; j+=2) { + buf[j + half_kernel] = src[sp+j]; + buf[j + half_kernel+1] = src[sp+j+1]; + } + for (; j < w; ++j) { + buf[j + half_kernel] = src[sp+j]; + } + sum = src[sp+w-1]; + for (j = w; j < half_kernel + w; ++j) { + buf[j + half_kernel] = sum; + } + for (j = 0; j <= w-2; j+=2) { + sum = 0, sum1 = 0; + for (k = 0; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + sum1 += buf[k + j+1] * filter[k]; + } + dst[dp+j] = sum >> 8; + dst[dp+j+1] = sum1 >> 8; + } + for (; j < w; ++j) { + sum = 0; + for (k = 0; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + } + dst[dp+j] = sum >> 8; + } + sp += w; + dp += w; + } + + // vert pass + for (i = 0; i < w; ++i) { + sum = dst[i]; + for (j = 0; j < half_kernel; ++j) { + buf[j] = sum; + } + k = i; + for (j = 0; j <= h-2; j+=2, k+=w2) { + buf[j+half_kernel] = dst[k]; + buf[j+half_kernel+1] = dst[k+w]; + } + for (; j < h; ++j, k+=w) { + buf[j+half_kernel] = dst[k]; + } + sum = dst[(h-1)*w + i]; + for (j = h; j < half_kernel + h; ++j) { + buf[j + half_kernel] = sum; + } + dp = i; + for (j = 0; j <= h-2; j+=2, dp+=w2) { + sum = 0, sum1=0; + for (k = 0; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + sum1 += buf[k + j+1] * filter[k]; + } + dst[dp] = sum >> 8; + dst[dp+w] = sum1 >> 8; + } + for (; j < h; ++j, dp+=w) { + sum = 0; + for (k = 0; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + } + dst[dp] = sum >> 8; + } + } + }, + + pyrdown_fast_u8: function(src, w, h, dst) { + var w2 = w >> 1, h2 = h >> 1; + var x=0,y=0,sptr=0,sline=0,dptr=0; + + for(y = 0; y < h2; ++y) { + sline = sptr; + for(x = 0; x <= w2-2; x+=2, dptr+=2, sline += 4) { + dst[dptr] = (src[sline] + src[sline+1] + + src[sline+w] + src[sline+w+1] + 2) >> 2; + dst[dptr+1] = (src[sline+2] + src[sline+3] + + src[sline+w+2] + src[sline+w+3] + 2) >> 2; + } + for(; x < w2; ++x, ++dptr, sline += 2) { + dst[dptr] = (src[sline] + src[sline+1] + + src[sline+w] + src[sline+w+1] + 2) >> 2; + } + sptr += w << 1; + } + }, + + shar_derivatives: function(img, dst, w, h) { + var dstep = w<<1,x=0,y=0,x1=0; + var srow0=0,srow1=0,srow2=0,drow=0; + var trow0 = new Int32Array(w+2); + var trow1 = new Int32Array(w+2); + + for(; y < h; ++y, srow1+=w) { + srow0 = ((y > 0 ? y-1 : 1)*w)|0; + srow2 = ((y < h-1 ? y+1 : h-2)*w)|0; + drow = (y*dstep)|0; + // do vertical convolution + for(x = 0, x1 = 1; x <= w-2; x+=2, x1+=2) { + trow0[x1] = ( ((img[srow0+x]) + (img[srow2+x]))*3 + (img[srow1+x])*10 ); + trow1[x1] = ( (img[srow2+x]) - (img[srow0+x]) ); + // + trow0[x1+1] = ( ((img[srow0+x+1]) + (img[srow2+x+1]))*3 + (img[srow1+x+1])*10 ); + trow1[x1+1] = ( (img[srow2+x+1]) - (img[srow0+x+1]) ); + } + for(; x < w; ++x, ++x1) { + trow0[x1] = ( ((img[srow0+x]) + (img[srow2+x]))*3 + (img[srow1+x])*10 ); + trow1[x1] = ( (img[srow2+x]) - (img[srow0+x]) ); + } + // make border + x = (w + 1)|0; + trow0[0] = trow0[1]; trow0[x] = trow0[w]; + trow1[0] = trow1[1]; trow1[x] = trow1[w]; + // do horizontal convolution, interleave the results and store them + for(x = 0; x <= w-2; x+=2) { + dst[drow++] = ( (trow0[x+2] - trow0[x]) ); + dst[drow++] = ( ((trow1[x+2] + trow1[x])*3 + trow1[x+1]*10) ); + dst[drow++] = ( (trow0[x+3] - trow0[x+1]) ); + dst[drow++] = ( ((trow1[x+3] + trow1[x+1])*3 + trow1[x+2]*10) ); + } + for(; x < w; ++x) { + dst[drow++] = ( (trow0[x+2] - trow0[x]) ); + dst[drow++] = ( ((trow1[x+2] + trow1[x])*3 + trow1[x+1]*10) ); + } + } + } + }; + })(); + + global.imgproc = imgproc; + +})(jsfeat); + +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + * This is FAST corner detector, contributed to OpenCV by the author, Edward Rosten. + */ + +/* +The references are: + * Machine learning for high-speed corner detection, + E. Rosten and T. Drummond, ECCV 2006 + * Faster and better: A machine learning approach to corner detection + E. Rosten, R. Porter and T. Drummond, PAMI, 2009 +*/ + +(function(global) { + "use strict"; + // + var fast_corners = (function() { + + var offsets16 = new Int32Array([0, 3, 1, 3, 2, 2, 3, 1, 3, 0, 3, -1, 2, -2, 1, -3, 0, -3, -1, -3, -2, -2, -3, -1, -3, 0, -3, 1, -2, 2, -1, 3]); + var offsets12 = new Int32Array([0, 2, 1, 2, 2, 1, 2, 0, 2, -1, 1, -2, 0, -2, -1, -2, -2, -1, -2, 0, -2, 1, -1, 2]); + var offsets8 = new Int32Array([0, 1, 1, 1, 1, 0, 1, -1, 0, -1, -1, -1, -1, 0, -1, 1]); + + var threshold_tab = new Uint8Array(512); + var pixel_off = new Int32Array(25); + var score_diff = new Int32Array(25); + + // private functions + var _cmp_offsets = function(pixel, step, pattern_size) { + var k = 0; + var offsets = pattern_size == 16 ? offsets16 : (pattern_size == 12 ? offsets12 : offsets8); + for( ; k < pattern_size; ++k ) { + pixel[k] = offsets[k<<1] + offsets[(k<<1)+1] * step; + } + for( ; k < 25; ++k ) { + pixel[k] = pixel[k - pattern_size]; + } + }, + + _cmp_score_8 = function(src, off, pixel, d, threshold) { + var N = 15, k = 0, v = src[off]; + var a0 = threshold,a=0,b0=0,b=0; + + for( ; k < N; ++k ) { + d[k] = v - src[off+pixel[k]]; + } + + for( k = 0; k < 8; k += 2 ) { + a = Math.min(d[k+1], d[k+2]); + + if( a <= a0 ) continue; + + a = Math.min(a, d[k+3]); + a = Math.min(a, d[k+4]); + a0 = Math.max(a0, Math.min(a, d[k])); + a0 = Math.max(a0, Math.min(a, d[k+5])); + } + + b0 = -a0; + for( k = 0; k < 8; k += 2 ) { + b = Math.max(d[k+1], d[k+2]); + b = Math.max(b, d[k+3]); + + if( b >= b0 ) continue; + + b = Math.max(b, d[k+4]); + b0 = Math.min(b0, Math.max(b, d[k])); + b0 = Math.min(b0, Math.max(b, d[k+5])); + } + + return -b0-1; + }, + + _cmp_score_12 = function(src, off, pixel, d, threshold) { + var N = 19, k = 0, v = src[off]; + var a0 = threshold,a=0,b0=0,b=0; + + for( ; k < N; ++k ) { + d[k] = v - src[off+pixel[k]]; + } + + for( k = 0; k < 12; k += 2 ) { + a = Math.min(d[k+1], d[k+2]); + + if( a <= a0 ) continue; + + a = Math.min(a, d[k+3]); + a = Math.min(a, d[k+4]); + a = Math.min(a, d[k+5]); + a = Math.min(a, d[k+6]); + a0 = Math.max(a0, Math.min(a, d[k])); + a0 = Math.max(a0, Math.min(a, d[k+7])); + } + + b0 = -a0; + for( k = 0; k < 12; k += 2 ) { + b = Math.max(d[k+1], d[k+2]); + b = Math.max(b, d[k+3]); + b = Math.max(b, d[k+4]); + + if( b >= b0 ) continue; + + b = Math.max(b, d[k+5]); + b = Math.max(b, d[k+6]); + b0 = Math.min(b0, Math.max(b, d[k])); + b0 = Math.min(b0, Math.max(b, d[k+7])); + } + + return -b0-1; + }, + + _cmp_score_16 = function(src, off, pixel, d, threshold) { + var N = 25, k = 0, v = src[off]; + var a0 = threshold,a=0,b0=0,b=0; + + for( ; k < N; ++k ) { + d[k] = v - src[off+pixel[k]]; + } + + for( k = 0; k < 16; k += 2 ) { + a = Math.min(d[k+1], d[k+2]); + a = Math.min(a, d[k+3]); + + if( a <= a0 ) continue; + + a = Math.min(a, d[k+4]); + a = Math.min(a, d[k+5]); + a = Math.min(a, d[k+6]); + a = Math.min(a, d[k+7]); + a = Math.min(a, d[k+8]); + a0 = Math.max(a0, Math.min(a, d[k])); + a0 = Math.max(a0, Math.min(a, d[k+9])); + } + + b0 = -a0; + for( k = 0; k < 16; k += 2 ) { + b = Math.max(d[k+1], d[k+2]); + b = Math.max(b, d[k+3]); + b = Math.max(b, d[k+4]); + b = Math.max(b, d[k+5]); + + if( b >= b0 ) continue; + b = Math.max(b, d[k+6]); + b = Math.max(b, d[k+7]); + b = Math.max(b, d[k+8]); + b0 = Math.min(b0, Math.max(b, d[k])); + b0 = Math.min(b0, Math.max(b, d[k+9])); + } + + return -b0-1; + }; + + var _threshold = 20; + + return { + set_threshold: function(threshold) { + _threshold = Math.min(Math.max(threshold, 0), 255); + for (var i = -255; i <= 255; ++i) { + threshold_tab[(i + 255)] = (i < -_threshold ? 1 : (i > _threshold ? 2 : 0)); + } + return _threshold; + }, + + detect: function(img, w, h, corners, border, pattern_size) { + if (typeof pattern_size === "undefined") { pattern_size = 16; } + if (typeof border === "undefined") { border = 3; } + + var K = (pattern_size/2)|0, N = (pattern_size + K + 1)|0; + var i=0, j=0, k=0, vt=0, x=0, m3=0; + var buf = new Uint8Array(w*3); + var cpbuf = new Int32Array((w+1)*3); + var pixel = pixel_off; + var sd = score_diff; + var sy = Math.max(3, border); + var ey = Math.min((h-2), (h-border)); + var sx = Math.max(3, border); + var ex = Math.min((w - 3), (w - border)); + var _count = 0, corners_cnt = 0; + var score_func = pattern_size == 16 ? _cmp_score_16 : (pattern_size == 12 ? _cmp_score_12 : _cmp_score_8); + var thresh_tab = threshold_tab; + var threshold = _threshold; + + var v=0,tab=0,d=0,ncorners=0,cornerpos=0,curr=0,ptr=0,prev=0,pprev=0; + var jp1=0,jm1=0,score=0; + + _cmp_offsets(pixel, w, pattern_size); + + // local vars are faster? + var pixel0 = pixel[0]; + var pixel1 = pixel[1]; + var pixel2 = pixel[2]; + var pixel3 = pixel[3]; + var pixel4 = pixel[4]; + var pixel5 = pixel[5]; + var pixel6 = pixel[6]; + var pixel7 = pixel[7]; + var pixel8 = pixel[8]; + var pixel9 = pixel[9]; + var pixel10 = pixel[10]; + var pixel11 = pixel[11]; + var pixel12 = pixel[12]; + var pixel13 = pixel[13]; + var pixel14 = pixel[14]; + var pixel15 = pixel[15]; + + for(i = 0; i < w*3; ++i) { + buf[i] = 0; + } + + for(i = sy; i < ey; ++i) { + ptr = ((i * w) + sx)|0; + m3 = (i - 3)%3; + curr = (m3*w)|0; + cornerpos = (m3*(w+1))|0; + for (j = 0; j < w; ++j) buf[curr+j] = 0; + ncorners = 0; + + if( i < (ey - 1) ) { + j = sx; + + for( ; j < ex; ++j, ++ptr ) { + v = img[ptr]; + tab = ( - v + 255 ); + d = ( thresh_tab[tab+img[ptr+pixel0]] | thresh_tab[tab+img[ptr+pixel8]] ); + + if( d == 0 ) { + continue; + } + + d &= ( thresh_tab[tab+img[ptr+pixel2]] | thresh_tab[tab+img[ptr+pixel10]] ); + d &= ( thresh_tab[tab+img[ptr+pixel4]] | thresh_tab[tab+img[ptr+pixel12]] ); + d &= ( thresh_tab[tab+img[ptr+pixel6]] | thresh_tab[tab+img[ptr+pixel14]] ); + + if( d == 0 ) { + continue; + } + + d &= ( thresh_tab[tab+img[ptr+pixel1]] | thresh_tab[tab+img[ptr+pixel9]] ); + d &= ( thresh_tab[tab+img[ptr+pixel3]] | thresh_tab[tab+img[ptr+pixel11]] ); + d &= ( thresh_tab[tab+img[ptr+pixel5]] | thresh_tab[tab+img[ptr+pixel13]] ); + d &= ( thresh_tab[tab+img[ptr+pixel7]] | thresh_tab[tab+img[ptr+pixel15]] ); + + if( d & 1 ) { + vt = (v - threshold); + _count = 0; + + for( k = 0; k < N; ++k ) { + x = img[(ptr+pixel[k])]; + if(x < vt) { + ++_count; + if( _count > K ) { + ++ncorners; + cpbuf[cornerpos+ncorners] = j; + buf[curr+j] = score_func(img, ptr, pixel, sd, threshold); + break; + } + } + else { + _count = 0; + } + } + } + + if( d & 2 ) { + vt = (v + threshold); + _count = 0; + + for( k = 0; k < N; ++k ) { + x = img[(ptr+pixel[k])]; + if(x > vt) { + ++_count; + if( _count > K ) { + ++ncorners; + cpbuf[cornerpos+ncorners] = j; + buf[curr+j] = score_func(img, ptr, pixel, sd, threshold); + break; + } + } + else { + _count = 0; + } + } + } + } + } + + cpbuf[cornerpos+w] = ncorners; + + if ( i == sy ) { + continue; + } + + m3 = (i - 4 + 3)%3; + prev = (m3*w)|0; + cornerpos = (m3*(w+1))|0; + m3 = (i - 5 + 3)%3; + pprev = (m3*w)|0; + + ncorners = cpbuf[cornerpos+w]; + + for( k = 0; k < ncorners; ++k ) { + j = cpbuf[cornerpos+k]; + jp1 = (j+1)|0; + jm1 = (j-1)|0; + score = buf[prev+j]; + if( (score > buf[prev+jp1] && score > buf[prev+jm1] && + score > buf[pprev+jm1] && score > buf[pprev+j] && score > buf[pprev+jp1] && + score > buf[curr+jm1] && score > buf[curr+j] && score > buf[curr+jp1]) ) { + // save corner + corners[corners_cnt*3] = j; + corners[corners_cnt*3+1] = (i-1); + corners[corners_cnt*3+2] = score; + corners_cnt++; + } + } + } // y loop + return corners_cnt; + } + }; + })(); + + global.fast_corners = fast_corners; + fast_corners.set_threshold(20); // set default + +})(jsfeat); +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + * this code is a rewrite from OpenCV's Lucas-Kanade optical flow implementation + */ + +(function(global) { + "use strict"; + // + var optical_flow_lk = (function() { + + // short link to shar deriv + var shar_deriv = jsfeat.imgproc.shar_derivatives; + + return { + track: function(prev_pyr, curr_pyr, prev_xy, curr_xy, count, win_size, max_iter, status, eps, min_eigen_threshold) { + if (typeof max_iter === "undefined") { max_iter = 30; } + if (typeof status === "undefined") { status = new Uint8Array(count); } + if (typeof eps === "undefined") { eps = 0.01; } + if (typeof min_eigen_threshold === "undefined") { min_eigen_threshold = 0.0001; } + + var half_win = (win_size-1)*0.5; + var win_area = (win_size*win_size)|0; + var win_area2 = win_area << 1; + var prev_imgs = prev_pyr.images, next_imgs = curr_pyr.images; + var img_prev=prev_imgs[0].data_u8,img_next=next_imgs[0].data_u8; + var w0 = prev_imgs[0].width, h0 = prev_imgs[0].height,lw=0,lh=0; + + var iwin_buf = new Int32Array(win_area); + var deriv_iwin = new Int32Array(win_area2); + var deriv_lev = new Int32Array((w0*h0)*2); + + var dstep=0,src=0,dsrc=0,iptr=0,diptr=0,jptr=0; + var lev_sc=0.0,prev_x=0.0,prev_y=0.0,next_x=0.0,next_y=0.0; + var prev_delta_x=0.0,prev_delta_y=0.0,delta_x=0.0,delta_y=0.0; + var iprev_x=0,iprev_y=0,inext_x=0,inext_y=0; + var i=0,j=0,x=0,y=0,level=0,ptid=0,iter=0; + var brd_tl=0,brd_r=0,brd_b=0; + var a=0.0,b=0.0,b1=0.0,b2=0.0; + + // fixed point math + var W_BITS14 = 14; + var W_BITS4 = 14; + var W_BITS1m5 = W_BITS4 - 5; + var W_BITS1m51 = (1 << ((W_BITS1m5) - 1)); + var W_BITS14_ = (1 << W_BITS14); + var W_BITS41 = (1 << ((W_BITS4) - 1)); + var FLT_SCALE = 1.0/(1 << 20); + var iw00=0,iw01=0,iw10=0,iw11=0,ival=0,ixval=0,iyval=0; + var A11=0.0,A12=0.0,A22=0.0,D=0.0,min_eig=0.0; + + var FLT_EPSILON = 0.00000011920929; + eps *= eps; + + // reset status + for(; i < count; ++i) { + status[i] = 1; + } + + var max_level = (prev_pyr.levels - 1)|0; + level = max_level; + + for(; level >= 0; --level) { + lev_sc = (1.0/(1 << level)); + lw = w0 >> level; + lh = h0 >> level; + dstep = lw << 1; + img_prev = prev_imgs[level].data_u8; + img_next = next_imgs[level].data_u8; + + brd_r = (lw - win_size)|0; + brd_b = (lh - win_size)|0; + + // calculate level derivatives + shar_deriv(img_prev, deriv_lev, lw, lh); + + // iterate through points + for(ptid = 0; ptid < count; ++ptid) { + i = ptid << 1; + j = i + 1; + prev_x = prev_xy[i]*lev_sc; + prev_y = prev_xy[j]*lev_sc; + + if( level == max_level ) { + next_x = prev_x; + next_y = prev_y; + } else { + next_x = curr_xy[i]*2.0; + next_y = curr_xy[j]*2.0; + } + curr_xy[i] = next_x; + curr_xy[j] = next_y; + + prev_x -= half_win; + prev_y -= half_win; + iprev_x = prev_x|0; + iprev_y = prev_y|0; + + // border check + x = (iprev_x <= brd_tl)|(iprev_x >= brd_r)|(iprev_y <= brd_tl)|(iprev_y >= brd_b); + if( x != 0 ) { + if( level == 0 ) { + status[ptid] = 0; + } + continue; + } + + a = prev_x - iprev_x; + b = prev_y - iprev_y; + iw00 = (((1.0 - a)*(1.0 - b)*W_BITS14_) + 0.5)|0; + iw01 = ((a*(1.0 - b)*W_BITS14_) + 0.5)|0; + iw10 = (((1.0 - a)*b*W_BITS14_) + 0.5)|0; + iw11 = (W_BITS14_ - iw00 - iw01 - iw10); + + A11 = 0.0, A12 = 0.0, A22 = 0.0; + + // extract the patch from the first image, compute covariation matrix of derivatives + for( y = 0; y < win_size; ++y ) { + src = ( (y + iprev_y)*lw + iprev_x )|0; + dsrc = src << 1; + + iptr = (y*win_size)|0; + diptr = iptr << 1; + for(x = 0 ; x < win_size; ++x, ++src, ++iptr, dsrc += 2) { + ival = ( (img_prev[src])*iw00 + (img_prev[src+1])*iw01 + + (img_prev[src+lw])*iw10 + (img_prev[src+lw+1])*iw11 ); + ival = (((ival) + W_BITS1m51) >> (W_BITS1m5)); + + ixval = ( deriv_lev[dsrc]*iw00 + deriv_lev[dsrc+2]*iw01 + + deriv_lev[dsrc+dstep]*iw10 + deriv_lev[dsrc+dstep+2]*iw11 ); + ixval = (((ixval) + W_BITS41) >> (W_BITS4)); + + iyval = ( deriv_lev[dsrc+1]*iw00 + deriv_lev[dsrc+3]*iw01 + deriv_lev[dsrc+dstep+1]*iw10 + + deriv_lev[dsrc+dstep+3]*iw11 ); + iyval = (((iyval) + W_BITS41) >> (W_BITS4)); + + iwin_buf[iptr] = ival; + deriv_iwin[diptr++] = ixval; + deriv_iwin[diptr++] = iyval; + + A11 += ixval*ixval; + A12 += ixval*iyval; + A22 += iyval*iyval; + } + } + + A11 *= FLT_SCALE; A12 *= FLT_SCALE; A22 *= FLT_SCALE; + + D = A11*A22 - A12*A12; + min_eig = (A22 + A11 - Math.sqrt((A11-A22)*(A11-A22) + 4.0*A12*A12)) / win_area2; + + if( min_eig < min_eigen_threshold || D < FLT_EPSILON ) + { + if( level == 0 ) { + status[ptid] = 0; + } + continue; + } + + D = 1.0/D; + + next_x -= half_win; + next_y -= half_win; + prev_delta_x = 0.0; + prev_delta_y = 0.0; + + for( iter = 0; iter < max_iter; ++iter ) { + inext_x = next_x|0; + inext_y = next_y|0; + + x = (inext_x <= brd_tl)|(inext_x >= brd_r)|(inext_y <= brd_tl)|(inext_y >= brd_b); + if( x != 0 ) { + if( level == 0 ) { + status[ptid] = 0; + } + break; + } + + a = next_x - inext_x; + b = next_y - inext_y; + iw00 = (((1.0 - a)*(1.0 - b)*W_BITS14_) + 0.5)|0; + iw01 = ((a*(1.0 - b)*W_BITS14_) + 0.5)|0; + iw10 = (((1.0 - a)*b*W_BITS14_) + 0.5)|0; + iw11 = (W_BITS14_ - iw00 - iw01 - iw10); + b1 = 0.0, b2 = 0.0; + + for( y = 0; y < win_size; ++y ) { + jptr = ( (y + inext_y)*lw + inext_x )|0; + + iptr = (y*win_size)|0; + diptr = iptr << 1; + for( x = 0 ; x < win_size; ++x, ++jptr, ++iptr ) { + ival = ( (img_next[jptr])*iw00 + (img_next[jptr+1])*iw01 + + (img_next[jptr+lw])*iw10 + (img_next[jptr+lw+1])*iw11 ); + ival = (((ival) + W_BITS1m51) >> (W_BITS1m5)); + ival = (ival - iwin_buf[iptr]); + + b1 += ival * deriv_iwin[diptr++]; + b2 += ival * deriv_iwin[diptr++]; + } + } + + b1 *= FLT_SCALE; + b2 *= FLT_SCALE; + + delta_x = ((A12*b2 - A22*b1) * D); + delta_y = ((A12*b1 - A11*b2) * D); + + next_x += delta_x; + next_y += delta_y; + curr_xy[i] = next_x + half_win; + curr_xy[j] = next_y + half_win; + + if( delta_x*delta_x + delta_y*delta_y <= eps ) { + break; + } + + if( iter > 0 && Math.abs(delta_x + prev_delta_x) < 0.01 && + Math.abs(delta_y + prev_delta_y) < 0.01 ) { + curr_xy[i] -= delta_x*0.5; + curr_xy[j] -= delta_y*0.5; + break; + } + + prev_delta_x = delta_x; + prev_delta_y = delta_y; + } + } // points loop + } // levels loop + } + }; + })(); + + global.optical_flow_lk = optical_flow_lk; + +})(jsfeat); diff --git a/compile/build.xml b/compile/build.xml new file mode 100644 index 0000000..df3665f --- /dev/null +++ b/compile/build.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/compile/yuicompressor-2.4.2.jar b/compile/yuicompressor-2.4.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..c29470bd0d0175ddd98e7f82079a9566c2aebf4c GIT binary patch literal 851219 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
vQWQ81PSRYsyy%}BasMgW*@C!F^ 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

mDlI*-YYr4^5Gs;u7l7((%~7noXQa; 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�y9sA{K37k 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 z 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 XH3K=u5BCppxNtlQhqw|l4gU3i%C&)! literal 0 HcmV?d00001 diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index b4999d3..b6be6d9 100644 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -8,30 +8,20 @@ var imgproc = (function() { - var RGBA_2_GRAY_LUT = new Int32Array(256*3); - return { - - init_grayscale_lut: function(blueIdx) { - var coeffs = new Int32Array(3); - coeffs[0] = 4899; coeffs[1] = 9617; coeffs[2] = 1868; - - var b = 0, g = 0, r = (1 << (14-1)); - var db = coeffs[blueIdx^2], dg = coeffs[1], dr = coeffs[blueIdx]; - for( var i = 0; i < 256; i++, b += db, g += dg, r += dr ) { - RGBA_2_GRAY_LUT[i] = b; - RGBA_2_GRAY_LUT[i+256] = g; - RGBA_2_GRAY_LUT[i+512] = r; - } - }, - + // TODO: add support for RGB/BGR order grayscale: function(src, dst) { - var srcLength = src.length | 0; - var _lut = RGBA_2_GRAY_LUT; + var srcLength = src.length|0, srcLength_16 = (srcLength - 16)|0; var j = 0; - for (var i = 0; i < srcLength; i += 4, ++j) { - dst[j] = (_lut[src[i]] + _lut[src[i+1]+256] + _lut[src[i+2]+512]) >> 14; - //dst[j] = ((src[i]*77)+(src[i+1]*151)+(src[i+2]*28)) >> 8; + for (var i = 0; i <= srcLength_16; i += 16, j += 4) { + dst[j] = ((src[i] * 77) + (src[i + 1] * 151) + (src[i + 2] * 28)) >> 8; + dst[j + 1] = ((src[i + 4] * 77) + (src[i + 5] * 151) + (src[i + 6] * 28)) >> 8; + + dst[j + 2] = ((src[i + 8] * 77) + (src[i + 9] * 151) + (src[i + 10] * 28)) >> 8; + dst[j + 3] = ((src[i + 12] * 77) + (src[i + 13] * 151) + (src[i + 14] * 28)) >> 8; + } + for (; i < srcLength; i += 4, ++j) { + dst[j] = ((src[i] * 77) + (src[i + 1] * 151) + (src[i + 2] * 28)) >> 8; } }, @@ -45,7 +35,7 @@ var input = 0, output = (w*hwin - hwin) | 0; - for(i = 0; i < w; ++i){ _buf[sums+i] = 0; } + for(; i < w; ++i){ _buf[sums+i] = 0; } for (i=0; i> 1, h2 = src.height >> 1; - var src_data = src.data_u8; - var dst_data = dst.data_u8; + gaussian_blur_u8: function(src, dst, w, h, kernel_size, sigma) { + if (typeof sigma === "undefined") { sigma = 0.0; } + if (typeof kernel_size === "undefined") { kernel_size = 0; } + kernel_size = kernel_size == 0 ? (Math.max(1, (4.0 * sigma + 1.0 - 1e-8)|0) * 2 + 1)|0 : kernel_size; + var half_kernel = kernel_size >> 1; + var i=0,j=0,k=0,sum=0,sum1=0,sp=0,dp=0,w2=w<<1; + var buf = new Uint8Array(kernel_size + Math.max(h, w)); + // we use int based kernel + var filter = new Int32Array(kernel_size); + + jsfeat.math.get_gaussian_kernel(kernel_size, sigma, filter, jsfeat.U8_t); + + // hor pass + for (; i < h; ++i) { + sum = src[sp]; + for (j = 0; j < half_kernel; ++j) { + buf[j] = sum; + } + for (j = 0; j <= w-2; j+=2) { + buf[j + half_kernel] = src[sp+j]; + buf[j + half_kernel+1] = src[sp+j+1]; + } + for (; j < w; ++j) { + buf[j + half_kernel] = src[sp+j]; + } + sum = src[sp+w-1]; + for (j = w; j < half_kernel + w; ++j) { + buf[j + half_kernel] = sum; + } + for (j = 0; j <= w-2; j+=2) { + sum = 0, sum1 = 0; + for (k = 0; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + sum1 += buf[k + j+1] * filter[k]; + } + dst[dp+j] = sum >> 8; + dst[dp+j+1] = sum1 >> 8; + } + for (; j < w; ++j) { + sum = 0; + for (k = 0; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + } + dst[dp+j] = sum >> 8; + } + sp += w; + dp += w; + } + + // vert pass + for (i = 0; i < w; ++i) { + sum = dst[i]; + for (j = 0; j < half_kernel; ++j) { + buf[j] = sum; + } + k = i; + for (j = 0; j <= h-2; j+=2, k+=w2) { + buf[j+half_kernel] = dst[k]; + buf[j+half_kernel+1] = dst[k+w]; + } + for (; j < h; ++j, k+=w) { + buf[j+half_kernel] = dst[k]; + } + sum = dst[(h-1)*w + i]; + for (j = h; j < half_kernel + h; ++j) { + buf[j + half_kernel] = sum; + } + dp = i; + for (j = 0; j <= h-2; j+=2, dp+=w2) { + sum = 0, sum1=0; + for (k = 0; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + sum1 += buf[k + j+1] * filter[k]; + } + dst[dp] = sum >> 8; + dst[dp+w] = sum1 >> 8; + } + for (; j < h; ++j, dp+=w) { + sum = 0; + for (k = 0; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + } + dst[dp] = sum >> 8; + } + } + }, + + pyrdown_fast_u8: function(src, w, h, dst) { + var w2 = w >> 1, h2 = h >> 1; var x=0,y=0,sptr=0,sline=0,dptr=0; for(y = 0; y < h2; ++y) { sline = sptr; - for(x = 0; x < w2; ++x, ++dptr) { - dst_data[dptr] = (src_data[sline] + src_data[sline+1] + - src_data[sline+w] + src_data[sline+w+1] + 2) >> 2; - sline += 2; + for(x = 0; x <= w2-2; x+=2, dptr+=2, sline += 4) { + dst[dptr] = (src[sline] + src[sline+1] + + src[sline+w] + src[sline+w+1] + 2) >> 2; + dst[dptr+1] = (src[sline+2] + src[sline+3] + + src[sline+w+2] + src[sline+w+3] + 2) >> 2; + } + for(; x < w2; ++x, ++dptr, sline += 2) { + dst[dptr] = (src[sline] + src[sline+1] + + src[sline+w] + src[sline+w+1] + 2) >> 2; } sptr += w << 1; } }, shar_derivatives: function(img, dst, w, h) { - var dstep = w<<1,x=0,y=0,x1=0,t0=0,t1=0; + var dstep = w<<1,x=0,y=0,x1=0; var srow0=0,srow1=0,srow2=0,drow=0; var trow0 = new Int32Array(w+2); var trow1 = new Int32Array(w+2); - for(y=0; y < h; ++y) { - srow1 = (y*w)|0; + for(; y < h; ++y, srow1+=w) { srow0 = ((y > 0 ? y-1 : 1)*w)|0; srow2 = ((y < h-1 ? y+1 : h-2)*w)|0; drow = (y*dstep)|0; // do vertical convolution - for(x = 0, x1 = 1; x < w; ++x,++x1) { - t0 = ( ((img[srow0+x]) + (img[srow2+x]))*3 + (img[srow1+x])*10 ); - t1 = ( (img[srow2+x]) - (img[srow0+x]) ); - trow0[x1] = t0; - trow1[x1] = t1; + for(x = 0, x1 = 1; x <= w-2; x+=2, x1+=2) { + trow0[x1] = ( ((img[srow0+x]) + (img[srow2+x]))*3 + (img[srow1+x])*10 ); + trow1[x1] = ( (img[srow2+x]) - (img[srow0+x]) ); + // + trow0[x1+1] = ( ((img[srow0+x+1]) + (img[srow2+x+1]))*3 + (img[srow1+x+1])*10 ); + trow1[x1+1] = ( (img[srow2+x+1]) - (img[srow0+x+1]) ); + } + for(; x < w; ++x, ++x1) { + trow0[x1] = ( ((img[srow0+x]) + (img[srow2+x]))*3 + (img[srow1+x])*10 ); + trow1[x1] = ( (img[srow2+x]) - (img[srow0+x]) ); } // make border x = (w + 1)|0; trow0[0] = trow0[1]; trow0[x] = trow0[w]; trow1[0] = trow1[1]; trow1[x] = trow1[w]; // do horizontal convolution, interleave the results and store them - for(x = 0; x < w; ++x) { - t0 = ( (trow0[x+2] - trow0[x]) ); - t1 = ( ((trow1[x+2] + trow1[x])*3 + trow1[x+1]*10) ); - dst[drow++] = t0; - dst[drow++] = t1; + for(x = 0; x <= w-2; x+=2) { + dst[drow++] = ( (trow0[x+2] - trow0[x]) ); + dst[drow++] = ( ((trow1[x+2] + trow1[x])*3 + trow1[x+1]*10) ); + dst[drow++] = ( (trow0[x+3] - trow0[x+1]) ); + dst[drow++] = ( ((trow1[x+3] + trow1[x+1])*3 + trow1[x+2]*10) ); + } + for(; x < w; ++x) { + dst[drow++] = ( (trow0[x+2] - trow0[x]) ); + dst[drow++] = ( ((trow1[x+2] + trow1[x])*3 + trow1[x+1]*10) ); } } } diff --git a/src/jsfeat_math.js b/src/jsfeat_math.js index 1e8d2a5..80b526b 100644 --- a/src/jsfeat_math.js +++ b/src/jsfeat_math.js @@ -9,9 +9,274 @@ var math = (function() { return { - // looks like latest V8 engine is super smart :) - // so it turns none of hacks i published here can beat Math class - // probably next time... + get_gaussian_kernel: function(size, sigma, kernel, data_type) { + var i=0,x=0.0,t=0.0,sigma_x=0.0,scale_2x=0.0; + var sum = 0.0; + var _kernel = new Float32Array(size); + + if((size&1) == 1 && size <= 7 && sigma <= 0) { + switch(size>>1) { + case 0: + _kernel[0] = 1.0; + sum = 1.0; + break; + case 1: + _kernel[0] = 0.25, _kernel[1] = 0.5, _kernel[2] = 0.25; + sum = 0.25+0.5+0.25; + break; + case 2: + _kernel[0] = 0.0625, _kernel[1] = 0.25, _kernel[2] = 0.375, + _kernel[3] = 0.25, _kernel[4] = 0.0625; + sum = 0.0625+0.25+0.375+0.25+0.0625; + break; + case 3: + _kernel[0] = 0.03125, _kernel[1] = 0.109375, _kernel[2] = 0.21875, + _kernel[3] = 0.28125, _kernel[4] = 0.21875, _kernel[5] = 0.109375, _kernel[6] = 0.03125; + sum = 0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125; + break; + } + } else { + sigma_x = sigma > 0 ? sigma : ((size-1)*0.5 - 1.0)*0.3 + 0.8; + scale_2x = -0.5/(sigma_x*sigma_x); + + for( ; i < size; ++i ) + { + x = i - (size-1)*0.5; + t = Math.exp(scale_2x*x*x); + + _kernel[i] = t; + sum += t; + } + } + + if(data_type & jsfeat.U8_t) { + // int based kernel + sum = 256.0/sum; + for (i = 0; i < size; ++i) { + kernel[i] = (_kernel[i] * sum + 0.5)|0; + } + } else { + // classic kernel + sum = 1.0/sum; + for (i = 0; i < size; ++i) { + kernel[i] = _kernel[i] * sum; + } + } + }, + + // The current implementation was derived from *BSD system qsort(): + // Copyright (c) 1992, 1993 + // The Regents of the University of California. All rights reserved. + qsort: function(array, low, high, cmp) { + var isort_thresh = 7; + var t; + var sp = 0,left=0,right=0,i=0,n=0,m=0,ptr=0,ptr2=0,d=0; + var left0=0,left1=0,right0=0,right1=0,pivot=0,a=0,b=0,c=0,swap_cnt=0; + + var stack = new Int32Array(48*2); + + if( (high-low+1) <= 1 ) return; + + stack[0] = low; + stack[1] = high; + + while( sp >= 0 ) { + + left = stack[sp<<1]; + right = stack[(sp<<1)+1]; + sp--; + + for(;;) { + n = (right - left) + 1; + + if( n <= isort_thresh ) { + //insert_sort: + for( ptr = left + 1; ptr <= right; ptr++ ) { + for( ptr2 = ptr; ptr2 > left && cmp(array[ptr2],array[ptr2-1]); ptr2--) { + t = array[ptr2]; + array[ptr2] = array[ptr2-1]; + array[ptr2-1] = t; + } + } + break; + } else { + swap_cnt = 0; + + left0 = left; + right0 = right; + pivot = left + (n>>1); + + if( n > 40 ) { + d = n >> 3; + a = left, b = left + d, c = left + 2*d; + left = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) + : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + + a = pivot - d, b = pivot, c = pivot + d; + pivot = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) + : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + + a = right - 2*d, b = right - d, c = right; + right = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) + : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + } + + a = left, b = pivot, c = right; + pivot = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) + : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + if( pivot != left0 ) { + t = array[pivot]; + array[pivot] = array[left0]; + array[left0] = t; + pivot = left0; + } + left = left1 = left0 + 1; + right = right1 = right0; + + for(;;) { + + while( left <= right && !cmp(array[pivot], array[left]) ) { + if( !cmp(array[left], array[pivot]) ) { + if( left > left1 ) { + t = array[left1]; + array[left1] = array[left]; + array[left] = t; + } + swap_cnt = 1; + left1++; + } + left++; + } + + while( left <= right && !cmp(array[right], array[pivot]) ) { + if( !cmp(array[pivot], array[right]) ) { + if( right < right1 ) { + t = array[right1]; + array[right1] = array[right]; + array[right] = t; + } + swap_cnt = 1; + right1--; + } + right--; + } + + if( left > right ) break; + + t = array[left]; + array[left] = array[right]; + array[right] = t; + swap_cnt = 1; + left++; + right--; + } + + if( swap_cnt == 0 ) { + left = left0, right = right0; + //goto insert_sort; + for( ptr = left + 1; ptr <= right; ptr++ ) { + for( ptr2 = ptr; ptr2 > left && cmp(array[ptr2],array[ptr2-1]); ptr2--) { + t = array[ptr2]; + array[ptr2] = array[ptr2-1]; + array[ptr2-1] = t; + } + } + break; + } + + n = Math.min( (left1 - left0), (left - left1) ); + for( i = 0; i < n; i++ ) { + t = array[left0+i]; + array[left0+i] = array[left+i-n]; + array[left+i-n] = t; + } + + n = Math.min( (right0 - right1), (right1 - right) ); + for( i = 0; i < n; i++ ) { + t = array[left+i]; + array[left+i] = array[right0+i-n+1]; + array[right0+i-n+1] = t; + } + n = (left - left1); + m = (right1 - right); + if( n > 1 ) { + if( m > 1 ) { + if( n > m ) { + ++sp; + stack[sp<<1] = left0; + stack[(sp<<1)+1] = left0 + n - 1; + left = right0 - m + 1, right = right0; + } else { + ++sp; + stack[sp<<1] = right0 - m + 1; + stack[(sp<<1)+1] = right0; + left = left0, right = left0 + n - 1; + } + } else { + left = left0, right = left0 + n - 1; + } + } + else if( m > 1 ) + left = right0 - m + 1, right = right0; + else + break; + } + } + } + }, + + median: function(array, low, high) { + var w; + var middle=0,ll=0,hh=0,median=(low+high)>>1; + for (;;) { + if (high <= low) return array[median]; + if (high == (low + 1)) { + if (array[low] > array[high]) { + w = array[low]; + array[low] = array[high]; + array[high] = w; + } + return array[median]; + } + middle = ((low + high) >> 1); + if (array[middle] > array[high]) { + w = array[middle]; + array[middle] = array[high]; + array[high] = w; + } + if (array[low] > array[high]) { + w = array[low]; + array[low] = array[high]; + array[high] = w; + } + if (array[middle] > array[low]) { + w = array[middle]; + array[middle] = array[low]; + array[low] = w; + } + ll = (low + 1); + w = array[middle]; + array[middle] = array[ll]; + array[ll] = w; + hh = high; + for (;;) { + do ++ll; while (array[low] > array[ll]); + do --hh; while (array[hh] > array[low]); + if (hh < ll) break; + w = array[ll]; + array[ll] = array[hh]; + array[hh] = w; + } + w = array[low]; + array[low] = array[hh]; + array[hh] = w; + if (hh <= median) + low = ll; + else if (hh >= median) + high = (hh - 1); + } + return 0; + } }; })(); diff --git a/src/jsfeat_struct.js b/src/jsfeat_struct.js index 6956b80..128a155 100644 --- a/src/jsfeat_struct.js +++ b/src/jsfeat_struct.js @@ -6,6 +6,11 @@ "use strict"; // + var U8_t = 2, + U32_t = 4, + I32_t = 8, + F32_t = 16; + var img_t = (function () { function img_t(w, h, elem_size) { this.width = w; @@ -34,16 +39,23 @@ } img_pyr_t.prototype.build = function(src) { - this.pyrdown(src, this.images[1]); - var i = 1; + var i = 2, a = src, b = this.images[1]; + this.pyrdown(a.data_u8, a.width, a.height, b.data_u8); for(; i < this.levels; ++i) { - this.pyrdown(this.images[i-1], this.images[i]); + a = b; + b = this.images[i]; + this.pyrdown(a.data_u8, a.width, a.height, b.data_u8); } } return img_pyr_t; })(); + global.U8_t = U8_t; + global.U32_t = U32_t; + global.I32_t = I32_t; + global.F32_t = F32_t; + global.img_t = img_t; global.img_pyr_t = img_pyr_t; From 9e3c8bb30019adc9c715ce55c1d43868a5d63570 Mon Sep 17 00:00:00 2001 From: Eugeny Zatepyakin Date: Sat, 17 Nov 2012 23:29:40 +0400 Subject: [PATCH 09/46] global update Added lots of new methods and modules --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 2210 ++++++++++++++++++++++++++++++--- cascades/bbf_face.js | 3 + cascades/eye.js | 7 + cascades/frontalface.js | 7 + cascades/handfist.js | 7 + cascades/handopen.js | 7 + cascades/mouth.js | 7 + cascades/profileface.js | 7 + cascades/upperbody.js | 7 + compile/build.xml | 4 + src/jsfeat.js | 2 +- src/jsfeat_bbf.js | 394 ++++++ src/jsfeat_cache.js | 71 ++ src/jsfeat_fast_corners.js | 30 +- src/jsfeat_haar.js | 290 +++++ src/jsfeat_imgproc.js | 1008 +++++++++++++-- src/jsfeat_math.js | 61 +- src/jsfeat_optical_flow_lk.js | 30 +- src/jsfeat_struct.js | 155 ++- src/jsfeat_transform.js | 172 +++ 21 files changed, 4079 insertions(+), 402 deletions(-) mode change 100644 => 100755 build/jsfeat-min.js create mode 100755 cascades/bbf_face.js create mode 100755 cascades/eye.js create mode 100755 cascades/frontalface.js create mode 100755 cascades/handfist.js create mode 100755 cascades/handopen.js create mode 100755 cascades/mouth.js create mode 100755 cascades/profileface.js create mode 100755 cascades/upperbody.js mode change 100644 => 100755 compile/build.xml mode change 100644 => 100755 src/jsfeat.js create mode 100755 src/jsfeat_bbf.js create mode 100755 src/jsfeat_cache.js mode change 100644 => 100755 src/jsfeat_fast_corners.js create mode 100755 src/jsfeat_haar.js mode change 100644 => 100755 src/jsfeat_imgproc.js mode change 100644 => 100755 src/jsfeat_math.js mode change 100644 => 100755 src/jsfeat_optical_flow_lk.js mode change 100644 => 100755 src/jsfeat_struct.js create mode 100644 src/jsfeat_transform.js diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js old mode 100644 new mode 100755 index 81945aa..daf806f --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};self.Int32Array=self.Int32Array||Array;self.Uint32Array=self.Uint32Array||Array;self.Uint8Array=self.Uint8Array||Array;self.Float32Array=self.Float32Array||Array;(function(c){var a=2,g=4,b=8,e=16;var d=(function(){function h(i,k,j){this.width=i;this.height=k;this.buffer=new ArrayBuffer(i*k*j);this.data_u8=new Uint8Array(this.buffer);this.data_i32=new Int32Array(this.buffer);this.data_f32=new Float32Array(this.buffer)}return h})();var f=(function(){function h(i){this.levels=i;this.images=new Array(i);this.pyrdown=jsfeat.imgproc.pyrdown_fast_u8}h.prototype.allocate=function(j,m,l){var k=this.levels;while(--k>=0){this.images[k]=new d(j>>k,m>>k,l)}};h.prototype.build=function(m){var l=2,k=m,j=this.images[1];this.pyrdown(k.data_u8,k.width,k.height,j.data_u8);for(;l>1){case 0:h[0]=1;f=1;break;case 1:h[0]=0.25,h[1]=0.5,h[2]=0.25;f=0.25+0.5+0.25;break;case 2:h[0]=0.0625,h[1]=0.25,h[2]=0.375,h[3]=0.25,h[4]=0.0625;f=0.0625+0.25+0.375+0.25+0.0625;break;case 3:h[0]=0.03125,h[1]=0.109375,h[2]=0.21875,h[3]=0.28125,h[4]=0.21875,h[5]=0.109375,h[6]=0.03125;f=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{l=k>0?k:((n-1)*0.5-1)*0.3+0.8;c=-0.5/(l*l);for(;e=0){j=k[z<<1];D=k[(z<<1)+1];z--;for(;;){w=(D-j)+1;if(w<=A){for(e=j+1;e<=D;e++){for(v=e;v>j&&q(o[v],o[v-1]);v--){r=o[v];o[v]=o[v-1];o[v-1]=r}}break}else{f=0;u=j;h=D;l=j+(w>>1);if(w>40){B=w>>3;F=j,E=j+B,C=j+2*B;j=q(o[F],o[E])?(q(o[E],o[C])?E:(q(o[F],o[C])?C:F)):(q(o[C],o[E])?E:(q(o[F],o[C])?F:C));F=l-B,E=l,C=l+B;l=q(o[F],o[E])?(q(o[E],o[C])?E:(q(o[F],o[C])?C:F)):(q(o[C],o[E])?E:(q(o[F],o[C])?F:C));F=D-2*B,E=D-B,C=D;D=q(o[F],o[E])?(q(o[E],o[C])?E:(q(o[F],o[C])?C:F)):(q(o[C],o[E])?E:(q(o[F],o[C])?F:C))}F=j,E=l,C=D;l=q(o[F],o[E])?(q(o[E],o[C])?E:(q(o[F],o[C])?C:F)):(q(o[C],o[E])?E:(q(o[F],o[C])?F:C));if(l!=u){r=o[l];o[l]=o[u];o[u]=r;l=u}j=s=u+1;D=g=h;for(;;){while(j<=D&&!q(o[l],o[j])){if(!q(o[j],o[l])){if(j>s){r=o[s];o[s]=o[j];o[j]=r}f=1;s++}j++}while(j<=D&&!q(o[D],o[l])){if(!q(o[l],o[D])){if(DD){break}r=o[j];o[j]=o[D];o[D]=r;f=1;j++;D--}if(f==0){j=u,D=h;for(e=j+1;e<=D;e++){for(v=e;v>j&&q(o[v],o[v-1]);v--){r=o[v];o[v]=o[v-1];o[v-1]=r}}break}w=Math.min((s-u),(j-s));for(y=0;y1){if(x>1){if(w>x){++z;k[z<<1]=u;k[(z<<1)+1]=u+w-1;j=h-x+1,D=h}else{++z;k[z<<1]=h-x+1;k[(z<<1)+1]=h;j=u,D=u+w-1}}else{j=u,D=u+w-1}}else{if(x>1){j=h-x+1,D=h}else{break}}}}}},median:function(j,c,h){var d;var e=0,i=0,f=0,g=(c+h)>>1;for(;;){if(h<=c){return j[g]}if(h==(c+1)){if(j[c]>j[h]){d=j[c];j[c]=j[h];j[h]=d}return j[g]}e=((c+h)>>1);if(j[e]>j[h]){d=j[e];j[e]=j[h];j[h]=d}if(j[c]>j[h]){d=j[c];j[c]=j[h];j[h]=d}if(j[e]>j[c]){d=j[e];j[e]=j[c];j[c]=d}i=(c+1);d=j[e];j[e]=j[i];j[i]=d;f=h;for(;;){do{++i}while(j[c]>j[i]);do{--f}while(j[f]>j[c]);if(f=g){h=(f-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{grayscale:function(g,h){var f=g.length|0,c=(f-16)|0;var d=0;for(var e=0;e<=c;e+=16,d+=4){h[d]=((g[e]*77)+(g[e+1]*151)+(g[e+2]*28))>>8;h[d+1]=((g[e+4]*77)+(g[e+5]*151)+(g[e+6]*28))>>8;h[d+2]=((g[e+8]*77)+(g[e+9]*151)+(g[e+10]*28))>>8;h[d+3]=((g[e+12]*77)+(g[e+13]*151)+(g[e+14]*28))>>8}for(;e>8}},box_blur:function(g,x,l,u,r){var f=(2*r+1)|0;var c=new Int32Array(l*f+l);var n=(l*f)|0;var q=0,v=0;var t=0,s=0,e=0,d=0;var o=0,p=0;var m=0,k=(l*r-r)|0;for(;t=f-1){for(s=f-1;s<=l-2;s+=2){e=c[n+s];d=c[n+s+1];x[k+s]=e;x[k+s+1]=d;c[n+s]=e-c[v+s];c[n+s+1]=d-c[v+s+1]}for(;s>1;var p=0,n=0,l=0,r=0,m=0,e=0,g=0,o=u<<1;var f=new Uint8Array(s+Math.max(q,u));var d=new Int32Array(s);jsfeat.math.get_gaussian_kernel(s,v,d,jsfeat.U8_t);for(;p>8;t[g+n+1]=m>>8}for(;n>8}e+=u;g+=u}for(p=0;p>8;t[g+u]=m>>8}for(;n>8}}},pyrdown_fast_u8:function(d,l,f,i){var e=l>>1,g=f>>1;var k=0,j=0,c=0,n=0,m=0;for(j=0;j>2;i[m+1]=(d[n+2]+d[n+3]+d[n+l+2]+d[n+l+3]+2)>>2}for(;k>2}c+=l<<1}},shar_derivatives:function(d,g,n,e){var f=n<<1,k=0,i=0,c=0;var q=0,o=0,m=0,p=0;var l=new Int32Array(n+2);var j=new Int32Array(n+2);for(;i0?i-1:1)*n)|0;m=((i=y){continue}w=Math.max(w,u[r+4]);y=Math.min(y,Math.max(w,u[r]));y=Math.min(y,Math.max(w,u[r+5]))}return -y-1},j=function(n,q,o,u,s){var t=19,r=0,z=n[q];var p=s,x=0,y=0,w=0;for(;r=y){continue}w=Math.max(w,u[r+5]);w=Math.max(w,u[r+6]);y=Math.min(y,Math.max(w,u[r]));y=Math.min(y,Math.max(w,u[r+7]))}return -y-1},h=function(n,q,o,u,s){var t=25,r=0,z=n[q];var p=s,x=0,y=0,w=0;for(;r=y){continue}w=Math.max(w,u[r+6]);w=Math.max(w,u[r+7]);w=Math.max(w,u[r+8]);y=Math.min(y,Math.max(w,u[r]));y=Math.min(y,Math.max(w,u[r+9]))}return -y-1};var g=20;return{set_threshold:function(n){g=Math.min(Math.max(n,0),255);for(var o=-255;o<=255;++o){f[(o+255)]=(o<-g?1:(o>g?2:0))}return g},detect:function(z,W,aq,I,D,G){if(typeof G==="undefined"){G=16}if(typeof D==="undefined"){D=3}var C=(G/2)|0,y=(G+C+1)|0;var ao=0,am=0,ak=0,E=0,V=0,ap=0;var J=new Uint8Array(W*3);var F=new Int32Array((W+1)*3);var M=k;var L=i;var A=Math.max(3,D);var Y=Math.min((aq-2),(aq-D));var B=Math.max(3,D);var Z=Math.min((W-3),(W-D));var ag=0,O=0;var P=G==16?h:(G==12?j:d);var H=f;var r=g;var X=0,an=0,at=0,av=0,T=0,U=0,au=0,Q=0,ar=0;var S=0,R=0,q=0;l(M,W,G);var al=M[0];var aj=M[1];var ai=M[2];var ah=M[3];var af=M[4];var ae=M[5];var ad=M[6];var ac=M[7];var ab=M[8];var aa=M[9];var u=M[10];var t=M[11];var s=M[12];var p=M[13];var o=M[14];var n=M[15];for(ao=0;aoC){++av;F[T+av]=am;J[U+am]=P(z,au,M,L,r);break}}else{ag=0}}}if(at&2){E=(X+r);ag=0;for(ak=0;akE){++ag;if(ag>C){++av;F[T+av]=am;J[U+am]=P(z,au,M,L,r);break}}else{ag=0}}}}}F[T+W]=av;if(ao==A){continue}ap=(ao-4+3)%3;Q=(ap*W)|0;T=(ap*(W+1))|0;ap=(ao-5+3)%3;ar=(ap*W)|0;av=F[T+W];for(ak=0;akJ[Q+S]&&q>J[Q+R]&&q>J[ar+R]&&q>J[ar+am]&&q>J[ar+S]&&q>J[U+R]&&q>J[U+am]&&q>J[U+S])){I[O*3]=am;I[O*3+1]=(ao-1);I[O*3+2]=q;O++}}}return O}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.shar_derivatives;return{track:function(n,s,am,aH,k,L,P,I,f,q){if(typeof P==="undefined"){P=30}if(typeof I==="undefined"){I=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(L-1)*0.5;var h=(L*L)|0;var X=h<<1;var r=n.images,Q=s.images;var g=r[0].data_u8,B=Q[0].data_u8;var K=r[0].width,ax=r[0].height,av=0,aD=0;var u=new Int32Array(h);var Z=new Int32Array(X);var aw=new Int32Array((K*ax)*2);var Y=0,G=0,aI=0,ap=0,aE=0,aq=0;var ai=0,aB=0,az=0,ac=0,ab=0;var A=0,v=0,V=0,T=0;var p=0,o=0,aA=0,ay=0;var O=0,N=0,H=0,F=0,af=0,ah=0,l=0;var d=0,w=0,M=0;var S=0,R=0,at=0,ar=0;var ae=14;var z=14;var W=z-5;var au=(1<<((W)-1));var aa=(1<=0;--af){ai=(1/(1<>af;aD=ax>>af;Y=av<<1;g=r[af].data_u8;B=Q[af].data_u8;w=(av-L)|0;M=(aD-L)|0;c(g,aw,av,aD);for(ah=0;ah=w)|(o<=d)|(o>=M);if(H!=0){if(af==0){I[ah]=0}continue}S=aB-p;R=az-o;aG=(((1-S)*(1-R)*aa)+0.5)|0;aF=((S*(1-R)*aa)+0.5)|0;ao=(((1-S)*R*aa)+0.5)|0;an=(aa-aG-aF-ao);al=0,ak=0,ad=0;for(F=0;F>(W));t=(aw[aI]*aG+aw[aI+2]*aF+aw[aI+Y]*ao+aw[aI+Y+2]*an);t=(((t)+m)>>(z));C=(aw[aI+1]*aG+aw[aI+3]*aF+aw[aI+Y+1]*ao+aw[aI+Y+3]*an);C=(((C)+m)>>(z));u[ap]=aj;Z[aE++]=t;Z[aE++]=C;al+=t*t;ak+=t*C;ad+=C*C}}al*=U;ak*=U;ad*=U;ag=al*ad-ak*ak;aC=(ad+al-Math.sqrt((al-ad)*(al-ad)+4*ak*ak))/X;if(aC=w)|(ay<=d)|(ay>=M);if(H!=0){if(af==0){I[ah]=0}break}S=ac-aA;R=ab-ay;aG=(((1-S)*(1-R)*aa)+0.5)|0;aF=((S*(1-R)*aa)+0.5)|0;ao=(((1-S)*R*aa)+0.5)|0;an=(aa-aG-aF-ao);at=0,ar=0;for(F=0;F>(W));aj=(aj-u[ap]);at+=aj*Z[aE++];ar+=aj*Z[aE++]}}at*=U;ar*=U;V=((ak*ar-ad*at)*ag);T=((ak*at-al*ar)*ag);ac+=V;ab+=T;aH[O]=ac+e;aH[N]=ab+e;if(V*V+T*T<=f){break}if(l>0&&Math.abs(V+A)<0.01&&Math.abs(T+v)<0.01){aH[O]-=V*0.5;aH[N]-=T*0.5;break}A=V;v=T}}}}}})();b.optical_flow_lk=a})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};self.Int32Array=self.Int32Array||Array;self.Uint32Array=self.Uint32Array||Array;self.Uint8Array=self.Uint8Array||Array;self.Float32Array=self.Float32Array||Array;(function(k){var g=256,e=512,d=1024,o=2048,n=4096;var r=1,h=2,a=3,i=4;var q=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var p=(function(){return function(s){return(s&65280)}})();var f=(function(){return function(s){return(s&255)}})();var b=(function(){return function(s){return q[(s&65280)>>8]}})();var m=(function(){function s(t){this.size=t|0;this.buffer=new ArrayBuffer(t);this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer)}return s})();var j=(function(){function s(v,t,u){this.type=p(u)|0;this.channel=f(u)|0;this.cols=v|0;this.rows=t|0;this.buffer=new m((v*b(u)*f(u))*t);this.data=this.type&g?this.buffer.u8:(this.type&e?this.buffer.i32:this.buffer.f32)}s.prototype.set_data_type=function(t){this.type=p(t)|0;this.channel=f(t)|0;delete this.data;delete this.buffer;this.buffer=new m((this.cols*b(t)*f(t))*this.rows);this.data=this.type&g?this.buffer.u8:(this.type&e?this.buffer.i32:this.buffer.f32)};return s})();var l=(function(){function s(t){this.levels=t|0;this.data=new Array(t);this.pyrdown=jsfeat.imgproc.pyrdown}s.prototype.allocate=function(t,v,w){var u=this.levels;while(--u>=0){this.data[u]=new j(t>>u,v>>u,w)}};s.prototype.build=function(w,v){if(typeof v==="undefined"){v=true}var y=2,u=w,t=this.data[0];if(!v){var x=w.cols*w.rows;while(--x>=0){t.data[x]=w.data[x]}}t=this.data[1];this.pyrdown(u,t);for(;yh.size){h.buffer=new ArrayBuffer(g);h.u8=new Uint8Array(h.buffer);h.i32=new Int32Array(h.buffer);h.f32=new Float32Array(h.buffer);h.size=g}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur:function(q,H,A,G){if(typeof G==="undefined"){G=1}var p=(2*A+1)|0;var t=q.cols,D=q.rows;var n=q.type;var g,s=(t*p+t)|0,E=q.data,o=H.data;var v=(t*p)|0;var z=0,F=0;var C=0,B=0,l,k;var x,y;var u=0,r=(t*A-A)|0;var m=jsfeat.cache.get_buffer(s<<2);if((n&jsfeat.U8_t)||(n&jsfeat.S32_t)){g=m.i32}else{g=m.f32}for(;C=p-1){for(B=p-1;B<=t-2;B+=2){l=g[v+B];k=g[v+B+1];o[r+B]=l*G;o[r+B+1]=k*G;g[v+B]=l-g[F+B];g[v+B+1]=k-g[F+B+1]}for(;B>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(i,o){var r=i.cols,m=i.rows;var l=r>>1,n=m>>1;var q=0,p=0,g=0,t=0,s=0;var k=i.data,j=o.data;for(p=0;p>2;j[s+1]=(k[t+2]+k[t+3]+k[t+r+2]+k[t+r+3]+2)>>2}for(;q>2}g+=r<<1}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var m=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var e=new Int32Array([0,2,1,2,2,1,2,0,2,-1,1,-2,0,-2,-1,-2,-2,-1,-2,0,-2,1,-1,2]);var c=new Int32Array([0,1,1,1,1,0,1,-1,0,-1,-1,-1,-1,0,-1,1]);var f=new Uint8Array(512);var k=new Int32Array(25);var i=new Int32Array(25);var l=function(o,q,r){var n=0;var p=r==16?m:(r==12?e:c);for(;n=y){continue}w=Math.max(w,u[r+4]);y=Math.min(y,Math.max(w,u[r]));y=Math.min(y,Math.max(w,u[r+5]))}return -y-1},j=function(n,q,o,u,s){var t=19,r=0,z=n[q];var p=s,x=0,y=0,w=0;for(;r=y){continue}w=Math.max(w,u[r+5]);w=Math.max(w,u[r+6]);y=Math.min(y,Math.max(w,u[r]));y=Math.min(y,Math.max(w,u[r+7]))}return -y-1},h=function(n,q,o,u,s){var t=25,r=0,z=n[q];var p=s,x=0,y=0,w=0;for(;r=y){continue}w=Math.max(w,u[r+6]);w=Math.max(w,u[r+7]);w=Math.max(w,u[r+8]);y=Math.min(y,Math.max(w,u[r]));y=Math.min(y,Math.max(w,u[r+9]))}return -y-1};var g=20;return{set_threshold:function(n){g=Math.min(Math.max(n,0),255);for(var o=-255;o<=255;++o){f[(o+255)]=(o<-g?1:(o>g?2:0))}return g},detect:function(P,L,F,I){if(typeof I==="undefined"){I=16}else{if(I!=16&&I!=12&&I!=8){I=16}}if(typeof F==="undefined"){F=3}var C=(I>>1),y=(I+C+1)|0;var z=P.data,aa=P.cols,av=P.rows;var at=0,aq=0,ao=0,G=0,Z=0,au=0;var D=jsfeat.cache.get_buffer(3*aa);var R=jsfeat.cache.get_buffer(((aa+1)*3)<<2);var M=D.u8;var H=R.i32;var Q=k;var O=i;var A=Math.max(3,F);var ac=Math.min((av-2),(av-F));var B=Math.max(3,F);var ad=Math.min((aa-3),(aa-F));var ak=0,S=0,E;var T=I==16?h:(I==12?j:d);var J=f;var r=g;var ab=0,ar=0,ax=0,az=0,X=0,Y=0,ay=0,U=0,aw=0;var W=0,V=0,q=0;l(Q,aa,I);var ap=Q[0];var an=Q[1];var am=Q[2];var al=Q[3];var aj=Q[4];var ai=Q[5];var ah=Q[6];var ag=Q[7];var af=Q[8];var ae=Q[9];var u=Q[10];var t=Q[11];var s=Q[12];var p=Q[13];var o=Q[14];var n=Q[15];for(at=0;atC){++az;H[X+az]=aq;M[Y+aq]=T(z,ay,Q,O,r);break}}else{ak=0}}}if(ax&2){G=(ab+r);ak=0;for(ao=0;aoG){++ak;if(ak>C){++az;H[X+az]=aq;M[Y+aq]=T(z,ay,Q,O,r);break}}else{ak=0}}}}}H[X+aa]=az;if(at==A){continue}au=(at-4+3)%3;U=(au*aa)|0;X=(au*(aa+1))|0;au=(at-5+3)%3;aw=(au*aa)|0;az=H[X+aa];for(ao=0;aoM[U+W]&&q>M[U+V]&&q>M[aw+V]&&q>M[aw+aq]&&q>M[aw+W]&&q>M[Y+V]&&q>M[Y+aq]&&q>M[Y+W])){E=L[S];E.x=aq,E.y=(at-1),E.score=q;S++}}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(R);return S}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(f){var l=f.stage_classifier.length;for(var g=0;g=0){d=f[r];o[r]=h|(d<<16)|(d<<8)|d}l.putImageData(v,0,0);jsfeat.cache.put_buffer(j)}this.interval=t;this.scale=Math.pow(2,1/(this.interval+1));this.next=(this.interval+1)|0;this.scale_to=(Math.log(Math.min(e.width/p,e.height/x))/Math.log(this.scale))|0;var q=document.createElement("canvas");q.width=e.width;q.height=e.height;var s=q.getContext("2d");var w=new Array((this.scale_to+this.next*2)*4);w[0]={width:e.width,height:e.height,data:e.getContext("2d").getImageData(0,0,e.width,e.height).data};var u,g;for(r=1;r<=this.interval;++r){u=(e.width/Math.pow(this.scale,r))|0;g=(e.height/Math.pow(this.scale,r))|0;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next*2;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,1,0,e.width-1,e.height,0,0,u-2,g);w[r*4+1]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,0,1,e.width,e.height-1,0,0,u,g-2);w[r*4+2]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,1,1,e.width-1,e.height-1,0,0,u-2,g-2);w[r*4+3]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}return w},detect:function(z,H){var g=this.interval;var J=this.scale;var l=this.next;var h=this.scale_to;var X=0,W=0,V=0,S=0,O=0,N=0,Q=0,w=0,F=0,E=0,R=0,Z=0,I=0,Y=0,t=0,U=0,e=0;var B=0,T,M,A,D,C,K=true,m=true;var u=1,s=1;var r=[0,1,0,1];var o=[0,0,1,1];var G=[];var v=[],d=[0,0,0];var L=[0,0,0];var P=[0,0,0];for(X=0;X>2);e=z[t+(l<<3)].height-(H.height>>2);L[0]=z[t].width<<2;L[1]=z[t+(l<<2)].width<<2;L[2]=z[t+(l<<3)].width<<2;P[0]=(z[t].width<<4)-(U<<4);P[1]=(z[t+(l<<2)].width<<3)-(U<<3);P[2]=(z[t+(l<<3)].width<<2)-(U<<2);w=H.stage_classifier.length;for(W=0;W=0){R=v[D.pz[Y]][d[D.pz[Y]]+D.px[Y]];if(R=0){S=v[D.nz[Y]][d[D.nz[Y]]+D.nx[Y]];if(S>I){if(Z<=S){m=false;break}I=S}}}B+=(m)?T[(V<<1)+1]:T[V<<1]}}if(Br[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();a.bbf=b})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index 5d90441..baaec56 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -18,60 +18,220 @@ self.Float32Array = self.Float32Array || Array; "use strict"; // - var U8_t = 2, - U32_t = 4, - I32_t = 8, - F32_t = 16; - - var img_t = (function () { - function img_t(w, h, elem_size) { - this.width = w; - this.height = h; - this.buffer = new ArrayBuffer(w*h*elem_size); - this.data_u8 = new Uint8Array(this.buffer); - this.data_i32 = new Int32Array(this.buffer); - this.data_f32 = new Float32Array(this.buffer); + // implementation from CCV project + // currently working only with u8,s32,f32 + var U8_t = 0x0100, + S32_t = 0x0200, + F32_t = 0x0400, + S64_t = 0x0800, + F64_t = 0x1000; + + var C1_t = 0x01, + C2_t = 0x02, + C3_t = 0x03, + C4_t = 0x04; + + var _data_type_size = new Int32Array([ -1, 1, 4, -1, 4, -1, -1, -1, 8, -1, -1, -1, -1, -1, -1, -1, 8 ]); + + var get_data_type = (function () { + return function(type) { + return (type & 0xFF00); } - return img_t; })(); - var img_pyr_t = (function () { + var get_channel = (function () { + return function(type) { + return (type & 0xFF); + } + })(); + + var get_data_type_size = (function () { + return function(type) { + return _data_type_size[(type & 0xFF00) >> 8]; + } + })(); - function img_pyr_t(l) { - this.levels = l; - this.images = new Array(l); - this.pyrdown = jsfeat.imgproc.pyrdown_fast_u8; + var data_t = (function () { + function data_t(size_in_bytes) { + this.size = size_in_bytes|0; + this.buffer = new ArrayBuffer(size_in_bytes); + this.u8 = new Uint8Array(this.buffer); + this.i32 = new Int32Array(this.buffer); + this.f32 = new Float32Array(this.buffer); } + return data_t; + })(); - img_pyr_t.prototype.allocate = function(start_w, start_h, elem_size) { + var matrix_t = (function () { + // columns, rows, data_type + function matrix_t(c, r, data_type) { + this.type = get_data_type(data_type)|0; + this.channel = get_channel(data_type)|0; + this.cols = c|0; + this.rows = r|0; + this.buffer = new data_t((c * get_data_type_size(data_type) * get_channel(data_type)) * r); + // data user asked for + this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : this.buffer.f32); + } + matrix_t.prototype.set_data_type = function(data_type) { + this.type = get_data_type(data_type)|0; + this.channel = get_channel(data_type)|0; + // clear references + delete this.data; + delete this.buffer; + // + this.buffer = new data_t((this.cols * get_data_type_size(data_type) * get_channel(data_type)) * this.rows); + this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : this.buffer.f32); + } + return matrix_t; + })(); + + var pyramid_t = (function () { + + function pyramid_t(levels) { + this.levels = levels|0; + this.data = new Array(levels); + this.pyrdown = jsfeat.imgproc.pyrdown; + } + + pyramid_t.prototype.allocate = function(start_w, start_h, data_type) { var i = this.levels; while(--i >= 0) { - this.images[i] = new img_t(start_w >> i, start_h >> i, elem_size); + this.data[i] = new matrix_t(start_w >> i, start_h >> i, data_type); } } - img_pyr_t.prototype.build = function(src) { - var i = 2, a = src, b = this.images[1]; - this.pyrdown(a.data_u8, a.width, a.height, b.data_u8); + pyramid_t.prototype.build = function(input, skip_first_level) { + if (typeof skip_first_level === "undefined") { skip_first_level = true; } + // just copy data to first level + var i = 2, a = input, b = this.data[0]; + if(!skip_first_level) { + var j=input.cols*input.rows; + while(--j >= 0) { + b.data[j] = input.data[j]; + } + } + b = this.data[1]; + this.pyrdown(a, b); for(; i < this.levels; ++i) { a = b; - b = this.images[i]; - this.pyrdown(a.data_u8, a.width, a.height, b.data_u8); + b = this.data[i]; + this.pyrdown(a, b); } } - return img_pyr_t; + return pyramid_t; })(); + var point2d_t = (function () { + function point2d_t(x,y,score,level) { + if (typeof x === "undefined") { x=0; } + if (typeof y === "undefined") { y=0; } + if (typeof score === "undefined") { score=0; } + if (typeof level === "undefined") { level=0; } + + this.x = x; + this.y = y; + this.score = score; + this.level = level; + } + return point2d_t; + })(); + + + // data types global.U8_t = U8_t; - global.U32_t = U32_t; - global.I32_t = I32_t; + global.S32_t = S32_t; global.F32_t = F32_t; - - global.img_t = img_t; - global.img_pyr_t = img_pyr_t; + global.S64_t = S64_t; + global.F64_t = F64_t; + // data channels + global.C1_t = C1_t; + global.C2_t = C2_t; + global.C3_t = C3_t; + global.C4_t = C4_t; + + global.get_data_type = get_data_type; + global.get_channel = get_channel; + global.get_data_type_size = get_data_type_size; + + global.data_t = data_t; + global.matrix_t = matrix_t; + global.pyramid_t = pyramid_t; + global.point2d_t = point2d_t; })(jsfeat); +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + */ + +(function(global) { + "use strict"; + // + + var cache = (function() { + + // very primitive array cache, still need testing if it helps + // of course V8 has its own powerful cache sys but i'm not sure + // it caches several multichannel 640x480 buffer creations each frame + + var _pool_node_t = (function () { + function _pool_node_t(size_in_bytes) { + this.next = null; + this.size = size_in_bytes|0; + this.buffer = new ArrayBuffer(size_in_bytes); + this.u8 = new Uint8Array(this.buffer); + this.i32 = new Int32Array(this.buffer); + this.f32 = new Float32Array(this.buffer); + } + return _pool_node_t; + })(); + + var _pool_head, _pool_tail; + var _pool_size = 0; + + return { + + allocate: function(capacity, data_size) { + _pool_head = _pool_tail = new _pool_node_t(data_size); + for (var i = 0; i < capacity; ++i) { + var node = new _pool_node_t(data_size); + _pool_tail = _pool_tail.next = node; + + _pool_size++; + } + }, + + get_buffer: function(size_in_bytes) { + // assume we have enough free nodes + var node = _pool_head; + _pool_head = _pool_head.next; + _pool_size--; + + if(size_in_bytes > node.size) { + node.buffer = new ArrayBuffer(size_in_bytes); + node.u8 = new Uint8Array(node.buffer); + node.i32 = new Int32Array(node.buffer); + node.f32 = new Float32Array(node.buffer); + node.size = size_in_bytes; + } + + return node; + }, + + put_buffer: function(node) { + _pool_tail = _pool_tail.next = node; + _pool_size++; + } + }; + })(); + + global.cache = cache; + // for now we dont need more than 30 buffers + // if having cache sys really helps we can add auto extending sys + cache.allocate(30, 640*4); + +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -82,11 +242,14 @@ self.Float32Array = self.Float32Array || Array; var math = (function() { + var qsort_stack = new Int32Array(48*2); + return { get_gaussian_kernel: function(size, sigma, kernel, data_type) { var i=0,x=0.0,t=0.0,sigma_x=0.0,scale_2x=0.0; var sum = 0.0; - var _kernel = new Float32Array(size); + var kern_node = jsfeat.cache.get_buffer(size<<2); + var _kernel = kern_node.f32;//new Float32Array(size); if((size&1) == 1 && size <= 7 && sigma <= 0) { switch(size>>1) { @@ -136,6 +299,8 @@ self.Float32Array = self.Float32Array || Array; kernel[i] = _kernel[i] * sum; } } + + jsfeat.cache.put_buffer(kern_node); }, // The current implementation was derived from *BSD system qsort(): @@ -143,11 +308,11 @@ self.Float32Array = self.Float32Array || Array; // The Regents of the University of California. All rights reserved. qsort: function(array, low, high, cmp) { var isort_thresh = 7; - var t; + var t,ta,tb,tc; var sp = 0,left=0,right=0,i=0,n=0,m=0,ptr=0,ptr2=0,d=0; var left0=0,left1=0,right0=0,right1=0,pivot=0,a=0,b=0,c=0,swap_cnt=0; - var stack = new Int32Array(48*2); + var stack = qsort_stack; if( (high-low+1) <= 1 ) return; @@ -182,22 +347,26 @@ self.Float32Array = self.Float32Array || Array; if( n > 40 ) { d = n >> 3; - a = left, b = left + d, c = left + 2*d; - left = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) - : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + a = left, b = left + d, c = left + (d<<1); + ta = array[a],tb = array[b],tc = array[c]; + left = cmp(ta, tb) ? (cmp(tb, tc) ? b : (cmp(ta, tc) ? c : a)) + : (cmp(tc, tb) ? b : (cmp(ta, tc) ? a : c)); a = pivot - d, b = pivot, c = pivot + d; - pivot = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) - : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); - - a = right - 2*d, b = right - d, c = right; - right = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) - : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + ta = array[a],tb = array[b],tc = array[c]; + pivot = cmp(ta, tb) ? (cmp(tb, tc) ? b : (cmp(ta, tc) ? c : a)) + : (cmp(tc, tb) ? b : (cmp(ta, tc) ? a : c)); + + a = right - (d<<1), b = right - d, c = right; + ta = array[a],tb = array[b],tc = array[c]; + right = cmp(ta, tb) ? (cmp(tb, tc) ? b : (cmp(ta, tc) ? c : a)) + : (cmp(tc, tb) ? b : (cmp(ta, tc) ? a : c)); } a = left, b = pivot, c = right; - pivot = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) - : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + ta = array[a],tb = array[b],tc = array[c]; + pivot = cmp(ta, tb) ? (cmp(tb, tc) ? b : (cmp(ta, tc) ? c : a)) + : (cmp(tc, tb) ? b : (cmp(ta, tc) ? a : c)); if( pivot != left0 ) { t = array[pivot]; array[pivot] = array[left0]; @@ -207,10 +376,10 @@ self.Float32Array = self.Float32Array || Array; left = left1 = left0 + 1; right = right1 = right0; + ta = array[pivot]; for(;;) { - - while( left <= right && !cmp(array[pivot], array[left]) ) { - if( !cmp(array[left], array[pivot]) ) { + while( left <= right && !cmp(ta, array[left]) ) { + if( !cmp(array[left], ta) ) { if( left > left1 ) { t = array[left1]; array[left1] = array[left]; @@ -222,8 +391,8 @@ self.Float32Array = self.Float32Array || Array; left++; } - while( left <= right && !cmp(array[right], array[pivot]) ) { - if( !cmp(array[pivot], array[right]) ) { + while( left <= right && !cmp(array[right], ta) ) { + if( !cmp(ta, array[right]) ) { if( right < right1 ) { t = array[right1]; array[right1] = array[right]; @@ -259,17 +428,19 @@ self.Float32Array = self.Float32Array || Array; } n = Math.min( (left1 - left0), (left - left1) ); - for( i = 0; i < n; i++ ) { + m = (left-n)|0; + for( i = 0; i < n; ++i,++m ) { t = array[left0+i]; - array[left0+i] = array[left+i-n]; - array[left+i-n] = t; + array[left0+i] = array[m]; + array[m] = t; } n = Math.min( (right0 - right1), (right1 - right) ); - for( i = 0; i < n; i++ ) { + m = (right0-n+1)|0; + for( i = 0; i < n; ++i,++m ) { t = array[left+i]; - array[left+i] = array[right0+i-n+1]; - array[right0+i-n+1] = t; + array[left+i] = array[m]; + array[m] = t; } n = (left - left1); m = (right1 - right); @@ -362,73 +533,618 @@ self.Float32Array = self.Float32Array || Array; * @author Eugene Zatepyakin / http://inspirit.ru/ */ +(function(global) { + "use strict"; + // + + var transform = (function() { + // + return { + affine_3point_transform: function(mat, src_x0, src_y0, dst_x0, dst_y0, + src_x1, src_y1, dst_x1, dst_y1, + src_x2, src_y2, dst_x2, dst_y2) { + // we need linear algebra module first + }, + + perspective_4point_transform: function(mat, src_x0, src_y0, dst_x0, dst_y0, + src_x1, src_y1, dst_x1, dst_y1, + src_x2, src_y2, dst_x2, dst_y2, + src_x3, src_y3, dst_x3, dst_y3) { + var t1 = src_x0; + var t2 = src_x2; + var t4 = src_y1; + var t5 = t1 * t2 * t4; + var t6 = src_y3; + var t7 = t1 * t6; + var t8 = t2 * t7; + var t9 = src_y2; + var t10 = t1 * t9; + var t11 = src_x1; + var t14 = src_y0; + var t15 = src_x3; + var t16 = t14 * t15; + var t18 = t16 * t11; + var t20 = t15 * t11 * t9; + var t21 = t15 * t4; + var t24 = t15 * t9; + var t25 = t2 * t4; + var t26 = t6 * t2; + var t27 = t6 * t11; + var t28 = t9 * t11; + var t30 = 1.0 / (t21-t24 - t25 + t26 - t27 + t28); + var t32 = t1 * t15; + var t35 = t14 * t11; + var t41 = t4 * t1; + var t42 = t6 * t41; + var t43 = t14 * t2; + var t46 = t16 * t9; + var t48 = t14 * t9 * t11; + var t51 = t4 * t6 * t2; + var t55 = t6 * t14; + var Hr0 = -(t8-t5 + t10 * t11 - t11 * t7 - t16 * t2 + t18 - t20 + t21 * t2) * t30; + var Hr1 = (t5 - t8 - t32 * t4 + t32 * t9 + t18 - t2 * t35 + t27 * t2 - t20) * t30; + var Hr2 = t1; + var Hr3 = (-t9 * t7 + t42 + t43 * t4 - t16 * t4 + t46 - t48 + t27 * t9 - t51) * t30; + var Hr4 = (-t42 + t41 * t9 - t55 * t2 + t46 - t48 + t55 * t11 + t51 - t21 * t9) * t30; + var Hr5 = t14; + var Hr6 = (-t10 + t41 + t43 - t35 + t24 - t21 - t26 + t27) * t30; + var Hr7 = (-t7 + t10 + t16 - t43 + t27 - t28 - t21 + t25) * t30; + + t1 = dst_x0; + t2 = dst_x2; + t4 = dst_y1; + t5 = t1 * t2 * t4; + t6 = dst_y3; + t7 = t1 * t6; + t8 = t2 * t7; + t9 = dst_y2; + t10 = t1 * t9; + t11 = dst_x1; + t14 = dst_y0; + t15 = dst_x3; + t16 = t14 * t15; + t18 = t16 * t11; + t20 = t15 * t11 * t9; + t21 = t15 * t4; + t24 = t15 * t9; + t25 = t2 * t4; + t26 = t6 * t2; + t27 = t6 * t11; + t28 = t9 * t11; + t30 = 1.0 / (t21-t24 - t25 + t26 - t27 + t28); + t32 = t1 * t15; + t35 = t14 * t11; + t41 = t4 * t1; + t42 = t6 * t41; + t43 = t14 * t2; + t46 = t16 * t9; + t48 = t14 * t9 * t11; + t51 = t4 * t6 * t2; + t55 = t6 * t14; + var Hl0 = -(t8-t5 + t10 * t11 - t11 * t7 - t16 * t2 + t18 - t20 + t21 * t2) * t30; + var Hl1 = (t5 - t8 - t32 * t4 + t32 * t9 + t18 - t2 * t35 + t27 * t2 - t20) * t30; + var Hl2 = t1; + var Hl3 = (-t9 * t7 + t42 + t43 * t4 - t16 * t4 + t46 - t48 + t27 * t9 - t51) * t30; + var Hl4 = (-t42 + t41 * t9 - t55 * t2 + t46 - t48 + t55 * t11 + t51 - t21 * t9) * t30; + var Hl5 = t14; + var Hl6 = (-t10 + t41 + t43 - t35 + t24 - t21 - t26 + t27) * t30; + var Hl7 = (-t7 + t10 + t16 - t43 + t27 - t28 - t21 + t25) * t30; + + // the following code computes R = Hl * inverse Hr + t2 = Hr4-Hr7*Hr5; + t4 = Hr0*Hr4; + t5 = Hr0*Hr5; + t7 = Hr3*Hr1; + t8 = Hr2*Hr3; + t10 = Hr1*Hr6; + var t12 = Hr2*Hr6; + t15 = 1.0 / (t4-t5*Hr7-t7+t8*Hr7+t10*Hr5-t12*Hr4); + t18 = -Hr3+Hr5*Hr6; + var t23 = -Hr3*Hr7+Hr4*Hr6; + t28 = -Hr1+Hr2*Hr7; + var t31 = Hr0-t12; + t35 = Hr0*Hr7-t10; + t41 = -Hr1*Hr5+Hr2*Hr4; + var t44 = t5-t8; + var t47 = t4-t7; + t48 = t2*t15; + var t49 = t28*t15; + var t50 = t41*t15; + mat[0] = Hl0*t48+Hl1*(t18*t15)-Hl2*(t23*t15); + mat[1] = Hl0*t49+Hl1*(t31*t15)-Hl2*(t35*t15); + mat[2] = -Hl0*t50-Hl1*(t44*t15)+Hl2*(t47*t15); + mat[3] = Hl3*t48+Hl4*(t18*t15)-Hl5*(t23*t15); + mat[4] = Hl3*t49+Hl4*(t31*t15)-Hl5*(t35*t15); + mat[5] = -Hl3*t50-Hl4*(t44*t15)+Hl5*(t47*t15); + mat[6] = Hl6*t48+Hl7*(t18*t15)-t23*t15; + mat[7] = Hl6*t49+Hl7*(t31*t15)-t35*t15; + mat[8] = -Hl6*t50-Hl7*(t44*t15)+t47*t15; + }, + + invert_affine_transform: function(src, dst) { + var m11 = src[0], m12 = src[1], m13 = src[2]; + var m21 = src[3], m22 = src[4], m23 = src[5]; + + var det = 1.0 / (m11 * m22 - m12 * m21); + + dst[0] = det * m22; + dst[1] = det * -m12; + dst[2] = det * (m12*m23 - m13*m22); + + dst[3] = det * -m21; + dst[4] = det * m11; + dst[5] = det * (m13*m21 - m11*m23); + }, + + invert_perspective_transform: function(src, dst) { + var m11 = src[0], m12 = src[1], m13 = src[2]; + var m21 = src[3], m22 = src[4], m23 = src[5]; + var m31 = src[6], m32 = src[7], m33 = src[8]; + + var det = 1.0 / (m11 * (m22*m33 - m23*m32) - m12 * (m21*m33 - m23*m31) + m13 * (m21*m32 - m22*m31)); + + dst[0] = det * (m22*m33 - m23*m32); + dst[1] = det * (m13*m32 - m12*m33); + dst[2] = det * (m12*m23 - m13*m22); + + dst[3] = det * (m23*m31 - m21*m33); + dst[4] = det * (m11*m33 - m13*m31); + dst[5] = det * (m13*m21 - m11*m23); + + dst[6] = det * (m21*m32 - m22*m31); + dst[7] = det * (m12*m31 - m11*m32); + dst[8] = det * (m11*m22 - m12*m21); + } + }; + })(); + + global.transform = transform; + +})(jsfeat); +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + */ + (function(global) { "use strict"; // var imgproc = (function() { + var _resample_u8 = function(src, dst, nw, nh) { + var xofs = [],xofs_count=0; + var ch=src.channel,w=src.cols,h=src.rows; + var src_d=src.data,dst_d=dst.data; + var scale_x = w / nw, scale_y = h / nh; + var inv_scale_256 = (scale_x * scale_y * 0x10000)|0; + var dx=0,dy=0,sx=0,sy=0,sx1=0,sx2=0,i=0,k=0,fsx1=0.0,fsx2=0.0; + var a=0,b=0,dxn=0,alpha=0,beta=0,beta1=0; + + var buf_node = jsfeat.cache.get_buffer((nw*ch)<<2); + var sum_node = jsfeat.cache.get_buffer((nw*ch)<<2); + + var buf = buf_node.i32; + var sum = sum_node.i32; + + for (; dx < nw; dx++) { + fsx1 = dx * scale_x, fsx2 = fsx1 + scale_x; + sx1 = (fsx1 + 1.0 - 1e-6)|0, sx2 = fsx2|0; + sx1 = Math.min(sx1, w - 1); + sx2 = Math.min(sx2, w - 1); + + if(sx1 > fsx1) { + xofs[xofs_count++] = {"si": ((sx1 - 1)*ch)|0, + "di": (dx * ch)|0, + "alpha": ((sx1 - fsx1) * 0x100)|0}; + } + for(sx = sx1; sx < sx2; sx++){ + xofs[xofs_count++] = {"si": (sx * ch)|0, + "di": (dx * ch)|0, + "alpha": 256}; + } + if(fsx2 - sx2 > 1e-3) { + xofs[xofs_count++] = {"si": (sx2 * ch)|0, + "di": (dx * ch)|0, + "alpha": ((fsx2 - sx2) * 256)|0}; + } + } + + for (dx = 0; dx < nw * ch; dx++) { + buf[dx] = sum[dx] = 0; + } + dy = 0; + for (sy = 0; sy < h; sy++) { + a = w * sy; + for (k = 0; k < xofs_count; k++) { + dxn = xofs[k].di; + alpha = xofs[k].alpha; + sx1 = xofs[k].si; + for (i = 0; i < ch; i++) { + buf[dxn + i] += src_d[a+sx1+i] * alpha; + } + } + if ((dy + 1) * scale_y <= sy + 1 || sy == h - 1) { + beta = (Math.max(sy + 1 - (dy + 1) * scale_y, 0.0) * 256)|0; + beta1 = 256 - beta; + b = nw * dy; + if (beta <= 0) { + for (dx = 0; dx < nw * ch; dx++) { + dst_d[b+dx] = Math.min(Math.max((sum[dx] + buf[dx] * 256) / inv_scale_256, 0), 255); + sum[dx] = buf[dx] = 0; + } + } else { + for (dx = 0; dx < nw * ch; dx++) { + dst_d[b+dx] = Math.min(Math.max((sum[dx] + buf[dx] * beta1) / inv_scale_256, 0), 255); + sum[dx] = buf[dx] * beta; + buf[dx] = 0; + } + } + dy++; + } else { + for(dx = 0; dx < nw * ch; dx++) { + sum[dx] += buf[dx] * 256; + buf[dx] = 0; + } + } + } + + jsfeat.cache.put_buffer(sum_node); + jsfeat.cache.put_buffer(buf_node); + } + + var _resample = function(src, dst, nw, nh) { + var xofs = [],xofs_count=0; + var ch=src.channel,w=src.cols,h=src.rows; + var src_d=src.data,dst_d=dst.data; + var scale_x = w / nw, scale_y = h / nh; + var scale = 1.0 / (scale_x * scale_y); + var dx=0,dy=0,sx=0,sy=0,sx1=0,sx2=0,i=0,k=0,fsx1=0.0,fsx2=0.0; + var a=0,b=0,dxn=0,alpha=0.0,beta=0.0,beta1=0.0; + + var buf_node = jsfeat.cache.get_buffer((nw*ch)<<2); + var sum_node = jsfeat.cache.get_buffer((nw*ch)<<2); + + var buf = buf_node.f32; + var sum = sum_node.f32; + + for (; dx < nw; dx++) { + fsx1 = dx * scale_x, fsx2 = fsx1 + scale_x; + sx1 = (fsx1 + 1.0 - 1e-6)|0, sx2 = fsx2|0; + sx1 = Math.min(sx1, w - 1); + sx2 = Math.min(sx2, w - 1); + + if(sx1 > fsx1) { + xofs[xofs_count++] = {"si": ((sx1 - 1)*ch)|0, + "di": (dx * ch)|0, + "alpha": (sx1 - fsx1) * scale}; + } + for(sx = sx1; sx < sx2; sx++){ + xofs[xofs_count++] = {"si": (sx * ch)|0, + "di": (dx * ch)|0, + "alpha": scale}; + } + if(fsx2 - sx2 > 1e-3) { + xofs[xofs_count++] = {"si": (sx2 * ch)|0, + "di": (dx * ch)|0, + "alpha": (fsx2 - sx2) * scale}; + } + } + + for (dx = 0; dx < nw * ch; dx++) { + buf[dx] = sum[dx] = 0; + } + dy = 0; + for (sy = 0; sy < h; sy++) { + a = w * sy; + for (k = 0; k < xofs_count; k++) { + dxn = xofs[k].di; + alpha = xofs[k].alpha; + sx1 = xofs[k].si; + for (i = 0; i < ch; i++) { + buf[dxn + i] += src_d[a+sx1+i] * alpha; + } + } + if ((dy + 1) * scale_y <= sy + 1 || sy == h - 1) { + beta = Math.max(sy + 1 - (dy + 1) * scale_y, 0.0); + beta1 = 1.0 - beta; + b = nw * dy; + if (Math.abs(beta) < 1e-3) { + for (dx = 0; dx < nw * ch; dx++) { + dst_d[b+dx] = sum[dx] + buf[dx]; + sum[dx] = buf[dx] = 0; + } + } else { + for (dx = 0; dx < nw * ch; dx++) { + dst_d[b+dx] = sum[dx] + buf[dx] * beta1; + sum[dx] = buf[dx] * beta; + buf[dx] = 0; + } + } + dy++; + } else { + for(dx = 0; dx < nw * ch; dx++) { + sum[dx] += buf[dx]; + buf[dx] = 0; + } + } + } + jsfeat.cache.put_buffer(sum_node); + jsfeat.cache.put_buffer(buf_node); + } + + var _convol_u8 = function(buf, src_d, dst_d, w, h, filter, kernel_size, half_kernel) { + var i=0,j=0,k=0,sp=0,dp=0,sum=0,sum1=0,sum2=0,sum3=0,f0=filter[0],fk=0; + var w2=w<<1,w3=w*3,w4=w<<2; + // hor pass + for (; i < h; ++i) { + sum = src_d[sp]; + for (j = 0; j < half_kernel; ++j) { + buf[j] = sum; + } + for (j = 0; j <= w-2; j+=2) { + buf[j + half_kernel] = src_d[sp+j]; + buf[j + half_kernel+1] = src_d[sp+j+1]; + } + for (; j < w; ++j) { + buf[j + half_kernel] = src_d[sp+j]; + } + sum = src_d[sp+w-1]; + for (j = w; j < half_kernel + w; ++j) { + buf[j + half_kernel] = sum; + } + for (j = 0; j <= w-4; j+=4) { + sum = buf[j] * f0, + sum1 = buf[j+1] * f0, + sum2 = buf[j+2] * f0, + sum3 = buf[j+3] * f0; + for (k = 1; k < kernel_size; ++k) { + fk = filter[k]; + sum += buf[k + j] * fk; + sum1 += buf[k + j+1] * fk; + sum2 += buf[k + j+2] * fk; + sum3 += buf[k + j+3] * fk; + } + dst_d[dp+j] = sum >> 8; + dst_d[dp+j+1] = sum1 >> 8; + dst_d[dp+j+2] = sum2 >> 8; + dst_d[dp+j+3] = sum3 >> 8; + } + for (; j < w; ++j) { + sum = buf[j] * f0; + for (k = 1; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + } + dst_d[dp+j] = sum >> 8; + } + sp += w; + dp += w; + } + + // vert pass + for (i = 0; i < w; ++i) { + sum = dst_d[i]; + for (j = 0; j < half_kernel; ++j) { + buf[j] = sum; + } + k = i; + for (j = 0; j <= h-2; j+=2, k+=w2) { + buf[j+half_kernel] = dst_d[k]; + buf[j+half_kernel+1] = dst_d[k+w]; + } + for (; j < h; ++j, k+=w) { + buf[j+half_kernel] = dst_d[k]; + } + sum = dst_d[(h-1)*w + i]; + for (j = h; j < half_kernel + h; ++j) { + buf[j + half_kernel] = sum; + } + dp = i; + for (j = 0; j <= h-4; j+=4, dp+=w4) { + sum = buf[j] * f0, + sum1 = buf[j+1] * f0, + sum2 = buf[j+2] * f0, + sum3 = buf[j+3] * f0; + for (k = 1; k < kernel_size; ++k) { + fk = filter[k]; + sum += buf[k + j] * fk; + sum1 += buf[k + j+1] * fk; + sum2 += buf[k + j+2] * fk; + sum3 += buf[k + j+3] * fk; + } + dst_d[dp] = sum >> 8; + dst_d[dp+w] = sum1 >> 8; + dst_d[dp+w2] = sum2 >> 8; + dst_d[dp+w3] = sum3 >> 8; + } + for (; j < h; ++j, dp+=w) { + sum = buf[j] * f0; + for (k = 1; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + } + dst_d[dp] = sum >> 8; + } + } + } + + var _convol = function(buf, src_d, dst_d, w, h, filter, kernel_size, half_kernel) { + var i=0,j=0,k=0,sp=0,dp=0,sum=0.0,sum1=0.0,sum2=0.0,sum3=0.0,f0=filter[0],fk=0.0; + var w2=w<<1,w3=w*3,w4=w<<2; + // hor pass + for (; i < h; ++i) { + sum = src_d[sp]; + for (j = 0; j < half_kernel; ++j) { + buf[j] = sum; + } + for (j = 0; j <= w-2; j+=2) { + buf[j + half_kernel] = src_d[sp+j]; + buf[j + half_kernel+1] = src_d[sp+j+1]; + } + for (; j < w; ++j) { + buf[j + half_kernel] = src_d[sp+j]; + } + sum = src_d[sp+w-1]; + for (j = w; j < half_kernel + w; ++j) { + buf[j + half_kernel] = sum; + } + for (j = 0; j <= w-4; j+=4) { + sum = buf[j] * f0, + sum1 = buf[j+1] * f0, + sum2 = buf[j+2] * f0, + sum3 = buf[j+3] * f0; + for (k = 1; k < kernel_size; ++k) { + fk = filter[k]; + sum += buf[k + j] * fk; + sum1 += buf[k + j+1] * fk; + sum2 += buf[k + j+2] * fk; + sum3 += buf[k + j+3] * fk; + } + dst_d[dp+j] = sum; + dst_d[dp+j+1] = sum1; + dst_d[dp+j+2] = sum2; + dst_d[dp+j+3] = sum3; + } + for (; j < w; ++j) { + sum = buf[j] * f0; + for (k = 1; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + } + dst_d[dp+j] = sum; + } + sp += w; + dp += w; + } + + // vert pass + for (i = 0; i < w; ++i) { + sum = dst_d[i]; + for (j = 0; j < half_kernel; ++j) { + buf[j] = sum; + } + k = i; + for (j = 0; j <= h-2; j+=2, k+=w2) { + buf[j+half_kernel] = dst_d[k]; + buf[j+half_kernel+1] = dst_d[k+w]; + } + for (; j < h; ++j, k+=w) { + buf[j+half_kernel] = dst_d[k]; + } + sum = dst_d[(h-1)*w + i]; + for (j = h; j < half_kernel + h; ++j) { + buf[j + half_kernel] = sum; + } + dp = i; + for (j = 0; j <= h-4; j+=4, dp+=w4) { + sum = buf[j] * f0, + sum1 = buf[j+1] * f0, + sum2 = buf[j+2] * f0, + sum3 = buf[j+3] * f0; + for (k = 1; k < kernel_size; ++k) { + fk = filter[k]; + sum += buf[k + j] * fk; + sum1 += buf[k + j+1] * fk; + sum2 += buf[k + j+2] * fk; + sum3 += buf[k + j+3] * fk; + } + dst_d[dp] = sum; + dst_d[dp+w] = sum1; + dst_d[dp+w2] = sum2; + dst_d[dp+w3] = sum3; + } + for (; j < h; ++j, dp+=w) { + sum = buf[j] * f0; + for (k = 1; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + } + dst_d[dp] = sum; + } + } + } + return { // TODO: add support for RGB/BGR order + // for raw arrays grayscale: function(src, dst) { var srcLength = src.length|0, srcLength_16 = (srcLength - 16)|0; var j = 0; - for (var i = 0; i <= srcLength_16; i += 16, j += 4) { - dst[j] = ((src[i] * 77) + (src[i + 1] * 151) + (src[i + 2] * 28)) >> 8; - dst[j + 1] = ((src[i + 4] * 77) + (src[i + 5] * 151) + (src[i + 6] * 28)) >> 8; + var coeff_r = 4899, coeff_g = 9617, coeff_b = 1868; - dst[j + 2] = ((src[i + 8] * 77) + (src[i + 9] * 151) + (src[i + 10] * 28)) >> 8; - dst[j + 3] = ((src[i + 12] * 77) + (src[i + 13] * 151) + (src[i + 14] * 28)) >> 8; + for (var i = 0; i <= srcLength_16; i += 16, j += 4) { + dst[j] = (src[i] * coeff_r + src[i+1] * coeff_g + src[i+2] * coeff_b + 8192) >> 14; + dst[j + 1] = (src[i+4] * coeff_r + src[i+5] * coeff_g + src[i+6] * coeff_b + 8192) >> 14; + dst[j + 2] = (src[i+8] * coeff_r + src[i+9] * coeff_g + src[i+10] * coeff_b + 8192) >> 14; + dst[j + 3] = (src[i+12] * coeff_r + src[i+13] * coeff_g + src[i+14] * coeff_b + 8192) >> 14; } for (; i < srcLength; i += 4, ++j) { - dst[j] = ((src[i] * 77) + (src[i + 1] * 151) + (src[i + 2] * 28)) >> 8; + dst[j] = (src[i] * coeff_r + src[i+1] * coeff_g + src[i+2] * coeff_b + 8192) >> 14; + } + }, + // derived from CCV library + resample: function(src, dst, nw, nh) { + var h=src.rows,w=src.cols; + if (h > nh && w > nw) { + // using the fast alternative (fix point scale, 0x100 to avoid overflow) + if (src.type&jsfeat.U8_t && dst.type&jsfeat.U8_t && h * w / (nh * nw) < 0x100) { + _resample_u8(src, dst, nw, nh); + } else { + _resample(src, dst, nw, nh); + } } }, - box_blur: function(src, dst, w, h, hwin) { + box_blur: function(src, dst, hwin, scale) { + if (typeof scale === "undefined") { scale = 1; } var win = (2*hwin+1)|0; - var _buf = new Int32Array(w*win+w); + var w = src.cols, h = src.rows; + var data_type = src.type; + var _buf,buf_sz=(w*win+w)|0,src_d=src.data,dst_d=dst.data; var sums = (w*win)|0; var next_row=0,oldest_row=0; - var i=0, j=0, s0=0, s1=0; - var hsum = 0, back=0; - + var i=0, j=0, s0, s1; + var hsum,back; var input = 0, output = (w*hwin - hwin) | 0; + // select correct data type + var buf_node = jsfeat.cache.get_buffer(buf_sz<<2); + if((data_type&jsfeat.U8_t) || (data_type&jsfeat.S32_t)) { + _buf = buf_node.i32; + } else { + _buf = buf_node.f32; + } + for(; i < w; ++i){ _buf[sums+i] = 0; } for (i=0; i= win-1) { for(j = win-1; j <= w-2; j+=2) { s0 = _buf[sums+j]; s1 = _buf[sums+j+1]; - dst[output+j] = s0; dst[output+j+1] = s1; + dst_d[output+j] = s0*scale; dst_d[output+j+1] = s1*scale; _buf[sums+j] = s0 - _buf[oldest_row+j]; _buf[sums+j+1] = s1 - _buf[oldest_row+j+1]; } for(; j < w; ++j) { s0 = _buf[sums+j]; - dst[output+j] = s0; + dst_d[output+j] = s0*scale; _buf[sums+j] = s0 - _buf[oldest_row+j]; } output += w; @@ -439,120 +1155,86 @@ self.Float32Array = self.Float32Array || Array; next_row += w; next_row = (next_row < sums) * next_row; } + + jsfeat.cache.put_buffer(buf_node); }, - gaussian_blur_u8: function(src, dst, w, h, kernel_size, sigma) { + gaussian_blur: function(src, dst, kernel_size, sigma) { if (typeof sigma === "undefined") { sigma = 0.0; } if (typeof kernel_size === "undefined") { kernel_size = 0; } - kernel_size = kernel_size == 0 ? (Math.max(1, (4.0 * sigma + 1.0 - 1e-8)|0) * 2 + 1)|0 : kernel_size; + kernel_size = kernel_size == 0 ? (Math.max(1, (4.0 * sigma + 1.0 - 1e-8)) * 2 + 1)|0 : kernel_size; var half_kernel = kernel_size >> 1; - var i=0,j=0,k=0,sum=0,sum1=0,sp=0,dp=0,w2=w<<1; - var buf = new Uint8Array(kernel_size + Math.max(h, w)); - // we use int based kernel - var filter = new Int32Array(kernel_size); - - jsfeat.math.get_gaussian_kernel(kernel_size, sigma, filter, jsfeat.U8_t); - - // hor pass - for (; i < h; ++i) { - sum = src[sp]; - for (j = 0; j < half_kernel; ++j) { - buf[j] = sum; - } - for (j = 0; j <= w-2; j+=2) { - buf[j + half_kernel] = src[sp+j]; - buf[j + half_kernel+1] = src[sp+j+1]; - } - for (; j < w; ++j) { - buf[j + half_kernel] = src[sp+j]; - } - sum = src[sp+w-1]; - for (j = w; j < half_kernel + w; ++j) { - buf[j + half_kernel] = sum; - } - for (j = 0; j <= w-2; j+=2) { - sum = 0, sum1 = 0; - for (k = 0; k < kernel_size; ++k) { - sum += buf[k + j] * filter[k]; - sum1 += buf[k + j+1] * filter[k]; - } - dst[dp+j] = sum >> 8; - dst[dp+j+1] = sum1 >> 8; - } - for (; j < w; ++j) { - sum = 0; - for (k = 0; k < kernel_size; ++k) { - sum += buf[k + j] * filter[k]; - } - dst[dp+j] = sum >> 8; - } - sp += w; - dp += w; + var w = src.cols, h = src.rows; + var data_type = src.type, is_u8 = data_type&jsfeat.U8_t; + var src_d = src.data, dst_d = dst.data; + var buf,filter,buf_sz=(kernel_size + Math.max(h, w))|0; + + var buf_node = jsfeat.cache.get_buffer(buf_sz<<2); + var filt_node = jsfeat.cache.get_buffer(kernel_size<<2); + + if(is_u8) { + buf = buf_node.u8; + filter = filt_node.i32; + } else if(data_type&jsfeat.S32_t) { + buf = buf_node.i32; + filter = filt_node.f32; + } else { + buf = buf_node.f32; + filter = filt_node.f32; } - // vert pass - for (i = 0; i < w; ++i) { - sum = dst[i]; - for (j = 0; j < half_kernel; ++j) { - buf[j] = sum; - } - k = i; - for (j = 0; j <= h-2; j+=2, k+=w2) { - buf[j+half_kernel] = dst[k]; - buf[j+half_kernel+1] = dst[k+w]; - } - for (; j < h; ++j, k+=w) { - buf[j+half_kernel] = dst[k]; - } - sum = dst[(h-1)*w + i]; - for (j = h; j < half_kernel + h; ++j) { - buf[j + half_kernel] = sum; - } - dp = i; - for (j = 0; j <= h-2; j+=2, dp+=w2) { - sum = 0, sum1=0; - for (k = 0; k < kernel_size; ++k) { - sum += buf[k + j] * filter[k]; - sum1 += buf[k + j+1] * filter[k]; - } - dst[dp] = sum >> 8; - dst[dp+w] = sum1 >> 8; - } - for (; j < h; ++j, dp+=w) { - sum = 0; - for (k = 0; k < kernel_size; ++k) { - sum += buf[k + j] * filter[k]; - } - dst[dp] = sum >> 8; - } + jsfeat.math.get_gaussian_kernel(kernel_size, sigma, filter, data_type); + + if(is_u8) { + _convol_u8(buf, src_d, dst_d, w, h, filter, kernel_size, half_kernel); + } else { + _convol(buf, src_d, dst_d, w, h, filter, kernel_size, half_kernel); } - }, - pyrdown_fast_u8: function(src, w, h, dst) { + jsfeat.cache.put_buffer(buf_node); + jsfeat.cache.put_buffer(filt_node); + }, + // assume we always need it for u8 image + pyrdown: function(src, dst) { + var w = src.cols, h = src.rows; var w2 = w >> 1, h2 = h >> 1; var x=0,y=0,sptr=0,sline=0,dptr=0; + var src_d = src.data, dst_d = dst.data; for(y = 0; y < h2; ++y) { sline = sptr; for(x = 0; x <= w2-2; x+=2, dptr+=2, sline += 4) { - dst[dptr] = (src[sline] + src[sline+1] + - src[sline+w] + src[sline+w+1] + 2) >> 2; - dst[dptr+1] = (src[sline+2] + src[sline+3] + - src[sline+w+2] + src[sline+w+3] + 2) >> 2; + dst_d[dptr] = (src_d[sline] + src_d[sline+1] + + src_d[sline+w] + src_d[sline+w+1] + 2) >> 2; + dst_d[dptr+1] = (src_d[sline+2] + src_d[sline+3] + + src_d[sline+w+2] + src_d[sline+w+3] + 2) >> 2; } for(; x < w2; ++x, ++dptr, sline += 2) { - dst[dptr] = (src[sline] + src[sline+1] + - src[sline+w] + src[sline+w+1] + 2) >> 2; + dst_d[dptr] = (src_d[sline] + src_d[sline+1] + + src_d[sline+w] + src_d[sline+w+1] + 2) >> 2; } sptr += w << 1; } }, - shar_derivatives: function(img, dst, w, h) { - var dstep = w<<1,x=0,y=0,x1=0; + // dst: [gx,gy,...] + scharr_derivatives: function(src, dst) { + var w = src.cols, h = src.rows; + var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; var srow0=0,srow1=0,srow2=0,drow=0; - var trow0 = new Int32Array(w+2); - var trow1 = new Int32Array(w+2); + var trow0,trow1; + var img = src.data; + + var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); + var buf1_node = jsfeat.cache.get_buffer((w+2)<<2); + + if(src.type&jsfeat.U8_t || src.type&jsfeat.S32_t) { + trow0 = buf0_node.i32; + trow1 = buf1_node.i32; + } else { + trow0 = buf0_node.f32; + trow1 = buf1_node.f32; + } for(; y < h; ++y, srow1+=w) { srow0 = ((y > 0 ? y-1 : 1)*w)|0; @@ -560,32 +1242,461 @@ self.Float32Array = self.Float32Array || Array; drow = (y*dstep)|0; // do vertical convolution for(x = 0, x1 = 1; x <= w-2; x+=2, x1+=2) { - trow0[x1] = ( ((img[srow0+x]) + (img[srow2+x]))*3 + (img[srow1+x])*10 ); - trow1[x1] = ( (img[srow2+x]) - (img[srow0+x]) ); + a = img[srow0+x], b = img[srow2+x]; + trow0[x1] = ( (a + b)*3 + (img[srow1+x])*10 ); + trow1[x1] = ( b - a ); // - trow0[x1+1] = ( ((img[srow0+x+1]) + (img[srow2+x+1]))*3 + (img[srow1+x+1])*10 ); - trow1[x1+1] = ( (img[srow2+x+1]) - (img[srow0+x+1]) ); + a = img[srow0+x+1], b = img[srow2+x+1]; + trow0[x1+1] = ( (a + b)*3 + (img[srow1+x+1])*10 ); + trow1[x1+1] = ( b - a ); } for(; x < w; ++x, ++x1) { - trow0[x1] = ( ((img[srow0+x]) + (img[srow2+x]))*3 + (img[srow1+x])*10 ); - trow1[x1] = ( (img[srow2+x]) - (img[srow0+x]) ); + a = img[srow0+x], b = img[srow2+x]; + trow0[x1] = ( (a + b)*3 + (img[srow1+x])*10 ); + trow1[x1] = ( b - a ); } // make border x = (w + 1)|0; trow0[0] = trow0[1]; trow0[x] = trow0[w]; trow1[0] = trow1[1]; trow1[x] = trow1[w]; // do horizontal convolution, interleave the results and store them - for(x = 0; x <= w-2; x+=2) { - dst[drow++] = ( (trow0[x+2] - trow0[x]) ); - dst[drow++] = ( ((trow1[x+2] + trow1[x])*3 + trow1[x+1]*10) ); - dst[drow++] = ( (trow0[x+3] - trow0[x+1]) ); - dst[drow++] = ( ((trow1[x+3] + trow1[x+1])*3 + trow1[x+2]*10) ); + for(x = 0; x <= w-4; x+=4) { + a = trow1[x+2], b = trow1[x+1], c = trow1[x+3], d = trow1[x+4], + e = trow0[x+2], f = trow0[x+3]; + dst[drow++] = ( e - trow0[x] ); + dst[drow++] = ( (a + trow1[x])*3 + b*10 ); + dst[drow++] = ( f - trow0[x+1] ); + dst[drow++] = ( (c + b)*3 + a*10 ); + + dst[drow++] = ( (trow0[x+4] - e) ); + dst[drow++] = ( ((d + a)*3 + c*10) ); + dst[drow++] = ( (trow0[x+5] - f) ); + dst[drow++] = ( ((trow1[x+5] + c)*3 + d*10) ); } for(; x < w; ++x) { dst[drow++] = ( (trow0[x+2] - trow0[x]) ); dst[drow++] = ( ((trow1[x+2] + trow1[x])*3 + trow1[x+1]*10) ); } } + jsfeat.cache.put_buffer(buf0_node); + jsfeat.cache.put_buffer(buf1_node); + }, + + // compute gradient using Sobel kernel [1 2 1] * [-1 0 1]^T + // dst: [gx,gy,...] + sobel_derivatives: function(src, dst) { + var w = src.cols, h = src.rows; + var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; + var srow0=0,srow1=0,srow2=0,drow=0; + var trow0,trow1; + var img = src.data; + + var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); + var buf1_node = jsfeat.cache.get_buffer((w+2)<<2); + + if(src.type&jsfeat.U8_t || src.type&jsfeat.S32_t) { + trow0 = buf0_node.i32; + trow1 = buf1_node.i32; + } else { + trow0 = buf0_node.f32; + trow1 = buf1_node.f32; + } + + for(; y < h; ++y, srow1+=w) { + srow0 = ((y > 0 ? y-1 : 1)*w)|0; + srow2 = ((y < h-1 ? y+1 : h-2)*w)|0; + drow = (y*dstep)|0; + // do vertical convolution + for(x = 0, x1 = 1; x <= w-2; x+=2, x1+=2) { + a = img[srow0+x], b = img[srow2+x]; + trow0[x1] = ( (a + b) + (img[srow1+x]*2) ); + trow1[x1] = ( b - a ); + // + a = img[srow0+x+1], b = img[srow2+x+1]; + trow0[x1+1] = ( (a + b) + (img[srow1+x+1]*2) ); + trow1[x1+1] = ( b - a ); + } + for(; x < w; ++x, ++x1) { + a = img[srow0+x], b = img[srow2+x]; + trow0[x1] = ( (a + b) + (img[srow1+x]*2) ); + trow1[x1] = ( b - a ); + } + // make border + x = (w + 1)|0; + trow0[0] = trow0[1]; trow0[x] = trow0[w]; + trow1[0] = trow1[1]; trow1[x] = trow1[w]; + // do horizontal convolution, interleave the results and store them + for(x = 0; x <= w-4; x+=4) { + a = trow1[x+2], b = trow1[x+1], c = trow1[x+3], d = trow1[x+4], + e = trow0[x+2], f = trow0[x+3]; + dst[drow++] = ( e - trow0[x] ); + dst[drow++] = ( a + trow1[x] + b*2 ); + dst[drow++] = ( f - trow0[x+1] ); + dst[drow++] = ( c + b + a*2 ); + + dst[drow++] = ( trow0[x+4] - e ); + dst[drow++] = ( d + a + c*2 ); + dst[drow++] = ( trow0[x+5] - f ); + dst[drow++] = ( trow1[x+5] + c + d*2 ); + } + for(; x < w; ++x) { + dst[drow++] = ( trow0[x+2] - trow0[x] ); + dst[drow++] = ( trow1[x+2] + trow1[x] + trow1[x+1]*2 ); + } + } + jsfeat.cache.put_buffer(buf0_node); + jsfeat.cache.put_buffer(buf1_node); + }, + + // please note: + // dst_(type) size should be cols = src.cols+1, rows = src.rows+1 + compute_integral_image: function(src, dst_sum, dst_sqsum, dst_tilted) { + var w0=src.cols,h0=src.rows,src_d=src.data; + var w1=w0+1; + var s,s2,p,pup,i=0,j=0,v,k; + + if(dst_sum && dst_sqsum) { + // fill first row with zeros + for(; i < w1; ++i) { + dst_sum[i] = 0, dst_sqsum[i] = 0; + } + p = (w1+1)|0, pup = 1; + for(i = 0, k = 0; i < h0; ++i, ++p, ++pup) { + s = s2 = 0; + for(j = 0; j <= w0-2; j+=2, k+=2, p+=2, pup+=2) { + v = src_d[k]; + s += v, s2 += v*v; + dst_sum[p] = dst_sum[pup] + s; + dst_sqsum[p] = dst_sqsum[pup] + s2; + + v = src_d[k+1]; + s += v, s2 += v*v; + dst_sum[p+1] = dst_sum[pup+1] + s; + dst_sqsum[p+1] = dst_sqsum[pup+1] + s2; + } + for(; j < w0; ++j, ++k, ++p, ++pup) { + v = src_d[k]; + s += v, s2 += v*v; + dst_sum[p] = dst_sum[pup] + s; + dst_sqsum[p] = dst_sqsum[pup] + s2; + } + } + } else if(dst_sum) { + // fill first row with zeros + for(; i < w1; ++i) { + dst_sum[i] = 0; + } + p = (w1+1)|0, pup = 1; + for(i = 0, k = 0; i < h0; ++i, ++p, ++pup) { + s = 0; + for(j = 0; j <= w0-2; j+=2, k+=2, p+=2, pup+=2) { + s += src_d[k]; + dst_sum[p] = dst_sum[pup] + s; + s += src_d[k+1]; + dst_sum[p+1] = dst_sum[pup+1] + s; + } + for(; j < w0; ++j, ++k, ++p, ++pup) { + s += src_d[k]; + dst_sum[p] = dst_sum[pup] + s; + } + } + } else if(dst_sqsum) { + // fill first row with zeros + for(; i < w1; ++i) { + dst_sqsum[i] = 0; + } + p = (w1+1)|0, pup = 1; + for(i = 0, k = 0; i < h0; ++i, ++p, ++pup) { + s2 = 0; + for(j = 0; j <= w0-2; j+=2, k+=2, p+=2, pup+=2) { + v = src_d[k]; + s2 += v*v; + dst_sqsum[p] = dst_sqsum[pup] + s2; + v = src_d[k+1]; + s2 += v*v; + dst_sqsum[p+1] = dst_sqsum[pup+1] + s2; + } + for(; j < w0; ++j, ++k, ++p, ++pup) { + v = src_d[k]; + s2 += v*v; + dst_sqsum[p] = dst_sqsum[pup] + s2; + } + } + } + + if(dst_tilted) { + // fill first row with zeros + for(i = 0; i < w1; ++i) { + dst_tilted[i] = 0; + } + // diagonal + p = (w1+1)|0, pup = 0; + for(i = 0, k = 0; i < h0; ++i, ++p, ++pup) { + for(j = 0; j <= w0-2; j+=2, k+=2, p+=2, pup+=2) { + dst_tilted[p] = src_d[k] + dst_tilted[pup]; + dst_tilted[p+1] = src_d[k+1] + dst_tilted[pup+1]; + } + for(; j < w0; ++j, ++k, ++p, ++pup) { + dst_tilted[p] = src_d[k] + dst_tilted[pup]; + } + } + // diagonal + p = (w1+w0)|0, pup = w0; + for(i = 0; i < h0; ++i, p+=w1, pup+=w1) { + dst_tilted[p] += dst_tilted[pup]; + } + + for(j = w0-1; j > 0; --j) { + p = j+h0*w1, pup=p-w1; + for(i = h0; i > 0; --i, p-=w1, pup-=w1) { + dst_tilted[p] += dst_tilted[pup] + dst_tilted[pup+1]; + } + } + } + }, + equalize_histogram: function(src, dst) { + var w=src.cols,h=src.rows,src_d=src.data,dst_d=dst.data,size=w*h; + var i=0,prev=0,hist0,norm; + + var hist0_node = jsfeat.cache.get_buffer(256<<2); + hist0 = hist0_node.i32; + for(; i < 256; ++i) hist0[i] = 0; + for (i = 0; i < size; ++i) { + ++hist0[src_d[i]]; + } + + prev = hist0[0]; + for (i = 1; i < 256; ++i) { + prev = hist0[i] += prev; + } + + norm = 255 / size; + for (i = 0; i < size; ++i) { + dst_d[i] = (hist0[src_d[i]] * norm + 0.5)|0; + } + jsfeat.cache.put_buffer(hist0_node); + }, + + canny: function(src, dst, low_thresh, high_thresh) { + var w=src.cols,h=src.rows,src_d=src.data,dst_d=dst.data; + var i=0,j=0,grad=0,w2=w<<1,_grad=0,suppress=0,f=0,x=0,y=0,s=0; + var tg22x=0,tg67x=0; + + // cache buffers + var dxdy_node = jsfeat.cache.get_buffer((h * w2)<<2); + var buf_node = jsfeat.cache.get_buffer((3 * (w + 2))<<2); + var map_node = jsfeat.cache.get_buffer(((h+2) * (w + 2))<<2); + var stack_node = jsfeat.cache.get_buffer((h * w)<<2); + + + var buf = buf_node.i32; + var map = map_node.i32; + var stack = stack_node.i32; + var dxdy = dxdy_node.i32; + var row0=1,row1=(w+2+1)|0,row2=(2*(w+2)+1)|0,map_w=(w+2)|0,map_i=(map_w+1)|0,stack_i=0; + + this.sobel_derivatives(src, dxdy); + + if(low_thresh > high_thresh) { + i = low_thresh; + low_thresh = high_thresh; + high_thresh = i; + } + + i = (3 * (w + 2))|0; + while(--i>=0) { + buf[i] = 0; + } + + i = ((h+2) * (w + 2))|0; + while(--i>=0) { + map[i] = 0; + } + + for (; j < w; ++j, grad+=2) { + //buf[row1+j] = Math.abs(dxdy[grad]) + Math.abs(dxdy[grad+1]); + x = dxdy[grad], y = dxdy[grad+1]; + //buf[row1+j] = x*x + y*y; + buf[row1+j] = ((x ^ (x >> 31)) - (x >> 31)) + ((y ^ (y >> 31)) - (y >> 31)); + } + + for(i=1; i <= h; ++i, grad+=w2) { + if(i == h) { + j = row2+w; + while(--j>=row2) { + buf[j] = 0; + } + } else { + for (j = 0; j < w; j++) { + //buf[row2+j] = Math.abs(dxdy[grad+(j<<1)]) + Math.abs(dxdy[grad+(j<<1)+1]); + x = dxdy[grad+(j<<1)], y = dxdy[grad+(j<<1)+1]; + //buf[row2+j] = x*x + y*y; + buf[row2+j] = ((x ^ (x >> 31)) - (x >> 31)) + ((y ^ (y >> 31)) - (y >> 31)); + } + } + _grad = (grad - w2)|0; + map[map_i-1] = 0; + suppress = 0; + for(j = 0; j < w; ++j, _grad+=2) { + f = buf[row1+j]; + if (f > low_thresh) { + x = dxdy[_grad]; + y = dxdy[_grad+1]; + s = x ^ y; + // seems ot be faster than Math.abs + x = ((x ^ (x >> 31)) - (x >> 31))|0; + y = ((y ^ (y >> 31)) - (y >> 31))|0; + //x * tan(22.5) x * tan(67.5) == 2 * x + x * tan(22.5) + tg22x = x * 13573; + tg67x = tg22x + ((x + x) << 15); + y <<= 15; + if (y < tg22x) { + if (f > buf[row1+j-1] && f >= buf[row1+j+1]) { + if (f > high_thresh && !suppress && map[map_i+j-map_w] != 2) { + map[map_i+j] = 2; + suppress = 1; + stack[stack_i++] = map_i + j; + } else { + map[map_i+j] = 1; + } + continue; + } + } else if (y > tg67x) { + if (f > buf[row0+j] && f >= buf[row2+j]) { + if (f > high_thresh && !suppress && map[map_i+j-map_w] != 2) { + map[map_i+j] = 2; + suppress = 1; + stack[stack_i++] = map_i + j; + } else { + map[map_i+j] = 1; + } + continue; + } + } else { + s = s < 0 ? -1 : 1; + if (f > buf[row0+j-s] && f > buf[row2+j+s]) { + if (f > high_thresh && !suppress && map[map_i+j-map_w] != 2) { + map[map_i+j] = 2; + suppress = 1; + stack[stack_i++] = map_i + j; + } else { + map[map_i+j] = 1; + } + continue; + } + } + } + map[map_i+j] = 0; + suppress = 0; + } + map[map_i+w] = 0; + map_i += map_w; + j = row0; + row0 = row1; + row1 = row2; + row2 = j; + } + + j = map_i - map_w - 1; + for(i = 0; i < map_w; ++i, ++j) { + map[j] = 0; + } + // path following + while(stack_i > 0) { + map_i = stack[--stack_i]; + map_i -= map_w+1; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + map_i += 1; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + map_i += 1; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + map_i += map_w; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + map_i -= 2; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + map_i += map_w; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + map_i += 1; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + map_i += 1; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + } + + map_i = map_w + 1; + row0 = 0; + for(i = 0; i < h; ++i, map_i+=map_w) { + for(j = 0; j < w; ++j) { + dst_d[row0++] = (map[map_i+j] == 2) * 0xff; + } + } + + // free buffers + jsfeat.cache.put_buffer(dxdy_node); + jsfeat.cache.put_buffer(buf_node); + jsfeat.cache.put_buffer(map_node); + jsfeat.cache.put_buffer(stack_node); + }, + + warp_perspective: function(src, dst, transform, fill_value) { + if (typeof fill_value === "undefined") { fill_value = 0; } + var src_width=src.cols, src_height=src.rows, dst_width=dst.cols, dst_height=dst.rows; + var src_d=src.data, dst_d=dst.data; + var x=0,y=0,off=0,ixs=0,iys=0,xs=0.0,ys=0.0,xs0=0.0,ys0=0.0,ws=0.0,sc=0.0,a=0.0,b=0.0,p0=0.0,p1=0.0; + var m00=transform[0],m01=transform[1],m02=transform[2], + m10=transform[3],m11=transform[4],m12=transform[5], + m20=transform[6],m21=transform[7],m22=transform[8]; + + for(var dptr = 0; y < dst_height; ++y) { + xs0 = m01 * y + m02, + ys0 = m11 * y + m12, + ws = m21 * y + m22; + for(x = 0; x < dst_width; ++x, ++dptr, xs0+=m00, ys0+=m10, ws+=m20) { + sc = 1.0 / ws; + xs = xs0 * sc, ys = ys0 * sc; + ixs = xs | 0, iys = ys | 0; + + if(xs > 0 && ys > 0 && ixs < (src_width - 1) && iys < (src_height - 1)) { + a = Math.max(xs - ixs, 0.0); + b = Math.max(ys - iys, 0.0); + off = src_width*iys + ixs; + + p0 = src_d[off] + a * (src_d[off+1] - src_d[off]); + p1 = src_d[off+src_width] + a * (src_d[off+src_width+1] - src_d[off+src_width]); + + dst_d[dptr] = p0 + b * (p1 - p0); + } + else dst_d[dptr] = fill_value; + } + } + }, + + warp_affine: function(src, dst, transform, fill_value) { + if (typeof fill_value === "undefined") { fill_value = 0; } + var src_width=src.cols, src_height=src.rows, dst_width=dst.cols, dst_height=dst.rows; + var src_d=src.data, dst_d=dst.data; + var x=0,y=0,off=0,ixs=0,iys=0,xs=0.0,ys=0.0,a=0.0,b=0.0,p0=0.0,p1=0.0; + var m00=transform[0],m01=transform[1],m02=transform[2], + m10=transform[3],m11=transform[4],m12=transform[5]; + + for(var dptr = 0; y < dst_height; ++y) { + xs = m01 * y + m02; + ys = m11 * y + m12; + for(x = 0; x < dst_width; ++x, ++dptr, xs+=m00, ys+=m10) { + ixs = xs | 0; iys = ys | 0; + + if(xs > 0 && ys > 0 && ixs < (src_width - 1) && iys < (src_height - 1)) { + a = Math.max(xs - ixs, 0.0); + b = Math.max(ys - iys, 0.0); + off = src_width*iys + ixs; + + p0 = src_d[off] + a * (src_d[off+1] - src_d[off]); + p1 = src_d[off+src_width] + a * (src_d[off+src_width+1] - src_d[off+src_width]); + + dst_d[dptr] = p0 + b * (p1 - p0); + } + else dst_d[dptr] = fill_value; + } + } } }; })(); @@ -593,7 +1704,6 @@ self.Float32Array = self.Float32Array || Array; global.imgproc = imgproc; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -634,7 +1744,7 @@ The references are: }, _cmp_score_8 = function(src, off, pixel, d, threshold) { - var N = 15, k = 0, v = src[off]; + var N = 13, k = 0, v = src[off]; var a0 = threshold,a=0,b0=0,b=0; for( ; k < N; ++k ) { @@ -757,21 +1867,28 @@ The references are: return _threshold; }, - detect: function(img, w, h, corners, border, pattern_size) { - if (typeof pattern_size === "undefined") { pattern_size = 16; } + detect: function(src, corners, border, pattern_size) { + if (typeof pattern_size === "undefined") { + pattern_size = 16; + } else if(pattern_size != 16 && pattern_size!=12 && pattern_size!=8) { + pattern_size = 16; + } if (typeof border === "undefined") { border = 3; } - var K = (pattern_size/2)|0, N = (pattern_size + K + 1)|0; + var K = (pattern_size>>1), N = (pattern_size + K + 1)|0; + var img = src.data, w = src.cols, h = src.rows; var i=0, j=0, k=0, vt=0, x=0, m3=0; - var buf = new Uint8Array(w*3); - var cpbuf = new Int32Array((w+1)*3); + var buf_node = jsfeat.cache.get_buffer(3 * w); + var cpbuf_node = jsfeat.cache.get_buffer(((w+1)*3)<<2); + var buf = buf_node.u8;//new Uint8Array(w*3); + var cpbuf = cpbuf_node.i32;//new Int32Array((w+1)*3); var pixel = pixel_off; var sd = score_diff; var sy = Math.max(3, border); var ey = Math.min((h-2), (h-border)); var sx = Math.max(3, border); var ex = Math.min((w - 3), (w - border)); - var _count = 0, corners_cnt = 0; + var _count = 0, corners_cnt = 0, pt; var score_func = pattern_size == 16 ? _cmp_score_16 : (pattern_size == 12 ? _cmp_score_12 : _cmp_score_8); var thresh_tab = threshold_tab; var threshold = _threshold; @@ -903,13 +2020,14 @@ The references are: score > buf[pprev+jm1] && score > buf[pprev+j] && score > buf[pprev+jp1] && score > buf[curr+jm1] && score > buf[curr+j] && score > buf[curr+jp1]) ) { // save corner - corners[corners_cnt*3] = j; - corners[corners_cnt*3+1] = (i-1); - corners[corners_cnt*3+2] = score; + pt = corners[corners_cnt]; + pt.x = j, pt.y = (i-1), pt.score = score; corners_cnt++; } } } // y loop + jsfeat.cache.put_buffer(buf_node); + jsfeat.cache.put_buffer(cpbuf_node); return corners_cnt; } }; @@ -931,7 +2049,7 @@ The references are: var optical_flow_lk = (function() { // short link to shar deriv - var shar_deriv = jsfeat.imgproc.shar_derivatives; + var scharr_deriv = jsfeat.imgproc.scharr_derivatives; return { track: function(prev_pyr, curr_pyr, prev_xy, curr_xy, count, win_size, max_iter, status, eps, min_eigen_threshold) { @@ -943,13 +2061,17 @@ The references are: var half_win = (win_size-1)*0.5; var win_area = (win_size*win_size)|0; var win_area2 = win_area << 1; - var prev_imgs = prev_pyr.images, next_imgs = curr_pyr.images; - var img_prev=prev_imgs[0].data_u8,img_next=next_imgs[0].data_u8; - var w0 = prev_imgs[0].width, h0 = prev_imgs[0].height,lw=0,lh=0; + var prev_imgs = prev_pyr.data, next_imgs = curr_pyr.data; + var img_prev=prev_imgs[0].data,img_next=next_imgs[0].data; + var w0 = prev_imgs[0].cols, h0 = prev_imgs[0].rows,lw=0,lh=0; - var iwin_buf = new Int32Array(win_area); - var deriv_iwin = new Int32Array(win_area2); - var deriv_lev = new Int32Array((w0*h0)*2); + var iwin_node = jsfeat.cache.get_buffer(win_area<<2); + var deriv_iwin_node = jsfeat.cache.get_buffer(win_area2<<2); + var deriv_lev_node = jsfeat.cache.get_buffer((h0*(w0<<1))<<2); + + var iwin_buf = iwin_node.i32;//new Int32Array(win_area); + var deriv_iwin = deriv_iwin_node.i32;//new Int32Array(win_area2); + var deriv_lev = deriv_lev_node.i32;//deriv_m.data; var dstep=0,src=0,dsrc=0,iptr=0,diptr=0,jptr=0; var lev_sc=0.0,prev_x=0.0,prev_y=0.0,next_x=0.0,next_y=0.0; @@ -986,14 +2108,14 @@ The references are: lw = w0 >> level; lh = h0 >> level; dstep = lw << 1; - img_prev = prev_imgs[level].data_u8; - img_next = next_imgs[level].data_u8; + img_prev = prev_imgs[level].data; + img_next = next_imgs[level].data; brd_r = (lw - win_size)|0; brd_b = (lh - win_size)|0; // calculate level derivatives - shar_deriv(img_prev, deriv_lev, lw, lh); + scharr_deriv(prev_imgs[level], deriv_lev); // iterate through points for(ptid = 0; ptid < count; ++ptid) { @@ -1148,10 +2270,698 @@ The references are: } } // points loop } // levels loop + + jsfeat.cache.put_buffer(iwin_node); + jsfeat.cache.put_buffer(deriv_iwin_node); + jsfeat.cache.put_buffer(deriv_lev_node); } }; })(); global.optical_flow_lk = optical_flow_lk; +})(jsfeat); +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + * this code is a rewrite from https://github.com/mtschirs/js-objectdetect implementation + * @author Martin Tschirsich / http://www.tu-darmstadt.de/~m_t + */ + +(function(global) { + "use strict"; + // + var haar = (function() { + + var _group_func = function(r1, r2) { + var distance = (r1.width * 0.25 + 0.5)|0; + + return r2.x <= r1.x + distance && + r2.x >= r1.x - distance && + r2.y <= r1.y + distance && + r2.y >= r1.y - distance && + r2.width <= (r1.width * 1.5 + 0.5)|0 && + (r2.width * 1.5 + 0.5)|0 >= r1.width; + } + + return { + + edges_density: 0.07, + + detect_single_scale: function(int_sum, int_sqsum, int_tilted, int_canny_sum, width, height, scale, classifier) { + var win_w = (classifier.size[0] * scale)|0, + win_h = (classifier.size[1] * scale)|0, + step_x = (0.5 * scale + 1.5)|0, + step_y = step_x; + var i,j,k,x,y,ex=(width-win_w)|0,ey=(height-win_h)|0; + var w1=(width+1)|0,edge_dens,mean,variance,std; + var inv_area = 1.0 / (win_w * win_h); + var stages,stage,trees,tree,sn,tn,fn,found=true,stage_thresh,stage_sum,tree_sum,feature,features; + var fi_a,fi_b,fi_c,fi_d,fw,fh; + + var ii_a=0,ii_b=win_w,ii_c=win_h*w1,ii_d=ii_c+win_w; + var edges_thresh = ((win_w*win_h) * 0xff * this.edges_density)|0; + // if too much gradient we also can skip + //var edges_thresh_high = ((win_w*win_h) * 0xff * 0.3)|0; + + var rects = []; + for(y = 0; y < ey; y += step_y) { + ii_a = y * w1; + for(x = 0; x < ex; x += step_x, ii_a += step_x) { + + mean = int_sum[ii_a] + - int_sum[ii_a+ii_b] + - int_sum[ii_a+ii_c] + + int_sum[ii_a+ii_d]; + + // canny prune + if(int_canny_sum) { + edge_dens = (int_canny_sum[ii_a] + - int_canny_sum[ii_a+ii_b] + - int_canny_sum[ii_a+ii_c] + + int_canny_sum[ii_a+ii_d]); + if(edge_dens < edges_thresh || mean < 20) { + x += step_x, ii_a += step_x; + continue; + } + } + + mean *= inv_area; + variance = (int_sqsum[ii_a] + - int_sqsum[ii_a+ii_b] + - int_sqsum[ii_a+ii_c] + + int_sqsum[ii_a+ii_d]) * inv_area - mean * mean; + + std = variance > 0. ? Math.sqrt(variance) : 1; + + stages = classifier.complexClassifiers; + sn = stages.length; + found = true; + for(i = 0; i < sn; ++i) { + stage = stages[i]; + stage_thresh = stage.threshold; + trees = stage.simpleClassifiers; + tn = trees.length; + stage_sum = 0; + for(j = 0; j < tn; ++j) { + tree = trees[j]; + tree_sum = 0; + features = tree.features; + fn = features.length; + if(tree.tilted === 1) { + for(k=0; k < fn; ++k) { + feature = features[k]; + fi_a = ~~(x + feature[0] * scale) + ~~(y + feature[1] * scale) * w1; + fw = ~~(feature[2] * scale); + fh = ~~(feature[3] * scale); + fi_b = fw * w1; + fi_c = fh * w1; + + tree_sum += (int_tilted[fi_a] + - int_tilted[fi_a + fw + fi_b] + - int_tilted[fi_a - fh + fi_c] + + int_tilted[fi_a + fw - fh + fi_b + fi_c]) * feature[4]; + } + } else { + for(k=0; k < fn; ++k) { + feature = features[k]; + fi_a = ~~(x + feature[0] * scale) + ~~(y + feature[1] * scale) * w1; + fw = ~~(feature[2] * scale); + fh = ~~(feature[3] * scale); + fi_c = fh * w1; + + tree_sum += (int_sum[fi_a] + - int_sum[fi_a+fw] + - int_sum[fi_a+fi_c] + + int_sum[fi_a+fi_c+fw]) * feature[4]; + } + } + stage_sum += (tree_sum * inv_area < tree.threshold * std) ? tree.left_val : tree.right_val; + } + if (stage_sum < stage_thresh) { + found = false; + break; + } + } + + if(found) { + rects.push({"x" : x, + "y" : y, + "width" : win_w, + "height" : win_h, + "neighbor" : 1, + "confidence" : stage_sum}); + x += step_x, ii_a += step_x; + } + } + } + return rects; + }, + + detect_multi_scale: function(int_sum, int_sqsum, int_tilted, int_canny_sum, width, height, classifier, scale_factor, scale_min) { + if (typeof scale_factor === "undefined") { scale_factor = 1.2; } + if (typeof scale_min === "undefined") { scale_min = 1.0; } + var win_w = classifier.size[0]; + var win_h = classifier.size[1]; + var rects = []; + while (scale_min * win_w < width && scale_min * win_h < height) { + rects = rects.concat(this.detect_single_scale(int_sum, int_sqsum, int_tilted, int_canny_sum, width, height, scale_min, classifier)); + scale_min *= scale_factor; + } + return rects; + }, + + // OpenCV method to group detected rectangles + group_rectangles: function(rects, min_neighbors) { + if (typeof min_neighbors === "undefined") { min_neighbors = 1; } + var i, j, n = rects.length; + var node = []; + for (i = 0; i < n; ++i) { + node[i] = {"parent" : -1, + "element" : rects[i], + "rank" : 0}; + } + for (i = 0; i < n; ++i) { + if (!node[i].element) + continue; + var root = i; + while (node[root].parent != -1) + root = node[root].parent; + for (j = 0; j < n; ++j) { + if( i != j && node[j].element && _group_func(node[i].element, node[j].element)) { + var root2 = j; + + while (node[root2].parent != -1) + root2 = node[root2].parent; + + if(root2 != root) { + if(node[root].rank > node[root2].rank) + node[root2].parent = root; + else { + node[root].parent = root2; + if (node[root].rank == node[root2].rank) + node[root2].rank++; + root = root2; + } + + /* compress path from node2 to the root: */ + var temp, node2 = j; + while (node[node2].parent != -1) { + temp = node2; + node2 = node[node2].parent; + node[temp].parent = root; + } + + /* compress path from node to the root: */ + node2 = i; + while (node[node2].parent != -1) { + temp = node2; + node2 = node[node2].parent; + node[temp].parent = root; + } + } + } + } + } + var idx_seq = []; + var class_idx = 0; + for(i = 0; i < n; i++) { + j = -1; + var node1 = i; + if(node[node1].element) { + while (node[node1].parent != -1) + node1 = node[node1].parent; + if(node[node1].rank >= 0) + node[node1].rank = ~class_idx++; + j = ~node[node1].rank; + } + idx_seq[i] = j; + } + + var comps = []; + for (i = 0; i < class_idx+1; ++i) { + comps[i] = {"neighbors" : 0, + "x" : 0, + "y" : 0, + "width" : 0, + "height" : 0, + "confidence" : 0}; + } + + // count number of neighbors + for(i = 0; i < n; ++i) { + var r1 = rects[i]; + var idx = idx_seq[i]; + + if (comps[idx].neighbors == 0) + comps[idx].confidence = r1.confidence; + + ++comps[idx].neighbors; + + comps[idx].x += r1.x; + comps[idx].y += r1.y; + comps[idx].width += r1.width; + comps[idx].height += r1.height; + comps[idx].confidence = Math.max(comps[idx].confidence, r1.confidence); + } + + var seq2 = []; + // calculate average bounding box + for(i = 0; i < class_idx; ++i) { + n = comps[i].neighbors; + if (n >= min_neighbors) + seq2.push({"x" : (comps[i].x * 2 + n) / (2 * n), + "y" : (comps[i].y * 2 + n) / (2 * n), + "width" : (comps[i].width * 2 + n) / (2 * n), + "height" : (comps[i].height * 2 + n) / (2 * n), + "neighbors" : comps[i].neighbors, + "confidence" : comps[i].confidence}); + } + + var result_seq = []; + n = seq2.length; + // filter out small face rectangles inside large face rectangles + for(i = 0; i < n; ++i) { + var r1 = seq2[i]; + var flag = true; + for(j = 0; j < n; ++j) { + var r2 = seq2[j]; + var distance = (r2.width * 0.25 + 0.5)|0; + + if(i != j && + r1.x >= r2.x - distance && + r1.y >= r2.y - distance && + r1.x + r1.width <= r2.x + r2.width + distance && + r1.y + r1.height <= r2.y + r2.height + distance && + (r2.neighbors > Math.max(3, r1.neighbors) || r1.neighbors < 3)) { + flag = false; + break; + } + } + + if(flag) + result_seq.push(r1); + } + return result_seq; + } + }; + + })(); + + global.haar = haar; + +})(jsfeat); +/** + * BBF: Brightness Binary Feature + * + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + * this code is a rewrite from https://github.com/liuliu/ccv implementation + * @author Liu Liu / http://liuliu.me/ + * + * The original paper refers to: YEF∗ Real-Time Object Detection, Yotam Abramson and Bruno Steux + */ + +(function(global) { + "use strict"; + // + var bbf = (function() { + + var _group_func = function(r1, r2) { + var distance = (r1.width * 0.25 + 0.5)|0; + + return r2.x <= r1.x + distance && + r2.x >= r1.x - distance && + r2.y <= r1.y + distance && + r2.y >= r1.y - distance && + r2.width <= (r1.width * 1.5 + 0.5)|0 && + (r2.width * 1.5 + 0.5)|0 >= r1.width; + } + + return { + + interval: 4, + scale: 1.1486, + next: 5, + scale_to: 1, + + // make features local copy + // to avoid array allocation with each scale + // this is strange but array works faster than Int32 version??? + prepare_cascade: function(cascade) { + var sn = cascade.stage_classifier.length; + for (var j = 0; j < sn; j++) { + var orig_feature = cascade.stage_classifier[j].feature; + var f_cnt = cascade.stage_classifier[j].count; + var feature = cascade.stage_classifier[j]._feature = new Array(f_cnt); + for (var k = 0; k < f_cnt; k++) { + feature[k] = {"size" : orig_feature[k].size, + "px" : new Array(orig_feature[k].size), + "pz" : new Array(orig_feature[k].size), + "nx" : new Array(orig_feature[k].size), + "nz" : new Array(orig_feature[k].size)}; + } + } + }, + + build_pyramid: function(canvas, min_width, min_height, interval, do_grayscale) { + if (typeof interval === "undefined") { interval = 4; } + if (typeof do_grayscale === "undefined") { do_grayscale = true; } + + // need to convert to grayscale + if(do_grayscale) { + var ctx_input = canvas.getContext('2d'); + var in_size = canvas.width * canvas.height; + var img_data_input = ctx_input.getImageData(0, 0, canvas.width, canvas.height); + var data_input = img_data_input.data; + var data_u32 = new Uint32Array(data_input.buffer); + var gray_n = jsfeat.cache.get_buffer(in_size); + var gray_data = gray_n.u8; + jsfeat.imgproc.grayscale(data_input, gray_data); + var alpha = (0xff << 24); + var i = in_size,pix=0; + while (--i >= 0) { + pix = gray_data[i]; + data_u32[i] = alpha | (pix << 16) | (pix << 8) | pix; + } + ctx_input.putImageData(img_data_input, 0, 0); + jsfeat.cache.put_buffer(gray_n); + } + // + + this.interval = interval; + this.scale = Math.pow(2, 1 / (this.interval + 1)); + this.next = (this.interval + 1)|0; + this.scale_to = (Math.log(Math.min(canvas.width / min_width, canvas.height / min_height)) / Math.log(this.scale))|0; + + var _canvas = document.createElement('canvas'); + _canvas.width = canvas.width; + _canvas.height = canvas.height; + var _ctx = _canvas.getContext('2d'); + + var ret = new Array((this.scale_to + this.next * 2) * 4); + ret[0] = { "width" : canvas.width, + "height" : canvas.height, + "data" : canvas.getContext("2d").getImageData(0, 0, canvas.width, canvas.height).data }; + var nw, nh; + for (i = 1; i <= this.interval; ++i) { + nw = (canvas.width / Math.pow(this.scale, i))|0; + nh = (canvas.height / Math.pow(this.scale, i))|0; + _ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, nw, nh); + ret[i * 4] = { "width" : nw, + "height" : nh, + "data" : _ctx.getImageData(0, 0, nw, nh).data }; + } + for (i = this.next; i < this.scale_to + this.next * 2; ++i) { + nw = ret[i * 4 - this.next * 4].width >> 1; + nh = ret[i * 4 - this.next * 4].height >> 1; + _ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, nw, nh); + ret[i * 4] = { "width" : nw, + "height" : nh, + "data" : _ctx.getImageData(0, 0, nw, nh).data }; + } + for (i = this.next * 2; i < this.scale_to + this.next * 2; ++i) { + nw = ret[i * 4 - this.next * 4].width >> 1; + nh = ret[i * 4 - this.next * 4].height >> 1; + + _ctx.drawImage(canvas, 1, 0, canvas.width-1, canvas.height, 0, 0, nw-2, nh); + + ret[i * 4 + 1] = { "width" : nw, + "height" : nh, + "data" : _ctx.getImageData(0, 0, nw, nh).data }; + + _ctx.drawImage(canvas, 0, 1, canvas.width, canvas.height-1, 0, 0, nw, nh-2); + + ret[i * 4 + 2] = { "width" : nw, + "height" : nh, + "data" : _ctx.getImageData(0, 0, nw, nh).data }; + + _ctx.drawImage(canvas, 1, 1, canvas.width-1, canvas.height-1, 0, 0, nw-2, nh-2); + + ret[i * 4 + 3] = { "width" : nw, + "height" : nh, + "data" : _ctx.getImageData(0, 0, nw, nh).data }; + } + + return ret; + }, + + detect: function(pyr, cascade) { + var interval = this.interval; + var scale = this.scale; + var next = this.next; + var scale_upto = this.scale_to; + var i=0,j=0,k=0,n=0,x=0,y=0,q=0,sn=0,f_cnt=0,q_cnt=0,p=0,pmin=0,nmax=0,f=0,i4=0,qw=0,qh=0; + var sum=0.0, alpha, feature, orig_feature, feature_k, feature_o, flag = true, shortcut=true; + var scale_x = 1.0, scale_y = 1.0; + var dx = [0, 1, 0, 1]; + var dy = [0, 0, 1, 1]; + var seq = []; + + var u8 = [], u8o = [0,0,0]; + var step = [0,0,0]; + var paddings = [0,0,0]; + + for (i = 0; i < scale_upto; i++) { + i4 = (i<<2); + qw = pyr[i4 + (next << 3)].width - (cascade.width >> 2); + qh = pyr[i4 + (next << 3)].height - (cascade.height >> 2); + step[0] = pyr[i4].width << 2; step[1] = pyr[i4 + (next << 2)].width << 2; step[2] = pyr[i4 + (next << 3)].width << 2; + paddings[0] = (pyr[i4].width << 4) - (qw << 4); + paddings[1] = (pyr[i4 + (next << 2)].width << 3) - (qw << 3); + paddings[2] = (pyr[i4 + (next << 3)].width << 2) - (qw << 2); + sn = cascade.stage_classifier.length; + for (j = 0; j < sn; j++) { + orig_feature = cascade.stage_classifier[j].feature; + feature = cascade.stage_classifier[j]._feature; + f_cnt = cascade.stage_classifier[j].count; + for (k = 0; k < f_cnt; k++) { + feature_k = feature[k]; + feature_o = orig_feature[k]; + q_cnt = feature_o.size|0; + for (q = 0; q < q_cnt; q++) { + feature_k.px[q] = (feature_o.px[q] << 2) + feature_o.py[q] * step[feature_o.pz[q]]; + feature_k.pz[q] = feature_o.pz[q]; + feature_k.nx[q] = (feature_o.nx[q] << 2) + feature_o.ny[q] * step[feature_o.nz[q]]; + feature_k.nz[q] = feature_o.nz[q]; + } + } + } + u8[0] = pyr[i4].data; u8[1] = pyr[i4 + (next<<2)].data; + for (q = 0; q < 4; q++) { + u8[2] = pyr[i4 + (next<<3) + q].data; + u8o[0] = (dx[q]<<3) + dy[q] * (pyr[i4].width<<3); u8o[1] = (dx[q]<<2) + dy[q] * (pyr[i4 + (next<<2)].width<<2); u8o[2]=0; + for (y = 0; y < qh; y++) { + for (x = 0; x < qw; x++) { + sum = 0; + flag = true; + sn = cascade.stage_classifier.length; + for (j = 0; j < sn; j++) { + sum = 0; + alpha = cascade.stage_classifier[j].alpha; + feature = cascade.stage_classifier[j]._feature; + f_cnt = cascade.stage_classifier[j].count; + for (k = 0; k < f_cnt; k++) { + feature_k = feature[k]; + pmin = u8[feature_k.pz[0]][u8o[feature_k.pz[0]] + feature_k.px[0]]; + nmax = u8[feature_k.nz[0]][u8o[feature_k.nz[0]] + feature_k.nx[0]]; + if (pmin <= nmax) { + sum += alpha[k << 1]; + } else { + shortcut = true; + q_cnt = feature_k.size; + for (f = 0; f < q_cnt; f++) { + if (feature_k.pz[f] >= 0) { + p = u8[feature_k.pz[f]][u8o[feature_k.pz[f]] + feature_k.px[f]]; + if (p < pmin) { + if (p <= nmax) { + shortcut = false; + break; + } + pmin = p; + } + } + if (feature_k.nz[f] >= 0) { + n = u8[feature_k.nz[f]][u8o[feature_k.nz[f]] + feature_k.nx[f]]; + if (n > nmax) { + if (pmin <= n) { + shortcut = false; + break; + } + nmax = n; + } + } + } + sum += (shortcut) ? alpha[(k << 1) + 1] : alpha[k << 1]; + } + } + if (sum < cascade.stage_classifier[j].threshold) { + flag = false; + break; + } + } + if (flag) { + seq.push({"x" : (x * 4 + dx[q] * 2) * scale_x, + "y" : (y * 4 + dy[q] * 2) * scale_y, + "width" : cascade.width * scale_x, + "height" : cascade.height * scale_y, + "neighbor" : 1, + "confidence" : sum}); + } + u8o[0] += 16; + u8o[1] += 8; + u8o[2] += 4; + } + u8o[0] += paddings[0]; + u8o[1] += paddings[1]; + u8o[2] += paddings[2]; + } + } + scale_x *= scale; + scale_y *= scale; + } + + return seq; + }, + + // OpenCV method to group detected rectangles + group_rectangles: function(rects, min_neighbors) { + if (typeof min_neighbors === "undefined") { min_neighbors = 1; } + var i, j, n = rects.length; + var node = []; + for (i = 0; i < n; ++i) { + node[i] = {"parent" : -1, + "element" : rects[i], + "rank" : 0}; + } + for (i = 0; i < n; ++i) { + if (!node[i].element) + continue; + var root = i; + while (node[root].parent != -1) + root = node[root].parent; + for (j = 0; j < n; ++j) { + if( i != j && node[j].element && _group_func(node[i].element, node[j].element)) { + var root2 = j; + + while (node[root2].parent != -1) + root2 = node[root2].parent; + + if(root2 != root) { + if(node[root].rank > node[root2].rank) + node[root2].parent = root; + else { + node[root].parent = root2; + if (node[root].rank == node[root2].rank) + node[root2].rank++; + root = root2; + } + + /* compress path from node2 to the root: */ + var temp, node2 = j; + while (node[node2].parent != -1) { + temp = node2; + node2 = node[node2].parent; + node[temp].parent = root; + } + + /* compress path from node to the root: */ + node2 = i; + while (node[node2].parent != -1) { + temp = node2; + node2 = node[node2].parent; + node[temp].parent = root; + } + } + } + } + } + var idx_seq = []; + var class_idx = 0; + for(i = 0; i < n; i++) { + j = -1; + var node1 = i; + if(node[node1].element) { + while (node[node1].parent != -1) + node1 = node[node1].parent; + if(node[node1].rank >= 0) + node[node1].rank = ~class_idx++; + j = ~node[node1].rank; + } + idx_seq[i] = j; + } + + var comps = []; + for (i = 0; i < class_idx+1; ++i) { + comps[i] = {"neighbors" : 0, + "x" : 0, + "y" : 0, + "width" : 0, + "height" : 0, + "confidence" : 0}; + } + + // count number of neighbors + for(i = 0; i < n; ++i) { + var r1 = rects[i]; + var idx = idx_seq[i]; + + if (comps[idx].neighbors == 0) + comps[idx].confidence = r1.confidence; + + ++comps[idx].neighbors; + + comps[idx].x += r1.x; + comps[idx].y += r1.y; + comps[idx].width += r1.width; + comps[idx].height += r1.height; + comps[idx].confidence = Math.max(comps[idx].confidence, r1.confidence); + } + + var seq2 = []; + // calculate average bounding box + for(i = 0; i < class_idx; ++i) { + n = comps[i].neighbors; + if (n >= min_neighbors) + seq2.push({"x" : (comps[i].x * 2 + n) / (2 * n), + "y" : (comps[i].y * 2 + n) / (2 * n), + "width" : (comps[i].width * 2 + n) / (2 * n), + "height" : (comps[i].height * 2 + n) / (2 * n), + "neighbors" : comps[i].neighbors, + "confidence" : comps[i].confidence}); + } + + var result_seq = []; + n = seq2.length; + // filter out small face rectangles inside large face rectangles + for(i = 0; i < n; ++i) { + var r1 = seq2[i]; + var flag = true; + for(j = 0; j < n; ++j) { + var r2 = seq2[j]; + var distance = (r2.width * 0.25 + 0.5)|0; + + if(i != j && + r1.x >= r2.x - distance && + r1.y >= r2.y - distance && + r1.x + r1.width <= r2.x + r2.width + distance && + r1.y + r1.height <= r2.y + r2.height + distance && + (r2.neighbors > Math.max(3, r1.neighbors) || r1.neighbors < 3)) { + flag = false; + break; + } + } + + if(flag) + result_seq.push(r1); + } + return result_seq; + } + + }; + + })(); + + global.bbf = bbf; + })(jsfeat); diff --git a/cascades/bbf_face.js b/cascades/bbf_face.js new file mode 100755 index 0000000..1f2ca01 --- /dev/null +++ b/cascades/bbf_face.js @@ -0,0 +1,3 @@ +(function(global) { + global.face_cascade = {"count" : 16, "width" : 24, "height" : 24, "stage_classifier" : [{"count":4,"threshold":-4.577530e+00,"feature":[{"size":4,"px":[3,5,8,11],"py":[2,2,6,3],"pz":[2,1,1,0],"nx":[8,4,0,0],"ny":[4,4,0,0],"nz":[1,1,-1,-1]},{"size":3,"px":[3,6,7],"py":[7,13,0],"pz":[1,0,-1],"nx":[2,3,4],"ny":[5,4,4],"nz":[2,1,1]},{"size":5,"px":[5,3,10,13,11],"py":[1,0,3,2,2],"pz":[1,2,0,0,0],"nx":[0,11,0,11,11],"ny":[0,2,3,1,1],"nz":[1,1,0,1,-1]},{"size":5,"px":[6,12,12,9,12],"py":[4,13,12,7,11],"pz":[1,0,0,1,0],"nx":[8,0,8,2,11],"ny":[4,0,8,5,1],"nz":[1,-1,-1,-1,-1]}],"alpha":[-2.879683e+00,2.879683e+00,-1.569341e+00,1.569341e+00,-1.286131e+00,1.286131e+00,-1.157626e+00,1.157626e+00]},{"count":4,"threshold":-4.339908e+00,"feature":[{"size":5,"px":[13,12,3,11,17],"py":[3,3,1,4,13],"pz":[0,0,2,0,0],"nx":[4,3,8,15,15],"ny":[4,5,4,8,8],"nz":[1,2,1,0,-1]},{"size":5,"px":[6,7,6,3,3],"py":[13,13,4,2,7],"pz":[0,0,1,2,1],"nx":[4,8,3,0,15],"ny":[4,4,4,3,8],"nz":[1,1,-1,-1,-1]},{"size":3,"px":[2,2,11],"py":[3,2,5],"pz":[2,2,0],"nx":[3,8,3],"ny":[4,4,4],"nz":[1,-1,-1]},{"size":5,"px":[15,13,9,11,7],"py":[2,1,2,1,0],"pz":[0,0,0,0,1],"nx":[23,11,23,22,23],"ny":[1,0,2,0,0],"nz":[0,1,0,0,0]}],"alpha":[-2.466029e+00,2.466029e+00,-1.839510e+00,1.839510e+00,-1.060559e+00,1.060559e+00,-1.094927e+00,1.094927e+00]},{"count":7,"threshold":-5.052474e+00,"feature":[{"size":5,"px":[17,13,3,11,10],"py":[13,2,1,4,3],"pz":[0,0,2,0,0],"nx":[4,8,8,3,7],"ny":[2,8,4,5,4],"nz":[2,0,1,2,1]},{"size":5,"px":[6,7,3,6,6],"py":[4,12,2,13,14],"pz":[1,0,2,0,0],"nx":[8,3,4,4,3],"ny":[4,4,2,0,2],"nz":[1,1,-1,-1,-1]},{"size":5,"px":[7,4,5,3,3],"py":[2,1,3,1,1],"pz":[0,1,0,1,-1],"nx":[1,0,1,1,0],"ny":[1,3,2,0,4],"nz":[0,0,0,0,0]},{"size":5,"px":[11,11,11,3,2],"py":[11,13,10,7,2],"pz":[0,0,0,1,2],"nx":[4,1,8,2,0],"ny":[4,1,12,0,4],"nz":[1,-1,-1,-1,-1]},{"size":3,"px":[9,13,1],"py":[7,19,4],"pz":[1,-1,-1],"nx":[4,7,4],"ny":[5,8,2],"nz":[2,1,2]},{"size":5,"px":[12,8,16,4,4],"py":[12,1,2,0,0],"pz":[0,1,0,2,-1],"nx":[11,22,11,23,23],"ny":[2,0,1,1,5],"nz":[1,0,1,0,0]},{"size":3,"px":[11,17,17],"py":[6,11,12],"pz":[0,0,0],"nx":[15,1,11],"ny":[9,1,1],"nz":[0,-1,-1]}],"alpha":[-2.156890e+00,2.156890e+00,-1.718246e+00,1.718246e+00,-9.651329e-01,9.651329e-01,-9.948090e-01,9.948090e-01,-8.802466e-01,8.802466e-01,-8.486741e-01,8.486741e-01,-8.141777e-01,8.141777e-01]},{"count":13,"threshold":-5.774400e+00,"feature":[{"size":5,"px":[6,10,3,12,14],"py":[5,3,1,2,2],"pz":[1,0,2,0,0],"nx":[3,4,14,8,4],"ny":[5,4,8,4,2],"nz":[2,1,0,1,2]},{"size":5,"px":[10,6,11,5,12],"py":[4,13,4,2,4],"pz":[0,0,0,1,0],"nx":[1,4,8,1,1],"ny":[2,4,4,4,3],"nz":[0,1,1,0,0]},{"size":3,"px":[18,6,12],"py":[12,4,8],"pz":[0,1,0],"nx":[7,4,8],"ny":[4,2,4],"nz":[1,-1,-1]},{"size":5,"px":[7,5,6,3,17],"py":[13,12,3,8,13],"pz":[0,0,1,1,0],"nx":[3,3,0,1,8],"ny":[4,5,5,10,4],"nz":[1,-1,-1,-1,-1]},{"size":5,"px":[16,7,16,7,7],"py":[1,1,2,0,0],"pz":[0,1,0,1,-1],"nx":[23,23,23,11,5],"ny":[2,14,1,2,1],"nz":[0,0,0,1,2]},{"size":3,"px":[9,18,16],"py":[7,14,2],"pz":[1,0,-1],"nx":[8,4,9],"ny":[10,2,4],"nz":[1,2,1]},{"size":4,"px":[3,16,1,22],"py":[7,4,5,11],"pz":[1,-1,-1,-1],"nx":[3,9,4,2],"ny":[4,9,7,5],"nz":[1,0,1,2]},{"size":5,"px":[4,7,8,8,9],"py":[0,2,2,1,1],"pz":[1,0,0,0,0],"nx":[0,0,1,0,0],"ny":[15,16,19,0,14],"nz":[0,0,0,1,0]},{"size":5,"px":[4,4,7,8,12],"py":[2,5,6,7,10],"pz":[2,2,1,1,0],"nx":[8,5,10,0,0],"ny":[4,2,5,3,14],"nz":[1,-1,-1,-1,-1]},{"size":2,"px":[11,0],"py":[13,4],"pz":[0,-1],"nx":[3,14],"ny":[4,16],"nz":[1,0]},{"size":5,"px":[17,8,18,4,4],"py":[3,1,3,0,0],"pz":[0,1,0,2,-1],"nx":[21,22,5,11,22],"ny":[0,1,0,1,2],"nz":[0,0,2,1,0]},{"size":4,"px":[7,8,2,11],"py":[13,12,2,7],"pz":[0,0,2,0],"nx":[4,0,23,3],"ny":[4,1,1,11],"nz":[1,-1,-1,-1]},{"size":5,"px":[4,18,8,9,15],"py":[4,16,7,7,23],"pz":[2,0,1,1,0],"nx":[0,1,1,1,1],"ny":[10,21,23,22,22],"nz":[1,0,0,0,-1]}],"alpha":[-1.956565e+00,1.956565e+00,-1.262438e+00,1.262438e+00,-1.056941e+00,1.056941e+00,-9.712509e-01,9.712509e-01,-8.261028e-01,8.261028e-01,-8.456506e-01,8.456506e-01,-6.652113e-01,6.652113e-01,-6.026287e-01,6.026287e-01,-6.915425e-01,6.915425e-01,-5.539286e-01,5.539286e-01,-5.515072e-01,5.515072e-01,-6.685884e-01,6.685884e-01,-4.656070e-01,4.656070e-01]},{"count":20,"threshold":-5.606853e+00,"feature":[{"size":5,"px":[17,11,6,14,9],"py":[13,4,4,3,3],"pz":[0,0,1,0,0],"nx":[14,4,8,7,8],"ny":[8,4,4,4,8],"nz":[0,1,1,1,0]},{"size":5,"px":[3,9,10,11,11],"py":[7,2,2,3,3],"pz":[1,0,0,0,-1],"nx":[3,8,4,2,5],"ny":[4,4,10,2,8],"nz":[1,1,1,2,1]},{"size":5,"px":[12,12,12,5,12],"py":[12,9,10,12,11],"pz":[0,0,0,0,0],"nx":[0,0,0,0,0],"ny":[2,1,3,0,0],"nz":[0,0,0,0,-1]},{"size":5,"px":[9,18,9,9,12],"py":[7,14,19,5,11],"pz":[1,-1,-1,-1,-1],"nx":[23,4,23,23,8],"ny":[13,5,14,16,4],"nz":[0,2,0,0,1]},{"size":5,"px":[12,12,12,6,1],"py":[13,11,12,6,5],"pz":[0,0,0,-1,-1],"nx":[4,6,8,4,9],"ny":[2,8,4,4,4],"nz":[2,1,1,1,1]},{"size":4,"px":[12,11,11,6],"py":[5,5,6,13],"pz":[0,0,0,0],"nx":[8,3,2,8],"ny":[4,4,17,2],"nz":[1,1,-1,-1]},{"size":5,"px":[3,14,12,15,13],"py":[0,2,2,2,2],"pz":[2,0,0,0,0],"nx":[22,23,22,23,7],"ny":[0,3,1,2,4],"nz":[0,0,0,0,1]},{"size":5,"px":[16,15,18,19,9],"py":[12,11,12,12,9],"pz":[0,0,0,0,1],"nx":[8,2,22,23,21],"ny":[4,1,1,2,20],"nz":[1,-1,-1,-1,-1]},{"size":3,"px":[4,7,7],"py":[0,2,2],"pz":[1,0,-1],"nx":[1,2,2],"ny":[2,0,2],"nz":[1,0,0]},{"size":3,"px":[4,11,11],"py":[6,9,8],"pz":[1,0,0],"nx":[9,2,8],"ny":[9,4,5],"nz":[0,-1,-1]},{"size":4,"px":[2,7,6,6],"py":[4,23,21,22],"pz":[2,0,0,0],"nx":[9,3,8,17],"ny":[21,2,5,1],"nz":[0,-1,-1,-1]},{"size":2,"px":[2,8],"py":[4,12],"pz":[2,0],"nx":[3,0],"ny":[4,4],"nz":[1,-1]},{"size":5,"px":[4,5,1,8,4],"py":[15,12,3,23,12],"pz":[0,0,2,0,0],"nx":[0,0,0,0,0],"ny":[23,10,22,21,11],"nz":[0,1,0,0,-1]},{"size":2,"px":[21,5],"py":[13,4],"pz":[0,2],"nx":[23,4],"ny":[23,5],"nz":[0,-1]},{"size":2,"px":[15,17],"py":[2,3],"pz":[0,0],"nx":[19,20],"ny":[2,1],"nz":[0,0]},{"size":5,"px":[12,1,8,17,4],"py":[14,2,13,6,12],"pz":[0,-1,-1,-1,-1],"nx":[8,13,15,15,7],"ny":[10,9,15,14,8],"nz":[1,0,0,0,1]},{"size":2,"px":[8,5],"py":[7,4],"pz":[1,-1],"nx":[4,13],"ny":[2,21],"nz":[2,0]},{"size":2,"px":[3,4],"py":[7,0],"pz":[1,-1],"nx":[4,2],"ny":[7,5],"nz":[1,2]},{"size":4,"px":[4,14,3,11],"py":[3,23,2,5],"pz":[2,0,2,0],"nx":[7,8,2,16],"ny":[8,0,1,15],"nz":[0,-1,-1,-1]},{"size":2,"px":[9,8],"py":[0,0],"pz":[0,0],"nx":[2,2],"ny":[3,5],"nz":[2,2]}],"alpha":[-1.957970e+00,1.957970e+00,-1.225984e+00,1.225984e+00,-8.310246e-01,8.310246e-01,-8.315741e-01,8.315741e-01,-7.973616e-01,7.973616e-01,-7.661959e-01,7.661959e-01,-6.042118e-01,6.042118e-01,-6.506833e-01,6.506833e-01,-4.808219e-01,4.808219e-01,-6.079504e-01,6.079504e-01,-5.163994e-01,5.163994e-01,-5.268142e-01,5.268142e-01,-4.935685e-01,4.935685e-01,-4.427544e-01,4.427544e-01,-4.053949e-01,4.053949e-01,-4.701274e-01,4.701274e-01,-4.387648e-01,4.387648e-01,-4.305499e-01,4.305499e-01,-4.042607e-01,4.042607e-01,-4.372088e-01,4.372088e-01]},{"count":22,"threshold":-5.679317e+00,"feature":[{"size":5,"px":[11,3,17,14,13],"py":[4,0,13,2,3],"pz":[0,2,0,0,0],"nx":[7,4,14,23,11],"ny":[8,4,8,4,0],"nz":[1,1,0,0,1]},{"size":5,"px":[7,12,6,12,12],"py":[12,8,3,10,9],"pz":[0,0,1,0,0],"nx":[4,9,8,15,15],"ny":[4,8,4,8,8],"nz":[1,0,1,0,-1]},{"size":3,"px":[4,2,10],"py":[1,4,1],"pz":[1,2,0],"nx":[2,3,8],"ny":[5,4,4],"nz":[2,1,-1]},{"size":5,"px":[3,17,6,6,16],"py":[2,12,4,14,12],"pz":[2,0,1,0,0],"nx":[8,3,7,5,15],"ny":[4,4,4,4,8],"nz":[1,1,-1,-1,-1]},{"size":5,"px":[5,6,7,4,8],"py":[3,3,3,1,3],"pz":[0,0,0,1,0],"nx":[0,0,0,0,1],"ny":[5,4,3,2,0],"nz":[0,0,0,0,0]},{"size":3,"px":[18,9,0],"py":[14,7,0],"pz":[0,1,-1],"nx":[8,14,8],"ny":[10,9,4],"nz":[1,0,1]},{"size":2,"px":[9,5],"py":[18,13],"pz":[0,0],"nx":[10,3],"ny":[16,4],"nz":[0,-1]},{"size":5,"px":[11,11,11,11,6],"py":[10,12,11,13,6],"pz":[0,0,0,0,-1],"nx":[5,21,22,22,22],"ny":[4,22,17,19,18],"nz":[2,0,0,0,0]},{"size":4,"px":[8,9,15,4],"py":[7,7,23,4],"pz":[1,1,0,2],"nx":[8,5,0,3],"ny":[4,18,4,9],"nz":[1,-1,-1,-1]},{"size":5,"px":[11,10,12,11,11],"py":[4,4,4,5,5],"pz":[0,0,0,0,-1],"nx":[4,6,8,2,8],"ny":[4,9,9,2,4],"nz":[1,1,0,2,1]},{"size":5,"px":[2,2,3,3,4],"py":[10,9,14,13,15],"pz":[1,1,0,0,0],"nx":[0,0,0,0,0],"ny":[5,9,10,19,18],"nz":[2,1,1,0,-1]},{"size":2,"px":[11,11],"py":[13,12],"pz":[0,0],"nx":[9,2],"ny":[15,2],"nz":[0,-1]},{"size":5,"px":[2,4,3,3,4],"py":[5,11,6,9,12],"pz":[1,0,1,0,0],"nx":[6,2,11,11,0],"ny":[9,1,5,20,18],"nz":[0,-1,-1,-1,-1]},{"size":5,"px":[18,9,17,19,16],"py":[2,0,2,2,1],"pz":[0,1,0,0,0],"nx":[22,23,11,23,23],"ny":[0,2,0,1,1],"nz":[0,0,1,0,-1]},{"size":5,"px":[5,5,6,7,6],"py":[17,16,15,23,22],"pz":[0,0,0,0,0],"nx":[7,6,2,5,23],"ny":[8,1,2,3,1],"nz":[0,-1,-1,-1,-1]},{"size":5,"px":[12,12,11,10,6],"py":[14,13,18,4,22],"pz":[0,-1,-1,-1,-1],"nx":[3,2,4,1,2],"ny":[19,4,23,13,16],"nz":[0,0,0,0,0]},{"size":4,"px":[11,16,11,17],"py":[7,11,8,12],"pz":[0,0,0,0],"nx":[7,14,10,4],"ny":[4,7,10,4],"nz":[1,0,-1,-1]},{"size":2,"px":[3,3],"py":[8,7],"pz":[1,1],"nx":[4,2],"ny":[10,2],"nz":[1,-1]},{"size":2,"px":[3,9],"py":[0,1],"pz":[1,0],"nx":[4,5],"ny":[1,0],"nz":[0,0]},{"size":2,"px":[14,16],"py":[3,3],"pz":[0,0],"nx":[9,14],"ny":[4,21],"nz":[1,0]},{"size":2,"px":[9,1],"py":[7,1],"pz":[1,-1],"nx":[8,9],"ny":[7,4],"nz":[1,1]},{"size":2,"px":[1,0],"py":[8,3],"pz":[0,2],"nx":[20,0],"ny":[3,3],"nz":[0,-1]}],"alpha":[-1.581077e+00,1.581077e+00,-1.389689e+00,1.389689e+00,-8.733094e-01,8.733094e-01,-8.525177e-01,8.525177e-01,-7.416304e-01,7.416304e-01,-6.609002e-01,6.609002e-01,-7.119043e-01,7.119043e-01,-6.204438e-01,6.204438e-01,-6.638519e-01,6.638519e-01,-5.518876e-01,5.518876e-01,-4.898991e-01,4.898991e-01,-5.508243e-01,5.508243e-01,-4.635525e-01,4.635525e-01,-5.163159e-01,5.163159e-01,-4.495338e-01,4.495338e-01,-4.515036e-01,4.515036e-01,-5.130473e-01,5.130473e-01,-4.694233e-01,4.694233e-01,-4.022514e-01,4.022514e-01,-4.055690e-01,4.055690e-01,-4.151817e-01,4.151817e-01,-3.352302e-01,3.352302e-01]},{"count":32,"threshold":-5.363782e+00,"feature":[{"size":5,"px":[12,9,6,8,14],"py":[4,2,13,3,3],"pz":[0,0,0,0,0],"nx":[0,15,0,9,5],"ny":[2,7,3,8,8],"nz":[0,0,0,0,1]},{"size":5,"px":[13,16,3,6,11],"py":[3,13,1,4,3],"pz":[0,0,2,1,0],"nx":[7,4,8,14,14],"ny":[4,4,4,8,8],"nz":[1,1,1,0,-1]},{"size":5,"px":[10,19,18,19,19],"py":[6,13,13,12,12],"pz":[1,0,0,0,-1],"nx":[23,5,23,23,11],"ny":[12,2,13,14,8],"nz":[0,2,0,0,1]},{"size":5,"px":[12,12,12,12,6],"py":[11,13,12,10,6],"pz":[0,0,0,0,1],"nx":[6,8,3,9,9],"ny":[8,4,4,4,4],"nz":[1,1,1,1,-1]},{"size":5,"px":[5,3,5,8,11],"py":[12,8,3,11,8],"pz":[0,1,1,0,0],"nx":[4,0,1,1,9],"ny":[4,3,4,3,4],"nz":[1,-1,-1,-1,-1]},{"size":5,"px":[13,3,12,14,12],"py":[1,0,1,2,3],"pz":[0,2,0,0,0],"nx":[7,9,8,4,4],"ny":[5,4,10,2,2],"nz":[1,1,1,2,-1]},{"size":5,"px":[18,16,12,15,8],"py":[12,23,7,11,8],"pz":[0,0,0,0,1],"nx":[8,6,10,12,4],"ny":[4,4,10,6,3],"nz":[1,-1,-1,-1,-1]},{"size":5,"px":[4,4,5,2,2],"py":[13,14,14,7,7],"pz":[0,0,0,1,-1],"nx":[0,0,0,0,1],"ny":[15,4,14,13,17],"nz":[0,2,0,0,0]},{"size":2,"px":[9,9],"py":[7,7],"pz":[1,-1],"nx":[4,7],"ny":[5,8],"nz":[2,1]},{"size":5,"px":[3,4,6,5,4],"py":[2,2,14,6,9],"pz":[1,1,0,1,1],"nx":[23,23,23,23,11],"ny":[0,3,2,1,0],"nz":[0,0,0,0,-1]},{"size":3,"px":[10,2,3],"py":[23,4,7],"pz":[0,2,1],"nx":[10,21,23],"ny":[21,9,2],"nz":[0,-1,-1]},{"size":5,"px":[20,21,21,10,12],"py":[13,12,8,8,12],"pz":[0,0,0,1,0],"nx":[8,16,3,3,11],"ny":[4,8,4,3,0],"nz":[1,-1,-1,-1,-1]},{"size":2,"px":[2,21],"py":[4,12],"pz":[2,-1],"nx":[2,3],"ny":[5,4],"nz":[2,1]},{"size":5,"px":[8,5,6,8,7],"py":[0,2,1,1,1],"pz":[0,0,0,0,0],"nx":[3,2,2,2,2],"ny":[0,0,1,2,2],"nz":[0,0,0,0,-1]},{"size":5,"px":[11,2,2,11,10],"py":[10,12,8,11,12],"pz":[0,0,0,0,0],"nx":[3,5,2,4,2],"ny":[4,1,4,2,2],"nz":[1,-1,-1,-1,-1]},{"size":4,"px":[15,16,8,17],"py":[2,1,0,2],"pz":[0,0,1,0],"nx":[19,20,0,8],"ny":[1,2,11,10],"nz":[0,0,-1,-1]},{"size":2,"px":[17,16],"py":[12,12],"pz":[0,0],"nx":[8,9],"ny":[5,1],"nz":[1,-1]},{"size":4,"px":[11,11,0,0],"py":[12,13,0,0],"pz":[0,0,-1,-1],"nx":[10,10,9,10],"ny":[10,12,13,11],"nz":[0,0,0,0]},{"size":3,"px":[11,10,8],"py":[5,2,6],"pz":[0,-1,-1],"nx":[8,12,4],"ny":[4,17,4],"nz":[1,0,1]},{"size":5,"px":[10,21,10,20,20],"py":[11,13,7,13,14],"pz":[1,0,1,0,0],"nx":[23,23,11,23,17],"ny":[23,22,11,21,21],"nz":[0,0,1,-1,-1]},{"size":2,"px":[4,7],"py":[3,9],"pz":[2,1],"nx":[9,23],"ny":[4,22],"nz":[1,-1]},{"size":4,"px":[3,2,2,5],"py":[11,5,4,20],"pz":[1,2,2,0],"nx":[4,23,11,23],"ny":[10,22,11,21],"nz":[1,-1,-1,-1]},{"size":2,"px":[7,5],"py":[13,4],"pz":[0,-1],"nx":[4,4],"ny":[8,6],"nz":[1,1]},{"size":2,"px":[2,5],"py":[4,9],"pz":[2,1],"nx":[10,10],"ny":[16,16],"nz":[0,-1]},{"size":2,"px":[4,2],"py":[6,3],"pz":[1,2],"nx":[3,0],"ny":[4,0],"nz":[1,-1]},{"size":5,"px":[7,3,12,13,6],"py":[11,5,23,23,7],"pz":[1,2,0,0,1],"nx":[1,0,0,0,0],"ny":[23,20,19,21,21],"nz":[0,0,0,0,-1]},{"size":5,"px":[0,0,0,0,0],"py":[10,9,6,13,13],"pz":[0,0,1,0,-1],"nx":[8,8,4,4,9],"ny":[4,11,5,4,5],"nz":[1,1,2,2,1]},{"size":2,"px":[9,18],"py":[8,15],"pz":[1,0],"nx":[15,4],"ny":[15,2],"nz":[0,-1]},{"size":2,"px":[5,13],"py":[6,17],"pz":[1,-1],"nx":[1,2],"ny":[2,4],"nz":[2,1]},{"size":5,"px":[19,10,20,18,18],"py":[2,0,2,2,2],"pz":[0,1,0,0,-1],"nx":[22,23,22,11,23],"ny":[1,3,0,1,2],"nz":[0,0,0,1,0]},{"size":5,"px":[4,2,2,2,6],"py":[7,2,5,4,14],"pz":[1,2,2,2,0],"nx":[16,7,9,15,23],"ny":[8,0,3,11,2],"nz":[0,-1,-1,-1,-1]},{"size":5,"px":[10,10,9,9,5],"py":[2,0,0,1,0],"pz":[0,0,0,0,1],"nx":[3,2,3,2,2],"ny":[11,3,9,5,5],"nz":[1,2,1,2,-1]}],"alpha":[-1.490426e+00,1.490426e+00,-1.214280e+00,1.214280e+00,-8.124863e-01,8.124863e-01,-7.307594e-01,7.307594e-01,-7.377259e-01,7.377259e-01,-5.982859e-01,5.982859e-01,-6.451736e-01,6.451736e-01,-6.117417e-01,6.117417e-01,-5.438949e-01,5.438949e-01,-4.563701e-01,4.563701e-01,-4.975362e-01,4.975362e-01,-4.707373e-01,4.707373e-01,-5.013868e-01,5.013868e-01,-5.139018e-01,5.139018e-01,-4.728007e-01,4.728007e-01,-4.839748e-01,4.839748e-01,-4.852528e-01,4.852528e-01,-5.768956e-01,5.768956e-01,-3.635091e-01,3.635091e-01,-4.190090e-01,4.190090e-01,-3.854715e-01,3.854715e-01,-3.409591e-01,3.409591e-01,-3.440222e-01,3.440222e-01,-3.375895e-01,3.375895e-01,-3.367032e-01,3.367032e-01,-3.708106e-01,3.708106e-01,-3.260956e-01,3.260956e-01,-3.657681e-01,3.657681e-01,-3.518800e-01,3.518800e-01,-3.845758e-01,3.845758e-01,-2.832236e-01,2.832236e-01,-2.865156e-01,2.865156e-01]},{"count":45,"threshold":-5.479836e+00,"feature":[{"size":5,"px":[15,6,17,6,9],"py":[2,13,13,4,3],"pz":[0,0,0,1,0],"nx":[3,9,4,8,14],"ny":[5,8,4,4,8],"nz":[2,0,1,1,0]},{"size":5,"px":[9,8,11,6,7],"py":[1,2,3,14,2],"pz":[0,0,0,0,0],"nx":[0,0,4,0,0],"ny":[4,2,4,1,0],"nz":[0,0,1,0,0]},{"size":5,"px":[2,2,11,11,11],"py":[2,4,10,8,6],"pz":[2,2,0,0,0],"nx":[8,4,3,23,23],"ny":[4,4,4,16,18],"nz":[1,1,-1,-1,-1]},{"size":5,"px":[18,16,17,15,9],"py":[2,2,2,2,1],"pz":[0,0,0,0,1],"nx":[22,22,21,23,23],"ny":[1,2,0,5,4],"nz":[0,0,0,0,0]},{"size":5,"px":[15,3,17,18,6],"py":[11,2,11,11,4],"pz":[0,2,0,0,1],"nx":[3,8,1,4,23],"ny":[4,4,3,9,4],"nz":[1,1,-1,-1,-1]},{"size":2,"px":[4,5],"py":[4,0],"pz":[2,-1],"nx":[7,4],"ny":[8,5],"nz":[1,2]},{"size":2,"px":[11,5],"py":[12,5],"pz":[0,-1],"nx":[4,9],"ny":[10,15],"nz":[1,0]},{"size":4,"px":[2,2,7,1],"py":[7,7,3,4],"pz":[1,-1,-1,-1],"nx":[0,2,1,2],"ny":[6,20,14,16],"nz":[1,0,0,0]},{"size":5,"px":[14,12,12,13,9],"py":[23,5,6,5,7],"pz":[0,0,0,0,1],"nx":[8,18,2,8,14],"ny":[4,9,0,12,7],"nz":[1,-1,-1,-1,-1]},{"size":5,"px":[3,10,13,11,9],"py":[0,3,2,3,2],"pz":[2,0,0,0,0],"nx":[3,11,22,22,22],"ny":[2,6,15,2,0],"nz":[2,1,0,0,0]},{"size":5,"px":[8,7,5,8,5],"py":[23,12,12,12,13],"pz":[0,0,0,0,0],"nx":[3,18,3,1,22],"ny":[4,4,4,2,0],"nz":[1,-1,-1,-1,-1]},{"size":5,"px":[22,22,22,21,22],"py":[9,11,10,14,12],"pz":[0,0,0,0,0],"nx":[23,23,11,1,22],"ny":[23,23,11,2,0],"nz":[0,-1,-1,-1,-1]},{"size":2,"px":[9,3],"py":[18,7],"pz":[0,1],"nx":[10,8],"ny":[16,19],"nz":[0,-1]},{"size":5,"px":[10,12,11,6,6],"py":[4,4,4,2,2],"pz":[0,0,0,1,-1],"nx":[3,8,7,8,4],"ny":[5,4,4,10,4],"nz":[2,1,1,0,1]},{"size":4,"px":[12,12,4,15],"py":[13,12,0,11],"pz":[0,0,-1,-1],"nx":[13,14,13,14],"ny":[9,12,10,13],"nz":[0,0,0,0]},{"size":2,"px":[4,4],"py":[3,3],"pz":[2,-1],"nx":[9,4],"ny":[4,2],"nz":[1,2]},{"size":3,"px":[9,7,0],"py":[7,5,5],"pz":[1,-1,-1],"nx":[4,15,9],"ny":[5,14,9],"nz":[2,0,1]},{"size":5,"px":[15,20,7,10,16],"py":[17,12,6,4,23],"pz":[0,0,1,1,0],"nx":[1,2,2,1,1],"ny":[3,0,1,2,2],"nz":[0,0,0,0,-1]},{"size":5,"px":[2,1,1,11,2],"py":[16,4,5,12,14],"pz":[0,1,1,0,0],"nx":[4,6,3,19,1],"ny":[4,2,5,19,2],"nz":[1,-1,-1,-1,-1]},{"size":3,"px":[15,14,14],"py":[1,1,0],"pz":[0,0,0],"nx":[4,8,4],"ny":[3,4,2],"nz":[2,1,2]},{"size":5,"px":[2,3,1,2,7],"py":[8,12,4,9,13],"pz":[1,0,2,1,0],"nx":[1,1,0,0,0],"ny":[21,20,18,17,9],"nz":[0,0,0,0,1]},{"size":5,"px":[17,15,17,16,16],"py":[12,12,22,23,12],"pz":[0,0,0,0,0],"nx":[7,3,16,1,0],"ny":[8,6,8,3,9],"nz":[0,-1,-1,-1,-1]},{"size":5,"px":[9,17,18,18,18],"py":[6,12,12,13,13],"pz":[1,0,0,0,-1],"nx":[23,23,20,11,11],"ny":[12,13,23,7,8],"nz":[0,0,0,1,1]},{"size":2,"px":[2,4],"py":[4,7],"pz":[2,1],"nx":[4,4],"ny":[10,5],"nz":[1,-1]},{"size":4,"px":[4,22,19,12],"py":[5,8,14,9],"pz":[2,0,0,0],"nx":[8,4,4,2],"ny":[4,4,1,2],"nz":[1,-1,-1,-1]},{"size":2,"px":[3,21],"py":[7,14],"pz":[1,-1],"nx":[4,2],"ny":[7,2],"nz":[1,2]},{"size":3,"px":[7,4,17],"py":[3,1,6],"pz":[0,1,-1],"nx":[3,4,5],"ny":[0,2,1],"nz":[1,0,0]},{"size":4,"px":[15,7,14,0],"py":[3,1,3,7],"pz":[0,1,0,-1],"nx":[8,18,17,18],"ny":[0,1,1,2],"nz":[1,0,0,0]},{"size":5,"px":[12,12,12,12,6],"py":[10,11,12,13,6],"pz":[0,0,0,0,-1],"nx":[8,15,15,4,8],"ny":[10,10,9,2,4],"nz":[0,0,0,2,1]},{"size":2,"px":[17,12],"py":[13,11],"pz":[0,-1],"nx":[9,8],"ny":[4,10],"nz":[1,1]},{"size":5,"px":[0,0,0,0,0],"py":[10,9,12,11,4],"pz":[0,0,0,0,1],"nx":[8,9,8,9,9],"ny":[10,4,4,5,5],"nz":[1,1,1,1,-1]},{"size":3,"px":[7,0,1],"py":[1,9,8],"pz":[0,-1,-1],"nx":[4,3,3],"ny":[7,15,16],"nz":[0,0,0]},{"size":2,"px":[4,7],"py":[15,23],"pz":[0,0],"nx":[9,18],"ny":[21,3],"nz":[0,-1]},{"size":5,"px":[17,4,19,18,8],"py":[12,3,12,17,6],"pz":[0,2,0,0,1],"nx":[23,23,11,22,16],"ny":[0,1,0,21,-1],"nz":[0,0,-1,-1,-1]},{"size":2,"px":[7,4],"py":[13,5],"pz":[0,-1],"nx":[4,2],"ny":[4,2],"nz":[1,2]},{"size":5,"px":[21,20,10,10,21],"py":[13,14,10,7,11],"pz":[0,0,1,1,0],"nx":[4,4,4,5,5],"ny":[18,17,19,20,20],"nz":[0,0,0,0,-1]},{"size":2,"px":[2,3],"py":[11,13],"pz":[1,0],"nx":[12,4],"ny":[17,17],"nz":[0,-1]},{"size":2,"px":[11,5],"py":[13,1],"pz":[0,-1],"nx":[1,2],"ny":[1,4],"nz":[2,1]},{"size":2,"px":[15,7],"py":[17,7],"pz":[0,1],"nx":[14,4],"ny":[15,3],"nz":[0,-1]},{"size":2,"px":[3,11],"py":[3,8],"pz":[2,0],"nx":[13,13],"ny":[9,8],"nz":[0,0]},{"size":2,"px":[8,3],"py":[11,2],"pz":[0,-1],"nx":[8,4],"ny":[9,5],"nz":[0,1]},{"size":3,"px":[12,6,9],"py":[9,10,11],"pz":[0,-1,-1],"nx":[2,1,5],"ny":[2,1,6],"nz":[2,2,1]},{"size":4,"px":[4,5,5,1],"py":[11,11,11,3],"pz":[1,0,1,2],"nx":[0,0,5,4],"ny":[23,22,0,0],"nz":[0,0,-1,-1]},{"size":5,"px":[15,7,17,15,16],"py":[1,0,2,2,0],"pz":[0,1,0,0,0],"nx":[7,4,7,4,8],"ny":[5,2,4,3,4],"nz":[1,2,1,2,-1]},{"size":2,"px":[6,12],"py":[11,23],"pz":[1,0],"nx":[12,4],"ny":[21,2],"nz":[0,-1]}],"alpha":[-1.535800e+00,1.535800e+00,-8.580514e-01,8.580514e-01,-8.625210e-01,8.625210e-01,-7.177500e-01,7.177500e-01,-6.832222e-01,6.832222e-01,-5.736298e-01,5.736298e-01,-5.028217e-01,5.028217e-01,-5.091788e-01,5.091788e-01,-5.791940e-01,5.791940e-01,-4.924942e-01,4.924942e-01,-5.489055e-01,5.489055e-01,-4.528190e-01,4.528190e-01,-4.748324e-01,4.748324e-01,-4.150403e-01,4.150403e-01,-4.820464e-01,4.820464e-01,-4.840212e-01,4.840212e-01,-3.941872e-01,3.941872e-01,-3.663507e-01,3.663507e-01,-3.814835e-01,3.814835e-01,-3.936426e-01,3.936426e-01,-3.049970e-01,3.049970e-01,-3.604256e-01,3.604256e-01,-3.974041e-01,3.974041e-01,-4.203486e-01,4.203486e-01,-3.174435e-01,3.174435e-01,-3.426336e-01,3.426336e-01,-4.492150e-01,4.492150e-01,-3.538784e-01,3.538784e-01,-3.679703e-01,3.679703e-01,-3.985452e-01,3.985452e-01,-2.884028e-01,2.884028e-01,-2.797264e-01,2.797264e-01,-2.664214e-01,2.664214e-01,-2.484857e-01,2.484857e-01,-2.581492e-01,2.581492e-01,-2.943778e-01,2.943778e-01,-2.315507e-01,2.315507e-01,-2.979337e-01,2.979337e-01,-2.976173e-01,2.976173e-01,-2.847965e-01,2.847965e-01,-2.814763e-01,2.814763e-01,-2.489068e-01,2.489068e-01,-2.632427e-01,2.632427e-01,-3.308292e-01,3.308292e-01,-2.790170e-01,2.790170e-01]},{"count":61,"threshold":-5.239104e+00,"feature":[{"size":5,"px":[8,8,11,15,6],"py":[3,6,5,3,4],"pz":[0,1,0,0,1],"nx":[3,9,14,8,4],"ny":[4,8,8,7,2],"nz":[1,0,0,0,2]},{"size":5,"px":[11,12,10,6,9],"py":[3,3,2,13,2],"pz":[0,0,0,0,0],"nx":[0,0,5,2,2],"ny":[13,1,8,5,2],"nz":[0,1,1,2,2]},{"size":5,"px":[11,5,11,11,4],"py":[9,13,10,11,6],"pz":[0,0,0,0,1],"nx":[4,15,9,3,3],"ny":[5,8,9,4,4],"nz":[1,0,0,1,-1]},{"size":5,"px":[15,16,8,17,17],"py":[1,2,0,2,2],"pz":[0,0,1,0,-1],"nx":[23,23,23,23,23],"ny":[4,0,2,3,1],"nz":[0,0,0,0,0]},{"size":4,"px":[9,18,17,18],"py":[7,13,13,14],"pz":[1,0,0,0],"nx":[9,7,4,8],"ny":[4,10,2,4],"nz":[1,1,2,1]},{"size":5,"px":[12,11,12,12,6],"py":[6,5,14,5,3],"pz":[0,0,0,0,1],"nx":[13,8,14,7,7],"ny":[16,4,7,4,4],"nz":[0,1,0,1,-1]},{"size":5,"px":[12,6,3,7,12],"py":[7,12,7,11,8],"pz":[0,0,1,0,0],"nx":[16,4,4,4,7],"ny":[8,4,4,4,4],"nz":[0,1,-1,-1,-1]},{"size":5,"px":[6,4,5,3,3],"py":[2,3,2,0,0],"pz":[0,0,0,1,-1],"nx":[1,0,1,0,0],"ny":[0,3,1,1,2],"nz":[0,0,0,1,0]},{"size":2,"px":[15,9],"py":[11,6],"pz":[0,1],"nx":[14,5],"ny":[9,11],"nz":[0,-1]},{"size":5,"px":[10,19,19,10,20],"py":[7,20,14,6,12],"pz":[1,0,0,1,0],"nx":[23,22,11,23,23],"ny":[21,23,9,20,20],"nz":[0,0,1,0,-1]},{"size":5,"px":[1,1,5,1,1],"py":[8,6,6,9,4],"pz":[0,1,1,0,2],"nx":[3,3,3,2,5],"ny":[4,4,2,5,4],"nz":[1,-1,-1,-1,-1]},{"size":5,"px":[13,12,3,11,11],"py":[2,2,0,1,2],"pz":[0,0,2,0,0],"nx":[3,6,8,4,3],"ny":[2,9,4,4,5],"nz":[2,1,1,1,-1]},{"size":3,"px":[12,12,6],"py":[11,12,9],"pz":[0,0,-1],"nx":[2,1,9],"ny":[6,1,14],"nz":[0,2,0]},{"size":5,"px":[6,3,17,16,16],"py":[4,2,14,23,13],"pz":[1,2,0,0,0],"nx":[8,10,21,5,1],"ny":[4,10,11,0,0],"nz":[1,-1,-1,-1,-1]},{"size":5,"px":[5,6,1,3,3],"py":[15,14,4,7,7],"pz":[0,0,2,1,-1],"nx":[1,0,0,1,1],"ny":[5,8,7,18,17],"nz":[2,1,1,0,0]},{"size":4,"px":[6,12,5,3],"py":[6,12,2,7],"pz":[1,-1,-1,-1],"nx":[14,13,13,7],"ny":[12,10,9,8],"nz":[0,0,0,1]},{"size":2,"px":[3,6],"py":[7,15],"pz":[1,0],"nx":[3,3],"ny":[4,2],"nz":[1,-1]},{"size":4,"px":[11,10,12,2],"py":[18,18,18,3],"pz":[0,0,0,2],"nx":[11,17,4,16],"ny":[16,4,4,21],"nz":[0,-1,-1,-1]},{"size":5,"px":[9,8,8,5,2],"py":[4,4,4,2,3],"pz":[0,0,-1,-1,-1],"nx":[2,2,4,4,2],"ny":[1,2,10,5,4],"nz":[2,2,1,1,2]},{"size":4,"px":[8,18,14,18],"py":[7,16,23,15],"pz":[1,0,0,0],"nx":[14,3,1,0],"ny":[21,1,9,3],"nz":[0,-1,-1,-1]},{"size":2,"px":[12,3],"py":[9,5],"pz":[0,2],"nx":[8,1],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[9,9],"py":[1,1],"pz":[1,-1],"nx":[19,20],"ny":[1,2],"nz":[0,0]},{"size":3,"px":[10,10,10],"py":[6,6,8],"pz":[1,-1,-1],"nx":[22,21,22],"ny":[13,18,12],"nz":[0,0,0]},{"size":2,"px":[2,2],"py":[4,1],"pz":[2,-1],"nx":[2,4],"ny":[5,4],"nz":[2,1]},{"size":5,"px":[21,21,21,21,21],"py":[19,17,18,15,16],"pz":[0,0,0,0,0],"nx":[11,21,6,1,21],"ny":[17,1,10,0,2],"nz":[0,-1,-1,-1,-1]},{"size":5,"px":[7,3,4,4,4],"py":[23,13,14,16,13],"pz":[0,0,0,0,0],"nx":[21,22,22,22,22],"ny":[23,21,20,19,19],"nz":[0,0,0,0,-1]},{"size":2,"px":[11,8],"py":[6,6],"pz":[0,1],"nx":[8,4],"ny":[4,2],"nz":[1,-1]},{"size":5,"px":[23,23,11,23,23],"py":[8,12,6,11,10],"pz":[0,0,1,0,0],"nx":[4,4,3,8,8],"ny":[3,8,4,4,4],"nz":[1,1,1,1,-1]},{"size":5,"px":[8,9,4,7,10],"py":[2,1,0,2,1],"pz":[0,0,1,0,0],"nx":[5,5,6,4,4],"ny":[1,0,0,2,1],"nz":[0,0,0,0,-1]},{"size":2,"px":[12,2],"py":[13,6],"pz":[0,-1],"nx":[15,9],"ny":[15,4],"nz":[0,1]},{"size":2,"px":[2,4],"py":[4,9],"pz":[2,1],"nx":[3,13],"ny":[4,1],"nz":[1,-1]},{"size":3,"px":[3,6,2],"py":[10,22,4],"pz":[1,0,2],"nx":[4,2,1],"ny":[10,4,3],"nz":[1,-1,-1]},{"size":2,"px":[1,0],"py":[9,7],"pz":[0,1],"nx":[0,0],"ny":[23,22],"nz":[0,0]},{"size":2,"px":[8,7],"py":[0,1],"pz":[0,0],"nx":[4,4],"ny":[8,8],"nz":[1,-1]},{"size":5,"px":[7,4,4,6,3],"py":[8,4,5,5,3],"pz":[1,2,2,1,2],"nx":[1,0,2,0,0],"ny":[1,0,0,2,4],"nz":[0,2,0,1,-1]},{"size":3,"px":[10,4,4],"py":[6,1,5],"pz":[1,-1,-1],"nx":[5,23,22],"ny":[4,13,7],"nz":[2,0,0]},{"size":2,"px":[2,2],"py":[6,5],"pz":[1,1],"nx":[6,0],"ny":[9,2],"nz":[0,-1]},{"size":5,"px":[0,1,1,0,0],"py":[5,18,19,16,6],"pz":[2,0,0,0,1],"nx":[5,9,4,8,8],"ny":[8,7,3,7,7],"nz":[1,0,1,0,-1]},{"size":2,"px":[13,12],"py":[23,23],"pz":[0,0],"nx":[7,6],"ny":[8,10],"nz":[0,-1]},{"size":2,"px":[14,19],"py":[12,8],"pz":[0,0],"nx":[18,5],"ny":[8,11],"nz":[0,-1]},{"size":5,"px":[2,8,6,4,4],"py":[3,23,14,6,9],"pz":[2,0,0,1,1],"nx":[0,0,0,0,1],"ny":[21,20,5,19,23],"nz":[0,0,2,0,0]},{"size":2,"px":[11,22],"py":[4,14],"pz":[0,-1],"nx":[3,8],"ny":[1,4],"nz":[2,1]},{"size":5,"px":[1,1,0,1,1],"py":[6,8,3,12,7],"pz":[1,1,2,0,1],"nx":[21,21,19,10,10],"ny":[14,16,23,9,9],"nz":[0,0,0,1,-1]},{"size":2,"px":[10,3],"py":[23,2],"pz":[0,2],"nx":[10,3],"ny":[21,5],"nz":[0,-1]},{"size":2,"px":[9,9],"py":[7,0],"pz":[1,-1],"nx":[9,9],"ny":[11,10],"nz":[1,1]},{"size":5,"px":[23,11,23,23,23],"py":[18,10,19,20,16],"pz":[0,1,0,0,0],"nx":[3,3,2,3,2],"ny":[15,16,10,17,9],"nz":[0,0,1,0,-1]},{"size":2,"px":[9,14],"py":[7,18],"pz":[1,0],"nx":[7,10],"ny":[8,8],"nz":[1,-1]},{"size":2,"px":[12,5],"py":[6,4],"pz":[0,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[4,5],"py":[13,4],"pz":[0,-1],"nx":[4,4],"ny":[17,19],"nz":[0,0]},{"size":3,"px":[2,3,3],"py":[11,17,19],"pz":[1,0,0],"nx":[7,7,4],"ny":[8,8,5],"nz":[1,-1,-1]},{"size":2,"px":[6,6],"py":[6,5],"pz":[1,-1],"nx":[2,9],"ny":[4,12],"nz":[1,0]},{"size":5,"px":[8,8,9,2,2],"py":[18,13,12,3,3],"pz":[0,0,0,2,-1],"nx":[23,11,23,11,11],"ny":[13,6,14,7,8],"nz":[0,1,0,1,1]},{"size":2,"px":[9,11],"py":[6,13],"pz":[1,-1],"nx":[4,8],"ny":[2,4],"nz":[2,1]},{"size":2,"px":[8,10],"py":[0,6],"pz":[1,1],"nx":[9,4],"ny":[6,7],"nz":[1,-1]},{"size":3,"px":[3,10,9],"py":[8,6,0],"pz":[1,-1,-1],"nx":[2,2,2],"ny":[15,16,9],"nz":[0,0,1]},{"size":3,"px":[14,15,0],"py":[2,2,5],"pz":[0,0,-1],"nx":[17,17,18],"ny":[0,1,2],"nz":[0,0,0]},{"size":2,"px":[11,5],"py":[14,1],"pz":[0,-1],"nx":[10,9],"ny":[12,14],"nz":[0,0]},{"size":2,"px":[8,8],"py":[7,8],"pz":[1,1],"nx":[8,4],"ny":[4,4],"nz":[1,-1]},{"size":5,"px":[0,0,0,0,0],"py":[19,18,10,5,20],"pz":[0,0,1,2,0],"nx":[4,8,2,4,4],"ny":[4,15,5,10,10],"nz":[1,0,2,1,-1]},{"size":2,"px":[7,0],"py":[13,18],"pz":[0,-1],"nx":[4,3],"ny":[4,4],"nz":[1,1]},{"size":5,"px":[23,22,22,11,22],"py":[16,13,7,6,14],"pz":[0,0,0,1,0],"nx":[13,7,15,14,14],"ny":[6,3,7,6,6],"nz":[0,1,0,0,-1]}],"alpha":[-1.428861e+00,1.428861e+00,-8.591837e-01,8.591837e-01,-7.734305e-01,7.734305e-01,-6.534460e-01,6.534460e-01,-6.262547e-01,6.262547e-01,-5.231782e-01,5.231782e-01,-4.984303e-01,4.984303e-01,-4.913187e-01,4.913187e-01,-4.852198e-01,4.852198e-01,-4.906681e-01,4.906681e-01,-4.126248e-01,4.126248e-01,-4.590814e-01,4.590814e-01,-4.653825e-01,4.653825e-01,-4.179600e-01,4.179600e-01,-4.357392e-01,4.357392e-01,-4.087982e-01,4.087982e-01,-4.594812e-01,4.594812e-01,-4.858794e-01,4.858794e-01,-3.713580e-01,3.713580e-01,-3.894534e-01,3.894534e-01,-3.127168e-01,3.127168e-01,-4.012654e-01,4.012654e-01,-3.370552e-01,3.370552e-01,-3.534712e-01,3.534712e-01,-3.843450e-01,3.843450e-01,-2.688805e-01,2.688805e-01,-3.500203e-01,3.500203e-01,-2.827120e-01,2.827120e-01,-3.742119e-01,3.742119e-01,-3.219074e-01,3.219074e-01,-2.544953e-01,2.544953e-01,-3.355513e-01,3.355513e-01,-2.672670e-01,2.672670e-01,-2.932047e-01,2.932047e-01,-2.404618e-01,2.404618e-01,-2.354372e-01,2.354372e-01,-2.657955e-01,2.657955e-01,-2.293701e-01,2.293701e-01,-2.708918e-01,2.708918e-01,-2.340181e-01,2.340181e-01,-2.464815e-01,2.464815e-01,-2.944239e-01,2.944239e-01,-2.407960e-01,2.407960e-01,-3.029642e-01,3.029642e-01,-2.684602e-01,2.684602e-01,-2.495078e-01,2.495078e-01,-2.539708e-01,2.539708e-01,-2.989293e-01,2.989293e-01,-2.391309e-01,2.391309e-01,-2.531372e-01,2.531372e-01,-2.500390e-01,2.500390e-01,-2.295077e-01,2.295077e-01,-2.526125e-01,2.526125e-01,-2.337182e-01,2.337182e-01,-1.984756e-01,1.984756e-01,-3.089996e-01,3.089996e-01,-2.589053e-01,2.589053e-01,-2.962490e-01,2.962490e-01,-2.458660e-01,2.458660e-01,-2.515206e-01,2.515206e-01,-2.637299e-01,2.637299e-01]},{"count":80,"threshold":-5.185898e+00,"feature":[{"size":5,"px":[12,17,13,10,15],"py":[9,13,3,3,2],"pz":[0,0,0,0,0],"nx":[8,14,6,9,4],"ny":[10,9,8,8,2],"nz":[1,0,1,0,2]},{"size":5,"px":[3,11,8,10,9],"py":[7,4,3,3,3],"pz":[1,0,0,0,0],"nx":[2,1,5,0,0],"ny":[2,15,8,4,13],"nz":[2,0,1,0,0]},{"size":5,"px":[11,11,11,4,17],"py":[7,9,8,6,11],"pz":[0,0,0,1,0],"nx":[8,8,8,3,0],"ny":[4,8,8,8,13],"nz":[1,0,-1,-1,-1]},{"size":5,"px":[14,15,7,16,16],"py":[3,3,1,3,3],"pz":[0,0,1,0,-1],"nx":[23,22,23,22,22],"ny":[6,2,14,3,4],"nz":[0,0,0,0,0]},{"size":4,"px":[6,4,7,15],"py":[4,2,6,17],"pz":[1,2,1,0],"nx":[3,8,3,14],"ny":[4,4,10,22],"nz":[1,1,-1,-1]},{"size":3,"px":[3,5,22],"py":[7,7,5],"pz":[1,-1,-1],"nx":[2,2,4],"ny":[5,2,7],"nz":[2,2,1]},{"size":5,"px":[7,6,5,6,3],"py":[0,1,2,2,0],"pz":[0,0,0,0,1],"nx":[0,1,1,0,1],"ny":[0,2,1,2,0],"nz":[2,0,0,1,0]},{"size":5,"px":[11,11,11,11,5],"py":[11,10,13,12,6],"pz":[0,0,0,0,-1],"nx":[15,14,5,2,8],"ny":[9,8,10,2,10],"nz":[0,0,1,2,0]},{"size":5,"px":[8,5,6,8,7],"py":[12,12,12,23,12],"pz":[0,0,0,0,0],"nx":[3,17,5,2,8],"ny":[4,0,10,2,10],"nz":[1,-1,-1,-1,-1]},{"size":5,"px":[10,10,10,19,20],"py":[8,10,9,15,13],"pz":[1,1,1,0,0],"nx":[23,11,5,23,23],"ny":[20,10,5,19,19],"nz":[0,1,2,0,-1]},{"size":5,"px":[9,13,3,10,12],"py":[2,0,0,1,1],"pz":[0,0,2,0,0],"nx":[3,3,6,7,7],"ny":[5,2,11,4,4],"nz":[2,2,1,1,-1]},{"size":2,"px":[15,7],"py":[17,6],"pz":[0,1],"nx":[14,0],"ny":[16,10],"nz":[0,-1]},{"size":5,"px":[17,15,18,12,19],"py":[22,12,13,7,15],"pz":[0,0,0,0,0],"nx":[8,15,6,1,7],"ny":[4,8,22,5,4],"nz":[1,-1,-1,-1,-1]},{"size":5,"px":[10,9,18,19,8],"py":[2,1,3,3,1],"pz":[1,1,0,0,1],"nx":[23,23,23,11,11],"ny":[0,1,2,0,1],"nz":[0,0,0,1,-1]},{"size":5,"px":[12,23,0,1,8],"py":[14,5,0,17,1],"pz":[0,-1,-1,-1,-1],"nx":[8,14,15,18,14],"ny":[10,11,14,19,10],"nz":[1,0,0,0,0]},{"size":2,"px":[4,6],"py":[6,13],"pz":[1,0],"nx":[4,12],"ny":[10,14],"nz":[1,-1]},{"size":5,"px":[5,23,11,23,13],"py":[3,10,4,11,12],"pz":[2,0,1,0,0],"nx":[7,4,9,8,8],"ny":[4,2,4,4,4],"nz":[1,2,1,1,-1]},{"size":3,"px":[9,5,11],"py":[4,2,4],"pz":[0,1,-1],"nx":[5,2,4],"ny":[0,1,2],"nz":[0,2,0]},{"size":5,"px":[5,2,2,5,8],"py":[12,4,4,6,13],"pz":[0,2,1,1,0],"nx":[3,9,4,4,8],"ny":[4,0,2,2,4],"nz":[1,-1,-1,-1,-1]},{"size":3,"px":[9,5,22],"py":[7,4,20],"pz":[1,-1,-1],"nx":[8,19,4],"ny":[4,18,5],"nz":[1,0,2]},{"size":5,"px":[2,3,3,3,3],"py":[10,16,15,14,13],"pz":[1,0,0,0,0],"nx":[0,0,0,1,0],"ny":[10,20,5,23,21],"nz":[1,0,2,0,0]},{"size":2,"px":[12,11],"py":[4,18],"pz":[0,0],"nx":[11,23],"ny":[17,13],"nz":[0,-1]},{"size":2,"px":[17,8],"py":[16,7],"pz":[0,1],"nx":[8,3],"ny":[4,6],"nz":[1,-1]},{"size":5,"px":[13,5,14,12,3],"py":[4,7,4,5,3],"pz":[0,1,0,0,1],"nx":[21,20,21,21,21],"ny":[2,0,4,3,3],"nz":[0,0,0,0,-1]},{"size":4,"px":[20,20,20,10],"py":[21,19,20,8],"pz":[0,0,0,1],"nx":[8,11,0,2],"ny":[10,8,1,3],"nz":[1,-1,-1,-1]},{"size":4,"px":[6,7,12,8],"py":[12,12,8,11],"pz":[0,0,0,0],"nx":[9,5,5,18],"ny":[9,2,0,20],"nz":[0,-1,-1,-1]},{"size":3,"px":[11,5,9],"py":[0,0,0],"pz":[0,1,0],"nx":[2,6,3],"ny":[3,7,4],"nz":[2,0,1]},{"size":5,"px":[18,18,9,17,17],"py":[15,14,7,14,14],"pz":[0,0,1,0,-1],"nx":[21,21,21,22,20],"ny":[15,21,17,14,23],"nz":[0,0,0,0,0]},{"size":5,"px":[9,12,12,7,4],"py":[4,11,12,6,5],"pz":[1,0,0,1,2],"nx":[16,11,9,6,20],"ny":[8,4,11,10,23],"nz":[0,-1,-1,-1,-1]},{"size":5,"px":[12,11,10,11,11],"py":[23,4,4,5,23],"pz":[0,0,0,0,0],"nx":[11,11,7,3,20],"ny":[21,21,11,1,23],"nz":[0,-1,-1,-1,-1]},{"size":2,"px":[12,1],"py":[12,3],"pz":[0,-1],"nx":[10,10],"ny":[3,2],"nz":[1,1]},{"size":5,"px":[9,4,15,9,9],"py":[8,4,23,7,7],"pz":[1,2,0,1,-1],"nx":[5,3,3,3,2],"ny":[23,19,17,18,15],"nz":[0,0,0,0,0]},{"size":2,"px":[2,0],"py":[16,3],"pz":[0,2],"nx":[9,4],"ny":[15,2],"nz":[0,-1]},{"size":2,"px":[2,3],"py":[3,7],"pz":[2,1],"nx":[3,8],"ny":[4,10],"nz":[1,-1]},{"size":3,"px":[9,4,3],"py":[18,0,14],"pz":[0,-1,-1],"nx":[3,5,2],"ny":[5,8,5],"nz":[2,1,2]},{"size":3,"px":[1,1,10],"py":[2,1,7],"pz":[1,-1,-1],"nx":[0,0,0],"ny":[3,5,1],"nz":[0,0,1]},{"size":4,"px":[11,11,5,2],"py":[12,13,7,3],"pz":[0,0,-1,-1],"nx":[5,10,10,9],"ny":[6,9,10,13],"nz":[1,0,0,0]},{"size":2,"px":[4,8],"py":[3,6],"pz":[2,1],"nx":[9,1],"ny":[4,3],"nz":[1,-1]},{"size":5,"px":[0,0,1,1,0],"py":[4,10,12,13,5],"pz":[1,0,0,0,1],"nx":[4,4,8,7,7],"ny":[3,2,10,4,4],"nz":[2,2,1,1,-1]},{"size":3,"px":[3,4,3],"py":[1,1,2],"pz":[1,-1,-1],"nx":[4,5,3],"ny":[1,0,2],"nz":[0,0,0]},{"size":2,"px":[9,2],"py":[6,4],"pz":[1,-1],"nx":[8,4],"ny":[6,2],"nz":[1,2]},{"size":5,"px":[12,13,15,16,7],"py":[1,1,2,2,1],"pz":[0,0,0,0,1],"nx":[4,4,4,3,7],"ny":[2,2,4,2,4],"nz":[2,-1,-1,-1,-1]},{"size":5,"px":[9,3,2,11,5],"py":[23,7,4,10,6],"pz":[0,1,2,0,1],"nx":[21,20,11,21,21],"ny":[21,23,8,20,20],"nz":[0,0,1,0,-1]},{"size":4,"px":[12,6,13,12],"py":[7,3,5,6],"pz":[0,1,0,0],"nx":[3,0,5,10],"ny":[4,6,5,1],"nz":[1,-1,-1,-1]},{"size":2,"px":[10,4],"py":[4,0],"pz":[0,-1],"nx":[12,11],"ny":[2,1],"nz":[0,0]},{"size":4,"px":[2,3,22,5],"py":[6,1,18,5],"pz":[1,-1,-1,-1],"nx":[0,0,0,3],"ny":[14,3,12,18],"nz":[0,2,0,0]},{"size":3,"px":[10,20,21],"py":[10,18,15],"pz":[1,0,0],"nx":[15,1,2],"ny":[7,0,8],"nz":[0,-1,-1]},{"size":5,"px":[0,0,0,0,0],"py":[4,7,13,4,6],"pz":[1,1,0,2,1],"nx":[5,9,8,4,4],"ny":[3,7,7,3,3],"nz":[1,0,0,1,-1]},{"size":3,"px":[13,12,14],"py":[2,2,2],"pz":[0,0,0],"nx":[4,4,4],"ny":[2,2,5],"nz":[2,-1,-1]},{"size":5,"px":[5,4,6,2,12],"py":[7,9,7,4,10],"pz":[0,1,0,2,0],"nx":[6,1,2,5,2],"ny":[9,2,4,13,4],"nz":[0,-1,-1,-1,-1]},{"size":2,"px":[11,1],"py":[12,5],"pz":[0,-1],"nx":[1,0],"ny":[7,2],"nz":[0,2]},{"size":5,"px":[8,8,1,16,6],"py":[6,6,4,8,11],"pz":[1,-1,-1,-1,-1],"nx":[13,5,4,4,13],"ny":[12,1,2,5,11],"nz":[0,2,2,2,0]},{"size":2,"px":[5,6],"py":[4,14],"pz":[1,0],"nx":[9,5],"ny":[7,1],"nz":[0,-1]},{"size":2,"px":[2,6],"py":[4,14],"pz":[2,0],"nx":[9,2],"ny":[15,1],"nz":[0,-1]},{"size":5,"px":[10,19,20,10,9],"py":[1,2,3,0,0],"pz":[1,0,0,1,-1],"nx":[11,23,23,11,23],"ny":[0,3,1,1,2],"nz":[1,0,0,1,0]},{"size":2,"px":[2,9],"py":[3,12],"pz":[2,0],"nx":[2,6],"ny":[4,6],"nz":[1,-1]},{"size":5,"px":[0,0,0,0,0],"py":[4,10,11,9,9],"pz":[1,0,0,0,-1],"nx":[16,2,17,8,4],"ny":[10,2,9,4,4],"nz":[0,2,0,1,1]},{"size":2,"px":[12,0],"py":[5,4],"pz":[0,-1],"nx":[7,8],"ny":[4,8],"nz":[1,1]},{"size":2,"px":[21,21],"py":[9,10],"pz":[0,0],"nx":[11,8],"ny":[18,8],"nz":[0,-1]},{"size":2,"px":[14,7],"py":[23,9],"pz":[0,1],"nx":[7,13],"ny":[10,4],"nz":[1,-1]},{"size":5,"px":[12,12,12,6,2],"py":[11,13,12,6,4],"pz":[0,0,0,-1,-1],"nx":[0,0,0,0,0],"ny":[14,13,6,12,11],"nz":[0,0,1,0,0]},{"size":2,"px":[8,9],"py":[6,11],"pz":[1,-1],"nx":[15,15],"ny":[11,10],"nz":[0,0]},{"size":4,"px":[4,6,7,2],"py":[8,4,23,7],"pz":[1,-1,-1,-1],"nx":[4,20,19,17],"ny":[0,3,1,1],"nz":[2,0,0,0]},{"size":2,"px":[7,0],"py":[6,0],"pz":[1,-1],"nx":[7,4],"ny":[8,2],"nz":[1,2]},{"size":2,"px":[10,0],"py":[7,0],"pz":[1,-1],"nx":[15,15],"ny":[15,14],"nz":[0,0]},{"size":5,"px":[6,2,5,2,4],"py":[23,7,21,8,16],"pz":[0,1,0,1,0],"nx":[18,2,10,0,11],"ny":[9,3,23,5,3],"nz":[0,-1,-1,-1,-1]},{"size":5,"px":[9,9,8,10,4],"py":[0,2,2,1,1],"pz":[0,0,0,0,1],"nx":[4,3,2,2,5],"ny":[7,3,4,2,17],"nz":[0,1,2,2,0]},{"size":2,"px":[10,7],"py":[5,6],"pz":[1,-1],"nx":[11,11],"ny":[6,5],"nz":[1,1]},{"size":5,"px":[11,11,5,6,11],"py":[8,10,5,5,9],"pz":[0,0,1,1,0],"nx":[13,16,11,14,4],"ny":[9,13,11,20,23],"nz":[0,-1,-1,-1,-1]},{"size":2,"px":[7,14],"py":[14,22],"pz":[0,-1],"nx":[3,4],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[4,11],"py":[4,5],"pz":[2,-1],"nx":[2,4],"ny":[5,7],"nz":[2,1]},{"size":2,"px":[1,0],"py":[0,0],"pz":[0,1],"nx":[0,4],"ny":[0,2],"nz":[0,-1]},{"size":5,"px":[11,11,11,4,9],"py":[5,5,2,9,23],"pz":[0,-1,-1,-1,-1],"nx":[11,12,10,9,5],"ny":[2,2,2,2,1],"nz":[0,0,0,0,1]},{"size":3,"px":[16,14,15],"py":[1,1,0],"pz":[0,0,0],"nx":[4,7,4],"ny":[2,4,4],"nz":[2,1,-1]},{"size":2,"px":[5,0],"py":[14,5],"pz":[0,-1],"nx":[2,4],"ny":[5,17],"nz":[2,0]},{"size":5,"px":[18,7,16,19,4],"py":[13,6,23,13,3],"pz":[0,1,0,0,2],"nx":[5,2,3,4,4],"ny":[1,1,4,1,3],"nz":[0,1,0,0,0]},{"size":2,"px":[8,8],"py":[7,6],"pz":[1,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[2,1],"py":[10,4],"pz":[1,2],"nx":[4,4],"ny":[3,3],"nz":[2,-1]},{"size":2,"px":[10,5],"py":[19,1],"pz":[0,-1],"nx":[4,12],"ny":[10,17],"nz":[1,0]},{"size":5,"px":[12,6,2,4,11],"py":[14,4,2,1,5],"pz":[0,-1,-1,-1,-1],"nx":[3,4,3,4,3],"ny":[13,17,14,16,15],"nz":[0,0,0,0,0]}],"alpha":[-1.368326e+00,1.368326e+00,-7.706897e-01,7.706897e-01,-8.378147e-01,8.378147e-01,-6.120624e-01,6.120624e-01,-5.139189e-01,5.139189e-01,-4.759130e-01,4.759130e-01,-5.161374e-01,5.161374e-01,-5.407743e-01,5.407743e-01,-4.216105e-01,4.216105e-01,-4.418693e-01,4.418693e-01,-4.435335e-01,4.435335e-01,-4.052076e-01,4.052076e-01,-4.293050e-01,4.293050e-01,-3.431154e-01,3.431154e-01,-4.231203e-01,4.231203e-01,-3.917100e-01,3.917100e-01,-3.623450e-01,3.623450e-01,-3.202670e-01,3.202670e-01,-3.331602e-01,3.331602e-01,-3.552034e-01,3.552034e-01,-3.784556e-01,3.784556e-01,-3.295428e-01,3.295428e-01,-3.587038e-01,3.587038e-01,-2.861332e-01,2.861332e-01,-3.403258e-01,3.403258e-01,-3.989002e-01,3.989002e-01,-2.631159e-01,2.631159e-01,-3.272156e-01,3.272156e-01,-2.816567e-01,2.816567e-01,-3.125926e-01,3.125926e-01,-3.146982e-01,3.146982e-01,-2.521825e-01,2.521825e-01,-2.434554e-01,2.434554e-01,-3.435378e-01,3.435378e-01,-3.161172e-01,3.161172e-01,-2.805027e-01,2.805027e-01,-3.303579e-01,3.303579e-01,-2.725089e-01,2.725089e-01,-2.575051e-01,2.575051e-01,-3.210646e-01,3.210646e-01,-2.986997e-01,2.986997e-01,-2.408925e-01,2.408925e-01,-2.456291e-01,2.456291e-01,-2.836550e-01,2.836550e-01,-2.469860e-01,2.469860e-01,-2.915900e-01,2.915900e-01,-2.513559e-01,2.513559e-01,-2.433728e-01,2.433728e-01,-2.377905e-01,2.377905e-01,-2.089327e-01,2.089327e-01,-1.978434e-01,1.978434e-01,-3.017699e-01,3.017699e-01,-2.339661e-01,2.339661e-01,-1.932560e-01,1.932560e-01,-2.278285e-01,2.278285e-01,-2.438200e-01,2.438200e-01,-2.216769e-01,2.216769e-01,-1.941995e-01,1.941995e-01,-2.129081e-01,2.129081e-01,-2.270319e-01,2.270319e-01,-2.393942e-01,2.393942e-01,-2.132518e-01,2.132518e-01,-1.867741e-01,1.867741e-01,-2.394237e-01,2.394237e-01,-2.005917e-01,2.005917e-01,-2.445217e-01,2.445217e-01,-2.229078e-01,2.229078e-01,-2.342967e-01,2.342967e-01,-2.481784e-01,2.481784e-01,-2.735603e-01,2.735603e-01,-2.187604e-01,2.187604e-01,-1.677239e-01,1.677239e-01,-2.248867e-01,2.248867e-01,-2.505358e-01,2.505358e-01,-1.867706e-01,1.867706e-01,-1.904305e-01,1.904305e-01,-1.939881e-01,1.939881e-01,-2.249474e-01,2.249474e-01,-1.762483e-01,1.762483e-01,-2.299974e-01,2.299974e-01]},{"count":115,"threshold":-5.151920e+00,"feature":[{"size":5,"px":[7,14,7,10,6],"py":[3,3,12,4,4],"pz":[0,0,0,0,1],"nx":[14,3,14,9,3],"ny":[7,4,8,8,5],"nz":[0,1,0,0,2]},{"size":5,"px":[13,18,16,17,15],"py":[1,13,1,2,0],"pz":[0,0,0,0,0],"nx":[23,23,8,11,22],"ny":[3,4,4,8,0],"nz":[0,0,1,1,0]},{"size":5,"px":[16,6,6,7,12],"py":[12,13,4,12,5],"pz":[0,0,1,0,0],"nx":[0,0,8,4,0],"ny":[0,2,4,4,2],"nz":[0,0,1,1,-1]},{"size":3,"px":[12,13,7],"py":[13,18,6],"pz":[0,0,1],"nx":[13,5,6],"ny":[16,3,8],"nz":[0,-1,-1]},{"size":5,"px":[10,12,9,13,11],"py":[3,3,3,3,3],"pz":[0,0,0,0,0],"nx":[3,4,15,4,4],"ny":[2,5,10,4,4],"nz":[2,1,0,1,-1]},{"size":5,"px":[12,12,12,3,12],"py":[7,9,8,3,10],"pz":[0,0,0,2,0],"nx":[4,8,15,9,9],"ny":[4,4,8,8,8],"nz":[1,1,0,0,-1]},{"size":5,"px":[6,3,4,4,2],"py":[22,12,13,14,7],"pz":[0,0,0,0,1],"nx":[2,0,1,1,1],"ny":[23,5,22,21,21],"nz":[0,2,0,0,-1]},{"size":2,"px":[3,3],"py":[8,8],"pz":[1,-1],"nx":[3,4],"ny":[4,10],"nz":[1,1]},{"size":5,"px":[11,11,11,11,0],"py":[10,12,11,13,2],"pz":[0,0,0,-1,-1],"nx":[8,13,13,13,13],"ny":[10,8,9,11,10],"nz":[1,0,0,0,0]},{"size":5,"px":[16,16,15,17,18],"py":[12,23,11,12,12],"pz":[0,0,0,0,0],"nx":[8,8,9,3,13],"ny":[4,4,12,3,10],"nz":[1,-1,-1,-1,-1]},{"size":4,"px":[17,16,6,5],"py":[14,13,4,5],"pz":[0,0,-1,-1],"nx":[8,15,4,7],"ny":[10,14,4,8],"nz":[1,0,2,1]},{"size":5,"px":[20,10,20,21,19],"py":[14,7,13,12,22],"pz":[0,1,0,0,0],"nx":[22,23,11,23,23],"ny":[23,22,11,21,20],"nz":[0,0,1,0,-1]},{"size":4,"px":[12,13,1,18],"py":[14,23,3,5],"pz":[0,-1,-1,-1],"nx":[2,10,5,9],"ny":[2,9,8,14],"nz":[2,0,1,0]},{"size":5,"px":[10,4,7,9,8],"py":[1,0,2,0,1],"pz":[0,1,0,0,0],"nx":[2,3,5,3,3],"ny":[2,4,8,3,3],"nz":[2,1,1,1,-1]},{"size":4,"px":[11,2,2,11],"py":[6,4,5,7],"pz":[0,2,2,0],"nx":[3,0,5,3],"ny":[4,9,8,3],"nz":[1,-1,-1,-1]},{"size":5,"px":[12,10,9,12,12],"py":[11,2,1,10,10],"pz":[0,1,1,0,-1],"nx":[22,11,5,22,23],"ny":[1,1,0,0,3],"nz":[0,1,2,0,0]},{"size":4,"px":[5,10,7,11],"py":[14,3,0,4],"pz":[0,-1,-1,-1],"nx":[4,4,4,4],"ny":[17,18,15,16],"nz":[0,0,0,0]},{"size":5,"px":[2,2,3,2,2],"py":[16,12,20,15,17],"pz":[0,0,0,0,0],"nx":[12,8,4,15,15],"ny":[17,4,4,8,8],"nz":[0,1,1,0,-1]},{"size":5,"px":[12,12,1,6,12],"py":[11,10,3,6,10],"pz":[0,0,-1,-1,-1],"nx":[0,0,1,0,2],"ny":[4,0,2,1,0],"nz":[0,2,0,1,0]},{"size":5,"px":[21,20,21,21,14],"py":[9,16,11,8,12],"pz":[0,0,0,0,0],"nx":[17,6,15,0,2],"ny":[8,23,13,2,0],"nz":[0,-1,-1,-1,-1]},{"size":4,"px":[6,9,9,5],"py":[14,18,23,14],"pz":[0,0,0,0],"nx":[9,5,5,12],"ny":[21,5,3,1],"nz":[0,-1,-1,-1]},{"size":2,"px":[12,13],"py":[4,4],"pz":[0,0],"nx":[4,3],"ny":[4,1],"nz":[1,2]},{"size":5,"px":[7,8,11,4,10],"py":[3,3,2,1,2],"pz":[0,0,0,1,0],"nx":[19,20,19,20,20],"ny":[0,3,1,2,2],"nz":[0,0,0,0,-1]},{"size":2,"px":[9,1],"py":[7,4],"pz":[1,-1],"nx":[4,7],"ny":[5,9],"nz":[2,1]},{"size":5,"px":[11,10,1,5,1],"py":[10,12,6,6,5],"pz":[0,0,1,1,1],"nx":[16,3,2,4,4],"ny":[10,4,2,4,4],"nz":[0,1,2,1,-1]},{"size":2,"px":[15,0],"py":[17,0],"pz":[0,-1],"nx":[7,4],"ny":[8,5],"nz":[1,2]},{"size":5,"px":[8,10,9,9,9],"py":[2,2,2,1,1],"pz":[0,0,0,0,-1],"nx":[4,2,3,3,2],"ny":[0,3,2,1,4],"nz":[0,0,0,0,0]},{"size":4,"px":[11,15,17,16],"py":[8,10,11,11],"pz":[0,0,0,0],"nx":[14,1,1,2],"ny":[9,5,7,0],"nz":[0,-1,-1,-1]},{"size":3,"px":[3,5,9],"py":[8,6,12],"pz":[0,1,0],"nx":[3,4,18],"ny":[4,2,22],"nz":[1,-1,-1]},{"size":5,"px":[6,1,7,3,3],"py":[13,4,13,7,7],"pz":[0,2,0,1,-1],"nx":[0,0,0,0,0],"ny":[16,15,8,13,14],"nz":[0,0,1,0,0]},{"size":2,"px":[5,16],"py":[13,10],"pz":[0,-1],"nx":[3,4],"ny":[4,5],"nz":[1,1]},{"size":5,"px":[5,23,11,23,23],"py":[5,12,4,16,15],"pz":[2,0,1,0,0],"nx":[3,2,4,5,5],"ny":[4,2,4,11,11],"nz":[1,2,1,1,-1]},{"size":4,"px":[10,10,3,23],"py":[7,7,3,16],"pz":[1,-1,-1,-1],"nx":[5,23,11,22],"ny":[4,13,7,16],"nz":[2,0,1,0]},{"size":5,"px":[15,14,13,15,16],"py":[1,0,0,0,1],"pz":[0,0,0,0,0],"nx":[4,9,8,8,8],"ny":[2,4,9,4,4],"nz":[2,1,1,1,-1]},{"size":2,"px":[10,4],"py":[5,5],"pz":[0,-1],"nx":[3,15],"ny":[1,8],"nz":[2,0]},{"size":2,"px":[6,12],"py":[6,9],"pz":[1,0],"nx":[10,10],"ny":[10,10],"nz":[0,-1]},{"size":5,"px":[1,0,0,0,0],"py":[5,4,11,9,12],"pz":[0,1,0,0,0],"nx":[9,8,2,4,7],"ny":[7,7,2,4,7],"nz":[0,0,2,1,0]},{"size":2,"px":[4,8],"py":[4,7],"pz":[2,1],"nx":[9,8],"ny":[4,7],"nz":[1,-1]},{"size":2,"px":[5,6],"py":[4,1],"pz":[2,-1],"nx":[8,6],"ny":[7,3],"nz":[1,1]},{"size":5,"px":[8,5,7,6,11],"py":[12,5,13,13,22],"pz":[0,1,0,0,0],"nx":[23,23,23,22,22],"ny":[20,19,21,23,23],"nz":[0,0,0,0,-1]},{"size":2,"px":[3,17],"py":[6,9],"pz":[1,-1],"nx":[3,3],"ny":[10,9],"nz":[1,1]},{"size":2,"px":[14,11],"py":[23,5],"pz":[0,0],"nx":[7,3],"ny":[10,20],"nz":[1,-1]},{"size":2,"px":[3,4],"py":[8,8],"pz":[1,1],"nx":[9,4],"ny":[15,4],"nz":[0,-1]},{"size":2,"px":[2,4],"py":[4,7],"pz":[2,1],"nx":[2,4],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[23,11],"py":[21,10],"pz":[0,1],"nx":[2,3],"ny":[11,14],"nz":[1,0]},{"size":4,"px":[11,11,11,3],"py":[13,12,11,4],"pz":[0,0,0,-1],"nx":[14,13,13,6],"ny":[13,11,10,5],"nz":[0,0,0,1]},{"size":2,"px":[4,7],"py":[3,6],"pz":[2,1],"nx":[9,19],"ny":[4,14],"nz":[1,-1]},{"size":3,"px":[10,5,7],"py":[5,0,6],"pz":[1,-1,-1],"nx":[10,21,5],"ny":[0,5,3],"nz":[1,0,2]},{"size":2,"px":[16,13],"py":[3,15],"pz":[0,-1],"nx":[17,7],"ny":[23,8],"nz":[0,1]},{"size":3,"px":[4,2,2],"py":[15,7,19],"pz":[0,1,-1],"nx":[2,8,4],"ny":[5,14,9],"nz":[2,0,1]},{"size":3,"px":[8,3,6],"py":[10,2,4],"pz":[0,2,1],"nx":[3,8,4],"ny":[4,14,9],"nz":[1,-1,-1]},{"size":2,"px":[14,3],"py":[18,3],"pz":[0,-1],"nx":[12,14],"ny":[17,9],"nz":[0,0]},{"size":3,"px":[7,1,10],"py":[14,10,10],"pz":[0,-1,-1],"nx":[9,6,2],"ny":[13,18,2],"nz":[0,0,2]},{"size":2,"px":[11,8],"py":[13,11],"pz":[0,-1],"nx":[2,4],"ny":[7,18],"nz":[1,0]},{"size":2,"px":[5,4],"py":[21,17],"pz":[0,0],"nx":[9,3],"ny":[5,1],"nz":[1,-1]},{"size":2,"px":[6,6],"py":[4,0],"pz":[0,-1],"nx":[4,3],"ny":[2,0],"nz":[0,1]},{"size":2,"px":[2,1],"py":[1,5],"pz":[0,-1],"nx":[0,1],"ny":[1,0],"nz":[1,0]},{"size":2,"px":[18,1],"py":[13,5],"pz":[0,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":5,"px":[0,0,0,0,1],"py":[4,3,2,12,15],"pz":[1,1,2,0,0],"nx":[5,9,4,8,8],"ny":[3,6,3,6,6],"nz":[1,0,1,0,-1]},{"size":2,"px":[2,5],"py":[0,2],"pz":[1,-1],"nx":[2,1],"ny":[0,1],"nz":[0,1]},{"size":4,"px":[7,15,4,20],"py":[8,23,4,8],"pz":[1,0,2,0],"nx":[6,0,3,4],"ny":[9,2,13,6],"nz":[0,-1,-1,-1]},{"size":4,"px":[11,11,10,20],"py":[10,9,11,8],"pz":[0,0,0,-1],"nx":[21,20,21,21],"ny":[18,23,19,17],"nz":[0,0,0,0]},{"size":2,"px":[3,8],"py":[7,5],"pz":[1,-1],"nx":[3,4],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[5,11],"py":[3,4],"pz":[2,1],"nx":[8,7],"ny":[5,12],"nz":[1,0]},{"size":2,"px":[4,1],"py":[1,3],"pz":[1,-1],"nx":[3,6],"ny":[0,0],"nz":[1,0]},{"size":2,"px":[19,9],"py":[16,8],"pz":[0,1],"nx":[14,6],"ny":[15,1],"nz":[0,-1]},{"size":2,"px":[12,6],"py":[13,5],"pz":[0,-1],"nx":[5,5],"ny":[1,2],"nz":[2,2]},{"size":5,"px":[16,14,4,15,12],"py":[1,1,1,2,1],"pz":[0,0,2,0,0],"nx":[6,4,3,2,10],"ny":[22,8,2,1,7],"nz":[0,1,1,2,0]},{"size":5,"px":[6,8,6,5,5],"py":[1,0,0,1,0],"pz":[0,0,0,0,0],"nx":[4,4,4,4,8],"ny":[4,3,2,5,10],"nz":[2,2,2,2,1]},{"size":2,"px":[9,8],"py":[17,0],"pz":[0,-1],"nx":[2,5],"ny":[5,8],"nz":[2,1]},{"size":2,"px":[8,0],"py":[7,3],"pz":[1,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[10,21],"py":[11,20],"pz":[1,0],"nx":[11,4],"ny":[17,1],"nz":[0,-1]},{"size":5,"px":[5,10,4,17,10],"py":[3,6,3,11,5],"pz":[1,0,1,0,0],"nx":[21,20,9,19,10],"ny":[4,3,0,2,1],"nz":[0,0,1,0,-1]},{"size":2,"px":[23,23],"py":[10,10],"pz":[0,-1],"nx":[23,23],"ny":[21,22],"nz":[0,0]},{"size":5,"px":[9,20,19,20,20],"py":[0,3,1,2,2],"pz":[1,0,0,0,-1],"nx":[11,23,11,23,5],"ny":[1,2,0,1,0],"nz":[1,0,1,0,2]},{"size":3,"px":[6,8,7],"py":[4,10,11],"pz":[1,0,0],"nx":[8,3,4],"ny":[9,4,4],"nz":[0,-1,-1]},{"size":4,"px":[13,13,10,4],"py":[14,23,1,5],"pz":[0,-1,-1,-1],"nx":[15,14,8,8],"ny":[13,12,8,9],"nz":[0,0,1,1]},{"size":2,"px":[11,9],"py":[5,8],"pz":[0,-1],"nx":[7,8],"ny":[7,4],"nz":[0,1]},{"size":5,"px":[4,8,4,7,7],"py":[2,3,3,11,11],"pz":[2,1,2,1,-1],"nx":[0,0,1,0,0],"ny":[4,6,15,3,2],"nz":[1,1,0,2,2]},{"size":2,"px":[6,1],"py":[12,1],"pz":[0,-1],"nx":[1,10],"ny":[2,11],"nz":[2,0]},{"size":5,"px":[0,0,2,3,7],"py":[0,1,4,3,11],"pz":[0,-1,-1,-1,-1],"nx":[9,11,9,6,12],"ny":[2,1,1,0,2],"nz":[0,0,0,1,0]},{"size":2,"px":[10,11],"py":[4,4],"pz":[0,0],"nx":[8,4],"ny":[4,2],"nz":[1,-1]},{"size":5,"px":[1,1,1,1,1],"py":[15,10,19,16,18],"pz":[0,1,0,0,0],"nx":[4,5,3,5,6],"ny":[4,19,9,18,19],"nz":[1,0,1,0,-1]},{"size":5,"px":[12,12,12,12,20],"py":[11,12,13,13,18],"pz":[0,0,0,-1,-1],"nx":[0,0,0,0,0],"ny":[4,2,7,6,12],"nz":[1,2,1,1,0]},{"size":2,"px":[0,0],"py":[9,11],"pz":[0,0],"nx":[10,4],"ny":[5,3],"nz":[1,-1]},{"size":2,"px":[11,8],"py":[9,6],"pz":[0,1],"nx":[13,13],"ny":[10,10],"nz":[0,-1]},{"size":2,"px":[6,3],"py":[5,3],"pz":[1,2],"nx":[3,3],"ny":[5,5],"nz":[2,-1]},{"size":2,"px":[19,9],"py":[10,6],"pz":[0,1],"nx":[4,1],"ny":[2,2],"nz":[2,-1]},{"size":2,"px":[14,4],"py":[19,12],"pz":[0,-1],"nx":[14,8],"ny":[17,10],"nz":[0,1]},{"size":4,"px":[4,2,13,2],"py":[12,6,9,3],"pz":[0,1,-1,-1],"nx":[1,0,1,0],"ny":[16,14,11,15],"nz":[0,0,1,0]},{"size":2,"px":[3,3],"py":[8,7],"pz":[1,1],"nx":[4,4],"ny":[4,8],"nz":[1,-1]},{"size":5,"px":[9,11,12,6,10],"py":[2,1,2,1,2],"pz":[0,0,0,1,0],"nx":[4,6,4,6,2],"ny":[4,0,9,1,8],"nz":[0,0,1,0,1]},{"size":5,"px":[4,4,7,2,2],"py":[19,20,23,8,9],"pz":[0,0,0,1,1],"nx":[7,0,5,6,2],"ny":[10,5,4,1,8],"nz":[1,-1,-1,-1,-1]},{"size":5,"px":[18,18,17,18,18],"py":[15,16,14,20,17],"pz":[0,0,0,0,0],"nx":[15,2,2,5,2],"ny":[8,0,2,9,4],"nz":[0,-1,-1,-1,-1]},{"size":4,"px":[13,13,13,18],"py":[11,12,12,20],"pz":[0,0,-1,-1],"nx":[1,3,10,10],"ny":[1,6,12,11],"nz":[2,0,0,0]},{"size":2,"px":[8,9],"py":[0,1],"pz":[1,1],"nx":[19,4],"ny":[2,2],"nz":[0,-1]},{"size":2,"px":[6,3],"py":[4,2],"pz":[1,2],"nx":[8,4],"ny":[4,0],"nz":[1,-1]},{"size":5,"px":[23,11,22,13,13],"py":[8,3,3,12,12],"pz":[0,1,0,0,-1],"nx":[15,7,14,13,8],"ny":[7,3,6,6,3],"nz":[0,1,0,0,1]},{"size":3,"px":[9,11,19],"py":[7,3,0],"pz":[1,-1,-1],"nx":[23,23,11],"ny":[16,12,7],"nz":[0,0,1]},{"size":2,"px":[15,8],"py":[23,7],"pz":[0,-1],"nx":[4,3],"ny":[5,4],"nz":[2,2]},{"size":2,"px":[4,10],"py":[6,13],"pz":[1,-1],"nx":[2,3],"ny":[4,10],"nz":[2,1]},{"size":2,"px":[4,1],"py":[11,2],"pz":[1,2],"nx":[9,2],"ny":[5,2],"nz":[1,-1]},{"size":2,"px":[22,22],"py":[22,21],"pz":[0,0],"nx":[3,0],"ny":[5,3],"nz":[1,-1]},{"size":2,"px":[20,10],"py":[12,6],"pz":[0,1],"nx":[20,10],"ny":[23,11],"nz":[0,-1]},{"size":4,"px":[10,3,3,4],"py":[5,3,4,9],"pz":[0,-1,-1,-1],"nx":[14,4,3,11],"ny":[2,1,1,3],"nz":[0,2,2,0]},{"size":3,"px":[15,15,3],"py":[1,1,4],"pz":[0,-1,-1],"nx":[7,4,4],"ny":[8,2,3],"nz":[1,2,2]},{"size":3,"px":[0,0,0],"py":[3,4,6],"pz":[2,2,1],"nx":[0,21,4],"ny":[23,14,3],"nz":[0,-1,-1]},{"size":5,"px":[4,4,5,3,4],"py":[9,11,8,4,8],"pz":[1,1,1,2,1],"nx":[21,21,10,19,19],"ny":[3,4,1,0,0],"nz":[0,0,1,0,-1]},{"size":4,"px":[21,20,20,21],"py":[18,21,20,17],"pz":[0,0,0,0],"nx":[8,1,4,2],"ny":[10,0,2,4],"nz":[1,-1,-1,-1]},{"size":2,"px":[3,6],"py":[7,14],"pz":[1,0],"nx":[3,5],"ny":[4,5],"nz":[1,-1]},{"size":3,"px":[12,0,23],"py":[20,2,13],"pz":[0,-1,-1],"nx":[12,2,9],"ny":[19,2,7],"nz":[0,2,0]},{"size":2,"px":[0,6],"py":[22,11],"pz":[0,-1],"nx":[20,18],"ny":[12,23],"nz":[0,0]},{"size":5,"px":[9,15,15,16,8],"py":[2,1,2,2,1],"pz":[1,0,0,0,1],"nx":[1,1,1,1,1],"ny":[16,10,17,18,18],"nz":[0,1,0,0,-1]},{"size":5,"px":[10,5,3,5,8],"py":[14,2,1,4,1],"pz":[0,-1,-1,-1,-1],"nx":[23,23,23,23,23],"ny":[18,15,16,14,17],"nz":[0,0,0,0,0]},{"size":5,"px":[2,2,2,3,2],"py":[16,17,15,20,11],"pz":[0,0,0,0,1],"nx":[8,22,2,1,23],"ny":[20,11,5,0,17],"nz":[0,-1,-1,-1,-1]}],"alpha":[-1.299972e+00,1.299972e+00,-7.630804e-01,7.630804e-01,-5.530378e-01,5.530378e-01,-5.444703e-01,5.444703e-01,-5.207701e-01,5.207701e-01,-5.035143e-01,5.035143e-01,-4.514416e-01,4.514416e-01,-4.897723e-01,4.897723e-01,-5.006264e-01,5.006264e-01,-4.626049e-01,4.626049e-01,-4.375402e-01,4.375402e-01,-3.742565e-01,3.742565e-01,-3.873996e-01,3.873996e-01,-3.715484e-01,3.715484e-01,-3.562480e-01,3.562480e-01,-3.216189e-01,3.216189e-01,-3.983409e-01,3.983409e-01,-3.191891e-01,3.191891e-01,-3.242173e-01,3.242173e-01,-3.528040e-01,3.528040e-01,-3.562318e-01,3.562318e-01,-3.592398e-01,3.592398e-01,-2.557584e-01,2.557584e-01,-2.747951e-01,2.747951e-01,-2.747554e-01,2.747554e-01,-2.980481e-01,2.980481e-01,-2.887670e-01,2.887670e-01,-3.895318e-01,3.895318e-01,-2.786896e-01,2.786896e-01,-2.763841e-01,2.763841e-01,-2.704816e-01,2.704816e-01,-2.075489e-01,2.075489e-01,-3.104773e-01,3.104773e-01,-2.580337e-01,2.580337e-01,-2.448334e-01,2.448334e-01,-3.054279e-01,3.054279e-01,-2.335804e-01,2.335804e-01,-2.972322e-01,2.972322e-01,-2.270521e-01,2.270521e-01,-2.134621e-01,2.134621e-01,-2.261655e-01,2.261655e-01,-2.091024e-01,2.091024e-01,-2.478928e-01,2.478928e-01,-2.468972e-01,2.468972e-01,-1.919746e-01,1.919746e-01,-2.756623e-01,2.756623e-01,-2.629717e-01,2.629717e-01,-2.198653e-01,2.198653e-01,-2.174434e-01,2.174434e-01,-2.193626e-01,2.193626e-01,-1.956262e-01,1.956262e-01,-1.720459e-01,1.720459e-01,-1.781067e-01,1.781067e-01,-1.773484e-01,1.773484e-01,-1.793871e-01,1.793871e-01,-1.973396e-01,1.973396e-01,-2.397262e-01,2.397262e-01,-2.164685e-01,2.164685e-01,-2.214348e-01,2.214348e-01,-2.265941e-01,2.265941e-01,-2.075436e-01,2.075436e-01,-2.244070e-01,2.244070e-01,-2.291992e-01,2.291992e-01,-2.223506e-01,2.223506e-01,-1.639398e-01,1.639398e-01,-1.732374e-01,1.732374e-01,-1.808631e-01,1.808631e-01,-1.860962e-01,1.860962e-01,-1.781604e-01,1.781604e-01,-2.108322e-01,2.108322e-01,-2.386390e-01,2.386390e-01,-1.942083e-01,1.942083e-01,-1.949161e-01,1.949161e-01,-1.953729e-01,1.953729e-01,-2.317591e-01,2.317591e-01,-2.335136e-01,2.335136e-01,-2.282835e-01,2.282835e-01,-2.148716e-01,2.148716e-01,-1.588127e-01,1.588127e-01,-1.566765e-01,1.566765e-01,-1.644839e-01,1.644839e-01,-2.386947e-01,2.386947e-01,-1.704126e-01,1.704126e-01,-2.213945e-01,2.213945e-01,-1.740398e-01,1.740398e-01,-2.451678e-01,2.451678e-01,-2.120524e-01,2.120524e-01,-1.886646e-01,1.886646e-01,-2.824447e-01,2.824447e-01,-1.900364e-01,1.900364e-01,-2.179183e-01,2.179183e-01,-2.257696e-01,2.257696e-01,-2.023404e-01,2.023404e-01,-1.886901e-01,1.886901e-01,-1.850663e-01,1.850663e-01,-2.035414e-01,2.035414e-01,-1.930174e-01,1.930174e-01,-1.898282e-01,1.898282e-01,-1.666640e-01,1.666640e-01,-1.646143e-01,1.646143e-01,-1.543475e-01,1.543475e-01,-1.366289e-01,1.366289e-01,-1.636837e-01,1.636837e-01,-2.547716e-01,2.547716e-01,-1.281869e-01,1.281869e-01,-1.509159e-01,1.509159e-01,-1.447827e-01,1.447827e-01,-1.626126e-01,1.626126e-01,-2.387014e-01,2.387014e-01,-2.571160e-01,2.571160e-01,-1.719175e-01,1.719175e-01,-1.646742e-01,1.646742e-01,-1.717041e-01,1.717041e-01,-2.039217e-01,2.039217e-01,-1.796907e-01,1.796907e-01]},{"count":153,"threshold":-4.971032e+00,"feature":[{"size":5,"px":[14,13,18,10,16],"py":[2,2,13,3,12],"pz":[0,0,0,0,0],"nx":[21,7,14,23,23],"ny":[16,7,8,3,13],"nz":[0,1,0,0,0]},{"size":5,"px":[12,12,12,15,14],"py":[9,10,11,3,3],"pz":[0,0,0,0,0],"nx":[9,9,8,14,3],"ny":[9,8,5,9,5],"nz":[0,0,1,0,2]},{"size":5,"px":[5,11,7,6,8],"py":[12,8,12,12,11],"pz":[0,0,0,0,0],"nx":[8,4,3,9,9],"ny":[4,4,4,9,9],"nz":[1,1,1,0,-1]},{"size":5,"px":[9,8,4,10,6],"py":[2,2,1,3,13],"pz":[0,0,1,0,0],"nx":[1,1,5,1,1],"ny":[2,3,8,4,16],"nz":[0,0,1,0,0]},{"size":5,"px":[3,16,6,17,15],"py":[2,17,4,12,12],"pz":[2,0,1,0,0],"nx":[4,8,15,1,1],"ny":[4,4,8,16,16],"nz":[1,1,-1,-1,-1]},{"size":4,"px":[18,15,8,17],"py":[12,23,6,12],"pz":[0,0,1,0],"nx":[15,4,10,5],"ny":[21,8,14,3],"nz":[0,-1,-1,-1]},{"size":5,"px":[18,17,9,19,19],"py":[3,1,0,3,3],"pz":[0,0,1,0,-1],"nx":[22,11,23,23,23],"ny":[0,1,2,3,4],"nz":[0,1,0,0,0]},{"size":4,"px":[9,5,5,10],"py":[18,15,14,18],"pz":[0,0,0,0],"nx":[10,11,2,0],"ny":[16,7,12,7],"nz":[0,-1,-1,-1]},{"size":2,"px":[2,12],"py":[4,6],"pz":[2,0],"nx":[3,12],"ny":[4,19],"nz":[1,-1]},{"size":5,"px":[3,4,5,2,2],"py":[3,3,3,1,1],"pz":[0,0,0,1,-1],"nx":[0,0,1,0,0],"ny":[3,4,0,1,2],"nz":[0,0,0,1,0]},{"size":5,"px":[12,12,12,8,10],"py":[13,12,12,1,18],"pz":[0,0,-1,-1,-1],"nx":[13,8,7,14,9],"ny":[10,10,7,13,4],"nz":[0,1,1,0,1]},{"size":5,"px":[15,4,12,14,12],"py":[12,3,9,10,8],"pz":[0,2,0,0,0],"nx":[14,7,11,2,9],"ny":[8,4,7,5,4],"nz":[0,1,-1,-1,-1]},{"size":3,"px":[3,9,7],"py":[7,23,15],"pz":[1,-1,-1],"nx":[4,4,2],"ny":[9,7,5],"nz":[1,1,2]},{"size":3,"px":[5,17,5],"py":[3,23,4],"pz":[2,0,2],"nx":[23,2,4],"ny":[23,16,4],"nz":[0,-1,-1]},{"size":5,"px":[4,9,9,10,8],"py":[1,0,1,0,2],"pz":[1,0,0,0,0],"nx":[2,5,4,2,2],"ny":[2,19,11,4,1],"nz":[2,0,1,2,2]},{"size":5,"px":[8,3,8,4,7],"py":[23,9,13,8,16],"pz":[0,1,0,1,0],"nx":[8,2,5,3,2],"ny":[8,15,1,1,1],"nz":[0,-1,-1,-1,-1]},{"size":2,"px":[11,5],"py":[14,5],"pz":[0,-1],"nx":[1,9],"ny":[3,13],"nz":[2,0]},{"size":5,"px":[5,8,1,8,6],"py":[12,12,3,23,12],"pz":[0,0,2,0,0],"nx":[1,1,2,1,1],"ny":[22,21,23,20,20],"nz":[0,0,0,0,-1]},{"size":5,"px":[14,21,19,21,20],"py":[13,8,20,10,7],"pz":[0,0,0,0,0],"nx":[16,0,14,23,1],"ny":[8,1,23,10,20],"nz":[0,-1,-1,-1,-1]},{"size":5,"px":[15,16,13,14,14],"py":[3,3,3,3,3],"pz":[0,0,0,0,-1],"nx":[18,19,18,9,17],"ny":[2,2,1,1,0],"nz":[0,0,0,1,0]},{"size":2,"px":[17,9],"py":[14,4],"pz":[0,-1],"nx":[9,18],"ny":[4,18],"nz":[1,0]},{"size":2,"px":[21,20],"py":[17,21],"pz":[0,0],"nx":[12,3],"ny":[17,10],"nz":[0,-1]},{"size":2,"px":[2,1],"py":[10,4],"pz":[1,2],"nx":[4,1],"ny":[10,5],"nz":[1,-1]},{"size":5,"px":[7,8,4,9,9],"py":[2,2,0,2,2],"pz":[0,0,1,0,-1],"nx":[5,5,4,6,3],"ny":[0,1,2,0,0],"nz":[0,0,0,0,1]},{"size":2,"px":[2,5],"py":[3,5],"pz":[2,-1],"nx":[3,2],"ny":[4,2],"nz":[1,2]},{"size":5,"px":[0,0,0,0,0],"py":[0,1,3,4,4],"pz":[2,2,1,1,-1],"nx":[20,20,19,20,19],"ny":[21,20,23,19,22],"nz":[0,0,0,0,0]},{"size":2,"px":[9,18],"py":[8,16],"pz":[1,0],"nx":[14,6],"ny":[15,16],"nz":[0,-1]},{"size":3,"px":[3,4,7],"py":[3,3,9],"pz":[2,2,1],"nx":[8,9,7],"ny":[4,11,4],"nz":[1,-1,-1]},{"size":5,"px":[6,14,4,7,7],"py":[4,23,3,6,6],"pz":[1,0,2,1,-1],"nx":[2,0,2,1,3],"ny":[20,4,21,10,23],"nz":[0,2,0,1,0]},{"size":5,"px":[2,4,8,9,10],"py":[3,8,13,23,23],"pz":[2,1,0,0,0],"nx":[10,4,0,3,3],"ny":[21,3,0,3,23],"nz":[0,-1,-1,-1,-1]},{"size":3,"px":[11,10,11],"py":[6,5,5],"pz":[0,0,0],"nx":[14,6,1],"ny":[7,9,5],"nz":[0,1,-1]},{"size":5,"px":[11,11,11,11,6],"py":[11,12,10,13,6],"pz":[0,0,0,0,1],"nx":[9,13,13,13,4],"ny":[4,9,10,11,2],"nz":[1,0,0,0,-1]},{"size":2,"px":[2,4],"py":[3,6],"pz":[2,1],"nx":[3,11],"ny":[4,7],"nz":[1,-1]},{"size":2,"px":[1,2],"py":[4,11],"pz":[2,0],"nx":[8,8],"ny":[15,15],"nz":[0,-1]},{"size":5,"px":[12,12,13,12,12],"py":[10,11,13,12,12],"pz":[0,0,0,0,-1],"nx":[0,0,0,1,0],"ny":[13,2,12,5,14],"nz":[0,2,0,0,0]},{"size":5,"px":[0,0,0,1,1],"py":[4,3,11,15,13],"pz":[1,2,0,0,0],"nx":[2,3,3,1,0],"ny":[2,4,4,5,14],"nz":[2,1,-1,-1,-1]},{"size":2,"px":[4,11],"py":[12,10],"pz":[0,-1],"nx":[1,2],"ny":[2,4],"nz":[2,1]},{"size":5,"px":[18,8,9,9,9],"py":[15,7,8,10,7],"pz":[0,1,1,1,1],"nx":[22,23,21,22,11],"ny":[20,16,23,19,9],"nz":[0,0,0,0,1]},{"size":5,"px":[14,12,13,14,15],"py":[1,0,0,0,1],"pz":[0,0,0,0,0],"nx":[4,9,4,7,7],"ny":[2,3,1,8,8],"nz":[2,1,2,1,-1]},{"size":2,"px":[13,9],"py":[14,19],"pz":[0,-1],"nx":[6,10],"ny":[0,2],"nz":[1,0]},{"size":2,"px":[13,12],"py":[4,4],"pz":[0,0],"nx":[3,3],"ny":[1,1],"nz":[2,-1]},{"size":3,"px":[14,5,5],"py":[18,3,4],"pz":[0,-1,-1],"nx":[8,7,8],"ny":[4,8,10],"nz":[1,1,1]},{"size":2,"px":[8,18],"py":[6,11],"pz":[1,0],"nx":[9,1],"ny":[4,0],"nz":[1,-1]},{"size":2,"px":[16,11],"py":[9,7],"pz":[0,0],"nx":[7,7],"ny":[4,4],"nz":[1,-1]},{"size":5,"px":[23,11,23,11,23],"py":[13,4,12,7,10],"pz":[0,1,0,1,0],"nx":[7,4,8,15,15],"ny":[9,2,4,8,8],"nz":[0,2,1,0,-1]},{"size":2,"px":[6,3],"py":[1,0],"pz":[0,1],"nx":[4,1],"ny":[1,2],"nz":[0,-1]},{"size":2,"px":[5,5],"py":[7,6],"pz":[0,1],"nx":[6,4],"ny":[9,11],"nz":[0,-1]},{"size":4,"px":[5,6,5,5],"py":[8,6,11,6],"pz":[1,1,1,0],"nx":[23,0,4,5],"ny":[0,2,2,1],"nz":[0,-1,-1,-1]},{"size":2,"px":[18,4],"py":[13,3],"pz":[0,-1],"nx":[15,4],"ny":[11,2],"nz":[0,2]},{"size":2,"px":[4,0],"py":[8,0],"pz":[1,-1],"nx":[9,2],"ny":[15,5],"nz":[0,2]},{"size":5,"px":[15,15,16,14,14],"py":[0,1,1,0,0],"pz":[0,0,0,0,-1],"nx":[4,4,8,8,15],"ny":[4,5,4,11,23],"nz":[2,2,1,1,0]},{"size":4,"px":[12,11,3,14],"py":[14,22,1,0],"pz":[0,-1,-1,-1],"nx":[8,15,7,16],"ny":[2,3,1,3],"nz":[1,0,1,0]},{"size":2,"px":[5,12],"py":[6,17],"pz":[1,-1],"nx":[2,1],"ny":[4,2],"nz":[1,2]},{"size":5,"px":[13,12,12,7,7],"py":[5,6,5,14,14],"pz":[0,0,0,0,-1],"nx":[10,3,10,1,10],"ny":[13,8,11,3,10],"nz":[0,0,0,1,0]},{"size":2,"px":[4,4],"py":[15,0],"pz":[0,-1],"nx":[4,4],"ny":[16,17],"nz":[0,0]},{"size":5,"px":[1,4,2,1,2],"py":[4,0,1,1,0],"pz":[1,1,1,2,1],"nx":[4,9,1,5,1],"ny":[3,4,4,5,5],"nz":[1,-1,-1,-1,-1]},{"size":2,"px":[10,3],"py":[3,1],"pz":[0,2],"nx":[8,8],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[16,0],"py":[21,0],"pz":[0,-1],"nx":[6,8],"ny":[8,4],"nz":[1,1]},{"size":2,"px":[7,11],"py":[4,18],"pz":[0,-1],"nx":[5,7],"ny":[0,2],"nz":[2,0]},{"size":2,"px":[9,7],"py":[0,3],"pz":[1,-1],"nx":[20,10],"ny":[0,1],"nz":[0,1]},{"size":4,"px":[10,4,1,5],"py":[0,6,8,4],"pz":[1,-1,-1,-1],"nx":[6,15,4,14],"ny":[3,5,1,5],"nz":[1,0,2,0]},{"size":2,"px":[4,4],"py":[3,4],"pz":[2,2],"nx":[9,2],"ny":[4,0],"nz":[1,-1]},{"size":2,"px":[8,4],"py":[3,4],"pz":[0,-1],"nx":[8,6],"ny":[2,1],"nz":[0,0]},{"size":2,"px":[2,0],"py":[6,3],"pz":[1,2],"nx":[0,7],"ny":[7,8],"nz":[1,-1]},{"size":2,"px":[10,0],"py":[7,3],"pz":[1,-1],"nx":[15,4],"ny":[14,4],"nz":[0,2]},{"size":4,"px":[3,1,2,2],"py":[20,7,18,17],"pz":[0,1,0,0],"nx":[9,5,5,4],"ny":[5,4,18,4],"nz":[1,-1,-1,-1]},{"size":2,"px":[5,4],"py":[3,1],"pz":[2,-1],"nx":[23,23],"ny":[14,13],"nz":[0,0]},{"size":2,"px":[12,4],"py":[6,1],"pz":[0,-1],"nx":[8,4],"ny":[4,4],"nz":[1,1]},{"size":5,"px":[22,22,11,11,11],"py":[12,13,4,6,6],"pz":[0,0,1,1,-1],"nx":[4,4,4,4,3],"ny":[16,15,18,14,11],"nz":[0,0,0,0,1]},{"size":2,"px":[4,10],"py":[0,1],"pz":[1,0],"nx":[2,2],"ny":[2,2],"nz":[2,-1]},{"size":2,"px":[15,6],"py":[4,4],"pz":[0,-1],"nx":[15,4],"ny":[2,1],"nz":[0,2]},{"size":2,"px":[11,2],"py":[10,20],"pz":[0,-1],"nx":[4,9],"ny":[1,2],"nz":[2,1]},{"size":2,"px":[4,19],"py":[3,8],"pz":[2,0],"nx":[8,21],"ny":[4,20],"nz":[1,-1]},{"size":5,"px":[4,6,7,6,2],"py":[6,15,13,14,3],"pz":[1,0,0,0,-1],"nx":[21,22,19,21,10],"ny":[6,12,0,3,2],"nz":[0,0,0,0,1]},{"size":5,"px":[8,12,15,14,13],"py":[0,0,0,0,0],"pz":[1,0,0,0,0],"nx":[4,3,1,3,4],"ny":[19,16,3,15,4],"nz":[0,0,2,0,1]},{"size":2,"px":[3,3],"py":[2,3],"pz":[2,2],"nx":[8,4],"ny":[4,1],"nz":[1,-1]},{"size":4,"px":[0,0,0,5],"py":[10,9,11,21],"pz":[1,1,-1,-1],"nx":[12,4,3,11],"ny":[3,1,1,3],"nz":[0,2,2,0]},{"size":2,"px":[3,1],"py":[0,0],"pz":[1,2],"nx":[1,4],"ny":[2,1],"nz":[1,-1]},{"size":5,"px":[2,5,1,0,1],"py":[14,23,7,5,9],"pz":[0,0,1,1,1],"nx":[0,0,7,9,11],"ny":[23,22,4,9,3],"nz":[0,-1,-1,-1,-1]},{"size":2,"px":[8,9],"py":[7,1],"pz":[1,-1],"nx":[8,8],"ny":[8,9],"nz":[1,1]},{"size":2,"px":[11,9],"py":[11,3],"pz":[1,-1],"nx":[3,2],"ny":[14,10],"nz":[0,1]},{"size":4,"px":[2,4,5,4],"py":[8,20,22,16],"pz":[1,0,0,0],"nx":[8,2,11,3],"ny":[7,4,15,4],"nz":[0,-1,-1,-1]},{"size":3,"px":[1,2,3],"py":[2,1,0],"pz":[0,0,0],"nx":[0,0,15],"ny":[1,0,11],"nz":[0,0,-1]},{"size":2,"px":[12,22],"py":[6,7],"pz":[0,-1],"nx":[4,8],"ny":[2,4],"nz":[2,1]},{"size":3,"px":[13,0,5],"py":[19,10,2],"pz":[0,-1,-1],"nx":[3,4,6],"ny":[5,5,9],"nz":[2,2,1]},{"size":2,"px":[8,15],"py":[8,22],"pz":[1,0],"nx":[7,4],"ny":[10,7],"nz":[1,-1]},{"size":2,"px":[10,10],"py":[7,6],"pz":[1,1],"nx":[10,1],"ny":[9,0],"nz":[1,-1]},{"size":2,"px":[9,11],"py":[4,3],"pz":[0,-1],"nx":[5,9],"ny":[0,1],"nz":[1,0]},{"size":5,"px":[14,13,14,12,15],"py":[1,2,2,2,2],"pz":[0,0,0,0,0],"nx":[4,8,4,7,4],"ny":[2,4,3,4,4],"nz":[2,1,2,1,-1]},{"size":3,"px":[13,8,2],"py":[14,5,8],"pz":[0,-1,-1],"nx":[6,8,9],"ny":[3,2,2],"nz":[0,0,0]},{"size":3,"px":[3,6,8],"py":[7,4,12],"pz":[1,1,0],"nx":[3,8,9],"ny":[5,2,2],"nz":[1,-1,-1]},{"size":2,"px":[13,4],"py":[16,3],"pz":[0,2],"nx":[13,7],"ny":[15,5],"nz":[0,-1]},{"size":2,"px":[3,0],"py":[7,9],"pz":[1,-1],"nx":[2,8],"ny":[2,4],"nz":[2,1]},{"size":5,"px":[3,6,8,7,7],"py":[0,1,0,0,0],"pz":[1,0,0,0,-1],"nx":[7,9,4,3,4],"ny":[9,7,4,2,2],"nz":[1,1,1,2,2]},{"size":3,"px":[3,4,16],"py":[4,4,6],"pz":[1,2,0],"nx":[2,2,2],"ny":[0,0,1],"nz":[0,-1,-1]},{"size":2,"px":[0,0],"py":[1,0],"pz":[2,2],"nx":[5,5],"ny":[2,2],"nz":[1,-1]},{"size":2,"px":[9,3],"py":[7,20],"pz":[1,-1],"nx":[4,8],"ny":[2,4],"nz":[2,1]},{"size":2,"px":[8,21],"py":[10,18],"pz":[0,-1],"nx":[9,4],"ny":[10,4],"nz":[0,1]},{"size":2,"px":[6,13],"py":[6,23],"pz":[1,-1],"nx":[10,10],"ny":[11,12],"nz":[0,0]},{"size":5,"px":[10,9,5,10,10],"py":[9,13,6,10,10],"pz":[0,0,1,0,-1],"nx":[21,21,21,10,21],"ny":[18,20,19,11,17],"nz":[0,0,0,1,0]},{"size":2,"px":[8,8],"py":[7,6],"pz":[1,1],"nx":[8,1],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[11,4],"py":[14,7],"pz":[0,-1],"nx":[13,13],"ny":[13,11],"nz":[0,0]},{"size":2,"px":[4,4],"py":[4,5],"pz":[2,2],"nx":[12,5],"ny":[16,2],"nz":[0,-1]},{"size":3,"px":[1,3,20],"py":[3,9,2],"pz":[2,-1,-1],"nx":[0,0,0],"ny":[7,4,13],"nz":[1,2,0]},{"size":2,"px":[0,0],"py":[4,2],"pz":[1,2],"nx":[1,0],"ny":[4,4],"nz":[1,-1]},{"size":3,"px":[8,9,11],"py":[2,1,2],"pz":[0,0,0],"nx":[2,2,0],"ny":[2,2,13],"nz":[2,-1,-1]},{"size":2,"px":[1,10],"py":[23,5],"pz":[0,-1],"nx":[3,6],"ny":[1,1],"nz":[2,1]},{"size":4,"px":[13,6,3,4],"py":[8,6,4,2],"pz":[0,-1,-1,-1],"nx":[1,1,1,4],"ny":[9,7,8,20],"nz":[1,1,1,0]},{"size":5,"px":[11,4,4,10,3],"py":[9,16,13,12,7],"pz":[0,0,0,0,0],"nx":[7,11,3,17,4],"ny":[8,11,9,0,4],"nz":[0,-1,-1,-1,-1]},{"size":2,"px":[6,6],"py":[6,8],"pz":[1,-1],"nx":[0,0],"ny":[1,2],"nz":[2,2]},{"size":2,"px":[10,5],"py":[7,2],"pz":[0,-1],"nx":[4,13],"ny":[5,9],"nz":[2,0]},{"size":2,"px":[10,5],"py":[8,2],"pz":[1,-1],"nx":[16,4],"ny":[14,5],"nz":[0,2]},{"size":2,"px":[1,1],"py":[16,15],"pz":[0,0],"nx":[1,20],"ny":[23,1],"nz":[0,-1]},{"size":2,"px":[2,3],"py":[4,7],"pz":[2,1],"nx":[2,3],"ny":[5,4],"nz":[2,-1]},{"size":2,"px":[19,8],"py":[5,4],"pz":[0,-1],"nx":[10,10],"ny":[1,3],"nz":[1,1]},{"size":2,"px":[21,21],"py":[18,16],"pz":[0,0],"nx":[10,3],"ny":[17,5],"nz":[0,-1]},{"size":2,"px":[9,2],"py":[23,4],"pz":[0,2],"nx":[5,11],"ny":[3,7],"nz":[2,1]},{"size":2,"px":[7,0],"py":[3,2],"pz":[0,-1],"nx":[3,6],"ny":[1,1],"nz":[1,0]},{"size":4,"px":[5,9,8,9],"py":[8,12,13,18],"pz":[0,0,0,0],"nx":[6,5,2,5],"ny":[8,4,7,11],"nz":[0,-1,-1,-1]},{"size":2,"px":[7,2],"py":[0,0],"pz":[0,2],"nx":[5,5],"ny":[3,4],"nz":[1,-1]},{"size":2,"px":[11,11],"py":[12,13],"pz":[0,0],"nx":[9,1],"ny":[14,3],"nz":[0,-1]},{"size":5,"px":[8,16,9,4,15],"py":[11,13,8,4,12],"pz":[1,0,1,2,0],"nx":[3,3,3,3,4],"ny":[4,2,1,3,0],"nz":[0,0,0,0,0]},{"size":2,"px":[9,5],"py":[7,6],"pz":[1,-1],"nx":[19,8],"ny":[17,11],"nz":[0,1]},{"size":5,"px":[14,15,12,13,13],"py":[2,2,2,2,2],"pz":[0,0,0,0,-1],"nx":[20,9,19,20,4],"ny":[14,2,5,15,1],"nz":[0,1,0,0,2]},{"size":2,"px":[18,8],"py":[20,7],"pz":[0,1],"nx":[4,9],"ny":[2,2],"nz":[2,-1]},{"size":2,"px":[6,3],"py":[11,5],"pz":[1,2],"nx":[13,19],"ny":[20,20],"nz":[0,-1]},{"size":3,"px":[12,11,3],"py":[20,20,5],"pz":[0,0,-1],"nx":[11,12,6],"ny":[21,21,10],"nz":[0,0,1]},{"size":2,"px":[3,6],"py":[7,14],"pz":[1,0],"nx":[3,13],"ny":[4,8],"nz":[1,-1]},{"size":2,"px":[0,0],"py":[5,9],"pz":[2,1],"nx":[2,11],"ny":[8,6],"nz":[1,-1]},{"size":2,"px":[2,2],"py":[5,5],"pz":[1,-1],"nx":[0,0],"ny":[6,3],"nz":[1,2]},{"size":2,"px":[11,23],"py":[5,9],"pz":[1,0],"nx":[8,2],"ny":[11,0],"nz":[0,-1]},{"size":2,"px":[11,23],"py":[12,9],"pz":[0,-1],"nx":[11,22],"ny":[10,21],"nz":[1,0]},{"size":2,"px":[12,12],"py":[7,7],"pz":[0,-1],"nx":[5,4],"ny":[7,10],"nz":[1,1]},{"size":2,"px":[9,8],"py":[18,1],"pz":[0,-1],"nx":[5,4],"ny":[8,10],"nz":[1,1]},{"size":2,"px":[16,17],"py":[11,11],"pz":[0,0],"nx":[15,2],"ny":[9,4],"nz":[0,-1]},{"size":2,"px":[0,1],"py":[3,0],"pz":[2,-1],"nx":[9,10],"ny":[6,5],"nz":[1,1]},{"size":2,"px":[13,13],"py":[20,21],"pz":[0,-1],"nx":[2,2],"ny":[6,5],"nz":[1,1]},{"size":5,"px":[20,20,4,18,19],"py":[17,16,5,22,20],"pz":[0,0,2,0,0],"nx":[8,11,5,6,2],"ny":[10,15,11,10,1],"nz":[1,-1,-1,-1,-1]},{"size":2,"px":[11,11],"py":[4,4],"pz":[0,-1],"nx":[8,4],"ny":[4,4],"nz":[1,1]},{"size":3,"px":[6,5,6],"py":[8,10,10],"pz":[1,1,1],"nx":[11,8,22],"ny":[19,2,15],"nz":[0,-1,-1]},{"size":3,"px":[5,2,13],"py":[7,10,10],"pz":[1,-1,-1],"nx":[11,11,23],"ny":[8,9,14],"nz":[1,1,0]},{"size":5,"px":[3,6,1,5,10],"py":[7,14,1,9,2],"pz":[1,-1,-1,-1,-1],"nx":[11,0,1,5,1],"ny":[14,12,18,5,19],"nz":[0,0,0,1,0]},{"size":3,"px":[21,21,10],"py":[16,17,10],"pz":[0,0,1],"nx":[5,5,1],"ny":[9,9,18],"nz":[1,-1,-1]},{"size":2,"px":[6,21],"py":[6,17],"pz":[1,-1],"nx":[20,10],"ny":[7,4],"nz":[0,1]},{"size":2,"px":[10,11],"py":[0,0],"pz":[1,-1],"nx":[6,13],"ny":[2,4],"nz":[1,0]},{"size":4,"px":[4,4,7,9],"py":[3,4,10,3],"pz":[2,2,1,1],"nx":[21,2,15,5],"ny":[0,0,0,2],"nz":[0,-1,-1,-1]},{"size":3,"px":[11,11,11],"py":[7,6,9],"pz":[1,1,1],"nx":[23,4,9],"ny":[23,5,6],"nz":[0,-1,-1]},{"size":2,"px":[14,15],"py":[1,1],"pz":[0,0],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":5,"px":[11,23,11,23,23],"py":[11,22,10,21,20],"pz":[1,0,1,0,0],"nx":[10,9,19,10,10],"ny":[10,11,20,9,9],"nz":[1,1,0,1,-1]},{"size":2,"px":[7,23],"py":[13,22],"pz":[0,-1],"nx":[8,4],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[12,1],"py":[19,0],"pz":[0,-1],"nx":[11,12],"ny":[22,17],"nz":[0,0]},{"size":2,"px":[10,8],"py":[4,3],"pz":[1,-1],"nx":[5,23],"ny":[2,7],"nz":[2,0]},{"size":2,"px":[9,10],"py":[6,20],"pz":[1,-1],"nx":[8,8],"ny":[4,6],"nz":[1,1]}],"alpha":[-1.135386e+00,1.135386e+00,-9.090800e-01,9.090800e-01,-5.913780e-01,5.913780e-01,-5.556534e-01,5.556534e-01,-5.084150e-01,5.084150e-01,-4.464489e-01,4.464489e-01,-4.463241e-01,4.463241e-01,-4.985226e-01,4.985226e-01,-4.424638e-01,4.424638e-01,-4.300093e-01,4.300093e-01,-4.231341e-01,4.231341e-01,-4.087428e-01,4.087428e-01,-3.374480e-01,3.374480e-01,-3.230151e-01,3.230151e-01,-3.084427e-01,3.084427e-01,-3.235494e-01,3.235494e-01,-2.589281e-01,2.589281e-01,-2.970292e-01,2.970292e-01,-2.957065e-01,2.957065e-01,-3.997619e-01,3.997619e-01,-3.535901e-01,3.535901e-01,-2.725396e-01,2.725396e-01,-2.649725e-01,2.649725e-01,-3.103888e-01,3.103888e-01,-3.117775e-01,3.117775e-01,-2.589620e-01,2.589620e-01,-2.689202e-01,2.689202e-01,-2.127024e-01,2.127024e-01,-2.436322e-01,2.436322e-01,-3.120574e-01,3.120574e-01,-2.786010e-01,2.786010e-01,-2.649072e-01,2.649072e-01,-2.766509e-01,2.766509e-01,-2.367237e-01,2.367237e-01,-2.658049e-01,2.658049e-01,-2.103463e-01,2.103463e-01,-1.911522e-01,1.911522e-01,-2.535425e-01,2.535425e-01,-2.434696e-01,2.434696e-01,-2.180788e-01,2.180788e-01,-2.496873e-01,2.496873e-01,-2.700969e-01,2.700969e-01,-2.565479e-01,2.565479e-01,-2.737741e-01,2.737741e-01,-1.675507e-01,1.675507e-01,-2.551417e-01,2.551417e-01,-2.067648e-01,2.067648e-01,-1.636834e-01,1.636834e-01,-2.129306e-01,2.129306e-01,-1.656758e-01,1.656758e-01,-1.919369e-01,1.919369e-01,-2.031763e-01,2.031763e-01,-2.062327e-01,2.062327e-01,-2.577950e-01,2.577950e-01,-2.951823e-01,2.951823e-01,-2.023160e-01,2.023160e-01,-2.022234e-01,2.022234e-01,-2.132906e-01,2.132906e-01,-1.653278e-01,1.653278e-01,-1.648474e-01,1.648474e-01,-1.593352e-01,1.593352e-01,-1.735650e-01,1.735650e-01,-1.688778e-01,1.688778e-01,-1.519705e-01,1.519705e-01,-1.812202e-01,1.812202e-01,-1.967481e-01,1.967481e-01,-1.852954e-01,1.852954e-01,-2.317780e-01,2.317780e-01,-2.036251e-01,2.036251e-01,-1.609324e-01,1.609324e-01,-2.160205e-01,2.160205e-01,-2.026190e-01,2.026190e-01,-1.854761e-01,1.854761e-01,-1.832038e-01,1.832038e-01,-2.001141e-01,2.001141e-01,-1.418333e-01,1.418333e-01,-1.704773e-01,1.704773e-01,-1.586261e-01,1.586261e-01,-1.587582e-01,1.587582e-01,-1.899489e-01,1.899489e-01,-1.477160e-01,1.477160e-01,-2.260467e-01,2.260467e-01,-2.393598e-01,2.393598e-01,-1.582373e-01,1.582373e-01,-1.702498e-01,1.702498e-01,-1.737398e-01,1.737398e-01,-1.462529e-01,1.462529e-01,-1.396517e-01,1.396517e-01,-1.629625e-01,1.629625e-01,-1.446933e-01,1.446933e-01,-1.811657e-01,1.811657e-01,-1.336427e-01,1.336427e-01,-1.924813e-01,1.924813e-01,-1.457520e-01,1.457520e-01,-1.600259e-01,1.600259e-01,-1.297000e-01,1.297000e-01,-2.076199e-01,2.076199e-01,-1.510060e-01,1.510060e-01,-1.914568e-01,1.914568e-01,-2.138162e-01,2.138162e-01,-1.856916e-01,1.856916e-01,-1.843047e-01,1.843047e-01,-1.526846e-01,1.526846e-01,-1.328320e-01,1.328320e-01,-1.751311e-01,1.751311e-01,-1.643908e-01,1.643908e-01,-1.482706e-01,1.482706e-01,-1.622298e-01,1.622298e-01,-1.884979e-01,1.884979e-01,-1.633604e-01,1.633604e-01,-1.554166e-01,1.554166e-01,-1.405332e-01,1.405332e-01,-1.772398e-01,1.772398e-01,-1.410008e-01,1.410008e-01,-1.362301e-01,1.362301e-01,-1.709087e-01,1.709087e-01,-1.584613e-01,1.584613e-01,-1.188814e-01,1.188814e-01,-1.423888e-01,1.423888e-01,-1.345565e-01,1.345565e-01,-1.835986e-01,1.835986e-01,-1.445329e-01,1.445329e-01,-1.385826e-01,1.385826e-01,-1.558917e-01,1.558917e-01,-1.476053e-01,1.476053e-01,-1.370722e-01,1.370722e-01,-2.362666e-01,2.362666e-01,-2.907774e-01,2.907774e-01,-1.656360e-01,1.656360e-01,-1.644407e-01,1.644407e-01,-1.443394e-01,1.443394e-01,-1.438823e-01,1.438823e-01,-1.476964e-01,1.476964e-01,-1.956593e-01,1.956593e-01,-2.417519e-01,2.417519e-01,-1.659315e-01,1.659315e-01,-1.466254e-01,1.466254e-01,-2.034909e-01,2.034909e-01,-2.128771e-01,2.128771e-01,-1.665429e-01,1.665429e-01,-1.387131e-01,1.387131e-01,-1.298823e-01,1.298823e-01,-1.329495e-01,1.329495e-01,-1.769587e-01,1.769587e-01,-1.366530e-01,1.366530e-01,-1.254359e-01,1.254359e-01,-1.673022e-01,1.673022e-01,-1.602519e-01,1.602519e-01,-1.897245e-01,1.897245e-01,-1.893579e-01,1.893579e-01,-1.579350e-01,1.579350e-01,-1.472589e-01,1.472589e-01,-1.614193e-01,1.614193e-01]},{"count":203,"threshold":-4.769677e+00,"feature":[{"size":5,"px":[12,5,14,9,7],"py":[9,13,3,1,3],"pz":[0,0,0,0,0],"nx":[1,0,5,14,9],"ny":[5,3,8,8,9],"nz":[2,0,1,0,0]},{"size":5,"px":[14,13,11,17,12],"py":[2,2,4,13,3],"pz":[0,0,0,0,0],"nx":[7,22,8,23,22],"ny":[8,15,11,12,3],"nz":[1,0,1,0,0]},{"size":5,"px":[9,11,11,11,16],"py":[4,8,7,9,12],"pz":[0,0,0,0,0],"nx":[4,8,14,9,9],"ny":[4,4,8,8,8],"nz":[1,1,0,0,-1]},{"size":5,"px":[6,12,12,8,3],"py":[11,7,8,10,2],"pz":[0,0,0,0,2],"nx":[8,4,4,4,0],"ny":[4,4,4,11,0],"nz":[1,1,-1,-1,-1]},{"size":5,"px":[19,17,18,9,9],"py":[3,2,3,1,1],"pz":[0,0,0,1,-1],"nx":[21,21,10,22,22],"ny":[1,2,0,4,3],"nz":[0,0,1,0,0]},{"size":2,"px":[4,7],"py":[4,6],"pz":[2,1],"nx":[8,7],"ny":[4,10],"nz":[1,1]},{"size":5,"px":[14,17,17,13,12],"py":[18,15,16,18,18],"pz":[0,0,0,0,0],"nx":[13,19,5,20,6],"ny":[16,4,1,19,0],"nz":[0,-1,-1,-1,-1]},{"size":5,"px":[6,7,4,5,5],"py":[15,23,6,12,16],"pz":[0,0,1,0,0],"nx":[3,14,14,6,6],"ny":[4,11,11,9,0],"nz":[1,-1,-1,-1,-1]},{"size":5,"px":[16,9,6,3,11],"py":[2,2,5,3,2],"pz":[0,0,1,2,0],"nx":[3,4,2,5,5],"ny":[4,11,2,8,8],"nz":[1,1,2,1,-1]},{"size":5,"px":[6,1,5,3,3],"py":[14,4,15,7,7],"pz":[0,2,0,1,-1],"nx":[0,0,1,1,1],"ny":[7,8,18,17,5],"nz":[1,1,0,0,2]},{"size":5,"px":[12,12,9,5,3],"py":[14,14,0,3,7],"pz":[0,-1,-1,-1,-1],"nx":[7,7,14,8,13],"ny":[7,8,13,10,10],"nz":[1,1,0,1,0]},{"size":2,"px":[3,4],"py":[7,9],"pz":[1,-1],"nx":[2,4],"ny":[5,4],"nz":[2,1]},{"size":3,"px":[10,21,17],"py":[7,11,23],"pz":[1,0,0],"nx":[21,9,3],"ny":[23,5,5],"nz":[0,-1,-1]},{"size":5,"px":[8,11,9,10,11],"py":[2,0,1,1,2],"pz":[0,0,0,0,0],"nx":[4,5,6,4,3],"ny":[8,4,18,7,4],"nz":[1,1,0,1,-1]},{"size":5,"px":[20,22,3,19,10],"py":[20,9,4,22,3],"pz":[0,0,2,0,1],"nx":[8,20,8,3,2],"ny":[4,3,6,4,3],"nz":[1,-1,-1,-1,-1]},{"size":2,"px":[4,4],"py":[8,7],"pz":[1,1],"nx":[9,2],"ny":[15,5],"nz":[0,-1]},{"size":2,"px":[11,13],"py":[13,4],"pz":[0,-1],"nx":[20,21],"ny":[1,4],"nz":[0,0]},{"size":5,"px":[1,2,7,6,8],"py":[0,2,3,3,3],"pz":[2,1,0,0,0],"nx":[1,2,1,1,1],"ny":[0,0,4,3,3],"nz":[1,0,0,0,-1]},{"size":2,"px":[3,10],"py":[9,11],"pz":[0,0],"nx":[6,3],"ny":[9,2],"nz":[0,-1]},{"size":5,"px":[12,12,12,12,6],"py":[10,11,13,12,6],"pz":[0,0,0,0,-1],"nx":[10,2,1,10,10],"ny":[10,4,2,11,9],"nz":[0,1,2,0,0]},{"size":5,"px":[16,18,11,17,15],"py":[11,12,8,12,11],"pz":[0,0,0,0,0],"nx":[14,0,19,0,10],"ny":[9,3,14,8,9],"nz":[0,-1,-1,-1,-1]},{"size":4,"px":[5,9,5,8],"py":[21,18,20,23],"pz":[0,0,0,0],"nx":[8,4,3,1],"ny":[20,3,4,3],"nz":[0,-1,-1,-1]},{"size":2,"px":[2,3],"py":[3,2],"pz":[2,2],"nx":[3,12],"ny":[4,23],"nz":[1,-1]},{"size":5,"px":[0,1,1,1,1],"py":[2,16,14,13,12],"pz":[2,0,0,0,0],"nx":[8,4,9,4,7],"ny":[9,3,4,2,9],"nz":[1,2,1,2,1]},{"size":2,"px":[4,9],"py":[3,7],"pz":[2,-1],"nx":[4,9],"ny":[2,4],"nz":[2,1]},{"size":5,"px":[15,16,17,15,8],"py":[3,3,3,18,1],"pz":[0,0,0,0,1],"nx":[1,2,2,1,3],"ny":[5,3,2,6,0],"nz":[0,0,0,0,0]},{"size":2,"px":[4,17],"py":[4,14],"pz":[2,0],"nx":[15,7],"ny":[15,10],"nz":[0,-1]},{"size":3,"px":[14,12,3],"py":[3,13,3],"pz":[0,-1,-1],"nx":[4,17,4],"ny":[3,19,4],"nz":[2,0,2]},{"size":4,"px":[4,5,12,2],"py":[9,6,19,4],"pz":[1,1,0,2],"nx":[12,17,4,4],"ny":[18,19,4,4],"nz":[0,-1,-1,-1]},{"size":5,"px":[10,19,20,20,19],"py":[7,14,13,14,13],"pz":[1,0,0,0,-1],"nx":[11,23,23,23,23],"ny":[9,15,13,16,14],"nz":[1,0,0,0,0]},{"size":4,"px":[0,0,0,2],"py":[5,6,5,14],"pz":[1,1,2,0],"nx":[0,3,3,17],"ny":[23,5,5,9],"nz":[0,-1,-1,-1]},{"size":2,"px":[15,4],"py":[23,5],"pz":[0,2],"nx":[9,3],"ny":[4,4],"nz":[1,-1]},{"size":4,"px":[6,5,10,12],"py":[3,3,23,23],"pz":[1,1,0,0],"nx":[11,1,1,4],"ny":[21,3,5,5],"nz":[0,-1,-1,-1]},{"size":2,"px":[5,2],"py":[9,4],"pz":[1,2],"nx":[4,9],"ny":[4,2],"nz":[1,-1]},{"size":5,"px":[23,23,23,23,23],"py":[14,9,13,11,12],"pz":[0,0,0,0,0],"nx":[6,13,7,8,8],"ny":[9,6,3,3,3],"nz":[1,0,1,1,-1]},{"size":2,"px":[10,3],"py":[4,5],"pz":[0,-1],"nx":[3,8],"ny":[1,3],"nz":[2,1]},{"size":2,"px":[3,12],"py":[4,18],"pz":[2,0],"nx":[12,0],"ny":[16,3],"nz":[0,-1]},{"size":2,"px":[16,2],"py":[4,4],"pz":[0,-1],"nx":[16,4],"ny":[1,0],"nz":[0,2]},{"size":2,"px":[3,4],"py":[7,1],"pz":[1,-1],"nx":[5,3],"ny":[19,9],"nz":[0,1]},{"size":4,"px":[20,19,20,21],"py":[2,0,1,3],"pz":[0,0,0,0],"nx":[11,5,23,11],"ny":[0,0,1,1],"nz":[1,2,0,1]},{"size":2,"px":[12,13],"py":[7,5],"pz":[0,0],"nx":[8,5],"ny":[3,5],"nz":[1,-1]},{"size":5,"px":[22,21,22,22,22],"py":[20,22,18,19,16],"pz":[0,0,0,0,0],"nx":[2,3,3,15,15],"ny":[4,5,4,7,7],"nz":[1,2,1,0,-1]},{"size":3,"px":[15,14,14],"py":[1,1,1],"pz":[0,0,-1],"nx":[17,18,16],"ny":[1,2,1],"nz":[0,0,0]},{"size":4,"px":[17,16,16,15],"py":[2,1,0,0],"pz":[0,0,0,0],"nx":[7,4,2,11],"ny":[11,2,1,4],"nz":[1,2,-1,-1]},{"size":4,"px":[18,0,0,0],"py":[14,6,5,4],"pz":[0,-1,-1,-1],"nx":[19,19,19,19],"ny":[16,19,17,18],"nz":[0,0,0,0]},{"size":4,"px":[11,5,5,0],"py":[14,1,4,4],"pz":[0,-1,-1,-1],"nx":[11,8,2,15],"ny":[17,14,1,9],"nz":[0,0,2,0]},{"size":2,"px":[4,5],"py":[19,21],"pz":[0,0],"nx":[10,2],"ny":[15,4],"nz":[0,-1]},{"size":2,"px":[6,4],"py":[4,6],"pz":[1,1],"nx":[3,3],"ny":[4,5],"nz":[1,-1]},{"size":2,"px":[2,7],"py":[1,13],"pz":[2,0],"nx":[7,2],"ny":[1,4],"nz":[1,-1]},{"size":4,"px":[15,10,4,7],"py":[23,3,1,7],"pz":[0,1,2,1],"nx":[0,4,1,1],"ny":[0,2,0,-1900147915],"nz":[0,-1,-1,-1]},{"size":2,"px":[7,2],"py":[12,11],"pz":[0,-1],"nx":[2,4],"ny":[2,5],"nz":[2,1]},{"size":5,"px":[0,0,0,1,0],"py":[9,4,3,2,6],"pz":[0,1,2,1,1],"nx":[9,4,2,16,16],"ny":[7,4,2,8,8],"nz":[0,1,2,0,-1]},{"size":5,"px":[18,4,9,4,4],"py":[12,5,6,3,4],"pz":[0,2,1,2,-1],"nx":[4,3,3,2,3],"ny":[23,19,21,16,18],"nz":[0,0,0,0,0]},{"size":2,"px":[6,6],"py":[14,13],"pz":[0,0],"nx":[3,10],"ny":[4,7],"nz":[1,-1]},{"size":5,"px":[3,4,4,2,2],"py":[8,11,7,4,4],"pz":[1,1,1,2,-1],"nx":[20,18,19,20,19],"ny":[4,0,2,3,1],"nz":[0,0,0,0,0]},{"size":5,"px":[17,12,14,8,16],"py":[2,0,0,0,0],"pz":[0,0,0,1,0],"nx":[3,15,3,2,2],"ny":[2,9,7,2,2],"nz":[2,0,1,2,-1]},{"size":5,"px":[11,10,11,11,11],"py":[10,12,11,12,12],"pz":[0,0,0,0,-1],"nx":[13,13,20,10,13],"ny":[9,11,8,4,10],"nz":[0,0,0,1,0]},{"size":2,"px":[8,16],"py":[7,13],"pz":[1,0],"nx":[8,13],"ny":[4,11],"nz":[1,-1]},{"size":2,"px":[6,7],"py":[20,3],"pz":[0,-1],"nx":[3,4],"ny":[10,10],"nz":[1,1]},{"size":3,"px":[13,10,17],"py":[9,3,5],"pz":[0,-1,-1],"nx":[1,3,1],"ny":[5,16,6],"nz":[2,0,1]},{"size":2,"px":[0,0],"py":[5,5],"pz":[2,-1],"nx":[8,3],"ny":[14,10],"nz":[0,1]},{"size":4,"px":[11,9,12,10],"py":[2,2,2,2],"pz":[0,0,0,0],"nx":[4,4,4,10],"ny":[5,5,0,16],"nz":[1,-1,-1,-1]},{"size":3,"px":[7,9,12],"py":[2,2,2],"pz":[1,-1,-1],"nx":[4,7,2],"ny":[3,1,0],"nz":[0,0,2]},{"size":2,"px":[2,4],"py":[3,12],"pz":[2,0],"nx":[7,4],"ny":[6,5],"nz":[1,2]},{"size":4,"px":[12,12,6,3],"py":[12,11,21,7],"pz":[0,0,-1,-1],"nx":[1,0,0,0],"ny":[13,3,6,5],"nz":[0,2,1,1]},{"size":3,"px":[3,1,3],"py":[21,8,18],"pz":[0,1,0],"nx":[11,20,0],"ny":[17,17,6],"nz":[0,-1,-1]},{"size":2,"px":[2,8],"py":[3,12],"pz":[2,0],"nx":[2,20],"ny":[4,17],"nz":[1,-1]},{"size":5,"px":[2,3,4,3,2],"py":[10,14,14,15,13],"pz":[1,0,0,0,0],"nx":[0,0,1,0,0],"ny":[21,20,23,19,19],"nz":[0,0,0,0,-1]},{"size":2,"px":[2,15],"py":[7,4],"pz":[1,-1],"nx":[3,8],"ny":[4,14],"nz":[1,0]},{"size":5,"px":[19,14,12,15,4],"py":[8,12,10,16,2],"pz":[0,0,0,0,2],"nx":[8,0,12,4,0],"ny":[4,1,12,2,19],"nz":[1,-1,-1,-1,-1]},{"size":2,"px":[18,9],"py":[15,3],"pz":[0,-1],"nx":[8,15],"ny":[9,14],"nz":[1,0]},{"size":5,"px":[4,2,3,4,9],"py":[9,4,3,8,23],"pz":[1,2,1,1,0],"nx":[11,23,23,11,11],"ny":[0,2,3,1,1],"nz":[1,0,0,1,-1]},{"size":2,"px":[6,7],"py":[1,1],"pz":[0,0],"nx":[3,4],"ny":[10,5],"nz":[1,-1]},{"size":4,"px":[11,9,8,5],"py":[12,15,13,3],"pz":[0,-1,-1,-1],"nx":[3,12,14,13],"ny":[0,3,3,3],"nz":[2,0,0,0]},{"size":2,"px":[11,11],"py":[6,5],"pz":[0,0],"nx":[8,11],"ny":[4,20],"nz":[1,-1]},{"size":5,"px":[21,20,21,21,21],"py":[18,21,17,19,19],"pz":[0,0,0,0,-1],"nx":[2,5,4,4,5],"ny":[5,12,11,10,10],"nz":[1,0,0,0,0]},{"size":5,"px":[1,1,1,1,1],"py":[10,11,7,9,8],"pz":[0,0,0,0,0],"nx":[11,23,23,23,23],"ny":[10,20,21,19,19],"nz":[1,0,0,0,-1]},{"size":5,"px":[7,8,7,3,1],"py":[14,13,13,2,2],"pz":[0,0,-1,-1,-1],"nx":[1,10,2,2,10],"ny":[2,13,4,16,12],"nz":[2,0,1,0,0]},{"size":2,"px":[17,18],"py":[12,12],"pz":[0,0],"nx":[8,8],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[17,0],"py":[5,20],"pz":[0,-1],"nx":[4,9],"ny":[0,2],"nz":[2,1]},{"size":5,"px":[22,22,22,11,23],"py":[16,15,14,6,13],"pz":[0,0,0,1,0],"nx":[16,15,7,9,9],"ny":[15,8,4,10,10],"nz":[0,0,1,1,-1]},{"size":2,"px":[13,3],"py":[3,1],"pz":[0,2],"nx":[8,3],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[5,6],"py":[4,1],"pz":[1,-1],"nx":[6,3],"ny":[4,2],"nz":[1,2]},{"size":3,"px":[4,2,6],"py":[6,3,4],"pz":[1,2,1],"nx":[10,0,4],"ny":[9,4,3],"nz":[0,-1,-1]},{"size":4,"px":[2,8,4,10],"py":[4,23,7,23],"pz":[2,0,1,0],"nx":[9,4,11,9],"ny":[21,5,16,0],"nz":[0,-1,-1,-1]},{"size":2,"px":[6,3],"py":[13,0],"pz":[0,-1],"nx":[8,2],"ny":[11,2],"nz":[0,2]},{"size":2,"px":[3,3],"py":[1,4],"pz":[1,-1],"nx":[3,5],"ny":[0,1],"nz":[1,0]},{"size":2,"px":[7,2],"py":[0,0],"pz":[0,2],"nx":[2,10],"ny":[1,6],"nz":[2,0]},{"size":2,"px":[10,2],"py":[7,0],"pz":[1,-1],"nx":[21,5],"ny":[15,4],"nz":[0,2]},{"size":2,"px":[1,1],"py":[10,9],"pz":[0,0],"nx":[0,3],"ny":[13,11],"nz":[0,-1]},{"size":2,"px":[11,9],"py":[13,0],"pz":[0,-1],"nx":[3,3],"ny":[4,3],"nz":[1,1]},{"size":5,"px":[14,13,13,14,14],"py":[12,10,11,13,13],"pz":[0,0,0,0,-1],"nx":[9,8,4,5,7],"ny":[4,4,2,2,4],"nz":[0,0,1,1,0]},{"size":3,"px":[2,4,1],"py":[2,0,0],"pz":[0,0,1],"nx":[0,7,4],"ny":[0,3,2],"nz":[1,-1,-1]},{"size":2,"px":[11,4],"py":[5,0],"pz":[0,-1],"nx":[8,6],"ny":[4,9],"nz":[1,1]},{"size":3,"px":[0,0,0],"py":[20,2,4],"pz":[0,-1,-1],"nx":[12,3,10],"ny":[3,1,3],"nz":[0,2,0]},{"size":5,"px":[5,11,10,13,13],"py":[0,0,0,2,2],"pz":[1,0,0,0,-1],"nx":[4,5,5,4,5],"ny":[14,0,2,6,1],"nz":[0,0,0,0,0]},{"size":2,"px":[2,4],"py":[3,6],"pz":[2,1],"nx":[3,11],"ny":[4,1],"nz":[1,-1]},{"size":2,"px":[14,-1715597992],"py":[19,9],"pz":[0,-1],"nx":[7,14],"ny":[10,17],"nz":[1,0]},{"size":2,"px":[11,1],"py":[9,0],"pz":[0,-1],"nx":[1,12],"ny":[2,10],"nz":[2,0]},{"size":2,"px":[17,9],"py":[13,17],"pz":[0,-1],"nx":[8,4],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[0,7],"py":[1,9],"pz":[1,-1],"nx":[18,4],"ny":[14,2],"nz":[0,2]},{"size":2,"px":[14,7],"py":[23,9],"pz":[0,-1],"nx":[4,8],"ny":[5,10],"nz":[2,1]},{"size":2,"px":[8,7],"py":[17,9],"pz":[0,-1],"nx":[3,2],"ny":[0,3],"nz":[0,0]},{"size":2,"px":[13,4],"py":[20,1],"pz":[0,-1],"nx":[5,3],"ny":[21,17],"nz":[0,0]},{"size":3,"px":[0,0,1],"py":[3,6,15],"pz":[2,1,0],"nx":[10,8,3],"ny":[6,4,2],"nz":[0,-1,-1]},{"size":2,"px":[8,8],"py":[18,8],"pz":[0,-1],"nx":[5,4],"ny":[8,10],"nz":[1,1]},{"size":2,"px":[6,5],"py":[2,2],"pz":[1,1],"nx":[8,9],"ny":[4,3],"nz":[1,-1]},{"size":2,"px":[6,3],"py":[11,5],"pz":[1,2],"nx":[13,3],"ny":[19,2],"nz":[0,-1]},{"size":2,"px":[4,6],"py":[1,11],"pz":[2,-1],"nx":[3,2],"ny":[1,0],"nz":[1,2]},{"size":2,"px":[9,4],"py":[10,5],"pz":[1,2],"nx":[8,4],"ny":[10,4],"nz":[1,-1]},{"size":2,"px":[12,12],"py":[11,20],"pz":[0,-1],"nx":[0,0],"ny":[6,10],"nz":[1,0]},{"size":2,"px":[7,12],"py":[2,20],"pz":[0,-1],"nx":[2,2],"ny":[2,3],"nz":[2,2]},{"size":2,"px":[0,15],"py":[5,21],"pz":[1,-1],"nx":[10,9],"ny":[3,3],"nz":[0,1]},{"size":2,"px":[15,9],"py":[1,0],"pz":[0,1],"nx":[19,3],"ny":[0,3],"nz":[0,-1]},{"size":2,"px":[21,5],"py":[13,5],"pz":[0,2],"nx":[23,6],"ny":[23,5],"nz":[0,-1]},{"size":2,"px":[5,8],"py":[3,1],"pz":[2,-1],"nx":[9,9],"ny":[6,5],"nz":[1,1]},{"size":2,"px":[2,2],"py":[7,7],"pz":[1,-1],"nx":[5,3],"ny":[23,17],"nz":[0,0]},{"size":2,"px":[11,3],"py":[6,4],"pz":[0,-1],"nx":[2,4],"ny":[2,4],"nz":[2,1]},{"size":3,"px":[14,0,17],"py":[20,3,21],"pz":[0,-1,-1],"nx":[11,11,11],"ny":[7,9,10],"nz":[1,1,1]},{"size":5,"px":[11,11,23,23,12],"py":[10,11,21,20,12],"pz":[1,1,0,0,0],"nx":[8,3,6,7,7],"ny":[4,5,11,11,11],"nz":[1,2,1,1,-1]},{"size":2,"px":[11,11],"py":[11,10],"pz":[0,0],"nx":[9,3],"ny":[2,5],"nz":[1,-1]},{"size":2,"px":[12,14],"py":[19,19],"pz":[0,0],"nx":[12,13],"ny":[18,17],"nz":[0,-1]},{"size":5,"px":[13,14,12,15,14],"py":[0,0,1,1,1],"pz":[0,0,0,0,0],"nx":[4,8,4,7,7],"ny":[3,4,2,5,5],"nz":[2,1,2,1,-1]},{"size":2,"px":[17,5],"py":[10,2],"pz":[0,-1],"nx":[4,9],"ny":[2,3],"nz":[2,1]},{"size":2,"px":[18,10],"py":[6,10],"pz":[0,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":5,"px":[8,18,8,4,16],"py":[6,12,9,4,13],"pz":[1,0,1,2,0],"nx":[3,4,3,5,5],"ny":[0,2,3,1,1],"nz":[1,0,0,0,-1]},{"size":2,"px":[3,6],"py":[2,4],"pz":[2,1],"nx":[8,0],"ny":[4,0],"nz":[1,-1]},{"size":2,"px":[0,0],"py":[4,5],"pz":[2,-1],"nx":[4,2],"ny":[14,7],"nz":[0,1]},{"size":4,"px":[3,4,4,3],"py":[11,12,12,2],"pz":[0,0,-1,-1],"nx":[1,2,1,2],"ny":[11,14,12,16],"nz":[0,0,0,0]},{"size":2,"px":[6,0],"py":[11,0],"pz":[0,-1],"nx":[3,4],"ny":[4,5],"nz":[1,1]},{"size":2,"px":[3,2],"py":[21,11],"pz":[0,1],"nx":[3,2],"ny":[10,0],"nz":[1,-1]},{"size":3,"px":[10,3,13],"py":[2,0,2],"pz":[0,2,0],"nx":[7,16,1],"ny":[10,4,1],"nz":[0,-1,-1]},{"size":2,"px":[6,12],"py":[2,5],"pz":[1,0],"nx":[6,18],"ny":[1,19],"nz":[1,-1]},{"size":2,"px":[3,16],"py":[0,16],"pz":[1,-1],"nx":[11,2],"ny":[5,1],"nz":[0,2]},{"size":2,"px":[11,10],"py":[13,1],"pz":[0,-1],"nx":[1,1],"ny":[22,21],"nz":[0,0]},{"size":2,"px":[11,10],"py":[18,18],"pz":[0,0],"nx":[5,8],"ny":[9,0],"nz":[1,-1]},{"size":2,"px":[3,2],"py":[20,18],"pz":[0,0],"nx":[8,3],"ny":[5,1],"nz":[1,-1]},{"size":2,"px":[14,2],"py":[17,1],"pz":[0,-1],"nx":[14,13],"ny":[15,15],"nz":[0,0]},{"size":2,"px":[3,4],"py":[2,3],"pz":[2,2],"nx":[8,3],"ny":[4,0],"nz":[1,-1]},{"size":5,"px":[8,18,18,8,7],"py":[6,11,11,7,9],"pz":[1,0,-1,-1,-1],"nx":[5,13,5,11,5],"ny":[3,11,0,8,2],"nz":[2,0,2,1,2]},{"size":5,"px":[12,0,5,4,7],"py":[15,0,4,0,9],"pz":[0,-1,-1,-1,-1],"nx":[8,7,4,16,6],"ny":[17,12,9,10,12],"nz":[0,0,1,0,0]},{"size":2,"px":[6,7],"py":[14,1],"pz":[0,-1],"nx":[5,4],"ny":[9,4],"nz":[1,1]},{"size":4,"px":[8,0,22,4],"py":[4,4,23,0],"pz":[0,-1,-1,-1],"nx":[2,4,2,5],"ny":[0,1,2,9],"nz":[2,1,2,1]},{"size":5,"px":[9,9,10,10,8],"py":[0,1,1,2,0],"pz":[1,1,1,1,1],"nx":[4,16,16,16,6],"ny":[2,11,11,11,12],"nz":[2,0,-1,-1,-1]},{"size":2,"px":[6,6],"py":[6,5],"pz":[1,1],"nx":[0,4],"ny":[3,2],"nz":[1,-1]},{"size":3,"px":[10,3,4],"py":[5,9,8],"pz":[1,-1,-1],"nx":[11,23,23],"ny":[7,12,11],"nz":[1,0,0]},{"size":3,"px":[13,12,7],"py":[19,19,10],"pz":[0,0,1],"nx":[13,5,19],"ny":[20,15,22],"nz":[0,-1,-1]},{"size":2,"px":[12,12],"py":[12,13],"pz":[0,0],"nx":[9,10],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[0,12],"py":[1,13],"pz":[2,-1],"nx":[2,7],"ny":[2,13],"nz":[2,0]},{"size":2,"px":[10,10],"py":[8,9],"pz":[1,1],"nx":[19,7],"ny":[23,13],"nz":[0,-1]},{"size":4,"px":[8,7,23,15],"py":[11,12,4,21],"pz":[0,0,-1,-1],"nx":[2,5,1,10],"ny":[6,6,2,13],"nz":[0,1,1,0]},{"size":2,"px":[10,9],"py":[3,3],"pz":[0,0],"nx":[2,3],"ny":[2,4],"nz":[2,-1]},{"size":2,"px":[5,2],"py":[3,4],"pz":[2,-1],"nx":[3,6],"ny":[1,2],"nz":[2,1]},{"size":2,"px":[7,11],"py":[20,16],"pz":[0,-1],"nx":[2,4],"ny":[5,20],"nz":[2,0]},{"size":2,"px":[9,7],"py":[7,5],"pz":[1,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[4,2],"py":[11,3],"pz":[1,2],"nx":[5,5],"ny":[3,5],"nz":[2,-1]},{"size":2,"px":[11,3],"py":[11,5],"pz":[1,-1],"nx":[4,1],"ny":[12,3],"nz":[0,2]},{"size":2,"px":[9,11],"py":[6,4],"pz":[1,-1],"nx":[10,20],"ny":[9,18],"nz":[1,0]},{"size":5,"px":[2,2,2,2,1],"py":[15,13,16,14,7],"pz":[0,0,0,0,1],"nx":[15,8,9,8,4],"ny":[11,6,5,5,4],"nz":[0,1,1,1,-1]},{"size":2,"px":[12,2],"py":[5,5],"pz":[0,-1],"nx":[3,2],"ny":[7,2],"nz":[1,2]},{"size":2,"px":[5,11],"py":[1,3],"pz":[2,1],"nx":[10,10],"ny":[3,3],"nz":[1,-1]},{"size":2,"px":[17,11],"py":[13,18],"pz":[0,-1],"nx":[6,9],"ny":[9,4],"nz":[1,1]},{"size":5,"px":[5,1,2,5,6],"py":[14,4,9,15,23],"pz":[0,2,1,0,0],"nx":[4,9,18,16,17],"ny":[0,1,1,0,0],"nz":[2,1,0,0,0]},{"size":2,"px":[16,17],"py":[0,0],"pz":[0,0],"nx":[23,23],"ny":[5,4],"nz":[0,-1]},{"size":2,"px":[13,8],"py":[20,6],"pz":[0,-1],"nx":[5,6],"ny":[12,10],"nz":[0,1]},{"size":2,"px":[6,15],"py":[15,0],"pz":[0,-1],"nx":[6,3],"ny":[16,4],"nz":[0,1]},{"size":2,"px":[18,20],"py":[7,8],"pz":[0,0],"nx":[18,11],"ny":[9,14],"nz":[0,-1]},{"size":2,"px":[9,4],"py":[12,6],"pz":[0,1],"nx":[3,15],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[0,0],"py":[5,2],"pz":[1,2],"nx":[5,5],"ny":[2,2],"nz":[1,-1]},{"size":2,"px":[5,20],"py":[1,20],"pz":[1,-1],"nx":[15,17],"ny":[1,2],"nz":[0,0]},{"size":2,"px":[7,2],"py":[16,4],"pz":[0,2],"nx":[4,0],"ny":[10,6],"nz":[1,-1]},{"size":2,"px":[3,8],"py":[5,0],"pz":[1,-1],"nx":[1,1],"ny":[10,18],"nz":[1,0]},{"size":2,"px":[22,0],"py":[3,0],"pz":[0,-1],"nx":[23,11],"ny":[4,1],"nz":[0,1]},{"size":3,"px":[19,10,20],"py":[21,8,18],"pz":[0,1,0],"nx":[3,6,20],"ny":[5,11,14],"nz":[2,-1,-1]},{"size":4,"px":[2,1,6,5],"py":[7,4,23,22],"pz":[1,2,0,0],"nx":[9,19,20,4],"ny":[8,11,9,2],"nz":[0,-1,-1,-1]},{"size":2,"px":[3,6],"py":[2,11],"pz":[2,1],"nx":[12,10],"ny":[21,9],"nz":[0,-1]},{"size":4,"px":[6,0,2,2],"py":[6,1,4,1],"pz":[1,-1,-1,-1],"nx":[0,0,0,0],"ny":[5,8,9,4],"nz":[1,0,0,1]},{"size":5,"px":[3,13,6,11,9],"py":[0,3,1,1,2],"pz":[2,0,1,0,0],"nx":[7,20,16,4,7],"ny":[7,2,19,2,6],"nz":[1,0,0,2,1]},{"size":4,"px":[7,5,2,6],"py":[7,7,4,11],"pz":[0,0,2,1],"nx":[7,1,21,0],"ny":[8,4,11,3],"nz":[0,-1,-1,-1]},{"size":2,"px":[2,2],"py":[3,2],"pz":[2,2],"nx":[8,9],"ny":[3,11],"nz":[1,-1]},{"size":2,"px":[7,13],"py":[3,5],"pz":[1,0],"nx":[4,3],"ny":[2,2],"nz":[1,-1]},{"size":4,"px":[3,12,13,11],"py":[0,1,1,1],"pz":[2,0,0,0],"nx":[8,9,13,0],"ny":[4,1,16,3],"nz":[1,-1,-1,-1]},{"size":2,"px":[10,1],"py":[4,14],"pz":[0,-1],"nx":[5,10],"ny":[1,2],"nz":[1,0]},{"size":2,"px":[11,12],"py":[21,21],"pz":[0,0],"nx":[10,11],"ny":[19,19],"nz":[0,0]},{"size":2,"px":[8,12],"py":[6,21],"pz":[1,-1],"nx":[4,8],"ny":[2,4],"nz":[2,1]},{"size":2,"px":[11,7],"py":[19,0],"pz":[0,-1],"nx":[6,5],"ny":[9,11],"nz":[1,1]},{"size":5,"px":[11,11,11,10,10],"py":[10,12,11,13,13],"pz":[0,0,0,0,-1],"nx":[7,13,6,12,7],"ny":[10,6,3,6,11],"nz":[0,0,1,0,0]},{"size":2,"px":[12,11],"py":[6,12],"pz":[0,-1],"nx":[4,8],"ny":[4,4],"nz":[1,1]},{"size":5,"px":[16,15,16,15,17],"py":[1,0,0,1,1],"pz":[0,0,0,0,0],"nx":[13,7,6,12,12],"ny":[5,4,3,6,6],"nz":[0,1,1,0,-1]},{"size":2,"px":[2,3],"py":[1,3],"pz":[2,1],"nx":[1,5],"ny":[1,3],"nz":[2,-1]},{"size":2,"px":[6,3],"py":[13,6],"pz":[0,1],"nx":[4,9],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[0,3],"py":[4,3],"pz":[1,-1],"nx":[4,8],"ny":[3,6],"nz":[2,1]},{"size":2,"px":[6,3],"py":[2,1],"pz":[0,1],"nx":[5,5],"ny":[7,21],"nz":[1,-1]},{"size":2,"px":[8,4],"py":[0,0],"pz":[1,-1],"nx":[19,17],"ny":[1,0],"nz":[0,0]},{"size":4,"px":[8,11,5,0],"py":[6,1,1,22],"pz":[1,-1,-1,-1],"nx":[0,10,10,1],"ny":[6,12,13,4],"nz":[1,0,0,1]},{"size":2,"px":[8,17],"py":[6,13],"pz":[1,0],"nx":[14,17],"ny":[9,3],"nz":[0,-1]},{"size":2,"px":[5,8],"py":[0,4],"pz":[2,-1],"nx":[9,8],"ny":[1,1],"nz":[0,0]},{"size":2,"px":[11,14],"py":[13,9],"pz":[0,-1],"nx":[23,23],"ny":[21,19],"nz":[0,0]},{"size":2,"px":[10,9],"py":[9,3],"pz":[0,-1],"nx":[6,3],"ny":[2,1],"nz":[1,2]},{"size":2,"px":[11,1],"py":[4,4],"pz":[0,-1],"nx":[2,4],"ny":[2,4],"nz":[2,1]},{"size":2,"px":[5,9],"py":[3,3],"pz":[2,-1],"nx":[17,9],"ny":[12,5],"nz":[0,1]},{"size":2,"px":[9,7],"py":[18,16],"pz":[0,-1],"nx":[5,2],"ny":[9,5],"nz":[1,2]},{"size":2,"px":[3,6],"py":[0,1],"pz":[1,-1],"nx":[4,5],"ny":[1,0],"nz":[0,0]}],"alpha":[-1.149973e+00,1.149973e+00,-6.844773e-01,6.844773e-01,-6.635048e-01,6.635048e-01,-4.888349e-01,4.888349e-01,-4.267976e-01,4.267976e-01,-4.258100e-01,4.258100e-01,-4.815853e-01,4.815853e-01,-4.091859e-01,4.091859e-01,-3.137414e-01,3.137414e-01,-3.339860e-01,3.339860e-01,-3.891196e-01,3.891196e-01,-4.167691e-01,4.167691e-01,-3.186609e-01,3.186609e-01,-2.957171e-01,2.957171e-01,-3.210062e-01,3.210062e-01,-2.725684e-01,2.725684e-01,-2.452176e-01,2.452176e-01,-2.812662e-01,2.812662e-01,-3.029622e-01,3.029622e-01,-3.293745e-01,3.293745e-01,-3.441536e-01,3.441536e-01,-2.946918e-01,2.946918e-01,-2.890545e-01,2.890545e-01,-1.949205e-01,1.949205e-01,-2.176102e-01,2.176102e-01,-2.595190e-01,2.595190e-01,-2.690931e-01,2.690931e-01,-2.130294e-01,2.130294e-01,-2.316308e-01,2.316308e-01,-2.798562e-01,2.798562e-01,-2.146988e-01,2.146988e-01,-2.332089e-01,2.332089e-01,-2.470614e-01,2.470614e-01,-2.204300e-01,2.204300e-01,-2.272045e-01,2.272045e-01,-2.583686e-01,2.583686e-01,-2.072299e-01,2.072299e-01,-1.834971e-01,1.834971e-01,-2.332656e-01,2.332656e-01,-3.271297e-01,3.271297e-01,-2.401937e-01,2.401937e-01,-2.006316e-01,2.006316e-01,-2.401947e-01,2.401947e-01,-2.475346e-01,2.475346e-01,-2.579532e-01,2.579532e-01,-2.466235e-01,2.466235e-01,-1.787582e-01,1.787582e-01,-2.036892e-01,2.036892e-01,-1.665028e-01,1.665028e-01,-1.576510e-01,1.576510e-01,-2.036997e-01,2.036997e-01,-2.040734e-01,2.040734e-01,-1.792532e-01,1.792532e-01,-2.174767e-01,2.174767e-01,-1.876948e-01,1.876948e-01,-1.883137e-01,1.883137e-01,-1.923872e-01,1.923872e-01,-2.620218e-01,2.620218e-01,-1.659873e-01,1.659873e-01,-1.475948e-01,1.475948e-01,-1.731607e-01,1.731607e-01,-2.059256e-01,2.059256e-01,-1.586309e-01,1.586309e-01,-1.607668e-01,1.607668e-01,-1.975101e-01,1.975101e-01,-2.130745e-01,2.130745e-01,-1.898872e-01,1.898872e-01,-2.052598e-01,2.052598e-01,-1.599397e-01,1.599397e-01,-1.770134e-01,1.770134e-01,-1.888249e-01,1.888249e-01,-1.515406e-01,1.515406e-01,-1.907771e-01,1.907771e-01,-1.698406e-01,1.698406e-01,-2.079535e-01,2.079535e-01,-1.966967e-01,1.966967e-01,-1.631391e-01,1.631391e-01,-2.158666e-01,2.158666e-01,-2.891774e-01,2.891774e-01,-1.581556e-01,1.581556e-01,-1.475359e-01,1.475359e-01,-1.806169e-01,1.806169e-01,-1.782238e-01,1.782238e-01,-1.660440e-01,1.660440e-01,-1.576919e-01,1.576919e-01,-1.741775e-01,1.741775e-01,-1.427265e-01,1.427265e-01,-1.695880e-01,1.695880e-01,-1.486712e-01,1.486712e-01,-1.533565e-01,1.533565e-01,-1.601464e-01,1.601464e-01,-1.978414e-01,1.978414e-01,-1.746566e-01,1.746566e-01,-1.794736e-01,1.794736e-01,-1.896567e-01,1.896567e-01,-1.666197e-01,1.666197e-01,-1.969351e-01,1.969351e-01,-2.321735e-01,2.321735e-01,-1.592485e-01,1.592485e-01,-1.671464e-01,1.671464e-01,-1.688885e-01,1.688885e-01,-1.868042e-01,1.868042e-01,-1.301138e-01,1.301138e-01,-1.330094e-01,1.330094e-01,-1.268423e-01,1.268423e-01,-1.820868e-01,1.820868e-01,-1.881020e-01,1.881020e-01,-1.580814e-01,1.580814e-01,-1.302653e-01,1.302653e-01,-1.787262e-01,1.787262e-01,-1.658453e-01,1.658453e-01,-1.240772e-01,1.240772e-01,-1.315621e-01,1.315621e-01,-1.756341e-01,1.756341e-01,-1.429438e-01,1.429438e-01,-1.351775e-01,1.351775e-01,-2.035692e-01,2.035692e-01,-1.267670e-01,1.267670e-01,-1.288470e-01,1.288470e-01,-1.393648e-01,1.393648e-01,-1.755962e-01,1.755962e-01,-1.308445e-01,1.308445e-01,-1.703894e-01,1.703894e-01,-1.461334e-01,1.461334e-01,-1.368683e-01,1.368683e-01,-1.244085e-01,1.244085e-01,-1.718163e-01,1.718163e-01,-1.415624e-01,1.415624e-01,-1.752024e-01,1.752024e-01,-1.666463e-01,1.666463e-01,-1.407325e-01,1.407325e-01,-1.258317e-01,1.258317e-01,-1.416511e-01,1.416511e-01,-1.420816e-01,1.420816e-01,-1.562547e-01,1.562547e-01,-1.542952e-01,1.542952e-01,-1.158829e-01,1.158829e-01,-1.392875e-01,1.392875e-01,-1.610095e-01,1.610095e-01,-1.546440e-01,1.546440e-01,-1.416235e-01,1.416235e-01,-2.028817e-01,2.028817e-01,-1.106779e-01,1.106779e-01,-9.231660e-02,9.231660e-02,-1.164460e-01,1.164460e-01,-1.701578e-01,1.701578e-01,-1.277995e-01,1.277995e-01,-1.946177e-01,1.946177e-01,-1.394509e-01,1.394509e-01,-1.370145e-01,1.370145e-01,-1.446031e-01,1.446031e-01,-1.665215e-01,1.665215e-01,-1.435822e-01,1.435822e-01,-1.559354e-01,1.559354e-01,-1.591860e-01,1.591860e-01,-1.193338e-01,1.193338e-01,-1.236954e-01,1.236954e-01,-1.209139e-01,1.209139e-01,-1.267385e-01,1.267385e-01,-1.232397e-01,1.232397e-01,-1.299632e-01,1.299632e-01,-1.302020e-01,1.302020e-01,-1.202975e-01,1.202975e-01,-1.525378e-01,1.525378e-01,-1.123073e-01,1.123073e-01,-1.605678e-01,1.605678e-01,-1.406867e-01,1.406867e-01,-1.354273e-01,1.354273e-01,-1.393192e-01,1.393192e-01,-1.278263e-01,1.278263e-01,-1.172073e-01,1.172073e-01,-1.153493e-01,1.153493e-01,-1.356318e-01,1.356318e-01,-1.316614e-01,1.316614e-01,-1.374489e-01,1.374489e-01,-1.018254e-01,1.018254e-01,-1.473336e-01,1.473336e-01,-1.289687e-01,1.289687e-01,-1.299183e-01,1.299183e-01,-1.178391e-01,1.178391e-01,-1.619059e-01,1.619059e-01,-1.842569e-01,1.842569e-01,-1.829095e-01,1.829095e-01,-1.939918e-01,1.939918e-01,-1.395362e-01,1.395362e-01,-1.774673e-01,1.774673e-01,-1.688216e-01,1.688216e-01,-1.671747e-01,1.671747e-01,-1.850178e-01,1.850178e-01,-1.106695e-01,1.106695e-01,-1.258323e-01,1.258323e-01,-1.246819e-01,1.246819e-01,-9.892193e-02,9.892193e-02,-1.399638e-01,1.399638e-01,-1.228375e-01,1.228375e-01,-1.756236e-01,1.756236e-01,-1.360307e-01,1.360307e-01,-1.266574e-01,1.266574e-01,-1.372135e-01,1.372135e-01,-1.175947e-01,1.175947e-01,-1.330075e-01,1.330075e-01,-1.396152e-01,1.396152e-01,-2.088443e-01,2.088443e-01]},{"count":301,"threshold":-4.887516e+00,"feature":[{"size":5,"px":[8,11,8,14,10],"py":[6,9,3,3,4],"pz":[1,0,0,0,0],"nx":[8,7,19,7,13],"ny":[11,8,8,5,8],"nz":[1,1,0,1,0]},{"size":5,"px":[14,3,13,12,12],"py":[4,6,4,4,8],"pz":[0,1,0,0,0],"nx":[2,5,2,10,10],"ny":[2,8,5,8,8],"nz":[2,1,2,0,-1]},{"size":5,"px":[6,5,3,7,7],"py":[2,3,1,2,2],"pz":[0,0,1,0,-1],"nx":[2,2,1,2,1],"ny":[3,1,2,2,2],"nz":[0,0,2,0,1]},{"size":5,"px":[3,3,6,12,8],"py":[4,2,4,10,17],"pz":[2,2,1,0,0],"nx":[4,8,8,2,1],"ny":[4,4,4,2,2],"nz":[1,1,-1,-1,-1]},{"size":5,"px":[18,19,17,9,16],"py":[1,2,2,0,2],"pz":[0,0,0,1,0],"nx":[23,23,22,22,22],"ny":[4,3,1,0,2],"nz":[0,0,0,0,0]},{"size":3,"px":[15,4,14],"py":[23,4,18],"pz":[0,2,0],"nx":[7,0,5],"ny":[10,4,9],"nz":[1,-1,-1]},{"size":5,"px":[11,11,16,11,17],"py":[8,6,11,7,11],"pz":[0,0,0,0,0],"nx":[8,4,14,14,1],"ny":[4,4,8,8,5],"nz":[1,1,0,-1,-1]},{"size":5,"px":[12,12,12,12,12],"py":[13,10,11,12,12],"pz":[0,0,0,0,-1],"nx":[4,4,1,2,9],"ny":[8,10,2,4,15],"nz":[0,1,2,1,0]},{"size":2,"px":[19,0],"py":[14,17],"pz":[0,-1],"nx":[20,19],"ny":[15,22],"nz":[0,0]},{"size":5,"px":[3,3,1,3,5],"py":[13,15,6,14,22],"pz":[0,0,1,0,0],"nx":[0,0,1,0,0],"ny":[11,21,23,5,5],"nz":[1,0,0,2,-1]},{"size":5,"px":[4,2,10,4,3],"py":[19,4,13,16,13],"pz":[0,1,0,0,0],"nx":[3,20,7,4,0],"ny":[4,19,5,1,5],"nz":[1,-1,-1,-1,-1]},{"size":2,"px":[11,5],"py":[4,4],"pz":[0,-1],"nx":[15,3],"ny":[15,1],"nz":[0,2]},{"size":4,"px":[17,17,12,11],"py":[14,15,18,18],"pz":[0,0,0,0],"nx":[11,4,1,0],"ny":[17,20,8,5],"nz":[0,-1,-1,-1]},{"size":5,"px":[6,2,1,2,11],"py":[14,4,1,1,18],"pz":[0,-1,-1,-1,-1],"nx":[5,5,3,5,2],"ny":[18,17,7,9,2],"nz":[0,0,1,1,2]},{"size":5,"px":[20,19,20,15,20],"py":[17,20,12,12,8],"pz":[0,0,0,0,0],"nx":[17,0,5,2,2],"ny":[8,4,9,2,2],"nz":[0,-1,-1,-1,-1]},{"size":2,"px":[6,8],"py":[7,11],"pz":[1,-1],"nx":[7,8],"ny":[7,10],"nz":[1,1]},{"size":5,"px":[15,16,14,8,8],"py":[2,2,2,0,0],"pz":[0,0,0,1,-1],"nx":[20,11,21,18,19],"ny":[3,6,5,1,2],"nz":[0,1,0,0,0]},{"size":4,"px":[17,18,9,8],"py":[23,21,7,8],"pz":[0,0,1,1],"nx":[8,17,10,18],"ny":[4,12,2,1],"nz":[1,-1,-1,-1]},{"size":5,"px":[2,2,9,4,8],"py":[7,3,12,12,23],"pz":[1,1,0,0,0],"nx":[0,0,0,0,0],"ny":[3,1,2,4,4],"nz":[0,0,0,0,-1]},{"size":3,"px":[7,8,5],"py":[22,23,9],"pz":[0,0,1],"nx":[9,4,2],"ny":[21,4,0],"nz":[0,-1,-1]},{"size":2,"px":[3,3],"py":[7,7],"pz":[1,-1],"nx":[3,2],"ny":[4,2],"nz":[1,2]},{"size":5,"px":[15,11,10,3,17],"py":[0,1,2,3,1],"pz":[0,0,0,2,0],"nx":[5,8,4,3,3],"ny":[9,4,7,10,10],"nz":[1,1,1,1,-1]},{"size":3,"px":[22,11,22],"py":[12,5,14],"pz":[0,1,0],"nx":[23,23,3],"ny":[22,23,8],"nz":[0,0,-1]},{"size":2,"px":[3,11],"py":[7,5],"pz":[1,-1],"nx":[8,2],"ny":[14,5],"nz":[0,2]},{"size":4,"px":[17,16,2,4],"py":[14,13,5,0],"pz":[0,0,-1,-1],"nx":[8,9,15,8],"ny":[8,9,14,7],"nz":[1,1,0,1]},{"size":2,"px":[5,16],"py":[6,13],"pz":[1,-1],"nx":[2,1],"ny":[4,2],"nz":[1,2]},{"size":5,"px":[1,0,1,2,1],"py":[15,2,16,19,12],"pz":[0,2,0,0,0],"nx":[8,7,4,9,9],"ny":[5,11,4,5,5],"nz":[1,1,1,1,-1]},{"size":2,"px":[8,7],"py":[11,12],"pz":[0,0],"nx":[9,1],"ny":[10,16],"nz":[0,-1]},{"size":2,"px":[15,13],"py":[17,10],"pz":[0,-1],"nx":[7,4],"ny":[8,4],"nz":[1,2]},{"size":5,"px":[11,10,7,8,9],"py":[0,0,1,1,1],"pz":[0,0,0,0,0],"nx":[4,5,4,5,6],"ny":[1,0,2,1,0],"nz":[0,0,0,0,-1]},{"size":2,"px":[2,2],"py":[4,3],"pz":[2,2],"nx":[3,21],"ny":[4,20],"nz":[1,-1]},{"size":5,"px":[10,11,5,2,11],"py":[12,10,6,11,11],"pz":[0,0,1,0,0],"nx":[4,15,16,7,7],"ny":[5,10,11,10,10],"nz":[1,0,0,0,-1]},{"size":5,"px":[13,14,1,11,11],"py":[2,2,3,2,2],"pz":[0,0,2,0,-1],"nx":[3,0,0,1,0],"ny":[23,15,14,9,8],"nz":[0,0,0,1,1]},{"size":2,"px":[17,2],"py":[13,5],"pz":[0,-1],"nx":[4,9],"ny":[2,4],"nz":[2,1]},{"size":2,"px":[10,5],"py":[4,1],"pz":[0,-1],"nx":[11,3],"ny":[3,0],"nz":[0,2]},{"size":2,"px":[5,3],"py":[3,3],"pz":[2,-1],"nx":[11,23],"ny":[8,14],"nz":[1,0]},{"size":3,"px":[22,22,22],"py":[16,18,9],"pz":[0,0,0],"nx":[13,2,0],"ny":[17,3,5],"nz":[0,-1,-1]},{"size":5,"px":[13,10,13,14,11],"py":[2,2,1,2,1],"pz":[0,0,0,0,0],"nx":[3,3,8,6,6],"ny":[2,5,4,11,11],"nz":[2,2,1,1,-1]},{"size":3,"px":[12,1,1],"py":[14,0,1],"pz":[0,-1,-1],"nx":[8,15,7],"ny":[1,2,0],"nz":[1,0,1]},{"size":2,"px":[4,5],"py":[20,23],"pz":[0,0],"nx":[3,3],"ny":[10,2],"nz":[1,-1]},{"size":2,"px":[2,4],"py":[7,2],"pz":[1,-1],"nx":[4,3],"ny":[23,16],"nz":[0,0]},{"size":3,"px":[3,3,6],"py":[5,2,4],"pz":[2,2,1],"nx":[3,1,2],"ny":[5,17,0],"nz":[1,-1,-1]},{"size":2,"px":[14,8],"py":[17,6],"pz":[0,1],"nx":[13,10],"ny":[16,9],"nz":[0,-1]},{"size":5,"px":[15,7,14,13,14],"py":[1,0,0,0,1],"pz":[0,1,0,0,0],"nx":[4,4,4,8,8],"ny":[5,3,2,10,10],"nz":[2,2,2,1,-1]},{"size":5,"px":[8,9,4,5,4],"py":[13,12,9,5,7],"pz":[0,0,1,1,1],"nx":[22,21,22,22,22],"ny":[4,0,3,2,2],"nz":[0,0,0,0,-1]},{"size":2,"px":[17,17],"py":[16,13],"pz":[0,0],"nx":[14,21],"ny":[8,0],"nz":[0,-1]},{"size":2,"px":[16,10],"py":[4,9],"pz":[0,-1],"nx":[16,10],"ny":[3,3],"nz":[0,1]},{"size":5,"px":[1,1,0,1,0],"py":[17,16,7,15,8],"pz":[0,0,1,0,0],"nx":[4,3,8,9,7],"ny":[3,3,6,6,6],"nz":[1,1,0,0,-1]},{"size":2,"px":[3,3],"py":[2,3],"pz":[2,2],"nx":[8,3],"ny":[4,3],"nz":[1,-1]},{"size":2,"px":[10,2],"py":[17,4],"pz":[0,2],"nx":[10,12],"ny":[15,14],"nz":[0,-1]},{"size":2,"px":[11,11],"py":[14,12],"pz":[0,0],"nx":[9,10],"ny":[13,11],"nz":[0,0]},{"size":2,"px":[12,13],"py":[5,5],"pz":[0,0],"nx":[3,4],"ny":[4,1],"nz":[1,-1]},{"size":5,"px":[7,10,8,11,11],"py":[13,2,12,2,2],"pz":[0,0,0,0,-1],"nx":[10,1,1,10,1],"ny":[12,5,3,13,1],"nz":[0,1,1,0,2]},{"size":2,"px":[6,10],"py":[4,2],"pz":[1,-1],"nx":[4,6],"ny":[4,9],"nz":[1,1]},{"size":2,"px":[20,20],"py":[21,22],"pz":[0,0],"nx":[15,8],"ny":[5,5],"nz":[0,-1]},{"size":2,"px":[4,3],"py":[3,3],"pz":[2,2],"nx":[9,17],"ny":[4,15],"nz":[1,-1]},{"size":3,"px":[2,2,4],"py":[3,3,7],"pz":[2,-1,-1],"nx":[7,4,4],"ny":[6,5,4],"nz":[1,2,2]},{"size":5,"px":[8,9,16,17,17],"py":[1,2,1,1,1],"pz":[1,1,0,0,-1],"nx":[2,2,4,2,4],"ny":[16,14,22,15,21],"nz":[0,0,0,0,0]},{"size":2,"px":[9,9],"py":[18,0],"pz":[0,-1],"nx":[2,5],"ny":[5,8],"nz":[2,1]},{"size":2,"px":[7,8],"py":[11,11],"pz":[0,0],"nx":[15,5],"ny":[8,8],"nz":[0,-1]},{"size":2,"px":[0,3],"py":[4,3],"pz":[2,-1],"nx":[1,6],"ny":[4,14],"nz":[2,0]},{"size":2,"px":[6,12],"py":[7,11],"pz":[1,-1],"nx":[0,0],"ny":[7,12],"nz":[1,0]},{"size":2,"px":[3,7],"py":[10,22],"pz":[1,0],"nx":[4,3],"ny":[10,0],"nz":[1,-1]},{"size":2,"px":[5,19],"py":[4,21],"pz":[2,-1],"nx":[11,11],"ny":[8,9],"nz":[1,1]},{"size":2,"px":[3,3],"py":[8,7],"pz":[1,1],"nx":[4,20],"ny":[4,5],"nz":[1,-1]},{"size":5,"px":[11,23,23,23,23],"py":[7,13,19,20,21],"pz":[1,0,0,0,0],"nx":[4,3,2,8,8],"ny":[11,5,5,23,23],"nz":[1,1,2,0,-1]},{"size":2,"px":[4,1],"py":[0,2],"pz":[0,0],"nx":[0,6],"ny":[0,11],"nz":[0,-1]},{"size":2,"px":[11,8],"py":[12,1],"pz":[0,-1],"nx":[23,23],"ny":[13,12],"nz":[0,0]},{"size":5,"px":[23,11,23,11,11],"py":[13,7,12,5,6],"pz":[0,1,0,1,1],"nx":[6,3,8,7,7],"ny":[12,4,4,11,11],"nz":[0,1,1,0,-1]},{"size":2,"px":[20,5],"py":[15,5],"pz":[0,-1],"nx":[10,10],"ny":[11,10],"nz":[1,1]},{"size":2,"px":[11,4],"py":[19,8],"pz":[0,1],"nx":[11,19],"ny":[18,2],"nz":[0,-1]},{"size":2,"px":[14,6],"py":[3,4],"pz":[0,-1],"nx":[8,15],"ny":[1,0],"nz":[1,0]},{"size":4,"px":[14,5,13,12],"py":[23,3,23,23],"pz":[0,1,0,0],"nx":[12,0,1,4],"ny":[21,3,2,4],"nz":[0,-1,-1,-1]},{"size":2,"px":[19,5],"py":[12,2],"pz":[0,-1],"nx":[4,7],"ny":[3,5],"nz":[2,1]},{"size":2,"px":[0,8],"py":[5,3],"pz":[2,-1],"nx":[5,22],"ny":[3,11],"nz":[2,0]},{"size":2,"px":[2,6],"py":[3,12],"pz":[2,0],"nx":[3,5],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[5,5],"py":[0,6],"pz":[2,-1],"nx":[14,6],"ny":[4,2],"nz":[0,1]},{"size":2,"px":[16,11],"py":[1,0],"pz":[0,-1],"nx":[4,8],"ny":[4,10],"nz":[2,1]},{"size":2,"px":[9,4],"py":[4,3],"pz":[1,1],"nx":[5,8],"ny":[0,10],"nz":[2,-1]},{"size":2,"px":[16,1],"py":[22,1],"pz":[0,-1],"nx":[2,2],"ny":[4,2],"nz":[2,2]},{"size":2,"px":[12,2],"py":[11,2],"pz":[0,-1],"nx":[5,5],"ny":[1,0],"nz":[2,2]},{"size":2,"px":[11,11],"py":[4,3],"pz":[1,1],"nx":[7,5],"ny":[4,0],"nz":[1,-1]},{"size":2,"px":[9,2],"py":[22,3],"pz":[0,2],"nx":[4,9],"ny":[10,11],"nz":[1,-1]},{"size":2,"px":[2,4],"py":[8,10],"pz":[1,-1],"nx":[5,3],"ny":[23,18],"nz":[0,0]},{"size":2,"px":[12,6],"py":[21,9],"pz":[0,-1],"nx":[11,23],"ny":[6,10],"nz":[1,0]},{"size":2,"px":[9,9],"py":[8,7],"pz":[1,1],"nx":[18,8],"ny":[18,6],"nz":[0,-1]},{"size":2,"px":[13,3],"py":[19,0],"pz":[0,-1],"nx":[6,5],"ny":[9,11],"nz":[1,1]},{"size":5,"px":[2,10,9,7,8],"py":[0,1,0,1,0],"pz":[2,0,0,0,0],"nx":[3,4,6,8,8],"ny":[2,4,9,4,4],"nz":[2,1,1,1,-1]},{"size":2,"px":[8,4],"py":[6,3],"pz":[1,2],"nx":[9,4],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[0,4],"py":[23,3],"pz":[0,-1],"nx":[12,9],"ny":[2,2],"nz":[0,0]},{"size":2,"px":[4,2],"py":[10,3],"pz":[1,2],"nx":[0,2],"ny":[23,5],"nz":[0,-1]},{"size":2,"px":[12,14],"py":[18,0],"pz":[0,-1],"nx":[12,8],"ny":[16,10],"nz":[0,1]},{"size":4,"px":[10,18,7,5],"py":[14,8,0,3],"pz":[0,-1,-1,-1],"nx":[8,6,8,5],"ny":[11,12,5,5],"nz":[0,0,1,1]},{"size":2,"px":[6,5],"py":[2,2],"pz":[1,1],"nx":[8,8],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[12,10],"py":[20,20],"pz":[0,0],"nx":[11,10],"ny":[19,19],"nz":[0,0]},{"size":2,"px":[17,10],"py":[16,20],"pz":[0,-1],"nx":[8,7],"ny":[4,8],"nz":[1,1]},{"size":3,"px":[2,1,3],"py":[20,4,21],"pz":[0,2,0],"nx":[3,4,0],"ny":[10,1,0],"nz":[1,-1,-1]},{"size":5,"px":[6,7,3,6,6],"py":[15,14,7,16,19],"pz":[0,0,1,0,0],"nx":[0,0,0,0,0],"ny":[18,19,16,17,17],"nz":[0,0,0,0,-1]},{"size":2,"px":[8,16],"py":[6,12],"pz":[1,0],"nx":[8,15],"ny":[4,10],"nz":[1,-1]},{"size":5,"px":[0,0,0,0,0],"py":[1,3,2,0,4],"pz":[2,2,2,2,1],"nx":[13,8,14,4,7],"ny":[23,6,23,3,9],"nz":[0,1,0,2,-1]},{"size":2,"px":[3,6],"py":[3,5],"pz":[2,1],"nx":[10,8],"ny":[11,6],"nz":[0,-1]},{"size":2,"px":[11,10],"py":[4,4],"pz":[0,0],"nx":[8,5],"ny":[4,9],"nz":[1,-1]},{"size":5,"px":[15,18,9,16,4],"py":[12,13,6,23,3],"pz":[0,0,1,0,2],"nx":[6,3,6,2,7],"ny":[2,3,0,1,0],"nz":[0,0,0,1,0]},{"size":2,"px":[4,18],"py":[12,13],"pz":[0,-1],"nx":[2,8],"ny":[3,4],"nz":[2,1]},{"size":2,"px":[4,2],"py":[10,4],"pz":[1,2],"nx":[3,3],"ny":[5,0],"nz":[2,-1]},{"size":2,"px":[9,19],"py":[7,8],"pz":[1,0],"nx":[8,3],"ny":[4,0],"nz":[1,-1]},{"size":2,"px":[6,0],"py":[6,0],"pz":[0,-1],"nx":[0,0],"ny":[7,2],"nz":[1,2]},{"size":2,"px":[8,8],"py":[0,0],"pz":[1,-1],"nx":[17,18],"ny":[0,2],"nz":[0,0]},{"size":4,"px":[13,4,4,1],"py":[14,7,3,5],"pz":[0,-1,-1,-1],"nx":[3,16,3,7],"ny":[1,15,5,13],"nz":[2,0,2,0]},{"size":2,"px":[4,9],"py":[6,11],"pz":[1,0],"nx":[3,23],"ny":[4,8],"nz":[1,-1]},{"size":5,"px":[9,17,4,16,16],"py":[2,3,1,3,3],"pz":[1,0,2,0,-1],"nx":[2,3,3,2,3],"ny":[1,7,2,3,3],"nz":[2,1,1,1,1]},{"size":2,"px":[10,5],"py":[22,9],"pz":[0,1],"nx":[10,3],"ny":[21,2],"nz":[0,-1]},{"size":2,"px":[11,11],"py":[6,3],"pz":[0,-1],"nx":[8,5],"ny":[4,3],"nz":[1,1]},{"size":2,"px":[10,5],"py":[8,3],"pz":[0,-1],"nx":[14,5],"ny":[14,2],"nz":[0,2]},{"size":2,"px":[7,8],"py":[3,2],"pz":[0,-1],"nx":[8,2],"ny":[18,2],"nz":[0,2]},{"size":2,"px":[1,1],"py":[19,11],"pz":[0,1],"nx":[9,4],"ny":[5,1],"nz":[0,-1]},{"size":2,"px":[2,4],"py":[3,6],"pz":[2,1],"nx":[3,3],"ny":[4,4],"nz":[1,-1]},{"size":5,"px":[7,15,13,14,4],"py":[6,12,9,11,4],"pz":[1,0,0,0,2],"nx":[7,3,8,4,5],"ny":[0,3,0,2,1],"nz":[0,0,0,0,0]},{"size":5,"px":[10,13,7,8,9],"py":[0,1,1,0,1],"pz":[0,0,0,0,0],"nx":[7,4,4,4,8],"ny":[8,3,4,2,4],"nz":[1,2,2,2,1]},{"size":2,"px":[6,1],"py":[6,0],"pz":[1,-1],"nx":[11,7],"ny":[3,2],"nz":[0,1]},{"size":2,"px":[13,0],"py":[13,2],"pz":[0,-1],"nx":[0,1],"ny":[13,16],"nz":[0,0]},{"size":2,"px":[8,17],"py":[6,13],"pz":[1,0],"nx":[8,1],"ny":[4,16],"nz":[1,-1]},{"size":5,"px":[12,11,3,6,17],"py":[4,4,1,2,14],"pz":[0,0,2,1,0],"nx":[6,23,23,6,23],"ny":[5,7,6,6,14],"nz":[1,0,0,1,0]},{"size":2,"px":[5,22],"py":[4,17],"pz":[2,-1],"nx":[4,8],"ny":[5,7],"nz":[2,1]},{"size":2,"px":[15,14],"py":[1,1],"pz":[0,0],"nx":[4,7],"ny":[2,4],"nz":[2,-1]},{"size":2,"px":[15,17],"py":[12,7],"pz":[0,-1],"nx":[14,10],"ny":[11,4],"nz":[0,1]},{"size":4,"px":[10,2,9,15],"py":[5,11,1,13],"pz":[0,-1,-1,-1],"nx":[11,3,3,13],"ny":[1,1,0,1],"nz":[0,2,2,0]},{"size":2,"px":[7,21],"py":[15,22],"pz":[0,-1],"nx":[4,9],"ny":[8,14],"nz":[1,0]},{"size":2,"px":[6,5],"py":[21,2],"pz":[0,-1],"nx":[3,5],"ny":[11,21],"nz":[1,0]},{"size":2,"px":[17,7],"py":[2,0],"pz":[0,-1],"nx":[4,8],"ny":[5,11],"nz":[2,1]},{"size":2,"px":[11,8],"py":[10,4],"pz":[0,-1],"nx":[13,12],"ny":[3,3],"nz":[0,0]},{"size":2,"px":[6,5],"py":[2,2],"pz":[1,1],"nx":[7,1],"ny":[8,2],"nz":[0,-1]},{"size":5,"px":[0,0,1,0,0],"py":[12,4,14,0,2],"pz":[0,1,0,2,2],"nx":[9,5,8,4,4],"ny":[6,3,6,3,3],"nz":[0,1,0,1,-1]},{"size":5,"px":[8,0,0,3,2],"py":[6,5,0,8,2],"pz":[1,-1,-1,-1,-1],"nx":[23,7,22,11,4],"ny":[12,6,14,4,3],"nz":[0,1,0,1,2]},{"size":4,"px":[12,12,4,8],"py":[12,11,3,10],"pz":[0,0,-1,-1],"nx":[0,0,0,0],"ny":[2,1,0,3],"nz":[1,2,2,1]},{"size":2,"px":[10,6],"py":[7,6],"pz":[1,-1],"nx":[16,4],"ny":[12,2],"nz":[0,2]},{"size":5,"px":[2,1,3,3,3],"py":[14,8,20,21,21],"pz":[0,1,0,0,-1],"nx":[20,10,21,21,21],"ny":[23,11,21,23,20],"nz":[0,1,0,0,0]},{"size":2,"px":[6,13],"py":[2,4],"pz":[1,0],"nx":[7,21],"ny":[8,0],"nz":[0,-1]},{"size":2,"px":[12,3],"py":[17,4],"pz":[0,2],"nx":[11,10],"ny":[15,7],"nz":[0,-1]},{"size":4,"px":[11,0,19,2],"py":[15,2,23,10],"pz":[0,-1,-1,-1],"nx":[6,8,16,2],"ny":[13,11,10,2],"nz":[0,0,0,2]},{"size":2,"px":[6,3],"py":[14,7],"pz":[0,1],"nx":[3,1],"ny":[4,1],"nz":[1,-1]},{"size":4,"px":[12,17,5,10],"py":[19,15,14,3],"pz":[0,-1,-1,-1],"nx":[4,12,6,12],"ny":[4,18,9,22],"nz":[1,0,1,0]},{"size":2,"px":[8,3],"py":[13,5],"pz":[0,-1],"nx":[3,4],"ny":[4,9],"nz":[1,1]},{"size":5,"px":[6,5,4,5,3],"py":[2,1,2,2,0],"pz":[0,0,0,0,1],"nx":[7,4,9,18,18],"ny":[4,4,7,14,14],"nz":[1,1,1,0,-1]},{"size":4,"px":[8,3,20,1],"py":[6,3,18,0],"pz":[1,-1,-1,-1],"nx":[13,11,5,22],"ny":[12,6,2,17],"nz":[0,1,2,0]},{"size":2,"px":[6,3],"py":[6,3],"pz":[1,2],"nx":[8,5],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[21,7],"py":[14,7],"pz":[0,1],"nx":[16,11],"ny":[14,6],"nz":[0,-1]},{"size":2,"px":[10,4],"py":[3,1],"pz":[0,-1],"nx":[9,5],"ny":[0,0],"nz":[0,1]},{"size":2,"px":[4,10],"py":[5,8],"pz":[2,1],"nx":[5,14],"ny":[9,7],"nz":[1,-1]},{"size":2,"px":[9,2],"py":[23,4],"pz":[0,2],"nx":[2,2],"ny":[5,5],"nz":[2,-1]},{"size":5,"px":[10,9,11,10,10],"py":[2,2,1,1,1],"pz":[0,0,0,0,-1],"nx":[2,3,2,4,5],"ny":[4,10,2,4,3],"nz":[2,1,1,0,0]},{"size":2,"px":[11,4],"py":[13,4],"pz":[0,-1],"nx":[8,4],"ny":[4,1],"nz":[1,2]},{"size":2,"px":[17,5],"py":[15,1],"pz":[0,-1],"nx":[20,19],"ny":[14,14],"nz":[0,0]},{"size":2,"px":[2,2],"py":[20,18],"pz":[0,0],"nx":[2,1],"ny":[23,5],"nz":[0,-1]},{"size":2,"px":[10,1],"py":[18,3],"pz":[0,2],"nx":[11,3],"ny":[16,5],"nz":[0,-1]},{"size":2,"px":[3,8],"py":[6,10],"pz":[1,0],"nx":[9,0],"ny":[9,3],"nz":[0,-1]},{"size":2,"px":[20,10],"py":[21,7],"pz":[0,1],"nx":[7,2],"ny":[3,5],"nz":[1,-1]},{"size":2,"px":[10,6],"py":[4,7],"pz":[1,-1],"nx":[23,5],"ny":[9,2],"nz":[0,2]},{"size":5,"px":[2,4,5,3,4],"py":[0,1,1,2,2],"pz":[1,0,0,0,0],"nx":[1,0,1,1,1],"ny":[2,1,0,1,1],"nz":[0,1,0,0,-1]},{"size":2,"px":[8,16],"py":[7,13],"pz":[1,0],"nx":[8,3],"ny":[4,16],"nz":[1,-1]},{"size":2,"px":[17,15],"py":[7,19],"pz":[0,-1],"nx":[4,8],"ny":[2,4],"nz":[2,1]},{"size":2,"px":[4,3],"py":[11,5],"pz":[1,2],"nx":[7,8],"ny":[9,4],"nz":[1,-1]},{"size":2,"px":[23,11],"py":[9,6],"pz":[0,1],"nx":[22,22],"ny":[23,23],"nz":[0,-1]},{"size":2,"px":[23,23],"py":[21,20],"pz":[0,0],"nx":[2,2],"ny":[5,4],"nz":[1,-1]},{"size":2,"px":[17,4],"py":[12,2],"pz":[0,-1],"nx":[9,8],"ny":[4,5],"nz":[1,1]},{"size":2,"px":[6,14],"py":[2,4],"pz":[1,0],"nx":[7,18],"ny":[1,1],"nz":[1,-1]},{"size":2,"px":[20,22],"py":[1,2],"pz":[0,0],"nx":[23,23],"ny":[1,1],"nz":[0,-1]},{"size":2,"px":[0,1],"py":[9,10],"pz":[1,1],"nx":[8,0],"ny":[15,0],"nz":[0,-1]},{"size":3,"px":[11,11,6],"py":[10,11,11],"pz":[0,0,-1],"nx":[23,23,23],"ny":[19,21,20],"nz":[0,0,0]},{"size":5,"px":[23,23,23,6,6],"py":[21,22,22,3,6],"pz":[0,0,-1,-1,-1],"nx":[8,8,8,17,4],"ny":[7,10,8,16,5],"nz":[1,1,1,0,2]},{"size":2,"px":[10,23],"py":[1,22],"pz":[0,-1],"nx":[7,2],"ny":[11,2],"nz":[0,2]},{"size":2,"px":[7,14],"py":[3,10],"pz":[1,-1],"nx":[5,3],"ny":[2,1],"nz":[0,1]},{"size":2,"px":[5,3],"py":[13,7],"pz":[0,1],"nx":[4,10],"ny":[4,0],"nz":[1,-1]},{"size":2,"px":[10,0],"py":[15,6],"pz":[0,-1],"nx":[3,6],"ny":[1,2],"nz":[2,1]},{"size":2,"px":[13,4],"py":[18,17],"pz":[0,-1],"nx":[7,6],"ny":[10,7],"nz":[1,1]},{"size":2,"px":[12,11],"py":[3,8],"pz":[0,-1],"nx":[7,8],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[17,4],"py":[5,7],"pz":[0,1],"nx":[17,10],"ny":[4,0],"nz":[0,-1]},{"size":5,"px":[16,8,16,15,15],"py":[0,0,1,0,1],"pz":[0,1,0,0,0],"nx":[7,4,7,4,4],"ny":[7,5,8,1,1],"nz":[1,2,1,2,-1]},{"size":2,"px":[13,11],"py":[5,6],"pz":[0,-1],"nx":[4,5],"ny":[2,2],"nz":[1,1]},{"size":2,"px":[3,6],"py":[3,6],"pz":[2,1],"nx":[8,4],"ny":[4,3],"nz":[1,-1]},{"size":2,"px":[10,16],"py":[8,10],"pz":[0,0],"nx":[7,2],"ny":[3,3],"nz":[1,-1]},{"size":2,"px":[6,8],"py":[4,11],"pz":[1,0],"nx":[10,1],"ny":[9,20],"nz":[0,-1]},{"size":2,"px":[5,1],"py":[4,2],"pz":[2,-1],"nx":[23,23],"ny":[15,16],"nz":[0,0]},{"size":5,"px":[9,8,2,4,9],"py":[1,1,0,1,2],"pz":[0,0,2,1,0],"nx":[8,3,8,4,4],"ny":[6,2,4,2,2],"nz":[1,2,1,2,-1]},{"size":2,"px":[13,6],"py":[10,5],"pz":[0,-1],"nx":[13,7],"ny":[6,3],"nz":[0,1]},{"size":2,"px":[11,5],"py":[10,5],"pz":[1,2],"nx":[10,8],"ny":[10,9],"nz":[1,-1]},{"size":2,"px":[7,4],"py":[6,3],"pz":[1,2],"nx":[9,14],"ny":[4,9],"nz":[1,-1]},{"size":3,"px":[5,2,15],"py":[3,1,22],"pz":[1,-1,-1],"nx":[15,9,4],"ny":[0,1,0],"nz":[0,1,2]},{"size":2,"px":[10,19],"py":[9,21],"pz":[1,0],"nx":[2,17],"ny":[5,14],"nz":[2,-1]},{"size":3,"px":[16,2,1],"py":[2,10,4],"pz":[0,-1,-1],"nx":[4,4,9],"ny":[3,2,6],"nz":[2,2,1]},{"size":2,"px":[10,2],"py":[6,10],"pz":[1,-1],"nx":[21,22],"ny":[16,12],"nz":[0,0]},{"size":2,"px":[7,16],"py":[4,23],"pz":[0,-1],"nx":[7,3],"ny":[3,3],"nz":[0,1]},{"size":2,"px":[1,1],"py":[13,14],"pz":[0,0],"nx":[1,2],"ny":[18,3],"nz":[0,-1]},{"size":2,"px":[18,5],"py":[13,4],"pz":[0,-1],"nx":[4,13],"ny":[2,11],"nz":[2,0]},{"size":2,"px":[18,17],"py":[3,3],"pz":[0,0],"nx":[19,19],"ny":[1,1],"nz":[0,-1]},{"size":2,"px":[9,5],"py":[0,5],"pz":[1,-1],"nx":[12,3],"ny":[5,1],"nz":[0,2]},{"size":2,"px":[5,3],"py":[2,1],"pz":[1,2],"nx":[18,4],"ny":[4,1],"nz":[0,-1]},{"size":5,"px":[13,13,2,10,15],"py":[11,12,13,17,23],"pz":[0,-1,-1,-1,-1],"nx":[12,13,4,3,8],"ny":[4,4,1,0,3],"nz":[0,0,2,2,1]},{"size":2,"px":[9,3],"py":[2,2],"pz":[0,-1],"nx":[4,2],"ny":[7,2],"nz":[1,2]},{"size":2,"px":[13,4],"py":[5,1],"pz":[0,-1],"nx":[18,4],"ny":[12,2],"nz":[0,2]},{"size":2,"px":[19,4],"py":[11,1],"pz":[0,-1],"nx":[4,7],"ny":[2,2],"nz":[2,1]},{"size":2,"px":[4,2],"py":[6,3],"pz":[1,2],"nx":[3,2],"ny":[4,5],"nz":[1,-1]},{"size":2,"px":[4,0],"py":[7,7],"pz":[0,-1],"nx":[4,9],"ny":[0,2],"nz":[2,1]},{"size":2,"px":[4,9],"py":[0,2],"pz":[2,1],"nx":[6,4],"ny":[3,4],"nz":[0,-1]},{"size":2,"px":[4,2],"py":[9,4],"pz":[1,2],"nx":[13,5],"ny":[18,2],"nz":[0,-1]},{"size":3,"px":[5,23,23],"py":[2,8,7],"pz":[2,0,0],"nx":[10,12,1],"ny":[4,1,0],"nz":[1,-1,-1]},{"size":2,"px":[13,0],"py":[3,3],"pz":[0,-1],"nx":[4,4],"ny":[2,3],"nz":[2,2]},{"size":2,"px":[6,5],"py":[10,5],"pz":[0,-1],"nx":[0,0],"ny":[4,11],"nz":[1,0]},{"size":2,"px":[11,2],"py":[14,11],"pz":[0,-1],"nx":[10,11],"ny":[4,13],"nz":[1,0]},{"size":2,"px":[5,6],"py":[21,23],"pz":[0,0],"nx":[7,0],"ny":[21,3],"nz":[0,-1]},{"size":2,"px":[8,4],"py":[6,3],"pz":[1,2],"nx":[8,5],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[7,6],"py":[8,8],"pz":[0,0],"nx":[6,14],"ny":[9,15],"nz":[0,-1]},{"size":2,"px":[16,6],"py":[4,8],"pz":[0,-1],"nx":[16,8],"ny":[0,1],"nz":[0,1]},{"size":4,"px":[3,6,0,9],"py":[0,8,5,23],"pz":[1,-1,-1,-1],"nx":[12,2,6,10],"ny":[5,0,3,5],"nz":[0,2,1,0]},{"size":2,"px":[3,6],"py":[7,13],"pz":[1,0],"nx":[3,9],"ny":[4,9],"nz":[1,-1]},{"size":2,"px":[2,5],"py":[8,23],"pz":[1,0],"nx":[8,9],"ny":[15,0],"nz":[0,-1]},{"size":2,"px":[13,18],"py":[8,0],"pz":[0,-1],"nx":[1,1],"ny":[9,8],"nz":[1,1]},{"size":2,"px":[2,7],"py":[4,21],"pz":[2,0],"nx":[13,11],"ny":[8,9],"nz":[0,-1]},{"size":2,"px":[5,4],"py":[8,8],"pz":[0,0],"nx":[6,1],"ny":[8,5],"nz":[0,-1]},{"size":2,"px":[7,3],"py":[20,7],"pz":[0,-1],"nx":[4,3],"ny":[10,4],"nz":[1,1]},{"size":2,"px":[9,9],"py":[8,7],"pz":[1,-1],"nx":[1,2],"ny":[4,9],"nz":[2,1]},{"size":2,"px":[5,10],"py":[5,13],"pz":[1,-1],"nx":[3,6],"ny":[1,2],"nz":[2,1]},{"size":2,"px":[12,5],"py":[6,3],"pz":[0,-1],"nx":[8,4],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[10,10],"py":[4,4],"pz":[1,-1],"nx":[5,11],"ny":[2,5],"nz":[2,1]},{"size":5,"px":[11,23,11,23,11],"py":[4,9,5,10,6],"pz":[1,0,1,0,1],"nx":[7,14,13,7,3],"ny":[9,5,6,4,4],"nz":[0,0,0,1,-1]},{"size":2,"px":[8,5],"py":[0,0],"pz":[1,-1],"nx":[9,20],"ny":[1,4],"nz":[1,0]},{"size":2,"px":[19,20],"py":[0,3],"pz":[0,0],"nx":[4,6],"ny":[11,3],"nz":[1,-1]},{"size":4,"px":[13,5,20,5],"py":[14,3,23,4],"pz":[0,-1,-1,-1],"nx":[8,15,7,16],"ny":[8,14,6,15],"nz":[1,0,1,0]},{"size":2,"px":[10,20],"py":[5,17],"pz":[0,-1],"nx":[7,3],"ny":[10,1],"nz":[0,2]},{"size":3,"px":[1,12,7],"py":[3,7,10],"pz":[2,0,0],"nx":[2,2,3],"ny":[3,2,2],"nz":[1,-1,-1]},{"size":3,"px":[10,5,7],"py":[7,10,10],"pz":[1,-1,-1],"nx":[10,10,18],"ny":[10,9,23],"nz":[1,1,0]},{"size":3,"px":[14,14,4],"py":[3,3,4],"pz":[0,-1,-1],"nx":[4,4,8],"ny":[3,2,6],"nz":[2,2,1]},{"size":2,"px":[4,12],"py":[4,17],"pz":[2,0],"nx":[13,1],"ny":[15,4],"nz":[0,-1]},{"size":2,"px":[10,20],"py":[9,22],"pz":[0,-1],"nx":[9,4],"ny":[2,0],"nz":[1,2]},{"size":2,"px":[11,2],"py":[3,6],"pz":[0,-1],"nx":[2,4],"ny":[2,4],"nz":[2,1]},{"size":3,"px":[15,10,1],"py":[12,2,3],"pz":[0,-1,-1],"nx":[7,5,10],"ny":[2,1,1],"nz":[0,1,0]},{"size":5,"px":[9,11,10,12,12],"py":[0,0,0,0,0],"pz":[0,0,0,0,-1],"nx":[8,4,16,5,10],"ny":[4,4,10,3,6],"nz":[1,1,0,1,0]},{"size":2,"px":[0,10],"py":[3,5],"pz":[2,-1],"nx":[3,6],"ny":[0,1],"nz":[2,1]},{"size":5,"px":[7,8,7,2,12],"py":[14,13,13,16,0],"pz":[0,0,-1,-1,-1],"nx":[10,1,10,1,1],"ny":[13,2,12,4,9],"nz":[0,2,0,1,0]},{"size":3,"px":[6,14,13],"py":[1,2,1],"pz":[1,0,0],"nx":[8,21,10],"ny":[4,23,12],"nz":[1,-1,-1]},{"size":2,"px":[19,19],"py":[22,21],"pz":[0,0],"nx":[20,1],"ny":[22,5],"nz":[0,-1]},{"size":2,"px":[13,12],"py":[19,22],"pz":[0,-1],"nx":[2,3],"ny":[0,1],"nz":[2,1]},{"size":4,"px":[11,9,21,4],"py":[13,3,19,5],"pz":[0,-1,-1,-1],"nx":[9,9,9,5],"ny":[13,14,12,6],"nz":[0,0,0,1]},{"size":4,"px":[11,12,13,14],"py":[22,22,22,22],"pz":[0,0,0,0],"nx":[13,2,4,5],"ny":[20,0,0,6],"nz":[0,-1,-1,-1]},{"size":2,"px":[4,2],"py":[6,3],"pz":[1,2],"nx":[3,1],"ny":[4,3],"nz":[1,-1]},{"size":2,"px":[0,0],"py":[0,1],"pz":[2,2],"nx":[9,4],"ny":[6,5],"nz":[1,-1]},{"size":2,"px":[17,0],"py":[10,1],"pz":[0,-1],"nx":[9,4],"ny":[3,2],"nz":[1,2]},{"size":2,"px":[10,4],"py":[3,1],"pz":[1,2],"nx":[12,18],"ny":[17,4],"nz":[0,-1]},{"size":3,"px":[2,3,4],"py":[4,3,9],"pz":[2,2,1],"nx":[0,3,17],"ny":[0,1,18],"nz":[0,-1,-1]},{"size":2,"px":[7,3],"py":[12,6],"pz":[0,1],"nx":[5,1],"ny":[11,1],"nz":[1,-1]},{"size":2,"px":[10,17],"py":[20,6],"pz":[0,-1],"nx":[5,2],"ny":[9,5],"nz":[1,2]},{"size":2,"px":[8,11],"py":[18,2],"pz":[0,-1],"nx":[5,4],"ny":[9,9],"nz":[1,1]},{"size":2,"px":[16,15],"py":[2,2],"pz":[0,0],"nx":[17,12],"ny":[2,2],"nz":[0,-1]},{"size":2,"px":[18,4],"py":[5,5],"pz":[0,-1],"nx":[7,5],"ny":[23,19],"nz":[0,0]},{"size":2,"px":[12,13],"py":[23,23],"pz":[0,0],"nx":[7,11],"ny":[10,20],"nz":[1,-1]},{"size":2,"px":[5,10],"py":[3,18],"pz":[2,-1],"nx":[9,9],"ny":[5,6],"nz":[1,1]},{"size":2,"px":[5,10],"py":[2,4],"pz":[1,0],"nx":[4,23],"ny":[4,20],"nz":[1,-1]},{"size":2,"px":[2,3],"py":[8,1],"pz":[1,-1],"nx":[15,12],"ny":[2,1],"nz":[0,0]},{"size":2,"px":[4,7],"py":[3,10],"pz":[2,1],"nx":[10,1],"ny":[20,4],"nz":[0,-1]},{"size":2,"px":[11,11],"py":[10,11],"pz":[0,0],"nx":[22,3],"ny":[5,4],"nz":[0,-1]},{"size":5,"px":[8,17,17,9,18],"py":[0,1,0,1,0],"pz":[1,0,0,1,0],"nx":[11,8,9,4,4],"ny":[23,4,6,2,2],"nz":[0,1,0,2,-1]},{"size":2,"px":[5,5],"py":[4,4],"pz":[1,-1],"nx":[13,4],"ny":[9,2],"nz":[0,2]},{"size":5,"px":[9,4,8,7,7],"py":[3,1,3,3,3],"pz":[0,1,0,0,-1],"nx":[4,2,5,3,2],"ny":[1,15,1,4,13],"nz":[0,0,0,0,0]},{"size":2,"px":[17,7],"py":[13,7],"pz":[0,-1],"nx":[4,8],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[1,2],"py":[1,12],"pz":[2,0],"nx":[9,21],"ny":[5,4],"nz":[0,-1]},{"size":2,"px":[12,0],"py":[14,1],"pz":[0,-1],"nx":[1,1],"ny":[19,10],"nz":[0,1]},{"size":2,"px":[16,1],"py":[5,9],"pz":[0,-1],"nx":[16,15],"ny":[3,3],"nz":[0,0]},{"size":2,"px":[4,8],"py":[3,6],"pz":[2,1],"nx":[8,4],"ny":[4,0],"nz":[1,-1]},{"size":2,"px":[11,6],"py":[17,15],"pz":[0,0],"nx":[11,0],"ny":[16,4],"nz":[0,-1]},{"size":4,"px":[12,11,0,3],"py":[16,8,7,1],"pz":[0,-1,-1,-1],"nx":[10,5,10,5],"ny":[11,9,10,8],"nz":[0,1,0,1]},{"size":2,"px":[3,6],"py":[7,13],"pz":[1,0],"nx":[4,14],"ny":[4,16],"nz":[1,-1]},{"size":2,"px":[7,17],"py":[6,13],"pz":[0,-1],"nx":[4,8],"ny":[4,9],"nz":[2,1]},{"size":2,"px":[15,11],"py":[3,2],"pz":[0,-1],"nx":[4,15],"ny":[1,2],"nz":[2,0]},{"size":2,"px":[10,11],"py":[18,4],"pz":[0,-1],"nx":[5,5],"ny":[8,9],"nz":[1,1]},{"size":2,"px":[8,4],"py":[7,4],"pz":[1,2],"nx":[4,3],"ny":[5,7],"nz":[2,-1]},{"size":2,"px":[12,4],"py":[15,4],"pz":[0,-1],"nx":[11,8],"ny":[14,19],"nz":[0,0]},{"size":2,"px":[18,13],"py":[13,20],"pz":[0,0],"nx":[13,4],"ny":[18,2],"nz":[0,-1]},{"size":2,"px":[12,4],"py":[6,3],"pz":[0,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":5,"px":[21,5,11,5,10],"py":[1,1,3,0,0],"pz":[0,2,1,2,1],"nx":[7,14,15,4,8],"ny":[3,6,11,3,4],"nz":[1,-1,-1,-1,-1]},{"size":2,"px":[10,6],"py":[15,10],"pz":[0,-1],"nx":[21,22],"ny":[14,12],"nz":[0,0]},{"size":2,"px":[18,0],"py":[20,0],"pz":[0,-1],"nx":[2,3],"ny":[2,4],"nz":[2,1]},{"size":5,"px":[12,6,13,11,7],"py":[1,1,1,2,1],"pz":[0,1,0,0,1],"nx":[7,6,8,5,5],"ny":[4,15,4,16,16],"nz":[1,0,1,0,-1]},{"size":3,"px":[22,21,21],"py":[14,15,17],"pz":[0,0,0],"nx":[5,9,4],"ny":[0,5,0],"nz":[2,-1,-1]},{"size":2,"px":[10,2],"py":[14,1],"pz":[0,-1],"nx":[23,11],"ny":[16,8],"nz":[0,1]},{"size":4,"px":[21,21,0,18],"py":[14,15,5,4],"pz":[0,0,-1,-1],"nx":[8,8,9,4],"ny":[7,8,10,5],"nz":[1,1,1,2]},{"size":2,"px":[15,5],"py":[18,1],"pz":[0,-1],"nx":[23,23],"ny":[16,18],"nz":[0,0]},{"size":2,"px":[15,14],"py":[1,1],"pz":[0,0],"nx":[4,4],"ny":[2,3],"nz":[2,-1]},{"size":2,"px":[2,6],"py":[6,5],"pz":[1,-1],"nx":[14,11],"ny":[1,1],"nz":[0,0]},{"size":2,"px":[3,17],"py":[2,8],"pz":[2,0],"nx":[8,3],"ny":[4,9],"nz":[1,-1]},{"size":2,"px":[17,8],"py":[13,10],"pz":[0,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[0,0],"py":[8,3],"pz":[0,1],"nx":[1,11],"ny":[4,7],"nz":[1,-1]},{"size":2,"px":[6,8],"py":[5,0],"pz":[1,-1],"nx":[0,0],"ny":[3,1],"nz":[1,2]},{"size":2,"px":[0,0],"py":[5,3],"pz":[1,2],"nx":[1,18],"ny":[5,7],"nz":[1,-1]},{"size":2,"px":[7,3],"py":[6,6],"pz":[0,1],"nx":[7,12],"ny":[5,20],"nz":[0,-1]},{"size":2,"px":[8,1],"py":[0,5],"pz":[0,-1],"nx":[4,2],"ny":[9,3],"nz":[1,2]},{"size":2,"px":[0,0],"py":[10,11],"pz":[0,0],"nx":[0,5],"ny":[5,9],"nz":[0,-1]},{"size":2,"px":[8,1],"py":[23,4],"pz":[0,2],"nx":[0,0],"ny":[13,2],"nz":[0,-1]},{"size":2,"px":[4,1],"py":[6,4],"pz":[0,-1],"nx":[4,4],"ny":[4,5],"nz":[2,2]},{"size":2,"px":[7,6],"py":[6,5],"pz":[1,1],"nx":[3,9],"ny":[4,16],"nz":[1,-1]},{"size":2,"px":[5,3],"py":[9,13],"pz":[0,-1],"nx":[4,10],"ny":[3,7],"nz":[1,0]},{"size":5,"px":[13,9,6,10,10],"py":[2,2,1,2,2],"pz":[0,0,1,0,-1],"nx":[7,5,6,5,6],"ny":[0,2,2,1,1],"nz":[0,0,0,0,0]}],"alpha":[-1.119615e+00,1.119615e+00,-8.169953e-01,8.169953e-01,-5.291213e-01,5.291213e-01,-4.904488e-01,4.904488e-01,-4.930982e-01,4.930982e-01,-4.106179e-01,4.106179e-01,-4.246842e-01,4.246842e-01,-3.802383e-01,3.802383e-01,-3.364358e-01,3.364358e-01,-3.214186e-01,3.214186e-01,-3.210798e-01,3.210798e-01,-2.993167e-01,2.993167e-01,-3.426336e-01,3.426336e-01,-3.199184e-01,3.199184e-01,-3.061071e-01,3.061071e-01,-2.758972e-01,2.758972e-01,-3.075590e-01,3.075590e-01,-3.009565e-01,3.009565e-01,-2.015739e-01,2.015739e-01,-2.603266e-01,2.603266e-01,-2.772993e-01,2.772993e-01,-2.184913e-01,2.184913e-01,-2.306681e-01,2.306681e-01,-1.983223e-01,1.983223e-01,-2.194760e-01,2.194760e-01,-2.528421e-01,2.528421e-01,-2.436416e-01,2.436416e-01,-3.032886e-01,3.032886e-01,-2.556071e-01,2.556071e-01,-2.562170e-01,2.562170e-01,-1.930298e-01,1.930298e-01,-2.735898e-01,2.735898e-01,-1.814703e-01,1.814703e-01,-2.054824e-01,2.054824e-01,-1.986146e-01,1.986146e-01,-1.769226e-01,1.769226e-01,-1.775257e-01,1.775257e-01,-2.167927e-01,2.167927e-01,-1.823633e-01,1.823633e-01,-1.584280e-01,1.584280e-01,-1.778321e-01,1.778321e-01,-1.826777e-01,1.826777e-01,-1.979903e-01,1.979903e-01,-1.898326e-01,1.898326e-01,-1.835506e-01,1.835506e-01,-1.967860e-01,1.967860e-01,-1.871528e-01,1.871528e-01,-1.772414e-01,1.772414e-01,-1.985514e-01,1.985514e-01,-2.144078e-01,2.144078e-01,-2.742303e-01,2.742303e-01,-2.240550e-01,2.240550e-01,-2.132534e-01,2.132534e-01,-1.552127e-01,1.552127e-01,-1.568276e-01,1.568276e-01,-1.630086e-01,1.630086e-01,-1.458232e-01,1.458232e-01,-1.559541e-01,1.559541e-01,-1.720131e-01,1.720131e-01,-1.708434e-01,1.708434e-01,-1.624431e-01,1.624431e-01,-1.814161e-01,1.814161e-01,-1.552639e-01,1.552639e-01,-1.242354e-01,1.242354e-01,-1.552139e-01,1.552139e-01,-1.694359e-01,1.694359e-01,-1.801481e-01,1.801481e-01,-1.387182e-01,1.387182e-01,-1.409679e-01,1.409679e-01,-1.486724e-01,1.486724e-01,-1.779553e-01,1.779553e-01,-1.524595e-01,1.524595e-01,-1.788086e-01,1.788086e-01,-1.671479e-01,1.671479e-01,-1.376197e-01,1.376197e-01,-1.511808e-01,1.511808e-01,-1.524632e-01,1.524632e-01,-1.198986e-01,1.198986e-01,-1.382641e-01,1.382641e-01,-1.148901e-01,1.148901e-01,-1.131803e-01,1.131803e-01,-1.273508e-01,1.273508e-01,-1.405125e-01,1.405125e-01,-1.322132e-01,1.322132e-01,-1.386966e-01,1.386966e-01,-1.275621e-01,1.275621e-01,-1.180573e-01,1.180573e-01,-1.238803e-01,1.238803e-01,-1.428389e-01,1.428389e-01,-1.694437e-01,1.694437e-01,-1.290855e-01,1.290855e-01,-1.520260e-01,1.520260e-01,-1.398282e-01,1.398282e-01,-1.890736e-01,1.890736e-01,-2.280428e-01,2.280428e-01,-1.325099e-01,1.325099e-01,-1.342873e-01,1.342873e-01,-1.463841e-01,1.463841e-01,-1.983567e-01,1.983567e-01,-1.585711e-01,1.585711e-01,-1.260154e-01,1.260154e-01,-1.426774e-01,1.426774e-01,-1.554278e-01,1.554278e-01,-1.361201e-01,1.361201e-01,-1.181856e-01,1.181856e-01,-1.255941e-01,1.255941e-01,-1.113275e-01,1.113275e-01,-1.506576e-01,1.506576e-01,-1.202859e-01,1.202859e-01,-2.159751e-01,2.159751e-01,-1.443150e-01,1.443150e-01,-1.379194e-01,1.379194e-01,-1.805758e-01,1.805758e-01,-1.465612e-01,1.465612e-01,-1.328856e-01,1.328856e-01,-1.532173e-01,1.532173e-01,-1.590635e-01,1.590635e-01,-1.462229e-01,1.462229e-01,-1.350012e-01,1.350012e-01,-1.195634e-01,1.195634e-01,-1.173221e-01,1.173221e-01,-1.192867e-01,1.192867e-01,-1.595013e-01,1.595013e-01,-1.209751e-01,1.209751e-01,-1.571290e-01,1.571290e-01,-1.527274e-01,1.527274e-01,-1.373708e-01,1.373708e-01,-1.318313e-01,1.318313e-01,-1.273391e-01,1.273391e-01,-1.271365e-01,1.271365e-01,-1.528693e-01,1.528693e-01,-1.590476e-01,1.590476e-01,-1.581911e-01,1.581911e-01,-1.183023e-01,1.183023e-01,-1.559822e-01,1.559822e-01,-1.214999e-01,1.214999e-01,-1.283378e-01,1.283378e-01,-1.542583e-01,1.542583e-01,-1.336377e-01,1.336377e-01,-1.800416e-01,1.800416e-01,-1.710931e-01,1.710931e-01,-1.621737e-01,1.621737e-01,-1.239002e-01,1.239002e-01,-1.432928e-01,1.432928e-01,-1.392447e-01,1.392447e-01,-1.383938e-01,1.383938e-01,-1.357633e-01,1.357633e-01,-1.175842e-01,1.175842e-01,-1.085318e-01,1.085318e-01,-1.148885e-01,1.148885e-01,-1.320396e-01,1.320396e-01,-1.351204e-01,1.351204e-01,-1.581518e-01,1.581518e-01,-1.459574e-01,1.459574e-01,-1.180068e-01,1.180068e-01,-1.464196e-01,1.464196e-01,-1.179543e-01,1.179543e-01,-1.004204e-01,1.004204e-01,-1.294660e-01,1.294660e-01,-1.534244e-01,1.534244e-01,-1.378970e-01,1.378970e-01,-1.226545e-01,1.226545e-01,-1.281182e-01,1.281182e-01,-1.201471e-01,1.201471e-01,-1.448701e-01,1.448701e-01,-1.290980e-01,1.290980e-01,-1.388764e-01,1.388764e-01,-9.605773e-02,9.605773e-02,-1.411021e-01,1.411021e-01,-1.295693e-01,1.295693e-01,-1.371739e-01,1.371739e-01,-1.167579e-01,1.167579e-01,-1.400486e-01,1.400486e-01,-1.214224e-01,1.214224e-01,-1.287835e-01,1.287835e-01,-1.197646e-01,1.197646e-01,-1.192358e-01,1.192358e-01,-1.218651e-01,1.218651e-01,-1.564816e-01,1.564816e-01,-1.172391e-01,1.172391e-01,-1.342268e-01,1.342268e-01,-1.492471e-01,1.492471e-01,-1.157299e-01,1.157299e-01,-1.046703e-01,1.046703e-01,-1.255571e-01,1.255571e-01,-1.100135e-01,1.100135e-01,-1.501592e-01,1.501592e-01,-1.155712e-01,1.155712e-01,-1.145563e-01,1.145563e-01,-1.013425e-01,1.013425e-01,-1.145783e-01,1.145783e-01,-1.328031e-01,1.328031e-01,-1.077413e-01,1.077413e-01,-1.064996e-01,1.064996e-01,-1.191170e-01,1.191170e-01,-1.213217e-01,1.213217e-01,-1.260969e-01,1.260969e-01,-1.156494e-01,1.156494e-01,-1.268126e-01,1.268126e-01,-1.070999e-01,1.070999e-01,-1.112365e-01,1.112365e-01,-1.243916e-01,1.243916e-01,-1.283152e-01,1.283152e-01,-1.166925e-01,1.166925e-01,-8.997633e-02,8.997633e-02,-1.583840e-01,1.583840e-01,-1.211178e-01,1.211178e-01,-1.090830e-01,1.090830e-01,-1.030818e-01,1.030818e-01,-1.440600e-01,1.440600e-01,-1.458713e-01,1.458713e-01,-1.559082e-01,1.559082e-01,-1.058868e-01,1.058868e-01,-1.010130e-01,1.010130e-01,-1.642301e-01,1.642301e-01,-1.236850e-01,1.236850e-01,-1.467589e-01,1.467589e-01,-1.109359e-01,1.109359e-01,-1.673655e-01,1.673655e-01,-1.239984e-01,1.239984e-01,-1.039509e-01,1.039509e-01,-1.089378e-01,1.089378e-01,-1.545085e-01,1.545085e-01,-1.200862e-01,1.200862e-01,-1.105608e-01,1.105608e-01,-1.235262e-01,1.235262e-01,-8.496153e-02,8.496153e-02,-1.181372e-01,1.181372e-01,-1.139467e-01,1.139467e-01,-1.189317e-01,1.189317e-01,-1.266519e-01,1.266519e-01,-9.470736e-02,9.470736e-02,-1.336735e-01,1.336735e-01,-8.726601e-02,8.726601e-02,-1.304782e-01,1.304782e-01,-1.186529e-01,1.186529e-01,-1.355944e-01,1.355944e-01,-9.568801e-02,9.568801e-02,-1.282618e-01,1.282618e-01,-1.625632e-01,1.625632e-01,-1.167652e-01,1.167652e-01,-1.001301e-01,1.001301e-01,-1.292419e-01,1.292419e-01,-1.904213e-01,1.904213e-01,-1.511542e-01,1.511542e-01,-9.814394e-02,9.814394e-02,-1.171564e-01,1.171564e-01,-9.806486e-02,9.806486e-02,-9.217615e-02,9.217615e-02,-8.505645e-02,8.505645e-02,-1.573637e-01,1.573637e-01,-1.419174e-01,1.419174e-01,-1.298601e-01,1.298601e-01,-1.120613e-01,1.120613e-01,-1.158363e-01,1.158363e-01,-1.090957e-01,1.090957e-01,-1.204516e-01,1.204516e-01,-1.139852e-01,1.139852e-01,-9.642479e-02,9.642479e-02,-1.410872e-01,1.410872e-01,-1.142779e-01,1.142779e-01,-1.043991e-01,1.043991e-01,-9.736463e-02,9.736463e-02,-1.451046e-01,1.451046e-01,-1.205668e-01,1.205668e-01,-9.881445e-02,9.881445e-02,-1.612822e-01,1.612822e-01,-1.175681e-01,1.175681e-01,-1.522528e-01,1.522528e-01,-1.617520e-01,1.617520e-01,-1.582938e-01,1.582938e-01,-1.208202e-01,1.208202e-01,-1.016003e-01,1.016003e-01,-1.232059e-01,1.232059e-01,-9.583025e-02,9.583025e-02,-1.013990e-01,1.013990e-01,-1.178752e-01,1.178752e-01,-1.215972e-01,1.215972e-01,-1.294932e-01,1.294932e-01,-1.158270e-01,1.158270e-01,-1.008645e-01,1.008645e-01,-9.699190e-02,9.699190e-02,-1.022144e-01,1.022144e-01,-9.878768e-02,9.878768e-02,-1.339052e-01,1.339052e-01,-9.279961e-02,9.279961e-02,-1.047606e-01,1.047606e-01,-1.141163e-01,1.141163e-01,-1.267600e-01,1.267600e-01,-1.252763e-01,1.252763e-01,-9.775003e-02,9.775003e-02,-9.169116e-02,9.169116e-02,-1.006496e-01,1.006496e-01,-9.493293e-02,9.493293e-02,-1.213694e-01,1.213694e-01,-1.109243e-01,1.109243e-01,-1.115973e-01,1.115973e-01,-7.979327e-02,7.979327e-02,-9.220953e-02,9.220953e-02,-1.028913e-01,1.028913e-01,-1.253510e-01,1.253510e-01]},{"count":391,"threshold":-4.665692e+00,"feature":[{"size":5,"px":[14,9,11,17,12],"py":[2,3,9,13,3],"pz":[0,0,0,0,0],"nx":[21,8,7,20,13],"ny":[16,10,7,7,9],"nz":[0,1,1,0,0]},{"size":5,"px":[12,10,6,11,13],"py":[9,3,13,3,4],"pz":[0,0,0,0,0],"nx":[10,4,5,10,2],"ny":[9,10,8,8,2],"nz":[0,1,1,0,2]},{"size":5,"px":[6,9,7,8,8],"py":[3,3,3,3,3],"pz":[0,0,0,0,-1],"nx":[0,0,0,4,9],"ny":[4,2,3,10,8],"nz":[0,0,0,1,0]},{"size":5,"px":[6,2,16,6,8],"py":[16,2,11,4,11],"pz":[0,2,0,1,0],"nx":[3,8,4,1,1],"ny":[4,4,4,5,13],"nz":[1,1,-1,-1,-1]},{"size":3,"px":[16,13,9],"py":[23,18,10],"pz":[0,0,1],"nx":[14,15,8],"ny":[21,22,3],"nz":[0,-1,-1]},{"size":5,"px":[9,16,19,17,17],"py":[1,2,3,2,2],"pz":[1,0,0,0,-1],"nx":[23,23,23,23,23],"ny":[6,2,1,3,5],"nz":[0,0,0,0,0]},{"size":5,"px":[12,12,12,12,12],"py":[10,11,12,13,13],"pz":[0,0,0,0,-1],"nx":[4,8,14,4,6],"ny":[2,4,7,4,8],"nz":[2,1,0,1,1]},{"size":5,"px":[1,2,3,6,4],"py":[6,10,12,23,13],"pz":[1,1,0,0,0],"nx":[2,0,0,1,1],"ny":[23,5,10,21,21],"nz":[0,2,1,0,-1]},{"size":5,"px":[12,16,12,4,12],"py":[6,17,7,2,8],"pz":[0,0,0,2,0],"nx":[8,8,12,0,6],"ny":[4,4,16,0,8],"nz":[1,-1,-1,-1,-1]},{"size":2,"px":[9,2],"py":[18,4],"pz":[0,-1],"nx":[4,9],"ny":[10,16],"nz":[1,0]},{"size":5,"px":[9,9,2,0,12],"py":[6,6,21,4,8],"pz":[1,-1,-1,-1,-1],"nx":[8,4,9,7,7],"ny":[10,2,4,5,8],"nz":[1,2,1,1,1]},{"size":5,"px":[10,10,10,18,19],"py":[10,8,7,14,14],"pz":[1,1,1,0,0],"nx":[21,23,22,22,11],"ny":[23,19,21,22,10],"nz":[0,0,0,0,-1]},{"size":5,"px":[12,3,15,4,19],"py":[14,0,5,5,14],"pz":[0,-1,-1,-1,-1],"nx":[12,17,15,3,8],"ny":[18,18,14,2,10],"nz":[0,0,0,2,0]},{"size":5,"px":[8,11,3,11,4],"py":[23,7,9,8,8],"pz":[0,0,1,0,1],"nx":[8,0,10,0,8],"ny":[8,2,8,4,10],"nz":[0,-1,-1,-1,-1]},{"size":5,"px":[10,11,12,8,4],"py":[3,0,0,1,1],"pz":[0,0,0,0,1],"nx":[2,3,4,3,3],"ny":[14,5,0,1,2],"nz":[0,0,0,0,0]},{"size":2,"px":[3,11],"py":[7,0],"pz":[1,-1],"nx":[5,2],"ny":[9,5],"nz":[1,2]},{"size":5,"px":[7,1,0,10,1],"py":[0,0,2,12,6],"pz":[0,2,2,0,1],"nx":[4,6,2,8,8],"ny":[4,11,2,4,4],"nz":[1,1,2,1,-1]},{"size":2,"px":[4,15],"py":[4,12],"pz":[2,0],"nx":[4,6],"ny":[5,11],"nz":[2,-1]},{"size":5,"px":[9,4,16,14,14],"py":[8,4,23,18,18],"pz":[1,2,0,0,-1],"nx":[0,2,1,1,0],"ny":[2,0,3,2,3],"nz":[1,0,0,0,1]},{"size":5,"px":[17,7,7,18,19],"py":[7,11,8,7,7],"pz":[0,1,1,0,0],"nx":[17,5,8,2,0],"ny":[8,0,7,5,3],"nz":[0,-1,-1,-1,-1]},{"size":2,"px":[5,14],"py":[12,3],"pz":[0,-1],"nx":[4,3],"ny":[5,4],"nz":[1,1]},{"size":5,"px":[10,8,16,11,11],"py":[5,6,12,4,4],"pz":[0,1,0,0,-1],"nx":[14,13,5,9,5],"ny":[13,10,1,4,2],"nz":[0,0,2,1,2]},{"size":5,"px":[15,14,16,8,8],"py":[2,2,2,0,0],"pz":[0,0,0,1,-1],"nx":[9,18,19,18,17],"ny":[0,0,2,1,0],"nz":[1,0,0,0,0]},{"size":2,"px":[17,15],"py":[12,11],"pz":[0,0],"nx":[14,4],"ny":[9,15],"nz":[0,-1]},{"size":3,"px":[5,11,11],"py":[3,4,5],"pz":[2,1,1],"nx":[14,3,18],"ny":[6,5,0],"nz":[0,1,-1]},{"size":5,"px":[16,14,17,15,9],"py":[2,2,2,2,1],"pz":[0,0,0,0,1],"nx":[21,20,11,21,21],"ny":[2,0,7,3,3],"nz":[0,0,1,0,-1]},{"size":5,"px":[2,1,1,1,5],"py":[12,9,7,3,6],"pz":[0,0,1,1,1],"nx":[4,8,3,4,17],"ny":[4,4,0,8,0],"nz":[1,-1,-1,-1,-1]},{"size":2,"px":[8,4],"py":[6,3],"pz":[1,2],"nx":[9,2],"ny":[4,17],"nz":[1,-1]},{"size":2,"px":[8,5],"py":[16,9],"pz":[0,1],"nx":[10,17],"ny":[16,8],"nz":[0,-1]},{"size":4,"px":[11,5,9,15],"py":[14,9,11,5],"pz":[0,-1,-1,-1],"nx":[10,1,9,4],"ny":[9,2,13,7],"nz":[0,2,0,1]},{"size":5,"px":[2,5,10,7,10],"py":[7,12,2,13,3],"pz":[1,-1,-1,-1,-1],"nx":[5,2,3,3,2],"ny":[23,15,17,16,14],"nz":[0,0,0,0,0]},{"size":2,"px":[11,7],"py":[8,10],"pz":[0,-1],"nx":[7,14],"ny":[5,8],"nz":[1,0]},{"size":2,"px":[9,16],"py":[7,23],"pz":[1,0],"nx":[4,4],"ny":[2,1],"nz":[2,-1]},{"size":5,"px":[16,14,18,4,17],"py":[0,0,4,0,1],"pz":[0,0,0,2,0],"nx":[8,8,16,9,9],"ny":[5,4,11,7,7],"nz":[1,1,0,0,-1]},{"size":5,"px":[12,13,7,8,4],"py":[9,12,6,11,5],"pz":[0,0,1,1,2],"nx":[23,23,16,9,9],"ny":[0,1,11,7,7],"nz":[0,-1,-1,-1,-1]},{"size":3,"px":[6,7,2],"py":[21,23,4],"pz":[0,0,2],"nx":[4,1,16],"ny":[10,5,11],"nz":[1,-1,-1]},{"size":2,"px":[2,2],"py":[3,4],"pz":[2,2],"nx":[3,1],"ny":[4,5],"nz":[1,-1]},{"size":5,"px":[1,2,1,0,1],"py":[7,13,12,4,13],"pz":[0,0,0,2,0],"nx":[18,9,9,19,19],"ny":[23,5,11,19,19],"nz":[0,1,1,0,-1]},{"size":3,"px":[4,10,12],"py":[6,2,5],"pz":[1,-1,-1],"nx":[10,0,0],"ny":[12,1,3],"nz":[0,2,2]},{"size":2,"px":[2,4],"py":[3,6],"pz":[2,1],"nx":[3,0],"ny":[4,3],"nz":[1,-1]},{"size":5,"px":[19,17,10,14,18],"py":[2,1,7,0,1],"pz":[0,0,1,0,0],"nx":[3,3,3,7,5],"ny":[9,10,7,23,18],"nz":[1,1,1,0,0]},{"size":2,"px":[10,10],"py":[8,7],"pz":[1,1],"nx":[14,4],"ny":[15,6],"nz":[0,-1]},{"size":2,"px":[7,15],"py":[1,3],"pz":[1,0],"nx":[16,19],"ny":[1,3],"nz":[0,-1]},{"size":5,"px":[11,11,1,2,11],"py":[11,12,1,13,12],"pz":[0,0,-1,-1,-1],"nx":[12,17,8,16,8],"ny":[7,12,11,16,6],"nz":[0,0,0,0,1]},{"size":5,"px":[13,11,10,12,5],"py":[0,0,0,0,0],"pz":[0,0,0,0,1],"nx":[8,4,3,4,4],"ny":[4,5,2,4,4],"nz":[1,1,2,1,-1]},{"size":5,"px":[6,1,3,2,3],"py":[13,3,3,4,10],"pz":[0,2,1,1,1],"nx":[0,1,0,0,0],"ny":[2,0,5,4,4],"nz":[0,0,0,0,-1]},{"size":2,"px":[15,1],"py":[4,3],"pz":[0,-1],"nx":[16,15],"ny":[2,2],"nz":[0,0]},{"size":2,"px":[3,7],"py":[7,13],"pz":[1,0],"nx":[3,0],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[14,15],"py":[18,14],"pz":[0,-1],"nx":[4,14],"ny":[4,16],"nz":[1,0]},{"size":2,"px":[4,6],"py":[3,4],"pz":[2,1],"nx":[9,5],"ny":[14,2],"nz":[0,-1]},{"size":2,"px":[16,6],"py":[1,5],"pz":[0,-1],"nx":[4,9],"ny":[0,4],"nz":[2,1]},{"size":2,"px":[9,0],"py":[4,2],"pz":[0,-1],"nx":[5,3],"ny":[1,0],"nz":[1,2]},{"size":5,"px":[1,1,1,0,0],"py":[16,15,17,6,9],"pz":[0,0,0,1,0],"nx":[9,5,4,9,8],"ny":[7,3,3,6,7],"nz":[0,1,1,0,-1]},{"size":2,"px":[9,1],"py":[8,15],"pz":[1,-1],"nx":[9,8],"ny":[9,4],"nz":[1,1]},{"size":2,"px":[20,19],"py":[19,22],"pz":[0,0],"nx":[7,0],"ny":[3,0],"nz":[1,-1]},{"size":5,"px":[8,4,2,5,5],"py":[12,6,3,5,5],"pz":[0,1,2,1,-1],"nx":[22,21,20,21,22],"ny":[17,20,22,19,16],"nz":[0,0,0,0,0]},{"size":2,"px":[6,12],"py":[2,6],"pz":[1,0],"nx":[8,3],"ny":[3,2],"nz":[1,-1]},{"size":2,"px":[11,11],"py":[9,4],"pz":[1,1],"nx":[12,4],"ny":[17,5],"nz":[0,-1]},{"size":3,"px":[0,1,0],"py":[5,13,3],"pz":[2,0,2],"nx":[0,4,11],"ny":[23,5,1],"nz":[0,-1,-1]},{"size":2,"px":[10,5],"py":[6,3],"pz":[0,1],"nx":[4,4],"ny":[3,0],"nz":[1,-1]},{"size":2,"px":[6,5],"py":[7,3],"pz":[0,-1],"nx":[0,1],"ny":[4,10],"nz":[2,1]},{"size":5,"px":[12,13,12,12,12],"py":[12,13,11,10,10],"pz":[0,0,0,0,-1],"nx":[10,8,8,16,15],"ny":[7,4,10,11,10],"nz":[0,1,0,0,0]},{"size":2,"px":[4,8],"py":[3,6],"pz":[2,1],"nx":[4,2],"ny":[5,5],"nz":[2,-1]},{"size":2,"px":[9,17],"py":[17,7],"pz":[0,-1],"nx":[5,2],"ny":[9,4],"nz":[1,2]},{"size":2,"px":[4,4],"py":[3,5],"pz":[2,2],"nx":[12,8],"ny":[16,2],"nz":[0,-1]},{"size":2,"px":[1,1],"py":[2,0],"pz":[1,1],"nx":[0,4],"ny":[0,1],"nz":[2,-1]},{"size":2,"px":[11,1],"py":[5,0],"pz":[0,-1],"nx":[2,3],"ny":[2,4],"nz":[2,1]},{"size":4,"px":[0,6,4,22],"py":[23,2,4,12],"pz":[0,-1,-1,-1],"nx":[7,6,8,5],"ny":[1,1,2,1],"nz":[1,1,1,1]},{"size":2,"px":[4,10],"py":[0,9],"pz":[1,-1],"nx":[2,4],"ny":[3,10],"nz":[2,1]},{"size":2,"px":[11,8],"py":[15,13],"pz":[0,-1],"nx":[23,11],"ny":[13,5],"nz":[0,1]},{"size":2,"px":[18,4],"py":[5,4],"pz":[0,-1],"nx":[18,20],"ny":[4,7],"nz":[0,0]},{"size":5,"px":[21,20,20,10,20],"py":[17,22,19,10,21],"pz":[0,0,0,1,0],"nx":[5,5,3,14,7],"ny":[9,9,0,8,4],"nz":[0,-1,-1,-1,-1]},{"size":5,"px":[3,7,13,7,3],"py":[6,12,3,0,3],"pz":[1,-1,-1,-1,-1],"nx":[1,5,0,0,2],"ny":[16,6,13,5,4],"nz":[0,1,0,1,0]},{"size":2,"px":[7,4],"py":[6,3],"pz":[1,2],"nx":[9,5],"ny":[4,6],"nz":[1,-1]},{"size":3,"px":[14,9,13],"py":[19,22,8],"pz":[0,-1,-1],"nx":[13,4,4],"ny":[17,2,5],"nz":[0,2,2]},{"size":2,"px":[16,4],"py":[9,3],"pz":[0,2],"nx":[7,4],"ny":[4,5],"nz":[1,-1]},{"size":4,"px":[10,2,4,2],"py":[23,4,8,3],"pz":[0,2,1,2],"nx":[14,0,4,11],"ny":[19,3,5,3],"nz":[0,-1,-1,-1]},{"size":5,"px":[9,10,8,7,11],"py":[2,2,2,2,2],"pz":[0,0,0,0,0],"nx":[6,5,3,4,4],"ny":[0,1,0,2,2],"nz":[0,0,1,0,-1]},{"size":2,"px":[6,4],"py":[13,6],"pz":[0,-1],"nx":[15,4],"ny":[8,4],"nz":[0,1]},{"size":2,"px":[0,8],"py":[1,2],"pz":[2,-1],"nx":[5,4],"ny":[2,2],"nz":[1,1]},{"size":5,"px":[16,13,14,15,15],"py":[1,0,0,0,0],"pz":[0,0,0,0,-1],"nx":[4,9,4,18,8],"ny":[5,9,4,18,11],"nz":[2,1,2,0,1]},{"size":2,"px":[5,6],"py":[2,6],"pz":[2,1],"nx":[22,9],"ny":[23,9],"nz":[0,-1]},{"size":2,"px":[19,19],"py":[5,5],"pz":[0,-1],"nx":[21,22],"ny":[2,4],"nz":[0,0]},{"size":2,"px":[2,5],"py":[8,6],"pz":[0,1],"nx":[3,4],"ny":[4,9],"nz":[1,-1]},{"size":2,"px":[18,14],"py":[13,17],"pz":[0,0],"nx":[14,4],"ny":[16,3],"nz":[0,-1]},{"size":2,"px":[6,6],"py":[6,3],"pz":[1,-1],"nx":[1,0],"ny":[2,2],"nz":[1,2]},{"size":2,"px":[23,21],"py":[21,14],"pz":[0,-1],"nx":[7,5],"ny":[0,0],"nz":[0,1]},{"size":2,"px":[15,10],"py":[23,7],"pz":[0,-1],"nx":[9,4],"ny":[4,5],"nz":[1,2]},{"size":2,"px":[4,18],"py":[3,8],"pz":[2,0],"nx":[8,4],"ny":[4,5],"nz":[1,-1]},{"size":2,"px":[13,7],"py":[2,11],"pz":[0,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":5,"px":[2,3,5,6,1],"py":[7,14,2,2,4],"pz":[1,0,0,0,2],"nx":[8,4,4,7,7],"ny":[7,5,4,9,9],"nz":[1,2,2,1,-1]},{"size":2,"px":[5,3],"py":[6,3],"pz":[1,-1],"nx":[1,2],"ny":[2,4],"nz":[2,1]},{"size":5,"px":[7,20,4,10,10],"py":[9,16,4,10,8],"pz":[1,0,2,1,1],"nx":[4,2,3,5,3],"ny":[11,5,6,12,5],"nz":[0,1,1,0,-1]},{"size":2,"px":[6,11],"py":[4,18],"pz":[1,-1],"nx":[8,6],"ny":[4,9],"nz":[1,1]},{"size":2,"px":[2,8],"py":[5,23],"pz":[2,0],"nx":[9,4],"ny":[0,2],"nz":[1,-1]},{"size":5,"px":[3,1,2,2,2],"py":[12,6,12,11,11],"pz":[0,1,0,0,-1],"nx":[0,0,0,0,0],"ny":[13,12,11,14,7],"nz":[0,0,0,0,1]},{"size":2,"px":[3,6],"py":[1,2],"pz":[2,1],"nx":[8,4],"ny":[4,14],"nz":[1,-1]},{"size":5,"px":[11,23,23,22,22],"py":[8,12,6,13,14],"pz":[1,0,0,0,0],"nx":[13,8,7,6,6],"ny":[6,3,3,9,9],"nz":[0,1,1,0,-1]},{"size":4,"px":[9,23,23,22],"py":[7,12,6,13],"pz":[1,-1,-1,-1],"nx":[11,23,23,23],"ny":[6,13,17,10],"nz":[1,0,0,0]},{"size":5,"px":[0,0,0,0,0],"py":[19,5,9,16,10],"pz":[0,2,1,0,1],"nx":[5,2,1,2,2],"ny":[18,10,5,9,9],"nz":[0,1,2,1,-1]},{"size":2,"px":[11,5],"py":[10,4],"pz":[1,2],"nx":[23,14],"ny":[23,3],"nz":[0,-1]},{"size":2,"px":[2,4],"py":[3,6],"pz":[2,1],"nx":[3,1],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[8,10],"py":[4,8],"pz":[0,-1],"nx":[8,8],"ny":[2,3],"nz":[0,0]},{"size":3,"px":[7,10,11],"py":[1,6,13],"pz":[0,-1,-1],"nx":[4,4,2],"ny":[3,8,2],"nz":[1,1,2]},{"size":2,"px":[8,4],"py":[8,2],"pz":[1,2],"nx":[10,5],"ny":[10,0],"nz":[0,-1]},{"size":2,"px":[7,16],"py":[20,21],"pz":[0,-1],"nx":[2,4],"ny":[5,10],"nz":[2,1]},{"size":2,"px":[3,10],"py":[7,8],"pz":[1,-1],"nx":[7,4],"ny":[20,7],"nz":[0,1]},{"size":5,"px":[11,11,11,11,11],"py":[10,12,13,11,11],"pz":[0,0,0,0,-1],"nx":[11,12,16,3,8],"ny":[6,6,10,1,8],"nz":[0,0,0,2,0]},{"size":2,"px":[12,6],"py":[4,2],"pz":[0,1],"nx":[7,7],"ny":[8,1],"nz":[0,-1]},{"size":5,"px":[23,23,23,23,23],"py":[22,20,21,19,19],"pz":[0,0,0,0,-1],"nx":[4,6,3,4,3],"ny":[19,23,15,20,16],"nz":[0,0,0,0,0]},{"size":3,"px":[8,4,14],"py":[12,3,8],"pz":[0,-1,-1],"nx":[4,2,10],"ny":[10,3,13],"nz":[1,2,0]},{"size":2,"px":[11,18],"py":[13,23],"pz":[0,-1],"nx":[5,5],"ny":[1,2],"nz":[2,2]},{"size":3,"px":[11,2,10],"py":[17,4,17],"pz":[0,2,0],"nx":[11,0,22],"ny":[15,2,4],"nz":[0,-1,-1]},{"size":3,"px":[11,3,0],"py":[15,4,8],"pz":[0,-1,-1],"nx":[14,11,4],"ny":[9,17,7],"nz":[0,0,1]},{"size":2,"px":[17,16],"py":[2,1],"pz":[0,0],"nx":[9,11],"ny":[4,6],"nz":[1,-1]},{"size":2,"px":[3,4],"py":[21,23],"pz":[0,0],"nx":[4,0],"ny":[3,3],"nz":[1,-1]},{"size":2,"px":[18,2],"py":[20,0],"pz":[0,-1],"nx":[4,9],"ny":[5,10],"nz":[2,1]},{"size":2,"px":[9,1],"py":[19,3],"pz":[0,-1],"nx":[0,0],"ny":[9,21],"nz":[1,0]},{"size":2,"px":[19,19],"py":[21,22],"pz":[0,0],"nx":[19,0],"ny":[23,0],"nz":[0,-1]},{"size":4,"px":[11,2,3,2],"py":[6,6,9,4],"pz":[0,-1,-1,-1],"nx":[4,9,19,19],"ny":[5,10,17,18],"nz":[2,1,0,0]},{"size":2,"px":[2,4],"py":[4,8],"pz":[2,1],"nx":[4,9],"ny":[10,10],"nz":[1,-1]},{"size":2,"px":[23,22],"py":[8,12],"pz":[0,-1],"nx":[7,4],"ny":[11,2],"nz":[0,2]},{"size":2,"px":[12,1],"py":[5,2],"pz":[0,-1],"nx":[9,11],"ny":[2,1],"nz":[0,0]},{"size":2,"px":[4,4],"py":[2,2],"pz":[0,-1],"nx":[3,2],"ny":[1,2],"nz":[0,0]},{"size":2,"px":[17,9],"py":[13,7],"pz":[0,1],"nx":[9,5],"ny":[4,0],"nz":[1,-1]},{"size":4,"px":[0,0,9,13],"py":[3,3,7,3],"pz":[2,-1,-1,-1],"nx":[2,4,4,11],"ny":[1,2,8,5],"nz":[2,1,1,0]},{"size":5,"px":[3,6,5,6,6],"py":[0,0,2,1,1],"pz":[1,0,0,0,-1],"nx":[2,2,2,1,1],"ny":[21,19,20,16,17],"nz":[0,0,0,0,0]},{"size":2,"px":[13,3],"py":[22,10],"pz":[0,-1],"nx":[7,4],"ny":[10,5],"nz":[1,2]},{"size":2,"px":[3,2],"py":[7,3],"pz":[1,2],"nx":[8,4],"ny":[4,5],"nz":[1,-1]},{"size":5,"px":[17,8,15,7,15],"py":[13,6,16,5,12],"pz":[0,1,0,1,0],"nx":[5,4,6,3,4],"ny":[1,2,1,0,3],"nz":[0,0,0,1,-1]},{"size":5,"px":[12,9,11,12,10],"py":[0,1,2,2,0],"pz":[0,0,0,0,0],"nx":[8,16,7,4,4],"ny":[9,23,9,3,2],"nz":[1,0,1,2,-1]},{"size":2,"px":[4,11],"py":[1,4],"pz":[2,-1],"nx":[8,7],"ny":[4,4],"nz":[0,0]},{"size":4,"px":[7,4,5,8],"py":[13,2,1,3],"pz":[0,-1,-1,-1],"nx":[9,4,9,9],"ny":[9,5,10,11],"nz":[0,1,0,0]},{"size":2,"px":[10,11],"py":[10,11],"pz":[0,-1],"nx":[2,6],"ny":[2,2],"nz":[2,1]},{"size":2,"px":[21,3],"py":[11,2],"pz":[0,-1],"nx":[22,22],"ny":[20,18],"nz":[0,0]},{"size":2,"px":[7,6],"py":[1,2],"pz":[0,0],"nx":[5,10],"ny":[1,0],"nz":[0,-1]},{"size":2,"px":[21,3],"py":[18,1],"pz":[0,-1],"nx":[16,15],"ny":[4,4],"nz":[0,0]},{"size":2,"px":[12,7],"py":[4,1],"pz":[0,-1],"nx":[4,8],"ny":[2,4],"nz":[2,1]},{"size":2,"px":[13,11],"py":[23,17],"pz":[0,0],"nx":[11,21],"ny":[16,0],"nz":[0,-1]},{"size":2,"px":[1,2],"py":[0,6],"pz":[1,-1],"nx":[16,16],"ny":[9,11],"nz":[0,0]},{"size":2,"px":[12,13],"py":[20,20],"pz":[0,0],"nx":[11,3],"ny":[21,7],"nz":[0,-1]},{"size":3,"px":[19,20,9],"py":[21,18,11],"pz":[0,0,1],"nx":[17,4,11],"ny":[19,2,0],"nz":[0,-1,-1]},{"size":2,"px":[12,5],"py":[5,2],"pz":[0,1],"nx":[7,9],"ny":[7,8],"nz":[0,-1]},{"size":5,"px":[8,4,4,8,4],"py":[4,4,5,10,3],"pz":[1,1,2,0,2],"nx":[11,22,11,23,23],"ny":[0,0,1,3,3],"nz":[1,0,1,0,-1]},{"size":2,"px":[8,14],"py":[10,23],"pz":[1,0],"nx":[7,2],"ny":[10,9],"nz":[1,-1]},{"size":2,"px":[5,14],"py":[6,23],"pz":[1,-1],"nx":[1,2],"ny":[2,4],"nz":[2,1]},{"size":2,"px":[11,2],"py":[19,3],"pz":[0,-1],"nx":[10,12],"ny":[18,18],"nz":[0,0]},{"size":2,"px":[12,3],"py":[4,1],"pz":[0,2],"nx":[6,6],"ny":[11,11],"nz":[1,-1]},{"size":5,"px":[0,0,0,0,0],"py":[18,10,20,19,19],"pz":[0,1,0,0,-1],"nx":[11,10,14,12,13],"ny":[2,2,2,2,2],"nz":[0,0,0,0,0]},{"size":3,"px":[12,2,9],"py":[14,5,10],"pz":[0,-1,-1],"nx":[11,10,5],"ny":[10,13,5],"nz":[0,0,1]},{"size":2,"px":[2,3],"py":[3,7],"pz":[2,1],"nx":[3,10],"ny":[4,13],"nz":[1,-1]},{"size":2,"px":[9,3],"py":[21,7],"pz":[0,-1],"nx":[10,21],"ny":[7,15],"nz":[1,0]},{"size":2,"px":[21,10],"py":[16,8],"pz":[0,1],"nx":[8,2],"ny":[10,8],"nz":[1,-1]},{"size":2,"px":[8,8],"py":[6,7],"pz":[1,-1],"nx":[12,11],"ny":[11,7],"nz":[0,1]},{"size":2,"px":[3,11],"py":[4,20],"pz":[2,0],"nx":[11,10],"ny":[19,1],"nz":[0,-1]},{"size":2,"px":[17,5],"py":[13,3],"pz":[0,-1],"nx":[7,8],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[7,1],"py":[23,3],"pz":[0,2],"nx":[14,6],"ny":[12,9],"nz":[0,-1]},{"size":2,"px":[12,5],"py":[11,2],"pz":[0,-1],"nx":[11,7],"ny":[3,1],"nz":[0,1]},{"size":2,"px":[9,6],"py":[2,17],"pz":[0,-1],"nx":[4,6],"ny":[4,12],"nz":[1,0]},{"size":2,"px":[14,19],"py":[5,6],"pz":[0,-1],"nx":[9,3],"ny":[9,1],"nz":[0,2]},{"size":5,"px":[12,13,13,13,12],"py":[9,11,12,13,10],"pz":[0,0,0,0,0],"nx":[2,4,4,4,4],"ny":[7,18,17,14,14],"nz":[1,0,0,0,-1]},{"size":2,"px":[10,10],"py":[6,6],"pz":[1,-1],"nx":[20,18],"ny":[18,23],"nz":[0,0]},{"size":2,"px":[5,6],"py":[4,14],"pz":[1,-1],"nx":[9,4],"ny":[2,1],"nz":[1,2]},{"size":2,"px":[11,9],"py":[4,18],"pz":[0,-1],"nx":[4,8],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[15,0],"py":[18,4],"pz":[0,-1],"nx":[3,4],"ny":[5,4],"nz":[2,2]},{"size":4,"px":[7,3,6,6],"py":[8,4,6,5],"pz":[1,2,1,1],"nx":[10,4,13,0],"ny":[10,4,9,22],"nz":[0,-1,-1,-1]},{"size":2,"px":[10,8],"py":[18,11],"pz":[0,-1],"nx":[5,4],"ny":[8,10],"nz":[1,1]},{"size":4,"px":[17,2,10,2],"py":[14,1,10,3],"pz":[0,-1,-1,-1],"nx":[8,8,17,8],"ny":[4,5,12,6],"nz":[1,1,0,1]},{"size":5,"px":[9,11,9,4,10],"py":[1,1,0,0,1],"pz":[0,0,0,1,0],"nx":[8,4,7,15,15],"ny":[7,2,4,17,17],"nz":[1,2,1,0,-1]},{"size":2,"px":[4,3],"py":[11,8],"pz":[0,-1],"nx":[2,2],"ny":[1,2],"nz":[2,2]},{"size":2,"px":[11,3],"py":[13,8],"pz":[0,-1],"nx":[1,1],"ny":[5,2],"nz":[1,2]},{"size":2,"px":[6,2],"py":[8,3],"pz":[0,2],"nx":[3,1],"ny":[5,2],"nz":[1,-1]},{"size":5,"px":[10,5,7,8,6],"py":[9,7,7,7,7],"pz":[0,0,0,0,0],"nx":[7,3,0,2,15],"ny":[8,0,1,18,17],"nz":[0,-1,-1,-1,-1]},{"size":2,"px":[17,8],"py":[12,6],"pz":[0,1],"nx":[8,8],"ny":[4,4],"nz":[1,-1]},{"size":5,"px":[3,11,8,10,12],"py":[0,2,10,2,3],"pz":[2,0,0,0,0],"nx":[3,2,10,2,2],"ny":[6,4,11,3,3],"nz":[0,1,0,1,-1]},{"size":2,"px":[3,6],"py":[2,4],"pz":[2,1],"nx":[8,19],"ny":[4,16],"nz":[1,-1]},{"size":2,"px":[2,2],"py":[1,1],"pz":[2,-1],"nx":[7,17],"ny":[1,2],"nz":[1,0]},{"size":5,"px":[16,15,14,13,7],"py":[0,0,0,0,0],"pz":[0,0,0,0,-1],"nx":[6,4,8,3,11],"ny":[3,4,4,1,6],"nz":[1,1,1,2,0]},{"size":2,"px":[11,1],"py":[8,5],"pz":[0,-1],"nx":[13,4],"ny":[10,2],"nz":[0,2]},{"size":2,"px":[4,9],"py":[0,2],"pz":[2,1],"nx":[4,11],"ny":[0,2],"nz":[0,-1]},{"size":2,"px":[15,15],"py":[2,2],"pz":[0,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[8,17],"py":[9,22],"pz":[1,0],"nx":[8,20],"ny":[10,2],"nz":[1,-1]},{"size":2,"px":[10,10],"py":[14,22],"pz":[0,-1],"nx":[3,11],"ny":[3,3],"nz":[1,0]},{"size":2,"px":[4,2],"py":[1,0],"pz":[1,2],"nx":[5,8],"ny":[3,9],"nz":[0,-1]},{"size":2,"px":[2,3],"py":[4,8],"pz":[2,1],"nx":[9,5],"ny":[15,19],"nz":[0,-1]},{"size":2,"px":[5,2],"py":[1,1],"pz":[0,1],"nx":[10,10],"ny":[6,6],"nz":[0,-1]},{"size":2,"px":[17,6],"py":[10,2],"pz":[0,-1],"nx":[4,8],"ny":[2,4],"nz":[2,1]},{"size":3,"px":[13,7,3],"py":[5,2,6],"pz":[0,1,-1],"nx":[17,16,17],"ny":[1,1,2],"nz":[0,0,0]},{"size":2,"px":[11,10],"py":[3,3],"pz":[0,0],"nx":[8,4],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[4,8],"py":[0,8],"pz":[2,-1],"nx":[3,4],"ny":[0,0],"nz":[1,1]},{"size":5,"px":[9,2,4,1,2],"py":[13,3,9,2,5],"pz":[0,2,1,2,2],"nx":[9,5,10,4,10],"ny":[5,1,3,0,0],"nz":[1,-1,-1,-1,-1]},{"size":2,"px":[6,12],"py":[5,9],"pz":[1,0],"nx":[0,2],"ny":[23,9],"nz":[0,-1]},{"size":2,"px":[22,11],"py":[21,8],"pz":[0,1],"nx":[10,0],"ny":[17,2],"nz":[0,-1]},{"size":2,"px":[3,1],"py":[22,9],"pz":[0,1],"nx":[22,5],"ny":[11,2],"nz":[0,2]},{"size":2,"px":[4,2],"py":[6,3],"pz":[1,2],"nx":[5,6],"ny":[10,9],"nz":[1,-1]},{"size":4,"px":[7,3,17,7],"py":[8,2,10,11],"pz":[0,2,0,1],"nx":[6,10,5,23],"ny":[9,21,1,23],"nz":[0,-1,-1,-1]},{"size":2,"px":[8,3],"py":[7,2],"pz":[1,2],"nx":[8,9],"ny":[4,9],"nz":[1,-1]},{"size":2,"px":[9,5],"py":[14,6],"pz":[0,1],"nx":[8,8],"ny":[13,13],"nz":[0,-1]},{"size":3,"px":[11,6,8],"py":[20,3,20],"pz":[0,-1,-1],"nx":[5,3,12],"ny":[9,5,18],"nz":[1,2,0]},{"size":2,"px":[3,9],"py":[1,3],"pz":[1,0],"nx":[2,8],"ny":[5,8],"nz":[0,-1]},{"size":2,"px":[15,9],"py":[21,3],"pz":[0,-1],"nx":[3,4],"ny":[5,5],"nz":[2,2]},{"size":2,"px":[2,9],"py":[7,11],"pz":[1,-1],"nx":[2,2],"ny":[8,9],"nz":[1,1]},{"size":4,"px":[3,4,3,1],"py":[14,21,19,6],"pz":[0,0,0,1],"nx":[10,16,4,5],"ny":[8,1,7,6],"nz":[0,-1,-1,-1]},{"size":4,"px":[10,4,3,1],"py":[5,21,19,6],"pz":[1,-1,-1,-1],"nx":[21,10,5,11],"ny":[4,2,3,4],"nz":[0,1,2,1]},{"size":2,"px":[4,17],"py":[3,8],"pz":[2,0],"nx":[17,2],"ny":[9,22],"nz":[0,-1]},{"size":2,"px":[17,12],"py":[14,20],"pz":[0,-1],"nx":[7,8],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[10,12],"py":[9,20],"pz":[0,-1],"nx":[11,23],"ny":[8,18],"nz":[1,0]},{"size":2,"px":[5,11],"py":[4,7],"pz":[2,1],"nx":[8,15],"ny":[7,5],"nz":[1,-1]},{"size":2,"px":[11,15],"py":[13,8],"pz":[0,-1],"nx":[11,11],"ny":[6,7],"nz":[1,1]},{"size":2,"px":[6,15],"py":[14,8],"pz":[0,-1],"nx":[4,4],"ny":[12,13],"nz":[0,0]},{"size":2,"px":[5,5],"py":[0,1],"pz":[2,2],"nx":[15,4],"ny":[5,5],"nz":[0,-1]},{"size":2,"px":[16,17],"py":[2,2],"pz":[0,0],"nx":[20,8],"ny":[3,7],"nz":[0,-1]},{"size":3,"px":[6,3,2],"py":[10,6,1],"pz":[0,-1,-1],"nx":[4,3,2],"ny":[3,4,2],"nz":[1,1,2]},{"size":2,"px":[10,6],"py":[4,6],"pz":[0,-1],"nx":[6,13],"ny":[0,1],"nz":[1,0]},{"size":2,"px":[10,10],"py":[8,7],"pz":[1,1],"nx":[8,2],"ny":[7,2],"nz":[1,-1]},{"size":2,"px":[7,1],"py":[12,4],"pz":[0,-1],"nx":[3,4],"ny":[5,5],"nz":[1,1]},{"size":2,"px":[11,15],"py":[15,14],"pz":[0,-1],"nx":[3,11],"ny":[4,13],"nz":[1,0]},{"size":5,"px":[13,9,11,14,12],"py":[0,2,0,0,2],"pz":[0,0,0,0,0],"nx":[5,4,4,3,4],"ny":[4,4,18,7,17],"nz":[1,1,0,1,0]},{"size":3,"px":[13,12,11],"py":[22,22,22],"pz":[0,0,0],"nx":[11,12,13],"ny":[20,20,20],"nz":[0,0,0]},{"size":2,"px":[6,13],"py":[2,4],"pz":[1,0],"nx":[7,6],"ny":[8,9],"nz":[0,-1]},{"size":2,"px":[0,0],"py":[23,4],"pz":[0,-1],"nx":[5,9],"ny":[1,1],"nz":[1,0]},{"size":2,"px":[14,14],"py":[19,19],"pz":[0,-1],"nx":[11,11],"ny":[10,9],"nz":[1,1]},{"size":2,"px":[23,23],"py":[11,9],"pz":[0,0],"nx":[23,23],"ny":[0,11],"nz":[0,-1]},{"size":2,"px":[23,3],"py":[23,5],"pz":[0,-1],"nx":[4,1],"ny":[23,10],"nz":[0,1]},{"size":2,"px":[9,1],"py":[7,4],"pz":[1,-1],"nx":[19,10],"ny":[20,9],"nz":[0,1]},{"size":2,"px":[16,1],"py":[9,4],"pz":[0,-1],"nx":[7,8],"ny":[3,3],"nz":[1,1]},{"size":2,"px":[7,6],"py":[13,13],"pz":[0,0],"nx":[4,5],"ny":[4,11],"nz":[1,-1]},{"size":5,"px":[19,20,20,10,10],"py":[0,0,2,0,1],"pz":[0,0,0,1,1],"nx":[7,7,15,4,4],"ny":[4,13,7,4,4],"nz":[1,0,0,1,-1]},{"size":2,"px":[12,23],"py":[6,5],"pz":[0,-1],"nx":[18,18],"ny":[17,16],"nz":[0,0]},{"size":2,"px":[6,3],"py":[9,2],"pz":[1,2],"nx":[14,18],"ny":[9,1],"nz":[0,-1]},{"size":2,"px":[9,13],"py":[16,5],"pz":[0,-1],"nx":[5,4],"ny":[7,9],"nz":[1,1]},{"size":2,"px":[10,10],"py":[8,10],"pz":[1,1],"nx":[4,1],"ny":[5,3],"nz":[2,-1]},{"size":2,"px":[12,11],"py":[13,4],"pz":[0,-1],"nx":[0,0],"ny":[14,15],"nz":[0,0]},{"size":2,"px":[2,1],"py":[20,17],"pz":[0,0],"nx":[12,12],"ny":[22,2],"nz":[0,-1]},{"size":2,"px":[2,3],"py":[6,7],"pz":[1,-1],"nx":[21,21],"ny":[13,12],"nz":[0,0]},{"size":2,"px":[3,10],"py":[4,23],"pz":[2,0],"nx":[10,2],"ny":[21,5],"nz":[0,-1]},{"size":2,"px":[6,12],"py":[3,6],"pz":[1,0],"nx":[11,0],"ny":[17,1],"nz":[0,-1]},{"size":2,"px":[11,4],"py":[21,9],"pz":[0,-1],"nx":[2,3],"ny":[18,22],"nz":[0,0]},{"size":2,"px":[13,5],"py":[18,9],"pz":[0,-1],"nx":[6,7],"ny":[8,9],"nz":[1,1]},{"size":2,"px":[21,4],"py":[16,3],"pz":[0,-1],"nx":[23,23],"ny":[16,15],"nz":[0,0]},{"size":2,"px":[2,0],"py":[7,4],"pz":[1,-1],"nx":[3,8],"ny":[7,4],"nz":[1,1]},{"size":2,"px":[15,16],"py":[11,12],"pz":[0,0],"nx":[8,5],"ny":[4,5],"nz":[1,-1]},{"size":2,"px":[0,0],"py":[7,5],"pz":[0,0],"nx":[17,17],"ny":[11,10],"nz":[0,-1]},{"size":5,"px":[8,13,12,3,3],"py":[6,23,23,3,3],"pz":[1,0,0,2,-1],"nx":[0,1,0,0,0],"ny":[2,13,4,5,6],"nz":[2,0,1,1,1]},{"size":2,"px":[0,1],"py":[7,8],"pz":[1,-1],"nx":[0,0],"ny":[1,0],"nz":[2,2]},{"size":2,"px":[2,12],"py":[1,7],"pz":[1,-1],"nx":[0,0],"ny":[12,14],"nz":[0,0]},{"size":2,"px":[5,1],"py":[7,4],"pz":[1,2],"nx":[8,0],"ny":[15,14],"nz":[0,-1]},{"size":2,"px":[7,4],"py":[14,8],"pz":[0,-1],"nx":[2,4],"ny":[1,4],"nz":[2,1]},{"size":2,"px":[5,3],"py":[3,1],"pz":[2,-1],"nx":[9,9],"ny":[5,6],"nz":[1,1]},{"size":2,"px":[4,5],"py":[2,3],"pz":[1,-1],"nx":[11,12],"ny":[23,23],"nz":[0,0]},{"size":2,"px":[10,5],"py":[7,0],"pz":[1,-1],"nx":[22,22],"ny":[19,18],"nz":[0,0]},{"size":3,"px":[10,2,9],"py":[20,9,4],"pz":[0,-1,-1],"nx":[1,10,11],"ny":[2,11,9],"nz":[2,0,0]},{"size":2,"px":[4,8],"py":[3,6],"pz":[2,1],"nx":[9,3],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[17,6],"py":[7,16],"pz":[0,-1],"nx":[17,17],"ny":[9,6],"nz":[0,0]},{"size":3,"px":[8,1,9],"py":[6,3,4],"pz":[1,-1,-1],"nx":[2,9,2],"ny":[5,13,3],"nz":[2,0,2]},{"size":4,"px":[10,10,9,2],"py":[12,11,2,10],"pz":[0,0,-1,-1],"nx":[6,11,3,13],"ny":[2,4,1,4],"nz":[1,0,2,0]},{"size":2,"px":[3,3],"py":[7,1],"pz":[1,-1],"nx":[4,3],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[0,0],"py":[4,8],"pz":[2,1],"nx":[4,4],"ny":[15,5],"nz":[0,-1]},{"size":2,"px":[5,0],"py":[4,8],"pz":[1,-1],"nx":[13,13],"ny":[9,10],"nz":[0,0]},{"size":2,"px":[6,3],"py":[2,1],"pz":[1,2],"nx":[8,17],"ny":[4,12],"nz":[1,-1]},{"size":2,"px":[15,16],"py":[11,6],"pz":[0,0],"nx":[16,17],"ny":[5,12],"nz":[0,-1]},{"size":2,"px":[13,11],"py":[9,7],"pz":[0,-1],"nx":[0,1],"ny":[9,20],"nz":[1,0]},{"size":3,"px":[16,11,20],"py":[4,7,23],"pz":[0,-1,-1],"nx":[8,9,4],"ny":[4,6,4],"nz":[1,1,2]},{"size":2,"px":[1,1],"py":[18,17],"pz":[0,0],"nx":[9,6],"ny":[7,11],"nz":[0,-1]},{"size":3,"px":[4,4,19],"py":[3,2,9],"pz":[2,2,0],"nx":[2,14,11],"ny":[5,3,9],"nz":[1,-1,-1]},{"size":2,"px":[11,19],"py":[13,9],"pz":[0,-1],"nx":[11,11],"ny":[4,5],"nz":[1,1]},{"size":2,"px":[13,7],"py":[19,2],"pz":[0,-1],"nx":[3,5],"ny":[6,12],"nz":[1,0]},{"size":4,"px":[9,4,4,2],"py":[13,9,8,4],"pz":[0,1,1,2],"nx":[13,0,0,14],"ny":[18,11,6,1],"nz":[0,-1,-1,-1]},{"size":2,"px":[11,15],"py":[8,10],"pz":[0,0],"nx":[14,11],"ny":[9,2],"nz":[0,-1]},{"size":2,"px":[3,2],"py":[8,5],"pz":[1,2],"nx":[4,4],"ny":[10,10],"nz":[1,-1]},{"size":4,"px":[4,6,16,14],"py":[1,1,1,7],"pz":[2,1,0,0],"nx":[10,1,1,2],"ny":[8,5,10,3],"nz":[0,-1,-1,-1]},{"size":4,"px":[2,3,1,2],"py":[3,1,0,2],"pz":[0,0,1,0],"nx":[0,0,0,0],"ny":[1,1,2,0],"nz":[0,1,0,1]},{"size":2,"px":[8,8],"py":[6,7],"pz":[1,1],"nx":[8,0],"ny":[4,1],"nz":[1,-1]},{"size":2,"px":[0,0],"py":[3,0],"pz":[0,1],"nx":[2,2],"ny":[1,16],"nz":[1,-1]},{"size":2,"px":[6,6],"py":[19,18],"pz":[0,0],"nx":[2,10],"ny":[5,8],"nz":[2,-1]},{"size":2,"px":[8,5],"py":[21,11],"pz":[0,-1],"nx":[3,2],"ny":[11,5],"nz":[1,2]},{"size":2,"px":[4,9],"py":[4,7],"pz":[2,1],"nx":[8,7],"ny":[10,4],"nz":[1,-1]},{"size":5,"px":[4,18,19,16,19],"py":[3,12,12,23,13],"pz":[2,0,0,0,0],"nx":[2,8,3,2,2],"ny":[4,23,10,5,5],"nz":[2,0,1,2,-1]},{"size":2,"px":[4,8],"py":[6,11],"pz":[1,0],"nx":[8,3],"ny":[4,7],"nz":[1,-1]},{"size":2,"px":[3,12],"py":[4,13],"pz":[2,0],"nx":[10,5],"ny":[15,21],"nz":[0,-1]},{"size":2,"px":[2,9],"py":[4,23],"pz":[2,0],"nx":[19,4],"ny":[9,3],"nz":[0,2]},{"size":2,"px":[3,6],"py":[8,15],"pz":[1,0],"nx":[6,1],"ny":[18,5],"nz":[0,-1]},{"size":2,"px":[9,0],"py":[20,3],"pz":[0,-1],"nx":[2,10],"ny":[5,17],"nz":[2,0]},{"size":3,"px":[10,6,3],"py":[2,7,3],"pz":[0,-1,-1],"nx":[5,4,2],"ny":[9,7,2],"nz":[1,1,2]},{"size":2,"px":[14,6],"py":[12,7],"pz":[0,-1],"nx":[2,10],"ny":[0,1],"nz":[2,0]},{"size":3,"px":[10,5,1],"py":[15,5,4],"pz":[0,-1,-1],"nx":[9,4,18],"ny":[2,0,4],"nz":[1,2,0]},{"size":2,"px":[17,2],"py":[12,6],"pz":[0,-1],"nx":[8,16],"ny":[4,11],"nz":[1,0]},{"size":3,"px":[7,13,4],"py":[0,0,1],"pz":[1,0,-1],"nx":[18,4,4],"ny":[13,2,3],"nz":[0,2,2]},{"size":2,"px":[1,11],"py":[10,6],"pz":[0,-1],"nx":[0,1],"ny":[15,17],"nz":[0,0]},{"size":3,"px":[9,12,8],"py":[8,17,11],"pz":[1,0,1],"nx":[12,0,20],"ny":[16,9,13],"nz":[0,-1,-1]},{"size":2,"px":[11,4],"py":[5,8],"pz":[0,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[16,3],"py":[9,8],"pz":[0,-1],"nx":[4,8],"ny":[2,4],"nz":[2,1]},{"size":2,"px":[6,3],"py":[11,5],"pz":[1,2],"nx":[11,5],"ny":[21,5],"nz":[0,-1]},{"size":2,"px":[11,13],"py":[1,1],"pz":[0,0],"nx":[4,4],"ny":[5,5],"nz":[1,-1]},{"size":2,"px":[14,4],"py":[4,3],"pz":[0,-1],"nx":[12,10],"ny":[2,2],"nz":[0,0]},{"size":2,"px":[3,6],"py":[2,4],"pz":[2,1],"nx":[9,7],"ny":[9,7],"nz":[0,-1]},{"size":3,"px":[5,6,6],"py":[4,4,4],"pz":[1,-1,-1],"nx":[13,8,7],"ny":[8,3,4],"nz":[0,1,1]},{"size":2,"px":[5,5],"py":[2,11],"pz":[1,1],"nx":[10,11],"ny":[22,22],"nz":[0,0]},{"size":2,"px":[16,9],"py":[13,7],"pz":[0,1],"nx":[8,14],"ny":[4,12],"nz":[1,-1]},{"size":2,"px":[13,5],"py":[13,3],"pz":[0,2],"nx":[16,22],"ny":[13,6],"nz":[0,-1]},{"size":4,"px":[4,4,3,4],"py":[4,3,4,5],"pz":[2,2,2,2],"nx":[21,5,17,7],"ny":[0,2,5,23],"nz":[0,-1,-1,-1]},{"size":2,"px":[4,16],"py":[0,1],"pz":[2,0],"nx":[15,1],"ny":[23,10],"nz":[0,-1]},{"size":2,"px":[4,6],"py":[11,2],"pz":[0,-1],"nx":[15,6],"ny":[2,1],"nz":[0,1]},{"size":2,"px":[6,3],"py":[2,1],"pz":[1,2],"nx":[8,8],"ny":[4,4],"nz":[1,-1]},{"size":3,"px":[13,14,5],"py":[9,15,2],"pz":[0,-1,-1],"nx":[11,1,11],"ny":[10,3,11],"nz":[0,1,0]},{"size":2,"px":[5,1],"py":[6,2],"pz":[1,-1],"nx":[1,1],"ny":[2,5],"nz":[2,1]},{"size":2,"px":[11,5],"py":[1,0],"pz":[1,2],"nx":[10,4],"ny":[2,3],"nz":[1,-1]},{"size":2,"px":[11,11],"py":[8,9],"pz":[1,1],"nx":[23,4],"ny":[23,2],"nz":[0,-1]},{"size":2,"px":[5,2],"py":[10,2],"pz":[0,-1],"nx":[18,10],"ny":[0,1],"nz":[0,1]},{"size":2,"px":[20,4],"py":[7,3],"pz":[0,2],"nx":[8,4],"ny":[4,0],"nz":[1,-1]},{"size":2,"px":[10,4],"py":[5,4],"pz":[1,-1],"nx":[11,11],"ny":[5,6],"nz":[1,1]},{"size":3,"px":[14,15,16],"py":[0,0,1],"pz":[0,0,0],"nx":[8,5,15],"ny":[7,2,10],"nz":[1,-1,-1]},{"size":2,"px":[2,2],"py":[1,1],"pz":[2,-1],"nx":[17,18],"ny":[2,2],"nz":[0,0]},{"size":2,"px":[13,8],"py":[15,7],"pz":[0,-1],"nx":[9,4],"ny":[5,2],"nz":[0,1]},{"size":2,"px":[4,0],"py":[6,17],"pz":[1,-1],"nx":[3,2],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[14,8],"py":[17,9],"pz":[0,-1],"nx":[7,6],"ny":[8,8],"nz":[1,1]},{"size":2,"px":[10,4],"py":[7,1],"pz":[1,-1],"nx":[15,6],"ny":[14,4],"nz":[0,1]},{"size":2,"px":[3,12],"py":[8,19],"pz":[1,0],"nx":[13,10],"ny":[17,9],"nz":[0,-1]},{"size":2,"px":[7,12],"py":[2,4],"pz":[1,0],"nx":[6,11],"ny":[3,2],"nz":[0,-1]},{"size":4,"px":[2,1,6,1],"py":[10,3,23,8],"pz":[1,2,0,1],"nx":[17,10,23,0],"ny":[9,2,20,3],"nz":[0,-1,-1,-1]},{"size":2,"px":[9,9],"py":[2,8],"pz":[0,-1],"nx":[2,2],"ny":[4,2],"nz":[2,2]},{"size":2,"px":[3,16],"py":[1,6],"pz":[2,0],"nx":[8,4],"ny":[2,5],"nz":[1,-1]},{"size":2,"px":[3,6],"py":[1,2],"pz":[2,1],"nx":[8,8],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[5,6],"py":[3,0],"pz":[2,-1],"nx":[9,5],"ny":[2,1],"nz":[0,1]},{"size":2,"px":[3,16],"py":[5,23],"pz":[1,-1],"nx":[0,0],"ny":[6,3],"nz":[1,2]},{"size":4,"px":[0,0,0,0],"py":[3,2,12,5],"pz":[2,2,0,1],"nx":[2,3,2,13],"ny":[5,5,2,19],"nz":[1,-1,-1,-1]},{"size":2,"px":[11,11],"py":[10,11],"pz":[0,0],"nx":[5,5],"ny":[1,1],"nz":[2,-1]},{"size":2,"px":[5,2],"py":[0,4],"pz":[2,-1],"nx":[2,2],"ny":[10,8],"nz":[1,1]},{"size":4,"px":[16,2,8,4],"py":[14,0,11,5],"pz":[0,-1,-1,-1],"nx":[18,14,7,7],"ny":[13,14,8,6],"nz":[0,0,1,1]},{"size":2,"px":[8,9],"py":[2,2],"pz":[0,0],"nx":[5,14],"ny":[4,14],"nz":[1,-1]},{"size":2,"px":[3,5],"py":[11,20],"pz":[1,0],"nx":[11,4],"ny":[0,2],"nz":[0,-1]},{"size":2,"px":[2,2],"py":[3,4],"pz":[2,2],"nx":[3,4],"ny":[4,2],"nz":[1,-1]},{"size":3,"px":[10,4,3],"py":[5,5,3],"pz":[0,-1,-1],"nx":[11,3,10],"ny":[2,0,2],"nz":[0,2,0]},{"size":2,"px":[15,15],"py":[1,1],"pz":[0,-1],"nx":[7,4],"ny":[5,2],"nz":[1,2]},{"size":4,"px":[9,5,2,6],"py":[22,8,4,19],"pz":[0,1,2,0],"nx":[9,5,0,3],"ny":[20,5,22,4],"nz":[0,-1,-1,-1]},{"size":3,"px":[1,4,10],"py":[3,9,12],"pz":[2,1,0],"nx":[0,10,0],"ny":[0,5,0],"nz":[0,-1,-1]},{"size":2,"px":[1,6],"py":[0,7],"pz":[0,-1],"nx":[20,19],"ny":[14,14],"nz":[0,0]},{"size":2,"px":[13,4],"py":[14,15],"pz":[0,-1],"nx":[2,1],"ny":[5,7],"nz":[0,0]},{"size":2,"px":[17,7],"py":[9,11],"pz":[0,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[17,9],"py":[12,6],"pz":[0,1],"nx":[15,10],"ny":[9,8],"nz":[0,-1]},{"size":2,"px":[0,0],"py":[0,1],"pz":[2,2],"nx":[9,7],"ny":[6,17],"nz":[1,-1]},{"size":3,"px":[3,3,15],"py":[3,4,6],"pz":[2,1,0],"nx":[0,2,22],"ny":[5,8,9],"nz":[0,-1,-1]},{"size":4,"px":[15,15,15,1],"py":[12,6,6,1],"pz":[0,-1,-1,-1],"nx":[4,7,13,4],"ny":[4,7,12,2],"nz":[2,1,0,2]},{"size":2,"px":[3,15],"py":[12,6],"pz":[0,-1],"nx":[9,1],"ny":[14,2],"nz":[0,2]},{"size":2,"px":[12,12],"py":[11,12],"pz":[0,0],"nx":[9,5],"ny":[4,4],"nz":[1,-1]},{"size":3,"px":[23,6,7],"py":[23,3,4],"pz":[0,-1,-1],"nx":[19,16,17],"ny":[17,14,15],"nz":[0,0,0]},{"size":2,"px":[9,5],"py":[2,7],"pz":[1,-1],"nx":[11,23],"ny":[10,18],"nz":[1,0]},{"size":3,"px":[0,0,0],"py":[4,9,2],"pz":[1,0,2],"nx":[2,0,0],"ny":[9,2,1],"nz":[0,-1,-1]},{"size":2,"px":[12,0],"py":[11,9],"pz":[0,-1],"nx":[1,0],"ny":[18,5],"nz":[0,2]},{"size":2,"px":[5,4],"py":[10,6],"pz":[0,1],"nx":[10,6],"ny":[10,18],"nz":[0,-1]},{"size":2,"px":[13,12],"py":[13,13],"pz":[0,-1],"nx":[5,11],"ny":[1,3],"nz":[2,1]},{"size":2,"px":[10,19],"py":[5,22],"pz":[1,-1],"nx":[4,12],"ny":[1,5],"nz":[2,0]},{"size":2,"px":[8,6],"py":[0,0],"pz":[0,0],"nx":[3,12],"ny":[0,3],"nz":[0,-1]},{"size":2,"px":[9,6],"py":[7,0],"pz":[1,-1],"nx":[12,12],"ny":[10,11],"nz":[0,0]},{"size":4,"px":[3,1,3,2],"py":[20,9,21,19],"pz":[0,1,0,0],"nx":[20,20,5,12],"ny":[10,15,2,10],"nz":[0,-1,-1,-1]},{"size":2,"px":[2,4],"py":[3,6],"pz":[2,1],"nx":[3,1],"ny":[4,6],"nz":[1,-1]},{"size":3,"px":[5,11,11],"py":[1,3,4],"pz":[2,1,1],"nx":[3,3,7],"ny":[5,5,0],"nz":[1,-1,-1]},{"size":3,"px":[8,6,7],"py":[10,5,6],"pz":[1,1,1],"nx":[23,3,7],"ny":[0,5,0],"nz":[0,-1,-1]},{"size":2,"px":[2,7],"py":[2,14],"pz":[1,-1],"nx":[7,3],"ny":[12,4],"nz":[0,1]},{"size":2,"px":[5,3],"py":[6,3],"pz":[1,2],"nx":[13,3],"ny":[12,4],"nz":[0,-1]},{"size":2,"px":[11,18],"py":[11,4],"pz":[0,-1],"nx":[23,11],"ny":[19,10],"nz":[0,1]},{"size":2,"px":[7,2],"py":[12,3],"pz":[0,-1],"nx":[8,4],"ny":[11,5],"nz":[0,1]},{"size":2,"px":[11,11],"py":[0,11],"pz":[1,-1],"nx":[3,3],"ny":[19,18],"nz":[0,0]},{"size":2,"px":[11,1],"py":[11,11],"pz":[1,-1],"nx":[13,15],"ny":[6,5],"nz":[0,0]},{"size":2,"px":[8,8],"py":[9,9],"pz":[0,-1],"nx":[5,11],"ny":[1,3],"nz":[2,1]},{"size":4,"px":[6,4,8,3],"py":[6,2,4,3],"pz":[0,2,1,2],"nx":[7,0,15,8],"ny":[8,8,16,7],"nz":[0,-1,-1,-1]},{"size":2,"px":[4,3],"py":[22,20],"pz":[0,0],"nx":[2,8],"ny":[5,4],"nz":[2,-1]},{"size":2,"px":[12,6],"py":[11,0],"pz":[0,-1],"nx":[0,0],"ny":[3,1],"nz":[1,2]},{"size":2,"px":[0,0],"py":[12,7],"pz":[0,1],"nx":[3,1],"ny":[23,9],"nz":[0,-1]},{"size":2,"px":[7,0],"py":[11,5],"pz":[1,-1],"nx":[0,0],"ny":[2,3],"nz":[2,2]},{"size":2,"px":[8,8],"py":[10,10],"pz":[0,-1],"nx":[4,3],"ny":[5,4],"nz":[2,2]},{"size":2,"px":[13,3],"py":[2,4],"pz":[0,-1],"nx":[4,3],"ny":[3,5],"nz":[2,2]},{"size":2,"px":[1,1],"py":[23,22],"pz":[0,0],"nx":[9,0],"ny":[7,3],"nz":[0,-1]},{"size":2,"px":[1,0],"py":[16,15],"pz":[0,0],"nx":[0,14],"ny":[23,12],"nz":[0,-1]},{"size":2,"px":[13,8],"py":[22,0],"pz":[0,-1],"nx":[5,3],"ny":[0,1],"nz":[1,1]},{"size":2,"px":[13,13],"py":[7,7],"pz":[0,-1],"nx":[3,2],"ny":[17,10],"nz":[0,1]},{"size":2,"px":[20,20],"py":[15,16],"pz":[0,0],"nx":[7,3],"ny":[9,17],"nz":[1,-1]},{"size":5,"px":[10,12,11,13,11],"py":[2,2,1,2,2],"pz":[0,0,0,0,0],"nx":[10,18,21,21,19],"ny":[3,1,13,11,2],"nz":[1,0,0,0,0]},{"size":2,"px":[16,3],"py":[6,1],"pz":[0,2],"nx":[15,18],"ny":[8,1],"nz":[0,-1]},{"size":2,"px":[19,3],"py":[8,1],"pz":[0,-1],"nx":[9,8],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[10,3],"py":[15,18],"pz":[0,-1],"nx":[3,3],"ny":[0,1],"nz":[2,2]},{"size":2,"px":[3,3],"py":[2,3],"pz":[2,2],"nx":[7,3],"ny":[11,1],"nz":[1,-1]},{"size":2,"px":[11,10],"py":[17,9],"pz":[0,-1],"nx":[11,10],"ny":[15,15],"nz":[0,0]},{"size":2,"px":[5,10],"py":[2,4],"pz":[1,0],"nx":[8,8],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[9,10],"py":[3,4],"pz":[0,-1],"nx":[9,10],"ny":[2,1],"nz":[0,0]},{"size":2,"px":[23,11],"py":[13,10],"pz":[0,1],"nx":[14,7],"ny":[5,14],"nz":[0,-1]},{"size":2,"px":[4,4],"py":[5,4],"pz":[2,2],"nx":[9,8],"ny":[3,3],"nz":[1,-1]},{"size":3,"px":[12,4,15],"py":[5,4,7],"pz":[0,-1,-1],"nx":[3,4,2],"ny":[7,11,5],"nz":[1,1,2]},{"size":2,"px":[11,4],"py":[15,4],"pz":[0,-1],"nx":[5,9],"ny":[7,15],"nz":[1,0]},{"size":2,"px":[9,7],"py":[0,1],"pz":[1,-1],"nx":[11,11],"ny":[8,7],"nz":[1,1]},{"size":5,"px":[1,1,1,1,1],"py":[11,12,10,9,9],"pz":[0,0,0,0,-1],"nx":[4,5,8,16,11],"ny":[4,3,8,8,6],"nz":[1,1,0,0,0]}],"alpha":[-1.059083e+00,1.059083e+00,-7.846122e-01,7.846122e-01,-4.451160e-01,4.451160e-01,-4.483277e-01,4.483277e-01,-3.905999e-01,3.905999e-01,-3.789250e-01,3.789250e-01,-3.874610e-01,3.874610e-01,-3.110541e-01,3.110541e-01,-3.565056e-01,3.565056e-01,-3.812617e-01,3.812617e-01,-3.325142e-01,3.325142e-01,-2.787282e-01,2.787282e-01,-3.238869e-01,3.238869e-01,-2.993499e-01,2.993499e-01,-2.807737e-01,2.807737e-01,-2.855285e-01,2.855285e-01,-2.277550e-01,2.277550e-01,-2.031261e-01,2.031261e-01,-2.071574e-01,2.071574e-01,-2.534142e-01,2.534142e-01,-2.266871e-01,2.266871e-01,-2.229078e-01,2.229078e-01,-2.716325e-01,2.716325e-01,-3.046938e-01,3.046938e-01,-2.271601e-01,2.271601e-01,-1.987651e-01,1.987651e-01,-1.953664e-01,1.953664e-01,-2.178737e-01,2.178737e-01,-2.285148e-01,2.285148e-01,-1.891073e-01,1.891073e-01,-2.926469e-01,2.926469e-01,-2.094783e-01,2.094783e-01,-1.478037e-01,1.478037e-01,-1.707579e-01,1.707579e-01,-1.464390e-01,1.464390e-01,-2.462321e-01,2.462321e-01,-2.319978e-01,2.319978e-01,-1.781651e-01,1.781651e-01,-1.471349e-01,1.471349e-01,-1.953006e-01,1.953006e-01,-2.145108e-01,2.145108e-01,-1.567881e-01,1.567881e-01,-2.024617e-01,2.024617e-01,-1.883198e-01,1.883198e-01,-1.996976e-01,1.996976e-01,-1.292330e-01,1.292330e-01,-2.142242e-01,2.142242e-01,-2.473748e-01,2.473748e-01,-1.880902e-01,1.880902e-01,-1.874572e-01,1.874572e-01,-1.495984e-01,1.495984e-01,-1.608525e-01,1.608525e-01,-1.698402e-01,1.698402e-01,-1.898871e-01,1.898871e-01,-1.350238e-01,1.350238e-01,-1.727032e-01,1.727032e-01,-1.593352e-01,1.593352e-01,-1.476968e-01,1.476968e-01,-1.428431e-01,1.428431e-01,-1.766261e-01,1.766261e-01,-1.453226e-01,1.453226e-01,-1.929885e-01,1.929885e-01,-1.337582e-01,1.337582e-01,-1.629078e-01,1.629078e-01,-9.973085e-02,9.973085e-02,-1.172760e-01,1.172760e-01,-1.399242e-01,1.399242e-01,-1.613189e-01,1.613189e-01,-1.145695e-01,1.145695e-01,-1.191093e-01,1.191093e-01,-1.225900e-01,1.225900e-01,-1.641114e-01,1.641114e-01,-1.419878e-01,1.419878e-01,-2.183465e-01,2.183465e-01,-1.566968e-01,1.566968e-01,-1.288216e-01,1.288216e-01,-1.422831e-01,1.422831e-01,-2.000107e-01,2.000107e-01,-1.817265e-01,1.817265e-01,-1.793796e-01,1.793796e-01,-1.428926e-01,1.428926e-01,-1.182032e-01,1.182032e-01,-1.150421e-01,1.150421e-01,-1.336584e-01,1.336584e-01,-1.656178e-01,1.656178e-01,-1.386549e-01,1.386549e-01,-1.387461e-01,1.387461e-01,-1.313023e-01,1.313023e-01,-1.360391e-01,1.360391e-01,-1.305505e-01,1.305505e-01,-1.323399e-01,1.323399e-01,-1.502891e-01,1.502891e-01,-1.488859e-01,1.488859e-01,-1.126628e-01,1.126628e-01,-1.233623e-01,1.233623e-01,-1.702106e-01,1.702106e-01,-1.629639e-01,1.629639e-01,-1.337706e-01,1.337706e-01,-1.290384e-01,1.290384e-01,-1.165519e-01,1.165519e-01,-1.412778e-01,1.412778e-01,-1.470204e-01,1.470204e-01,-2.213780e-01,2.213780e-01,-1.472619e-01,1.472619e-01,-1.357071e-01,1.357071e-01,-1.416513e-01,1.416513e-01,-1.050208e-01,1.050208e-01,-1.480033e-01,1.480033e-01,-1.899871e-01,1.899871e-01,-1.466249e-01,1.466249e-01,-1.076952e-01,1.076952e-01,-1.035096e-01,1.035096e-01,-1.566970e-01,1.566970e-01,-1.364115e-01,1.364115e-01,-1.512889e-01,1.512889e-01,-1.252851e-01,1.252851e-01,-1.206300e-01,1.206300e-01,-1.059134e-01,1.059134e-01,-1.140398e-01,1.140398e-01,-1.359912e-01,1.359912e-01,-1.231201e-01,1.231201e-01,-1.231867e-01,1.231867e-01,-9.789923e-02,9.789923e-02,-1.590213e-01,1.590213e-01,-1.002206e-01,1.002206e-01,-1.518339e-01,1.518339e-01,-1.055203e-01,1.055203e-01,-1.012579e-01,1.012579e-01,-1.094956e-01,1.094956e-01,-1.429592e-01,1.429592e-01,-1.108838e-01,1.108838e-01,-1.116475e-01,1.116475e-01,-1.735371e-01,1.735371e-01,-1.067758e-01,1.067758e-01,-1.290406e-01,1.290406e-01,-1.156822e-01,1.156822e-01,-9.668217e-02,9.668217e-02,-1.170053e-01,1.170053e-01,-1.252092e-01,1.252092e-01,-1.135158e-01,1.135158e-01,-1.105896e-01,1.105896e-01,-1.038175e-01,1.038175e-01,-1.210459e-01,1.210459e-01,-1.078878e-01,1.078878e-01,-1.050808e-01,1.050808e-01,-1.428227e-01,1.428227e-01,-1.664600e-01,1.664600e-01,-1.013508e-01,1.013508e-01,-1.206930e-01,1.206930e-01,-1.088972e-01,1.088972e-01,-1.381026e-01,1.381026e-01,-1.109115e-01,1.109115e-01,-7.921549e-02,7.921549e-02,-1.057832e-01,1.057832e-01,-9.385827e-02,9.385827e-02,-1.486035e-01,1.486035e-01,-1.247401e-01,1.247401e-01,-9.451327e-02,9.451327e-02,-1.272805e-01,1.272805e-01,-9.616206e-02,9.616206e-02,-9.051084e-02,9.051084e-02,-1.138458e-01,1.138458e-01,-1.047581e-01,1.047581e-01,-1.382394e-01,1.382394e-01,-1.122203e-01,1.122203e-01,-1.052936e-01,1.052936e-01,-1.239318e-01,1.239318e-01,-1.241439e-01,1.241439e-01,-1.259012e-01,1.259012e-01,-1.211701e-01,1.211701e-01,-1.344131e-01,1.344131e-01,-1.127778e-01,1.127778e-01,-1.609745e-01,1.609745e-01,-1.901382e-01,1.901382e-01,-1.618962e-01,1.618962e-01,-1.230398e-01,1.230398e-01,-1.319311e-01,1.319311e-01,-1.431410e-01,1.431410e-01,-1.143306e-01,1.143306e-01,-9.390938e-02,9.390938e-02,-1.154161e-01,1.154161e-01,-1.141205e-01,1.141205e-01,-1.098048e-01,1.098048e-01,-8.870072e-02,8.870072e-02,-1.122444e-01,1.122444e-01,-1.114147e-01,1.114147e-01,-1.185710e-01,1.185710e-01,-1.107775e-01,1.107775e-01,-1.259167e-01,1.259167e-01,-1.105176e-01,1.105176e-01,-1.020691e-01,1.020691e-01,-9.607863e-02,9.607863e-02,-9.573700e-02,9.573700e-02,-1.054349e-01,1.054349e-01,-1.137856e-01,1.137856e-01,-1.192043e-01,1.192043e-01,-1.113264e-01,1.113264e-01,-1.093137e-01,1.093137e-01,-1.010919e-01,1.010919e-01,-9.625901e-02,9.625901e-02,-9.338459e-02,9.338459e-02,-1.142944e-01,1.142944e-01,-1.038877e-01,1.038877e-01,-9.772862e-02,9.772862e-02,-1.375298e-01,1.375298e-01,-1.394776e-01,1.394776e-01,-9.454765e-02,9.454765e-02,-1.203246e-01,1.203246e-01,-8.684943e-02,8.684943e-02,-1.135622e-01,1.135622e-01,-1.058181e-01,1.058181e-01,-1.082152e-01,1.082152e-01,-1.411355e-01,1.411355e-01,-9.978846e-02,9.978846e-02,-1.057874e-01,1.057874e-01,-1.415366e-01,1.415366e-01,-9.981014e-02,9.981014e-02,-9.261151e-02,9.261151e-02,-1.737173e-01,1.737173e-01,-1.580335e-01,1.580335e-01,-9.594668e-02,9.594668e-02,-9.336013e-02,9.336013e-02,-1.102373e-01,1.102373e-01,-8.546557e-02,8.546557e-02,-9.945057e-02,9.945057e-02,-1.146358e-01,1.146358e-01,-1.324734e-01,1.324734e-01,-1.422296e-01,1.422296e-01,-9.937990e-02,9.937990e-02,-8.381049e-02,8.381049e-02,-1.270714e-01,1.270714e-01,-1.091738e-01,1.091738e-01,-1.314881e-01,1.314881e-01,-1.085159e-01,1.085159e-01,-9.247554e-02,9.247554e-02,-8.121645e-02,8.121645e-02,-1.059589e-01,1.059589e-01,-8.307793e-02,8.307793e-02,-1.033103e-01,1.033103e-01,-1.056706e-01,1.056706e-01,-1.032803e-01,1.032803e-01,-1.266840e-01,1.266840e-01,-9.341601e-02,9.341601e-02,-7.683570e-02,7.683570e-02,-1.030530e-01,1.030530e-01,-1.051872e-01,1.051872e-01,-9.114946e-02,9.114946e-02,-1.329341e-01,1.329341e-01,-9.270830e-02,9.270830e-02,-1.141750e-01,1.141750e-01,-9.889318e-02,9.889318e-02,-8.856485e-02,8.856485e-02,-1.054210e-01,1.054210e-01,-1.092704e-01,1.092704e-01,-8.729085e-02,8.729085e-02,-1.141057e-01,1.141057e-01,-1.530774e-01,1.530774e-01,-8.129720e-02,8.129720e-02,-1.143335e-01,1.143335e-01,-1.175777e-01,1.175777e-01,-1.371729e-01,1.371729e-01,-1.394356e-01,1.394356e-01,-1.016308e-01,1.016308e-01,-1.125547e-01,1.125547e-01,-9.672600e-02,9.672600e-02,-1.036631e-01,1.036631e-01,-8.702514e-02,8.702514e-02,-1.264807e-01,1.264807e-01,-1.465688e-01,1.465688e-01,-8.781464e-02,8.781464e-02,-8.552605e-02,8.552605e-02,-1.145072e-01,1.145072e-01,-1.378489e-01,1.378489e-01,-1.013312e-01,1.013312e-01,-1.020083e-01,1.020083e-01,-1.015816e-01,1.015816e-01,-8.407101e-02,8.407101e-02,-8.296485e-02,8.296485e-02,-8.033655e-02,8.033655e-02,-9.003615e-02,9.003615e-02,-7.504954e-02,7.504954e-02,-1.224941e-01,1.224941e-01,-9.347814e-02,9.347814e-02,-9.555575e-02,9.555575e-02,-9.810025e-02,9.810025e-02,-1.237068e-01,1.237068e-01,-1.283586e-01,1.283586e-01,-1.082763e-01,1.082763e-01,-1.018145e-01,1.018145e-01,-1.175161e-01,1.175161e-01,-1.252279e-01,1.252279e-01,-1.370559e-01,1.370559e-01,-9.941339e-02,9.941339e-02,-8.506938e-02,8.506938e-02,-1.260902e-01,1.260902e-01,-1.014152e-01,1.014152e-01,-9.728694e-02,9.728694e-02,-9.374910e-02,9.374910e-02,-9.587429e-02,9.587429e-02,-9.516036e-02,9.516036e-02,-7.375173e-02,7.375173e-02,-9.332487e-02,9.332487e-02,-9.020733e-02,9.020733e-02,-1.133381e-01,1.133381e-01,-1.542180e-01,1.542180e-01,-9.692168e-02,9.692168e-02,-7.960904e-02,7.960904e-02,-8.947089e-02,8.947089e-02,-7.830286e-02,7.830286e-02,-9.900050e-02,9.900050e-02,-1.041293e-01,1.041293e-01,-9.572501e-02,9.572501e-02,-8.230575e-02,8.230575e-02,-9.194901e-02,9.194901e-02,-1.076971e-01,1.076971e-01,-1.027782e-01,1.027782e-01,-1.028538e-01,1.028538e-01,-1.013992e-01,1.013992e-01,-9.087585e-02,9.087585e-02,-1.100706e-01,1.100706e-01,-1.094934e-01,1.094934e-01,-1.107879e-01,1.107879e-01,-1.026915e-01,1.026915e-01,-1.017572e-01,1.017572e-01,-7.984776e-02,7.984776e-02,-9.015413e-02,9.015413e-02,-1.299870e-01,1.299870e-01,-9.164982e-02,9.164982e-02,-1.062788e-01,1.062788e-01,-1.160203e-01,1.160203e-01,-8.858603e-02,8.858603e-02,-9.762964e-02,9.762964e-02,-1.070694e-01,1.070694e-01,-9.549046e-02,9.549046e-02,-1.533034e-01,1.533034e-01,-8.663316e-02,8.663316e-02,-9.303018e-02,9.303018e-02,-9.853582e-02,9.853582e-02,-9.733371e-02,9.733371e-02,-1.048555e-01,1.048555e-01,-9.056041e-02,9.056041e-02,-7.552283e-02,7.552283e-02,-8.780631e-02,8.780631e-02,-1.123953e-01,1.123953e-01,-1.452948e-01,1.452948e-01,-1.156423e-01,1.156423e-01,-8.701142e-02,8.701142e-02,-9.713334e-02,9.713334e-02,-9.970888e-02,9.970888e-02,-8.614129e-02,8.614129e-02,-7.459861e-02,7.459861e-02,-9.253517e-02,9.253517e-02,-9.570092e-02,9.570092e-02,-9.485535e-02,9.485535e-02,-1.148365e-01,1.148365e-01,-1.063193e-01,1.063193e-01,-9.986686e-02,9.986686e-02,-7.523412e-02,7.523412e-02,-1.005881e-01,1.005881e-01,-8.249716e-02,8.249716e-02,-1.055866e-01,1.055866e-01,-1.343050e-01,1.343050e-01,-1.371056e-01,1.371056e-01,-9.604689e-02,9.604689e-02,-1.224268e-01,1.224268e-01,-9.211478e-02,9.211478e-02,-1.108371e-01,1.108371e-01,-1.100547e-01,1.100547e-01,-8.938970e-02,8.938970e-02,-8.655951e-02,8.655951e-02,-7.085816e-02,7.085816e-02,-8.101028e-02,8.101028e-02,-8.338046e-02,8.338046e-02,-8.309588e-02,8.309588e-02,-9.090584e-02,9.090584e-02,-8.124564e-02,8.124564e-02,-9.367843e-02,9.367843e-02,-1.011747e-01,1.011747e-01,-9.885045e-02,9.885045e-02,-8.944266e-02,8.944266e-02,-8.453859e-02,8.453859e-02,-8.308847e-02,8.308847e-02,-1.367280e-01,1.367280e-01,-1.295144e-01,1.295144e-01,-1.063965e-01,1.063965e-01,-7.752328e-02,7.752328e-02,-9.681524e-02,9.681524e-02,-7.862345e-02,7.862345e-02,-8.767746e-02,8.767746e-02,-9.198041e-02,9.198041e-02,-9.686489e-02,9.686489e-02]},{"count":564,"threshold":-4.517456e+00,"feature":[{"size":5,"px":[15,9,8,12,11],"py":[3,6,3,0,8],"pz":[0,1,0,0,0],"nx":[6,14,9,22,23],"ny":[8,7,8,17,3],"nz":[1,0,0,0,0]},{"size":5,"px":[12,13,11,14,12],"py":[9,4,4,4,5],"pz":[0,0,0,0,0],"nx":[4,6,10,4,15],"ny":[3,8,7,10,9],"nz":[1,1,0,1,0]},{"size":5,"px":[7,5,6,8,8],"py":[2,13,2,1,1],"pz":[0,0,0,0,-1],"nx":[3,0,4,1,0],"ny":[4,3,10,3,13],"nz":[1,1,1,0,0]},{"size":5,"px":[11,2,2,11,16],"py":[9,4,2,7,11],"pz":[0,2,2,0,0],"nx":[8,4,1,14,0],"ny":[4,4,16,5,13],"nz":[1,1,-1,-1,-1]},{"size":2,"px":[14,14],"py":[18,18],"pz":[0,-1],"nx":[8,13],"ny":[10,16],"nz":[1,0]},{"size":5,"px":[15,17,16,8,18],"py":[1,2,1,0,2],"pz":[0,0,0,1,0],"nx":[21,22,22,22,22],"ny":[1,5,3,4,2],"nz":[0,0,0,0,-1]},{"size":2,"px":[15,4],"py":[23,3],"pz":[0,2],"nx":[7,3],"ny":[10,6],"nz":[1,-1]},{"size":5,"px":[3,6,4,3,11],"py":[10,11,8,3,8],"pz":[1,0,1,1,0],"nx":[3,5,6,3,0],"ny":[4,9,9,9,0],"nz":[1,-1,-1,-1,-1]},{"size":3,"px":[11,11,2],"py":[11,13,16],"pz":[0,0,-1],"nx":[10,10,9],"ny":[10,11,14],"nz":[0,0,0]},{"size":2,"px":[8,4],"py":[12,6],"pz":[0,1],"nx":[4,5],"ny":[11,11],"nz":[1,-1]},{"size":5,"px":[10,11,13,3,12],"py":[3,4,3,0,1],"pz":[0,0,0,2,0],"nx":[14,18,20,19,15],"ny":[13,1,15,2,18],"nz":[0,0,0,0,0]},{"size":5,"px":[20,14,10,12,12],"py":[12,12,4,10,11],"pz":[0,0,1,0,0],"nx":[9,2,9,9,9],"ny":[4,12,5,9,14],"nz":[1,-1,-1,-1,-1]},{"size":5,"px":[3,3,3,4,2],"py":[15,16,14,21,12],"pz":[0,0,0,0,0],"nx":[0,0,0,0,0],"ny":[20,10,5,21,21],"nz":[0,1,2,0,-1]},{"size":2,"px":[18,8],"py":[16,7],"pz":[0,1],"nx":[14,0],"ny":[8,10],"nz":[0,-1]},{"size":4,"px":[12,4,16,1],"py":[14,3,8,3],"pz":[0,-1,-1,-1],"nx":[14,10,20,13],"ny":[13,5,16,9],"nz":[0,1,0,0]},{"size":5,"px":[3,8,2,3,3],"py":[7,2,1,2,4],"pz":[1,-1,-1,-1,-1],"nx":[1,9,2,1,1],"ny":[3,14,9,7,2],"nz":[1,0,1,1,1]},{"size":5,"px":[4,1,3,2,3],"py":[2,1,2,4,3],"pz":[0,1,0,0,0],"nx":[0,0,0,0,0],"ny":[3,1,2,0,0],"nz":[0,1,0,2,-1]},{"size":4,"px":[4,8,7,9],"py":[6,11,11,10],"pz":[1,0,0,0],"nx":[3,10,2,20],"ny":[4,4,4,8],"nz":[1,-1,-1,-1]},{"size":2,"px":[1,8],"py":[3,11],"pz":[2,-1],"nx":[8,2],"ny":[15,5],"nz":[0,2]},{"size":2,"px":[17,0],"py":[13,10],"pz":[0,-1],"nx":[14,14],"ny":[11,10],"nz":[0,0]},{"size":5,"px":[22,22,22,5,22],"py":[16,18,17,2,15],"pz":[0,0,0,2,0],"nx":[8,4,15,6,6],"ny":[4,2,7,11,11],"nz":[1,2,0,1,-1]},{"size":5,"px":[16,9,8,17,15],"py":[12,6,6,22,12],"pz":[0,1,1,0,0],"nx":[11,23,23,23,22],"ny":[11,23,22,21,23],"nz":[1,0,0,0,-1]},{"size":5,"px":[5,2,4,4,9],"py":[22,3,15,20,18],"pz":[0,2,0,0,0],"nx":[9,4,23,7,22],"ny":[8,4,22,19,23],"nz":[0,-1,-1,-1,-1]},{"size":5,"px":[8,6,9,7,3],"py":[3,3,3,3,1],"pz":[0,0,0,0,1],"nx":[5,5,4,4,4],"ny":[0,1,1,2,0],"nz":[0,0,0,0,-1]},{"size":2,"px":[2,3],"py":[3,3],"pz":[2,2],"nx":[3,6],"ny":[4,6],"nz":[1,-1]},{"size":5,"px":[1,1,0,1,0],"py":[17,15,6,16,10],"pz":[0,0,1,0,0],"nx":[4,4,7,4,8],"ny":[2,5,9,4,4],"nz":[2,2,1,2,-1]},{"size":5,"px":[12,12,12,13,13],"py":[10,9,11,13,13],"pz":[0,0,0,0,-1],"nx":[4,3,3,5,3],"ny":[21,18,17,23,16],"nz":[0,0,0,0,0]},{"size":4,"px":[5,6,5,9],"py":[13,7,9,23],"pz":[0,0,1,0],"nx":[6,15,7,5],"ny":[9,20,7,23],"nz":[0,-1,-1,-1]},{"size":2,"px":[6,3],"py":[4,2],"pz":[1,2],"nx":[8,23],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[9,7],"py":[18,0],"pz":[0,0],"nx":[5,7],"ny":[8,10],"nz":[1,1]},{"size":2,"px":[4,6],"py":[11,16],"pz":[1,0],"nx":[10,9],"ny":[16,7],"nz":[0,-1]},{"size":4,"px":[11,11,11,11],"py":[11,10,12,13],"pz":[0,0,0,0],"nx":[13,13,13,9],"ny":[11,9,10,4],"nz":[0,0,0,1]},{"size":4,"px":[12,6,7,6],"py":[7,11,8,4],"pz":[0,1,1,1],"nx":[10,0,19,7],"ny":[21,3,12,11],"nz":[0,-1,-1,-1]},{"size":2,"px":[4,4],"py":[3,4],"pz":[2,2],"nx":[9,1],"ny":[4,7],"nz":[1,-1]},{"size":2,"px":[19,19],"py":[21,20],"pz":[0,0],"nx":[7,7],"ny":[3,13],"nz":[1,-1]},{"size":5,"px":[12,9,13,11,5],"py":[0,2,2,0,0],"pz":[0,0,0,0,1],"nx":[6,4,5,5,5],"ny":[1,3,5,2,6],"nz":[0,0,1,0,1]},{"size":5,"px":[4,3,2,5,7],"py":[11,3,3,7,17],"pz":[1,2,2,0,0],"nx":[23,5,11,5,5],"ny":[0,4,10,2,6],"nz":[0,-1,-1,-1,-1]},{"size":2,"px":[20,17],"py":[12,3],"pz":[0,-1],"nx":[20,19],"ny":[21,23],"nz":[0,0]},{"size":2,"px":[2,1],"py":[12,8],"pz":[0,0],"nx":[2,8],"ny":[2,16],"nz":[2,-1]},{"size":2,"px":[16,5],"py":[4,5],"pz":[0,-1],"nx":[7,8],"ny":[9,1],"nz":[1,1]},{"size":2,"px":[2,2],"py":[0,1],"pz":[1,1],"nx":[1,8],"ny":[5,1],"nz":[0,-1]},{"size":2,"px":[1,1],"py":[12,10],"pz":[0,1],"nx":[2,20],"ny":[23,9],"nz":[0,-1]},{"size":4,"px":[11,0,0,2],"py":[14,3,9,22],"pz":[0,-1,-1,-1],"nx":[13,14,7,3],"ny":[6,7,11,1],"nz":[0,0,0,2]},{"size":2,"px":[14,0],"py":[2,3],"pz":[0,-1],"nx":[4,4],"ny":[4,3],"nz":[2,2]},{"size":2,"px":[23,11],"py":[18,11],"pz":[0,1],"nx":[3,2],"ny":[1,21],"nz":[1,-1]},{"size":2,"px":[9,9],"py":[17,14],"pz":[0,-1],"nx":[4,5],"ny":[10,8],"nz":[1,1]},{"size":2,"px":[9,18],"py":[7,14],"pz":[1,0],"nx":[18,9],"ny":[17,8],"nz":[0,-1]},{"size":2,"px":[2,8],"py":[4,22],"pz":[2,0],"nx":[4,3],"ny":[10,1],"nz":[1,-1]},{"size":2,"px":[5,22],"py":[4,9],"pz":[2,-1],"nx":[11,23],"ny":[8,14],"nz":[1,0]},{"size":3,"px":[23,5,5],"py":[8,2,1],"pz":[0,2,2],"nx":[10,10,2],"ny":[4,4,2],"nz":[1,-1,-1]},{"size":2,"px":[11,11],"py":[14,23],"pz":[0,-1],"nx":[3,11],"ny":[4,13],"nz":[1,0]},{"size":2,"px":[3,2],"py":[7,0],"pz":[1,-1],"nx":[4,3],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[12,1],"py":[19,13],"pz":[0,-1],"nx":[9,12],"ny":[10,18],"nz":[1,0]},{"size":2,"px":[10,10],"py":[11,10],"pz":[1,1],"nx":[4,1],"ny":[5,11],"nz":[2,-1]},{"size":5,"px":[9,12,4,8,8],"py":[3,5,2,9,8],"pz":[1,0,2,1,1],"nx":[23,23,23,23,23],"ny":[3,4,6,5,5],"nz":[0,0,0,0,-1]},{"size":2,"px":[2,4],"py":[3,6],"pz":[2,1],"nx":[3,9],"ny":[4,6],"nz":[1,-1]},{"size":5,"px":[13,13,13,7,7],"py":[11,10,9,6,6],"pz":[0,0,0,1,-1],"nx":[5,5,15,5,2],"ny":[5,15,9,9,1],"nz":[0,0,0,1,2]},{"size":2,"px":[19,7],"py":[21,7],"pz":[0,1],"nx":[14,10],"ny":[15,4],"nz":[0,-1]},{"size":2,"px":[5,5],"py":[3,4],"pz":[2,2],"nx":[21,0],"ny":[23,5],"nz":[0,-1]},{"size":2,"px":[2,0],"py":[0,0],"pz":[1,-1],"nx":[3,2],"ny":[1,2],"nz":[0,0]},{"size":2,"px":[9,0],"py":[4,0],"pz":[0,-1],"nx":[5,12],"ny":[0,1],"nz":[1,0]},{"size":5,"px":[14,16,12,15,13],"py":[0,1,0,0,0],"pz":[0,0,0,0,0],"nx":[4,8,8,4,9],"ny":[2,3,4,1,3],"nz":[2,1,1,2,-1]},{"size":3,"px":[4,17,2],"py":[11,14,1],"pz":[1,-1,-1],"nx":[9,8,17],"ny":[1,4,0],"nz":[1,1,0]},{"size":2,"px":[18,9],"py":[17,7],"pz":[0,1],"nx":[8,4],"ny":[4,7],"nz":[1,-1]},{"size":2,"px":[0,0],"py":[3,0],"pz":[1,2],"nx":[10,11],"ny":[6,5],"nz":[1,-1]},{"size":5,"px":[21,21,21,21,20],"py":[17,16,19,18,21],"pz":[0,0,0,0,0],"nx":[0,0,0,0,0],"ny":[4,9,11,6,6],"nz":[1,0,0,1,-1]},{"size":2,"px":[12,0],"py":[7,1],"pz":[0,-1],"nx":[8,11],"ny":[4,17],"nz":[1,0]},{"size":4,"px":[13,0,0,0],"py":[15,0,0,0],"pz":[0,-1,-1,-1],"nx":[3,7,4,6],"ny":[2,7,5,9],"nz":[2,1,2,1]},{"size":2,"px":[2,9],"py":[3,12],"pz":[2,0],"nx":[2,0],"ny":[4,0],"nz":[1,-1]},{"size":2,"px":[10,3],"py":[6,1],"pz":[1,-1],"nx":[20,21],"ny":[19,14],"nz":[0,0]},{"size":5,"px":[5,22,22,11,22],"py":[1,4,3,3,2],"pz":[2,0,0,1,-1],"nx":[7,13,14,8,15],"ny":[3,6,6,3,7],"nz":[1,0,0,1,0]},{"size":2,"px":[12,19],"py":[5,15],"pz":[0,-1],"nx":[16,4],"ny":[8,2],"nz":[0,2]},{"size":2,"px":[1,0],"py":[11,9],"pz":[1,1],"nx":[5,0],"ny":[3,3],"nz":[1,-1]},{"size":4,"px":[8,3,4,2],"py":[6,7,5,3],"pz":[1,-1,-1,-1],"nx":[13,14,11,11],"ny":[11,13,3,5],"nz":[0,0,1,1]},{"size":2,"px":[11,11],"py":[5,6],"pz":[0,0],"nx":[8,4],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[5,9],"py":[6,17],"pz":[1,0],"nx":[9,4],"ny":[15,11],"nz":[0,-1]},{"size":3,"px":[6,3,6],"py":[6,3,5],"pz":[1,2,1],"nx":[11,10,4],"ny":[8,11,5],"nz":[0,0,-1]},{"size":2,"px":[8,16],"py":[0,1],"pz":[1,-1],"nx":[19,17],"ny":[1,0],"nz":[0,0]},{"size":2,"px":[21,20],"py":[4,1],"pz":[0,0],"nx":[11,5],"ny":[0,0],"nz":[1,2]},{"size":2,"px":[8,4],"py":[6,3],"pz":[1,2],"nx":[8,9],"ny":[4,10],"nz":[1,-1]},{"size":2,"px":[10,1],"py":[0,0],"pz":[1,-1],"nx":[13,12],"ny":[6,5],"nz":[0,0]},{"size":2,"px":[5,4],"py":[3,11],"pz":[1,-1],"nx":[3,17],"ny":[1,3],"nz":[2,0]},{"size":2,"px":[12,13],"py":[4,4],"pz":[0,0],"nx":[3,3],"ny":[1,1],"nz":[2,-1]},{"size":2,"px":[3,18],"py":[2,7],"pz":[2,0],"nx":[8,1],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[16,6],"py":[8,2],"pz":[0,1],"nx":[8,9],"ny":[4,19],"nz":[1,-1]},{"size":3,"px":[12,3,14],"py":[13,3,15],"pz":[0,-1,-1],"nx":[0,1,0],"ny":[16,18,15],"nz":[0,0,0]},{"size":2,"px":[3,1],"py":[3,4],"pz":[2,-1],"nx":[7,14],"ny":[10,14],"nz":[1,0]},{"size":2,"px":[9,16],"py":[6,10],"pz":[1,0],"nx":[8,8],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[7,11],"py":[4,4],"pz":[0,0],"nx":[7,23],"ny":[3,11],"nz":[0,-1]},{"size":5,"px":[2,4,3,4,4],"py":[1,2,0,1,1],"pz":[1,0,1,0,-1],"nx":[11,9,4,9,5],"ny":[6,5,3,6,3],"nz":[0,0,1,0,1]},{"size":2,"px":[6,0],"py":[14,1],"pz":[0,-1],"nx":[2,5],"ny":[2,9],"nz":[2,1]},{"size":2,"px":[6,7],"py":[7,12],"pz":[0,0],"nx":[3,22],"ny":[3,16],"nz":[1,-1]},{"size":2,"px":[10,4],"py":[1,1],"pz":[0,1],"nx":[2,6],"ny":[2,21],"nz":[2,-1]},{"size":2,"px":[13,1],"py":[11,6],"pz":[0,-1],"nx":[12,6],"ny":[5,2],"nz":[0,1]},{"size":5,"px":[10,5,11,10,10],"py":[4,3,4,6,5],"pz":[0,1,0,0,0],"nx":[4,7,13,8,4],"ny":[2,8,9,4,4],"nz":[2,1,0,1,-1]},{"size":4,"px":[7,8,7,8],"py":[11,3,4,7],"pz":[1,1,1,1],"nx":[0,7,3,8],"ny":[0,12,2,4],"nz":[0,-1,-1,-1]},{"size":2,"px":[0,0],"py":[4,7],"pz":[2,1],"nx":[10,1],"ny":[7,0],"nz":[0,-1]},{"size":2,"px":[11,5],"py":[19,5],"pz":[0,-1],"nx":[11,5],"ny":[17,10],"nz":[0,1]},{"size":2,"px":[11,12],"py":[4,4],"pz":[0,0],"nx":[7,5],"ny":[8,3],"nz":[0,-1]},{"size":3,"px":[4,8,4],"py":[2,9,4],"pz":[2,1,2],"nx":[3,19,3],"ny":[1,16,5],"nz":[1,-1,-1]},{"size":2,"px":[3,7],"py":[0,1],"pz":[1,0],"nx":[2,3],"ny":[15,2],"nz":[0,-1]},{"size":2,"px":[0,4],"py":[2,0],"pz":[2,-1],"nx":[9,16],"ny":[5,11],"nz":[1,0]},{"size":2,"px":[14,15],"py":[23,16],"pz":[0,0],"nx":[13,3],"ny":[15,1],"nz":[0,-1]},{"size":2,"px":[4,3],"py":[0,1],"pz":[1,-1],"nx":[3,7],"ny":[0,0],"nz":[1,0]},{"size":2,"px":[7,6],"py":[12,12],"pz":[0,0],"nx":[4,8],"ny":[5,4],"nz":[1,-1]},{"size":5,"px":[4,1,2,4,5],"py":[1,0,0,0,6],"pz":[0,2,1,0,1],"nx":[4,8,7,8,6],"ny":[4,10,11,4,4],"nz":[1,0,0,1,1]},{"size":2,"px":[12,12],"py":[15,8],"pz":[0,-1],"nx":[7,15],"ny":[16,14],"nz":[0,0]},{"size":2,"px":[4,8],"py":[3,6],"pz":[2,1],"nx":[4,6],"ny":[2,8],"nz":[2,-1]},{"size":2,"px":[14,4],"py":[19,23],"pz":[0,-1],"nx":[7,14],"ny":[11,18],"nz":[1,0]},{"size":2,"px":[4,2],"py":[7,4],"pz":[1,2],"nx":[2,22],"ny":[5,19],"nz":[2,-1]},{"size":2,"px":[8,15],"py":[7,17],"pz":[1,0],"nx":[14,4],"ny":[15,5],"nz":[0,2]},{"size":2,"px":[10,11],"py":[9,8],"pz":[1,-1],"nx":[23,5],"ny":[19,4],"nz":[0,2]},{"size":2,"px":[11,1],"py":[7,9],"pz":[0,-1],"nx":[4,4],"ny":[4,5],"nz":[1,1]},{"size":2,"px":[14,7],"py":[6,9],"pz":[0,0],"nx":[4,11],"ny":[4,0],"nz":[1,-1]},{"size":2,"px":[5,4],"py":[0,5],"pz":[0,-1],"nx":[2,2],"ny":[0,4],"nz":[1,0]},{"size":2,"px":[10,22],"py":[5,20],"pz":[0,-1],"nx":[3,4],"ny":[1,2],"nz":[2,2]},{"size":3,"px":[23,11,11],"py":[17,9,8],"pz":[0,1,1],"nx":[13,8,8],"ny":[5,3,3],"nz":[0,1,-1]},{"size":2,"px":[18,9],"py":[0,21],"pz":[0,-1],"nx":[10,10],"ny":[2,1],"nz":[1,1]},{"size":5,"px":[11,10,11,11,11],"py":[11,13,10,12,12],"pz":[0,0,0,0,-1],"nx":[11,13,12,3,8],"ny":[5,5,5,1,10],"nz":[0,0,0,2,0]},{"size":2,"px":[7,8],"py":[11,11],"pz":[0,0],"nx":[9,16],"ny":[9,19],"nz":[0,-1]},{"size":2,"px":[9,18],"py":[23,7],"pz":[0,-1],"nx":[21,21],"ny":[7,13],"nz":[0,0]},{"size":2,"px":[8,8],"py":[7,8],"pz":[1,1],"nx":[5,21],"ny":[9,13],"nz":[1,-1]},{"size":2,"px":[17,8],"py":[22,8],"pz":[0,-1],"nx":[4,8],"ny":[5,10],"nz":[2,1]},{"size":5,"px":[2,5,8,8,4],"py":[3,9,13,23,7],"pz":[2,1,0,0,1],"nx":[9,17,18,19,20],"ny":[0,0,0,2,3],"nz":[1,0,0,0,0]},{"size":3,"px":[16,15,2],"py":[3,3,13],"pz":[0,0,-1],"nx":[4,8,4],"ny":[3,6,2],"nz":[2,1,2]},{"size":2,"px":[4,7],"py":[3,7],"pz":[2,1],"nx":[15,1],"ny":[15,0],"nz":[0,-1]},{"size":2,"px":[3,6],"py":[2,3],"pz":[2,1],"nx":[3,18],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[2,4],"py":[2,4],"pz":[2,1],"nx":[3,0],"ny":[5,0],"nz":[1,-1]},{"size":2,"px":[10,0],"py":[10,0],"pz":[0,-1],"nx":[9,4],"ny":[2,0],"nz":[1,2]},{"size":2,"px":[2,0],"py":[8,3],"pz":[1,-1],"nx":[4,8],"ny":[4,14],"nz":[1,0]},{"size":2,"px":[13,18],"py":[14,14],"pz":[0,-1],"nx":[1,1],"ny":[15,13],"nz":[0,0]},{"size":3,"px":[3,2,2],"py":[17,10,15],"pz":[0,1,0],"nx":[13,2,7],"ny":[19,11,0],"nz":[0,-1,-1]},{"size":2,"px":[4,17],"py":[0,2],"pz":[2,0],"nx":[8,5],"ny":[11,3],"nz":[1,-1]},{"size":2,"px":[15,21],"py":[5,4],"pz":[0,-1],"nx":[15,10],"ny":[3,0],"nz":[0,1]},{"size":2,"px":[7,3],"py":[13,8],"pz":[0,-1],"nx":[8,4],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[7,22],"py":[3,4],"pz":[1,-1],"nx":[4,2],"ny":[2,3],"nz":[1,1]},{"size":4,"px":[6,2,6,5],"py":[21,10,22,20],"pz":[0,1,0,0],"nx":[2,3,4,4],"ny":[11,21,23,23],"nz":[1,0,0,-1]},{"size":2,"px":[7,2],"py":[6,8],"pz":[1,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":4,"px":[11,11,5,11],"py":[6,5,2,4],"pz":[1,1,2,1],"nx":[13,7,8,3],"ny":[7,3,5,2],"nz":[0,1,-1,-1]},{"size":2,"px":[3,3],"py":[7,8],"pz":[1,0],"nx":[3,11],"ny":[4,2],"nz":[1,-1]},{"size":3,"px":[16,1,5],"py":[3,3,11],"pz":[0,-1,-1],"nx":[16,4,8],"ny":[2,0,1],"nz":[0,2,1]},{"size":2,"px":[10,0],"py":[8,1],"pz":[0,-1],"nx":[19,18],"ny":[20,23],"nz":[0,0]},{"size":2,"px":[17,4],"py":[10,4],"pz":[0,-1],"nx":[4,14],"ny":[2,9],"nz":[2,0]},{"size":5,"px":[11,12,9,10,11],"py":[2,3,2,2,3],"pz":[0,0,0,0,0],"nx":[6,4,2,2,2],"ny":[18,9,3,2,2],"nz":[0,1,2,2,-1]},{"size":2,"px":[0,1],"py":[6,16],"pz":[1,0],"nx":[8,16],"ny":[5,16],"nz":[0,-1]},{"size":2,"px":[3,3],"py":[2,3],"pz":[2,2],"nx":[8,17],"ny":[4,9],"nz":[1,-1]},{"size":3,"px":[2,5,2],"py":[5,6,4],"pz":[1,-1,-1],"nx":[0,0,0],"ny":[3,5,6],"nz":[2,1,1]},{"size":5,"px":[0,0,0,0,0],"py":[6,15,16,13,14],"pz":[1,0,0,0,0],"nx":[4,5,8,6,8],"ny":[4,16,8,15,4],"nz":[1,0,0,0,-1]},{"size":2,"px":[4,2],"py":[6,3],"pz":[1,2],"nx":[3,5],"ny":[4,16],"nz":[1,-1]},{"size":5,"px":[21,19,21,21,21],"py":[17,23,18,19,20],"pz":[0,0,0,0,0],"nx":[5,2,3,6,6],"ny":[12,5,5,12,12],"nz":[0,1,1,0,-1]},{"size":2,"px":[5,2],"py":[11,1],"pz":[1,-1],"nx":[5,11],"ny":[3,5],"nz":[2,1]},{"size":2,"px":[10,5],"py":[5,3],"pz":[0,1],"nx":[6,15],"ny":[11,5],"nz":[1,-1]},{"size":2,"px":[6,2],"py":[4,2],"pz":[1,-1],"nx":[4,3],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[10,6],"py":[20,6],"pz":[0,-1],"nx":[5,10],"ny":[11,17],"nz":[1,0]},{"size":4,"px":[8,4,7,11],"py":[7,4,5,8],"pz":[1,2,1,0],"nx":[13,10,5,21],"ny":[9,3,5,4],"nz":[0,-1,-1,-1]},{"size":2,"px":[7,13],"py":[10,7],"pz":[0,0],"nx":[10,8],"ny":[9,18],"nz":[0,-1]},{"size":2,"px":[3,3],"py":[1,0],"pz":[2,2],"nx":[8,5],"ny":[4,2],"nz":[1,-1]},{"size":5,"px":[5,2,5,8,4],"py":[8,4,14,23,7],"pz":[1,2,0,0,1],"nx":[18,4,16,17,17],"ny":[1,0,0,1,1],"nz":[0,2,0,0,-1]},{"size":2,"px":[6,2],"py":[2,4],"pz":[1,-1],"nx":[8,8],"ny":[4,3],"nz":[1,1]},{"size":2,"px":[6,1],"py":[8,15],"pz":[0,-1],"nx":[8,3],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[10,1],"py":[7,2],"pz":[1,-1],"nx":[6,6],"ny":[9,4],"nz":[1,1]},{"size":2,"px":[4,1],"py":[6,2],"pz":[1,-1],"nx":[1,10],"ny":[16,12],"nz":[0,0]},{"size":2,"px":[8,4],"py":[7,2],"pz":[1,-1],"nx":[8,9],"ny":[8,10],"nz":[1,1]},{"size":5,"px":[4,8,7,6,6],"py":[0,0,0,1,1],"pz":[1,0,0,0,-1],"nx":[11,5,8,4,10],"ny":[5,3,4,4,5],"nz":[0,1,1,1,0]},{"size":2,"px":[5,6],"py":[8,5],"pz":[0,0],"nx":[6,6],"ny":[8,3],"nz":[0,-1]},{"size":2,"px":[18,5],"py":[19,5],"pz":[0,-1],"nx":[4,21],"ny":[5,19],"nz":[2,0]},{"size":2,"px":[9,5],"py":[13,6],"pz":[0,1],"nx":[2,2],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[10,4],"py":[17,6],"pz":[0,1],"nx":[10,2],"ny":[15,4],"nz":[0,-1]},{"size":3,"px":[13,13,19],"py":[11,12,8],"pz":[0,0,-1],"nx":[12,3,8],"ny":[4,1,4],"nz":[0,2,1]},{"size":3,"px":[11,7,4],"py":[5,2,1],"pz":[0,-1,-1],"nx":[9,2,4],"ny":[11,3,6],"nz":[0,2,1]},{"size":2,"px":[10,7],"py":[15,2],"pz":[0,-1],"nx":[4,4],"ny":[0,1],"nz":[2,2]},{"size":5,"px":[8,9,16,18,18],"py":[0,1,1,1,1],"pz":[1,1,0,0,-1],"nx":[5,5,6,4,4],"ny":[21,20,23,17,18],"nz":[0,0,0,0,0]},{"size":2,"px":[6,7],"py":[1,1],"pz":[1,1],"nx":[20,19],"ny":[2,1],"nz":[0,0]},{"size":2,"px":[2,2],"py":[10,11],"pz":[1,1],"nx":[3,3],"ny":[10,10],"nz":[1,-1]},{"size":2,"px":[9,5],"py":[23,1],"pz":[0,-1],"nx":[4,3],"ny":[10,4],"nz":[1,1]},{"size":2,"px":[1,10],"py":[4,7],"pz":[2,-1],"nx":[4,3],"ny":[23,21],"nz":[0,0]},{"size":2,"px":[10,21],"py":[11,18],"pz":[1,0],"nx":[10,4],"ny":[18,1],"nz":[0,-1]},{"size":2,"px":[11,23],"py":[11,15],"pz":[0,-1],"nx":[11,11],"ny":[7,9],"nz":[1,1]},{"size":2,"px":[10,1],"py":[7,7],"pz":[1,-1],"nx":[15,4],"ny":[14,4],"nz":[0,2]},{"size":2,"px":[1,2],"py":[9,20],"pz":[1,0],"nx":[21,3],"ny":[12,20],"nz":[0,-1]},{"size":2,"px":[7,4],"py":[0,0],"pz":[1,2],"nx":[4,2],"ny":[0,19],"nz":[0,-1]},{"size":2,"px":[2,4],"py":[3,6],"pz":[2,1],"nx":[3,0],"ny":[4,0],"nz":[1,-1]},{"size":2,"px":[5,1],"py":[5,0],"pz":[1,-1],"nx":[12,10],"ny":[11,4],"nz":[0,1]},{"size":2,"px":[11,12],"py":[11,14],"pz":[1,-1],"nx":[18,16],"ny":[21,15],"nz":[0,0]},{"size":2,"px":[3,18],"py":[1,5],"pz":[2,-1],"nx":[4,8],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[9,10],"py":[18,7],"pz":[0,-1],"nx":[3,6],"ny":[0,0],"nz":[2,1]},{"size":2,"px":[19,2],"py":[1,4],"pz":[0,-1],"nx":[22,22],"ny":[13,15],"nz":[0,0]},{"size":3,"px":[13,15,20],"py":[14,21,10],"pz":[0,-1,-1],"nx":[15,7,7],"ny":[13,6,8],"nz":[0,1,1]},{"size":2,"px":[9,9],"py":[6,7],"pz":[1,1],"nx":[8,7],"ny":[4,8],"nz":[1,-1]},{"size":2,"px":[0,0],"py":[5,3],"pz":[1,2],"nx":[5,10],"ny":[2,9],"nz":[1,-1]},{"size":2,"px":[14,11],"py":[7,16],"pz":[0,-1],"nx":[1,0],"ny":[17,4],"nz":[0,2]},{"size":2,"px":[14,18],"py":[17,18],"pz":[0,-1],"nx":[8,14],"ny":[10,16],"nz":[1,0]},{"size":2,"px":[6,11],"py":[13,11],"pz":[0,-1],"nx":[8,9],"ny":[12,9],"nz":[0,0]},{"size":2,"px":[8,9],"py":[2,2],"pz":[0,0],"nx":[3,3],"ny":[2,2],"nz":[2,-1]},{"size":3,"px":[21,21,21],"py":[14,16,15],"pz":[0,0,0],"nx":[14,12,0],"ny":[5,12,6],"nz":[0,-1,-1]},{"size":2,"px":[4,21],"py":[6,15],"pz":[1,-1],"nx":[5,1],"ny":[6,5],"nz":[1,1]},{"size":2,"px":[6,3],"py":[2,1],"pz":[1,2],"nx":[8,0],"ny":[4,20],"nz":[1,-1]},{"size":2,"px":[13,2],"py":[9,1],"pz":[0,-1],"nx":[3,5],"ny":[1,2],"nz":[2,1]},{"size":2,"px":[16,1],"py":[5,4],"pz":[0,-1],"nx":[17,8],"ny":[3,2],"nz":[0,1]},{"size":2,"px":[9,2],"py":[7,1],"pz":[1,-1],"nx":[20,20],"ny":[17,16],"nz":[0,0]},{"size":2,"px":[5,7],"py":[3,6],"pz":[2,-1],"nx":[9,9],"ny":[6,5],"nz":[1,1]},{"size":2,"px":[11,17],"py":[4,1],"pz":[0,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[15,2],"py":[11,0],"pz":[0,-1],"nx":[5,14],"ny":[1,12],"nz":[2,0]},{"size":2,"px":[22,19],"py":[3,0],"pz":[0,-1],"nx":[9,4],"ny":[6,4],"nz":[1,1]},{"size":2,"px":[1,22],"py":[3,21],"pz":[0,-1],"nx":[0,0],"ny":[1,0],"nz":[2,2]},{"size":2,"px":[11,11],"py":[11,12],"pz":[0,0],"nx":[1,2],"ny":[1,4],"nz":[2,-1]},{"size":2,"px":[18,3],"py":[8,1],"pz":[0,2],"nx":[13,1],"ny":[8,5],"nz":[0,-1]},{"size":2,"px":[13,6],"py":[21,3],"pz":[0,-1],"nx":[11,11],"ny":[6,5],"nz":[1,1]},{"size":2,"px":[15,14],"py":[4,4],"pz":[0,0],"nx":[17,1],"ny":[12,5],"nz":[0,-1]},{"size":2,"px":[11,3],"py":[12,1],"pz":[0,-1],"nx":[1,2],"ny":[2,4],"nz":[2,1]},{"size":2,"px":[3,2],"py":[7,3],"pz":[0,1],"nx":[16,2],"ny":[3,5],"nz":[0,-1]},{"size":2,"px":[10,5],"py":[7,20],"pz":[1,-1],"nx":[9,8],"ny":[4,6],"nz":[1,1]},{"size":2,"px":[19,2],"py":[10,2],"pz":[0,-1],"nx":[9,4],"ny":[3,1],"nz":[1,2]},{"size":2,"px":[14,9],"py":[0,23],"pz":[0,-1],"nx":[4,4],"ny":[3,2],"nz":[2,2]},{"size":2,"px":[6,9],"py":[4,10],"pz":[1,0],"nx":[10,9],"ny":[9,0],"nz":[0,-1]},{"size":4,"px":[6,9,10,8],"py":[20,23,18,23],"pz":[0,0,0,0],"nx":[9,22,1,2],"ny":[21,14,2,5],"nz":[0,-1,-1,-1]},{"size":2,"px":[17,18],"py":[13,6],"pz":[0,-1],"nx":[6,7],"ny":[9,11],"nz":[1,1]},{"size":5,"px":[18,19,20,19,20],"py":[15,19,16,20,17],"pz":[0,0,0,0,0],"nx":[11,22,23,23,23],"ny":[10,22,20,19,19],"nz":[1,0,0,0,-1]},{"size":2,"px":[10,10],"py":[1,0],"pz":[1,1],"nx":[21,11],"ny":[0,4],"nz":[0,-1]},{"size":2,"px":[11,0],"py":[9,3],"pz":[0,-1],"nx":[9,4],"ny":[2,1],"nz":[1,2]},{"size":2,"px":[14,23],"py":[2,18],"pz":[0,-1],"nx":[15,18],"ny":[1,2],"nz":[0,0]},{"size":2,"px":[9,3],"py":[0,0],"pz":[1,-1],"nx":[3,12],"ny":[1,5],"nz":[2,0]},{"size":2,"px":[8,8],"py":[7,8],"pz":[1,1],"nx":[8,8],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[1,0],"py":[1,3],"pz":[2,-1],"nx":[7,19],"ny":[9,15],"nz":[1,0]},{"size":3,"px":[16,6,4],"py":[21,5,4],"pz":[0,-1,-1],"nx":[4,19,8],"ny":[5,21,11],"nz":[2,0,1]},{"size":2,"px":[5,5],"py":[6,6],"pz":[1,-1],"nx":[10,10],"ny":[10,12],"nz":[0,0]},{"size":2,"px":[6,11],"py":[2,5],"pz":[1,0],"nx":[3,4],"ny":[4,7],"nz":[1,-1]},{"size":3,"px":[8,6,2],"py":[4,10,2],"pz":[1,1,2],"nx":[2,18,5],"ny":[0,11,5],"nz":[0,-1,-1]},{"size":2,"px":[11,7],"py":[9,7],"pz":[0,-1],"nx":[12,3],"ny":[9,5],"nz":[0,1]},{"size":2,"px":[14,13],"py":[20,20],"pz":[0,0],"nx":[13,3],"ny":[21,5],"nz":[0,-1]},{"size":2,"px":[13,7],"py":[5,3],"pz":[0,-1],"nx":[3,4],"ny":[1,4],"nz":[2,1]},{"size":2,"px":[6,2],"py":[21,5],"pz":[0,-1],"nx":[2,3],"ny":[5,10],"nz":[2,1]},{"size":2,"px":[23,5],"py":[6,0],"pz":[0,2],"nx":[21,4],"ny":[6,1],"nz":[0,-1]},{"size":2,"px":[9,9],"py":[7,6],"pz":[1,1],"nx":[8,2],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[22,11],"py":[20,9],"pz":[0,1],"nx":[8,8],"ny":[10,10],"nz":[1,-1]},{"size":2,"px":[8,16],"py":[21,12],"pz":[0,-1],"nx":[2,7],"ny":[5,23],"nz":[2,0]},{"size":5,"px":[0,1,1,1,1],"py":[3,1,9,4,7],"pz":[2,2,1,1,1],"nx":[11,22,22,23,23],"ny":[10,21,22,19,20],"nz":[1,0,0,0,-1]},{"size":2,"px":[17,5],"py":[12,4],"pz":[0,-1],"nx":[8,8],"ny":[4,5],"nz":[1,1]},{"size":2,"px":[16,4],"py":[7,10],"pz":[0,-1],"nx":[9,15],"ny":[4,6],"nz":[1,0]},{"size":2,"px":[3,6],"py":[3,5],"pz":[2,1],"nx":[11,12],"ny":[11,23],"nz":[0,-1]},{"size":2,"px":[5,2],"py":[14,7],"pz":[0,1],"nx":[4,17],"ny":[18,16],"nz":[0,-1]},{"size":3,"px":[10,1,1],"py":[12,5,4],"pz":[0,-1,-1],"nx":[7,11,5],"ny":[1,2,1],"nz":[1,0,1]},{"size":2,"px":[7,6],"py":[3,9],"pz":[0,-1],"nx":[2,2],"ny":[2,3],"nz":[2,2]},{"size":2,"px":[13,6],"py":[22,9],"pz":[0,-1],"nx":[8,4],"ny":[4,3],"nz":[1,2]},{"size":5,"px":[12,9,10,11,11],"py":[0,0,0,0,0],"pz":[0,0,0,0,-1],"nx":[16,5,10,4,8],"ny":[10,3,6,4,4],"nz":[0,1,0,1,1]},{"size":2,"px":[18,19],"py":[23,20],"pz":[0,0],"nx":[8,5],"ny":[11,3],"nz":[1,-1]},{"size":2,"px":[8,3],"py":[7,2],"pz":[1,2],"nx":[8,4],"ny":[4,3],"nz":[1,-1]},{"size":5,"px":[8,14,8,7,4],"py":[6,12,8,6,3],"pz":[1,0,1,1,2],"nx":[2,6,6,7,7],"ny":[0,1,2,0,0],"nz":[2,0,0,0,-1]},{"size":3,"px":[1,2,3],"py":[15,18,21],"pz":[0,0,0],"nx":[19,5,18],"ny":[23,5,8],"nz":[0,-1,-1]},{"size":2,"px":[6,2],"py":[6,1],"pz":[1,-1],"nx":[0,0],"ny":[12,4],"nz":[0,1]},{"size":2,"px":[3,5],"py":[5,11],"pz":[2,1],"nx":[14,5],"ny":[19,5],"nz":[0,-1]},{"size":2,"px":[10,4],"py":[4,4],"pz":[1,-1],"nx":[11,5],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[18,4],"py":[6,4],"pz":[0,-1],"nx":[4,8],"ny":[5,4],"nz":[1,1]},{"size":2,"px":[6,12],"py":[2,4],"pz":[1,0],"nx":[8,8],"ny":[3,4],"nz":[1,-1]},{"size":2,"px":[1,0],"py":[1,1],"pz":[1,2],"nx":[7,2],"ny":[4,7],"nz":[0,-1]},{"size":2,"px":[8,0],"py":[20,0],"pz":[0,-1],"nx":[4,5],"ny":[10,11],"nz":[1,1]},{"size":2,"px":[6,14],"py":[5,2],"pz":[1,-1],"nx":[0,0],"ny":[0,2],"nz":[1,0]},{"size":2,"px":[5,15],"py":[4,7],"pz":[1,-1],"nx":[4,7],"ny":[1,2],"nz":[2,1]},{"size":2,"px":[7,5],"py":[2,1],"pz":[0,1],"nx":[3,1],"ny":[4,1],"nz":[1,-1]},{"size":2,"px":[8,9],"py":[4,2],"pz":[0,-1],"nx":[11,9],"ny":[1,3],"nz":[0,0]},{"size":2,"px":[6,3],"py":[2,4],"pz":[1,-1],"nx":[4,8],"ny":[4,4],"nz":[1,1]},{"size":2,"px":[3,7],"py":[3,7],"pz":[2,1],"nx":[6,8],"ny":[14,4],"nz":[0,-1]},{"size":2,"px":[3,0],"py":[21,3],"pz":[0,2],"nx":[20,8],"ny":[10,4],"nz":[0,-1]},{"size":2,"px":[6,3],"py":[5,8],"pz":[0,-1],"nx":[4,3],"ny":[4,2],"nz":[0,1]},{"size":2,"px":[3,6],"py":[7,13],"pz":[1,0],"nx":[3,2],"ny":[4,3],"nz":[1,-1]},{"size":2,"px":[16,10],"py":[9,7],"pz":[0,1],"nx":[7,9],"ny":[3,10],"nz":[1,-1]},{"size":2,"px":[13,10],"py":[6,7],"pz":[0,-1],"nx":[8,17],"ny":[4,12],"nz":[1,0]},{"size":2,"px":[5,10],"py":[4,10],"pz":[2,1],"nx":[5,4],"ny":[9,2],"nz":[1,-1]},{"size":4,"px":[15,3,5,0],"py":[12,4,2,3],"pz":[0,-1,-1,-1],"nx":[13,7,5,7],"ny":[12,6,0,7],"nz":[0,1,2,1]},{"size":4,"px":[2,3,16,17],"py":[3,4,6,6],"pz":[2,1,0,0],"nx":[16,16,8,16],"ny":[8,3,10,13],"nz":[0,-1,-1,-1]},{"size":2,"px":[16,8],"py":[1,4],"pz":[0,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[9,14],"py":[6,2],"pz":[1,-1],"nx":[8,8],"ny":[6,4],"nz":[1,1]},{"size":2,"px":[8,4],"py":[10,4],"pz":[1,2],"nx":[10,0],"ny":[5,7],"nz":[1,-1]},{"size":2,"px":[9,10],"py":[4,4],"pz":[0,0],"nx":[9,7],"ny":[3,5],"nz":[0,-1]},{"size":5,"px":[11,10,13,6,12],"py":[2,2,2,1,2],"pz":[0,0,0,1,0],"nx":[4,18,18,13,13],"ny":[2,18,19,7,7],"nz":[2,0,0,0,-1]},{"size":4,"px":[13,13,13,2],"py":[13,12,11,3],"pz":[0,0,0,-1],"nx":[4,6,8,11],"ny":[2,2,4,4],"nz":[2,1,1,0]},{"size":2,"px":[4,7],"py":[6,13],"pz":[1,0],"nx":[8,10],"ny":[4,22],"nz":[1,-1]},{"size":2,"px":[0,7],"py":[4,17],"pz":[1,-1],"nx":[0,1],"ny":[5,21],"nz":[2,0]},{"size":2,"px":[12,13],"py":[22,22],"pz":[0,0],"nx":[2,2],"ny":[13,13],"nz":[0,-1]},{"size":3,"px":[4,4,3],"py":[22,23,19],"pz":[0,0,0],"nx":[8,12,3],"ny":[22,15,2],"nz":[0,-1,-1]},{"size":2,"px":[10,12],"py":[3,13],"pz":[0,-1],"nx":[15,2],"ny":[10,2],"nz":[0,2]},{"size":2,"px":[1,1],"py":[3,3],"pz":[2,-1],"nx":[8,4],"ny":[0,0],"nz":[1,2]},{"size":2,"px":[6,12],"py":[6,18],"pz":[1,0],"nx":[12,19],"ny":[17,16],"nz":[0,-1]},{"size":2,"px":[10,5],"py":[2,1],"pz":[0,1],"nx":[5,4],"ny":[4,17],"nz":[0,-1]},{"size":3,"px":[3,12,11],"py":[5,23,23],"pz":[2,0,0],"nx":[12,4,4],"ny":[21,17,1],"nz":[0,-1,-1]},{"size":2,"px":[12,0],"py":[21,5],"pz":[0,-1],"nx":[0,0],"ny":[7,9],"nz":[1,1]},{"size":2,"px":[17,17],"py":[12,11],"pz":[0,0],"nx":[8,11],"ny":[4,11],"nz":[1,-1]},{"size":2,"px":[11,0],"py":[22,1],"pz":[0,-1],"nx":[4,6],"ny":[1,0],"nz":[1,1]},{"size":2,"px":[11,11],"py":[9,5],"pz":[1,1],"nx":[23,11],"ny":[23,20],"nz":[0,-1]},{"size":5,"px":[4,12,11,9,8],"py":[0,1,1,0,1],"pz":[1,0,0,0,0],"nx":[4,17,8,7,7],"ny":[2,13,4,4,4],"nz":[2,0,1,1,-1]},{"size":2,"px":[11,13],"py":[12,12],"pz":[0,-1],"nx":[1,1],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[23,4],"py":[23,2],"pz":[0,-1],"nx":[5,2],"ny":[23,6],"nz":[0,1]},{"size":3,"px":[8,16,0],"py":[5,15,6],"pz":[1,-1,-1],"nx":[23,23,11],"ny":[18,17,8],"nz":[0,0,1]},{"size":2,"px":[1,16],"py":[4,15],"pz":[2,-1],"nx":[2,2],"ny":[3,2],"nz":[2,2]},{"size":2,"px":[3,8],"py":[7,9],"pz":[1,-1],"nx":[4,2],"ny":[10,5],"nz":[1,2]},{"size":3,"px":[22,1,9],"py":[23,2,3],"pz":[0,-1,-1],"nx":[2,2,5],"ny":[5,4,19],"nz":[2,2,0]},{"size":2,"px":[2,20],"py":[5,15],"pz":[1,-1],"nx":[2,1],"ny":[1,2],"nz":[2,2]},{"size":2,"px":[4,8],"py":[1,19],"pz":[1,-1],"nx":[2,2],"ny":[5,4],"nz":[2,2]},{"size":2,"px":[9,10],"py":[21,0],"pz":[0,-1],"nx":[6,5],"ny":[1,1],"nz":[1,1]},{"size":2,"px":[4,8],"py":[3,6],"pz":[2,1],"nx":[9,2],"ny":[4,1],"nz":[1,-1]},{"size":3,"px":[17,3,10],"py":[8,0,2],"pz":[0,2,0],"nx":[13,2,6],"ny":[15,5,1],"nz":[0,-1,-1]},{"size":2,"px":[9,6],"py":[20,21],"pz":[0,-1],"nx":[4,2],"ny":[10,5],"nz":[1,2]},{"size":2,"px":[3,7],"py":[0,1],"pz":[2,1],"nx":[7,20],"ny":[1,19],"nz":[0,-1]},{"size":2,"px":[4,5],"py":[0,1],"pz":[1,0],"nx":[3,2],"ny":[4,2],"nz":[0,-1]},{"size":2,"px":[2,7],"py":[4,19],"pz":[2,0],"nx":[5,2],"ny":[10,2],"nz":[1,-1]},{"size":5,"px":[3,3,4,7,7],"py":[1,0,0,0,1],"pz":[1,1,1,0,0],"nx":[5,4,10,8,8],"ny":[3,3,5,4,4],"nz":[1,1,0,1,-1]},{"size":2,"px":[1,5],"py":[0,3],"pz":[1,-1],"nx":[1,0],"ny":[0,1],"nz":[0,1]},{"size":2,"px":[10,0],"py":[5,5],"pz":[0,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[0,9],"py":[0,4],"pz":[2,-1],"nx":[13,10],"ny":[0,0],"nz":[0,0]},{"size":2,"px":[13,4],"py":[14,5],"pz":[0,-1],"nx":[4,2],"ny":[0,0],"nz":[0,1]},{"size":2,"px":[17,4],"py":[13,3],"pz":[0,-1],"nx":[4,2],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[1,0],"py":[6,2],"pz":[1,-1],"nx":[1,6],"ny":[2,12],"nz":[2,0]},{"size":2,"px":[12,4],"py":[6,0],"pz":[0,-1],"nx":[3,3],"ny":[8,9],"nz":[1,1]},{"size":2,"px":[1,5],"py":[1,5],"pz":[1,-1],"nx":[17,17],"ny":[13,7],"nz":[0,0]},{"size":2,"px":[7,3],"py":[12,6],"pz":[0,1],"nx":[3,4],"ny":[4,11],"nz":[1,-1]},{"size":2,"px":[6,17],"py":[2,8],"pz":[1,0],"nx":[3,3],"ny":[1,2],"nz":[1,-1]},{"size":3,"px":[13,6,6],"py":[22,11,10],"pz":[0,1,1],"nx":[13,12,11],"ny":[20,20,20],"nz":[0,0,0]},{"size":2,"px":[4,2],"py":[6,3],"pz":[1,2],"nx":[3,12],"ny":[4,20],"nz":[1,-1]},{"size":2,"px":[5,2],"py":[1,1],"pz":[1,-1],"nx":[13,6],"ny":[0,0],"nz":[0,1]},{"size":2,"px":[2,8],"py":[3,9],"pz":[2,0],"nx":[8,16],"ny":[5,17],"nz":[0,-1]},{"size":2,"px":[16,15],"py":[1,1],"pz":[0,0],"nx":[7,11],"ny":[8,0],"nz":[1,-1]},{"size":2,"px":[11,18],"py":[21,23],"pz":[0,-1],"nx":[1,1],"ny":[4,3],"nz":[1,2]},{"size":2,"px":[1,5],"py":[0,2],"pz":[1,-1],"nx":[15,11],"ny":[8,7],"nz":[0,0]},{"size":2,"px":[5,4],"py":[7,8],"pz":[1,-1],"nx":[9,10],"ny":[13,11],"nz":[0,0]},{"size":2,"px":[7,4],"py":[10,4],"pz":[1,2],"nx":[22,4],"ny":[0,2],"nz":[0,-1]},{"size":2,"px":[11,3],"py":[3,1],"pz":[0,2],"nx":[8,0],"ny":[4,0],"nz":[1,-1]},{"size":2,"px":[5,21],"py":[11,22],"pz":[0,-1],"nx":[10,11],"ny":[11,9],"nz":[0,0]},{"size":2,"px":[5,5],"py":[0,1],"pz":[2,2],"nx":[2,21],"ny":[6,14],"nz":[0,-1]},{"size":3,"px":[10,10,1],"py":[11,0,5],"pz":[0,-1,-1],"nx":[6,12,5],"ny":[2,5,2],"nz":[1,0,1]},{"size":2,"px":[9,10],"py":[5,6],"pz":[0,0],"nx":[12,19],"ny":[23,5],"nz":[0,-1]},{"size":2,"px":[11,5],"py":[9,6],"pz":[0,1],"nx":[21,0],"ny":[23,0],"nz":[0,-1]},{"size":2,"px":[13,12],"py":[19,15],"pz":[0,0],"nx":[13,0],"ny":[17,0],"nz":[0,-1]},{"size":2,"px":[14,0],"py":[17,3],"pz":[0,-1],"nx":[7,16],"ny":[8,19],"nz":[1,0]},{"size":2,"px":[3,6],"py":[2,4],"pz":[2,1],"nx":[8,1],"ny":[4,4],"nz":[1,-1]},{"size":2,"px":[13,10],"py":[23,20],"pz":[0,-1],"nx":[4,7],"ny":[5,10],"nz":[2,1]},{"size":2,"px":[16,9],"py":[22,5],"pz":[0,-1],"nx":[4,2],"ny":[10,3],"nz":[1,2]},{"size":4,"px":[3,1,1,5],"py":[4,2,1,2],"pz":[0,2,2,1],"nx":[13,5,8,0],"ny":[22,2,9,2],"nz":[0,-1,-1,-1]},{"size":2,"px":[9,9],"py":[0,0],"pz":[1,-1],"nx":[19,20],"ny":[1,2],"nz":[0,0]},{"size":2,"px":[7,22],"py":[6,8],"pz":[1,0],"nx":[4,4],"ny":[2,4],"nz":[2,-1]},{"size":2,"px":[3,6],"py":[4,4],"pz":[2,1],"nx":[10,20],"ny":[10,6],"nz":[0,-1]},{"size":2,"px":[6,12],"py":[6,15],"pz":[1,-1],"nx":[0,0],"ny":[2,5],"nz":[2,1]},{"size":2,"px":[2,7],"py":[4,10],"pz":[2,-1],"nx":[3,6],"ny":[4,8],"nz":[2,1]},{"size":3,"px":[11,11,4],"py":[0,5,7],"pz":[1,-1,-1],"nx":[6,12,12],"ny":[1,1,2],"nz":[1,0,0]},{"size":2,"px":[11,17],"py":[4,18],"pz":[0,-1],"nx":[8,2],"ny":[10,2],"nz":[0,2]},{"size":2,"px":[17,17],"py":[10,18],"pz":[0,-1],"nx":[8,8],"ny":[2,3],"nz":[1,1]},{"size":2,"px":[9,9],"py":[7,7],"pz":[1,-1],"nx":[7,4],"ny":[6,3],"nz":[1,2]},{"size":2,"px":[18,21],"py":[0,0],"pz":[0,-1],"nx":[11,6],"ny":[5,3],"nz":[0,1]},{"size":2,"px":[5,2],"py":[8,4],"pz":[0,2],"nx":[5,8],"ny":[9,16],"nz":[0,-1]},{"size":2,"px":[12,2],"py":[5,4],"pz":[0,-1],"nx":[4,15],"ny":[4,8],"nz":[1,0]},{"size":2,"px":[1,1],"py":[4,6],"pz":[1,1],"nx":[11,3],"ny":[7,9],"nz":[0,-1]},{"size":2,"px":[2,1],"py":[3,3],"pz":[2,2],"nx":[2,2],"ny":[15,16],"nz":[0,0]},{"size":2,"px":[17,18],"py":[5,5],"pz":[0,0],"nx":[9,21],"ny":[2,10],"nz":[1,-1]},{"size":2,"px":[6,3],"py":[14,7],"pz":[0,1],"nx":[3,4],"ny":[4,5],"nz":[1,-1]},{"size":2,"px":[0,3],"py":[3,1],"pz":[1,-1],"nx":[19,10],"ny":[12,4],"nz":[0,1]},{"size":2,"px":[6,16],"py":[3,8],"pz":[1,0],"nx":[8,10],"ny":[20,4],"nz":[0,-1]},{"size":3,"px":[5,5,2],"py":[21,8,4],"pz":[0,1,2],"nx":[10,6,3],"ny":[15,2,1],"nz":[0,-1,-1]},{"size":2,"px":[11,10],"py":[10,12],"pz":[0,0],"nx":[11,11],"ny":[2,1],"nz":[1,-1]},{"size":2,"px":[10,10],"py":[3,2],"pz":[1,1],"nx":[8,11],"ny":[3,5],"nz":[1,-1]},{"size":2,"px":[13,3],"py":[5,8],"pz":[0,-1],"nx":[12,3],"ny":[3,1],"nz":[0,2]},{"size":2,"px":[13,7],"py":[2,1],"pz":[0,1],"nx":[5,5],"ny":[1,1],"nz":[0,-1]},{"size":2,"px":[11,10],"py":[10,8],"pz":[0,-1],"nx":[14,16],"ny":[10,15],"nz":[0,0]},{"size":2,"px":[2,10],"py":[7,8],"pz":[1,-1],"nx":[2,6],"ny":[5,6],"nz":[2,1]},{"size":2,"px":[10,10],"py":[1,8],"pz":[0,-1],"nx":[2,2],"ny":[3,2],"nz":[2,2]},{"size":2,"px":[4,0],"py":[5,2],"pz":[1,-1],"nx":[1,2],"ny":[2,3],"nz":[2,1]},{"size":2,"px":[1,12],"py":[1,9],"pz":[2,-1],"nx":[16,17],"ny":[3,3],"nz":[0,0]},{"size":2,"px":[12,6],"py":[5,8],"pz":[0,-1],"nx":[3,4],"ny":[7,4],"nz":[1,1]},{"size":2,"px":[14,3],"py":[11,5],"pz":[0,-1],"nx":[11,4],"ny":[0,0],"nz":[0,1]},{"size":2,"px":[6,10],"py":[6,6],"pz":[1,-1],"nx":[0,0],"ny":[1,0],"nz":[2,2]},{"size":2,"px":[3,7],"py":[0,7],"pz":[1,-1],"nx":[15,13],"ny":[8,4],"nz":[0,0]},{"size":2,"px":[18,1],"py":[15,0],"pz":[0,-1],"nx":[18,18],"ny":[18,17],"nz":[0,0]},{"size":2,"px":[5,2],"py":[4,4],"pz":[0,-1],"nx":[4,18],"ny":[4,15],"nz":[1,0]},{"size":3,"px":[3,14,13],"py":[2,7,8],"pz":[2,0,0],"nx":[10,0,2],"ny":[8,3,2],"nz":[0,-1,-1]},{"size":2,"px":[16,0],"py":[14,3],"pz":[0,-1],"nx":[18,3],"ny":[12,5],"nz":[0,2]},{"size":2,"px":[5,3],"py":[8,3],"pz":[1,2],"nx":[13,4],"ny":[10,4],"nz":[0,-1]},{"size":2,"px":[3,6],"py":[1,2],"pz":[2,1],"nx":[8,1],"ny":[4,20],"nz":[1,-1]},{"size":2,"px":[10,10],"py":[8,3],"pz":[1,-1],"nx":[12,7],"ny":[2,1],"nz":[0,1]},{"size":2,"px":[17,3],"py":[9,2],"pz":[0,2],"nx":[7,6],"ny":[4,0],"nz":[1,-1]},{"size":2,"px":[12,1],"py":[2,1],"pz":[0,-1],"nx":[4,4],"ny":[2,3],"nz":[2,2]},{"size":2,"px":[22,5],"py":[15,3],"pz":[0,2],"nx":[16,17],"ny":[14,2],"nz":[0,-1]},{"size":2,"px":[8,11],"py":[19,13],"pz":[0,-1],"nx":[0,0],"ny":[2,4],"nz":[2,1]},{"size":2,"px":[8,11],"py":[8,1],"pz":[1,-1],"nx":[3,3],"ny":[2,5],"nz":[1,2]},{"size":3,"px":[3,8,0],"py":[7,7,5],"pz":[1,-1,-1],"nx":[11,5,1],"ny":[11,7,5],"nz":[0,1,1]},{"size":2,"px":[12,6],"py":[12,6],"pz":[0,1],"nx":[9,0],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[16,12],"py":[7,1],"pz":[0,-1],"nx":[16,7],"ny":[6,4],"nz":[0,1]},{"size":2,"px":[13,5],"py":[14,0],"pz":[0,-1],"nx":[13,10],"ny":[0,0],"nz":[0,0]},{"size":5,"px":[11,12,13,12,7],"py":[0,1,0,0,0],"pz":[0,0,0,0,1],"nx":[13,16,14,4,4],"ny":[18,23,18,5,5],"nz":[0,0,0,2,-1]},{"size":2,"px":[14,5],"py":[12,4],"pz":[0,-1],"nx":[7,7],"ny":[8,2],"nz":[1,1]},{"size":2,"px":[19,3],"py":[2,5],"pz":[0,-1],"nx":[11,23],"ny":[7,13],"nz":[1,0]},{"size":2,"px":[0,0],"py":[19,20],"pz":[0,0],"nx":[9,4],"ny":[5,2],"nz":[0,-1]},{"size":2,"px":[15,4],"py":[12,3],"pz":[0,2],"nx":[9,5],"ny":[4,5],"nz":[1,-1]},{"size":4,"px":[8,0,1,21],"py":[6,0,7,16],"pz":[1,-1,-1,-1],"nx":[11,6,11,5],"ny":[8,6,4,3],"nz":[1,1,1,2]},{"size":2,"px":[11,11],"py":[7,5],"pz":[0,-1],"nx":[9,10],"ny":[6,7],"nz":[0,0]},{"size":2,"px":[2,4],"py":[1,2],"pz":[2,1],"nx":[16,6],"ny":[0,1],"nz":[0,-1]},{"size":2,"px":[0,0],"py":[5,3],"pz":[1,2],"nx":[1,21],"ny":[23,8],"nz":[0,-1]},{"size":2,"px":[10,0],"py":[7,0],"pz":[0,-1],"nx":[4,13],"ny":[4,10],"nz":[1,0]},{"size":2,"px":[11,4],"py":[0,4],"pz":[1,-1],"nx":[4,2],"ny":[16,8],"nz":[0,1]},{"size":2,"px":[5,3],"py":[12,6],"pz":[0,1],"nx":[3,3],"ny":[4,2],"nz":[1,-1]},{"size":2,"px":[10,0],"py":[19,11],"pz":[0,-1],"nx":[9,5],"ny":[21,9],"nz":[0,1]},{"size":2,"px":[0,0],"py":[17,9],"pz":[0,1],"nx":[0,5],"ny":[0,9],"nz":[2,-1]},{"size":2,"px":[4,5],"py":[2,4],"pz":[0,-1],"nx":[4,4],"ny":[5,6],"nz":[1,1]},{"size":2,"px":[8,4],"py":[1,0],"pz":[1,2],"nx":[4,3],"ny":[3,6],"nz":[0,-1]},{"size":2,"px":[11,0],"py":[7,2],"pz":[1,-1],"nx":[5,5],"ny":[1,0],"nz":[2,2]},{"size":2,"px":[13,0],"py":[17,2],"pz":[0,-1],"nx":[3,6],"ny":[5,8],"nz":[2,1]},{"size":2,"px":[2,1],"py":[0,5],"pz":[2,-1],"nx":[4,9],"ny":[2,7],"nz":[2,1]},{"size":2,"px":[12,5],"py":[13,8],"pz":[0,-1],"nx":[23,11],"ny":[13,7],"nz":[0,1]},{"size":2,"px":[0,0],"py":[0,2],"pz":[1,0],"nx":[3,6],"ny":[11,18],"nz":[0,-1]},{"size":2,"px":[4,3],"py":[6,5],"pz":[0,-1],"nx":[1,1],"ny":[1,3],"nz":[2,1]},{"size":4,"px":[3,6,3,6],"py":[3,6,2,5],"pz":[2,1,2,1],"nx":[0,4,1,1],"ny":[0,22,17,0],"nz":[0,-1,-1,-1]},{"size":2,"px":[8,4],"py":[6,3],"pz":[1,2],"nx":[9,15],"ny":[4,8],"nz":[1,-1]},{"size":2,"px":[8,18],"py":[7,8],"pz":[1,0],"nx":[8,5],"ny":[4,0],"nz":[1,-1]},{"size":2,"px":[0,0],"py":[4,5],"pz":[1,-1],"nx":[5,6],"ny":[0,0],"nz":[1,1]},{"size":2,"px":[13,18],"py":[23,19],"pz":[0,0],"nx":[7,13],"ny":[10,20],"nz":[1,-1]},{"size":2,"px":[10,6],"py":[2,0],"pz":[0,1],"nx":[4,1],"ny":[5,1],"nz":[1,-1]},{"size":2,"px":[1,1],"py":[5,4],"pz":[2,2],"nx":[0,20],"ny":[4,4],"nz":[2,-1]},{"size":2,"px":[5,5],"py":[1,0],"pz":[2,2],"nx":[12,6],"ny":[18,11],"nz":[0,-1]},{"size":5,"px":[2,1,3,1,5],"py":[3,3,7,4,9],"pz":[2,2,1,2,1],"nx":[9,3,8,16,10],"ny":[5,3,10,6,7],"nz":[1,-1,-1,-1,-1]},{"size":2,"px":[4,1],"py":[12,3],"pz":[0,-1],"nx":[10,1],"ny":[11,2],"nz":[0,2]},{"size":2,"px":[19,0],"py":[10,7],"pz":[0,-1],"nx":[14,7],"ny":[6,3],"nz":[0,1]},{"size":2,"px":[7,4],"py":[2,1],"pz":[1,2],"nx":[6,0],"ny":[2,18],"nz":[0,-1]},{"size":2,"px":[14,8],"py":[3,0],"pz":[0,1],"nx":[17,1],"ny":[1,4],"nz":[0,-1]},{"size":2,"px":[18,19],"py":[1,17],"pz":[0,-1],"nx":[5,11],"ny":[2,5],"nz":[2,1]},{"size":5,"px":[12,12,12,6,12],"py":[10,11,12,6,9],"pz":[0,0,0,1,0],"nx":[13,3,12,6,6],"ny":[4,1,4,2,2],"nz":[0,2,0,1,-1]},{"size":2,"px":[11,10],"py":[3,3],"pz":[0,0],"nx":[4,9],"ny":[4,17],"nz":[1,-1]},{"size":2,"px":[11,0],"py":[13,5],"pz":[0,2],"nx":[8,18],"ny":[15,15],"nz":[0,-1]},{"size":2,"px":[3,4],"py":[6,5],"pz":[1,1],"nx":[0,0],"ny":[9,4],"nz":[1,-1]},{"size":2,"px":[0,0],"py":[1,0],"pz":[2,2],"nx":[2,15],"ny":[2,1],"nz":[2,-1]},{"size":3,"px":[2,4,2],"py":[4,9,5],"pz":[2,1,2],"nx":[2,5,14],"ny":[0,1,4],"nz":[0,-1,-1]},{"size":2,"px":[11,12],"py":[20,20],"pz":[0,0],"nx":[6,10],"ny":[9,19],"nz":[1,-1]},{"size":2,"px":[7,0],"py":[16,8],"pz":[0,-1],"nx":[2,3],"ny":[2,4],"nz":[2,1]},{"size":5,"px":[16,17,15,16,15],"py":[1,1,1,0,0],"pz":[0,0,0,0,0],"nx":[8,8,4,12,12],"ny":[8,7,2,23,23],"nz":[1,1,2,0,-1]},{"size":2,"px":[2,4],"py":[6,12],"pz":[1,-1],"nx":[8,13],"ny":[1,1],"nz":[1,0]},{"size":2,"px":[9,2],"py":[3,2],"pz":[0,-1],"nx":[3,4],"ny":[6,5],"nz":[1,1]},{"size":2,"px":[10,8],"py":[6,1],"pz":[1,-1],"nx":[11,8],"ny":[2,2],"nz":[0,0]},{"size":2,"px":[9,3],"py":[7,0],"pz":[1,-1],"nx":[19,19],"ny":[18,16],"nz":[0,0]},{"size":2,"px":[3,2],"py":[1,1],"pz":[2,2],"nx":[22,11],"ny":[4,0],"nz":[0,-1]},{"size":2,"px":[10,10],"py":[9,8],"pz":[1,1],"nx":[4,4],"ny":[10,2],"nz":[1,-1]},{"size":2,"px":[0,1],"py":[0,5],"pz":[0,-1],"nx":[10,8],"ny":[2,2],"nz":[0,0]},{"size":2,"px":[3,3],"py":[8,7],"pz":[1,1],"nx":[8,2],"ny":[8,3],"nz":[0,-1]},{"size":2,"px":[13,5],"py":[21,3],"pz":[0,-1],"nx":[13,3],"ny":[20,5],"nz":[0,2]},{"size":2,"px":[12,5],"py":[11,2],"pz":[0,-1],"nx":[1,0],"ny":[19,9],"nz":[0,1]},{"size":2,"px":[7,10],"py":[9,10],"pz":[1,1],"nx":[8,4],"ny":[10,2],"nz":[1,-1]},{"size":2,"px":[0,0],"py":[5,9],"pz":[2,1],"nx":[2,11],"ny":[9,19],"nz":[1,-1]},{"size":2,"px":[3,5],"py":[1,2],"pz":[2,1],"nx":[8,23],"ny":[4,9],"nz":[1,-1]},{"size":2,"px":[3,4],"py":[2,4],"pz":[2,1],"nx":[5,9],"ny":[2,5],"nz":[2,-1]},{"size":2,"px":[11,11],"py":[2,3],"pz":[1,1],"nx":[19,9],"ny":[6,5],"nz":[0,-1]},{"size":2,"px":[9,4],"py":[5,10],"pz":[1,-1],"nx":[10,22],"ny":[0,16],"nz":[1,0]},{"size":3,"px":[19,9,19],"py":[3,1,2],"pz":[0,1,0],"nx":[6,3,6],"ny":[10,3,0],"nz":[1,-1,-1]},{"size":2,"px":[8,3],"py":[10,3],"pz":[1,2],"nx":[23,14],"ny":[3,18],"nz":[0,-1]},{"size":2,"px":[11,11],"py":[19,0],"pz":[0,-1],"nx":[4,16],"ny":[4,11],"nz":[1,0]},{"size":2,"px":[22,23],"py":[3,22],"pz":[0,-1],"nx":[9,3],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[7,2],"py":[12,4],"pz":[0,-1],"nx":[8,4],"ny":[10,5],"nz":[0,1]},{"size":2,"px":[12,13],"py":[5,13],"pz":[0,-1],"nx":[11,3],"ny":[2,0],"nz":[0,2]},{"size":2,"px":[3,17],"py":[0,16],"pz":[1,-1],"nx":[12,12],"ny":[5,6],"nz":[0,0]},{"size":2,"px":[4,3],"py":[1,0],"pz":[2,2],"nx":[4,3],"ny":[0,3],"nz":[0,-1]},{"size":2,"px":[10,3],"py":[12,0],"pz":[0,-1],"nx":[12,12],"ny":[13,12],"nz":[0,0]},{"size":2,"px":[13,4],"py":[11,14],"pz":[0,-1],"nx":[0,0],"ny":[4,6],"nz":[1,0]},{"size":2,"px":[8,7],"py":[7,8],"pz":[1,1],"nx":[3,0],"ny":[5,21],"nz":[2,-1]},{"size":2,"px":[1,3],"py":[4,14],"pz":[2,0],"nx":[8,8],"ny":[7,7],"nz":[1,-1]},{"size":2,"px":[13,11],"py":[20,7],"pz":[0,-1],"nx":[21,21],"ny":[20,18],"nz":[0,0]},{"size":2,"px":[2,1],"py":[11,0],"pz":[0,-1],"nx":[2,2],"ny":[15,14],"nz":[0,0]},{"size":2,"px":[10,1],"py":[8,0],"pz":[1,-1],"nx":[8,4],"ny":[7,4],"nz":[1,2]},{"size":2,"px":[17,6],"py":[13,1],"pz":[0,-1],"nx":[4,8],"ny":[2,4],"nz":[2,1]},{"size":2,"px":[7,15],"py":[1,3],"pz":[1,0],"nx":[15,5],"ny":[1,8],"nz":[0,-1]},{"size":2,"px":[16,1],"py":[20,10],"pz":[0,-1],"nx":[6,8],"ny":[11,10],"nz":[1,1]},{"size":2,"px":[7,14],"py":[0,0],"pz":[1,0],"nx":[7,8],"ny":[7,3],"nz":[1,-1]},{"size":2,"px":[12,5],"py":[17,4],"pz":[0,-1],"nx":[12,5],"ny":[16,10],"nz":[0,1]},{"size":2,"px":[13,3],"py":[15,0],"pz":[0,-1],"nx":[12,7],"ny":[17,8],"nz":[0,1]},{"size":2,"px":[7,1],"py":[14,1],"pz":[0,-1],"nx":[4,6],"ny":[6,12],"nz":[1,0]},{"size":2,"px":[8,7],"py":[0,0],"pz":[0,0],"nx":[6,20],"ny":[5,5],"nz":[0,-1]},{"size":2,"px":[10,2],"py":[22,5],"pz":[0,-1],"nx":[4,8],"ny":[4,9],"nz":[2,1]},{"size":4,"px":[8,2,2,9],"py":[6,5,3,11],"pz":[1,-1,-1,-1],"nx":[2,7,4,3],"ny":[2,1,0,2],"nz":[2,0,1,2]},{"size":2,"px":[12,6],"py":[12,6],"pz":[0,1],"nx":[8,2],"ny":[4,1],"nz":[1,-1]},{"size":2,"px":[13,11],"py":[19,8],"pz":[0,-1],"nx":[13,13],"ny":[20,17],"nz":[0,0]},{"size":2,"px":[11,19],"py":[5,14],"pz":[0,-1],"nx":[3,4],"ny":[8,4],"nz":[1,1]},{"size":2,"px":[10,0],"py":[8,6],"pz":[1,-1],"nx":[21,21],"ny":[16,15],"nz":[0,0]},{"size":2,"px":[1,12],"py":[7,6],"pz":[1,-1],"nx":[2,7],"ny":[5,14],"nz":[2,0]},{"size":2,"px":[2,9],"py":[7,5],"pz":[1,-1],"nx":[2,5],"ny":[5,9],"nz":[2,1]},{"size":2,"px":[12,5],"py":[15,6],"pz":[0,-1],"nx":[3,12],"ny":[0,2],"nz":[2,0]},{"size":2,"px":[23,22],"py":[23,1],"pz":[0,-1],"nx":[0,0],"ny":[2,3],"nz":[2,2]},{"size":2,"px":[3,6],"py":[1,2],"pz":[2,1],"nx":[8,0],"ny":[4,3],"nz":[1,-1]},{"size":2,"px":[5,1],"py":[9,1],"pz":[0,-1],"nx":[4,2],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[0,1],"py":[0,0],"pz":[2,0],"nx":[2,3],"ny":[9,10],"nz":[0,-1]},{"size":2,"px":[6,0],"py":[16,14],"pz":[0,-1],"nx":[6,3],"ny":[23,14],"nz":[0,0]},{"size":2,"px":[3,3],"py":[2,3],"pz":[2,1],"nx":[13,3],"ny":[19,14],"nz":[0,-1]},{"size":2,"px":[11,5],"py":[8,18],"pz":[0,-1],"nx":[4,7],"ny":[1,2],"nz":[2,1]},{"size":2,"px":[4,4],"py":[5,6],"pz":[1,1],"nx":[2,2],"ny":[5,3],"nz":[2,-1]},{"size":2,"px":[7,3],"py":[13,7],"pz":[0,1],"nx":[4,3],"ny":[4,1],"nz":[1,-1]},{"size":2,"px":[0,0],"py":[5,6],"pz":[1,0],"nx":[2,1],"ny":[5,1],"nz":[1,-1]},{"size":2,"px":[7,14],"py":[3,5],"pz":[1,0],"nx":[5,0],"ny":[16,7],"nz":[0,-1]},{"size":2,"px":[11,2],"py":[18,5],"pz":[0,2],"nx":[11,4],"ny":[16,4],"nz":[0,-1]},{"size":2,"px":[6,16],"py":[19,20],"pz":[0,-1],"nx":[3,2],"ny":[10,5],"nz":[1,2]},{"size":2,"px":[5,3],"py":[3,1],"pz":[0,1],"nx":[1,3],"ny":[4,8],"nz":[0,-1]},{"size":2,"px":[12,6],"py":[13,6],"pz":[0,1],"nx":[10,1],"ny":[12,2],"nz":[0,-1]},{"size":2,"px":[8,3],"py":[6,2],"pz":[1,-1],"nx":[4,8],"ny":[2,4],"nz":[2,1]},{"size":2,"px":[9,3],"py":[21,2],"pz":[0,-1],"nx":[8,4],"ny":[1,0],"nz":[1,2]},{"size":2,"px":[8,4],"py":[1,0],"pz":[1,-1],"nx":[8,6],"ny":[4,2],"nz":[1,1]},{"size":2,"px":[2,7],"py":[1,6],"pz":[2,-1],"nx":[7,9],"ny":[6,4],"nz":[1,1]},{"size":2,"px":[6,3],"py":[8,3],"pz":[1,2],"nx":[10,5],"ny":[19,11],"nz":[0,-1]},{"size":2,"px":[2,2],"py":[3,4],"pz":[2,2],"nx":[3,6],"ny":[4,6],"nz":[1,-1]},{"size":2,"px":[3,11],"py":[5,20],"pz":[2,0],"nx":[11,5],"ny":[21,8],"nz":[0,-1]},{"size":3,"px":[5,9,5],"py":[4,7,5],"pz":[2,0,2],"nx":[23,10,4],"ny":[23,3,22],"nz":[0,-1,-1]},{"size":4,"px":[11,9,7,1],"py":[13,8,11,10],"pz":[0,-1,-1,-1],"nx":[8,2,11,12],"ny":[4,2,4,4],"nz":[1,2,0,0]},{"size":2,"px":[0,0],"py":[7,6],"pz":[1,1],"nx":[0,4],"ny":[1,0],"nz":[2,-1]},{"size":2,"px":[19,20],"py":[0,1],"pz":[0,0],"nx":[21,1],"ny":[0,2],"nz":[0,-1]},{"size":2,"px":[8,5],"py":[11,0],"pz":[0,-1],"nx":[11,0],"ny":[12,1],"nz":[0,2]},{"size":2,"px":[11,11],"py":[1,1],"pz":[0,-1],"nx":[4,7],"ny":[5,4],"nz":[1,1]},{"size":2,"px":[5,12],"py":[4,23],"pz":[2,-1],"nx":[13,15],"ny":[5,4],"nz":[0,0]},{"size":2,"px":[12,20],"py":[4,16],"pz":[0,-1],"nx":[9,4],"ny":[2,1],"nz":[0,1]},{"size":2,"px":[12,13],"py":[2,2],"pz":[0,0],"nx":[4,16],"ny":[2,11],"nz":[2,0]},{"size":2,"px":[19,14],"py":[10,17],"pz":[0,-1],"nx":[3,8],"ny":[0,2],"nz":[2,0]},{"size":2,"px":[8,12],"py":[1,2],"pz":[1,0],"nx":[19,10],"ny":[3,1],"nz":[0,-1]},{"size":4,"px":[17,2,3,10],"py":[8,6,2,12],"pz":[0,1,2,0],"nx":[17,9,12,2],"ny":[9,22,13,5],"nz":[0,-1,-1,-1]},{"size":2,"px":[20,10],"py":[15,7],"pz":[0,1],"nx":[13,9],"ny":[7,3],"nz":[0,-1]},{"size":2,"px":[0,0],"py":[1,0],"pz":[2,2],"nx":[10,3],"ny":[9,2],"nz":[1,-1]},{"size":2,"px":[4,3],"py":[1,0],"pz":[2,2],"nx":[0,22],"ny":[14,6],"nz":[0,-1]},{"size":2,"px":[16,3],"py":[4,0],"pz":[0,2],"nx":[16,3],"ny":[2,0],"nz":[0,-1]},{"size":2,"px":[8,16],"py":[6,12],"pz":[1,0],"nx":[8,12],"ny":[4,7],"nz":[1,-1]},{"size":2,"px":[5,11],"py":[0,5],"pz":[2,1],"nx":[10,1],"ny":[5,5],"nz":[1,-1]},{"size":2,"px":[7,4],"py":[5,5],"pz":[0,-1],"nx":[3,6],"ny":[2,3],"nz":[1,0]},{"size":2,"px":[11,11],"py":[11,12],"pz":[0,0],"nx":[23,7],"ny":[20,2],"nz":[0,-1]},{"size":2,"px":[16,8],"py":[12,5],"pz":[0,1],"nx":[8,2],"ny":[2,1],"nz":[1,-1]},{"size":3,"px":[6,11,11],"py":[11,23,20],"pz":[1,0,0],"nx":[11,3,22],"ny":[21,3,16],"nz":[0,-1,-1]},{"size":2,"px":[17,15],"py":[3,2],"pz":[0,-1],"nx":[4,4],"ny":[3,2],"nz":[2,2]},{"size":2,"px":[21,21],"py":[11,10],"pz":[0,0],"nx":[11,3],"ny":[6,2],"nz":[1,-1]},{"size":2,"px":[23,21],"py":[22,10],"pz":[0,-1],"nx":[20,10],"ny":[18,10],"nz":[0,1]},{"size":2,"px":[4,2],"py":[6,3],"pz":[1,2],"nx":[3,2],"ny":[4,3],"nz":[1,-1]},{"size":2,"px":[16,0],"py":[18,11],"pz":[0,-1],"nx":[8,7],"ny":[4,4],"nz":[0,0]},{"size":2,"px":[6,21],"py":[3,16],"pz":[0,-1],"nx":[1,8],"ny":[2,14],"nz":[2,0]},{"size":2,"px":[8,1],"py":[3,0],"pz":[0,-1],"nx":[11,11],"ny":[2,1],"nz":[0,0]},{"size":3,"px":[11,11,11],"py":[9,10,8],"pz":[1,1,1],"nx":[23,1,0],"ny":[23,9,11],"nz":[0,-1,-1]},{"size":2,"px":[6,3],"py":[2,1],"pz":[1,2],"nx":[7,1],"ny":[8,2],"nz":[0,-1]},{"size":2,"px":[10,17],"py":[17,19],"pz":[0,-1],"nx":[10,4],"ny":[16,9],"nz":[0,1]},{"size":2,"px":[3,6],"py":[7,1],"pz":[1,-1],"nx":[11,0],"ny":[11,8],"nz":[0,1]},{"size":2,"px":[10,5],"py":[11,4],"pz":[1,2],"nx":[5,5],"ny":[0,0],"nz":[2,-1]},{"size":2,"px":[3,6],"py":[3,6],"pz":[2,1],"nx":[8,0],"ny":[4,16],"nz":[1,-1]},{"size":2,"px":[14,1],"py":[20,2],"pz":[0,-1],"nx":[7,7],"ny":[11,9],"nz":[1,1]},{"size":3,"px":[11,13,4],"py":[16,21,3],"pz":[0,0,2],"nx":[14,16,5],"ny":[20,14,9],"nz":[0,-1,-1]},{"size":2,"px":[7,0],"py":[1,1],"pz":[1,-1],"nx":[4,7],"ny":[2,4],"nz":[2,1]},{"size":2,"px":[23,11],"py":[9,4],"pz":[0,1],"nx":[11,3],"ny":[1,3],"nz":[0,-1]},{"size":2,"px":[11,13],"py":[23,23],"pz":[0,0],"nx":[13,13],"ny":[20,20],"nz":[0,-1]},{"size":2,"px":[10,8],"py":[5,11],"pz":[0,-1],"nx":[20,19],"ny":[18,20],"nz":[0,0]},{"size":2,"px":[19,5],"py":[22,4],"pz":[0,-1],"nx":[2,9],"ny":[3,17],"nz":[1,0]},{"size":2,"px":[15,2],"py":[13,7],"pz":[0,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":2,"px":[14,13],"py":[17,2],"pz":[0,-1],"nx":[15,13],"ny":[19,15],"nz":[0,0]},{"size":2,"px":[12,23],"py":[8,22],"pz":[0,-1],"nx":[7,10],"ny":[5,9],"nz":[1,0]},{"size":2,"px":[2,6],"py":[21,10],"pz":[0,-1],"nx":[3,4],"ny":[3,3],"nz":[1,1]},{"size":2,"px":[15,11],"py":[5,0],"pz":[0,-1],"nx":[3,4],"ny":[17,16],"nz":[0,0]},{"size":2,"px":[3,1],"py":[18,8],"pz":[0,1],"nx":[14,4],"ny":[17,7],"nz":[0,-1]},{"size":2,"px":[15,3],"py":[18,3],"pz":[0,2],"nx":[1,22],"ny":[0,1],"nz":[0,-1]},{"size":2,"px":[13,3],"py":[9,3],"pz":[0,-1],"nx":[0,1],"ny":[9,20],"nz":[1,0]},{"size":2,"px":[1,1],"py":[1,0],"pz":[2,2],"nx":[9,23],"ny":[10,12],"nz":[1,-1]},{"size":4,"px":[9,0,9,1],"py":[8,0,0,10],"pz":[1,-1,-1,-1],"nx":[23,7,5,23],"ny":[20,7,5,19],"nz":[0,1,2,0]},{"size":2,"px":[18,18],"py":[12,12],"pz":[0,-1],"nx":[8,4],"ny":[4,2],"nz":[1,2]},{"size":3,"px":[0,4,1],"py":[3,5,3],"pz":[1,-1,-1],"nx":[16,11,8],"ny":[8,5,6],"nz":[0,0,0]},{"size":5,"px":[9,10,14,11,11],"py":[0,0,0,0,0],"pz":[0,0,0,0,-1],"nx":[8,3,4,6,2],"ny":[22,9,5,4,0],"nz":[0,1,0,0,2]},{"size":2,"px":[6,5],"py":[2,2],"pz":[1,1],"nx":[7,3],"ny":[8,7],"nz":[0,-1]},{"size":2,"px":[11,5],"py":[15,2],"pz":[0,-1],"nx":[3,10],"ny":[0,1],"nz":[2,0]},{"size":2,"px":[0,11],"py":[11,12],"pz":[1,-1],"nx":[22,22],"ny":[14,13],"nz":[0,0]},{"size":2,"px":[2,2],"py":[15,14],"pz":[0,0],"nx":[1,2],"ny":[11,8],"nz":[1,-1]},{"size":2,"px":[11,6],"py":[0,7],"pz":[1,-1],"nx":[19,5],"ny":[3,0],"nz":[0,2]},{"size":2,"px":[2,3],"py":[3,7],"pz":[2,1],"nx":[1,5],"ny":[5,0],"nz":[1,-1]},{"size":2,"px":[10,14],"py":[4,5],"pz":[0,-1],"nx":[4,18],"ny":[2,12],"nz":[2,0]},{"size":2,"px":[19,10],"py":[12,2],"pz":[0,-1],"nx":[13,4],"ny":[10,2],"nz":[0,2]},{"size":2,"px":[6,1],"py":[21,6],"pz":[0,-1],"nx":[6,5],"ny":[0,0],"nz":[1,1]}],"alpha":[-1.044179e+00,1.044179e+00,-6.003138e-01,6.003138e-01,-4.091282e-01,4.091282e-01,-4.590148e-01,4.590148e-01,-4.294004e-01,4.294004e-01,-3.360846e-01,3.360846e-01,-3.054186e-01,3.054186e-01,-2.901743e-01,2.901743e-01,-3.522417e-01,3.522417e-01,-3.195838e-01,3.195838e-01,-2.957309e-01,2.957309e-01,-2.876727e-01,2.876727e-01,-2.637460e-01,2.637460e-01,-2.607900e-01,2.607900e-01,-2.455714e-01,2.455714e-01,-2.749847e-01,2.749847e-01,-2.314217e-01,2.314217e-01,-2.540871e-01,2.540871e-01,-2.143416e-01,2.143416e-01,-2.565697e-01,2.565697e-01,-1.901272e-01,1.901272e-01,-2.259981e-01,2.259981e-01,-2.012333e-01,2.012333e-01,-2.448460e-01,2.448460e-01,-2.192845e-01,2.192845e-01,-2.005951e-01,2.005951e-01,-2.259000e-01,2.259000e-01,-1.955758e-01,1.955758e-01,-2.235332e-01,2.235332e-01,-1.704490e-01,1.704490e-01,-1.584628e-01,1.584628e-01,-2.167710e-01,2.167710e-01,-1.592909e-01,1.592909e-01,-1.967292e-01,1.967292e-01,-1.432268e-01,1.432268e-01,-2.039949e-01,2.039949e-01,-1.404068e-01,1.404068e-01,-1.788201e-01,1.788201e-01,-1.498714e-01,1.498714e-01,-1.282541e-01,1.282541e-01,-1.630182e-01,1.630182e-01,-1.398111e-01,1.398111e-01,-1.464143e-01,1.464143e-01,-1.281712e-01,1.281712e-01,-1.417014e-01,1.417014e-01,-1.779164e-01,1.779164e-01,-2.067174e-01,2.067174e-01,-1.344947e-01,1.344947e-01,-1.357351e-01,1.357351e-01,-1.683191e-01,1.683191e-01,-1.821768e-01,1.821768e-01,-2.158307e-01,2.158307e-01,-1.812857e-01,1.812857e-01,-1.635445e-01,1.635445e-01,-1.474934e-01,1.474934e-01,-1.771993e-01,1.771993e-01,-1.517620e-01,1.517620e-01,-1.283184e-01,1.283184e-01,-1.862675e-01,1.862675e-01,-1.420491e-01,1.420491e-01,-1.232165e-01,1.232165e-01,-1.472696e-01,1.472696e-01,-1.192156e-01,1.192156e-01,-1.602034e-01,1.602034e-01,-1.321473e-01,1.321473e-01,-1.358101e-01,1.358101e-01,-1.295821e-01,1.295821e-01,-1.289102e-01,1.289102e-01,-1.232520e-01,1.232520e-01,-1.332227e-01,1.332227e-01,-1.358887e-01,1.358887e-01,-1.179559e-01,1.179559e-01,-1.263694e-01,1.263694e-01,-1.444876e-01,1.444876e-01,-1.933141e-01,1.933141e-01,-1.917886e-01,1.917886e-01,-1.199760e-01,1.199760e-01,-1.359937e-01,1.359937e-01,-1.690073e-01,1.690073e-01,-1.894222e-01,1.894222e-01,-1.699422e-01,1.699422e-01,-1.340361e-01,1.340361e-01,-1.840622e-01,1.840622e-01,-1.277397e-01,1.277397e-01,-1.381610e-01,1.381610e-01,-1.282241e-01,1.282241e-01,-1.211334e-01,1.211334e-01,-1.264628e-01,1.264628e-01,-1.373010e-01,1.373010e-01,-1.363356e-01,1.363356e-01,-1.562568e-01,1.562568e-01,-1.268735e-01,1.268735e-01,-1.037859e-01,1.037859e-01,-1.394322e-01,1.394322e-01,-1.449225e-01,1.449225e-01,-1.109657e-01,1.109657e-01,-1.086931e-01,1.086931e-01,-1.379135e-01,1.379135e-01,-1.881974e-01,1.881974e-01,-1.304956e-01,1.304956e-01,-9.921777e-02,9.921777e-02,-1.398624e-01,1.398624e-01,-1.216469e-01,1.216469e-01,-1.272741e-01,1.272741e-01,-1.878236e-01,1.878236e-01,-1.336894e-01,1.336894e-01,-1.256289e-01,1.256289e-01,-1.247231e-01,1.247231e-01,-1.853400e-01,1.853400e-01,-1.087805e-01,1.087805e-01,-1.205676e-01,1.205676e-01,-1.023182e-01,1.023182e-01,-1.268422e-01,1.268422e-01,-1.422900e-01,1.422900e-01,-1.098174e-01,1.098174e-01,-1.317018e-01,1.317018e-01,-1.378142e-01,1.378142e-01,-1.274550e-01,1.274550e-01,-1.142944e-01,1.142944e-01,-1.713488e-01,1.713488e-01,-1.103035e-01,1.103035e-01,-1.045221e-01,1.045221e-01,-1.293015e-01,1.293015e-01,-9.763183e-02,9.763183e-02,-1.387213e-01,1.387213e-01,-9.031167e-02,9.031167e-02,-1.283052e-01,1.283052e-01,-1.133462e-01,1.133462e-01,-9.370681e-02,9.370681e-02,-1.079269e-01,1.079269e-01,-1.331913e-01,1.331913e-01,-8.969902e-02,8.969902e-02,-1.044560e-01,1.044560e-01,-9.387466e-02,9.387466e-02,-1.208988e-01,1.208988e-01,-1.252011e-01,1.252011e-01,-1.401277e-01,1.401277e-01,-1.461381e-01,1.461381e-01,-1.323763e-01,1.323763e-01,-9.923889e-02,9.923889e-02,-1.142899e-01,1.142899e-01,-9.110853e-02,9.110853e-02,-1.106607e-01,1.106607e-01,-1.253140e-01,1.253140e-01,-9.657895e-02,9.657895e-02,-1.030010e-01,1.030010e-01,-1.348857e-01,1.348857e-01,-1.237793e-01,1.237793e-01,-1.296943e-01,1.296943e-01,-1.323385e-01,1.323385e-01,-8.331554e-02,8.331554e-02,-8.417589e-02,8.417589e-02,-1.104431e-01,1.104431e-01,-1.170710e-01,1.170710e-01,-1.391725e-01,1.391725e-01,-1.485189e-01,1.485189e-01,-1.840393e-01,1.840393e-01,-1.238250e-01,1.238250e-01,-1.095287e-01,1.095287e-01,-1.177869e-01,1.177869e-01,-1.036409e-01,1.036409e-01,-9.802581e-02,9.802581e-02,-9.364054e-02,9.364054e-02,-9.936022e-02,9.936022e-02,-1.117201e-01,1.117201e-01,-1.081300e-01,1.081300e-01,-1.331861e-01,1.331861e-01,-1.192122e-01,1.192122e-01,-9.889761e-02,9.889761e-02,-1.173456e-01,1.173456e-01,-1.032917e-01,1.032917e-01,-9.268551e-02,9.268551e-02,-1.178563e-01,1.178563e-01,-1.215065e-01,1.215065e-01,-1.060437e-01,1.060437e-01,-1.010044e-01,1.010044e-01,-1.021683e-01,1.021683e-01,-9.974968e-02,9.974968e-02,-1.161528e-01,1.161528e-01,-8.686721e-02,8.686721e-02,-8.145259e-02,8.145259e-02,-9.937060e-02,9.937060e-02,-1.170885e-01,1.170885e-01,-7.693779e-02,7.693779e-02,-9.047233e-02,9.047233e-02,-9.168442e-02,9.168442e-02,-1.054105e-01,1.054105e-01,-9.036177e-02,9.036177e-02,-1.251949e-01,1.251949e-01,-9.523847e-02,9.523847e-02,-1.038930e-01,1.038930e-01,-1.433660e-01,1.433660e-01,-1.489830e-01,1.489830e-01,-8.393174e-02,8.393174e-02,-8.888026e-02,8.888026e-02,-9.347861e-02,9.347861e-02,-1.044838e-01,1.044838e-01,-1.102144e-01,1.102144e-01,-1.383415e-01,1.383415e-01,-1.466476e-01,1.466476e-01,-1.129741e-01,1.129741e-01,-1.310915e-01,1.310915e-01,-1.070648e-01,1.070648e-01,-7.559007e-02,7.559007e-02,-8.812082e-02,8.812082e-02,-1.234272e-01,1.234272e-01,-1.088022e-01,1.088022e-01,-8.388703e-02,8.388703e-02,-7.179593e-02,7.179593e-02,-1.008961e-01,1.008961e-01,-9.030070e-02,9.030070e-02,-8.581345e-02,8.581345e-02,-9.023431e-02,9.023431e-02,-9.807321e-02,9.807321e-02,-9.621402e-02,9.621402e-02,-1.730195e-01,1.730195e-01,-8.984631e-02,8.984631e-02,-9.556661e-02,9.556661e-02,-1.047576e-01,1.047576e-01,-7.854313e-02,7.854313e-02,-8.682118e-02,8.682118e-02,-1.159761e-01,1.159761e-01,-1.339540e-01,1.339540e-01,-1.003048e-01,1.003048e-01,-9.747544e-02,9.747544e-02,-9.501058e-02,9.501058e-02,-1.321566e-01,1.321566e-01,-9.194706e-02,9.194706e-02,-9.359276e-02,9.359276e-02,-1.015916e-01,1.015916e-01,-1.174192e-01,1.174192e-01,-1.039931e-01,1.039931e-01,-9.746733e-02,9.746733e-02,-1.286120e-01,1.286120e-01,-1.044899e-01,1.044899e-01,-1.066385e-01,1.066385e-01,-8.368626e-02,8.368626e-02,-1.271919e-01,1.271919e-01,-1.055946e-01,1.055946e-01,-8.272876e-02,8.272876e-02,-1.370564e-01,1.370564e-01,-8.539379e-02,8.539379e-02,-1.100343e-01,1.100343e-01,-8.102170e-02,8.102170e-02,-1.028728e-01,1.028728e-01,-1.305065e-01,1.305065e-01,-1.059506e-01,1.059506e-01,-1.264646e-01,1.264646e-01,-8.383843e-02,8.383843e-02,-9.357698e-02,9.357698e-02,-7.474400e-02,7.474400e-02,-7.814045e-02,7.814045e-02,-8.600970e-02,8.600970e-02,-1.206090e-01,1.206090e-01,-9.986512e-02,9.986512e-02,-8.516476e-02,8.516476e-02,-7.198783e-02,7.198783e-02,-7.838409e-02,7.838409e-02,-1.005142e-01,1.005142e-01,-9.951857e-02,9.951857e-02,-7.253998e-02,7.253998e-02,-9.913739e-02,9.913739e-02,-7.500360e-02,7.500360e-02,-9.258090e-02,9.258090e-02,-1.400287e-01,1.400287e-01,-1.044404e-01,1.044404e-01,-7.404339e-02,7.404339e-02,-7.256833e-02,7.256833e-02,-1.006995e-01,1.006995e-01,-1.426043e-01,1.426043e-01,-1.036529e-01,1.036529e-01,-1.208443e-01,1.208443e-01,-1.074245e-01,1.074245e-01,-1.141448e-01,1.141448e-01,-1.015809e-01,1.015809e-01,-1.028822e-01,1.028822e-01,-1.055682e-01,1.055682e-01,-9.468699e-02,9.468699e-02,-1.010098e-01,1.010098e-01,-1.205054e-01,1.205054e-01,-8.392956e-02,8.392956e-02,-8.052297e-02,8.052297e-02,-9.576507e-02,9.576507e-02,-9.515692e-02,9.515692e-02,-1.564745e-01,1.564745e-01,-7.357238e-02,7.357238e-02,-1.129262e-01,1.129262e-01,-1.013265e-01,1.013265e-01,-8.760761e-02,8.760761e-02,-8.714771e-02,8.714771e-02,-9.605039e-02,9.605039e-02,-9.064677e-02,9.064677e-02,-8.243857e-02,8.243857e-02,-8.495858e-02,8.495858e-02,-8.350249e-02,8.350249e-02,-7.423234e-02,7.423234e-02,-7.930799e-02,7.930799e-02,-6.620023e-02,6.620023e-02,-7.311919e-02,7.311919e-02,-1.237938e-01,1.237938e-01,-1.086814e-01,1.086814e-01,-6.379798e-02,6.379798e-02,-7.526021e-02,7.526021e-02,-8.297097e-02,8.297097e-02,-8.186337e-02,8.186337e-02,-7.627362e-02,7.627362e-02,-1.061638e-01,1.061638e-01,-8.328494e-02,8.328494e-02,-1.040895e-01,1.040895e-01,-7.649056e-02,7.649056e-02,-7.299058e-02,7.299058e-02,-9.195198e-02,9.195198e-02,-7.990880e-02,7.990880e-02,-7.429346e-02,7.429346e-02,-9.991702e-02,9.991702e-02,-9.755385e-02,9.755385e-02,-1.344138e-01,1.344138e-01,-1.707917e-01,1.707917e-01,-8.325450e-02,8.325450e-02,-8.137793e-02,8.137793e-02,-8.308659e-02,8.308659e-02,-7.440414e-02,7.440414e-02,-7.012744e-02,7.012744e-02,-8.122943e-02,8.122943e-02,-8.845462e-02,8.845462e-02,-8.803450e-02,8.803450e-02,-9.653392e-02,9.653392e-02,-8.795691e-02,8.795691e-02,-1.119045e-01,1.119045e-01,-1.068308e-01,1.068308e-01,-8.406359e-02,8.406359e-02,-1.220414e-01,1.220414e-01,-1.024235e-01,1.024235e-01,-1.252897e-01,1.252897e-01,-1.121234e-01,1.121234e-01,-9.054150e-02,9.054150e-02,-8.974435e-02,8.974435e-02,-1.351578e-01,1.351578e-01,-1.106442e-01,1.106442e-01,-8.093913e-02,8.093913e-02,-9.800762e-02,9.800762e-02,-7.012823e-02,7.012823e-02,-7.434949e-02,7.434949e-02,-8.684816e-02,8.684816e-02,-8.916388e-02,8.916388e-02,-8.773159e-02,8.773159e-02,-7.709608e-02,7.709608e-02,-7.230518e-02,7.230518e-02,-9.662156e-02,9.662156e-02,-7.957632e-02,7.957632e-02,-7.628441e-02,7.628441e-02,-8.050202e-02,8.050202e-02,-1.290593e-01,1.290593e-01,-9.246182e-02,9.246182e-02,-9.703662e-02,9.703662e-02,-7.866445e-02,7.866445e-02,-1.064783e-01,1.064783e-01,-1.012339e-01,1.012339e-01,-6.828389e-02,6.828389e-02,-1.005039e-01,1.005039e-01,-7.559687e-02,7.559687e-02,-6.359878e-02,6.359878e-02,-8.387002e-02,8.387002e-02,-7.851323e-02,7.851323e-02,-8.878569e-02,8.878569e-02,-7.767654e-02,7.767654e-02,-8.033338e-02,8.033338e-02,-9.142797e-02,9.142797e-02,-8.590585e-02,8.590585e-02,-1.052318e-01,1.052318e-01,-8.760062e-02,8.760062e-02,-9.222192e-02,9.222192e-02,-7.548828e-02,7.548828e-02,-8.003344e-02,8.003344e-02,-1.177076e-01,1.177076e-01,-1.064964e-01,1.064964e-01,-8.655553e-02,8.655553e-02,-9.418112e-02,9.418112e-02,-7.248163e-02,7.248163e-02,-7.120974e-02,7.120974e-02,-6.393114e-02,6.393114e-02,-7.997487e-02,7.997487e-02,-1.220941e-01,1.220941e-01,-9.892518e-02,9.892518e-02,-8.270271e-02,8.270271e-02,-1.069400e-01,1.069400e-01,-5.860771e-02,5.860771e-02,-9.126600e-02,9.126600e-02,-6.212559e-02,6.212559e-02,-9.397538e-02,9.397538e-02,-8.070447e-02,8.070447e-02,-8.415587e-02,8.415587e-02,-8.564455e-02,8.564455e-02,-7.791811e-02,7.791811e-02,-6.642259e-02,6.642259e-02,-8.266167e-02,8.266167e-02,-1.134986e-01,1.134986e-01,-1.045267e-01,1.045267e-01,-7.122085e-02,7.122085e-02,-7.979415e-02,7.979415e-02,-7.922347e-02,7.922347e-02,-9.003421e-02,9.003421e-02,-8.796449e-02,8.796449e-02,-7.933279e-02,7.933279e-02,-8.307947e-02,8.307947e-02,-8.946349e-02,8.946349e-02,-7.643384e-02,7.643384e-02,-7.818534e-02,7.818534e-02,-7.990991e-02,7.990991e-02,-9.885664e-02,9.885664e-02,-8.071329e-02,8.071329e-02,-6.952112e-02,6.952112e-02,-6.429706e-02,6.429706e-02,-6.307229e-02,6.307229e-02,-8.100137e-02,8.100137e-02,-7.693623e-02,7.693623e-02,-6.906625e-02,6.906625e-02,-7.390462e-02,7.390462e-02,-6.487217e-02,6.487217e-02,-1.233681e-01,1.233681e-01,-6.979273e-02,6.979273e-02,-8.358669e-02,8.358669e-02,-1.095420e-01,1.095420e-01,-8.519717e-02,8.519717e-02,-7.599857e-02,7.599857e-02,-6.042816e-02,6.042816e-02,-6.546304e-02,6.546304e-02,-1.016245e-01,1.016245e-01,-8.308787e-02,8.308787e-02,-7.385708e-02,7.385708e-02,-6.751630e-02,6.751630e-02,-9.036695e-02,9.036695e-02,-9.371335e-02,9.371335e-02,-1.116088e-01,1.116088e-01,-5.693741e-02,5.693741e-02,-6.383983e-02,6.383983e-02,-5.389843e-02,5.389843e-02,-8.383191e-02,8.383191e-02,-7.820822e-02,7.820822e-02,-7.067557e-02,7.067557e-02,-7.971948e-02,7.971948e-02,-7.360668e-02,7.360668e-02,-7.008027e-02,7.008027e-02,-8.013378e-02,8.013378e-02,-8.331605e-02,8.331605e-02,-7.145702e-02,7.145702e-02,-7.863940e-02,7.863940e-02,-6.992679e-02,6.992679e-02,-5.716495e-02,5.716495e-02,-5.306006e-02,5.306006e-02,-8.855639e-02,8.855639e-02,-7.656397e-02,7.656397e-02,-6.939272e-02,6.939272e-02,-7.523742e-02,7.523742e-02,-8.472299e-02,8.472299e-02,-8.114341e-02,8.114341e-02,-6.795517e-02,6.795517e-02,-7.890130e-02,7.890130e-02,-7.488741e-02,7.488741e-02,-9.281972e-02,9.281972e-02,-9.325498e-02,9.325498e-02,-1.401587e-01,1.401587e-01,-1.176284e-01,1.176284e-01,-8.867597e-02,8.867597e-02,-8.124232e-02,8.124232e-02,-9.441235e-02,9.441235e-02,-8.029452e-02,8.029452e-02,-8.581848e-02,8.581848e-02,-1.029819e-01,1.029819e-01,-9.569118e-02,9.569118e-02,-7.690893e-02,7.690893e-02,-9.018228e-02,9.018228e-02,-1.049209e-01,1.049209e-01,-8.969413e-02,8.969413e-02,-8.651891e-02,8.651891e-02,-8.613331e-02,8.613331e-02,-7.120468e-02,7.120468e-02,-8.743959e-02,8.743959e-02,-7.607158e-02,7.607158e-02,-1.015547e-01,1.015547e-01,-8.090879e-02,8.090879e-02,-7.114079e-02,7.114079e-02,-8.744835e-02,8.744835e-02,-6.074904e-02,6.074904e-02,-6.919871e-02,6.919871e-02,-7.607774e-02,7.607774e-02,-9.444600e-02,9.444600e-02,-7.833429e-02,7.833429e-02,-6.817555e-02,6.817555e-02,-8.997390e-02,8.997390e-02,-9.845223e-02,9.845223e-02,-7.894180e-02,7.894180e-02,-7.921373e-02,7.921373e-02,-7.448032e-02,7.448032e-02,-1.178165e-01,1.178165e-01,-8.216686e-02,8.216686e-02,-8.103286e-02,8.103286e-02,-6.981470e-02,6.981470e-02,-8.709008e-02,8.709008e-02,-8.336259e-02,8.336259e-02,-6.213589e-02,6.213589e-02,-7.068045e-02,7.068045e-02,-6.915676e-02,6.915676e-02,-7.103416e-02,7.103416e-02,-6.523849e-02,6.523849e-02,-7.634760e-02,7.634760e-02,-7.263038e-02,7.263038e-02,-7.164396e-02,7.164396e-02,-8.745559e-02,8.745559e-02,-6.960181e-02,6.960181e-02,-8.500098e-02,8.500098e-02,-6.523260e-02,6.523260e-02,-7.319714e-02,7.319714e-02,-6.268125e-02,6.268125e-02,-7.083135e-02,7.083135e-02,-7.984517e-02,7.984517e-02,-1.256265e-01,1.256265e-01,-1.065412e-01,1.065412e-01,-8.524323e-02,8.524323e-02,-9.291364e-02,9.291364e-02,-7.936567e-02,7.936567e-02,-8.607723e-02,8.607723e-02,-7.583416e-02,7.583416e-02,-7.931928e-02,7.931928e-02,-7.408357e-02,7.408357e-02,-1.034404e-01,1.034404e-01,-1.012127e-01,1.012127e-01,-7.916689e-02,7.916689e-02,-8.753651e-02,8.753651e-02,-6.090366e-02,6.090366e-02,-7.500103e-02,7.500103e-02,-1.228709e-01,1.228709e-01,-6.318201e-02,6.318201e-02,-7.585420e-02,7.585420e-02,-7.089090e-02,7.089090e-02,-1.053542e-01,1.053542e-01,-8.549521e-02,8.549521e-02,-7.906308e-02,7.906308e-02,-6.338780e-02,6.338780e-02,-8.417910e-02,8.417910e-02,-7.115511e-02,7.115511e-02,-7.693949e-02,7.693949e-02,-7.446749e-02,7.446749e-02,-1.037929e-01,1.037929e-01,-7.991005e-02,7.991005e-02,-7.119439e-02,7.119439e-02,-7.071340e-02,7.071340e-02,-8.587362e-02,8.587362e-02,-7.001236e-02,7.001236e-02,-7.567115e-02,7.567115e-02,-7.118930e-02,7.118930e-02,-6.844895e-02,6.844895e-02,-1.035118e-01,1.035118e-01,-8.156618e-02,8.156618e-02,-7.449593e-02,7.449593e-02,-8.154360e-02,8.154360e-02,-9.110878e-02,9.110878e-02,-6.222534e-02,6.222534e-02,-1.033841e-01,1.033841e-01,-6.811687e-02,6.811687e-02,-6.828443e-02,6.828443e-02,-5.769408e-02,5.769408e-02,-5.917684e-02,5.917684e-02,-8.358868e-02,8.358868e-02]}]}; +})(jsfeat.bbf); diff --git a/cascades/eye.js b/cascades/eye.js new file mode 100755 index 0000000..b9e805b --- /dev/null +++ b/cascades/eye.js @@ -0,0 +1,7 @@ +/** + * this cascade is derived from https://github.com/mtschirs/js-objectdetect implementation + * @author Martin Tschirsich / http://www.tu-darmstadt.de/~m_t + */ +(function(global) { + global.eye = {complexClassifiers:[{simpleClassifiers:[{features:[[0,8,20,12,-1.],[0,14,20,6,2.]],threshold:0.1296395957469940,right_val:0.6835014820098877,left_val:-0.7730420827865601},{features:[[9,1,4,15,-1.],[9,6,4,5,3.]],threshold:-0.0463268086314201,right_val:-0.4909768998622894,left_val:0.5735275149345398},{features:[[6,10,9,2,-1.],[9,10,3,2,3.]],threshold:-0.0161730907857418,right_val:-0.3161070942878723,left_val:0.6025434136390686},{features:[[7,0,10,9,-1.],[7,3,10,3,3.]],threshold:-0.0458288416266441,right_val:-0.1554504036903381,left_val:0.6417754888534546},{features:[[12,2,2,18,-1.],[12,8,2,6,3.]],threshold:-0.0537596195936203,right_val:-0.2048082947731018,left_val:0.5421931743621826},{features:[[8,6,8,6,-1.],[8,9,8,3,2.]],threshold:0.0341711901128292,right_val:0.4841090142726898,left_val:-0.2338819056749344}],threshold:-1.4562760591506958},{simpleClassifiers:[{features:[[2,0,17,18,-1.],[2,6,17,6,3.]],threshold:-0.2172762006521225,right_val:-0.5936073064804077,left_val:0.7109889984130859},{features:[[10,10,1,8,-1.],[10,14,1,4,2.]],threshold:0.0120719699189067,right_val:0.5901355147361755,left_val:-0.2824048101902008},{features:[[7,10,9,2,-1.],[10,10,3,2,3.]],threshold:-0.0178541392087936,right_val:-0.2275896072387695,left_val:0.5313752293586731},{features:[[5,1,6,6,-1.],[5,3,6,2,3.]],threshold:0.0223336108028889,right_val:0.6335613727569580,left_val:-0.1755609959363937},{features:[[3,1,15,9,-1.],[3,4,15,3,3.]],threshold:-0.0914200171828270,right_val:-0.1689953058958054,left_val:0.6156309247016907},{features:[[6,3,9,6,-1.],[6,5,9,2,3.]],threshold:0.0289736501872540,right_val:0.7440117001533508,left_val:-0.1225007995963097},{features:[[8,17,6,3,-1.],[10,17,2,3,3.]],threshold:7.8203463926911354e-003,right_val:-0.6544165015220642,left_val:0.1697437018156052},{features:[[9,10,9,1,-1.],[12,10,3,1,3.]],threshold:0.0203404892235994,right_val:0.8271045088768005,left_val:-0.1255664974451065},{features:[[1,7,6,11,-1.],[3,7,2,11,3.]],threshold:-0.0119261499494314,right_val:-0.2099234014749527,left_val:0.3860568106174469},{features:[[9,18,3,1,-1.],[10,18,1,1,3.]],threshold:-9.7281101625412703e-004,right_val:0.1295239031314850,left_val:-0.6376119256019592},{features:[[16,16,1,2,-1.],[16,17,1,1,2.]],threshold:1.8322050891583785e-005,right_val:0.2292426973581314,left_val:-0.3463147878646851},{features:[[9,17,6,3,-1.],[11,17,2,3,3.]],threshold:-8.0854417756199837e-003,right_val:0.1307865977287293,left_val:-0.6366580128669739}],threshold:-1.2550230026245117},{simpleClassifiers:[{features:[[8,0,5,18,-1.],[8,6,5,6,3.]],threshold:-0.1181226968765259,right_val:-0.5004578232765198,left_val:0.6784452199935913},{features:[[6,7,9,7,-1.],[9,7,3,7,3.]],threshold:-0.0343327596783638,right_val:-0.3574487864971161,left_val:0.6718636155128479},{features:[[14,6,6,10,-1.],[16,6,2,10,3.]],threshold:-0.0215307995676994,right_val:-0.1819241940975189,left_val:0.7222070097923279},{features:[[9,8,9,5,-1.],[12,8,3,5,3.]],threshold:-0.0219099707901478,right_val:-0.2751022875308991,left_val:0.6652938723564148},{features:[[3,7,9,6,-1.],[6,7,3,6,3.]],threshold:-0.0287135392427444,right_val:-0.1961558014154434,left_val:0.6995570063591003},{features:[[1,7,6,6,-1.],[3,7,2,6,3.]],threshold:-0.0114674801006913,right_val:-0.2209735065698624,left_val:0.5926734805107117},{features:[[16,0,4,18,-1.],[16,6,4,6,3.]],threshold:-0.0226111691445112,right_val:-0.3837955892086029,left_val:0.3448306918144226},{features:[[0,17,3,3,-1.],[0,18,3,1,3.]],threshold:-1.9308089977130294e-003,right_val:0.1562865972518921,left_val:-0.7944571971893311},{features:[[16,0,2,1,-1.],[17,0,1,1,2.]],threshold:5.6419910833938047e-005,right_val:0.3543108999729157,left_val:-0.3089601099491119}],threshold:-1.3728189468383789},{simpleClassifiers:[{features:[[0,8,20,12,-1.],[0,14,20,6,2.]],threshold:0.1988652050495148,right_val:0.3553672134876251,left_val:-0.5286070108413696},{features:[[6,6,9,8,-1.],[9,6,3,8,3.]],threshold:-0.0360089391469955,right_val:-0.3934898078441620,left_val:0.4210968911647797},{features:[[5,3,12,9,-1.],[5,6,12,3,3.]],threshold:-0.0775698497891426,right_val:-0.2512216866016388,left_val:0.4799154102802277},{features:[[4,16,1,2,-1.],[4,17,1,1,2.]],threshold:8.2630853285081685e-005,right_val:0.3184922039508820,left_val:-0.3847548961639404},{features:[[18,10,2,1,-1.],[19,10,1,1,2.]],threshold:3.2773229759186506e-004,right_val:0.3254724144935608,left_val:-0.2642731964588165},{features:[[9,8,6,5,-1.],[11,8,2,5,3.]],threshold:-0.0185748506337404,right_val:-0.1506727039813995,left_val:0.4673658907413483},{features:[[0,0,2,1,-1.],[1,0,1,1,2.]],threshold:-7.0008762122597545e-005,right_val:-0.2536509931087494,left_val:0.2931315004825592},{features:[[6,8,6,6,-1.],[8,8,2,6,3.]],threshold:-0.0185521300882101,right_val:-0.1314805001020432,left_val:0.4627366065979004},{features:[[11,7,6,7,-1.],[13,7,2,7,3.]],threshold:-0.0130304200574756,right_val:-0.1775148957967758,left_val:0.4162721931934357},{features:[[19,14,1,2,-1.],[19,15,1,1,2.]],threshold:6.5694141085259616e-005,right_val:0.2668074071407318,left_val:-0.2803510129451752},{features:[[6,17,1,2,-1.],[6,18,1,1,2.]],threshold:1.7005260451696813e-004,right_val:0.2398165017366409,left_val:-0.2702724933624268},{features:[[14,7,2,7,-1.],[15,7,1,7,2.]],threshold:-3.3129199873656034e-003,right_val:-0.1442888975143433,left_val:0.4441143870353699},{features:[[6,8,2,4,-1.],[7,8,1,4,2.]],threshold:1.7583490116521716e-003,right_val:0.4294076859951019,left_val:-0.1612619012594223},{features:[[5,8,12,6,-1.],[5,10,12,2,3.]],threshold:-0.0251947492361069,right_val:-0.1820258051156998,left_val:0.4068729877471924},{features:[[2,17,1,3,-1.],[2,18,1,1,3.]],threshold:1.4031709870323539e-003,right_val:-0.8001856803894043,left_val:0.0847597867250443},{features:[[6,7,3,6,-1.],[7,7,1,6,3.]],threshold:-7.3991729877889156e-003,right_val:-0.1184315979480743,left_val:0.5576609969139099}],threshold:-1.2879480123519897},{simpleClassifiers:[{features:[[6,7,9,12,-1.],[9,7,3,12,3.]],threshold:-0.0299430806189775,right_val:-0.3848763108253479,left_val:0.3581081032752991},{features:[[6,2,11,12,-1.],[6,6,11,4,3.]],threshold:-0.1256738007068634,right_val:-0.3001225888729096,left_val:0.3931693136692047},{features:[[1,12,5,8,-1.],[1,16,5,4,2.]],threshold:5.3635272197425365e-003,right_val:0.1925701051950455,left_val:-0.4390861988067627},{features:[[14,7,6,7,-1.],[16,7,2,7,3.]],threshold:-8.0971820279955864e-003,right_val:-0.2340787053108215,left_val:0.3990666866302490},{features:[[10,8,6,6,-1.],[12,8,2,6,3.]],threshold:-0.0165979098528624,right_val:-0.2267484068870544,left_val:0.4209528863430023},{features:[[16,18,4,2,-1.],[16,19,4,1,2.]],threshold:-2.0199299324303865e-003,right_val:0.1260118931531906,left_val:-0.7415673136711121},{features:[[18,17,2,3,-1.],[18,18,2,1,3.]],threshold:-1.5202340437099338e-003,right_val:0.0863736122846603,left_val:-0.7615460157394409},{features:[[9,7,3,7,-1.],[10,7,1,7,3.]],threshold:-4.9663940444588661e-003,right_val:-0.1790491938591003,left_val:0.4218223989009857},{features:[[5,6,6,8,-1.],[7,6,2,8,3.]],threshold:-0.0192076005041599,right_val:-0.1437875032424927,left_val:0.4689489901065826},{features:[[2,6,6,11,-1.],[4,6,2,11,3.]],threshold:-0.0122226802632213,right_val:-0.2180214971303940,left_val:0.3284207880496979},{features:[[8,10,12,8,-1.],[8,14,12,4,2.]],threshold:0.0575486682355404,right_val:0.2435711026191711,left_val:-0.3676880896091461},{features:[[7,17,6,3,-1.],[9,17,2,3,3.]],threshold:-9.5794079825282097e-003,right_val:0.0636645630002022,left_val:-0.7224506735801697},{features:[[10,9,3,3,-1.],[11,9,1,3,3.]],threshold:-2.9545740690082312e-003,right_val:-0.1669632941484451,left_val:0.3584643900394440},{features:[[8,8,3,6,-1.],[9,8,1,6,3.]],threshold:-4.2017991654574871e-003,right_val:-0.1204179003834724,left_val:0.3909480869770050},{features:[[7,0,6,5,-1.],[9,0,2,5,3.]],threshold:-0.0136249903589487,right_val:0.0884047299623489,left_val:-0.5876771807670593},{features:[[6,17,1,3,-1.],[6,18,1,1,3.]],threshold:6.2853112467564642e-005,right_val:0.2141927927732468,left_val:-0.2634845972061157},{features:[[0,18,4,2,-1.],[0,19,4,1,2.]],threshold:-2.6782939676195383e-003,right_val:0.0805269628763199,left_val:-0.7839016914367676},{features:[[4,1,11,9,-1.],[4,4,11,3,3.]],threshold:-0.0705971792340279,right_val:-0.1398995965719223,left_val:0.4146926105022430},{features:[[3,1,14,9,-1.],[3,4,14,3,3.]],threshold:0.0920936465263367,right_val:0.5043578147888184,left_val:-0.1305518001317978},{features:[[0,9,6,4,-1.],[2,9,2,4,3.]],threshold:-8.8004386052489281e-003,right_val:-0.1403664946556091,left_val:0.3660975098609924},{features:[[18,13,1,2,-1.],[18,14,1,1,2.]],threshold:7.5080977694597095e-005,right_val:0.2070294022560120,left_val:-0.2970443964004517},{features:[[13,5,3,11,-1.],[14,5,1,11,3.]],threshold:-2.9870450962334871e-003,right_val:-0.1544596999883652,left_val:0.3561570048332214},{features:[[0,18,8,2,-1.],[0,18,4,1,2.],[4,19,4,1,2.]],threshold:-2.6441509835422039e-003,right_val:0.1029511019587517,left_val:-0.5435351729393005}],threshold:-1.2179850339889526},{simpleClassifiers:[{features:[[5,8,12,5,-1.],[9,8,4,5,3.]],threshold:-0.0478624701499939,right_val:-0.3418582081794739,left_val:0.4152823984622955},{features:[[4,7,11,10,-1.],[4,12,11,5,2.]],threshold:0.0873505324125290,right_val:0.2420420050621033,left_val:-0.3874978125095367},{features:[[14,9,6,4,-1.],[16,9,2,4,3.]],threshold:-0.0168494991958141,right_val:-0.1728291064500809,left_val:0.5308247804641724},{features:[[0,7,6,8,-1.],[3,7,3,8,2.]],threshold:-0.0288700293749571,right_val:-0.2240259051322937,left_val:0.3584350943565369},{features:[[0,16,3,3,-1.],[0,17,3,1,3.]],threshold:2.5679389946162701e-003,right_val:-0.6560940742492676,left_val:0.1499049961566925},{features:[[7,11,12,1,-1.],[11,11,4,1,3.]],threshold:-0.0241166595369577,right_val:-0.1481028050184250,left_val:0.5588967800140381},{features:[[4,8,9,4,-1.],[7,8,3,4,3.]],threshold:-0.0328266583383083,right_val:-0.1078552976250649,left_val:0.4646868109703064},{features:[[5,16,6,4,-1.],[7,16,2,4,3.]],threshold:-0.0152330603450537,right_val:0.0562368817627430,left_val:-0.7395442724227905},{features:[[18,17,1,3,-1.],[18,18,1,1,3.]],threshold:-3.0209511169232428e-004,right_val:0.0970698371529579,left_val:-0.4554882049560547},{features:[[18,17,1,3,-1.],[18,18,1,1,3.]],threshold:7.5365108205005527e-004,right_val:-0.5489501953125000,left_val:0.0951472967863083},{features:[[4,9,4,10,-1.],[4,9,2,5,2.],[6,14,2,5,2.]],threshold:-0.0106389503926039,right_val:-0.1230840981006622,left_val:0.4091297090053558},{features:[[4,8,6,4,-1.],[6,8,2,4,3.]],threshold:-7.5217830017209053e-003,right_val:-0.1604878008365631,left_val:0.4028914868831635},{features:[[10,2,2,18,-1.],[10,8,2,6,3.]],threshold:-0.1067709997296333,right_val:-0.0730911865830421,left_val:0.6175932288169861},{features:[[0,5,8,6,-1.],[0,5,4,3,2.],[4,8,4,3,2.]],threshold:0.0162569191306829,right_val:0.3745365142822266,left_val:-0.1310368031263351},{features:[[6,0,6,5,-1.],[8,0,2,5,3.]],threshold:-0.0206793602555990,right_val:0.0523900091648102,left_val:-0.7140290737152100},{features:[[18,0,2,14,-1.],[18,7,2,7,2.]],threshold:0.0170523691922426,right_val:-0.3108068108558655,left_val:0.1282286047935486},{features:[[8,18,4,2,-1.],[10,18,2,2,2.]],threshold:-5.7122060097754002e-003,right_val:0.0818847566843033,left_val:-0.6055650711059570},{features:[[1,17,6,3,-1.],[1,18,6,1,3.]],threshold:2.0851430235779844e-005,right_val:0.1445384025573731,left_val:-0.2681298851966858},{features:[[11,8,3,5,-1.],[12,8,1,5,3.]],threshold:7.9284431412816048e-003,right_val:0.5676258206367493,left_val:-0.0787953510880470},{features:[[11,8,3,4,-1.],[12,8,1,4,3.]],threshold:-2.5217379443347454e-003,right_val:-0.1362057030200958,left_val:0.3706862926483154},{features:[[11,0,6,5,-1.],[13,0,2,5,3.]],threshold:-0.0224261991679668,right_val:0.0510628595948219,left_val:-0.6870499849319458},{features:[[1,7,6,7,-1.],[3,7,2,7,3.]],threshold:-7.6451441273093224e-003,right_val:-0.1790595948696137,left_val:0.2349222004413605},{features:[[0,13,1,3,-1.],[0,14,1,1,3.]],threshold:-1.1175329564139247e-003,right_val:0.0743244364857674,left_val:-0.5986905097961426},{features:[[3,2,9,6,-1.],[3,4,9,2,3.]],threshold:0.0192127898335457,right_val:0.2973746955394745,left_val:-0.1570255011320114},{features:[[8,6,9,2,-1.],[8,7,9,1,2.]],threshold:5.6293429806828499e-003,right_val:0.4213027060031891,left_val:-0.0997690185904503},{features:[[0,14,3,6,-1.],[0,16,3,2,3.]],threshold:-9.5671862363815308e-003,right_val:0.0735062584280968,left_val:-0.6085879802703857},{features:[[1,11,6,4,-1.],[3,11,2,4,3.]],threshold:0.0112179601565003,right_val:0.4190984964370728,left_val:-0.1032081022858620}],threshold:-1.2905240058898926},{simpleClassifiers:[{features:[[6,9,9,3,-1.],[9,9,3,3,3.]],threshold:-0.0174864400178194,right_val:-0.3368118107318878,left_val:0.3130728006362915},{features:[[6,0,9,6,-1.],[6,2,9,2,3.]],threshold:0.0307146497070789,right_val:0.5378080010414124,left_val:-0.1876619011163712},{features:[[8,5,6,6,-1.],[8,7,6,2,3.]],threshold:-0.0221887193620205,right_val:-0.1612481027841568,left_val:0.3663788139820099},{features:[[1,12,2,1,-1.],[2,12,1,1,2.]],threshold:-5.0700771680567414e-005,right_val:-0.2844462096691132,left_val:0.2124571055173874},{features:[[10,10,6,2,-1.],[12,10,2,2,3.]],threshold:-7.0170420221984386e-003,right_val:-0.1317359060049057,left_val:0.3954311013221741},{features:[[13,8,6,6,-1.],[15,8,2,6,3.]],threshold:-6.8563609384000301e-003,right_val:-0.2065781950950623,left_val:0.3037385940551758},{features:[[6,16,6,4,-1.],[8,16,2,4,3.]],threshold:-0.0141292596235871,right_val:0.0982131883502007,left_val:-0.7650300860404968},{features:[[8,0,9,9,-1.],[8,3,9,3,3.]],threshold:-0.0479154810309410,right_val:-0.1300680935382843,left_val:0.4830738902091980},{features:[[18,17,1,3,-1.],[18,18,1,1,3.]],threshold:4.7032979637151584e-005,right_val:0.2438668012619019,left_val:-0.2521657049655914},{features:[[18,17,1,3,-1.],[18,18,1,1,3.]],threshold:1.0221180273219943e-003,right_val:-0.6586114168167114,left_val:0.0688576027750969},{features:[[7,10,3,3,-1.],[8,10,1,3,3.]],threshold:-2.6056109927594662e-003,right_val:-0.1302246004343033,left_val:0.4294202923774719},{features:[[9,14,2,2,-1.],[9,14,1,1,2.],[10,15,1,1,2.]],threshold:5.4505340813193470e-005,right_val:0.2895849943161011,left_val:-0.1928862035274506},{features:[[9,14,2,2,-1.],[9,14,1,1,2.],[10,15,1,1,2.]],threshold:-6.6721157054416835e-005,right_val:-0.1985436975955963,left_val:0.3029071092605591},{features:[[0,8,19,12,-1.],[0,14,19,6,2.]],threshold:0.2628143131732941,right_val:0.2369246035814285,left_val:-0.2329394072294235},{features:[[7,6,9,14,-1.],[10,6,3,14,3.]],threshold:-0.0235696695744991,right_val:-0.2848461866378784,left_val:0.1940104067325592},{features:[[13,8,3,4,-1.],[14,8,1,4,3.]],threshold:-3.9120172150433064e-003,right_val:-0.0956656783819199,left_val:0.5537897944450378},{features:[[4,17,1,3,-1.],[4,18,1,1,3.]],threshold:5.0788799853762612e-005,right_val:0.2179948985576630,left_val:-0.2391265928745270},{features:[[4,9,6,3,-1.],[6,9,2,3,3.]],threshold:-7.8732017427682877e-003,right_val:-0.1276804059743881,left_val:0.4069742858409882},{features:[[2,18,5,2,-1.],[2,19,5,1,2.]],threshold:-1.6778609715402126e-003,right_val:0.0973247885704041,left_val:-0.5774465799331665},{features:[[7,8,2,2,-1.],[7,8,1,1,2.],[8,9,1,1,2.]],threshold:-2.6832430739887059e-004,right_val:-0.1683126986026764,left_val:0.2902188003063202},{features:[[7,8,2,2,-1.],[7,8,1,1,2.],[8,9,1,1,2.]],threshold:7.8687182394787669e-005,right_val:0.2772096991539002,left_val:-0.1955157071352005},{features:[[5,10,13,2,-1.],[5,11,13,1,2.]],threshold:0.0129535002633929,right_val:0.4032387137413025,left_val:-0.0968383178114891},{features:[[10,8,1,9,-1.],[10,11,1,3,3.]],threshold:-0.0130439596250653,right_val:-0.0892875492572784,left_val:0.4719856977462769},{features:[[15,8,2,12,-1.],[15,8,1,6,2.],[16,14,1,6,2.]],threshold:3.0261781066656113e-003,right_val:0.3068627119064331,left_val:-0.1362338066101074},{features:[[4,0,3,5,-1.],[5,0,1,5,3.]],threshold:-6.0438038781285286e-003,right_val:0.0573163107037544,left_val:-0.7795410156250000},{features:[[12,6,3,7,-1.],[13,6,1,7,3.]],threshold:-2.2507249377667904e-003,right_val:-0.1500630974769592,left_val:0.3087705969810486},{features:[[7,16,6,4,-1.],[9,16,2,4,3.]],threshold:0.0158268101513386,right_val:-0.7245556712150574,left_val:0.0645518898963928},{features:[[9,16,2,1,-1.],[10,16,1,1,2.]],threshold:6.5864507632795721e-005,right_val:0.2321038991212845,left_val:-0.1759884059429169}],threshold:-1.1600480079650879},{simpleClassifiers:[{features:[[6,10,9,2,-1.],[9,10,3,2,3.]],threshold:-0.0278548691421747,right_val:-0.1809991002082825,left_val:0.4551844894886017},{features:[[0,6,15,14,-1.],[0,13,15,7,2.]],threshold:0.1289504021406174,right_val:0.1618890017271042,left_val:-0.5256553292274475},{features:[[9,1,5,6,-1.],[9,3,5,2,3.]],threshold:0.0244031809270382,right_val:0.4235737919807434,left_val:-0.1497496068477631},{features:[[3,9,3,4,-1.],[4,9,1,4,3.]],threshold:-2.4458570405840874e-003,right_val:-0.1744769066572189,left_val:0.3294866979122162},{features:[[5,7,3,6,-1.],[6,7,1,6,3.]],threshold:-3.5336529836058617e-003,right_val:-0.0736183598637581,left_val:0.4742664098739624},{features:[[17,16,1,2,-1.],[17,17,1,1,2.]],threshold:5.1358150813030079e-005,right_val:0.1563327014446259,left_val:-0.3042193055152893},{features:[[9,8,6,12,-1.],[11,8,2,12,3.]],threshold:-0.0162256807088852,right_val:-0.2035982012748718,left_val:0.2300218045711517},{features:[[6,10,6,1,-1.],[8,10,2,1,3.]],threshold:-4.6007009223103523e-003,right_val:-0.1348544061183929,left_val:0.4045926928520203},{features:[[7,17,9,3,-1.],[10,17,3,3,3.]],threshold:-0.0219289995729923,right_val:0.0806842669844627,left_val:-0.6872448921203613},{features:[[14,18,6,2,-1.],[14,19,6,1,2.]],threshold:-2.8971210122108459e-003,right_val:0.0485452190041542,left_val:-0.6961960792541504},{features:[[9,5,3,14,-1.],[10,5,1,14,3.]],threshold:-4.4074649922549725e-003,right_val:-0.1623664945363998,left_val:0.2516626119613648},{features:[[8,16,9,4,-1.],[11,16,3,4,3.]],threshold:0.0284371692687273,right_val:-0.6674445867538452,left_val:0.0603942610323429},{features:[[0,0,4,14,-1.],[0,7,4,7,2.]],threshold:0.0832128822803497,right_val:-0.5362604260444641,left_val:0.0643579214811325},{features:[[8,1,6,3,-1.],[10,1,2,3,3.]],threshold:-0.0124193299561739,right_val:0.0575266107916832,left_val:-0.7081686258316040},{features:[[6,8,3,4,-1.],[7,8,1,4,3.]],threshold:-4.6992599964141846e-003,right_val:-0.0873508006334305,left_val:0.5125433206558228},{features:[[4,8,3,4,-1.],[5,8,1,4,3.]],threshold:-7.8025809489190578e-004,right_val:-0.1796150952577591,left_val:0.2668766081333160},{features:[[5,1,6,5,-1.],[7,1,2,5,3.]],threshold:-0.0197243392467499,right_val:0.0729419067502022,left_val:-0.6756373047828674},{features:[[1,18,1,2,-1.],[1,19,1,1,2.]],threshold:1.0269250487908721e-003,right_val:-0.5554018020629883,left_val:0.0539193190634251},{features:[[7,0,6,6,-1.],[7,2,6,2,3.]],threshold:-0.0259571895003319,right_val:-0.0718983933329582,left_val:0.5636252760887146},{features:[[0,18,4,2,-1.],[0,19,4,1,2.]],threshold:-1.2552699772641063e-003,right_val:0.0896914526820183,left_val:-0.5034663081169128},{features:[[12,3,8,12,-1.],[12,7,8,4,3.]],threshold:-0.0499705784022808,right_val:-0.2230195999145508,left_val:0.1768511980772018},{features:[[12,9,3,4,-1.],[13,9,1,4,3.]],threshold:-2.9899610672146082e-003,right_val:-0.1014975011348724,left_val:0.3912242054939270},{features:[[12,8,3,5,-1.],[13,8,1,5,3.]],threshold:4.8546842299401760e-003,right_val:0.4219093918800354,left_val:-0.1177017986774445},{features:[[16,0,2,1,-1.],[17,0,1,1,2.]],threshold:1.0448860120959580e-004,right_val:0.2234444022178650,left_val:-0.1733397990465164},{features:[[5,17,1,3,-1.],[5,18,1,1,3.]],threshold:5.9689260524464771e-005,right_val:0.1655824035406113,left_val:-0.2340963035821915},{features:[[10,2,3,6,-1.],[10,4,3,2,3.]],threshold:-0.0134239196777344,right_val:-0.0997236520051956,left_val:0.4302381873130798},{features:[[4,17,2,3,-1.],[4,18,2,1,3.]],threshold:2.2581999655812979e-003,right_val:-0.5750101804733276,left_val:0.0727209895849228},{features:[[12,7,1,9,-1.],[12,10,1,3,3.]],threshold:-0.0125462803989649,right_val:-0.1145701035857201,left_val:0.3618457913398743},{features:[[7,6,3,9,-1.],[8,6,1,9,3.]],threshold:-2.8705769218504429e-003,right_val:-0.1236755028367043,left_val:0.2821053862571716},{features:[[17,13,3,6,-1.],[17,15,3,2,3.]],threshold:0.0197856407612562,right_val:-0.8066623806953430,left_val:0.0478767491877079},{features:[[7,7,3,8,-1.],[8,7,1,8,3.]],threshold:4.7588930465281010e-003,right_val:0.3374697864055634,left_val:-0.1092538982629776},{features:[[5,0,3,5,-1.],[6,0,1,5,3.]],threshold:-6.9974269717931747e-003,right_val:0.0457067005336285,left_val:-0.8029593825340271},{features:[[4,6,9,8,-1.],[7,6,3,8,3.]],threshold:-0.0130334803834558,right_val:-0.1768891066312790,left_val:0.1868043988943100},{features:[[2,9,3,3,-1.],[3,9,1,3,3.]],threshold:-1.3742579612880945e-003,right_val:-0.1280900985002518,left_val:0.2772547900676727},{features:[[16,18,4,2,-1.],[16,19,4,1,2.]],threshold:2.7657810132950544e-003,right_val:-0.4259473979473114,left_val:0.0907589420676231},{features:[[17,10,3,10,-1.],[17,15,3,5,2.]],threshold:2.8941841446794569e-004,right_val:0.0892677977681160,left_val:-0.3881632983684540}],threshold:-1.2257250547409058},{simpleClassifiers:[{features:[[8,9,6,4,-1.],[10,9,2,4,3.]],threshold:-0.0144692296162248,right_val:-0.2492828965187073,left_val:0.3750782907009125},{features:[[5,2,10,12,-1.],[5,6,10,4,3.]],threshold:-0.1331762969493866,right_val:-0.2241407036781311,left_val:0.3016637861728668},{features:[[6,9,6,3,-1.],[8,9,2,3,3.]],threshold:-0.0101321600377560,right_val:-0.1785001009702683,left_val:0.3698559105396271},{features:[[11,7,3,7,-1.],[12,7,1,7,3.]],threshold:-7.8511182218790054e-003,right_val:-0.1293139010667801,left_val:0.4608676135540009},{features:[[12,8,6,4,-1.],[14,8,2,4,3.]],threshold:-0.0142958397045732,right_val:-0.1022624000906944,left_val:0.4484142959117889},{features:[[14,8,6,5,-1.],[16,8,2,5,3.]],threshold:-5.9606940485537052e-003,right_val:-0.1532382965087891,left_val:0.2792798876762390},{features:[[12,12,2,4,-1.],[12,14,2,2,2.]],threshold:0.0109327696263790,right_val:0.3988964855670929,left_val:-0.1514174044132233},{features:[[3,15,1,2,-1.],[3,16,1,1,2.]],threshold:5.0430990086169913e-005,right_val:0.2164438962936401,left_val:-0.2268157005310059},{features:[[12,7,3,4,-1.],[13,7,1,4,3.]],threshold:-5.8431681245565414e-003,right_val:-0.1258715987205505,left_val:0.4542014896869659},{features:[[10,0,6,6,-1.],[12,0,2,6,3.]],threshold:-0.0223462097346783,right_val:0.0824031233787537,left_val:-0.6269019246101379},{features:[[10,6,3,8,-1.],[11,6,1,8,3.]],threshold:-4.8836669884622097e-003,right_val:-0.1468663066625595,left_val:0.2635925114154816},{features:[[16,17,1,2,-1.],[16,18,1,1,2.]],threshold:7.5506002758629620e-005,right_val:0.1667888015508652,left_val:-0.2450702041387558},{features:[[16,16,1,3,-1.],[16,17,1,1,3.]],threshold:-4.9026997294276953e-004,right_val:0.0899735614657402,left_val:-0.4264996051788330},{features:[[11,11,1,2,-1.],[11,12,1,1,2.]],threshold:1.4861579984426498e-003,right_val:0.3009765148162842,left_val:-0.1204025000333786},{features:[[3,7,6,9,-1.],[5,7,2,9,3.]],threshold:-0.0119883399456739,right_val:-0.1224434003233910,left_val:0.2785247862339020},{features:[[4,18,9,1,-1.],[7,18,3,1,3.]],threshold:0.0105022396892309,right_val:-0.7405040860176086,left_val:0.0404527597129345},{features:[[0,11,4,9,-1.],[0,14,4,3,3.]],threshold:-0.0309630092233419,right_val:0.0480137616395950,left_val:-0.6284269094467163},{features:[[9,17,6,3,-1.],[11,17,2,3,3.]],threshold:0.0114145204424858,right_val:-0.7167412042617798,left_val:0.0394052118062973},{features:[[7,8,6,12,-1.],[9,8,2,12,3.]],threshold:-0.0123370001092553,right_val:-0.1927430033683777,left_val:0.1994132995605469},{features:[[6,8,3,4,-1.],[7,8,1,4,3.]],threshold:-5.9942267835140228e-003,right_val:-0.0616580583155155,left_val:0.5131816267967224},{features:[[3,17,1,3,-1.],[3,18,1,1,3.]],threshold:-1.1923230485990644e-003,right_val:0.0506527200341225,left_val:-0.7260529994964600},{features:[[11,9,6,4,-1.],[13,9,2,4,3.]],threshold:-7.4582789093255997e-003,right_val:-0.1175478994846344,left_val:0.2960307896137238},{features:[[6,1,3,2,-1.],[7,1,1,2,3.]],threshold:2.7877509128302336e-003,right_val:-0.6953541040420532,left_val:0.0450687110424042},{features:[[1,0,2,1,-1.],[2,0,1,1,2.]],threshold:-2.2503209766000509e-004,right_val:-0.1577524989843369,left_val:0.2004725039005280},{features:[[1,0,2,14,-1.],[1,0,1,7,2.],[2,7,1,7,2.]],threshold:-5.0367889925837517e-003,right_val:-0.1170049980282784,left_val:0.2929981946945190},{features:[[5,5,11,8,-1.],[5,9,11,4,2.]],threshold:0.0747421607375145,right_val:0.3025662004947662,left_val:-0.1139231994748116},{features:[[9,3,5,6,-1.],[9,5,5,2,3.]],threshold:0.0202555190771818,right_val:0.4067046046257019,left_val:-0.1051589027047157},{features:[[7,9,5,10,-1.],[7,14,5,5,2.]],threshold:0.0442145094275475,right_val:0.1236386969685555,left_val:-0.2763164043426514},{features:[[15,10,2,2,-1.],[16,10,1,2,2.]],threshold:-8.7259558495134115e-004,right_val:-0.1330094933509827,left_val:0.2435503005981445},{features:[[0,18,8,2,-1.],[0,19,8,1,2.]],threshold:-2.4453739169985056e-003,right_val:0.0625106468796730,left_val:-0.5386617183685303},{features:[[7,17,1,3,-1.],[7,18,1,1,3.]],threshold:8.2725353422574699e-005,right_val:0.1627043932676315,left_val:-0.2077220976352692},{features:[[7,2,11,6,-1.],[7,4,11,2,3.]],threshold:-0.0366271100938320,right_val:-0.0903302803635597,left_val:0.3656840920448303},{features:[[8,3,9,3,-1.],[8,4,9,1,3.]],threshold:3.0996399000287056e-003,right_val:0.2535429894924164,left_val:-0.1318302005529404},{features:[[0,9,2,2,-1.],[0,10,2,1,2.]],threshold:-2.4709280114620924e-003,right_val:0.0535054318606853,left_val:-0.5685349702835083},{features:[[0,5,3,6,-1.],[0,7,3,2,3.]],threshold:-0.0141146704554558,right_val:0.0584852509200573,left_val:-0.4859901070594788},{features:[[6,7,2,2,-1.],[6,7,1,1,2.],[7,8,1,1,2.]],threshold:8.4537261864170432e-004,right_val:0.4026564955711365,left_val:-0.0800936371088028},{features:[[7,6,3,6,-1.],[8,6,1,6,3.]],threshold:-7.1098632179200649e-003,right_val:-0.0629474371671677,left_val:0.4470323920249939},{features:[[12,1,6,4,-1.],[14,1,2,4,3.]],threshold:-0.0191259607672691,right_val:0.0498227700591087,left_val:-0.6642286777496338},{features:[[9,11,6,8,-1.],[11,11,2,8,3.]],threshold:-5.0773010589182377e-003,right_val:-0.1685059964656830,left_val:0.1737940013408661},{features:[[17,15,3,3,-1.],[17,16,3,1,3.]],threshold:-2.9198289848864079e-003,right_val:0.0574279390275478,left_val:-0.6011028289794922},{features:[[6,6,3,9,-1.],[6,9,3,3,3.]],threshold:-0.0249021500349045,right_val:-0.1181845963001251,left_val:0.2339798063039780},{features:[[0,5,8,6,-1.],[0,5,4,3,2.],[4,8,4,3,2.]],threshold:0.0201477799564600,right_val:0.3602440059185028,left_val:-0.0894598215818405},{features:[[0,6,1,3,-1.],[0,7,1,1,3.]],threshold:1.7597640398889780e-003,right_val:-0.6310262084007263,left_val:0.0494584403932095},{features:[[17,0,2,6,-1.],[18,0,1,6,2.]],threshold:1.3812039978802204e-003,right_val:0.1897173970937729,left_val:-0.1521805971860886},{features:[[10,17,6,3,-1.],[12,17,2,3,3.]],threshold:-0.0109045403078198,right_val:0.0448627285659313,left_val:-0.5809738039970398},{features:[[13,15,2,2,-1.],[13,15,1,1,2.],[14,16,1,1,2.]],threshold:7.5157178798690438e-005,right_val:0.1954316049814224,left_val:-0.1377734988927841},{features:[[4,0,12,3,-1.],[4,1,12,1,3.]],threshold:3.8649770431220531e-003,right_val:0.2537496984004974,left_val:-0.1030222997069359}],threshold:-1.2863140106201172},{simpleClassifiers:[{features:[[5,3,10,9,-1.],[5,6,10,3,3.]],threshold:-0.1021588966250420,right_val:-0.1665562987327576,left_val:0.4168125987052918},{features:[[7,7,9,7,-1.],[10,7,3,7,3.]],threshold:-0.0519398190081120,right_val:-0.2071571052074432,left_val:0.3302395045757294},{features:[[5,8,9,6,-1.],[8,8,3,6,3.]],threshold:-0.0427177809178829,right_val:-0.1601389050483704,left_val:0.2609373033046722},{features:[[0,16,6,2,-1.],[0,17,6,1,2.]],threshold:4.3890418601222336e-004,right_val:0.1391891986131668,left_val:-0.3475053012371063},{features:[[12,6,7,14,-1.],[12,13,7,7,2.]],threshold:0.0242643896490335,right_val:0.1357838064432144,left_val:-0.4255205988883972},{features:[[13,7,6,8,-1.],[15,7,2,8,3.]],threshold:-0.0238205995410681,right_val:-0.1665204018354416,left_val:0.3174980878829956},{features:[[2,10,6,3,-1.],[4,10,2,3,3.]],threshold:-7.0518180727958679e-003,right_val:-0.1333830058574677,left_val:0.3094717860221863},{features:[[18,17,1,3,-1.],[18,18,1,1,3.]],threshold:-6.8517157342284918e-004,right_val:0.0877470001578331,left_val:-0.6008226275444031},{features:[[7,1,6,2,-1.],[7,2,6,1,2.]],threshold:5.3705149330198765e-003,right_val:0.3833355009555817,left_val:-0.1231144964694977},{features:[[6,0,6,4,-1.],[6,2,6,2,2.]],threshold:-0.0134035395458341,right_val:-0.1014048978686333,left_val:0.3387736976146698},{features:[[8,18,6,2,-1.],[10,18,2,2,3.]],threshold:-6.6856360062956810e-003,right_val:0.0477402210235596,left_val:-0.6119359731674194},{features:[[7,6,5,2,-1.],[7,7,5,1,2.]],threshold:-4.2887418530881405e-003,right_val:-0.1443451046943665,left_val:0.2527579069137573},{features:[[6,7,3,6,-1.],[7,7,1,6,3.]],threshold:-0.0108767496421933,right_val:-0.0594554804265499,left_val:0.5477573275566101},{features:[[18,18,2,2,-1.],[18,18,1,1,2.],[19,19,1,1,2.]],threshold:3.7882640026509762e-004,right_val:-0.4422636926174164,left_val:0.0834103003144264},{features:[[16,8,3,7,-1.],[17,8,1,7,3.]],threshold:-2.4550149682909250e-003,right_val:-0.1396448016166687,left_val:0.2333099991083145},{features:[[0,16,2,3,-1.],[0,17,2,1,3.]],threshold:1.2721839593723416e-003,right_val:-0.4945608973503113,left_val:0.0604802891612053},{features:[[5,19,6,1,-1.],[7,19,2,1,3.]],threshold:-4.8933159559965134e-003,right_val:0.0462184995412827,left_val:-0.6683326959609985},{features:[[9,5,6,6,-1.],[9,7,6,2,3.]],threshold:0.0264499895274639,right_val:0.4442596137523651,left_val:-0.0732353627681732},{features:[[0,10,2,4,-1.],[0,12,2,2,2.]],threshold:-3.3706070389598608e-003,right_val:0.0686765611171722,left_val:-0.4246433973312378},{features:[[0,9,4,3,-1.],[2,9,2,3,2.]],threshold:-2.9559480026364326e-003,right_val:-0.1822299957275391,left_val:0.1621803939342499},{features:[[1,10,6,9,-1.],[3,10,2,9,3.]],threshold:0.0306199099868536,right_val:0.5326362848281860,left_val:-0.0586433410644531},{features:[[9,0,6,2,-1.],[11,0,2,2,3.]],threshold:-9.5765907317399979e-003,right_val:0.0533459894359112,left_val:-0.6056268215179443},{features:[[14,1,2,1,-1.],[15,1,1,1,2.]],threshold:6.6372493165545166e-005,right_val:0.1928416043519974,left_val:-0.1668083965778351},{features:[[0,8,1,4,-1.],[0,10,1,2,2.]],threshold:5.0975950434803963e-003,right_val:-0.5745884180068970,left_val:0.0441195107996464},{features:[[15,6,2,2,-1.],[15,6,1,1,2.],[16,7,1,1,2.]],threshold:3.7112718564458191e-004,right_val:0.2310539036989212,left_val:-0.1108639985322952},{features:[[7,5,3,6,-1.],[8,5,1,6,3.]],threshold:-8.6607588455080986e-003,right_val:-0.0624460913240910,left_val:0.4045628905296326},{features:[[19,17,1,3,-1.],[19,18,1,1,3.]],threshold:8.7489158613607287e-004,right_val:-0.4487104117870331,left_val:0.0648751482367516},{features:[[7,10,3,1,-1.],[8,10,1,1,3.]],threshold:1.1120870476588607e-003,right_val:0.3045391142368317,left_val:-0.0938614606857300},{features:[[12,1,6,6,-1.],[14,1,2,6,3.]],threshold:-0.0238378196954727,right_val:0.0466594211757183,left_val:-0.5888742804527283},{features:[[15,5,2,1,-1.],[16,5,1,1,2.]],threshold:2.2272899514064193e-004,right_val:0.1770195066928864,left_val:-0.1489859968423843},{features:[[8,2,7,4,-1.],[8,4,7,2,2.]],threshold:0.0244674701243639,right_val:0.4920830130577087,left_val:-0.0557896010577679},{features:[[4,0,14,15,-1.],[4,5,14,5,3.]],threshold:-0.1423932015895844,right_val:-0.1877889931201935,left_val:0.1519200056791306},{features:[[7,8,6,6,-1.],[9,8,2,6,3.]],threshold:-0.0201231203973293,right_val:-0.1208190023899078,left_val:0.2178010046482086},{features:[[11,17,1,3,-1.],[11,18,1,1,3.]],threshold:1.1513679783092812e-004,right_val:0.1645192950963974,left_val:-0.1685658991336823},{features:[[12,16,2,4,-1.],[12,16,1,2,2.],[13,18,1,2,2.]],threshold:-2.7556740678846836e-003,right_val:0.0394494682550430,left_val:-0.6944203972816467},{features:[[10,13,2,1,-1.],[11,13,1,1,2.]],threshold:-7.5843912782147527e-005,right_val:-0.1518384069204330,left_val:0.1894136965274811},{features:[[11,8,3,3,-1.],[12,8,1,3,3.]],threshold:-7.0697711780667305e-003,right_val:-0.0579276196658611,left_val:0.4706459939479828},{features:[[2,0,6,8,-1.],[4,0,2,8,3.]],threshold:-0.0373931787908077,right_val:0.0341160483658314,left_val:-0.7589244842529297},{features:[[3,5,6,6,-1.],[3,5,3,3,2.],[6,8,3,3,2.]],threshold:-0.0159956105053425,right_val:-0.0875255763530731,left_val:0.3067046999931335},{features:[[10,8,3,3,-1.],[11,8,1,3,3.]],threshold:-3.1183990649878979e-003,right_val:-0.0912148877978325,left_val:0.2619537115097046},{features:[[5,17,4,2,-1.],[5,18,4,1,2.]],threshold:1.0651360498741269e-003,right_val:0.1527764052152634,left_val:-0.1742756068706513},{features:[[8,16,5,2,-1.],[8,17,5,1,2.]],threshold:-1.6029420075938106e-003,right_val:-0.0766299962997437,left_val:0.3561263084411621},{features:[[0,4,3,3,-1.],[0,5,3,1,3.]],threshold:4.3619908392429352e-003,right_val:-0.5922877192497253,left_val:0.0493569709360600},{features:[[6,3,6,2,-1.],[8,3,2,2,3.]],threshold:-0.0107799097895622,right_val:0.0332045406103134,left_val:-0.6392217874526978},{features:[[4,4,9,3,-1.],[7,4,3,3,3.]],threshold:-4.3590869754552841e-003,right_val:-0.1522132009267807,left_val:0.1610738933086395},{features:[[0,13,1,4,-1.],[0,15,1,2,2.]],threshold:7.4596069753170013e-003,right_val:-0.7500774264335632,left_val:0.0331729613244534},{features:[[0,17,8,3,-1.],[0,18,8,1,3.]],threshold:8.1385448575019836e-003,right_val:-0.7173116207122803,left_val:0.0263252798467875},{features:[[6,1,11,6,-1.],[6,3,11,2,3.]],threshold:-0.0333384908735752,right_val:-0.0708035901188850,left_val:0.3353661000728607}],threshold:-1.1189440488815308},{simpleClassifiers:[{features:[[4,10,6,2,-1.],[6,10,2,2,3.]],threshold:0.0195539798587561,right_val:0.5312895178794861,left_val:-0.1043972000479698},{features:[[10,8,1,12,-1.],[10,14,1,6,2.]],threshold:0.0221229195594788,right_val:0.2084725052118301,left_val:-0.2474727034568787},{features:[[5,8,3,4,-1.],[6,8,1,4,3.]],threshold:-4.1829389519989491e-003,right_val:-0.1471157968044281,left_val:0.3828943967819214},{features:[[0,17,1,3,-1.],[0,18,1,1,3.]],threshold:-8.6381728760898113e-004,right_val:0.1199325993657112,left_val:-0.6263288855552673},{features:[[0,17,1,3,-1.],[0,18,1,1,3.]],threshold:7.9958612332120538e-004,right_val:-0.5516883134841919,left_val:0.0925734713673592},{features:[[13,8,3,4,-1.],[14,8,1,4,3.]],threshold:9.1527570039033890e-003,right_val:0.5551251173019409,left_val:-0.0729298070073128},{features:[[1,5,5,4,-1.],[1,7,5,2,2.]],threshold:-3.9388681761920452e-003,right_val:-0.2091203927993774,left_val:0.2019603997468948},{features:[[18,14,1,2,-1.],[18,15,1,1,2.]],threshold:1.4613410166930407e-004,right_val:0.1381741017103195,left_val:-0.2786181867122650},{features:[[13,8,2,4,-1.],[14,8,1,4,2.]],threshold:-3.1691689509898424e-003,right_val:-0.0763082429766655,left_val:0.3668589890003204},{features:[[10,6,6,8,-1.],[12,6,2,8,3.]],threshold:-0.0221893899142742,right_val:-0.1097154021263123,left_val:0.3909659981727600},{features:[[8,6,6,10,-1.],[10,6,2,10,3.]],threshold:-7.4523608200252056e-003,right_val:-0.2415986955165863,left_val:0.1283859014511108},{features:[[17,16,1,3,-1.],[17,17,1,1,3.]],threshold:7.7997002517804503e-004,right_val:-0.4397650063037872,left_val:0.0719780698418617},{features:[[1,7,2,10,-1.],[2,7,1,10,2.]],threshold:-4.6783639118075371e-003,right_val:-0.1420592069625855,left_val:0.2156984955072403},{features:[[5,9,6,3,-1.],[7,9,2,3,3.]],threshold:-0.0151886399835348,right_val:-0.0826759263873100,left_val:0.3645878136157990},{features:[[0,8,5,12,-1.],[0,14,5,6,2.]],threshold:5.0619798712432384e-003,right_val:0.0920682325959206,left_val:-0.3438040912151337},{features:[[0,11,1,3,-1.],[0,12,1,1,3.]],threshold:-1.7351920250803232e-003,right_val:0.0492144785821438,left_val:-0.6172549724578857},{features:[[6,16,6,4,-1.],[8,16,2,4,3.]],threshold:-0.0124234501272440,right_val:0.0461126007139683,left_val:-0.5855895280838013},{features:[[0,6,2,6,-1.],[0,8,2,2,3.]],threshold:-0.0130314296111465,right_val:0.0406724587082863,left_val:-0.5971078872680664},{features:[[11,18,2,1,-1.],[12,18,1,1,2.]],threshold:-1.2369629694148898e-003,right_val:0.0331561788916588,left_val:-0.6833416819572449},{features:[[5,1,9,2,-1.],[5,2,9,1,2.]],threshold:6.1022108420729637e-003,right_val:0.3010224103927612,left_val:-0.0947292372584343},{features:[[0,0,1,2,-1.],[0,1,1,1,2.]],threshold:6.6952849738299847e-004,right_val:-0.3519603013992310,left_val:0.0818168669939041},{features:[[15,9,3,3,-1.],[16,9,1,3,3.]],threshold:-1.7970580374822021e-003,right_val:-0.1176870986819267,left_val:0.2371897995471954},{features:[[18,16,1,3,-1.],[18,17,1,1,3.]],threshold:-7.1074528386816382e-004,right_val:0.0576824806630611,left_val:-0.4476378858089447},{features:[[11,10,6,1,-1.],[13,10,2,1,3.]],threshold:-5.9126471169292927e-003,right_val:-0.0668685734272003,left_val:0.4342541098594666},{features:[[1,3,4,4,-1.],[3,3,2,4,2.]],threshold:-3.3132149837911129e-003,right_val:-0.1418032050132752,left_val:0.1815001070499420},{features:[[11,2,1,18,-1.],[11,8,1,6,3.]],threshold:-0.0608146600425243,right_val:-0.0614106394350529,left_val:0.4722171127796173},{features:[[9,1,5,12,-1.],[9,5,5,4,3.]],threshold:-0.0967141836881638,right_val:-0.0944900363683701,left_val:0.2768316864967346},{features:[[12,0,8,1,-1.],[16,0,4,1,2.]],threshold:3.9073550142347813e-003,right_val:0.2105740010738373,left_val:-0.1227853000164032},{features:[[8,6,3,10,-1.],[9,6,1,10,3.]],threshold:-9.0431869029998779e-003,right_val:-0.0778062269091606,left_val:0.3564156889915466},{features:[[19,2,1,6,-1.],[19,4,1,2,3.]],threshold:-4.8800031654536724e-003,right_val:0.0696943774819374,left_val:-0.4103479087352753},{features:[[18,6,2,2,-1.],[18,7,2,1,2.]],threshold:-4.3547428213059902e-003,right_val:0.0366551503539085,left_val:-0.7301788926124573},{features:[[7,7,3,4,-1.],[8,7,1,4,3.]],threshold:-9.6500627696514130e-003,right_val:-0.0531680807471275,left_val:0.5518112778663635},{features:[[5,0,6,5,-1.],[7,0,2,5,3.]],threshold:-0.0173973105847836,right_val:0.0502140894532204,left_val:-0.5708423256874085},{features:[[0,3,7,3,-1.],[0,4,7,1,3.]],threshold:-6.8304329179227352e-003,right_val:0.0502026900649071,left_val:-0.4618028104305267},{features:[[1,6,2,1,-1.],[2,6,1,1,2.]],threshold:3.3255619928240776e-004,right_val:0.2598375976085663,left_val:-0.0953627303242683},{features:[[4,8,2,10,-1.],[4,8,1,5,2.],[5,13,1,5,2.]],threshold:-2.3100529797375202e-003,right_val:-0.1053353026509285,left_val:0.2287247031927109},{features:[[2,18,18,2,-1.],[2,18,9,1,2.],[11,19,9,1,2.]],threshold:-7.5426651164889336e-003,right_val:0.0488634593784809,left_val:-0.5699051022529602},{features:[[2,7,4,4,-1.],[2,7,2,2,2.],[4,9,2,2,2.]],threshold:-5.2723060362040997e-003,right_val:-0.0823901072144508,left_val:0.3514518141746521},{features:[[17,3,3,4,-1.],[18,3,1,4,3.]],threshold:-4.8578968271613121e-003,right_val:0.0445394404232502,left_val:-0.6041762232780457},{features:[[16,9,2,8,-1.],[16,9,1,4,2.],[17,13,1,4,2.]],threshold:1.5867310576140881e-003,right_val:0.2328201979398727,left_val:-0.1034090965986252},{features:[[15,7,1,6,-1.],[15,9,1,2,3.]],threshold:-4.7427811659872532e-003,right_val:-0.0980904996395111,left_val:0.2849028110504150},{features:[[14,2,2,2,-1.],[14,3,2,1,2.]],threshold:-1.3515240279957652e-003,right_val:-0.1136184036731720,left_val:0.2309643030166626},{features:[[17,0,2,3,-1.],[17,1,2,1,3.]],threshold:2.2526069078594446e-003,right_val:-0.4220589101314545,left_val:0.0644783228635788},{features:[[16,18,2,2,-1.],[16,18,1,1,2.],[17,19,1,1,2.]],threshold:-3.8038659840822220e-004,right_val:0.0600432902574539,left_val:-0.3807620108127594},{features:[[10,4,4,3,-1.],[10,5,4,1,3.]],threshold:4.9043921753764153e-003,right_val:0.3323217034339905,left_val:-0.0761049985885620},{features:[[0,2,8,6,-1.],[4,2,4,6,2.]],threshold:-9.0969670563936234e-003,right_val:-0.1688780039548874,left_val:0.1428779065608978},{features:[[7,14,6,6,-1.],[7,16,6,2,3.]],threshold:-6.9317929446697235e-003,right_val:-0.0928795635700226,left_val:0.2725540995597839},{features:[[11,15,2,2,-1.],[11,16,2,1,2.]],threshold:1.1471060570329428e-003,right_val:0.1970240026712418,left_val:-0.1527305990457535},{features:[[7,1,9,4,-1.],[10,1,3,4,3.]],threshold:-0.0376628898084164,right_val:0.0407386012375355,left_val:-0.5932043790817261},{features:[[9,7,3,7,-1.],[10,7,1,7,3.]],threshold:-6.8165571428835392e-003,right_val:-0.0940819606184959,left_val:0.2549408972263336},{features:[[6,17,2,2,-1.],[6,17,1,1,2.],[7,18,1,1,2.]],threshold:6.6205562325194478e-004,right_val:-0.4845437109470367,left_val:0.0467957183718681},{features:[[4,6,3,9,-1.],[5,6,1,9,3.]],threshold:-4.2202551849186420e-003,right_val:-0.0946739763021469,left_val:0.2468214929103851},{features:[[0,10,19,10,-1.],[0,15,19,5,2.]],threshold:-0.0689865127205849,right_val:0.0359263904392719,left_val:-0.6651480197906494},{features:[[5,17,6,1,-1.],[7,17,2,1,3.]],threshold:6.1707608401775360e-003,right_val:-0.7268627285957336,left_val:0.0258333198726177},{features:[[0,12,6,3,-1.],[3,12,3,3,2.]],threshold:0.0105362497270107,right_val:0.2976079881191254,left_val:-0.0818289965391159}],threshold:-1.1418989896774292},{simpleClassifiers:[{features:[[2,5,18,5,-1.],[8,5,6,5,3.]],threshold:-0.0627587288618088,right_val:-0.2965610921382904,left_val:0.2789908051490784},{features:[[1,15,6,4,-1.],[1,17,6,2,2.]],threshold:3.4516479354351759e-003,right_val:0.2090384066104889,left_val:-0.3463588058948517},{features:[[14,10,6,6,-1.],[16,10,2,6,3.]],threshold:-7.8699486330151558e-003,right_val:-0.1920557022094727,left_val:0.2414488941431046},{features:[[0,14,4,3,-1.],[0,15,4,1,3.]],threshold:-3.4624869003891945e-003,right_val:0.1248644962906838,left_val:-0.5915178060531616},{features:[[1,7,6,11,-1.],[3,7,2,11,3.]],threshold:-9.4818761572241783e-003,right_val:-0.2485826015472412,left_val:0.1839154064655304},{features:[[13,17,7,2,-1.],[13,18,7,1,2.]],threshold:2.3226840130519122e-004,right_val:0.1099926009774208,left_val:-0.3304725885391235},{features:[[0,14,2,3,-1.],[0,15,2,1,3.]],threshold:1.8101120367646217e-003,right_val:-0.4963478147983551,left_val:0.0987440124154091},{features:[[0,0,6,2,-1.],[3,0,3,2,2.]],threshold:-5.4422430694103241e-003,right_val:-0.1309475004673004,left_val:0.2934441864490509},{features:[[0,1,6,3,-1.],[3,1,3,3,2.]],threshold:7.4148122221231461e-003,right_val:0.3327716886997223,left_val:-0.1476269960403442},{features:[[0,8,2,6,-1.],[0,10,2,2,3.]],threshold:-0.0155651401728392,right_val:0.0998726934194565,left_val:-0.6840490102767944},{features:[[1,2,6,14,-1.],[1,2,3,7,2.],[4,9,3,7,2.]],threshold:0.0287205204367638,right_val:0.3090257942676544,left_val:-0.1483328044414520},{features:[[17,5,2,2,-1.],[17,5,1,1,2.],[18,6,1,1,2.]],threshold:9.6687392215244472e-005,right_val:0.2140295952558518,left_val:-0.1743104010820389},{features:[[11,10,9,4,-1.],[14,10,3,4,3.]],threshold:0.0523710586130619,right_val:0.4922299087047577,left_val:-0.0701568573713303},{features:[[2,9,12,4,-1.],[6,9,4,4,3.]],threshold:-0.0864856913685799,right_val:-0.0752942115068436,left_val:0.5075724720954895},{features:[[7,10,12,2,-1.],[11,10,4,2,3.]],threshold:-0.0421698689460754,right_val:-0.0902199000120163,left_val:0.4568096101284027},{features:[[2,13,1,2,-1.],[2,14,1,1,2.]],threshold:4.5369830331765115e-005,right_val:0.1618953943252564,left_val:-0.2653827965259552},{features:[[16,7,4,3,-1.],[16,8,4,1,3.]],threshold:5.2918000146746635e-003,right_val:-0.5405467152595520,left_val:0.0748901516199112},{features:[[19,16,1,3,-1.],[19,17,1,1,3.]],threshold:-7.5511651812121272e-004,right_val:0.0587239488959312,left_val:-0.4926199018955231},{features:[[18,11,1,2,-1.],[18,12,1,1,2.]],threshold:7.5108138844370842e-005,right_val:0.1407776027917862,left_val:-0.2143210023641586},{features:[[12,7,8,2,-1.],[12,7,4,1,2.],[16,8,4,1,2.]],threshold:4.9981209449470043e-003,right_val:0.3571606874465942,left_val:-0.0905473381280899},{features:[[14,9,2,4,-1.],[15,9,1,4,2.]],threshold:-1.4929979806765914e-003,right_val:-0.1422906965017319,left_val:0.2562345862388611},{features:[[14,2,6,4,-1.],[14,2,3,2,2.],[17,4,3,2,2.]],threshold:2.7239411137998104e-003,right_val:0.2108871042728424,left_val:-0.1564925014972687},{features:[[14,0,6,1,-1.],[17,0,3,1,2.]],threshold:2.2218320518732071e-003,right_val:0.2680186927318573,left_val:-0.1507298946380615},{features:[[3,12,2,1,-1.],[4,12,1,1,2.]],threshold:-7.3993072146549821e-004,right_val:-0.1069239005446434,left_val:0.2954699099063873},{features:[[17,2,3,1,-1.],[18,2,1,1,3.]],threshold:2.0113459322601557e-003,right_val:-0.7168337106704712,left_val:0.0506143495440483},{features:[[1,16,18,2,-1.],[7,16,6,2,3.]],threshold:0.0114528704434633,right_val:0.2415277957916260,left_val:-0.1271906942129135},{features:[[2,19,8,1,-1.],[6,19,4,1,2.]],threshold:-1.0782170575112104e-003,right_val:-0.1346119940280914,left_val:0.2481300979852676},{features:[[1,17,4,3,-1.],[1,18,4,1,3.]],threshold:3.3417691010981798e-003,right_val:-0.5227416753768921,left_val:0.0535783097147942},{features:[[19,13,1,2,-1.],[19,14,1,1,2.]],threshold:6.9398651248775423e-005,right_val:0.1281217932701111,left_val:-0.2169874012470245},{features:[[9,16,10,4,-1.],[9,16,5,2,2.],[14,18,5,2,2.]],threshold:-4.0982551872730255e-003,right_val:-0.1157058998942375,left_val:0.2440188974142075},{features:[[12,9,2,4,-1.],[12,9,1,2,2.],[13,11,1,2,2.]],threshold:-1.6289720078930259e-003,right_val:-0.1065946966409683,left_val:0.2826147079467773},{features:[[19,11,1,9,-1.],[19,14,1,3,3.]],threshold:0.0139848599210382,right_val:-0.7364631295204163,left_val:0.0427158996462822}],threshold:-1.1255199909210205},{simpleClassifiers:[{features:[[6,6,14,14,-1.],[6,13,14,7,2.]],threshold:0.1641651988029480,right_val:0.1760770976543427,left_val:-0.4896030128002167},{features:[[2,17,4,2,-1.],[2,18,4,1,2.]],threshold:8.3413062384352088e-004,right_val:0.2419957965612412,left_val:-0.2822043001651764},{features:[[0,2,1,3,-1.],[0,3,1,1,3.]],threshold:-1.7193210078403354e-003,right_val:0.0861622169613838,left_val:-0.7148588895797730},{features:[[0,12,1,3,-1.],[0,13,1,1,3.]],threshold:-1.5654950402677059e-003,right_val:0.0940706729888916,left_val:-0.7297238111495972},{features:[[15,15,4,4,-1.],[15,17,4,2,2.]],threshold:1.9124479731544852e-003,right_val:0.1814339011907578,left_val:-0.3118715882301331},{features:[[2,5,18,7,-1.],[8,5,6,7,3.]],threshold:-0.1351236999034882,right_val:-0.2217925041913986,left_val:0.2957729995250702},{features:[[1,16,5,3,-1.],[1,17,5,1,3.]],threshold:-4.0300549007952213e-003,right_val:0.0854310169816017,left_val:-0.6659513711929321},{features:[[0,4,2,3,-1.],[0,5,2,1,3.]],threshold:-2.8640460222959518e-003,right_val:0.0531060211360455,left_val:-0.6208636164665222},{features:[[0,6,2,6,-1.],[1,6,1,6,2.]],threshold:-1.4065420255064964e-003,right_val:-0.2021100968122482,left_val:0.2234628945589066},{features:[[16,14,4,3,-1.],[16,15,4,1,3.]],threshold:-3.5820449702441692e-003,right_val:0.0682136192917824,left_val:-0.5403040051460266},{features:[[0,0,10,6,-1.],[0,0,5,3,2.],[5,3,5,3,2.]],threshold:0.0415444709360600,right_val:0.6210923194885254,left_val:-0.0652158409357071},{features:[[2,2,3,6,-1.],[3,2,1,6,3.]],threshold:-9.1709550470113754e-003,right_val:0.0526404492557049,left_val:-0.7555329799652100},{features:[[2,0,3,10,-1.],[3,0,1,10,3.]],threshold:6.1552738770842552e-003,right_val:-0.4424613118171692,left_val:0.0909394025802612},{features:[[5,5,2,2,-1.],[5,6,2,1,2.]],threshold:-1.0043520014733076e-003,right_val:-0.1866979002952576,left_val:0.2429233044385910},{features:[[12,6,4,4,-1.],[12,8,4,2,2.]],threshold:0.0115198297426105,right_val:0.3672345876693726,left_val:-0.1176315024495125},{features:[[13,5,7,3,-1.],[13,6,7,1,3.]],threshold:-8.9040733873844147e-003,right_val:0.1089702025055885,left_val:-0.4893133044242859},{features:[[10,13,1,2,-1.],[10,14,1,1,2.]],threshold:5.3973670583218336e-004,right_val:0.1848998963832855,left_val:-0.2185039967298508},{features:[[16,16,4,2,-1.],[18,16,2,2,2.]],threshold:1.3727260520681739e-003,right_val:0.2917312979698181,left_val:-0.1507291048765183},{features:[[16,12,4,7,-1.],[18,12,2,7,2.]],threshold:-0.0108073903247714,right_val:-0.1028013974428177,left_val:0.4289745092391968},{features:[[16,17,1,3,-1.],[16,18,1,1,3.]],threshold:1.2670770520344377e-003,right_val:-0.6420825123786926,left_val:0.0741921588778496},{features:[[19,9,1,3,-1.],[19,10,1,1,3.]],threshold:2.2991129662841558e-003,right_val:-0.7233523130416870,left_val:0.0471002794802189},{features:[[18,7,2,6,-1.],[19,7,1,6,2.]],threshold:2.7187510859221220e-003,right_val:0.2351350933313370,left_val:-0.1708686947822571},{features:[[8,1,3,4,-1.],[9,1,1,4,3.]],threshold:-6.6619180142879486e-003,right_val:0.0450846701860428,left_val:-0.7897542715072632},{features:[[14,0,6,9,-1.],[16,0,2,9,3.]],threshold:-0.0482666492462158,right_val:0.0419760793447495,left_val:-0.6957991719245911},{features:[[4,2,10,2,-1.],[9,2,5,2,2.]],threshold:0.0152146900072694,right_val:0.3646062016487122,left_val:-0.1081828027963638},{features:[[2,12,8,4,-1.],[2,12,4,2,2.],[6,14,4,2,2.]],threshold:-6.0080131515860558e-003,right_val:-0.1135921031236649,left_val:0.3097099065780640},{features:[[0,4,7,3,-1.],[0,5,7,1,3.]],threshold:6.6127157770097256e-003,right_val:-0.4665853083133698,left_val:0.0806653425097466},{features:[[14,14,3,3,-1.],[15,14,1,3,3.]],threshold:-7.9607013612985611e-003,right_val:0.0367745906114578,left_val:-0.8720194101333618},{features:[[0,3,4,3,-1.],[2,3,2,3,2.]],threshold:3.8847199175506830e-003,right_val:0.3307026922702789,left_val:-0.1166628971695900},{features:[[1,0,2,7,-1.],[2,0,1,7,2.]],threshold:-1.0988810099661350e-003,right_val:-0.1765675991773605,left_val:0.2387257069349289}],threshold:-1.1729990243911743},{simpleClassifiers:[{features:[[15,16,4,4,-1.],[15,18,4,2,2.]],threshold:3.5903379321098328e-003,right_val:0.2463164031505585,left_val:-0.2368807941675186},{features:[[5,8,12,4,-1.],[5,10,12,2,2.]],threshold:6.4815930090844631e-003,right_val:0.1867575943470001,left_val:-0.3137362003326416},{features:[[3,17,1,2,-1.],[3,18,1,1,2.]],threshold:7.3048402555286884e-005,right_val:0.1649623960256577,left_val:-0.2764435112476349},{features:[[6,1,3,4,-1.],[7,1,1,4,3.]],threshold:-3.8514640182256699e-003,right_val:0.1129473969340324,left_val:-0.5601450800895691},{features:[[6,2,3,4,-1.],[7,2,1,4,3.]],threshold:3.8588210009038448e-003,right_val:-0.5807185769081116,left_val:0.0398489981889725},{features:[[6,8,9,12,-1.],[9,8,3,12,3.]],threshold:-0.0246512200683355,right_val:-0.2534367144107819,left_val:0.1675501018762589},{features:[[8,1,8,6,-1.],[8,3,8,2,3.]],threshold:0.0472455210983753,right_val:0.3945198059082031,left_val:-0.1066208034753799},{features:[[14,2,6,3,-1.],[17,2,3,3,2.]],threshold:6.5964651294052601e-003,right_val:0.2728019058704376,left_val:-0.1774425059556961},{features:[[0,6,1,3,-1.],[0,7,1,1,3.]],threshold:-1.3177490327507257e-003,right_val:0.0486065894365311,left_val:-0.5427265167236328},{features:[[10,0,10,2,-1.],[15,0,5,2,2.]],threshold:-5.0261709839105606e-003,right_val:-0.1314364969730377,left_val:0.2439424991607666},{features:[[11,0,3,2,-1.],[12,0,1,2,3.]],threshold:3.4632768947631121e-003,right_val:-0.7033624053001404,left_val:0.0690493434667587},{features:[[3,19,10,1,-1.],[8,19,5,1,2.]],threshold:2.1692588925361633e-003,right_val:0.2209852933883667,left_val:-0.1328946053981781},{features:[[0,4,7,16,-1.],[0,12,7,8,2.]],threshold:0.0293958708643913,right_val:0.1354399025440216,left_val:-0.2853052020072937},{features:[[2,16,1,3,-1.],[2,17,1,1,3.]],threshold:-9.6181448316201568e-004,right_val:0.0374506488442421,left_val:-0.5804138183593750},{features:[[7,8,12,6,-1.],[11,8,4,6,3.]],threshold:-0.1082099974155426,right_val:-0.0786559432744980,left_val:0.3946728110313416},{features:[[14,9,6,7,-1.],[16,9,2,7,3.]],threshold:-0.0180248692631722,right_val:-0.1341529935598373,left_val:0.2735562920570374},{features:[[12,17,6,1,-1.],[14,17,2,1,3.]],threshold:6.2509840354323387e-003,right_val:-0.8008859157562256,left_val:0.0233880598098040},{features:[[16,1,3,1,-1.],[17,1,1,1,3.]],threshold:-1.6088379779830575e-003,right_val:0.0412156693637371,left_val:-0.5676252245903015},{features:[[0,17,8,2,-1.],[0,17,4,1,2.],[4,18,4,1,2.]],threshold:7.7564752427861094e-004,right_val:0.1908618062734604,left_val:-0.1489126980304718},{features:[[17,0,2,1,-1.],[18,0,1,1,2.]],threshold:8.7122338300105184e-005,right_val:0.1942822039127350,left_val:-0.1555753052234650},{features:[[4,15,6,5,-1.],[6,15,2,5,3.]],threshold:-0.0207553207874298,right_val:0.0361343808472157,left_val:-0.6300653219223023},{features:[[7,2,8,2,-1.],[7,3,8,1,2.]],threshold:-6.2931738793849945e-003,right_val:-0.1058826968073845,left_val:0.2560924887657166},{features:[[4,1,8,4,-1.],[4,3,8,2,2.]],threshold:0.0108441496267915,right_val:0.3032212853431702,left_val:-0.1012485027313232},{features:[[5,19,2,1,-1.],[6,19,1,1,2.]],threshold:-6.3752777350600809e-005,right_val:-0.1384923011064529,left_val:0.1911157965660095},{features:[[5,19,2,1,-1.],[6,19,1,1,2.]],threshold:6.6480963141657412e-005,right_val:0.2170630991458893,left_val:-0.1520525068044663},{features:[[16,17,1,3,-1.],[16,18,1,1,3.]],threshold:1.3560829684138298e-003,right_val:-0.6427984237670898,left_val:0.0494317896664143},{features:[[0,11,2,3,-1.],[1,11,1,3,2.]],threshold:-9.0662558795884252e-004,right_val:-0.1404460966587067,left_val:0.1798201054334641},{features:[[0,19,4,1,-1.],[2,19,2,1,2.]],threshold:1.0473709553480148e-003,right_val:0.2426594048738480,left_val:-0.1093354970216751},{features:[[0,18,4,2,-1.],[2,18,2,2,2.]],threshold:-1.0243969736620784e-003,right_val:-0.1182091981172562,left_val:0.2716268002986908},{features:[[2,17,1,3,-1.],[2,18,1,1,3.]],threshold:-1.2024149764329195e-003,right_val:0.0394898988306522,left_val:-0.7015110254287720},{features:[[5,7,11,2,-1.],[5,8,11,1,2.]],threshold:7.6911649666726589e-003,right_val:0.3104628920555115,left_val:-0.0922189131379128},{features:[[9,2,4,10,-1.],[9,7,4,5,2.]],threshold:-0.1396654993295670,right_val:-0.0397061184048653,left_val:0.6897938847541809},{features:[[0,2,4,3,-1.],[0,3,4,1,3.]],threshold:2.1276050247251987e-003,right_val:-0.2884179949760437,left_val:0.0972776114940643},{features:[[10,19,10,1,-1.],[15,19,5,1,2.]],threshold:-2.7594310231506824e-003,right_val:-0.1127782016992569,left_val:0.2416867017745972},{features:[[11,17,8,3,-1.],[15,17,4,3,2.]],threshold:5.2236132323741913e-003,right_val:0.2425678074359894,left_val:-0.1143027991056442},{features:[[8,19,3,1,-1.],[9,19,1,1,3.]],threshold:-1.2590440455824137e-003,right_val:0.0476639606058598,left_val:-0.5967938899993897},{features:[[14,0,3,4,-1.],[15,0,1,4,3.]],threshold:-3.7192099262028933e-003,right_val:0.0528476908802986,left_val:-0.4641413092613220},{features:[[10,6,4,3,-1.],[10,7,4,1,3.]],threshold:5.9696151874959469e-003,right_val:0.3874309062957764,left_val:-0.0732442885637283},{features:[[0,8,3,2,-1.],[0,9,3,1,2.]],threshold:-5.1776720210909843e-003,right_val:0.0404967106878757,left_val:-0.7419322729110718},{features:[[7,12,3,6,-1.],[7,14,3,2,3.]],threshold:5.0035100430250168e-003,right_val:0.1876762062311173,left_val:-0.1388880014419556},{features:[[1,18,1,2,-1.],[1,19,1,1,2.]],threshold:-5.2013457752764225e-004,right_val:0.0494178496301174,left_val:-0.5494061708450317},{features:[[0,12,4,4,-1.],[2,12,2,4,2.]],threshold:5.3168768063187599e-003,right_val:0.3174056112766266,left_val:-0.0824829787015915},{features:[[1,8,6,7,-1.],[3,8,2,7,3.]],threshold:-0.0147745897993445,right_val:-0.1211555972695351,left_val:0.2081609964370728},{features:[[0,8,4,5,-1.],[2,8,2,5,2.]],threshold:-0.0414164513349533,right_val:0.0333291888237000,left_val:-0.8243780732154846}],threshold:-1.0368299484252930},{simpleClassifiers:[{features:[[19,16,1,3,-1.],[19,17,1,1,3.]],threshold:9.0962520334869623e-004,right_val:-0.5611841082572937,left_val:0.0845799669623375},{features:[[1,5,18,6,-1.],[7,5,6,6,3.]],threshold:-0.0561397895216942,right_val:-0.2696731984615326,left_val:0.1534174978733063},{features:[[2,15,4,2,-1.],[2,16,4,1,2.]],threshold:1.0292009683325887e-003,right_val:0.2015317976474762,left_val:-0.2048998028039932},{features:[[18,6,2,11,-1.],[19,6,1,11,2.]],threshold:2.8783010784536600e-003,right_val:0.2129794955253601,left_val:-0.1735114008188248},{features:[[0,12,2,6,-1.],[0,14,2,2,3.]],threshold:-7.4144392274320126e-003,right_val:0.0470779500901699,left_val:-0.5962486863136292},{features:[[12,5,3,2,-1.],[12,6,3,1,2.]],threshold:-1.4831849839538336e-003,right_val:-0.1598639041185379,left_val:0.1902461051940918},{features:[[1,3,2,3,-1.],[1,4,2,1,3.]],threshold:4.5968941412866116e-003,right_val:-0.6869434118270874,left_val:0.0314471311867237},{features:[[16,14,4,4,-1.],[16,16,4,2,2.]],threshold:2.4255330208688974e-003,right_val:0.1103610992431641,left_val:-0.2360935956239700},{features:[[6,8,12,5,-1.],[10,8,4,5,3.]],threshold:-0.0849505662918091,right_val:-0.1377653032541275,left_val:0.2310716062784195},{features:[[13,7,2,7,-1.],[14,7,1,7,2.]],threshold:-5.0145681016147137e-003,right_val:-0.0562173798680305,left_val:0.3867610991001129},{features:[[1,8,2,6,-1.],[2,8,1,6,2.]],threshold:-2.1482061129063368e-003,right_val:-0.1761569976806641,left_val:0.1819159984588623},{features:[[15,0,3,7,-1.],[16,0,1,7,3.]],threshold:-0.0103967702016234,right_val:0.0240919701755047,left_val:-0.7535138130187988},{features:[[4,2,6,2,-1.],[6,2,2,2,3.]],threshold:-0.0134667502716184,right_val:0.0349493697285652,left_val:-0.7211886048316956},{features:[[0,9,20,9,-1.],[0,12,20,3,3.]],threshold:-0.0844354778528214,right_val:0.0711138173937798,left_val:-0.3379263877868652},{features:[[10,14,2,2,-1.],[10,15,2,1,2.]],threshold:2.4771490134298801e-003,right_val:0.2254198938608170,left_val:-0.1176510974764824},{features:[[6,5,10,4,-1.],[6,7,10,2,2.]],threshold:0.0158280506730080,right_val:0.3139536976814270,left_val:-0.0695362165570259},{features:[[6,1,5,9,-1.],[6,4,5,3,3.]],threshold:0.0649169832468033,right_val:0.4067733883857727,left_val:-0.0750435888767242},{features:[[16,18,2,2,-1.],[16,18,1,1,2.],[17,19,1,1,2.]],threshold:2.9652469675056636e-004,right_val:-0.3454400897026062,left_val:0.0739533603191376},{features:[[0,14,2,4,-1.],[0,16,2,2,2.]],threshold:1.3129520229995251e-003,right_val:0.1525837033987045,left_val:-0.1690943986177445},{features:[[10,8,2,5,-1.],[11,8,1,5,2.]],threshold:-5.8032129891216755e-003,right_val:-0.0834440663456917,left_val:0.3526014983654022},{features:[[3,7,12,7,-1.],[7,7,4,7,3.]],threshold:-0.1479167938232422,right_val:-0.0573099292814732,left_val:0.4300465881824493},{features:[[0,0,6,6,-1.],[3,0,3,6,2.]],threshold:-0.0165841504931450,right_val:-0.1090764030814171,left_val:0.2343268990516663},{features:[[1,0,4,4,-1.],[3,0,2,4,2.]],threshold:3.0183270573616028e-003,right_val:0.2640928924083710,left_val:-0.1360093951225281},{features:[[0,0,6,8,-1.],[2,0,2,8,3.]],threshold:-0.0364719182252884,right_val:0.0435451082885265,left_val:-0.6280974149703980},{features:[[0,0,2,1,-1.],[1,0,1,1,2.]],threshold:-7.3119226726703346e-005,right_val:-0.1646378040313721,left_val:0.1647063046693802},{features:[[0,0,3,3,-1.],[0,1,3,1,3.]],threshold:-3.6719450727105141e-003,right_val:0.0485869199037552,left_val:-0.4742136001586914},{features:[[5,4,2,4,-1.],[5,6,2,2,2.]],threshold:-4.0151178836822510e-003,right_val:-0.1409751027822495,left_val:0.1822218000888825},{features:[[2,10,9,1,-1.],[5,10,3,1,3.]],threshold:0.0199480205774307,right_val:0.3670746088027954,left_val:-0.0697876587510109},{features:[[1,17,1,3,-1.],[1,18,1,1,3.]],threshold:7.6699437340721488e-004,right_val:-0.4458543062210083,left_val:0.0557292997837067},{features:[[0,17,2,3,-1.],[0,18,2,1,3.]],threshold:-1.1806039838120341e-003,right_val:0.0489022210240364,left_val:-0.4687662124633789},{features:[[0,15,16,3,-1.],[8,15,8,3,2.]],threshold:0.0158473495393991,right_val:0.2056653052568436,left_val:-0.1212020963430405},{features:[[0,5,4,1,-1.],[2,5,2,1,2.]],threshold:-1.1985700111836195e-003,right_val:-0.1282382011413574,left_val:0.2026209980249405},{features:[[1,0,6,20,-1.],[3,0,2,20,3.]],threshold:-0.1096495985984802,right_val:0.0303518492728472,left_val:-0.8661919236183167},{features:[[2,5,4,6,-1.],[2,5,2,3,2.],[4,8,2,3,2.]],threshold:-9.2532606795430183e-003,right_val:-0.0853619500994682,left_val:0.2934311926364899},{features:[[9,16,6,3,-1.],[11,16,2,3,3.]],threshold:0.0146865304559469,right_val:-0.7755656242370606,left_val:0.0327986218035221},{features:[[11,17,6,1,-1.],[14,17,3,1,2.]],threshold:-1.3514430029317737e-003,right_val:-0.1150325015187264,left_val:0.2442699968814850},{features:[[3,17,15,2,-1.],[8,17,5,2,3.]],threshold:-4.3728090822696686e-003,right_val:-0.1398448050022125,left_val:0.2168767005205154},{features:[[18,0,2,3,-1.],[18,1,2,1,3.]],threshold:3.4263390116393566e-003,right_val:-0.5456771254539490,left_val:0.0456142202019691},{features:[[13,1,7,4,-1.],[13,3,7,2,2.]],threshold:-3.8404068909585476e-003,right_val:-0.1506250947713852,left_val:0.1494950056076050},{features:[[13,6,4,4,-1.],[13,6,2,2,2.],[15,8,2,2,2.]],threshold:3.7988980766385794e-003,right_val:0.2548153102397919,left_val:-0.0873016268014908},{features:[[17,6,3,4,-1.],[17,8,3,2,2.]],threshold:-2.0094281062483788e-003,right_val:-0.1428847014904022,left_val:0.1725907027721405},{features:[[14,9,2,2,-1.],[15,9,1,2,2.]],threshold:-2.4370709434151649e-003,right_val:-0.0818982198834419,left_val:0.2684809863567352},{features:[[17,17,1,3,-1.],[17,18,1,1,3.]],threshold:1.0485399980098009e-003,right_val:-0.4724327921867371,left_val:0.0461132600903511},{features:[[3,19,8,1,-1.],[7,19,4,1,2.]],threshold:1.7460780218243599e-003,right_val:0.2037972956895828,left_val:-0.1103043034672737},{features:[[0,9,3,6,-1.],[0,12,3,3,2.]],threshold:5.8608627878129482e-003,right_val:0.1592743992805481,left_val:-0.1561965942382813},{features:[[4,7,15,5,-1.],[9,7,5,5,3.]],threshold:-0.0277249794453382,right_val:-0.2188514024019241,left_val:0.1134911999106407},{features:[[6,9,9,5,-1.],[9,9,3,5,3.]],threshold:0.0470806397497654,right_val:0.5363004803657532,left_val:-0.0416887290775776},{features:[[8,1,6,2,-1.],[10,1,2,2,3.]],threshold:-7.9283770173788071e-003,right_val:0.0442375093698502,left_val:-0.5359513163566589},{features:[[4,0,12,2,-1.],[10,0,6,2,2.]],threshold:-0.0128805404528975,right_val:-0.1024625003337860,left_val:0.2323794960975647},{features:[[7,0,10,3,-1.],[12,0,5,3,2.]],threshold:0.0236047692596912,right_val:0.3056105971336365,left_val:-0.0882914364337921},{features:[[5,0,9,6,-1.],[5,2,9,2,3.]],threshold:0.0159022007137537,right_val:0.1784912049770355,left_val:-0.1223810985684395},{features:[[8,3,6,4,-1.],[8,5,6,2,2.]],threshold:7.9939495772123337e-003,right_val:0.3231959044933319,left_val:-0.0837290063500404},{features:[[17,4,2,3,-1.],[17,5,2,1,3.]],threshold:5.7100867852568626e-003,right_val:-0.6813815236091614,left_val:0.0384792089462280}],threshold:-1.0492420196533203},{simpleClassifiers:[{features:[[5,2,4,3,-1.],[5,3,4,1,3.]],threshold:2.2480720654129982e-003,right_val:0.4164853096008301,left_val:-0.1641687005758286},{features:[[5,9,2,6,-1.],[6,9,1,6,2.]],threshold:4.5813550241291523e-003,right_val:0.4038512110710144,left_val:-0.1246595978736877},{features:[[14,10,2,6,-1.],[15,10,1,6,2.]],threshold:-1.6073239967226982e-003,right_val:-0.2028252035379410,left_val:0.2608245909214020},{features:[[7,4,3,3,-1.],[7,5,3,1,3.]],threshold:2.5205370038747787e-003,right_val:0.3666911125183106,left_val:-0.1055722981691361},{features:[[12,4,8,2,-1.],[12,4,4,1,2.],[16,5,4,1,2.]],threshold:2.4119189474731684e-003,right_val:0.2995991110801697,left_val:-0.1387760043144226},{features:[[15,8,1,6,-1.],[15,10,1,2,3.]],threshold:5.7156179100275040e-003,right_val:0.4848192036151886,left_val:-0.0776834636926651},{features:[[4,17,11,3,-1.],[4,18,11,1,3.]],threshold:3.1093840952962637e-003,right_val:0.2921550869941711,left_val:-0.1122900024056435},{features:[[3,0,16,20,-1.],[3,10,16,10,2.]],threshold:-0.0868366286158562,right_val:0.0725972428917885,left_val:-0.3677960038185120},{features:[[12,4,4,6,-1.],[12,6,4,2,3.]],threshold:5.2652182057499886e-003,right_val:0.3179126083850861,left_val:-0.1089029014110565},{features:[[11,0,6,6,-1.],[13,0,2,6,3.]],threshold:-0.0199135299772024,right_val:0.0705857127904892,left_val:-0.5337343811988831},{features:[[13,1,6,4,-1.],[13,1,3,2,2.],[16,3,3,2,2.]],threshold:3.8297839928418398e-003,right_val:0.2278887927532196,left_val:-0.1357591003179550},{features:[[11,0,6,4,-1.],[13,0,2,4,3.]],threshold:0.0104318596422672,right_val:-0.4795897006988525,left_val:0.0887979120016098},{features:[[8,6,6,9,-1.],[10,6,2,9,3.]],threshold:-0.0200404394418001,right_val:-0.1777157038450241,left_val:0.1574553996324539},{features:[[7,0,3,4,-1.],[8,0,1,4,3.]],threshold:-5.2967290394008160e-003,right_val:0.0356714613735676,left_val:-0.6843491792678833},{features:[[0,17,14,2,-1.],[0,17,7,1,2.],[7,18,7,1,2.]],threshold:-2.1624139044433832e-003,right_val:-0.0985112786293030,left_val:0.2831803858280182},{features:[[6,18,2,2,-1.],[6,18,1,1,2.],[7,19,1,1,2.]],threshold:-3.5464888787828386e-004,right_val:0.0809329524636269,left_val:-0.3707734048366547},{features:[[18,17,1,3,-1.],[18,18,1,1,3.]],threshold:-1.8152060511056334e-004,right_val:0.0775510594248772,left_val:-0.3220703005790710},{features:[[17,18,2,2,-1.],[17,18,1,1,2.],[18,19,1,1,2.]],threshold:-2.7563021285459399e-004,right_val:0.0879494771361351,left_val:-0.3244127929210663},{features:[[5,7,1,9,-1.],[5,10,1,3,3.]],threshold:6.3823810778558254e-003,right_val:0.3172721862792969,left_val:-0.0889247134327888},{features:[[5,3,6,4,-1.],[7,3,2,4,3.]],threshold:0.0111509095877409,right_val:-0.4049403965473175,left_val:0.0710198432207108},{features:[[1,9,6,2,-1.],[1,9,3,1,2.],[4,10,3,1,2.]],threshold:-1.0593760525807738e-003,right_val:-0.1176564022898674,left_val:0.2605066895484924},{features:[[6,9,2,3,-1.],[7,9,1,3,2.]],threshold:2.3906480055302382e-003,right_val:0.3123055100440979,left_val:-0.0843886211514473},{features:[[6,8,6,12,-1.],[8,8,2,12,3.]],threshold:-0.0110007496550679,right_val:-0.1521002054214478,left_val:0.1915224939584732},{features:[[4,18,2,2,-1.],[4,18,1,1,2.],[5,19,1,1,2.]],threshold:-2.4643228971399367e-004,right_val:0.0865822583436966,left_val:-0.3176515996456146},{features:[[9,1,6,6,-1.],[9,3,6,2,3.]],threshold:0.0230532698333263,right_val:0.2576929032802582,left_val:-0.1008976027369499},{features:[[6,17,6,2,-1.],[6,18,6,1,2.]],threshold:-2.2135660983622074e-003,right_val:-0.0524047911167145,left_val:0.4568921029567719},{features:[[3,18,16,2,-1.],[3,19,16,1,2.]],threshold:-9.7139709396287799e-004,right_val:0.0800943821668625,left_val:-0.3551838099956513},{features:[[3,0,3,11,-1.],[4,0,1,11,3.]],threshold:1.5676229959353805e-003,right_val:-0.2160304039716721,left_val:0.1009142026305199},{features:[[13,18,3,1,-1.],[14,18,1,1,3.]],threshold:7.5460801599547267e-004,right_val:-0.4046111106872559,left_val:0.0578961782157421},{features:[[6,0,9,6,-1.],[6,2,9,2,3.]],threshold:-0.0206989701837301,right_val:-0.0807130485773087,left_val:0.3154363036155701},{features:[[1,2,12,4,-1.],[1,2,6,2,2.],[7,4,6,2,2.]],threshold:-0.0206199400126934,right_val:-0.0763586163520813,left_val:0.2718166112899780},{features:[[3,3,6,4,-1.],[5,3,2,4,3.]],threshold:0.0216111298650503,right_val:-0.5942965149879456,left_val:0.0394934490323067},{features:[[12,0,8,1,-1.],[16,0,4,1,2.]],threshold:6.5676742233335972e-003,right_val:0.2364927977323532,left_val:-0.0983536690473557},{features:[[9,0,6,2,-1.],[11,0,2,2,3.]],threshold:-8.8434796780347824e-003,right_val:0.0430999211966991,left_val:-0.5252342820167542},{features:[[3,3,12,1,-1.],[9,3,6,1,2.]],threshold:-9.4260741025209427e-003,right_val:-0.0941307172179222,left_val:0.2466513067483902},{features:[[2,7,6,2,-1.],[2,7,3,1,2.],[5,8,3,1,2.]],threshold:-1.9830230157822371e-003,right_val:-0.0900693163275719,left_val:0.2674370110034943},{features:[[0,8,4,6,-1.],[0,10,4,2,3.]],threshold:-1.7358399927616119e-003,right_val:-0.1578941047191620,left_val:0.1594001948833466},{features:[[9,6,3,7,-1.],[10,6,1,7,3.]],threshold:-0.0135138696059585,right_val:-0.0642231181263924,left_val:0.4079233109951019},{features:[[9,6,6,13,-1.],[11,6,2,13,3.]],threshold:-0.0193940103054047,right_val:-0.1373140066862106,left_val:0.1801564991474152},{features:[[11,12,6,1,-1.],[13,12,2,1,3.]],threshold:-3.2684770412743092e-003,right_val:-0.0801619067788124,left_val:0.2908039093017578},{features:[[18,9,2,6,-1.],[18,12,2,3,2.]],threshold:4.1773589327931404e-004,right_val:0.1127343997359276,left_val:-0.2141298055648804},{features:[[17,2,3,9,-1.],[18,2,1,9,3.]],threshold:-7.6351119205355644e-003,right_val:0.0546250604093075,left_val:-0.4536595940589905},{features:[[13,8,4,6,-1.],[13,8,2,3,2.],[15,11,2,3,2.]],threshold:-8.3652976900339127e-003,right_val:-0.0943341106176376,left_val:0.2647292017936707},{features:[[4,2,12,6,-1.],[10,2,6,6,2.]],threshold:0.0277684498578310,right_val:0.2074397951364517,left_val:-0.1013671010732651},{features:[[4,14,16,6,-1.],[12,14,8,6,2.]],threshold:-0.0548912286758423,right_val:-0.0753120407462120,left_val:0.2884030938148499},{features:[[6,19,10,1,-1.],[11,19,5,1,2.]],threshold:2.5793339591473341e-003,right_val:0.2172496020793915,left_val:-0.1108852997422218},{features:[[6,17,1,3,-1.],[6,18,1,1,3.]],threshold:6.6196516854688525e-005,right_val:0.1444068998098373,left_val:-0.1887210011482239},{features:[[4,14,10,3,-1.],[4,15,10,1,3.]],threshold:5.0907251425087452e-003,right_val:0.2939837872982025,left_val:-0.0776012316346169},{features:[[6,0,12,12,-1.],[6,4,12,4,3.]],threshold:-0.1044425964355469,right_val:-0.1090397015213966,left_val:0.2013310939073563},{features:[[5,7,4,2,-1.],[5,7,2,1,2.],[7,8,2,1,2.]],threshold:-6.7273090826347470e-004,right_val:-0.1202367022633553,left_val:0.1794590055942535},{features:[[17,5,3,2,-1.],[18,5,1,2,3.]],threshold:3.2412849832326174e-003,right_val:-0.5460057258605957,left_val:0.0406881310045719}],threshold:-1.1122100353240967},{simpleClassifiers:[{features:[[8,13,6,3,-1.],[8,14,6,1,3.]],threshold:5.2965320646762848e-003,right_val:0.6442037224769592,left_val:-0.1215452998876572},{features:[[8,13,5,3,-1.],[8,14,5,1,3.]],threshold:-2.5326260365545750e-003,right_val:-0.1110825985670090,left_val:0.5123322010040283},{features:[[13,2,1,18,-1.],[13,11,1,9,2.]],threshold:-2.9183230362832546e-003,right_val:0.1150197982788086,left_val:-0.5061542987823486},{features:[[6,10,9,2,-1.],[9,10,3,2,3.]],threshold:-0.0236923396587372,right_val:-0.1467268019914627,left_val:0.3716728091239929},{features:[[11,0,7,4,-1.],[11,2,7,2,2.]],threshold:0.0201774705201387,right_val:0.4775949120521545,left_val:-0.1738884001970291},{features:[[1,0,6,8,-1.],[3,0,2,8,3.]],threshold:-0.0217232108116150,right_val:0.1357689946889877,left_val:-0.4388009011745453},{features:[[9,15,3,3,-1.],[9,16,3,1,3.]],threshold:2.8369780629873276e-003,right_val:0.4678902924060822,left_val:-0.1251206994056702},{features:[[9,17,9,3,-1.],[9,18,9,1,3.]],threshold:2.7148420922458172e-003,right_val:0.3686651885509491,left_val:-0.0880188569426537},{features:[[12,12,3,3,-1.],[12,13,3,1,3.]],threshold:3.2625689636915922e-003,right_val:0.5164473056793213,left_val:-0.0853353068232536},{features:[[4,1,3,5,-1.],[5,1,1,5,3.]],threshold:-3.5618850961327553e-003,right_val:0.0917381718754768,left_val:-0.4450393021106720},{features:[[10,14,2,3,-1.],[10,15,2,1,3.]],threshold:1.9227749435231090e-003,right_val:0.3941699862480164,left_val:-0.1107731014490128},{features:[[18,17,2,2,-1.],[18,17,1,1,2.],[19,18,1,1,2.]],threshold:-3.5111969918943942e-004,right_val:0.1216617003083229,left_val:-0.3777570128440857},{features:[[18,18,2,2,-1.],[18,18,1,1,2.],[19,19,1,1,2.]],threshold:1.9121779769193381e-004,right_val:-0.4076710045337677,left_val:0.0748160183429718},{features:[[18,18,2,2,-1.],[18,18,1,1,2.],[19,19,1,1,2.]],threshold:-2.6525629800744355e-004,right_val:0.1129112020134926,left_val:-0.3315171897411346},{features:[[4,10,9,1,-1.],[7,10,3,1,3.]],threshold:0.0200867000967264,right_val:0.5612881779670715,left_val:-0.0615981183946133},{features:[[3,9,6,5,-1.],[5,9,2,5,3.]],threshold:0.0367832481861115,right_val:0.5219249129295349,left_val:-0.0602513886988163},{features:[[18,8,1,12,-1.],[18,14,1,6,2.]],threshold:1.3941619545221329e-003,right_val:0.1086302027106285,left_val:-0.3550305068492889},{features:[[0,2,8,6,-1.],[0,2,4,3,2.],[4,5,4,3,2.]],threshold:-0.0151816699653864,right_val:-0.1625299006700516,left_val:0.2273965030908585},{features:[[9,4,3,3,-1.],[9,5,3,1,3.]],threshold:4.6796840615570545e-003,right_val:0.4812423884868622,left_val:-0.0575350411236286},{features:[[3,18,2,2,-1.],[3,18,1,1,2.],[4,19,1,1,2.]],threshold:-1.7988319450523704e-004,right_val:0.1086815968155861,left_val:-0.3058767020702362},{features:[[6,4,4,3,-1.],[6,5,4,1,3.]],threshold:-3.5850999411195517e-003,right_val:-0.0921940729022026,left_val:0.3859694004058838},{features:[[16,7,4,2,-1.],[16,7,2,1,2.],[18,8,2,1,2.]],threshold:1.0793360415846109e-003,right_val:0.3112520873546600,left_val:-0.1119038984179497},{features:[[5,17,1,3,-1.],[5,18,1,1,3.]],threshold:7.3285802500322461e-005,right_val:0.1558668017387390,left_val:-0.2023991048336029},{features:[[2,0,15,20,-1.],[2,10,15,10,2.]],threshold:0.1367873996496201,right_val:0.1442039012908936,left_val:-0.2167285978794098},{features:[[8,11,6,4,-1.],[8,11,3,2,2.],[11,13,3,2,2.]],threshold:-0.0117292599752545,right_val:-0.0748865306377411,left_val:0.4350377023220062},{features:[[8,16,4,3,-1.],[8,17,4,1,3.]],threshold:3.9230841211974621e-003,right_val:0.5883116126060486,left_val:-0.0502893291413784},{features:[[8,18,2,2,-1.],[8,18,1,1,2.],[9,19,1,1,2.]],threshold:-2.9819121118634939e-004,right_val:0.0924511328339577,left_val:-0.3823240101337433},{features:[[2,16,13,3,-1.],[2,17,13,1,3.]],threshold:-4.7992770560085773e-003,right_val:-0.0731365233659744,left_val:0.4848878979682922},{features:[[16,16,2,2,-1.],[16,16,1,1,2.],[17,17,1,1,2.]],threshold:-3.0155890271998942e-004,right_val:0.1058188006281853,left_val:-0.3575735986232758},{features:[[8,1,6,3,-1.],[10,1,2,3,3.]],threshold:0.0103907696902752,right_val:-0.5724965929985046,left_val:0.0529204681515694},{features:[[16,7,2,2,-1.],[16,7,1,1,2.],[17,8,1,1,2.]],threshold:-9.4488041941076517e-004,right_val:-0.0830755233764648,left_val:0.4496682882308960},{features:[[14,7,4,2,-1.],[14,7,2,1,2.],[16,8,2,1,2.]],threshold:1.2651870492845774e-003,right_val:0.3130227029323578,left_val:-0.0966954380273819},{features:[[4,0,14,1,-1.],[11,0,7,1,2.]],threshold:0.0170945394784212,right_val:0.3611383140087128,left_val:-0.0812489762902260},{features:[[10,4,8,2,-1.],[10,4,4,1,2.],[14,5,4,1,2.]],threshold:2.5973359588533640e-003,right_val:0.2223394960165024,left_val:-0.1133835017681122},{features:[[8,2,3,2,-1.],[9,2,1,2,3.]],threshold:1.4527440071105957e-003,right_val:-0.3672071099281311,left_val:0.0697504431009293},{features:[[12,11,6,3,-1.],[12,12,6,1,3.]],threshold:4.7638658434152603e-003,right_val:0.3832854032516480,left_val:-0.0657889619469643},{features:[[1,5,1,4,-1.],[1,7,1,2,2.]],threshold:-6.2501081265509129e-003,right_val:0.0383501984179020,left_val:-0.7075446844100952},{features:[[1,1,1,18,-1.],[1,7,1,6,3.]],threshold:-3.1765329185873270e-003,right_val:-0.2324002981185913,left_val:0.1375540047883987},{features:[[11,13,3,2,-1.],[11,14,3,1,2.]],threshold:3.2191169448196888e-003,right_val:0.2273788005113602,left_val:-0.1293545067310333},{features:[[0,1,12,2,-1.],[0,1,6,1,2.],[6,2,6,1,2.]],threshold:-5.6365579366683960e-003,right_val:-0.0672468394041061,left_val:0.3806715011596680},{features:[[10,18,2,2,-1.],[10,18,1,1,2.],[11,19,1,1,2.]],threshold:-2.3844049428589642e-004,right_val:0.0838383585214615,left_val:-0.3112238049507141},{features:[[4,5,4,4,-1.],[4,5,2,2,2.],[6,7,2,2,2.]],threshold:-4.1017560288310051e-003,right_val:-0.1044974029064179,left_val:0.2606728076934815},{features:[[6,7,1,3,-1.],[6,8,1,1,3.]],threshold:1.3336989795789123e-003,right_val:0.4768244028091431,left_val:-0.0582501403987408},{features:[[14,10,6,2,-1.],[16,10,2,2,3.]],threshold:-1.2090239906683564e-003,right_val:-0.1732946932315826,left_val:0.1483450978994370}],threshold:-1.2529590129852295},{simpleClassifiers:[{features:[[16,8,3,6,-1.],[17,8,1,6,3.]],threshold:-3.1760931015014648e-003,right_val:-0.1664234995841980,left_val:0.3333333134651184},{features:[[4,10,6,2,-1.],[6,10,2,2,3.]],threshold:0.0248580798506737,right_val:0.5667458176612854,left_val:-0.0727288722991943},{features:[[6,5,3,7,-1.],[7,5,1,7,3.]],threshold:-7.7597280032932758e-003,right_val:-0.0931121781468391,left_val:0.4625856876373291},{features:[[0,13,6,6,-1.],[0,16,6,3,2.]],threshold:7.8239021822810173e-003,right_val:0.1324304938316345,left_val:-0.2741461098194122},{features:[[12,5,1,9,-1.],[12,8,1,3,3.]],threshold:-0.0109488395974040,right_val:-0.1496544927358627,left_val:0.2234548032283783},{features:[[5,9,3,3,-1.],[6,9,1,3,3.]],threshold:-3.4349008928984404e-003,right_val:-0.0661217272281647,left_val:0.3872498869895935},{features:[[7,5,6,13,-1.],[9,5,2,13,3.]],threshold:-0.0311562903225422,right_val:-0.1140690967440605,left_val:0.2407827973365784},{features:[[19,8,1,10,-1.],[19,13,1,5,2.]],threshold:1.1100519914180040e-003,right_val:0.1327542960643768,left_val:-0.2820797860622406},{features:[[11,18,6,1,-1.],[13,18,2,1,3.]],threshold:3.1762740109115839e-003,right_val:-0.5137431025505066,left_val:0.0345859304070473},{features:[[9,7,6,12,-1.],[11,7,2,12,3.]],threshold:-0.0279774591326714,right_val:-0.1325591951608658,left_val:0.2392677962779999},{features:[[12,7,6,6,-1.],[14,7,2,6,3.]],threshold:-0.0230979397892952,right_val:-0.0784780085086823,left_val:0.3901962041854858},{features:[[15,8,3,4,-1.],[16,8,1,4,3.]],threshold:-3.9731930010020733e-003,right_val:-0.0706014037132263,left_val:0.3069106936454773},{features:[[6,11,4,2,-1.],[6,12,4,1,2.]],threshold:3.0335749033838511e-003,right_val:0.1913485974073410,left_val:-0.1400219053030014},{features:[[1,6,6,8,-1.],[3,6,2,8,3.]],threshold:-0.0108443703502417,right_val:-0.1565777957439423,left_val:0.1654873043298721},{features:[[11,15,6,5,-1.],[13,15,2,5,3.]],threshold:-0.0181505102664232,right_val:0.0395618192851543,left_val:-0.6324359178543091},{features:[[15,17,4,2,-1.],[15,18,4,1,2.]],threshold:7.1052298881113529e-004,right_val:0.1340880990028381,left_val:-0.1851557046175003},{features:[[13,11,6,1,-1.],[15,11,2,1,3.]],threshold:0.0108933402225375,right_val:0.6097180247306824,left_val:-0.0267302300781012},{features:[[5,18,2,2,-1.],[5,18,1,1,2.],[6,19,1,1,2.]],threshold:-2.8780900174751878e-004,right_val:0.0731714591383934,left_val:-0.3006514012813568},{features:[[4,8,4,4,-1.],[4,8,2,2,2.],[6,10,2,2,2.]],threshold:-3.5855069290846586e-003,right_val:-0.0797140970826149,left_val:0.2621760964393616},{features:[[11,7,9,3,-1.],[11,8,9,1,3.]],threshold:-0.0197592806071043,right_val:0.0406989715993404,left_val:-0.5903922915458679},{features:[[0,3,10,4,-1.],[0,3,5,2,2.],[5,5,5,2,2.]],threshold:-0.0108452104032040,right_val:-0.1258606016635895,left_val:0.1636455953121185},{features:[[7,18,6,1,-1.],[9,18,2,1,3.]],threshold:-4.3183090165257454e-003,right_val:0.0376443117856979,left_val:-0.5747488141059876},{features:[[0,8,3,3,-1.],[0,9,3,1,3.]],threshold:1.4913700288161635e-003,right_val:-0.3022292852401733,left_val:0.0609134696424007},{features:[[0,0,6,8,-1.],[0,0,3,4,2.],[3,4,3,4,2.]],threshold:0.0156756993383169,right_val:0.2937945127487183,left_val:-0.0731459110975266},{features:[[7,6,3,8,-1.],[8,6,1,8,3.]],threshold:-0.0110335601493716,right_val:-0.0470843203365803,left_val:0.3931880891323090},{features:[[13,7,7,3,-1.],[13,8,7,1,3.]],threshold:8.8555756956338882e-003,right_val:-0.4910849034786224,left_val:0.0376013815402985},{features:[[3,3,2,2,-1.],[3,4,2,1,2.]],threshold:-8.9665671112015843e-004,right_val:-0.1108623966574669,left_val:0.1795202046632767},{features:[[0,3,3,3,-1.],[0,4,3,1,3.]],threshold:-3.0592409893870354e-003,right_val:0.0510054305195808,left_val:-0.4442946016788483},{features:[[9,3,5,2,-1.],[9,4,5,1,2.]],threshold:6.3201179727911949e-003,right_val:0.3719710111618042,left_val:-0.0528410896658897},{features:[[6,5,9,4,-1.],[9,5,3,4,3.]],threshold:0.0206828303635120,right_val:-0.3690159916877747,left_val:0.0576671697199345},{features:[[3,10,12,3,-1.],[7,10,4,3,3.]],threshold:0.0998226627707481,right_val:0.5816559195518494,left_val:-0.0373770184814930},{features:[[8,7,3,6,-1.],[9,7,1,6,3.]],threshold:-6.5854229032993317e-003,right_val:-0.0609780699014664,left_val:0.2850944101810455},{features:[[5,5,6,5,-1.],[8,5,3,5,2.]],threshold:-0.0609003007411957,right_val:0.0377874001860619,left_val:-0.5103176832199097},{features:[[0,5,2,3,-1.],[0,6,2,1,3.]],threshold:-2.9991709161549807e-003,right_val:0.0388338901102543,left_val:-0.4794301092624664},{features:[[9,7,3,4,-1.],[10,7,1,4,3.]],threshold:-9.8906438797712326e-003,right_val:-0.0478696487843990,left_val:0.4060907959938049},{features:[[1,0,6,15,-1.],[3,0,2,15,3.]],threshold:-0.0826889276504517,right_val:0.0274877492338419,left_val:-0.7067118287086487},{features:[[15,1,3,5,-1.],[16,1,1,5,3.]],threshold:5.0060399807989597e-003,right_val:-0.5290969014167786,left_val:0.0282084401696920},{features:[[9,2,3,10,-1.],[10,2,1,10,3.]],threshold:6.1695030890405178e-003,right_val:0.3283798098564148,left_val:-0.0545548610389233},{features:[[8,8,6,12,-1.],[10,8,2,12,3.]],threshold:-3.3914761152118444e-003,right_val:-0.2163711041212082,left_val:0.0921176671981812},{features:[[16,4,3,4,-1.],[16,6,3,2,2.]],threshold:-2.6131230406463146e-003,right_val:-0.1378113031387329,left_val:0.1365101933479309},{features:[[16,7,2,2,-1.],[16,7,1,1,2.],[17,8,1,1,2.]],threshold:8.0490659456700087e-004,right_val:0.3358106911182404,left_val:-0.0686371102929115},{features:[[13,0,6,9,-1.],[13,3,6,3,3.]],threshold:-0.0381065085530281,right_val:-0.0682392269372940,left_val:0.2944543063640595},{features:[[7,17,1,3,-1.],[7,18,1,1,3.]],threshold:7.2450799052603543e-005,right_val:0.1217823028564453,left_val:-0.1675013005733490},{features:[[12,1,4,2,-1.],[12,2,4,1,2.]],threshold:1.5837959945201874e-003,right_val:0.2134899049997330,left_val:-0.0920428484678268},{features:[[17,3,1,3,-1.],[17,4,1,1,3.]],threshold:1.2924340553581715e-003,right_val:-0.3617450892925263,left_val:0.0629172325134277},{features:[[0,16,9,3,-1.],[0,17,9,1,3.]],threshold:9.9146775901317596e-003,right_val:-0.8101503849029541,left_val:0.0195340607315302},{features:[[3,6,2,4,-1.],[3,6,1,2,2.],[4,8,1,2,2.]],threshold:-1.7086310544982553e-003,right_val:-0.0682294592261314,left_val:0.2552523910999298},{features:[[13,18,3,1,-1.],[14,18,1,1,3.]],threshold:2.1844399161636829e-003,right_val:-0.8429678082466126,left_val:0.0233140494674444},{features:[[0,18,4,2,-1.],[2,18,2,2,2.]],threshold:-3.4244330599904060e-003,right_val:-0.0763952285051346,left_val:0.2721368968486786},{features:[[1,19,2,1,-1.],[2,19,1,1,2.]],threshold:2.7591470279730856e-004,right_val:0.2288897037506104,left_val:-0.1074284017086029},{features:[[0,18,4,2,-1.],[0,19,4,1,2.]],threshold:-6.0005177510902286e-004,right_val:0.0634797364473343,left_val:-0.2985421121120453},{features:[[2,17,1,3,-1.],[2,18,1,1,3.]],threshold:-2.5001438916660845e-004,right_val:0.0696150064468384,left_val:-0.2717896997928619},{features:[[4,8,3,5,-1.],[5,8,1,5,3.]],threshold:6.8751391954720020e-003,right_val:0.3669595122337341,left_val:-0.0571858994662762},{features:[[2,1,6,7,-1.],[4,1,2,7,3.]],threshold:0.0127619002014399,right_val:-0.2853415012359619,left_val:0.0679556876420975},{features:[[3,6,2,8,-1.],[3,6,1,4,2.],[4,10,1,4,2.]],threshold:-1.4752789866179228e-003,right_val:-0.1005939021706581,left_val:0.2068066000938416},{features:[[4,5,11,10,-1.],[4,10,11,5,2.]],threshold:0.1213881969451904,right_val:0.1978961974382401,left_val:-0.0971267968416214},{features:[[0,13,20,2,-1.],[10,13,10,2,2.]],threshold:-0.0500812791287899,right_val:-0.0678799971938133,left_val:0.2841717898845673},{features:[[1,13,16,3,-1.],[9,13,8,3,2.]],threshold:0.0314549505710602,right_val:0.2129842042922974,left_val:-0.0894686728715897},{features:[[16,4,4,4,-1.],[16,4,2,2,2.],[18,6,2,2,2.]],threshold:1.8878319533541799e-003,right_val:0.1666352003812790,left_val:-0.1165644004940987},{features:[[16,0,4,12,-1.],[16,0,2,6,2.],[18,6,2,6,2.]],threshold:-5.7211960665881634e-003,right_val:-0.0907766073942184,left_val:0.2370214015245438},{features:[[14,15,3,1,-1.],[15,15,1,1,3.]],threshold:-1.8076719425152987e-004,right_val:-0.1079348027706146,left_val:0.1795192956924439},{features:[[3,4,12,10,-1.],[3,9,12,5,2.]],threshold:-0.1976184993982315,right_val:-0.0404801592230797,left_val:0.4567429125308991},{features:[[9,18,2,2,-1.],[9,18,1,1,2.],[10,19,1,1,2.]],threshold:-2.3846809926908463e-004,right_val:0.0759221613407135,left_val:-0.2373300939798355},{features:[[9,18,2,2,-1.],[9,18,1,1,2.],[10,19,1,1,2.]],threshold:2.1540730085689574e-004,right_val:-0.2868503034114838,left_val:0.0816880166530609},{features:[[13,4,2,14,-1.],[13,4,1,7,2.],[14,11,1,7,2.]],threshold:0.0101630901917815,right_val:0.4803834855556488,left_val:-0.0412500202655792},{features:[[4,2,6,4,-1.],[7,2,3,4,2.]],threshold:-7.2184870950877666e-003,right_val:-0.1014650017023087,left_val:0.1745858043432236},{features:[[0,0,18,20,-1.],[0,0,9,10,2.],[9,10,9,10,2.]],threshold:0.2426317036151886,right_val:-0.3231852948665619,left_val:0.0534264817833900},{features:[[15,11,1,2,-1.],[15,12,1,1,2.]],threshold:6.9304101634770632e-004,right_val:0.1479393988847733,left_val:-0.1149917989969254},{features:[[16,10,2,4,-1.],[16,10,1,2,2.],[17,12,1,2,2.]],threshold:3.5475199110805988e-003,right_val:0.5312618017196655,left_val:-0.0394249781966209},{features:[[18,17,2,2,-1.],[18,17,1,1,2.],[19,18,1,1,2.]],threshold:2.1403690334409475e-004,right_val:-0.2731958031654358,left_val:0.0697538331151009},{features:[[9,17,1,2,-1.],[9,18,1,1,2.]],threshold:-5.7119462871924043e-004,right_val:-0.0576990097761154,left_val:0.3436990082263947},{features:[[8,4,9,6,-1.],[11,4,3,6,3.]],threshold:-6.6290069371461868e-003,right_val:-0.1502013951539993,left_val:0.1175848990678787}],threshold:-1.1188739538192749},{simpleClassifiers:[{features:[[6,9,9,10,-1.],[9,9,3,10,3.]],threshold:-0.0265134498476982,right_val:-0.2647390067577362,left_val:0.2056864053010941},{features:[[5,0,5,4,-1.],[5,2,5,2,2.]],threshold:9.7727458924055099e-003,right_val:0.3257054984569550,left_val:-0.1119284033775330},{features:[[5,7,11,4,-1.],[5,9,11,2,2.]],threshold:0.0322903506457806,right_val:0.3177917003631592,left_val:-0.0985747575759888},{features:[[2,4,2,14,-1.],[3,4,1,14,2.]],threshold:-2.8103240765631199e-003,right_val:-0.1968640983104706,left_val:0.1521389931440353},{features:[[8,6,3,5,-1.],[9,6,1,5,3.]],threshold:-0.0109914299100637,right_val:-0.0437072105705738,left_val:0.5140765905380249},{features:[[8,4,3,9,-1.],[9,4,1,9,3.]],threshold:6.3133831135928631e-003,right_val:0.3470247089862824,left_val:-0.0927810221910477},{features:[[0,8,20,6,-1.],[0,10,20,2,3.]],threshold:0.0871059820055962,right_val:-0.8281481862068176,left_val:0.0300536490976810},{features:[[14,16,6,1,-1.],[17,16,3,1,2.]],threshold:1.1799359926953912e-003,right_val:0.2064612060785294,left_val:-0.1292842030525208},{features:[[17,18,2,2,-1.],[17,19,2,1,2.]],threshold:-9.3056890182197094e-004,right_val:0.0936669930815697,left_val:-0.5002143979072571},{features:[[8,17,6,3,-1.],[10,17,2,3,3.]],threshold:-0.0136871701106429,right_val:-6.6733639687299728e-003,left_val:-0.7935814857482910},{features:[[4,1,9,15,-1.],[7,1,3,15,3.]],threshold:-0.0759174525737762,right_val:-0.0796558931469917,left_val:0.3046964108943939},{features:[[11,5,3,12,-1.],[12,5,1,12,3.]],threshold:-2.8559709899127483e-003,right_val:-0.1273255050182343,left_val:0.2096146047115326},{features:[[0,15,4,3,-1.],[0,16,4,1,3.]],threshold:-4.0231510065495968e-003,right_val:0.0506836399435997,left_val:-0.6581727862358093},{features:[[0,0,15,1,-1.],[5,0,5,1,3.]],threshold:0.0175580400973558,right_val:0.3617455959320068,left_val:-0.0853826925158501},{features:[[6,0,6,4,-1.],[8,0,2,4,3.]],threshold:0.0219882391393185,right_val:-0.7089633941650391,left_val:0.0629436969757080},{features:[[2,0,9,3,-1.],[5,0,3,3,3.]],threshold:-2.8599589131772518e-003,right_val:-0.1646597981452942,left_val:0.1468378007411957},{features:[[13,6,3,7,-1.],[14,6,1,7,3.]],threshold:-0.0100308498367667,right_val:-0.0271883402019739,left_val:0.4957993924617767},{features:[[7,6,4,2,-1.],[7,7,4,1,2.]],threshold:-6.9560329429805279e-003,right_val:-0.0779533311724663,left_val:0.2797777950763702},{features:[[6,18,6,1,-1.],[8,18,2,1,3.]],threshold:-3.8356808945536613e-003,right_val:0.0357399396598339,left_val:-0.5816398262977600},{features:[[18,6,2,2,-1.],[18,7,2,1,2.]],threshold:-3.2647319603711367e-003,right_val:0.0469864904880524,left_val:-0.4994508028030396},{features:[[6,4,7,3,-1.],[6,5,7,1,3.]],threshold:-7.8412350267171860e-003,right_val:-0.0688104033470154,left_val:0.3453283011913300},{features:[[12,7,3,1,-1.],[13,7,1,1,3.]],threshold:-8.1718113506212831e-005,right_val:-0.1414667963981628,left_val:0.1504171043634415},{features:[[15,1,2,10,-1.],[15,1,1,5,2.],[16,6,1,5,2.]],threshold:-3.2448628917336464e-003,right_val:-0.0928602069616318,left_val:0.2272451072931290},{features:[[0,18,2,2,-1.],[0,19,2,1,2.]],threshold:-7.8561151167377830e-004,right_val:0.0578124411404133,left_val:-0.4431901872158051},{features:[[19,4,1,8,-1.],[19,8,1,4,2.]],threshold:-6.2474247533828020e-004,right_val:-0.1466871947050095,left_val:0.1395238935947418},{features:[[1,17,1,3,-1.],[1,18,1,1,3.]],threshold:-3.2942948746494949e-004,right_val:0.0760667398571968,left_val:-0.2990157008171082},{features:[[0,15,6,4,-1.],[0,15,3,2,2.],[3,17,3,2,2.]],threshold:1.2605739757418633e-003,right_val:0.1395380049943924,left_val:-0.1612560003995895},{features:[[19,0,1,18,-1.],[19,6,1,6,3.]],threshold:-0.0516670197248459,right_val:0.0407195203006268,left_val:-0.5314283967018127},{features:[[10,2,6,2,-1.],[12,2,2,2,3.]],threshold:-0.0152856195345521,right_val:0.0271837692707777,left_val:-0.7820637822151184},{features:[[2,8,12,2,-1.],[6,8,4,2,3.]],threshold:0.0690298229455948,right_val:0.7110251784324646,left_val:-0.0364270210266113},{features:[[16,0,4,1,-1.],[18,0,2,1,2.]],threshold:1.4522749697789550e-003,right_val:0.2166842073202133,left_val:-0.0968905165791512},{features:[[8,4,2,6,-1.],[8,7,2,3,2.]],threshold:-2.4765590205788612e-003,right_val:-0.1822797954082489,left_val:0.1164531037211418},{features:[[14,5,2,10,-1.],[15,5,1,10,2.]],threshold:-1.5134819550439715e-003,right_val:-0.1221496984362602,left_val:0.1786397993564606},{features:[[13,4,2,2,-1.],[13,5,2,1,2.]],threshold:-1.5099470037966967e-003,right_val:-0.1144606992602348,left_val:0.1808623969554901},{features:[[11,1,3,6,-1.],[11,3,3,2,3.]],threshold:-6.7054620012640953e-003,right_val:-0.0918714627623558,left_val:0.2510659992694855},{features:[[6,9,12,2,-1.],[10,9,4,2,3.]],threshold:-0.0140752000734210,right_val:-0.1733350008726120,left_val:0.1370750963687897},{features:[[9,16,4,2,-1.],[9,17,4,1,2.]],threshold:-2.2400720044970512e-003,right_val:-0.0475768782198429,left_val:0.4009298086166382},{features:[[5,14,15,4,-1.],[5,16,15,2,2.]],threshold:0.0197823699563742,right_val:0.1492341011762619,left_val:-0.1904035061597824},{features:[[18,16,2,2,-1.],[18,17,2,1,2.]],threshold:2.6002870872616768e-003,right_val:-0.4330765902996063,left_val:0.0469717681407928},{features:[[16,18,2,2,-1.],[16,18,1,1,2.],[17,19,1,1,2.]],threshold:-5.3445628145709634e-004,right_val:0.0415201894938946,left_val:-0.4374423027038574},{features:[[6,4,3,8,-1.],[7,4,1,8,3.]],threshold:-0.0174665097147226,right_val:-0.0344474911689758,left_val:0.6581817269325256},{features:[[5,9,3,1,-1.],[6,9,1,1,3.]],threshold:-2.0425589755177498e-003,right_val:-0.0440524294972420,left_val:0.3965792953968048},{features:[[0,8,1,6,-1.],[0,10,1,2,3.]],threshold:2.6661779265850782e-003,right_val:-0.3280636966228485,left_val:0.0587709583342075},{features:[[11,2,9,6,-1.],[14,2,3,6,3.]],threshold:-0.0559823699295521,right_val:0.0357918404042721,left_val:-0.5173547267913818},{features:[[12,2,6,4,-1.],[14,2,2,4,3.]],threshold:-1.5066330088302493e-003,right_val:-0.1252018064260483,left_val:0.1512386947870255},{features:[[1,7,2,4,-1.],[1,9,2,2,2.]],threshold:-0.0114723695442081,right_val:0.0347043313086033,left_val:-0.6293053030967712},{features:[[13,1,6,4,-1.],[13,3,6,2,2.]],threshold:0.0234096292406321,right_val:0.3866822123527527,left_val:-0.0580633506178856},{features:[[4,10,2,10,-1.],[4,10,1,5,2.],[5,15,1,5,2.]],threshold:-2.3243729956448078e-003,right_val:-0.0983946695923805,left_val:0.1875409930944443},{features:[[2,16,9,3,-1.],[5,16,3,3,3.]],threshold:-0.0290392991155386,right_val:0.0409263409674168,left_val:-0.5448690056800842},{features:[[1,2,3,9,-1.],[2,2,1,9,3.]],threshold:-0.0144746499136090,right_val:0.0231288503855467,left_val:-0.6724839210510254},{features:[[19,7,1,4,-1.],[19,9,1,2,2.]],threshold:-5.2086091600358486e-003,right_val:0.0437806509435177,left_val:-0.4327144026756287},{features:[[14,11,6,8,-1.],[14,11,3,4,2.],[17,15,3,4,2.]],threshold:4.9382899887859821e-003,right_val:0.1934258937835693,left_val:-0.1087862029671669},{features:[[15,12,4,6,-1.],[15,12,2,3,2.],[17,15,2,3,2.]],threshold:-4.3193930760025978e-003,right_val:-0.1038080006837845,left_val:0.2408093065023422},{features:[[16,15,2,2,-1.],[16,15,1,1,2.],[17,16,1,1,2.]],threshold:2.3705669445917010e-004,right_val:0.2046623975038528,left_val:-0.0873490720987320},{features:[[17,16,2,2,-1.],[17,16,1,1,2.],[18,17,1,1,2.]],threshold:4.7858079778961837e-004,right_val:-0.3885467052459717,left_val:0.0456245802342892},{features:[[17,16,2,2,-1.],[17,16,1,1,2.],[18,17,1,1,2.]],threshold:-8.5342838428914547e-004,right_val:0.0358258895576000,left_val:-0.5507794022560120},{features:[[2,3,2,2,-1.],[2,3,1,1,2.],[3,4,1,1,2.]],threshold:5.4772121075075120e-005,right_val:0.1750351935625076,left_val:-0.1122523993253708},{features:[[10,10,3,3,-1.],[11,10,1,3,3.]],threshold:-3.8445889949798584e-003,right_val:-0.0811325684189796,left_val:0.2452670037746429},{features:[[5,9,7,8,-1.],[5,13,7,4,2.]],threshold:-0.0401284582912922,right_val:0.0269726701080799,left_val:-0.6312270760536194},{features:[[7,16,2,2,-1.],[7,16,1,1,2.],[8,17,1,1,2.]],threshold:-1.7886360001284629e-004,right_val:-0.1033368036150932,left_val:0.1985509991645813},{features:[[7,16,2,2,-1.],[7,16,1,1,2.],[8,17,1,1,2.]],threshold:1.7668239888735116e-004,right_val:0.1984872072935104,left_val:-0.0913590118288994},{features:[[9,8,10,3,-1.],[14,8,5,3,2.]],threshold:0.0727633833885193,right_val:-0.3385263085365295,left_val:0.0500755794346333},{features:[[6,7,4,8,-1.],[6,7,2,4,2.],[8,11,2,4,2.]],threshold:0.0101816300302744,right_val:0.2005959004163742,left_val:-0.0932299792766571},{features:[[1,6,4,3,-1.],[1,7,4,1,3.]],threshold:2.4409969337284565e-003,right_val:-0.2692174017429352,left_val:0.0646366328001022},{features:[[6,10,6,10,-1.],[8,10,2,10,3.]],threshold:-3.6227488890290260e-003,right_val:-0.1251484006643295,left_val:0.1316989064216614},{features:[[4,6,3,6,-1.],[5,6,1,6,3.]],threshold:-1.3635610230267048e-003,right_val:-0.1066593974828720,left_val:0.1635046005249023}],threshold:-1.0888810157775879},{simpleClassifiers:[{features:[[3,10,4,4,-1.],[3,10,2,2,2.],[5,12,2,2,2.]],threshold:-9.6991164609789848e-003,right_val:-0.0662253126502037,left_val:0.6112532019615173},{features:[[3,10,4,4,-1.],[3,10,2,2,2.],[5,12,2,2,2.]],threshold:-9.6426531672477722e-003,right_val:2.7699959464371204e-003,left_val:-1.},{features:[[3,10,4,4,-1.],[3,10,2,2,2.],[5,12,2,2,2.]],threshold:-9.6381865441799164e-003,right_val:-2.9904270195402205e-004,left_val:1.},{features:[[14,8,2,6,-1.],[15,8,1,6,2.]],threshold:-4.2553939856588840e-003,right_val:-0.1554012000560761,left_val:0.2846438884735107},{features:[[3,10,4,4,-1.],[3,10,2,2,2.],[5,12,2,2,2.]],threshold:-9.6223521977663040e-003,right_val:0.0439991801977158,left_val:-1.},{features:[[3,10,4,4,-1.],[3,10,2,2,2.],[5,12,2,2,2.]],threshold:-9.1231241822242737e-003,right_val:-2.7267890982329845e-003,left_val:0.8686934113502502},{features:[[12,4,3,9,-1.],[13,4,1,9,3.]],threshold:-8.6240433156490326e-003,right_val:-0.0860713794827461,left_val:0.4535248875617981},{features:[[12,3,1,12,-1.],[12,7,1,4,3.]],threshold:-8.9324144646525383e-003,right_val:-0.2601251900196075,left_val:0.1337555944919586},{features:[[2,0,18,1,-1.],[8,0,6,1,3.]],threshold:-0.0142078101634979,right_val:-0.0972264111042023,left_val:0.3207764029502869},{features:[[10,0,10,6,-1.],[10,0,5,3,2.],[15,3,5,3,2.]],threshold:0.0259110108017921,right_val:0.2621864974498749,left_val:-0.1296408027410507},{features:[[18,16,2,2,-1.],[18,17,2,1,2.]],threshold:2.0531509653665125e-004,right_val:0.2106295973062515,left_val:-0.1240428015589714},{features:[[3,5,4,2,-1.],[3,5,2,1,2.],[5,6,2,1,2.]],threshold:-5.4795680625829846e-005,right_val:-0.2320127934217453,left_val:0.1197429969906807},{features:[[11,8,3,3,-1.],[12,8,1,3,3.]],threshold:6.8555199541151524e-003,right_val:0.4104425013065338,left_val:-0.0632761269807816},{features:[[11,7,3,5,-1.],[12,7,1,5,3.]],threshold:-0.0122530404478312,right_val:-0.0397311002016068,left_val:0.5488333106040955},{features:[[3,19,15,1,-1.],[8,19,5,1,3.]],threshold:-3.9058770053088665e-003,right_val:-0.0970960110425949,left_val:0.2419098019599915},{features:[[8,13,3,2,-1.],[8,14,3,1,2.]],threshold:2.7560980524867773e-003,right_val:0.1945665031671524,left_val:-0.1256967931985855},{features:[[2,12,8,4,-1.],[2,12,4,2,2.],[6,14,4,2,2.]],threshold:-7.7662160620093346e-003,right_val:-0.0968181565403938,left_val:0.2976570129394531},{features:[[16,16,2,2,-1.],[16,16,1,1,2.],[17,17,1,1,2.]],threshold:3.8997188676148653e-004,right_val:-0.4204089939594269,left_val:0.0621884018182755},{features:[[7,0,3,2,-1.],[8,0,1,2,3.]],threshold:3.3579880837351084e-003,right_val:-0.6321688294410706,left_val:0.0474981404840946},{features:[[6,7,2,5,-1.],[7,7,1,5,2.]],threshold:-0.0167455393821001,right_val:-0.0391573496162891,left_val:0.7109813094139099},{features:[[18,0,2,17,-1.],[19,0,1,17,2.]],threshold:-6.5409899689257145e-003,right_val:0.0706169530749321,left_val:-0.3504317104816437},{features:[[16,16,1,3,-1.],[16,17,1,1,3.]],threshold:3.0016340315341949e-004,right_val:-0.2461867034435272,left_val:0.0919024571776390},{features:[[14,8,3,7,-1.],[15,8,1,7,3.]],threshold:0.0149189904332161,right_val:0.5663604140281677,left_val:-0.0519094504415989},{features:[[10,17,2,2,-1.],[10,17,1,1,2.],[11,18,1,1,2.]],threshold:4.8153079114854336e-004,right_val:-0.3659060895442963,left_val:0.0646595582365990},{features:[[4,9,1,3,-1.],[4,10,1,1,3.]],threshold:-3.0211321427486837e-004,right_val:-0.1141066029667854,left_val:0.1792656928300858},{features:[[18,10,2,3,-1.],[18,11,2,1,3.]],threshold:3.8521419628523290e-004,right_val:-0.2007246017456055,left_val:0.1034561991691589},{features:[[12,1,3,10,-1.],[13,1,1,10,3.]],threshold:8.0837132409214973e-003,right_val:0.3028424978256226,left_val:-0.0660734623670578},{features:[[8,12,9,1,-1.],[11,12,3,1,3.]],threshold:-0.0228049699217081,right_val:-0.0401189997792244,left_val:0.5296235084533691},{features:[[5,18,2,2,-1.],[5,18,1,1,2.],[6,19,1,1,2.]],threshold:1.9440450705587864e-004,right_val:-0.2466336041688919,left_val:0.0818548202514648},{features:[[19,6,1,9,-1.],[19,9,1,3,3.]],threshold:-0.0128480903804302,right_val:0.0569162294268608,left_val:-0.3497331142425537},{features:[[4,7,2,4,-1.],[4,7,1,2,2.],[5,9,1,2,2.]],threshold:-1.0937290498986840e-003,right_val:-0.0916048064827919,left_val:0.2336868047714233},{features:[[1,4,6,14,-1.],[3,4,2,14,3.]],threshold:1.0032650316134095e-003,right_val:-0.1846919059753418,left_val:0.1185218021273613},{features:[[10,5,9,3,-1.],[13,5,3,3,3.]],threshold:-0.0446884296834469,right_val:0.0303632691502571,left_val:-0.6436246037483215},{features:[[18,7,2,6,-1.],[18,9,2,2,3.]],threshold:8.1657543778419495e-003,right_val:-0.4300208985805512,left_val:0.0436746589839458},{features:[[5,6,2,7,-1.],[6,6,1,7,2.]],threshold:-0.0117178102955222,right_val:-0.0482336990535259,left_val:0.4178147912025452},{features:[[10,4,6,8,-1.],[13,4,3,8,2.]],threshold:0.0842771306633949,right_val:-0.3795219063758850,left_val:0.0534612797200680},{features:[[0,8,2,9,-1.],[0,11,2,3,3.]],threshold:0.0142118399962783,right_val:-0.4298149943351746,left_val:0.0449009388685226},{features:[[0,7,5,3,-1.],[0,8,5,1,3.]],threshold:1.5028340276330709e-003,right_val:-0.2470639944076538,left_val:0.0822276398539543},{features:[[8,1,7,2,-1.],[8,2,7,1,2.]],threshold:0.0100035797804594,right_val:0.3460937142372131,left_val:-0.0572216697037220},{features:[[7,5,3,5,-1.],[8,5,1,5,3.]],threshold:-9.0706320479512215e-003,right_val:-0.0427953191101551,left_val:0.4505808949470520},{features:[[19,2,1,2,-1.],[19,3,1,1,2.]],threshold:-3.3141620224341750e-004,right_val:-0.1075994968414307,left_val:0.1833691000938416},{features:[[6,7,10,11,-1.],[11,7,5,11,2.]],threshold:0.1972327977418900,right_val:0.6642342805862427,left_val:-0.0303638298064470},{features:[[9,19,6,1,-1.],[11,19,2,1,3.]],threshold:-7.1258801035583019e-003,right_val:0.0256699901074171,left_val:-0.8922504782676697},{features:[[3,0,12,1,-1.],[7,0,4,1,3.]],threshold:8.6921341717243195e-003,right_val:0.2821052968502045,left_val:-0.0707643702626228},{features:[[4,1,6,5,-1.],[6,1,2,5,3.]],threshold:8.9262127876281738e-003,right_val:-0.3023256063461304,left_val:0.0710782334208488},{features:[[6,12,12,6,-1.],[10,12,4,6,3.]],threshold:0.0572860091924667,right_val:-0.3919695019721985,left_val:0.0509741306304932},{features:[[16,13,2,3,-1.],[16,14,2,1,3.]],threshold:3.7920880131423473e-003,right_val:-0.5101628899574280,left_val:0.0338419415056705},{features:[[7,14,4,2,-1.],[7,15,4,1,2.]],threshold:-1.4508679741993546e-003,right_val:-0.0638450831174850,left_val:0.3087914884090424},{features:[[7,14,2,2,-1.],[7,15,2,1,2.]],threshold:9.8390132188796997e-004,right_val:0.1460441052913666,left_val:-0.1302956938743591},{features:[[3,10,2,4,-1.],[3,10,1,2,2.],[4,12,1,2,2.]],threshold:-1.7221809830516577e-003,right_val:-0.0685495585203171,left_val:0.2915700972080231},{features:[[0,3,2,6,-1.],[0,5,2,2,3.]],threshold:0.0109482500702143,right_val:-0.4770225882530212,left_val:0.0343514084815979},{features:[[1,10,2,2,-1.],[1,10,1,1,2.],[2,11,1,1,2.]],threshold:-1.7176309484057128e-005,right_val:-0.1169084012508392,left_val:0.1605526953935623},{features:[[16,4,4,3,-1.],[16,5,4,1,3.]],threshold:-5.4884208366274834e-003,right_val:0.0461062416434288,left_val:-0.4341588914394379},{features:[[5,10,2,4,-1.],[5,10,1,2,2.],[6,12,1,2,2.]],threshold:-3.0975250992923975e-003,right_val:-0.0568605512380600,left_val:0.3794333934783936},{features:[[5,11,13,2,-1.],[5,12,13,1,2.]],threshold:6.4182081259787083e-003,right_val:0.1233541965484619,left_val:-0.1585821062326431},{features:[[10,2,3,11,-1.],[11,2,1,11,3.]],threshold:0.0118312397971749,right_val:0.4587895870208740,left_val:-0.0409292913973331},{features:[[10,2,4,4,-1.],[10,4,4,2,2.]],threshold:0.0135404998436570,right_val:0.3505612015724182,left_val:-0.0537255592644215},{features:[[8,8,6,2,-1.],[10,8,2,2,3.]],threshold:-2.5932150892913342e-003,right_val:-0.1675221025943756,left_val:0.1101052016019821},{features:[[11,2,3,3,-1.],[12,2,1,3,3.]],threshold:1.6856270376592875e-003,right_val:-0.3083502054214478,left_val:0.0665743574500084},{features:[[6,18,14,2,-1.],[6,18,7,1,2.],[13,19,7,1,2.]],threshold:2.6524690911173820e-003,right_val:-0.2786133885383606,left_val:0.0663184821605682},{features:[[17,7,1,12,-1.],[17,11,1,4,3.]],threshold:-7.7341729775071144e-003,right_val:-0.1078291982412338,left_val:0.1971835941076279},{features:[[10,5,10,3,-1.],[10,6,10,1,3.]],threshold:5.0944271497428417e-003,right_val:-0.2484700977802277,left_val:0.0853374898433685},{features:[[6,1,3,3,-1.],[7,1,1,3,3.]],threshold:-2.9162371065467596e-003,right_val:0.0335664898157120,left_val:-0.4747635126113892},{features:[[13,8,3,1,-1.],[14,8,1,1,3.]],threshold:3.0121419113129377e-003,right_val:0.4258680045604706,left_val:-0.0475753806531429},{features:[[10,14,2,6,-1.],[10,16,2,2,3.]],threshold:3.1694869976490736e-003,right_val:0.1716345995664597,left_val:-0.1051945015788078},{features:[[4,1,12,14,-1.],[8,1,4,14,3.]],threshold:0.2232756018638611,right_val:0.9248365163803101,left_val:-0.0143702095374465},{features:[[14,1,6,14,-1.],[16,1,2,14,3.]],threshold:-0.0955850481987000,right_val:0.0278189703822136,left_val:-0.7420663833618164},{features:[[3,16,2,2,-1.],[3,16,1,1,2.],[4,17,1,1,2.]],threshold:3.4773729566950351e-005,right_val:0.1292666941881180,left_val:-0.1276578009128571},{features:[[0,16,2,2,-1.],[0,17,2,1,2.]],threshold:7.2459770308341831e-005,right_val:0.1003680974245071,left_val:-0.1651857942342758}],threshold:-1.0408929586410522},{simpleClassifiers:[{features:[[15,6,4,6,-1.],[15,6,2,3,2.],[17,9,2,3,2.]],threshold:-6.5778270363807678e-003,right_val:-0.1528190970420837,left_val:0.3381525874137878},{features:[[12,5,2,2,-1.],[12,6,2,1,2.]],threshold:-1.0922809597104788e-003,right_val:-0.1930849999189377,left_val:0.2228236943483353},{features:[[7,6,6,13,-1.],[9,6,2,13,3.]],threshold:-0.0297595895826817,right_val:-0.1540940999984741,left_val:0.2595987021923065},{features:[[1,9,6,5,-1.],[3,9,2,5,3.]],threshold:-0.0131475403904915,right_val:-0.1654399931430817,left_val:0.1903381049633026},{features:[[0,5,3,4,-1.],[0,7,3,2,2.]],threshold:-1.4396329643204808e-003,right_val:-0.1233894005417824,left_val:0.2007171064615250},{features:[[4,1,16,2,-1.],[4,1,8,1,2.],[12,2,8,1,2.]],threshold:-3.5928250290453434e-003,right_val:-0.1292214989662170,left_val:0.2398552000522614},{features:[[1,18,4,2,-1.],[1,18,2,1,2.],[3,19,2,1,2.]],threshold:-1.5314699849113822e-003,right_val:0.1027503013610840,left_val:-0.4901489913463593},{features:[[7,7,3,4,-1.],[8,7,1,4,3.]],threshold:-6.2372139655053616e-003,right_val:-0.1140562966465950,left_val:0.3121463954448700},{features:[[3,4,9,3,-1.],[6,4,3,3,3.]],threshold:-0.0333646498620510,right_val:0.0513284504413605,left_val:-0.4952087998390198},{features:[[4,6,6,10,-1.],[6,6,2,10,3.]],threshold:-0.0228276997804642,right_val:-0.0650893077254295,left_val:0.3255882859230042},{features:[[9,0,8,10,-1.],[13,0,4,10,2.]],threshold:-0.0861990973353386,right_val:0.0269856993108988,left_val:-0.6764633059501648},{features:[[8,0,8,1,-1.],[12,0,4,1,2.]],threshold:-2.1065981127321720e-003,right_val:-0.1261022984981537,left_val:0.2245243042707443},{features:[[6,2,8,16,-1.],[6,2,4,8,2.],[10,10,4,8,2.]],threshold:0.0391201488673687,right_val:-0.2686063051223755,left_val:0.1132939979434013},{features:[[14,10,2,10,-1.],[14,10,1,5,2.],[15,15,1,5,2.]],threshold:3.5082739777863026e-003,right_val:0.2564977109432221,left_val:-0.1135995984077454},{features:[[12,11,1,2,-1.],[12,12,1,1,2.]],threshold:5.9289898490533233e-004,right_val:0.1640983968973160,left_val:-0.1494296938180924},{features:[[16,0,3,8,-1.],[17,0,1,8,3.]],threshold:7.1766850305721164e-004,right_val:-0.2196796983480454,left_val:0.0999056920409203},{features:[[14,0,6,10,-1.],[17,0,3,10,2.]],threshold:-0.0218036007136106,right_val:0.0828895866870880,left_val:-0.3171172142028809},{features:[[16,0,3,5,-1.],[17,0,1,5,3.]],threshold:-3.2962779514491558e-003,right_val:0.0608193799853325,left_val:-0.3804872930049896},{features:[[4,5,11,2,-1.],[4,6,11,1,2.]],threshold:2.4196270387619734e-003,right_val:0.2854058146476746,left_val:-0.0960130169987679},{features:[[1,0,2,1,-1.],[2,0,1,1,2.]],threshold:-4.4187481398694217e-004,right_val:-0.0974349081516266,left_val:0.2212793976068497},{features:[[0,0,2,3,-1.],[0,1,2,1,3.]],threshold:3.4523929934948683e-003,right_val:-0.5796905159950256,left_val:0.0375531204044819},{features:[[11,6,6,11,-1.],[13,6,2,11,3.]],threshold:-0.0218346007168293,right_val:-0.0800483003258705,left_val:0.2956213951110840},{features:[[14,0,3,1,-1.],[15,0,1,1,3.]],threshold:-2.1309500152710825e-004,right_val:-0.1011418998241425,left_val:0.2281450927257538},{features:[[19,7,1,2,-1.],[19,8,1,1,2.]],threshold:-1.6166249988600612e-003,right_val:0.0447645410895348,left_val:-0.5054119825363159},{features:[[17,0,3,9,-1.],[18,0,1,9,3.]],threshold:7.5959609821438789e-003,right_val:-0.4119768142700195,left_val:0.0459865406155586},{features:[[12,7,3,4,-1.],[13,7,1,4,3.]],threshold:3.8601809646934271e-003,right_val:0.2480999976396561,left_val:-0.0865631699562073},{features:[[0,1,14,2,-1.],[0,1,7,1,2.],[7,2,7,1,2.]],threshold:6.0622231103479862e-003,right_val:0.2843326032161713,left_val:-0.0755573734641075},{features:[[3,1,3,2,-1.],[4,1,1,2,3.]],threshold:-1.7097420059144497e-003,right_val:0.0584104992449284,left_val:-0.3529582023620606},{features:[[4,0,15,2,-1.],[9,0,5,2,3.]],threshold:0.0165155790746212,right_val:0.2353743016719818,left_val:-0.0804869532585144},{features:[[10,2,6,1,-1.],[12,2,2,1,3.]],threshold:4.8465100117027760e-003,right_val:-0.4844304919242859,left_val:0.0418952181935310},{features:[[9,4,6,11,-1.],[11,4,2,11,3.]],threshold:-0.0311671700328588,right_val:-0.1026815995573998,left_val:0.1919230967760086},{features:[[2,16,2,4,-1.],[2,18,2,2,2.]],threshold:6.1892281519249082e-004,right_val:0.0938869267702103,left_val:-0.2108577042818070},{features:[[6,17,6,3,-1.],[8,17,2,3,3.]],threshold:0.0119463102892041,right_val:-0.6224862933158875,left_val:0.0390961691737175},{features:[[7,9,6,2,-1.],[9,9,2,2,3.]],threshold:-7.5677200220525265e-003,right_val:-0.1225078031420708,left_val:0.1593683958053589},{features:[[6,8,9,2,-1.],[9,8,3,2,3.]],threshold:-0.0537474118173122,right_val:0.0411900095641613,left_val:-0.5562217831611633},{features:[[6,6,2,10,-1.],[6,6,1,5,2.],[7,11,1,5,2.]],threshold:0.0155135300010443,right_val:0.6240072846412659,left_val:-0.0398268811404705},{features:[[0,11,2,3,-1.],[0,12,2,1,3.]],threshold:1.5246650436893106e-003,right_val:-0.3078907132148743,left_val:0.0701386779546738},{features:[[11,15,4,1,-1.],[13,15,2,1,2.]],threshold:-4.8315100139006972e-004,right_val:-0.1095862016081810,left_val:0.1788765937089920},{features:[[6,17,1,2,-1.],[6,18,1,1,2.]],threshold:2.7374739293009043e-003,right_val:-0.8848956823348999,left_val:0.0274785906076431},{features:[[0,0,6,20,-1.],[2,0,2,20,3.]],threshold:-0.0657877177000046,right_val:0.0350371487438679,left_val:-0.4643214046955109},{features:[[3,10,2,2,-1.],[4,10,1,2,2.]],threshold:1.2409730115905404e-003,right_val:0.2877922058105469,left_val:-0.0964792370796204},{features:[[4,7,3,5,-1.],[5,7,1,5,3.]],threshold:8.1398809561505914e-004,right_val:-0.1676616072654724,left_val:0.1151171997189522},{features:[[3,12,6,2,-1.],[5,12,2,2,3.]],threshold:0.0239018201828003,right_val:0.6001734733581543,left_val:-0.0326031893491745},{features:[[6,15,7,4,-1.],[6,17,7,2,2.]],threshold:0.0275566000491381,right_val:0.2999447882175446,left_val:-0.0661373436450958},{features:[[17,16,2,2,-1.],[17,16,1,1,2.],[18,17,1,1,2.]],threshold:-3.8070970913395286e-004,right_val:0.0644507706165314,left_val:-0.3388118147850037},{features:[[15,1,3,16,-1.],[16,1,1,16,3.]],threshold:-1.3335429830476642e-003,right_val:-0.1321762055158615,left_val:0.1458866000175476},{features:[[6,16,6,3,-1.],[8,16,2,3,3.]],threshold:-9.3507990241050720e-003,right_val:0.0349694713950157,left_val:-0.5117782950401306},{features:[[15,14,3,2,-1.],[15,15,3,1,2.]],threshold:7.6215229928493500e-003,right_val:-0.6961941123008728,left_val:0.0232495293021202},{features:[[12,16,1,2,-1.],[12,17,1,1,2.]],threshold:-5.3407860832521692e-005,right_val:-0.0869107097387314,left_val:0.2372737973928452},{features:[[0,2,4,4,-1.],[0,2,2,2,2.],[2,4,2,2,2.]],threshold:-1.5332329785451293e-003,right_val:-0.1042239964008331,left_val:0.1922841072082520},{features:[[1,1,6,4,-1.],[1,1,3,2,2.],[4,3,3,2,2.]],threshold:4.3135890737175941e-003,right_val:0.2560121119022369,left_val:-0.0962195470929146},{features:[[1,18,1,2,-1.],[1,19,1,1,2.]],threshold:-2.3042880638968199e-004,right_val:0.0588385984301567,left_val:-0.3156475126743317},{features:[[4,7,2,3,-1.],[4,8,2,1,3.]],threshold:-7.8411828726530075e-003,right_val:0.0245009995996952,left_val:-0.6634092926979065},{features:[[1,0,9,14,-1.],[1,7,9,7,2.]],threshold:0.1710374057292938,right_val:-0.4561594128608704,left_val:0.0338314995169640},{features:[[4,9,2,6,-1.],[4,9,1,3,2.],[5,12,1,3,2.]],threshold:-1.6011140542104840e-003,right_val:-0.0836225301027298,left_val:0.2157489061355591},{features:[[3,9,4,3,-1.],[5,9,2,3,2.]],threshold:-0.0105357803404331,right_val:-0.0823844894766808,left_val:0.2455231994390488},{features:[[0,9,2,4,-1.],[0,11,2,2,2.]],threshold:-5.8351638726890087e-003,right_val:0.0440862216055393,left_val:-0.4780732989311218},{features:[[16,6,3,10,-1.],[17,6,1,10,3.]],threshold:-0.0187061093747616,right_val:0.0214100405573845,left_val:-0.6002402901649475},{features:[[16,11,2,1,-1.],[17,11,1,1,2.]],threshold:-9.3307439237833023e-004,right_val:-0.0741657167673111,left_val:0.2432359009981155}],threshold:-1.0566600561141968},{simpleClassifiers:[{features:[[5,7,4,4,-1.],[5,9,4,2,2.]],threshold:0.0106462296098471,right_val:0.2649407088756561,left_val:-0.1386138945817947},{features:[[10,11,9,2,-1.],[13,11,3,2,3.]],threshold:0.0352982692420483,right_val:0.3902106881141663,left_val:-0.0758217275142670},{features:[[15,10,2,2,-1.],[15,10,1,1,2.],[16,11,1,1,2.]],threshold:7.5638387352228165e-004,right_val:0.2906199991703033,left_val:-0.0955214425921440},{features:[[10,6,6,14,-1.],[10,13,6,7,2.]],threshold:0.0924977064132690,right_val:0.0794747024774551,left_val:-0.2770423889160156},{features:[[14,7,3,5,-1.],[15,7,1,5,3.]],threshold:-2.9340879991650581e-003,right_val:-0.0785500109195709,left_val:0.2298953980207443},{features:[[6,11,12,3,-1.],[10,11,4,3,3.]],threshold:-0.0865358486771584,right_val:-6.8231220357120037e-003,left_val:0.4774481058120728},{features:[[17,16,1,2,-1.],[17,17,1,1,2.]],threshold:5.4699288739357144e-005,right_val:0.0881921127438545,left_val:-0.2264260947704315},{features:[[8,5,5,4,-1.],[8,7,5,2,2.]],threshold:-0.0365925207734108,right_val:-0.0986067429184914,left_val:0.2735387086868286},{features:[[11,6,4,2,-1.],[11,7,4,1,2.]],threshold:2.6469118893146515e-003,right_val:0.3144528865814209,left_val:-0.0440839789807796},{features:[[3,4,8,2,-1.],[3,4,4,1,2.],[7,5,4,1,2.]],threshold:-4.4271810911595821e-003,right_val:-0.0867842733860016,left_val:0.2382272928953171},{features:[[0,8,6,6,-1.],[2,8,2,6,3.]],threshold:-5.1882481202483177e-003,right_val:-0.1267210990190506,left_val:0.1504276990890503},{features:[[7,4,6,2,-1.],[7,5,6,1,2.]],threshold:4.5530400238931179e-003,right_val:0.3650163114070892,left_val:-0.0559450201690197},{features:[[7,3,6,3,-1.],[9,3,2,3,3.]],threshold:0.0145624103024602,right_val:-0.5355919003486633,left_val:0.0363977700471878},{features:[[2,17,3,3,-1.],[2,18,3,1,3.]],threshold:6.8677567469421774e-005,right_val:0.1106870993971825,left_val:-0.1747962981462479},{features:[[3,10,6,1,-1.],[5,10,2,1,3.]],threshold:-5.9744901955127716e-003,right_val:-0.0665302276611328,left_val:0.3107787072658539},{features:[[7,2,6,2,-1.],[9,2,2,2,3.]],threshold:-5.8691250160336494e-003,right_val:0.0639318302273750,left_val:-0.3190149068832398},{features:[[4,11,9,1,-1.],[7,11,3,1,3.]],threshold:-0.0111403102055192,right_val:-0.0809351801872253,left_val:0.2436479032039642},{features:[[7,7,11,12,-1.],[7,13,11,6,2.]],threshold:-0.0586435310542583,right_val:0.0308096297085285,left_val:-0.7608326077461243},{features:[[3,2,3,4,-1.],[4,2,1,4,3.]],threshold:-4.6097282320261002e-003,right_val:0.0298790596425533,left_val:-0.4531502127647400},{features:[[9,7,9,3,-1.],[12,7,3,3,3.]],threshold:-9.3032103031873703e-003,right_val:-0.1103316992521286,left_val:0.1451337933540344},{features:[[15,11,2,6,-1.],[15,11,1,3,2.],[16,14,1,3,2.]],threshold:1.3253629440441728e-003,right_val:0.1964644044637680,left_val:-0.0976989567279816},{features:[[0,5,5,3,-1.],[0,6,5,1,3.]],threshold:4.9800761044025421e-003,right_val:-0.3979220986366272,left_val:0.0336480811238289},{features:[[8,1,6,12,-1.],[10,1,2,12,3.]],threshold:-7.6542161405086517e-003,right_val:-0.1596754938364029,left_val:0.0908419936895370},{features:[[3,7,15,13,-1.],[8,7,5,13,3.]],threshold:-0.3892059028148651,right_val:0.0190288294106722,left_val:-0.6657109260559082},{features:[[0,9,9,9,-1.],[0,12,9,3,3.]],threshold:-0.1001966968178749,right_val:0.0242827795445919,left_val:-0.5755926966667175},{features:[[16,0,3,8,-1.],[17,0,1,8,3.]],threshold:7.3541211895644665e-004,right_val:-0.1619534045457840,left_val:0.0879198014736176},{features:[[16,2,4,2,-1.],[18,2,2,2,2.]],threshold:-3.4802639856934547e-003,right_val:-0.0602008104324341,left_val:0.2606449127197266},{features:[[13,0,6,5,-1.],[16,0,3,5,2.]],threshold:8.4000425413250923e-003,right_val:0.1570730954408646,left_val:-0.1097972989082336},{features:[[15,1,3,2,-1.],[16,1,1,2,3.]],threshold:2.3786011151969433e-003,right_val:-0.4727719128131867,left_val:0.0360582396388054},{features:[[11,8,3,2,-1.],[12,8,1,2,3.]],threshold:7.3831682093441486e-003,right_val:0.4949859082698822,left_val:-0.0357563607394695},{features:[[1,8,2,12,-1.],[1,8,1,6,2.],[2,14,1,6,2.]],threshold:3.2115620560944080e-003,right_val:0.1574798971414566,left_val:-0.1012556031346321},{features:[[0,1,6,12,-1.],[2,1,2,12,3.]],threshold:-0.0782096683979034,right_val:0.0229658298194408,left_val:-0.7662708163261414},{features:[[19,17,1,3,-1.],[19,18,1,1,3.]],threshold:5.3303989261621609e-005,right_val:0.1111491993069649,left_val:-0.1341435015201569},{features:[[11,3,3,10,-1.],[12,3,1,10,3.]],threshold:-9.6419155597686768e-003,right_val:-0.0666081383824348,left_val:0.2506802976131439},{features:[[8,1,9,8,-1.],[11,1,3,8,3.]],threshold:-0.0710926726460457,right_val:0.0402977913618088,left_val:-0.4005681872367859},{features:[[18,16,2,2,-1.],[18,16,1,1,2.],[19,17,1,1,2.]],threshold:3.5171560011804104e-004,right_val:-0.3296119868755341,left_val:0.0418611802160740},{features:[[18,16,2,2,-1.],[18,16,1,1,2.],[19,17,1,1,2.]],threshold:-3.3458150574006140e-004,right_val:0.0678927376866341,left_val:-0.2602983117103577},{features:[[6,13,2,6,-1.],[6,15,2,2,3.]],threshold:-4.1451421566307545e-003,right_val:-0.0720933377742767,left_val:0.2396769970655441},{features:[[9,14,2,2,-1.],[9,15,2,1,2.]],threshold:3.1754500232636929e-003,right_val:0.2412845045328140,left_val:-0.0712352693080902},{features:[[14,10,2,4,-1.],[14,10,1,2,2.],[15,12,1,2,2.]],threshold:-5.5184490047395229e-003,right_val:-0.0296866800636053,left_val:0.5032023787498474},{features:[[0,15,2,2,-1.],[0,15,1,1,2.],[1,16,1,1,2.]],threshold:-3.0242869979701936e-004,right_val:-0.0567585788667202,left_val:0.2487905025482178},{features:[[6,7,2,2,-1.],[6,7,1,1,2.],[7,8,1,1,2.]],threshold:-1.3125919504091144e-003,right_val:-0.0418458618223667,left_val:0.3174780011177063},{features:[[11,18,2,2,-1.],[11,18,1,1,2.],[12,19,1,1,2.]],threshold:-2.7123570907860994e-004,right_val:0.0568289905786514,left_val:-0.2704207003116608},{features:[[0,0,6,4,-1.],[0,0,3,2,2.],[3,2,3,2,2.]],threshold:-7.3241777718067169e-003,right_val:-0.0542529709637165,left_val:0.2755667865276337},{features:[[4,1,6,6,-1.],[6,1,2,6,3.]],threshold:-0.0168517101556063,right_val:0.0453689992427826,left_val:-0.3485291004180908},{features:[[15,13,5,4,-1.],[15,15,5,2,2.]],threshold:0.0299021005630493,right_val:-0.4311437010765076,left_val:0.0316210798919201},{features:[[7,17,6,1,-1.],[9,17,2,1,3.]],threshold:2.8902660124003887e-003,right_val:-0.3702709972858429,left_val:0.0380299612879753},{features:[[16,19,4,1,-1.],[18,19,2,1,2.]],threshold:-1.9242949783802032e-003,right_val:-0.0593332983553410,left_val:0.2480027973651886},{features:[[16,16,4,4,-1.],[18,16,2,4,2.]],threshold:4.9354149959981441e-003,right_val:0.2204380929470062,left_val:-0.0830684006214142},{features:[[7,8,9,4,-1.],[10,8,3,4,3.]],threshold:0.0820756033062935,right_val:0.6908928751945496,left_val:-0.0194134395569563},{features:[[16,18,2,2,-1.],[16,18,1,1,2.],[17,19,1,1,2.]],threshold:-2.4699489586055279e-004,right_val:0.0647764503955841,left_val:-0.2466056942939758},{features:[[2,9,2,4,-1.],[2,9,1,2,2.],[3,11,1,2,2.]],threshold:-1.8365769647061825e-003,right_val:-0.0533904582262039,left_val:0.2883616089820862},{features:[[0,3,8,4,-1.],[0,3,4,2,2.],[4,5,4,2,2.]],threshold:-4.9553811550140381e-003,right_val:-0.1255941987037659,left_val:0.1274082958698273},{features:[[0,1,8,1,-1.],[4,1,4,1,2.]],threshold:-8.3086621016263962e-003,right_val:-0.0716764926910400,left_val:0.2347811013460159},{features:[[0,5,8,9,-1.],[4,5,4,9,2.]],threshold:-0.1087991967797279,right_val:0.0586897395551205,left_val:-0.2599223852157593},{features:[[7,18,6,2,-1.],[9,18,2,2,3.]],threshold:-9.6786450594663620e-003,right_val:0.0187492594122887,left_val:-0.7072042822837830},{features:[[0,4,1,12,-1.],[0,8,1,4,3.]],threshold:-0.0271368306130171,right_val:0.0216841306537390,left_val:-0.5838422775268555},{features:[[19,13,1,6,-1.],[19,15,1,2,3.]],threshold:-6.5389778465032578e-003,right_val:0.0214803107082844,left_val:-0.5974891185760498},{features:[[2,8,6,8,-1.],[4,8,2,8,3.]],threshold:-0.0120956301689148,right_val:-0.0997227206826210,left_val:0.1326903998851776},{features:[[0,0,9,17,-1.],[3,0,3,17,3.]],threshold:-0.1677609980106354,right_val:0.0321230888366699,left_val:-0.5665506720542908},{features:[[7,9,6,8,-1.],[9,9,2,8,3.]],threshold:-0.0132625503465533,right_val:-0.1173838973045349,left_val:0.1149559020996094},{features:[[5,10,9,4,-1.],[8,10,3,4,3.]],threshold:0.0767445191740990,right_val:0.5993549227714539,left_val:-0.0314132310450077},{features:[[5,0,8,3,-1.],[5,1,8,1,3.]],threshold:5.0785229541361332e-003,right_val:0.2334239929914475,left_val:-0.0529119409620762},{features:[[16,6,4,4,-1.],[16,6,2,2,2.],[18,8,2,2,2.]],threshold:3.1800279393792152e-003,right_val:0.1765290945768356,left_val:-0.0777343884110451},{features:[[17,4,2,8,-1.],[17,4,1,4,2.],[18,8,1,4,2.]],threshold:-1.7729829996824265e-003,right_val:-0.0797521993517876,left_val:0.1959162950515747},{features:[[2,16,1,3,-1.],[2,17,1,1,3.]],threshold:-4.8560940194875002e-004,right_val:0.0490471199154854,left_val:-0.2880037128925324},{features:[[2,16,1,3,-1.],[2,17,1,1,3.]],threshold:3.6554320831783116e-004,right_val:-0.2249943017959595,left_val:0.0679228976368904},{features:[[11,0,1,3,-1.],[11,1,1,1,3.]],threshold:-2.6938671362586319e-004,right_val:-0.0897440984845161,left_val:0.1658217012882233},{features:[[11,2,9,7,-1.],[14,2,3,7,3.]],threshold:0.0786842331290245,right_val:-0.5569373965263367,left_val:0.0260816793888807},{features:[[10,2,3,6,-1.],[11,2,1,6,3.]],threshold:-7.3774810880422592e-004,right_val:-0.1180030032992363,left_val:0.1403687000274658},{features:[[5,9,15,2,-1.],[5,10,15,1,2.]],threshold:0.0239578299224377,right_val:-0.4615997970104218,left_val:0.0304707400500774},{features:[[8,16,6,2,-1.],[8,17,6,1,2.]],threshold:-1.6239080578088760e-003,right_val:-0.0567653700709343,left_val:0.2632707953453064},{features:[[9,16,10,2,-1.],[9,16,5,1,2.],[14,17,5,1,2.]],threshold:-9.0819748584181070e-004,right_val:-0.1108706966042519,left_val:0.1546245962381363},{features:[[9,17,2,2,-1.],[9,17,1,1,2.],[10,18,1,1,2.]],threshold:3.9806248969398439e-004,right_val:-0.2833195924758911,left_val:0.0556303709745407},{features:[[10,15,6,4,-1.],[10,15,3,2,2.],[13,17,3,2,2.]],threshold:2.0506449509412050e-003,right_val:0.1758553981781006,left_val:-0.0916048362851143},{features:[[4,5,15,12,-1.],[9,5,5,12,3.]],threshold:0.0267425496131182,right_val:-0.2448700070381165,left_val:0.0620030313730240},{features:[[11,13,2,3,-1.],[11,14,2,1,3.]],threshold:-2.1497008856385946e-003,right_val:-0.0532181486487389,left_val:0.2944929897785187},{features:[[8,13,7,3,-1.],[8,14,7,1,3.]],threshold:5.6671658530831337e-003,right_val:0.2490568011999130,left_val:-0.0642982423305511},{features:[[1,12,1,2,-1.],[1,13,1,1,2.]],threshold:6.8317902332637459e-005,right_val:0.0965485796332359,left_val:-0.1681963056325913},{features:[[16,18,2,2,-1.],[16,18,1,1,2.],[17,19,1,1,2.]],threshold:1.7600439605303109e-004,right_val:-0.2426788061857224,left_val:0.0653080120682716},{features:[[1,19,18,1,-1.],[7,19,6,1,3.]],threshold:4.1861608624458313e-003,right_val:0.1805288940668106,left_val:-0.0979885831475258},{features:[[1,17,6,1,-1.],[4,17,3,1,2.]],threshold:-2.1808340679854155e-003,right_val:-0.0941239297389984,left_val:0.1923127025365830},{features:[[1,3,1,12,-1.],[1,9,1,6,2.]],threshold:0.0217304006218910,right_val:-0.4508853852748871,left_val:0.0355785116553307},{features:[[0,9,3,6,-1.],[0,11,3,2,3.]],threshold:-0.0147802699357271,right_val:0.0317355915904045,left_val:-0.4392701089382172},{features:[[5,4,3,10,-1.],[6,4,1,10,3.]],threshold:-3.6145891062915325e-003,right_val:-0.0777014195919037,left_val:0.1981147974729538},{features:[[6,17,2,1,-1.],[7,17,1,1,2.]],threshold:1.8892709631472826e-003,right_val:-0.7204172015190125,left_val:0.0199624393135309},{features:[[1,0,6,12,-1.],[3,0,2,12,3.]],threshold:-1.3822480104863644e-003,right_val:-0.1488108038902283,left_val:0.0984669476747513},{features:[[4,7,9,2,-1.],[7,7,3,2,3.]],threshold:-3.9505911991000175e-003,right_val:-0.1279197037220001,left_val:0.1159323006868362}],threshold:-0.9769343137741089},{simpleClassifiers:[{features:[[6,11,9,1,-1.],[9,11,3,1,3.]],threshold:-0.0193955395370722,right_val:-0.1172109022736549,left_val:0.4747475087642670},{features:[[17,10,2,10,-1.],[17,15,2,5,2.]],threshold:0.0131189199164510,right_val:0.1637880057096481,left_val:-0.2555212974548340},{features:[[4,10,2,10,-1.],[4,10,1,5,2.],[5,15,1,5,2.]],threshold:-5.1606801571324468e-004,right_val:-0.1744889020919800,left_val:0.1945261955261231},{features:[[12,3,3,12,-1.],[13,3,1,12,3.]],threshold:-0.0131841599941254,right_val:-0.0900487527251244,left_val:0.4418145120143890},{features:[[15,3,4,6,-1.],[15,3,2,3,2.],[17,6,2,3,2.]],threshold:3.4657081123441458e-003,right_val:0.1805634051561356,left_val:-0.1347709000110626},{features:[[12,8,3,3,-1.],[13,8,1,3,3.]],threshold:6.2980200164020061e-003,right_val:0.3603338003158569,left_val:-0.0541649796068668},{features:[[4,14,2,4,-1.],[4,16,2,2,2.]],threshold:1.6879989998415112e-003,right_val:0.1202159970998764,left_val:-0.1999794989824295},{features:[[6,16,1,3,-1.],[6,17,1,1,3.]],threshold:3.6039709812030196e-004,right_val:-0.2411606013774872,left_val:0.1052414029836655},{features:[[1,1,2,3,-1.],[2,1,1,3,2.]],threshold:-1.5276849735528231e-003,right_val:-0.0689648166298866,left_val:0.2813552916049957},{features:[[0,2,4,1,-1.],[2,2,2,1,2.]],threshold:3.5033570602536201e-003,right_val:0.4071359038352966,left_val:-0.0825195834040642},{features:[[8,17,12,3,-1.],[12,17,4,3,3.]],threshold:-4.7337161377072334e-003,right_val:-0.1171014010906220,left_val:0.1972700953483582},{features:[[9,16,6,4,-1.],[11,16,2,4,3.]],threshold:-0.0115571497008204,right_val:0.0681709572672844,left_val:-0.5606111288070679},{features:[[4,6,3,6,-1.],[4,9,3,3,2.]],threshold:-0.0274457205086946,right_val:-0.0623801499605179,left_val:0.4971862137317658},{features:[[6,2,12,9,-1.],[6,5,12,3,3.]],threshold:-0.0528257787227631,right_val:-0.1309355050325394,left_val:0.1692122071981430},{features:[[6,0,14,20,-1.],[6,0,7,10,2.],[13,10,7,10,2.]],threshold:-0.2984969913959503,right_val:0.0400768183171749,left_val:-0.6464967131614685},{features:[[15,16,2,2,-1.],[15,16,1,1,2.],[16,17,1,1,2.]],threshold:-2.6307269581593573e-004,right_val:-0.0894948393106461,left_val:0.2512794137001038},{features:[[15,16,2,2,-1.],[15,16,1,1,2.],[16,17,1,1,2.]],threshold:2.3261709429789335e-004,right_val:0.2383197993040085,left_val:-0.0868439897894859},{features:[[19,8,1,3,-1.],[19,9,1,1,3.]],threshold:2.3631360090803355e-004,right_val:-0.1893634945154190,left_val:0.1155446022748947},{features:[[13,4,1,2,-1.],[13,5,1,1,2.]],threshold:2.0742209162563086e-003,right_val:0.5748599171638489,left_val:-0.0485948510468006},{features:[[0,4,4,2,-1.],[0,5,4,1,2.]],threshold:-7.0308889262378216e-003,right_val:0.0487437509000301,left_val:-0.5412080883979797},{features:[[19,5,1,6,-1.],[19,7,1,2,3.]],threshold:8.2652270793914795e-003,right_val:-0.6172845959663391,left_val:0.0264945197850466},{features:[[16,0,2,1,-1.],[17,0,1,1,2.]],threshold:2.0042760297656059e-004,right_val:0.1633386015892029,left_val:-0.1176863014698029},{features:[[13,1,1,3,-1.],[13,2,1,1,3.]],threshold:1.6470040427520871e-003,right_val:0.3517970144748688,left_val:-0.0599549189209938},{features:[[17,17,1,3,-1.],[17,18,1,1,3.]],threshold:-3.5642538568936288e-004,right_val:0.0649482533335686,left_val:-0.3442029953002930},{features:[[5,4,8,8,-1.],[5,4,4,4,2.],[9,8,4,4,2.]],threshold:-0.0309358704835176,right_val:-0.0976936966180801,left_val:0.1997970044612885},{features:[[1,2,2,2,-1.],[1,2,1,1,2.],[2,3,1,1,2.]],threshold:-6.3578772824257612e-004,right_val:0.0594250410795212,left_val:-0.3148139119148254},{features:[[0,0,8,6,-1.],[0,0,4,3,2.],[4,3,4,3,2.]],threshold:-0.0118621801957488,right_val:-0.0894475430250168,left_val:0.2004369050264359},{features:[[6,3,4,2,-1.],[6,4,4,1,2.]],threshold:7.1508930996060371e-003,right_val:0.5332716107368469,left_val:-0.0390060618519783},{features:[[1,0,3,3,-1.],[1,1,3,1,3.]],threshold:-2.0059191156178713e-003,right_val:0.0707236081361771,left_val:-0.2846972048282623},{features:[[6,1,7,2,-1.],[6,2,7,1,2.]],threshold:3.6412389017641544e-003,right_val:0.2494480013847351,left_val:-0.1066031977534294},{features:[[2,6,12,6,-1.],[6,6,4,6,3.]],threshold:-0.1346742957830429,right_val:-0.0403322204947472,left_val:0.4991008043289185},{features:[[1,16,9,2,-1.],[4,16,3,2,3.]],threshold:-2.2547659464180470e-003,right_val:-0.1111928001046181,left_val:0.1685169041156769},{features:[[7,15,6,4,-1.],[9,15,2,4,3.]],threshold:4.3842289596796036e-003,right_val:-0.2743177115917206,left_val:0.0861394926905632},{features:[[6,15,12,1,-1.],[12,15,6,1,2.]],threshold:-7.3361168615520000e-003,right_val:-0.0959191620349884,left_val:0.2487521022558212},{features:[[17,17,1,3,-1.],[17,18,1,1,3.]],threshold:6.4666912658140063e-004,right_val:-0.3375408053398132,left_val:0.0674315765500069},{features:[[17,15,2,2,-1.],[17,15,1,1,2.],[18,16,1,1,2.]],threshold:2.2983769304119051e-004,right_val:0.2458409965038300,left_val:-0.0839030519127846},{features:[[3,13,3,3,-1.],[3,14,3,1,3.]],threshold:6.7039071582257748e-003,right_val:-0.6905593872070313,left_val:0.0290793292224407},{features:[[10,17,1,3,-1.],[10,18,1,1,3.]],threshold:5.0734888645820320e-005,right_val:0.1196542978286743,left_val:-0.1569671928882599},{features:[[4,0,14,8,-1.],[11,0,7,8,2.]],threshold:-0.2033555954694748,right_val:0.0275075193494558,left_val:-0.6950634717941284},{features:[[2,0,12,2,-1.],[6,0,4,2,3.]],threshold:9.4939414411783218e-003,right_val:0.2396833002567291,left_val:-0.0874493718147278},{features:[[2,0,4,3,-1.],[4,0,2,3,2.]],threshold:-2.4055240210145712e-003,right_val:-0.1314893066883087,left_val:0.2115096002817154},{features:[[13,1,1,2,-1.],[13,2,1,1,2.]],threshold:-1.1342419747961685e-004,right_val:-0.1272590011358261,left_val:0.1523378938436508},{features:[[7,5,3,6,-1.],[8,5,1,6,3.]],threshold:0.0149922100827098,right_val:0.5062407255172730,left_val:-0.0341279692947865},{features:[[18,2,2,2,-1.],[18,2,1,1,2.],[19,3,1,1,2.]],threshold:7.4068200774490833e-004,right_val:-0.4022532105445862,left_val:0.0487647503614426},{features:[[15,1,2,14,-1.],[16,1,1,14,2.]],threshold:-4.2459447868168354e-003,right_val:-0.0871269926428795,left_val:0.2155476063489914},{features:[[15,6,2,2,-1.],[15,6,1,1,2.],[16,7,1,1,2.]],threshold:6.8655109498649836e-004,right_val:0.2640590965747833,left_val:-0.0754187181591988},{features:[[3,1,6,3,-1.],[5,1,2,3,3.]],threshold:-0.0167514607310295,right_val:0.0329187288880348,left_val:-0.6772903203964233},{features:[[7,16,2,2,-1.],[7,16,1,1,2.],[8,17,1,1,2.]],threshold:-2.6301678735762835e-004,right_val:-0.0905348733067513,left_val:0.2272586971521378},{features:[[5,17,2,2,-1.],[5,17,1,1,2.],[6,18,1,1,2.]],threshold:4.3398610432632267e-004,right_val:-0.3559266924858093,left_val:0.0558943785727024},{features:[[9,10,6,10,-1.],[11,10,2,10,3.]],threshold:-0.0201501492410898,right_val:-0.0949299708008766,left_val:0.1916276067495346},{features:[[10,17,6,3,-1.],[12,17,2,3,3.]],threshold:-0.0144521296024323,right_val:0.0254221707582474,left_val:-0.6851034164428711},{features:[[14,5,2,10,-1.],[14,10,2,5,2.]],threshold:-0.0211497396230698,right_val:-0.0514965802431107,left_val:0.3753319084644318},{features:[[11,12,6,2,-1.],[11,13,6,1,2.]],threshold:0.0211377702653408,right_val:-0.8943036794662476,left_val:0.0290830805897713},{features:[[8,1,1,3,-1.],[8,2,1,1,3.]],threshold:1.1524349683895707e-003,right_val:0.2729980051517487,left_val:-0.0696949362754822},{features:[[12,15,2,2,-1.],[12,15,1,1,2.],[13,16,1,1,2.]],threshold:-1.9070580310653895e-004,right_val:-0.0983670726418495,left_val:0.1822811961174011},{features:[[6,8,6,4,-1.],[6,8,3,2,2.],[9,10,3,2,2.]],threshold:-0.0363496318459511,right_val:0.0250557605177164,left_val:-0.8369309902191162},{features:[[7,5,3,5,-1.],[8,5,1,5,3.]],threshold:-9.0632075443863869e-003,right_val:-0.0544134490191936,left_val:0.4146350026130676},{features:[[0,5,7,3,-1.],[0,6,7,1,3.]],threshold:-2.0535490475594997e-003,right_val:0.1050689965486527,left_val:-0.1975031048059464}],threshold:-1.0129359960556030},{simpleClassifiers:[{features:[[7,9,6,6,-1.],[9,9,2,6,3.]],threshold:-0.0227170195430517,right_val:-0.1474552005529404,left_val:0.2428855001926422},{features:[[5,7,8,8,-1.],[5,11,8,4,2.]],threshold:0.0255059506744146,right_val:0.1083720996975899,left_val:-0.2855173945426941},{features:[[4,9,2,6,-1.],[4,9,1,3,2.],[5,12,1,3,2.]],threshold:-2.6640091091394424e-003,right_val:-0.1037271022796631,left_val:0.2927573025226593},{features:[[10,11,6,1,-1.],[12,11,2,1,3.]],threshold:-3.8115289062261581e-003,right_val:-0.1381113976240158,left_val:0.2142689973115921},{features:[[13,6,6,11,-1.],[15,6,2,11,3.]],threshold:-0.0167326908558607,right_val:-0.0439113304018974,left_val:0.2655026018619537},{features:[[8,17,2,2,-1.],[8,17,1,1,2.],[9,18,1,1,2.]],threshold:4.9277010839432478e-004,right_val:-0.4297136068344116,left_val:0.0211045593023300},{features:[[4,12,12,1,-1.],[8,12,4,1,3.]],threshold:-0.0366911105811596,right_val:-0.0436488017439842,left_val:0.5399242043495178},{features:[[11,17,3,2,-1.],[11,18,3,1,2.]],threshold:1.2615970335900784e-003,right_val:0.1663877069950104,left_val:-0.1293386965990067},{features:[[8,17,6,1,-1.],[10,17,2,1,3.]],threshold:-8.4106856957077980e-003,right_val:0.0214658491313457,left_val:-0.9469841122627258},{features:[[4,1,14,6,-1.],[4,3,14,2,3.]],threshold:0.0649027228355408,right_val:0.2661347985267639,left_val:-0.0717277601361275},{features:[[14,2,2,12,-1.],[14,8,2,6,2.]],threshold:0.0303050000220537,right_val:0.2769432067871094,left_val:-0.0827824920415878},{features:[[12,13,3,2,-1.],[12,14,3,1,2.]],threshold:2.5875340215861797e-003,right_val:0.1775663048028946,left_val:-0.1296616941690445},{features:[[6,1,6,1,-1.],[8,1,2,1,3.]],threshold:-7.0240451022982597e-003,right_val:0.0399432107806206,left_val:-0.6424317955970764},{features:[[10,6,6,1,-1.],[12,6,2,1,3.]],threshold:-1.0099769569933414e-003,right_val:-0.1165997013449669,left_val:0.1417661011219025},{features:[[3,19,2,1,-1.],[4,19,1,1,2.]],threshold:-4.1179071558872238e-005,right_val:-0.1112734004855156,left_val:0.1568766981363297},{features:[[18,16,2,2,-1.],[18,16,1,1,2.],[19,17,1,1,2.]],threshold:-4.7293151146732271e-004,right_val:0.0459777303040028,left_val:-0.3355455994606018},{features:[[16,11,3,7,-1.],[17,11,1,7,3.]],threshold:-1.7178079579025507e-003,right_val:-0.1057806983590126,left_val:0.1695290952920914},{features:[[19,5,1,6,-1.],[19,8,1,3,2.]],threshold:-0.0133331697434187,right_val:0.0309784300625324,left_val:-0.5825781226158142},{features:[[9,8,4,3,-1.],[9,9,4,1,3.]],threshold:-1.8783430568873882e-003,right_val:-0.1113125979900360,left_val:0.1426687985658646},{features:[[16,8,4,4,-1.],[16,8,2,2,2.],[18,10,2,2,2.]],threshold:-6.5765981562435627e-003,right_val:-0.0531003288924694,left_val:0.2756136059761047},{features:[[2,8,2,2,-1.],[2,8,1,1,2.],[3,9,1,1,2.]],threshold:-7.7210381277836859e-005,right_val:-0.1116779968142510,left_val:0.1324024051427841},{features:[[3,5,6,4,-1.],[3,5,3,2,2.],[6,7,3,2,2.]],threshold:0.0219685398042202,right_val:0.5006716847419739,left_val:-0.0269681606441736},{features:[[2,3,8,16,-1.],[2,3,4,8,2.],[6,11,4,8,2.]],threshold:-0.0274457503110170,right_val:0.0604782700538635,left_val:-0.2408674061298370},{features:[[17,17,1,3,-1.],[17,18,1,1,3.]],threshold:7.8305849456228316e-005,right_val:0.1012346968054771,left_val:-0.1333488970994949},{features:[[7,2,8,11,-1.],[11,2,4,11,2.]],threshold:0.0701906830072403,right_val:0.2480994015932083,left_val:-0.0548637807369232},{features:[[13,3,6,14,-1.],[16,3,3,14,2.]],threshold:-0.0719021335244179,right_val:0.0422109998762608,left_val:-0.3784669041633606},{features:[[0,9,18,2,-1.],[6,9,6,2,3.]],threshold:-0.1078097969293594,right_val:0.0428334400057793,left_val:-0.3748658895492554},{features:[[6,10,14,3,-1.],[6,11,14,1,3.]],threshold:1.4364200178533792e-003,right_val:-0.1726378947496414,left_val:0.0804763585329056},{features:[[10,9,9,3,-1.],[13,9,3,3,3.]],threshold:0.0682891905307770,right_val:0.4076131880283356,left_val:-0.0355957895517349},{features:[[3,5,4,6,-1.],[3,5,2,3,2.],[5,8,2,3,2.]],threshold:-6.8037179298698902e-003,right_val:-0.0823680236935616,left_val:0.1923379004001617},{features:[[3,7,3,7,-1.],[4,7,1,7,3.]],threshold:-5.6193489581346512e-004,right_val:-0.1435514986515045,left_val:0.1305712014436722},{features:[[2,8,11,6,-1.],[2,10,11,2,3.]],threshold:-0.0582766495645046,right_val:0.0528196506202221,left_val:-0.3012543916702271},{features:[[8,9,6,3,-1.],[8,10,6,1,3.]],threshold:-6.1205718666315079e-003,right_val:-0.0756917521357536,left_val:0.2204390019178391},{features:[[3,3,3,11,-1.],[4,3,1,11,3.]],threshold:-0.0135943097993732,right_val:0.0418571084737778,left_val:-0.3904936015605927},{features:[[0,19,6,1,-1.],[3,19,3,1,2.]],threshold:1.3626200379803777e-003,right_val:0.1497032046318054,left_val:-0.0953634232282639},{features:[[18,18,1,2,-1.],[18,19,1,1,2.]],threshold:-1.5074219845701009e-004,right_val:0.0647983327507973,left_val:-0.2394558042287827},{features:[[8,0,12,6,-1.],[8,0,6,3,2.],[14,3,6,3,2.]],threshold:-0.0774142593145370,right_val:-0.0245168805122375,left_val:0.5594198107719421},{features:[[19,5,1,3,-1.],[19,6,1,1,3.]],threshold:9.2117872554808855e-004,right_val:-0.2793481051921845,left_val:0.0549288615584373},{features:[[5,8,2,1,-1.],[6,8,1,1,2.]],threshold:1.0250780032947659e-003,right_val:0.2497636973857880,left_val:-0.0621673092246056},{features:[[13,11,2,1,-1.],[14,11,1,1,2.]],threshold:-8.1174750812351704e-004,right_val:-0.0657258108258247,left_val:0.2343793958425522},{features:[[3,6,15,13,-1.],[8,6,5,13,3.]],threshold:0.0834310203790665,right_val:-0.3102098107337952,left_val:0.0509548000991344},{features:[[4,3,6,2,-1.],[6,3,2,2,3.]],threshold:-9.2014456167817116e-003,right_val:0.0329269506037235,left_val:-0.3924253880977631},{features:[[0,18,1,2,-1.],[0,19,1,1,2.]],threshold:-2.9086650465615094e-004,right_val:0.0497118197381496,left_val:-0.3103975057601929},{features:[[7,8,2,6,-1.],[8,8,1,6,2.]],threshold:7.7576898038387299e-003,right_val:0.3643135130405426,left_val:-0.0440407507121563},{features:[[3,0,6,19,-1.],[5,0,2,19,3.]],threshold:-0.1246609017252922,right_val:0.0191506408154964,left_val:-0.8195707798004150},{features:[[3,1,6,5,-1.],[5,1,2,5,3.]],threshold:0.0132425501942635,right_val:-0.3323068022727966,left_val:0.0389888398349285},{features:[[17,14,3,6,-1.],[17,16,3,2,3.]],threshold:-6.6770128905773163e-003,right_val:0.0404602102935314,left_val:-0.3579013943672180},{features:[[17,13,2,6,-1.],[18,13,1,6,2.]],threshold:-2.7479929849505424e-003,right_val:-0.0564278215169907,left_val:0.2525390088558197},{features:[[17,18,2,2,-1.],[18,18,1,2,2.]],threshold:8.2659651525318623e-004,right_val:0.2278047949075699,left_val:-0.0719886571168900},{features:[[11,14,9,4,-1.],[14,14,3,4,3.]],threshold:-0.0501534007489681,right_val:0.0274620503187180,left_val:-0.6303647160530090},{features:[[15,8,4,6,-1.],[15,8,2,3,2.],[17,11,2,3,2.]],threshold:7.4203149415552616e-003,right_val:0.2778733968734741,left_val:-0.0666107162833214},{features:[[1,16,1,3,-1.],[1,17,1,1,3.]],threshold:-6.7951780511066318e-004,right_val:0.0427954308688641,left_val:-0.3632706105709076},{features:[[7,0,3,14,-1.],[8,0,1,14,3.]],threshold:-1.9305750029161572e-003,right_val:-0.1075998023152351,left_val:0.1419623047113419},{features:[[12,0,2,1,-1.],[13,0,1,1,2.]],threshold:-3.8132671033963561e-004,right_val:-0.0702026635408401,left_val:0.2159176021814346},{features:[[7,9,6,5,-1.],[10,9,3,5,2.]],threshold:-0.0709903463721275,right_val:-0.0407504811882973,left_val:0.4526660144329071},{features:[[15,5,4,9,-1.],[17,5,2,9,2.]],threshold:-0.0533680804073811,right_val:0.0192883405834436,left_val:-0.6767405867576599},{features:[[11,0,6,6,-1.],[13,0,2,6,3.]],threshold:-0.0200648494064808,right_val:0.0318532884120941,left_val:-0.4336543083190918},{features:[[16,15,2,2,-1.],[16,15,1,1,2.],[17,16,1,1,2.]],threshold:1.1976360110566020e-003,right_val:0.5079718232154846,left_val:-0.0265598706901073},{features:[[16,15,2,2,-1.],[16,15,1,1,2.],[17,16,1,1,2.]],threshold:-2.2697300300933421e-004,right_val:-0.0836065486073494,left_val:0.1801259964704514},{features:[[13,2,2,18,-1.],[13,11,2,9,2.]],threshold:0.0152626996859908,right_val:0.0674220174551010,left_val:-0.2023892998695374},{features:[[8,4,8,10,-1.],[8,9,8,5,2.]],threshold:-0.2081176936626434,right_val:-0.0224521104246378,left_val:0.6694386005401611},{features:[[8,3,2,3,-1.],[8,4,2,1,3.]],threshold:1.5514369588345289e-003,right_val:0.1732691973447800,left_val:-0.0751218423247337},{features:[[11,1,6,9,-1.],[11,4,6,3,3.]],threshold:-0.0529240109026432,right_val:-0.0628791674971581,left_val:0.2499251961708069},{features:[[15,4,5,6,-1.],[15,6,5,2,3.]],threshold:-0.0216488502919674,right_val:0.0526144914329052,left_val:-0.2919428050518036},{features:[[12,18,2,2,-1.],[12,18,1,1,2.],[13,19,1,1,2.]],threshold:-2.2905069636180997e-004,right_val:0.0631683394312859,left_val:-0.2211730033159256},{features:[[1,17,1,3,-1.],[1,18,1,1,3.]],threshold:5.0170070608146489e-005,right_val:0.1161144003272057,left_val:-0.1151070967316628},{features:[[12,19,2,1,-1.],[13,19,1,1,2.]],threshold:-1.6416069411206990e-004,right_val:-0.0826006010174751,left_val:0.1587152034044266},{features:[[8,10,6,6,-1.],[10,10,2,6,3.]],threshold:-0.0120032895356417,right_val:-0.1122969985008240,left_val:0.1221809014678001},{features:[[14,2,6,5,-1.],[16,2,2,5,3.]],threshold:-0.0177841000258923,right_val:0.0313419215381145,left_val:-0.3507278859615326},{features:[[9,5,2,6,-1.],[9,7,2,2,3.]],threshold:-6.3457582145929337e-003,right_val:-0.1057441011071205,left_val:0.1307806968688965},{features:[[1,15,2,2,-1.],[2,15,1,2,2.]],threshold:-7.9523242311552167e-004,right_val:-0.0860019922256470,left_val:0.1720467060804367},{features:[[18,17,1,3,-1.],[18,18,1,1,3.]],threshold:-3.1029590172693133e-004,right_val:0.0518171191215515,left_val:-0.2843317091464996},{features:[[10,14,4,6,-1.],[10,16,4,2,3.]],threshold:-0.0170537102967501,right_val:-0.0401432700455189,left_val:0.3924242854118347},{features:[[9,7,3,2,-1.],[10,7,1,2,3.]],threshold:4.6504959464073181e-003,right_val:0.4123769998550415,left_val:-0.0318375602364540},{features:[[6,9,6,2,-1.],[6,9,3,1,2.],[9,10,3,1,2.]],threshold:-0.0103587601333857,right_val:0.0292483791708946,left_val:-0.5699319839477539},{features:[[0,2,1,12,-1.],[0,6,1,4,3.]],threshold:-0.0221962407231331,right_val:0.0262859892100096,left_val:-0.4560528993606567},{features:[[4,0,15,1,-1.],[9,0,5,1,3.]],threshold:-7.0536029525101185e-003,right_val:-0.0915948599576950,left_val:0.1599832028150559},{features:[[9,0,8,2,-1.],[9,0,4,1,2.],[13,1,4,1,2.]],threshold:-5.7094299700111151e-004,right_val:0.1028741970658302,left_val:-0.1407632976770401},{features:[[12,2,8,1,-1.],[16,2,4,1,2.]],threshold:-2.2152599412947893e-003,right_val:-0.0852739885449409,left_val:0.1659359931945801},{features:[[7,1,10,6,-1.],[7,3,10,2,3.]],threshold:-0.0280848909169436,right_val:-0.0558738112449646,left_val:0.2702234089374542},{features:[[18,6,2,3,-1.],[18,7,2,1,3.]],threshold:2.1515151020139456e-003,right_val:-0.3200584948062897,left_val:0.0424728915095329},{features:[[4,12,2,2,-1.],[4,12,1,1,2.],[5,13,1,1,2.]],threshold:-2.9733829433098435e-004,right_val:-0.0851155892014503,left_val:0.1617716997861862},{features:[[6,6,6,2,-1.],[8,6,2,2,3.]],threshold:-0.0166947804391384,right_val:0.0305416099727154,left_val:-0.4285877048969269},{features:[[0,9,9,6,-1.],[3,9,3,6,3.]],threshold:0.1198299005627632,right_val:0.7984678149223328,left_val:-0.0162772908806801},{features:[[17,18,2,2,-1.],[18,18,1,2,2.]],threshold:-3.5499420482665300e-004,right_val:-0.0832728818058968,left_val:0.1593593955039978},{features:[[11,2,6,16,-1.],[13,2,2,16,3.]],threshold:-0.0182262696325779,right_val:-0.0739398896694183,left_val:0.1952728033065796},{features:[[2,4,15,13,-1.],[7,4,5,13,3.]],threshold:-4.0238600922748446e-004,right_val:-0.2080612927675247,left_val:0.0791018083691597},{features:[[16,2,3,10,-1.],[17,2,1,10,3.]],threshold:4.0892060496844351e-004,right_val:-0.1512821018695831,left_val:0.1003663018345833},{features:[[6,10,2,1,-1.],[7,10,1,1,2.]],threshold:9.5368112670257688e-004,right_val:0.2175202071666718,left_val:-0.0730116665363312},{features:[[1,1,18,16,-1.],[10,1,9,16,2.]],threshold:0.4308179914951325,right_val:0.5706158280372620,left_val:-0.0274506993591785},{features:[[14,4,3,15,-1.],[15,4,1,15,3.]],threshold:5.3564831614494324e-004,right_val:-0.1279056072235107,left_val:0.1158754006028175},{features:[[19,13,1,2,-1.],[19,14,1,1,2.]],threshold:2.4430730263702571e-005,right_val:0.0804499834775925,left_val:-0.1681662946939468},{features:[[2,6,5,8,-1.],[2,10,5,4,2.]],threshold:-0.0553456507623196,right_val:-0.0312227793037891,left_val:0.4533894956111908}],threshold:-0.9774749279022217}],size:[20,20],tilted:false}; +})(jsfeat.haar); \ No newline at end of file diff --git a/cascades/frontalface.js b/cascades/frontalface.js new file mode 100755 index 0000000..3a77ee6 --- /dev/null +++ b/cascades/frontalface.js @@ -0,0 +1,7 @@ +/** + * this cascade is derived from https://github.com/mtschirs/js-objectdetect implementation + * @author Martin Tschirsich / http://www.tu-darmstadt.de/~m_t + */ +(function(global) { + global.frontalface = {complexClassifiers:[{simpleClassifiers:[{features:[[3,7,14,4,-1.],[3,9,14,2,2.]],threshold:4.0141958743333817e-003,right_val:0.8378106951713562,left_val:0.0337941907346249},{features:[[1,2,18,4,-1.],[7,2,6,4,3.]],threshold:0.0151513395830989,right_val:0.7488812208175659,left_val:0.1514132022857666},{features:[[1,7,15,9,-1.],[1,10,15,3,3.]],threshold:4.2109931819140911e-003,right_val:0.6374819874763489,left_val:0.0900492817163467}],threshold:0.8226894140243530},{simpleClassifiers:[{features:[[5,6,2,6,-1.],[5,9,2,3,2.]],threshold:1.6227109590545297e-003,right_val:0.7110946178436279,left_val:0.0693085864186287},{features:[[7,5,6,3,-1.],[9,5,2,3,3.]],threshold:2.2906649392098188e-003,right_val:0.6668692231178284,left_val:0.1795803010463715},{features:[[4,0,12,9,-1.],[4,3,12,3,3.]],threshold:5.0025708042085171e-003,right_val:0.6554006934165955,left_val:0.1693672984838486},{features:[[6,9,10,8,-1.],[6,13,10,4,2.]],threshold:7.9659894108772278e-003,right_val:0.0914145186543465,left_val:0.5866332054138184},{features:[[3,6,14,8,-1.],[3,10,14,4,2.]],threshold:-3.5227010957896709e-003,right_val:0.6031895875930786,left_val:0.1413166970014572},{features:[[14,1,6,10,-1.],[14,1,3,10,2.]],threshold:0.0366676896810532,right_val:0.7920318245887756,left_val:0.3675672113895416},{features:[[7,8,5,12,-1.],[7,12,5,4,3.]],threshold:9.3361474573612213e-003,right_val:0.2088509947061539,left_val:0.6161385774612427},{features:[[1,1,18,3,-1.],[7,1,6,3,3.]],threshold:8.6961314082145691e-003,right_val:0.6360273957252502,left_val:0.2836230993270874},{features:[[1,8,17,2,-1.],[1,9,17,1,2.]],threshold:1.1488880263641477e-003,right_val:0.5800700783729553,left_val:0.2223580926656723},{features:[[16,6,4,2,-1.],[16,7,4,1,2.]],threshold:-2.1484689787030220e-003,right_val:0.5787054896354675,left_val:0.2406464070081711},{features:[[5,17,2,2,-1.],[5,18,2,1,2.]],threshold:2.1219060290604830e-003,right_val:0.1362237036228180,left_val:0.5559654831886292},{features:[[14,2,6,12,-1.],[14,2,3,12,2.]],threshold:-0.0939491465687752,right_val:0.4717740118503571,left_val:0.8502737283706665},{features:[[4,0,4,12,-1.],[4,0,2,6,2.],[6,6,2,6,2.]],threshold:1.3777789426967502e-003,right_val:0.2834529876708984,left_val:0.5993673801422119},{features:[[2,11,18,8,-1.],[8,11,6,8,3.]],threshold:0.0730631574988365,right_val:0.7060034275054932,left_val:0.4341886043548584},{features:[[5,7,10,2,-1.],[5,8,10,1,2.]],threshold:3.6767389974556863e-004,right_val:0.6051574945449829,left_val:0.3027887940406799},{features:[[15,11,5,3,-1.],[15,12,5,1,3.]],threshold:-6.0479710809886456e-003,right_val:0.5675256848335266,left_val:0.1798433959484100}],threshold:6.9566087722778320},{simpleClassifiers:[{features:[[5,3,10,9,-1.],[5,6,10,3,3.]],threshold:-0.0165106896311045,right_val:0.1424857974052429,left_val:0.6644225120544434},{features:[[9,4,2,14,-1.],[9,11,2,7,2.]],threshold:2.7052499353885651e-003,right_val:0.1288477033376694,left_val:0.6325352191925049},{features:[[3,5,4,12,-1.],[3,9,4,4,3.]],threshold:2.8069869149476290e-003,right_val:0.6193193197250366,left_val:0.1240288019180298},{features:[[4,5,12,5,-1.],[8,5,4,5,3.]],threshold:-1.5402400167658925e-003,right_val:0.5670015811920166,left_val:0.1432143002748489},{features:[[5,6,10,8,-1.],[5,10,10,4,2.]],threshold:-5.6386279175058007e-004,right_val:0.5905207991600037,left_val:0.1657433062791824},{features:[[8,0,6,9,-1.],[8,3,6,3,3.]],threshold:1.9253729842603207e-003,right_val:0.5738824009895325,left_val:0.2695507109165192},{features:[[9,12,1,8,-1.],[9,16,1,4,2.]],threshold:-5.0214841030538082e-003,right_val:0.5782774090766907,left_val:0.1893538981676102},{features:[[0,7,20,6,-1.],[0,9,20,2,3.]],threshold:2.6365420781075954e-003,right_val:0.5695425868034363,left_val:0.2309329062700272},{features:[[7,0,6,17,-1.],[9,0,2,17,3.]],threshold:-1.5127769438549876e-003,right_val:0.5956642031669617,left_val:0.2759602069854736},{features:[[9,0,6,4,-1.],[11,0,2,4,3.]],threshold:-0.0101574398577213,right_val:0.5522047281265259,left_val:0.1732538044452667},{features:[[5,1,6,4,-1.],[7,1,2,4,3.]],threshold:-0.0119536602869630,right_val:0.5559014081954956,left_val:0.1339409947395325},{features:[[12,1,6,16,-1.],[14,1,2,16,3.]],threshold:4.8859491944313049e-003,right_val:0.6188849210739136,left_val:0.3628703951835632},{features:[[0,5,18,8,-1.],[0,5,9,4,2.],[9,9,9,4,2.]],threshold:-0.0801329165697098,right_val:0.5475944876670837,left_val:0.0912110507488251},{features:[[8,15,10,4,-1.],[13,15,5,2,2.],[8,17,5,2,2.]],threshold:1.0643280111253262e-003,right_val:0.5711399912834168,left_val:0.3715142905712128},{features:[[3,1,4,8,-1.],[3,1,2,4,2.],[5,5,2,4,2.]],threshold:-1.3419450260698795e-003,right_val:0.3318097889423370,left_val:0.5953313708305359},{features:[[3,6,14,10,-1.],[10,6,7,5,2.],[3,11,7,5,2.]],threshold:-0.0546011403203011,right_val:0.5602846145629883,left_val:0.1844065934419632},{features:[[2,1,6,16,-1.],[4,1,2,16,3.]],threshold:2.9071690514683723e-003,right_val:0.6131715178489685,left_val:0.3594244122505188},{features:[[0,18,20,2,-1.],[0,19,20,1,2.]],threshold:7.4718717951327562e-004,right_val:0.3459562957286835,left_val:0.5994353294372559},{features:[[8,13,4,3,-1.],[8,14,4,1,3.]],threshold:4.3013808317482471e-003,right_val:0.6990845203399658,left_val:0.4172652065753937},{features:[[9,14,2,3,-1.],[9,15,2,1,3.]],threshold:4.5017572119832039e-003,right_val:0.7801457047462463,left_val:0.4509715139865875},{features:[[0,12,9,6,-1.],[0,14,9,2,3.]],threshold:0.0241385009139776,right_val:0.1319826990365982,left_val:0.5438212752342224}],threshold:9.4985427856445313},{simpleClassifiers:[{features:[[5,7,3,4,-1.],[5,9,3,2,2.]],threshold:1.9212230108678341e-003,right_val:0.6199870705604553,left_val:0.1415266990661621},{features:[[9,3,2,16,-1.],[9,11,2,8,2.]],threshold:-1.2748669541906565e-004,right_val:0.1884928941726685,left_val:0.6191074252128601},{features:[[3,6,13,8,-1.],[3,10,13,4,2.]],threshold:5.1409931620582938e-004,right_val:0.5857927799224854,left_val:0.1487396955490112},{features:[[12,3,8,2,-1.],[12,3,4,2,2.]],threshold:4.1878609918057919e-003,right_val:0.6359239816665649,left_val:0.2746909856796265},{features:[[8,8,4,12,-1.],[8,12,4,4,3.]],threshold:5.1015717908740044e-003,right_val:0.2175628989934921,left_val:0.5870851278305054},{features:[[11,3,8,6,-1.],[15,3,4,3,2.],[11,6,4,3,2.]],threshold:-2.1448440384119749e-003,right_val:0.2979590892791748,left_val:0.5880944728851318},{features:[[7,1,6,19,-1.],[9,1,2,19,3.]],threshold:-2.8977119363844395e-003,right_val:0.5876647233963013,left_val:0.2373327016830444},{features:[[9,0,6,4,-1.],[11,0,2,4,3.]],threshold:-0.0216106791049242,right_val:0.5194202065467835,left_val:0.1220654994249344},{features:[[3,1,9,3,-1.],[6,1,3,3,3.]],threshold:-4.6299318782985210e-003,right_val:0.5817409157752991,left_val:0.2631230950355530},{features:[[8,15,10,4,-1.],[13,15,5,2,2.],[8,17,5,2,2.]],threshold:5.9393711853772402e-004,right_val:0.5698544979095459,left_val:0.3638620078563690},{features:[[0,3,6,10,-1.],[3,3,3,10,2.]],threshold:0.0538786612451077,right_val:0.7559366226196289,left_val:0.4303531050682068},{features:[[3,4,15,15,-1.],[3,9,15,5,3.]],threshold:1.8887349870055914e-003,right_val:0.5613427162170410,left_val:0.2122603058815002},{features:[[6,5,8,6,-1.],[6,7,8,2,3.]],threshold:-2.3635339457541704e-003,right_val:0.2642767131328583,left_val:0.5631849169731140},{features:[[4,4,12,10,-1.],[10,4,6,5,2.],[4,9,6,5,2.]],threshold:0.0240177996456623,right_val:0.2751705944538117,left_val:0.5797107815742493},{features:[[6,4,4,4,-1.],[8,4,2,4,2.]],threshold:2.0543030404951423e-004,right_val:0.5752568840980530,left_val:0.2705242037773132},{features:[[15,11,1,2,-1.],[15,12,1,1,2.]],threshold:8.4790197433903813e-004,right_val:0.2334876954555512,left_val:0.5435624718666077},{features:[[3,11,2,2,-1.],[3,12,2,1,2.]],threshold:1.4091329649090767e-003,right_val:0.2063155025243759,left_val:0.5319424867630005},{features:[[16,11,1,3,-1.],[16,12,1,1,3.]],threshold:1.4642629539594054e-003,right_val:0.3068861067295075,left_val:0.5418980717658997},{features:[[3,15,6,4,-1.],[3,15,3,2,2.],[6,17,3,2,2.]],threshold:1.6352549428120255e-003,right_val:0.6112868189811707,left_val:0.3695372939109802},{features:[[6,7,8,2,-1.],[6,8,8,1,2.]],threshold:8.3172752056270838e-004,right_val:0.6025236248970032,left_val:0.3565036952495575},{features:[[3,11,1,3,-1.],[3,12,1,1,3.]],threshold:-2.0998890977352858e-003,right_val:0.5362827181816101,left_val:0.1913982033729553},{features:[[6,0,12,2,-1.],[6,1,12,1,2.]],threshold:-7.4213981861248612e-004,right_val:0.5529310107231140,left_val:0.3835555016994476},{features:[[9,14,2,3,-1.],[9,15,2,1,3.]],threshold:3.2655049581080675e-003,right_val:0.7101895809173584,left_val:0.4312896132469177},{features:[[7,15,6,2,-1.],[7,16,6,1,2.]],threshold:8.9134991867467761e-004,right_val:0.6391963958740234,left_val:0.3984830975532532},{features:[[0,5,4,6,-1.],[0,7,4,2,3.]],threshold:-0.0152841797098517,right_val:0.5433713793754578,left_val:0.2366732954978943},{features:[[4,12,12,2,-1.],[8,12,4,2,3.]],threshold:4.8381411470472813e-003,right_val:0.3239189088344574,left_val:0.5817500948905945},{features:[[6,3,1,9,-1.],[6,6,1,3,3.]],threshold:-9.1093179071322083e-004,right_val:0.2911868989467621,left_val:0.5540593862533569},{features:[[10,17,3,2,-1.],[11,17,1,2,3.]],threshold:-6.1275060288608074e-003,right_val:0.5196629166603088,left_val:0.1775255054235458},{features:[[9,9,2,2,-1.],[9,10,2,1,2.]],threshold:-4.4576259097084403e-004,right_val:0.5533593893051148,left_val:0.3024170100688934},{features:[[7,6,6,4,-1.],[9,6,2,4,3.]],threshold:0.0226465407758951,right_val:0.6975377202033997,left_val:0.4414930939674377},{features:[[7,17,3,2,-1.],[8,17,1,2,3.]],threshold:-1.8804960418492556e-003,right_val:0.5497952103614807,left_val:0.2791394889354706},{features:[[10,17,3,3,-1.],[11,17,1,3,3.]],threshold:7.0889107882976532e-003,right_val:0.2385547012090683,left_val:0.5263199210166931},{features:[[8,12,3,2,-1.],[8,13,3,1,2.]],threshold:1.7318050377070904e-003,right_val:0.6983600854873657,left_val:0.4319379031658173},{features:[[9,3,6,2,-1.],[11,3,2,2,3.]],threshold:-6.8482700735330582e-003,right_val:0.5390920042991638,left_val:0.3082042932510376},{features:[[3,11,14,4,-1.],[3,13,14,2,2.]],threshold:-1.5062530110299122e-005,right_val:0.3120366036891937,left_val:0.5521922111511231},{features:[[1,10,18,4,-1.],[10,10,9,2,2.],[1,12,9,2,2.]],threshold:0.0294755697250366,right_val:0.1770603060722351,left_val:0.5401322841644287},{features:[[0,10,3,3,-1.],[0,11,3,1,3.]],threshold:8.1387329846620560e-003,right_val:0.1211019009351730,left_val:0.5178617835044861},{features:[[9,1,6,6,-1.],[11,1,2,6,3.]],threshold:0.0209429506212473,right_val:0.3311221897602081,left_val:0.5290294289588928},{features:[[8,7,3,6,-1.],[9,7,1,6,3.]],threshold:-9.5665529370307922e-003,right_val:0.4451968967914581,left_val:0.7471994161605835}],threshold:18.4129695892333980},{simpleClassifiers:[{features:[[1,0,18,9,-1.],[1,3,18,3,3.]],threshold:-2.8206960996612906e-004,right_val:0.6076732277870178,left_val:0.2064086049795151},{features:[[12,10,2,6,-1.],[12,13,2,3,2.]],threshold:1.6790600493550301e-003,right_val:0.1255383938550949,left_val:0.5851997137069702},{features:[[0,5,19,8,-1.],[0,9,19,4,2.]],threshold:6.9827912375330925e-004,right_val:0.5728961229324341,left_val:0.0940184295177460},{features:[[7,0,6,9,-1.],[9,0,2,9,3.]],threshold:7.8959012171253562e-004,right_val:0.5694308876991272,left_val:0.1781987994909287},{features:[[5,3,6,1,-1.],[7,3,2,1,3.]],threshold:-2.8560499195009470e-003,right_val:0.5788664817810059,left_val:0.1638399064540863},{features:[[11,3,6,1,-1.],[13,3,2,1,3.]],threshold:-3.8122469559311867e-003,right_val:0.5508564710617065,left_val:0.2085440009832382},{features:[[5,10,4,6,-1.],[5,13,4,3,2.]],threshold:1.5896620461717248e-003,right_val:0.1857215017080307,left_val:0.5702760815620422},{features:[[11,3,6,1,-1.],[13,3,2,1,3.]],threshold:0.0100783398374915,right_val:0.2189770042896271,left_val:0.5116943120956421},{features:[[4,4,12,6,-1.],[4,6,12,2,3.]],threshold:-0.0635263025760651,right_val:0.4043813049793243,left_val:0.7131379842758179},{features:[[15,12,2,6,-1.],[15,14,2,2,3.]],threshold:-9.1031491756439209e-003,right_val:0.5463973283767700,left_val:0.2567181885242462},{features:[[9,3,2,2,-1.],[10,3,1,2,2.]],threshold:-2.4035000242292881e-003,right_val:0.5590974092483521,left_val:0.1700665950775147},{features:[[9,3,3,1,-1.],[10,3,1,1,3.]],threshold:1.5226360410451889e-003,right_val:0.2619054019451141,left_val:0.5410556793212891},{features:[[1,1,4,14,-1.],[3,1,2,14,2.]],threshold:0.0179974399507046,right_val:0.6535220742225647,left_val:0.3732436895370483},{features:[[9,0,4,4,-1.],[11,0,2,2,2.],[9,2,2,2,2.]],threshold:-6.4538191072642803e-003,right_val:0.5537446141242981,left_val:0.2626481950283051},{features:[[7,5,1,14,-1.],[7,12,1,7,2.]],threshold:-0.0118807600811124,right_val:0.5544745922088623,left_val:0.2003753930330277},{features:[[19,0,1,4,-1.],[19,2,1,2,2.]],threshold:1.2713660253211856e-003,right_val:0.3031975924968720,left_val:0.5591902732849121},{features:[[5,5,6,4,-1.],[8,5,3,4,2.]],threshold:1.1376109905540943e-003,right_val:0.5646508932113648,left_val:0.2730407118797302},{features:[[9,18,3,2,-1.],[10,18,1,2,3.]],threshold:-4.2651998810470104e-003,right_val:0.5461820960044861,left_val:0.1405909061431885},{features:[[8,18,3,2,-1.],[9,18,1,2,3.]],threshold:-2.9602861031889915e-003,right_val:0.5459290146827698,left_val:0.1795035004615784},{features:[[4,5,12,6,-1.],[4,7,12,2,3.]],threshold:-8.8448226451873779e-003,right_val:0.2809219956398010,left_val:0.5736783146858215},{features:[[3,12,2,6,-1.],[3,14,2,2,3.]],threshold:-6.6430689767003059e-003,right_val:0.5503826141357422,left_val:0.2370675951242447},{features:[[10,8,2,12,-1.],[10,12,2,4,3.]],threshold:3.9997808635234833e-003,right_val:0.3304282128810883,left_val:0.5608199834823608},{features:[[7,18,3,2,-1.],[8,18,1,2,3.]],threshold:-4.1221720166504383e-003,right_val:0.5378993153572083,left_val:0.1640105992555618},{features:[[9,0,6,2,-1.],[11,0,2,2,3.]],threshold:0.0156249096617103,right_val:0.2288603931665421,left_val:0.5227649211883545},{features:[[5,11,9,3,-1.],[5,12,9,1,3.]],threshold:-0.0103564197197557,right_val:0.4252927899360657,left_val:0.7016193866729736},{features:[[9,0,6,2,-1.],[11,0,2,2,3.]],threshold:-8.7960809469223022e-003,right_val:0.5355830192565918,left_val:0.2767347097396851},{features:[[1,1,18,5,-1.],[7,1,6,5,3.]],threshold:0.1622693985700607,right_val:0.7442579269409180,left_val:0.4342240095138550},{features:[[8,0,4,4,-1.],[10,0,2,2,2.],[8,2,2,2,2.]],threshold:4.5542530715465546e-003,right_val:0.2582125067710877,left_val:0.5726485848426819},{features:[[3,12,1,3,-1.],[3,13,1,1,3.]],threshold:-2.1309209987521172e-003,right_val:0.5361018776893616,left_val:0.2106848061084747},{features:[[8,14,5,3,-1.],[8,15,5,1,3.]],threshold:-0.0132084200158715,right_val:0.4552468061447144,left_val:0.7593790888786316},{features:[[5,4,10,12,-1.],[5,4,5,6,2.],[10,10,5,6,2.]],threshold:-0.0659966766834259,right_val:0.5344039797782898,left_val:0.1252475976943970},{features:[[9,6,9,12,-1.],[9,10,9,4,3.]],threshold:7.9142656177282333e-003,right_val:0.5601043105125427,left_val:0.3315384089946747},{features:[[2,2,12,14,-1.],[2,2,6,7,2.],[8,9,6,7,2.]],threshold:0.0208942797034979,right_val:0.2768838107585907,left_val:0.5506049990653992}],threshold:15.3241395950317380},{simpleClassifiers:[{features:[[4,7,12,2,-1.],[8,7,4,2,3.]],threshold:1.1961159761995077e-003,right_val:0.6156241297721863,left_val:0.1762690991163254},{features:[[7,4,6,4,-1.],[7,6,6,2,2.]],threshold:-1.8679830245673656e-003,right_val:0.1832399964332581,left_val:0.6118106842041016},{features:[[4,5,11,8,-1.],[4,9,11,4,2.]],threshold:-1.9579799845814705e-004,right_val:0.5723816156387329,left_val:0.0990442633628845},{features:[[3,10,16,4,-1.],[3,12,16,2,2.]],threshold:-8.0255657667294145e-004,right_val:0.2377282977104187,left_val:0.5579879879951477},{features:[[0,0,16,2,-1.],[0,1,16,1,2.]],threshold:-2.4510810617357492e-003,right_val:0.5858935117721558,left_val:0.2231457978487015},{features:[[7,5,6,2,-1.],[9,5,2,2,3.]],threshold:5.0361850298941135e-004,right_val:0.5794103741645813,left_val:0.2653993964195252},{features:[[3,2,6,10,-1.],[3,2,3,5,2.],[6,7,3,5,2.]],threshold:4.0293349884450436e-003,right_val:0.2484865039587021,left_val:0.5803827047348023},{features:[[10,5,8,15,-1.],[10,10,8,5,3.]],threshold:-0.0144517095759511,right_val:0.5484204888343811,left_val:0.1830351948738098},{features:[[3,14,8,6,-1.],[3,14,4,3,2.],[7,17,4,3,2.]],threshold:2.0380979403853416e-003,right_val:0.6051092743873596,left_val:0.3363558948040009},{features:[[14,2,2,2,-1.],[14,3,2,1,2.]],threshold:-1.6155190533027053e-003,right_val:0.5441246032714844,left_val:0.2286642044782639},{features:[[1,10,7,6,-1.],[1,13,7,3,2.]],threshold:3.3458340913057327e-003,right_val:0.2392338067293167,left_val:0.5625913143157959},{features:[[15,4,4,3,-1.],[15,4,2,3,2.]],threshold:1.6379579901695251e-003,right_val:0.5964621901512146,left_val:0.3906993865966797},{features:[[2,9,14,6,-1.],[2,9,7,3,2.],[9,12,7,3,2.]],threshold:0.0302512105554342,right_val:0.1575746983289719,left_val:0.5248482227325440},{features:[[5,7,10,4,-1.],[5,9,10,2,2.]],threshold:0.0372519902884960,right_val:0.6748418807983398,left_val:0.4194310903549194},{features:[[6,9,8,8,-1.],[6,9,4,4,2.],[10,13,4,4,2.]],threshold:-0.0251097902655602,right_val:0.5473451018333435,left_val:0.1882549971342087},{features:[[14,1,3,2,-1.],[14,2,3,1,2.]],threshold:-5.3099058568477631e-003,right_val:0.5227110981941223,left_val:0.1339973062276840},{features:[[1,4,4,2,-1.],[3,4,2,2,2.]],threshold:1.2086479691788554e-003,right_val:0.6109635829925537,left_val:0.3762088119983673},{features:[[11,10,2,8,-1.],[11,14,2,4,2.]],threshold:-0.0219076797366142,right_val:0.5404006838798523,left_val:0.2663142979145050},{features:[[0,0,5,3,-1.],[0,1,5,1,3.]],threshold:5.4116579703986645e-003,right_val:0.2232273072004318,left_val:0.5363578796386719},{features:[[2,5,18,8,-1.],[11,5,9,4,2.],[2,9,9,4,2.]],threshold:0.0699463263154030,right_val:0.2453698068857193,left_val:0.5358232855796814},{features:[[6,6,1,6,-1.],[6,9,1,3,2.]],threshold:3.4520021290518343e-004,right_val:0.5376930236816406,left_val:0.2409671992063522},{features:[[19,1,1,3,-1.],[19,2,1,1,3.]],threshold:1.2627709656953812e-003,right_val:0.3155693113803864,left_val:0.5425856709480286},{features:[[7,6,6,6,-1.],[9,6,2,6,3.]],threshold:0.0227195098996162,right_val:0.6597865223884583,left_val:0.4158405959606171},{features:[[19,1,1,3,-1.],[19,2,1,1,3.]],threshold:-1.8111000536009669e-003,right_val:0.5505244731903076,left_val:0.2811253070831299},{features:[[3,13,2,3,-1.],[3,14,2,1,3.]],threshold:3.3469670452177525e-003,right_val:0.1891465038061142,left_val:0.5260028243064880},{features:[[8,4,8,12,-1.],[12,4,4,6,2.],[8,10,4,6,2.]],threshold:4.0791751234792173e-004,right_val:0.3344210088253021,left_val:0.5673509240150452},{features:[[5,2,6,3,-1.],[7,2,2,3,3.]],threshold:0.0127347996458411,right_val:0.2395612001419067,left_val:0.5343592166900635},{features:[[6,1,9,10,-1.],[6,6,9,5,2.]],threshold:-7.3119727894663811e-003,right_val:0.4022207856178284,left_val:0.6010890007019043},{features:[[0,4,6,12,-1.],[2,4,2,12,3.]],threshold:-0.0569487512111664,right_val:0.4543190896511078,left_val:0.8199151158332825},{features:[[15,13,2,3,-1.],[15,14,2,1,3.]],threshold:-5.0116591155529022e-003,right_val:0.5357710719108582,left_val:0.2200281023979187},{features:[[7,14,5,3,-1.],[7,15,5,1,3.]],threshold:6.0334368608891964e-003,right_val:0.7181751132011414,left_val:0.4413081109523773},{features:[[15,13,3,3,-1.],[15,14,3,1,3.]],threshold:3.9437441155314445e-003,right_val:0.2791733145713806,left_val:0.5478860735893250},{features:[[6,14,8,3,-1.],[6,15,8,1,3.]],threshold:-3.6591119132936001e-003,right_val:0.3989723920822144,left_val:0.6357867717742920},{features:[[15,13,3,3,-1.],[15,14,3,1,3.]],threshold:-3.8456181064248085e-003,right_val:0.5300664901733398,left_val:0.3493686020374298},{features:[[2,13,3,3,-1.],[2,14,3,1,3.]],threshold:-7.1926261298358440e-003,right_val:0.5229672789573669,left_val:0.1119614988565445},{features:[[4,7,12,12,-1.],[10,7,6,6,2.],[4,13,6,6,2.]],threshold:-0.0527989417314529,right_val:0.5453451275825501,left_val:0.2387102991342545},{features:[[9,7,2,6,-1.],[10,7,1,6,2.]],threshold:-7.9537667334079742e-003,right_val:0.4439376890659332,left_val:0.7586917877197266},{features:[[8,9,5,2,-1.],[8,10,5,1,2.]],threshold:-2.7344180271029472e-003,right_val:0.5489321947097778,left_val:0.2565476894378662},{features:[[8,6,3,4,-1.],[9,6,1,4,3.]],threshold:-1.8507939530536532e-003,right_val:0.4252474904060364,left_val:0.6734347939491272},{features:[[9,6,2,8,-1.],[9,10,2,4,2.]],threshold:0.0159189198166132,right_val:0.2292661964893341,left_val:0.5488352775573731},{features:[[7,7,3,6,-1.],[8,7,1,6,3.]],threshold:-1.2687679845839739e-003,right_val:0.4022389948368073,left_val:0.6104331016540527},{features:[[11,3,3,3,-1.],[12,3,1,3,3.]],threshold:6.2883910723030567e-003,right_val:0.1536193042993546,left_val:0.5310853123664856},{features:[[5,4,6,1,-1.],[7,4,2,1,3.]],threshold:-6.2259892001748085e-003,right_val:0.5241606235504150,left_val:0.1729111969470978},{features:[[5,6,10,3,-1.],[5,7,10,1,3.]],threshold:-0.0121325999498367,right_val:0.4325182139873505,left_val:0.6597759723663330}],threshold:21.0106391906738280},{simpleClassifiers:[{features:[[7,3,6,9,-1.],[7,6,6,3,3.]],threshold:-3.9184908382594585e-003,right_val:0.1469330936670303,left_val:0.6103435158729553},{features:[[6,7,9,1,-1.],[9,7,3,1,3.]],threshold:1.5971299726516008e-003,right_val:0.5896466970443726,left_val:0.2632363140583038},{features:[[2,8,16,8,-1.],[2,12,16,4,2.]],threshold:0.0177801102399826,right_val:0.1760361939668655,left_val:0.5872874259948731},{features:[[14,6,2,6,-1.],[14,9,2,3,2.]],threshold:6.5334769897162914e-004,right_val:0.5596066117286682,left_val:0.1567801982164383},{features:[[1,5,6,15,-1.],[1,10,6,5,3.]],threshold:-2.8353091329336166e-004,right_val:0.5732036232948303,left_val:0.1913153976202011},{features:[[10,0,6,9,-1.],[10,3,6,3,3.]],threshold:1.6104689566418529e-003,right_val:0.5623080730438232,left_val:0.2914913892745972},{features:[[6,6,7,14,-1.],[6,13,7,7,2.]],threshold:-0.0977506190538406,right_val:0.5648233294487000,left_val:0.1943476945161820},{features:[[13,7,3,6,-1.],[13,9,3,2,3.]],threshold:5.5182358482852578e-004,right_val:0.5504639744758606,left_val:0.3134616911411285},{features:[[1,8,15,4,-1.],[6,8,5,4,3.]],threshold:-0.0128582203760743,right_val:0.5760142803192139,left_val:0.2536481916904450},{features:[[11,2,3,10,-1.],[11,7,3,5,2.]],threshold:4.1530239395797253e-003,right_val:0.3659774065017700,left_val:0.5767722129821777},{features:[[3,7,4,6,-1.],[3,9,4,2,3.]],threshold:1.7092459602281451e-003,right_val:0.5918939113616943,left_val:0.2843191027641296},{features:[[13,3,6,10,-1.],[15,3,2,10,3.]],threshold:7.5217359699308872e-003,right_val:0.6183109283447266,left_val:0.4052427113056183},{features:[[5,7,8,10,-1.],[5,7,4,5,2.],[9,12,4,5,2.]],threshold:2.2479810286313295e-003,right_val:0.3135401010513306,left_val:0.5783755183219910},{features:[[4,4,12,12,-1.],[10,4,6,6,2.],[4,10,6,6,2.]],threshold:0.0520062111318111,right_val:0.1916636973619461,left_val:0.5541312098503113},{features:[[1,4,6,9,-1.],[3,4,2,9,3.]],threshold:0.0120855299755931,right_val:0.6644591093063355,left_val:0.4032655954360962},{features:[[11,3,2,5,-1.],[11,3,1,5,2.]],threshold:1.4687820112158079e-005,right_val:0.5709382891654968,left_val:0.3535977900028229},{features:[[7,3,2,5,-1.],[8,3,1,5,2.]],threshold:7.1395188570022583e-006,right_val:0.5610269904136658,left_val:0.3037444949150085},{features:[[10,14,2,3,-1.],[10,15,2,1,3.]],threshold:-4.6001640148460865e-003,right_val:0.4580326080322266,left_val:0.7181087136268616},{features:[[5,12,6,2,-1.],[8,12,3,2,2.]],threshold:2.0058949012309313e-003,right_val:0.2953684031963348,left_val:0.5621951818466187},{features:[[9,14,2,3,-1.],[9,15,2,1,3.]],threshold:4.5050270855426788e-003,right_val:0.7619017958641052,left_val:0.4615387916564941},{features:[[4,11,12,6,-1.],[4,14,12,3,2.]],threshold:0.0117468303069472,right_val:0.1772529035806656,left_val:0.5343837141990662},{features:[[11,11,5,9,-1.],[11,14,5,3,3.]],threshold:-0.0583163388073444,right_val:0.5340772271156311,left_val:0.1686245948076248},{features:[[6,15,3,2,-1.],[6,16,3,1,2.]],threshold:2.3629379575140774e-004,right_val:0.6026803851127625,left_val:0.3792056143283844},{features:[[11,0,3,5,-1.],[12,0,1,5,3.]],threshold:-7.8156180679798126e-003,right_val:0.5324323773384094,left_val:0.1512867063283920},{features:[[5,5,6,7,-1.],[8,5,3,7,2.]],threshold:-0.0108761601150036,right_val:0.5319945216178894,left_val:0.2081822007894516},{features:[[13,0,1,9,-1.],[13,3,1,3,3.]],threshold:-2.7745519764721394e-003,right_val:0.5210328102111816,left_val:0.4098246991634369},{features:[[3,2,4,8,-1.],[3,2,2,4,2.],[5,6,2,4,2.]],threshold:-7.8276381827890873e-004,right_val:0.3478842079639435,left_val:0.5693274140357971},{features:[[13,12,4,6,-1.],[13,14,4,2,3.]],threshold:0.0138704096898437,right_val:0.2257698029279709,left_val:0.5326750874519348},{features:[[3,12,4,6,-1.],[3,14,4,2,3.]],threshold:-0.0236749108880758,right_val:0.5200707912445068,left_val:0.1551305055618286},{features:[[13,11,3,4,-1.],[13,13,3,2,2.]],threshold:-1.4879409718560055e-005,right_val:0.3820176124572754,left_val:0.5500566959381104},{features:[[4,4,4,3,-1.],[4,5,4,1,3.]],threshold:3.6190641112625599e-003,right_val:0.6639748215675354,left_val:0.4238683879375458},{features:[[7,5,11,8,-1.],[7,9,11,4,2.]],threshold:-0.0198171101510525,right_val:0.5382357835769653,left_val:0.2150038033723831},{features:[[7,8,3,4,-1.],[8,8,1,4,3.]],threshold:-3.8154039066284895e-003,right_val:0.4215297102928162,left_val:0.6675711274147034},{features:[[9,1,6,1,-1.],[11,1,2,1,3.]],threshold:-4.9775829538702965e-003,right_val:0.5386328101158142,left_val:0.2267289012670517},{features:[[5,5,3,3,-1.],[5,6,3,1,3.]],threshold:2.2441020701080561e-003,right_val:0.6855735778808594,left_val:0.4308691024780273},{features:[[0,9,20,6,-1.],[10,9,10,3,2.],[0,12,10,3,2.]],threshold:0.0122824599966407,right_val:0.3467479050159454,left_val:0.5836614966392517},{features:[[8,6,3,5,-1.],[9,6,1,5,3.]],threshold:-2.8548699337989092e-003,right_val:0.4311453998088837,left_val:0.7016944885253906},{features:[[11,0,1,3,-1.],[11,1,1,1,3.]],threshold:-3.7875669077038765e-003,right_val:0.5224946141242981,left_val:0.2895345091819763},{features:[[4,2,4,2,-1.],[4,3,4,1,2.]],threshold:-1.2201230274513364e-003,right_val:0.5481644868850708,left_val:0.2975570857524872},{features:[[12,6,4,3,-1.],[12,7,4,1,3.]],threshold:0.0101605998352170,right_val:0.8182697892189026,left_val:0.4888817965984345},{features:[[5,0,6,4,-1.],[7,0,2,4,3.]],threshold:-0.0161745697259903,right_val:0.5239992737770081,left_val:0.1481492966413498},{features:[[9,7,3,8,-1.],[10,7,1,8,3.]],threshold:0.0192924607545137,right_val:0.7378190755844116,left_val:0.4786309897899628},{features:[[9,7,2,2,-1.],[10,7,1,2,2.]],threshold:-3.2479539513587952e-003,right_val:0.4470643997192383,left_val:0.7374222874641419},{features:[[6,7,14,4,-1.],[13,7,7,2,2.],[6,9,7,2,2.]],threshold:-9.3803480267524719e-003,right_val:0.5537996292114258,left_val:0.3489154875278473},{features:[[0,5,3,6,-1.],[0,7,3,2,3.]],threshold:-0.0126061299815774,right_val:0.5315443277359009,left_val:0.2379686981439591},{features:[[13,11,3,4,-1.],[13,13,3,2,2.]],threshold:-0.0256219301372766,right_val:0.5138769745826721,left_val:0.1964688003063202},{features:[[4,11,3,4,-1.],[4,13,3,2,2.]],threshold:-7.5741496402770281e-005,right_val:0.3365853130817413,left_val:0.5590522885322571},{features:[[5,9,12,8,-1.],[11,9,6,4,2.],[5,13,6,4,2.]],threshold:-0.0892108827829361,right_val:0.5162634849548340,left_val:0.0634046569466591},{features:[[9,12,1,3,-1.],[9,13,1,1,3.]],threshold:-2.7670480776578188e-003,right_val:0.4490706026554108,left_val:0.7323467731475830},{features:[[10,15,2,4,-1.],[10,17,2,2,2.]],threshold:2.7152578695677221e-004,right_val:0.5985518097877502,left_val:0.4114834964275360}],threshold:23.9187908172607420},{simpleClassifiers:[{features:[[7,7,6,1,-1.],[9,7,2,1,3.]],threshold:1.4786219689995050e-003,right_val:0.6643316745758057,left_val:0.2663545012474060},{features:[[12,3,6,6,-1.],[15,3,3,3,2.],[12,6,3,3,2.]],threshold:-1.8741659587249160e-003,right_val:0.2518512904644013,left_val:0.6143848896026611},{features:[[0,4,10,6,-1.],[0,6,10,2,3.]],threshold:-1.7151009524241090e-003,right_val:0.2397463023662567,left_val:0.5766341090202332},{features:[[8,3,8,14,-1.],[12,3,4,7,2.],[8,10,4,7,2.]],threshold:-1.8939269939437509e-003,right_val:0.2529144883155823,left_val:0.5682045817375183},{features:[[4,4,7,15,-1.],[4,9,7,5,3.]],threshold:-5.3006052039563656e-003,right_val:0.5556079745292664,left_val:0.1640675961971283},{features:[[12,2,6,8,-1.],[15,2,3,4,2.],[12,6,3,4,2.]],threshold:-0.0466625317931175,right_val:0.4762830138206482,left_val:0.6123154163360596},{features:[[2,2,6,8,-1.],[2,2,3,4,2.],[5,6,3,4,2.]],threshold:-7.9431332414969802e-004,right_val:0.2839404046535492,left_val:0.5707858800888062},{features:[[2,13,18,7,-1.],[8,13,6,7,3.]],threshold:0.0148916700854898,right_val:0.6006367206573486,left_val:0.4089672863483429},{features:[[4,3,8,14,-1.],[4,3,4,7,2.],[8,10,4,7,2.]],threshold:-1.2046529445797205e-003,right_val:0.2705289125442505,left_val:0.5712450742721558},{features:[[18,1,2,6,-1.],[18,3,2,2,3.]],threshold:6.0619381256401539e-003,right_val:0.3262225985527039,left_val:0.5262504220008850},{features:[[9,11,2,3,-1.],[9,12,2,1,3.]],threshold:-2.5286648888140917e-003,right_val:0.4199256896972656,left_val:0.6853830814361572},{features:[[18,1,2,6,-1.],[18,3,2,2,3.]],threshold:-5.9010218828916550e-003,right_val:0.5434812903404236,left_val:0.3266282081604004},{features:[[0,1,2,6,-1.],[0,3,2,2,3.]],threshold:5.6702760048210621e-003,right_val:0.2319003939628601,left_val:0.5468410849571228},{features:[[1,5,18,6,-1.],[1,7,18,2,3.]],threshold:-3.0304100364446640e-003,right_val:0.2708238065242767,left_val:0.5570667982101440},{features:[[0,2,6,7,-1.],[3,2,3,7,2.]],threshold:2.9803649522364140e-003,right_val:0.5890625715255737,left_val:0.3700568974018097},{features:[[7,3,6,14,-1.],[7,10,6,7,2.]],threshold:-0.0758405104279518,right_val:0.5419948101043701,left_val:0.2140070050954819},{features:[[3,7,13,10,-1.],[3,12,13,5,2.]],threshold:0.0192625392228365,right_val:0.2726590037345886,left_val:0.5526772141456604},{features:[[11,15,2,2,-1.],[11,16,2,1,2.]],threshold:1.8888259364757687e-004,right_val:0.6017209887504578,left_val:0.3958011865615845},{features:[[2,11,16,4,-1.],[2,11,8,2,2.],[10,13,8,2,2.]],threshold:0.0293695498257875,right_val:0.1435758024454117,left_val:0.5241373777389526},{features:[[13,7,6,4,-1.],[16,7,3,2,2.],[13,9,3,2,2.]],threshold:1.0417619487270713e-003,right_val:0.5929983258247376,left_val:0.3385409116744995},{features:[[6,10,3,9,-1.],[6,13,3,3,3.]],threshold:2.6125640142709017e-003,right_val:0.3021597862243652,left_val:0.5485377907752991},{features:[[14,6,1,6,-1.],[14,9,1,3,2.]],threshold:9.6977467183023691e-004,right_val:0.5532032847404480,left_val:0.3375276029109955},{features:[[5,10,4,1,-1.],[7,10,2,1,2.]],threshold:5.9512659208849072e-004,right_val:0.3359399139881134,left_val:0.5631743073463440},{features:[[3,8,15,5,-1.],[8,8,5,5,3.]],threshold:-0.1015655994415283,right_val:0.5230425000190735,left_val:0.0637350380420685},{features:[[1,6,5,4,-1.],[1,8,5,2,2.]],threshold:0.0361566990613937,right_val:0.1029528975486755,left_val:0.5136963129043579},{features:[[3,1,17,6,-1.],[3,3,17,2,3.]],threshold:3.4624140243977308e-003,right_val:0.5558289289474487,left_val:0.3879320025444031},{features:[[6,7,8,2,-1.],[10,7,4,2,2.]],threshold:0.0195549800992012,right_val:0.1875859946012497,left_val:0.5250086784362793},{features:[[9,7,3,2,-1.],[10,7,1,2,3.]],threshold:-2.3121440317481756e-003,right_val:0.4679641127586365,left_val:0.6672028899192810},{features:[[8,7,3,2,-1.],[9,7,1,2,3.]],threshold:-1.8605289515107870e-003,right_val:0.4334670901298523,left_val:0.7163379192352295},{features:[[8,9,4,2,-1.],[8,10,4,1,2.]],threshold:-9.4026362057775259e-004,right_val:0.5650203227996826,left_val:0.3021360933780670},{features:[[8,8,4,3,-1.],[8,9,4,1,3.]],threshold:-5.2418331615626812e-003,right_val:0.5250256061553955,left_val:0.1820009052753449},{features:[[9,5,6,4,-1.],[9,5,3,4,2.]],threshold:1.1729019752237946e-004,right_val:0.5445973277091980,left_val:0.3389188051223755},{features:[[8,13,4,3,-1.],[8,14,4,1,3.]],threshold:1.1878840159624815e-003,right_val:0.6253563165664673,left_val:0.4085349142551422},{features:[[4,7,12,6,-1.],[10,7,6,3,2.],[4,10,6,3,2.]],threshold:-0.0108813596889377,right_val:0.5700082778930664,left_val:0.3378399014472961},{features:[[8,14,4,3,-1.],[8,15,4,1,3.]],threshold:1.7354859737679362e-003,right_val:0.6523038744926453,left_val:0.4204635918140411},{features:[[9,7,3,3,-1.],[9,8,3,1,3.]],threshold:-6.5119052305817604e-003,right_val:0.5428143739700317,left_val:0.2595216035842896},{features:[[7,4,3,8,-1.],[8,4,1,8,3.]],threshold:-1.2136430013924837e-003,right_val:0.3977893888950348,left_val:0.6165143847465515},{features:[[10,0,3,6,-1.],[11,0,1,6,3.]],threshold:-0.0103542404249310,right_val:0.5219504833221436,left_val:0.1628028005361557},{features:[[6,3,4,8,-1.],[8,3,2,8,2.]],threshold:5.5858830455690622e-004,right_val:0.5503574013710022,left_val:0.3199650943279266},{features:[[14,3,6,13,-1.],[14,3,3,13,2.]],threshold:0.0152996499091387,right_val:0.6122388243675232,left_val:0.4103994071483612},{features:[[8,13,3,6,-1.],[8,16,3,3,2.]],threshold:-0.0215882100164890,right_val:0.5197384953498840,left_val:0.1034912988543510},{features:[[14,3,6,13,-1.],[14,3,3,13,2.]],threshold:-0.1283462941646576,right_val:0.4893102943897247,left_val:0.8493865132331848},{features:[[0,7,10,4,-1.],[0,7,5,2,2.],[5,9,5,2,2.]],threshold:-2.2927189711481333e-003,right_val:0.5471575260162354,left_val:0.3130157887935638},{features:[[14,3,6,13,-1.],[14,3,3,13,2.]],threshold:0.0799151062965393,right_val:0.6073989272117615,left_val:0.4856320917606354},{features:[[0,3,6,13,-1.],[3,3,3,13,2.]],threshold:-0.0794410929083824,right_val:0.4624533057212830,left_val:0.8394674062728882},{features:[[9,1,4,1,-1.],[9,1,2,1,2.]],threshold:-5.2800010889768600e-003,right_val:0.5306698083877564,left_val:0.1881695985794067},{features:[[8,0,2,1,-1.],[9,0,1,1,2.]],threshold:1.0463109938427806e-003,right_val:0.2583065927028656,left_val:0.5271229147911072},{features:[[10,16,4,4,-1.],[12,16,2,2,2.],[10,18,2,2,2.]],threshold:2.6317298761568964e-004,right_val:0.5735440850257874,left_val:0.4235304892063141},{features:[[9,6,2,3,-1.],[10,6,1,3,2.]],threshold:-3.6173160187900066e-003,right_val:0.4495444893836975,left_val:0.6934396028518677},{features:[[4,5,12,2,-1.],[8,5,4,2,3.]],threshold:0.0114218797534704,right_val:0.4138193130493164,left_val:0.5900921225547791},{features:[[8,7,3,5,-1.],[9,7,1,5,3.]],threshold:-1.9963278900831938e-003,right_val:0.4327239990234375,left_val:0.6466382741928101}],threshold:24.5278797149658200},{simpleClassifiers:[{features:[[6,4,8,6,-1.],[6,6,8,2,3.]],threshold:-9.9691245704889297e-003,right_val:0.2482212036848068,left_val:0.6142324209213257},{features:[[9,5,2,12,-1.],[9,11,2,6,2.]],threshold:7.3073059320449829e-004,right_val:0.2321965992450714,left_val:0.5704951882362366},{features:[[4,6,6,8,-1.],[4,10,6,4,2.]],threshold:6.4045301405712962e-004,right_val:0.5814933180809021,left_val:0.2112251967191696},{features:[[12,2,8,5,-1.],[12,2,4,5,2.]],threshold:4.5424019917845726e-003,right_val:0.5866311788558960,left_val:0.2950482070446014},{features:[[0,8,18,3,-1.],[0,9,18,1,3.]],threshold:9.2477443104144186e-005,right_val:0.5791326761245728,left_val:0.2990990877151489},{features:[[8,12,4,8,-1.],[8,16,4,4,2.]],threshold:-8.6603146046400070e-003,right_val:0.5635542273521423,left_val:0.2813029885292053},{features:[[0,2,8,5,-1.],[4,2,4,5,2.]],threshold:8.0515816807746887e-003,right_val:0.6054757237434387,left_val:0.3535369038581848},{features:[[13,11,3,4,-1.],[13,13,3,2,2.]],threshold:4.3835240649059415e-004,right_val:0.2731510996818543,left_val:0.5596532225608826},{features:[[5,11,6,1,-1.],[7,11,2,1,3.]],threshold:-9.8168973636347800e-005,right_val:0.3638561069965363,left_val:0.5978031754493713},{features:[[11,3,3,1,-1.],[12,3,1,1,3.]],threshold:-1.1298790341243148e-003,right_val:0.5432729125022888,left_val:0.2755252122879028},{features:[[7,13,5,3,-1.],[7,14,5,1,3.]],threshold:6.4356150105595589e-003,right_val:0.7069833278656006,left_val:0.4305641949176788},{features:[[11,11,7,6,-1.],[11,14,7,3,2.]],threshold:-0.0568293295800686,right_val:0.5294997096061707,left_val:0.2495242953300476},{features:[[2,11,7,6,-1.],[2,14,7,3,2.]],threshold:4.0668169967830181e-003,right_val:0.2497723996639252,left_val:0.5478553175926209},{features:[[12,14,2,6,-1.],[12,16,2,2,3.]],threshold:4.8164798499783501e-005,right_val:0.5706356167793274,left_val:0.3938601016998291},{features:[[8,14,3,3,-1.],[8,15,3,1,3.]],threshold:6.1795017682015896e-003,right_val:0.7394766807556152,left_val:0.4407606124877930},{features:[[11,0,3,5,-1.],[12,0,1,5,3.]],threshold:6.4985752105712891e-003,right_val:0.2479152977466583,left_val:0.5445243120193481},{features:[[6,1,4,9,-1.],[8,1,2,9,2.]],threshold:-1.0211090557277203e-003,right_val:0.5338971018791199,left_val:0.2544766962528229},{features:[[10,3,6,1,-1.],[12,3,2,1,3.]],threshold:-5.4247528314590454e-003,right_val:0.5324069261550903,left_val:0.2718858122825623},{features:[[8,8,3,4,-1.],[8,10,3,2,2.]],threshold:-1.0559899965301156e-003,right_val:0.5534508824348450,left_val:0.3178288042545319},{features:[[8,12,4,2,-1.],[8,13,4,1,2.]],threshold:6.6465808777138591e-004,right_val:0.6558194160461426,left_val:0.4284219145774841},{features:[[5,18,4,2,-1.],[5,19,4,1,2.]],threshold:-2.7524109464138746e-004,right_val:0.3810262978076935,left_val:0.5902860760688782},{features:[[2,1,18,6,-1.],[2,3,18,2,3.]],threshold:4.2293202131986618e-003,right_val:0.5709385871887207,left_val:0.3816489875316620},{features:[[6,0,3,2,-1.],[7,0,1,2,3.]],threshold:-3.2868210691958666e-003,right_val:0.5259544253349304,left_val:0.1747743934392929},{features:[[13,8,6,2,-1.],[16,8,3,1,2.],[13,9,3,1,2.]],threshold:1.5611879643984139e-004,right_val:0.5725612044334412,left_val:0.3601722121238709},{features:[[6,10,3,6,-1.],[6,13,3,3,2.]],threshold:-7.3621381488919724e-006,right_val:0.3044497072696686,left_val:0.5401858091354370},{features:[[0,13,20,4,-1.],[10,13,10,2,2.],[0,15,10,2,2.]],threshold:-0.0147672500461340,right_val:0.5573434829711914,left_val:0.3220770061016083},{features:[[7,7,6,5,-1.],[9,7,2,5,3.]],threshold:0.0244895908981562,right_val:0.6518812775611877,left_val:0.4301528036594391},{features:[[11,0,2,2,-1.],[11,1,2,1,2.]],threshold:-3.7652091123163700e-004,right_val:0.5598236918449402,left_val:0.3564583063125610},{features:[[1,8,6,2,-1.],[1,8,3,1,2.],[4,9,3,1,2.]],threshold:7.3657688517414499e-006,right_val:0.5561897754669190,left_val:0.3490782976150513},{features:[[0,2,20,2,-1.],[10,2,10,1,2.],[0,3,10,1,2.]],threshold:-0.0150999398902059,right_val:0.5335299968719482,left_val:0.1776272058486939},{features:[[7,14,5,3,-1.],[7,15,5,1,3.]],threshold:-3.8316650316119194e-003,right_val:0.4221394062042236,left_val:0.6149687767028809},{features:[[7,13,6,6,-1.],[10,13,3,3,2.],[7,16,3,3,2.]],threshold:0.0169254001230001,right_val:0.2166585028171539,left_val:0.5413014888763428},{features:[[9,12,2,3,-1.],[9,13,2,1,3.]],threshold:-3.0477850232273340e-003,right_val:0.4354617893695831,left_val:0.6449490785598755},{features:[[16,11,1,6,-1.],[16,13,1,2,3.]],threshold:3.2140589319169521e-003,right_val:0.3523217141628265,left_val:0.5400155186653137},{features:[[3,11,1,6,-1.],[3,13,1,2,3.]],threshold:-4.0023201145231724e-003,right_val:0.5338417291641235,left_val:0.2774524092674255},{features:[[4,4,14,12,-1.],[11,4,7,6,2.],[4,10,7,6,2.]],threshold:7.4182129465043545e-003,right_val:0.3702817857265472,left_val:0.5676739215850830},{features:[[5,4,3,3,-1.],[5,5,3,1,3.]],threshold:-8.8764587417244911e-003,right_val:0.4583688974380493,left_val:0.7749221920967102},{features:[[12,3,3,3,-1.],[13,3,1,3,3.]],threshold:2.7311739977449179e-003,right_val:0.3996661007404327,left_val:0.5338721871376038},{features:[[6,6,8,3,-1.],[6,7,8,1,3.]],threshold:-2.5082379579544067e-003,right_val:0.3777498900890350,left_val:0.5611963272094727},{features:[[12,3,3,3,-1.],[13,3,1,3,3.]],threshold:-8.0541074275970459e-003,right_val:0.5179182887077332,left_val:0.2915228903293610},{features:[[3,1,4,10,-1.],[3,1,2,5,2.],[5,6,2,5,2.]],threshold:-9.7938813269138336e-004,right_val:0.3700192868709564,left_val:0.5536432862281799},{features:[[5,7,10,2,-1.],[5,7,5,2,2.]],threshold:-5.8745909482240677e-003,right_val:0.5679376125335693,left_val:0.3754391074180603},{features:[[8,7,3,3,-1.],[9,7,1,3,3.]],threshold:-4.4936719350516796e-003,right_val:0.4480949938297272,left_val:0.7019699215888977},{features:[[15,12,2,3,-1.],[15,13,2,1,3.]],threshold:-5.4389229044318199e-003,right_val:0.5313386917114258,left_val:0.2310364991426468},{features:[[7,8,3,4,-1.],[8,8,1,4,3.]],threshold:-7.5094640487805009e-004,right_val:0.4129343032836914,left_val:0.5864868760108948},{features:[[13,4,1,12,-1.],[13,10,1,6,2.]],threshold:1.4528800420521293e-005,right_val:0.5619621276855469,left_val:0.3732407093048096},{features:[[4,5,12,12,-1.],[4,5,6,6,2.],[10,11,6,6,2.]],threshold:0.0407580696046352,right_val:0.2720521986484528,left_val:0.5312091112136841},{features:[[7,14,7,3,-1.],[7,15,7,1,3.]],threshold:6.6505931317806244e-003,right_val:0.6693493723869324,left_val:0.4710015952587128},{features:[[3,12,2,3,-1.],[3,13,2,1,3.]],threshold:4.5759351924061775e-003,right_val:0.1637275964021683,left_val:0.5167819261550903},{features:[[3,2,14,2,-1.],[10,2,7,1,2.],[3,3,7,1,2.]],threshold:6.5269311890006065e-003,right_val:0.2938531935214996,left_val:0.5397608876228333},{features:[[0,1,3,10,-1.],[1,1,1,10,3.]],threshold:-0.0136603796854615,right_val:0.4532200098037720,left_val:0.7086488008499146},{features:[[9,0,6,5,-1.],[11,0,2,5,3.]],threshold:0.0273588690906763,right_val:0.3589231967926025,left_val:0.5206481218338013},{features:[[5,7,6,2,-1.],[8,7,3,2,2.]],threshold:6.2197551596909761e-004,right_val:0.5441123247146606,left_val:0.3507075905799866},{features:[[7,1,6,10,-1.],[7,6,6,5,2.]],threshold:-3.3077080734074116e-003,right_val:0.4024891853332520,left_val:0.5859522819519043},{features:[[1,1,18,3,-1.],[7,1,6,3,3.]],threshold:-0.0106311095878482,right_val:0.4422602951526642,left_val:0.6743267178535461},{features:[[16,3,3,6,-1.],[16,5,3,2,3.]],threshold:0.0194416493177414,right_val:0.1797904968261719,left_val:0.5282716155052185}],threshold:27.1533508300781250},{simpleClassifiers:[{features:[[6,3,7,6,-1.],[6,6,7,3,2.]],threshold:-5.5052167735993862e-003,right_val:0.2626559138298035,left_val:0.5914731025695801},{features:[[4,7,12,2,-1.],[8,7,4,2,3.]],threshold:1.9562279339879751e-003,right_val:0.5741627216339111,left_val:0.2312581986188889},{features:[[0,4,17,10,-1.],[0,9,17,5,2.]],threshold:-8.8924784213304520e-003,right_val:0.5626654028892517,left_val:0.1656530052423477},{features:[[3,4,15,16,-1.],[3,12,15,8,2.]],threshold:0.0836383774876595,right_val:0.1957294940948486,left_val:0.5423449873924255},{features:[[7,15,6,4,-1.],[7,17,6,2,2.]],threshold:1.2282270472496748e-003,right_val:0.5992503762245178,left_val:0.3417904078960419},{features:[[15,2,4,9,-1.],[15,2,2,9,2.]],threshold:5.7629169896245003e-003,right_val:0.6079903841018677,left_val:0.3719581961631775},{features:[[2,3,3,2,-1.],[2,4,3,1,2.]],threshold:-1.6417410224676132e-003,right_val:0.5576915740966797,left_val:0.2577486038208008},{features:[[13,6,7,9,-1.],[13,9,7,3,3.]],threshold:3.4113149158656597e-003,right_val:0.5514171719551086,left_val:0.2950749099254608},{features:[[8,11,4,3,-1.],[8,12,4,1,3.]],threshold:-0.0110693201422691,right_val:0.4477078914642334,left_val:0.7569358944892883},{features:[[0,2,20,6,-1.],[10,2,10,3,2.],[0,5,10,3,2.]],threshold:0.0348659716546535,right_val:0.2669621109962463,left_val:0.5583708882331848},{features:[[3,2,6,10,-1.],[3,2,3,5,2.],[6,7,3,5,2.]],threshold:6.5701099811121821e-004,right_val:0.2988890111446381,left_val:0.5627313256263733},{features:[[13,10,3,4,-1.],[13,12,3,2,2.]],threshold:-0.0243391301482916,right_val:0.5108863115310669,left_val:0.2771185040473938},{features:[[4,10,3,4,-1.],[4,12,3,2,2.]],threshold:5.9435202274471521e-004,right_val:0.3120341897010803,left_val:0.5580651760101318},{features:[[7,5,6,3,-1.],[9,5,2,3,3.]],threshold:2.2971509024500847e-003,right_val:0.5679075717926025,left_val:0.3330250084400177},{features:[[7,6,6,8,-1.],[7,10,6,4,2.]],threshold:-3.7801829166710377e-003,right_val:0.5344808101654053,left_val:0.2990534901618958},{features:[[0,11,20,6,-1.],[0,14,20,3,2.]],threshold:-0.1342066973447800,right_val:0.5392568111419678,left_val:0.1463858932256699},{features:[[4,13,4,6,-1.],[4,13,2,3,2.],[6,16,2,3,2.]],threshold:7.5224548345431685e-004,right_val:0.5692734718322754,left_val:0.3746953904628754},{features:[[6,0,8,12,-1.],[10,0,4,6,2.],[6,6,4,6,2.]],threshold:-0.0405455417931080,right_val:0.5484297871589661,left_val:0.2754747867584229},{features:[[2,0,15,2,-1.],[2,1,15,1,2.]],threshold:1.2572970008477569e-003,right_val:0.5756075978279114,left_val:0.3744584023952484},{features:[[9,12,2,3,-1.],[9,13,2,1,3.]],threshold:-7.4249948374927044e-003,right_val:0.4728231132030487,left_val:0.7513859272003174},{features:[[3,12,1,2,-1.],[3,13,1,1,2.]],threshold:5.0908129196614027e-004,right_val:0.2932321131229401,left_val:0.5404896736145020},{features:[[9,11,2,3,-1.],[9,12,2,1,3.]],threshold:-1.2808450264856219e-003,right_val:0.4273349046707153,left_val:0.6169779896736145},{features:[[7,3,3,1,-1.],[8,3,1,1,3.]],threshold:-1.8348860321566463e-003,right_val:0.5206472277641296,left_val:0.2048496007919312},{features:[[17,7,3,6,-1.],[17,9,3,2,3.]],threshold:0.0274848695844412,right_val:0.1675522029399872,left_val:0.5252984762191773},{features:[[7,2,3,2,-1.],[8,2,1,2,3.]],threshold:2.2372419480234385e-003,right_val:0.2777658104896545,left_val:0.5267782807350159},{features:[[11,4,5,3,-1.],[11,5,5,1,3.]],threshold:-8.8635291904211044e-003,right_val:0.4812048971652985,left_val:0.6954557895660400},{features:[[4,4,5,3,-1.],[4,5,5,1,3.]],threshold:4.1753971017897129e-003,right_val:0.6349195837974548,left_val:0.4291887879371643},{features:[[19,3,1,2,-1.],[19,4,1,1,2.]],threshold:-1.7098189564421773e-003,right_val:0.5361248850822449,left_val:0.2930536866188049},{features:[[5,5,4,3,-1.],[5,6,4,1,3.]],threshold:6.5328548662364483e-003,right_val:0.7409694194793701,left_val:0.4495325088500977},{features:[[17,7,3,6,-1.],[17,9,3,2,3.]],threshold:-9.5372907817363739e-003,right_val:0.5416501760482788,left_val:0.3149119913578033},{features:[[0,7,3,6,-1.],[0,9,3,2,3.]],threshold:0.0253109894692898,right_val:0.1311707943677902,left_val:0.5121892094612122},{features:[[14,2,6,9,-1.],[14,5,6,3,3.]],threshold:0.0364609695971012,right_val:0.2591339945793152,left_val:0.5175911784172058},{features:[[0,4,5,6,-1.],[0,6,5,2,3.]],threshold:0.0208543296903372,right_val:0.1582316011190414,left_val:0.5137140154838562},{features:[[10,5,6,2,-1.],[12,5,2,2,3.]],threshold:-8.7207747856155038e-004,right_val:0.4398978948593140,left_val:0.5574309825897217},{features:[[4,5,6,2,-1.],[6,5,2,2,3.]],threshold:-1.5227000403683633e-005,right_val:0.3708069920539856,left_val:0.5548940896987915},{features:[[8,1,4,6,-1.],[8,3,4,2,3.]],threshold:-8.4316509310156107e-004,right_val:0.5554211139678955,left_val:0.3387419879436493},{features:[[0,2,3,6,-1.],[0,4,3,2,3.]],threshold:3.6037859972566366e-003,right_val:0.3411171138286591,left_val:0.5358061790466309},{features:[[6,6,8,3,-1.],[6,7,8,1,3.]],threshold:-6.8057891912758350e-003,right_val:0.4345862865447998,left_val:0.6125202775001526},{features:[[0,1,5,9,-1.],[0,4,5,3,3.]],threshold:-0.0470216609537601,right_val:0.5193738937377930,left_val:0.2358165979385376},{features:[[16,0,4,15,-1.],[16,0,2,15,2.]],threshold:-0.0369541086256504,right_val:0.4760943949222565,left_val:0.7323111295700073},{features:[[1,10,3,2,-1.],[1,11,3,1,2.]],threshold:1.0439479956403375e-003,right_val:0.3411330878734589,left_val:0.5419455170631409},{features:[[14,4,1,10,-1.],[14,9,1,5,2.]],threshold:-2.1050689974799752e-004,right_val:0.5554947257041931,left_val:0.2821694016456604},{features:[[0,1,4,12,-1.],[2,1,2,12,2.]],threshold:-0.0808315873146057,right_val:0.4697434902191162,left_val:0.9129930138587952},{features:[[11,11,4,2,-1.],[11,11,2,2,2.]],threshold:-3.6579059087671340e-004,right_val:0.3978292942047119,left_val:0.6022670269012451},{features:[[5,11,4,2,-1.],[7,11,2,2,2.]],threshold:-1.2545920617412776e-004,right_val:0.3845539987087250,left_val:0.5613213181495667},{features:[[3,8,15,5,-1.],[8,8,5,5,3.]],threshold:-0.0687864869832993,right_val:0.5300496816635132,left_val:0.2261611968278885},{features:[[0,0,6,10,-1.],[3,0,3,10,2.]],threshold:0.0124157899990678,right_val:0.5828812122344971,left_val:0.4075691998004913},{features:[[11,4,3,2,-1.],[12,4,1,2,3.]],threshold:-4.7174817882478237e-003,right_val:0.5267757773399353,left_val:0.2827253937721252},{features:[[8,12,3,8,-1.],[8,16,3,4,2.]],threshold:0.0381368584930897,right_val:0.1023615971207619,left_val:0.5074741244316101},{features:[[8,14,5,3,-1.],[8,15,5,1,3.]],threshold:-2.8168049175292253e-003,right_val:0.4359692931175232,left_val:0.6169006824493408},{features:[[7,14,4,3,-1.],[7,15,4,1,3.]],threshold:8.1303603947162628e-003,right_val:0.7606095075607300,left_val:0.4524433016777039},{features:[[11,4,3,2,-1.],[12,4,1,2,3.]],threshold:6.0056019574403763e-003,right_val:0.1859712004661560,left_val:0.5240408778190613},{features:[[3,15,14,4,-1.],[3,15,7,2,2.],[10,17,7,2,2.]],threshold:0.0191393196582794,right_val:0.2332071959972382,left_val:0.5209379196166992},{features:[[2,2,16,4,-1.],[10,2,8,2,2.],[2,4,8,2,2.]],threshold:0.0164457596838474,right_val:0.3264234960079193,left_val:0.5450702905654907},{features:[[0,8,6,12,-1.],[3,8,3,12,2.]],threshold:-0.0373568907380104,right_val:0.4533241987228394,left_val:0.6999046802520752},{features:[[5,7,10,2,-1.],[5,7,5,2,2.]],threshold:-0.0197279006242752,right_val:0.5412809848785400,left_val:0.2653664946556091},{features:[[9,7,2,5,-1.],[10,7,1,5,2.]],threshold:6.6972579807043076e-003,right_val:0.7138652205467224,left_val:0.4480566084384918},{features:[[13,7,6,4,-1.],[16,7,3,2,2.],[13,9,3,2,2.]],threshold:7.4457528535276651e-004,right_val:0.5471320152282715,left_val:0.4231350123882294},{features:[[0,13,8,2,-1.],[0,14,8,1,2.]],threshold:1.1790640419349074e-003,right_val:0.3130455017089844,left_val:0.5341702103614807},{features:[[13,7,6,4,-1.],[16,7,3,2,2.],[13,9,3,2,2.]],threshold:0.0349806100130081,right_val:0.3430530130863190,left_val:0.5118659734725952},{features:[[1,7,6,4,-1.],[1,7,3,2,2.],[4,9,3,2,2.]],threshold:5.6859792675822973e-004,right_val:0.5468639731407166,left_val:0.3532187044620514},{features:[[12,6,1,12,-1.],[12,12,1,6,2.]],threshold:-0.0113406497985125,right_val:0.5348700881004334,left_val:0.2842353880405426},{features:[[9,5,2,6,-1.],[10,5,1,6,2.]],threshold:-6.6228108480572701e-003,right_val:0.4492664933204651,left_val:0.6883640289306641},{features:[[14,12,2,3,-1.],[14,13,2,1,3.]],threshold:-8.0160330981016159e-003,right_val:0.5224308967590332,left_val:0.1709893941879273},{features:[[4,12,2,3,-1.],[4,13,2,1,3.]],threshold:1.4206819469109178e-003,right_val:0.2993383109569550,left_val:0.5290846228599548},{features:[[8,12,4,3,-1.],[8,13,4,1,3.]],threshold:-2.7801711112260818e-003,right_val:0.4460499882698059,left_val:0.6498854160308838},{features:[[5,2,2,4,-1.],[5,2,1,2,2.],[6,4,1,2,2.]],threshold:-1.4747589593753219e-003,right_val:0.5388113260269165,left_val:0.3260438144207001},{features:[[5,5,11,3,-1.],[5,6,11,1,3.]],threshold:-0.0238303393125534,right_val:0.4801219999790192,left_val:0.7528941035270691},{features:[[7,6,4,12,-1.],[7,12,4,6,2.]],threshold:6.9369790144264698e-003,right_val:0.3261427879333496,left_val:0.5335165858268738},{features:[[12,13,8,5,-1.],[12,13,4,5,2.]],threshold:8.2806255668401718e-003,right_val:0.5737829804420471,left_val:0.4580394029617310},{features:[[7,6,1,12,-1.],[7,12,1,6,2.]],threshold:-0.0104395002126694,right_val:0.5233827829360962,left_val:0.2592320144176483}],threshold:34.5541114807128910},{simpleClassifiers:[{features:[[1,2,6,3,-1.],[4,2,3,3,2.]],threshold:7.2006587870419025e-003,right_val:0.6849808096885681,left_val:0.3258886039257050},{features:[[9,5,6,10,-1.],[12,5,3,5,2.],[9,10,3,5,2.]],threshold:-2.8593589086085558e-003,right_val:0.2537829875946045,left_val:0.5838881134986877},{features:[[5,5,8,12,-1.],[5,5,4,6,2.],[9,11,4,6,2.]],threshold:6.8580528022721410e-004,right_val:0.2812424004077911,left_val:0.5708081722259522},{features:[[0,7,20,6,-1.],[0,9,20,2,3.]],threshold:7.9580191522836685e-003,right_val:0.5544260740280151,left_val:0.2501051127910614},{features:[[4,2,2,2,-1.],[4,3,2,1,2.]],threshold:-1.2124150525778532e-003,right_val:0.5433350205421448,left_val:0.2385368049144745},{features:[[4,18,12,2,-1.],[8,18,4,2,3.]],threshold:7.9426132142543793e-003,right_val:0.6220757961273193,left_val:0.3955070972442627},{features:[[7,4,4,16,-1.],[7,12,4,8,2.]],threshold:2.4630590341985226e-003,right_val:0.2992357909679413,left_val:0.5639708042144775},{features:[[7,6,7,8,-1.],[7,10,7,4,2.]],threshold:-6.0396599583327770e-003,right_val:0.5411676764488220,left_val:0.2186512947082520},{features:[[6,3,3,1,-1.],[7,3,1,1,3.]],threshold:-1.2988339876756072e-003,right_val:0.5364584922790527,left_val:0.2350706011056900},{features:[[11,15,2,4,-1.],[11,17,2,2,2.]],threshold:2.2299369447864592e-004,right_val:0.5729606151580811,left_val:0.3804112970829010},{features:[[3,5,4,8,-1.],[3,9,4,4,2.]],threshold:1.4654280385002494e-003,right_val:0.5258268713951111,left_val:0.2510167956352234},{features:[[7,1,6,12,-1.],[7,7,6,6,2.]],threshold:-8.1210042117163539e-004,right_val:0.3851158916950226,left_val:0.5992823839187622},{features:[[4,6,6,2,-1.],[6,6,2,2,3.]],threshold:-1.3836020370945334e-003,right_val:0.3636586964130402,left_val:0.5681396126747131},{features:[[16,4,4,6,-1.],[16,6,4,2,3.]],threshold:-0.0279364492744207,right_val:0.5377560257911682,left_val:0.1491317003965378},{features:[[3,3,5,2,-1.],[3,4,5,1,2.]],threshold:-4.6919551095925272e-004,right_val:0.5572484731674194,left_val:0.3692429959774017},{features:[[9,11,2,3,-1.],[9,12,2,1,3.]],threshold:-4.9829659983515739e-003,right_val:0.4532504081726074,left_val:0.6758509278297424},{features:[[2,16,4,2,-1.],[2,17,4,1,2.]],threshold:1.8815309740602970e-003,right_val:0.2932539880275726,left_val:0.5368022918701172},{features:[[7,13,6,6,-1.],[10,13,3,3,2.],[7,16,3,3,2.]],threshold:-0.0190675500780344,right_val:0.5330067276954651,left_val:0.1649377048015595},{features:[[7,0,3,4,-1.],[8,0,1,4,3.]],threshold:-4.6906559728085995e-003,right_val:0.5119361877441406,left_val:0.1963925957679749},{features:[[8,15,4,3,-1.],[8,16,4,1,3.]],threshold:5.9777139686048031e-003,right_val:0.7008398175239563,left_val:0.4671171903610230},{features:[[0,4,4,6,-1.],[0,6,4,2,3.]],threshold:-0.0333031304180622,right_val:0.5104162096977234,left_val:0.1155416965484619},{features:[[5,6,12,3,-1.],[9,6,4,3,3.]],threshold:0.0907441079616547,right_val:0.1306173056364059,left_val:0.5149660110473633},{features:[[7,6,6,14,-1.],[9,6,2,14,3.]],threshold:9.3555898638442159e-004,right_val:0.5439859032630920,left_val:0.3605481088161469},{features:[[9,7,3,3,-1.],[10,7,1,3,3.]],threshold:0.0149016501381993,right_val:0.7687569856643677,left_val:0.4886212050914764},{features:[[6,12,2,4,-1.],[6,14,2,2,2.]],threshold:6.1594118596985936e-004,right_val:0.3240939080715179,left_val:0.5356813073158264},{features:[[10,12,7,6,-1.],[10,14,7,2,3.]],threshold:-0.0506709888577461,right_val:0.5230404138565064,left_val:0.1848621964454651},{features:[[1,0,15,2,-1.],[1,1,15,1,2.]],threshold:6.8665749859064817e-004,right_val:0.5517945885658264,left_val:0.3840579986572266},{features:[[14,0,6,6,-1.],[14,0,3,6,2.]],threshold:8.3712432533502579e-003,right_val:0.6131753921508789,left_val:0.4288564026355743},{features:[[5,3,3,1,-1.],[6,3,1,1,3.]],threshold:-1.2953069526702166e-003,right_val:0.5280737876892090,left_val:0.2913674116134644},{features:[[14,0,6,6,-1.],[14,0,3,6,2.]],threshold:-0.0419416800141335,right_val:0.4856030941009522,left_val:0.7554799914360046},{features:[[0,3,20,10,-1.],[0,8,20,5,2.]],threshold:-0.0235293805599213,right_val:0.5256081223487854,left_val:0.2838279902935028},{features:[[14,0,6,6,-1.],[14,0,3,6,2.]],threshold:0.0408574491739273,right_val:0.6277297139167786,left_val:0.4870935082435608},{features:[[0,0,6,6,-1.],[3,0,3,6,2.]],threshold:-0.0254068691283464,right_val:0.4575029015541077,left_val:0.7099707722663879},{features:[[19,15,1,2,-1.],[19,16,1,1,2.]],threshold:-4.1415440500713885e-004,right_val:0.5469412207603455,left_val:0.4030886888504028},{features:[[0,2,4,8,-1.],[2,2,2,8,2.]],threshold:0.0218241196125746,right_val:0.6768701076507568,left_val:0.4502024054527283},{features:[[2,1,18,4,-1.],[11,1,9,2,2.],[2,3,9,2,2.]],threshold:0.0141140399500728,right_val:0.3791700005531311,left_val:0.5442860722541809},{features:[[8,12,1,2,-1.],[8,13,1,1,2.]],threshold:6.7214590671937913e-005,right_val:0.5873476266860962,left_val:0.4200463891029358},{features:[[5,2,10,6,-1.],[10,2,5,3,2.],[5,5,5,3,2.]],threshold:-7.9417638480663300e-003,right_val:0.5585265755653381,left_val:0.3792561888694763},{features:[[9,7,2,4,-1.],[10,7,1,4,2.]],threshold:-7.2144409641623497e-003,right_val:0.4603548943996429,left_val:0.7253103852272034},{features:[[9,7,3,3,-1.],[10,7,1,3,3.]],threshold:2.5817339774221182e-003,right_val:0.5900238752365112,left_val:0.4693301916122437},{features:[[4,5,12,8,-1.],[8,5,4,8,3.]],threshold:0.1340931951999664,right_val:0.1808844953775406,left_val:0.5149213075637817},{features:[[15,15,4,3,-1.],[15,16,4,1,3.]],threshold:2.2962710354477167e-003,right_val:0.3717867136001587,left_val:0.5399743914604187},{features:[[8,18,3,1,-1.],[9,18,1,1,3.]],threshold:-2.1575849968940020e-003,right_val:0.5148863792419434,left_val:0.2408495992422104},{features:[[9,13,4,3,-1.],[9,14,4,1,3.]],threshold:-4.9196188338100910e-003,right_val:0.4738740026950836,left_val:0.6573588252067566},{features:[[7,13,4,3,-1.],[7,14,4,1,3.]],threshold:1.6267469618469477e-003,right_val:0.6303114295005798,left_val:0.4192821979522705},{features:[[19,15,1,2,-1.],[19,16,1,1,2.]],threshold:3.3413388882763684e-004,right_val:0.3702101111412048,left_val:0.5540298223495483},{features:[[0,15,8,4,-1.],[0,17,8,2,2.]],threshold:-0.0266980808228254,right_val:0.5101410746574402,left_val:0.1710917949676514},{features:[[9,3,6,4,-1.],[11,3,2,4,3.]],threshold:-0.0305618792772293,right_val:0.5168793797492981,left_val:0.1904218047857285},{features:[[8,14,4,3,-1.],[8,15,4,1,3.]],threshold:2.8511548880487680e-003,right_val:0.6313853859901428,left_val:0.4447506964206696},{features:[[3,14,14,6,-1.],[3,16,14,2,3.]],threshold:-0.0362114794552326,right_val:0.5377349257469177,left_val:0.2490727007389069},{features:[[6,3,6,6,-1.],[6,6,6,3,2.]],threshold:-2.4115189444273710e-003,right_val:0.3664236962795258,left_val:0.5381243228912354},{features:[[5,11,10,6,-1.],[5,14,10,3,2.]],threshold:-7.7253201743587852e-004,right_val:0.3541550040245056,left_val:0.5530232191085815},{features:[[3,10,3,4,-1.],[4,10,1,4,3.]],threshold:2.9481729143299162e-004,right_val:0.5667243003845215,left_val:0.4132699072360992},{features:[[13,9,2,2,-1.],[13,9,1,2,2.]],threshold:-6.2334560789167881e-003,right_val:0.5198668837547302,left_val:0.0987872332334518},{features:[[5,3,6,4,-1.],[7,3,2,4,3.]],threshold:-0.0262747295200825,right_val:0.5028107166290283,left_val:0.0911274924874306},{features:[[9,7,3,3,-1.],[10,7,1,3,3.]],threshold:5.3212260827422142e-003,right_val:0.6222720742225647,left_val:0.4726648926734924},{features:[[2,12,2,3,-1.],[2,13,2,1,3.]],threshold:-4.1129058226943016e-003,right_val:0.5137804746627808,left_val:0.2157457023859024},{features:[[9,8,3,12,-1.],[9,12,3,4,3.]],threshold:3.2457809429615736e-003,right_val:0.3721776902675629,left_val:0.5410770773887634},{features:[[3,14,4,6,-1.],[3,14,2,3,2.],[5,17,2,3,2.]],threshold:-0.0163597092032433,right_val:0.4685291945934296,left_val:0.7787874937057495},{features:[[16,15,2,2,-1.],[16,16,2,1,2.]],threshold:3.2166109303943813e-004,right_val:0.4240373969078064,left_val:0.5478987097740173},{features:[[2,15,2,2,-1.],[2,16,2,1,2.]],threshold:6.4452440710738301e-004,right_val:0.3501324951648712,left_val:0.5330560803413391},{features:[[8,12,4,3,-1.],[8,13,4,1,3.]],threshold:-7.8909732401371002e-003,right_val:0.4726569056510925,left_val:0.6923521161079407},{features:[[0,7,20,1,-1.],[10,7,10,1,2.]],threshold:0.0483362115919590,right_val:0.0757492035627365,left_val:0.5055900216102600},{features:[[7,6,8,3,-1.],[7,6,4,3,2.]],threshold:-7.5178127735853195e-004,right_val:0.5538573861122131,left_val:0.3783741891384125},{features:[[5,7,8,2,-1.],[9,7,4,2,2.]],threshold:-2.4953910615295172e-003,right_val:0.5359612107276917,left_val:0.3081651031970978},{features:[[9,7,3,5,-1.],[10,7,1,5,3.]],threshold:-2.2385010961443186e-003,right_val:0.4649342894554138,left_val:0.6633958816528320},{features:[[8,7,3,5,-1.],[9,7,1,5,3.]],threshold:-1.7988430336117744e-003,right_val:0.4347187876701355,left_val:0.6596844792366028},{features:[[11,1,3,5,-1.],[12,1,1,5,3.]],threshold:8.7860915809869766e-003,right_val:0.2315579950809479,left_val:0.5231832861900330},{features:[[6,2,3,6,-1.],[7,2,1,6,3.]],threshold:3.6715380847454071e-003,right_val:0.2977376878261566,left_val:0.5204250216484070},{features:[[14,14,6,5,-1.],[14,14,3,5,2.]],threshold:-0.0353364497423172,right_val:0.4861505031585693,left_val:0.7238878011703491},{features:[[9,8,2,2,-1.],[9,9,2,1,2.]],threshold:-6.9189240457490087e-004,right_val:0.5229824781417847,left_val:0.3105022013187408},{features:[[10,7,1,3,-1.],[10,8,1,1,3.]],threshold:-3.3946109469980001e-003,right_val:0.5210173726081848,left_val:0.3138968050479889},{features:[[6,6,2,2,-1.],[6,6,1,1,2.],[7,7,1,1,2.]],threshold:9.8569283727556467e-004,right_val:0.6585097908973694,left_val:0.4536580145359039},{features:[[2,11,18,4,-1.],[11,11,9,2,2.],[2,13,9,2,2.]],threshold:-0.0501631014049053,right_val:0.5198916792869568,left_val:0.1804454028606415},{features:[[6,6,2,2,-1.],[6,6,1,1,2.],[7,7,1,1,2.]],threshold:-2.2367259953171015e-003,right_val:0.4651359021663666,left_val:0.7255702018737793},{features:[[0,15,20,2,-1.],[0,16,20,1,2.]],threshold:7.4326287722215056e-004,right_val:0.5898545980453491,left_val:0.4412921071052551},{features:[[4,14,2,3,-1.],[4,15,2,1,3.]],threshold:-9.3485182151198387e-004,right_val:0.5366017818450928,left_val:0.3500052988529205},{features:[[8,14,4,3,-1.],[8,15,4,1,3.]],threshold:0.0174979399889708,right_val:0.8315284848213196,left_val:0.4912194907665253},{features:[[8,7,2,3,-1.],[8,8,2,1,3.]],threshold:-1.5200000489130616e-003,right_val:0.5370560288429260,left_val:0.3570275902748108},{features:[[9,10,2,3,-1.],[9,11,2,1,3.]],threshold:7.8003940870985389e-004,right_val:0.5967335104942322,left_val:0.4353772103786469}],threshold:39.1072883605957030},{simpleClassifiers:[{features:[[5,4,10,4,-1.],[5,6,10,2,2.]],threshold:-9.9945552647113800e-003,right_val:0.3054533004760742,left_val:0.6162583231925964},{features:[[9,7,6,4,-1.],[12,7,3,2,2.],[9,9,3,2,2.]],threshold:-1.1085229925811291e-003,right_val:0.3155578076839447,left_val:0.5818294882774353},{features:[[4,7,3,6,-1.],[4,9,3,2,3.]],threshold:1.0364380432292819e-003,right_val:0.5692911744117737,left_val:0.2552052140235901},{features:[[11,15,4,4,-1.],[13,15,2,2,2.],[11,17,2,2,2.]],threshold:6.8211311008781195e-004,right_val:0.5934931039810181,left_val:0.3685089945793152},{features:[[7,8,4,2,-1.],[7,9,4,1,2.]],threshold:-6.8057340104132891e-004,right_val:0.5474792122840881,left_val:0.2332392036914825},{features:[[13,1,4,3,-1.],[13,1,2,3,2.]],threshold:2.6068789884448051e-004,right_val:0.5667545795440674,left_val:0.3257457017898560},{features:[[5,15,4,4,-1.],[5,15,2,2,2.],[7,17,2,2,2.]],threshold:5.1607372006401420e-004,right_val:0.5845472812652588,left_val:0.3744716942310333},{features:[[9,5,4,7,-1.],[9,5,2,7,2.]],threshold:8.5007521556690335e-004,right_val:0.5522807240486145,left_val:0.3420371115207672},{features:[[5,6,8,3,-1.],[9,6,4,3,2.]],threshold:-1.8607829697430134e-003,right_val:0.5375424027442932,left_val:0.2804419994354248},{features:[[9,9,2,2,-1.],[9,10,2,1,2.]],threshold:-1.5033970121294260e-003,right_val:0.5498952269554138,left_val:0.2579050958156586},{features:[[7,15,5,3,-1.],[7,16,5,1,3.]],threshold:2.3478909861296415e-003,right_val:0.6313710808753967,left_val:0.4175156056880951},{features:[[11,10,4,3,-1.],[11,10,2,3,2.]],threshold:-2.8880240279249847e-004,right_val:0.4052666127681732,left_val:0.5865169763565064},{features:[[6,9,8,10,-1.],[6,14,8,5,2.]],threshold:8.9405477046966553e-003,right_val:0.2318654060363770,left_val:0.5211141109466553},{features:[[10,11,6,2,-1.],[10,11,3,2,2.]],threshold:-0.0193277392536402,right_val:0.5241525769233704,left_val:0.2753432989120483},{features:[[4,11,6,2,-1.],[7,11,3,2,2.]],threshold:-2.0202060113660991e-004,right_val:0.3677195906639099,left_val:0.5722978711128235},{features:[[11,3,8,1,-1.],[11,3,4,1,2.]],threshold:2.1179069299250841e-003,right_val:0.5542430877685547,left_val:0.4466108083724976},{features:[[6,3,3,2,-1.],[7,3,1,2,3.]],threshold:-1.7743760254234076e-003,right_val:0.5300959944725037,left_val:0.2813253104686737},{features:[[14,5,6,5,-1.],[14,5,3,5,2.]],threshold:4.2234458960592747e-003,right_val:0.5795428156852722,left_val:0.4399709999561310},{features:[[7,5,2,12,-1.],[7,11,2,6,2.]],threshold:-0.0143752200528979,right_val:0.5292059183120728,left_val:0.2981117963790894},{features:[[8,11,4,3,-1.],[8,12,4,1,3.]],threshold:-0.0153491804376245,right_val:0.4748171865940094,left_val:0.7705215215682983},{features:[[4,1,2,3,-1.],[5,1,1,3,2.]],threshold:1.5152279956964776e-005,right_val:0.5576897263526917,left_val:0.3718844056129456},{features:[[18,3,2,6,-1.],[18,5,2,2,3.]],threshold:-9.1293919831514359e-003,right_val:0.5286766886711121,left_val:0.3615196049213409},{features:[[0,3,2,6,-1.],[0,5,2,2,3.]],threshold:2.2512159775942564e-003,right_val:0.3486298024654388,left_val:0.5364704728126526},{features:[[9,12,2,3,-1.],[9,13,2,1,3.]],threshold:-4.9696918576955795e-003,right_val:0.4676836133003235,left_val:0.6927651762962341},{features:[[7,13,4,3,-1.],[7,14,4,1,3.]],threshold:-0.0128290103748441,right_val:0.4660735130310059,left_val:0.7712153792381287},{features:[[18,0,2,6,-1.],[18,2,2,2,3.]],threshold:-9.3660065904259682e-003,right_val:0.5351287722587585,left_val:0.3374983966350555},{features:[[0,0,2,6,-1.],[0,2,2,2,3.]],threshold:3.2452319283038378e-003,right_val:0.3289610147476196,left_val:0.5325189828872681},{features:[[8,14,6,3,-1.],[8,15,6,1,3.]],threshold:-0.0117235602810979,right_val:0.4754300117492676,left_val:0.6837652921676636},{features:[[7,4,2,4,-1.],[8,4,1,4,2.]],threshold:2.9257940695970319e-005,right_val:0.5360502004623413,left_val:0.3572087883949280},{features:[[8,5,4,6,-1.],[8,7,4,2,3.]],threshold:-2.2244219508138485e-005,right_val:0.3552064001560211,left_val:0.5541427135467529},{features:[[6,4,2,2,-1.],[7,4,1,2,2.]],threshold:5.0881509669125080e-003,right_val:0.1256462037563324,left_val:0.5070844292640686},{features:[[3,14,14,4,-1.],[10,14,7,2,2.],[3,16,7,2,2.]],threshold:0.0274296794086695,right_val:0.1625818014144898,left_val:0.5269560217857361},{features:[[6,15,6,2,-1.],[6,15,3,1,2.],[9,16,3,1,2.]],threshold:-6.4142867922782898e-003,right_val:0.4584197103977203,left_val:0.7145588994026184},{features:[[14,15,6,2,-1.],[14,16,6,1,2.]],threshold:3.3479959238320589e-003,right_val:0.3494696915149689,left_val:0.5398612022399902},{features:[[2,12,12,8,-1.],[2,16,12,4,2.]],threshold:-0.0826354920864105,right_val:0.5160226225852966,left_val:0.2439192980527878},{features:[[7,7,7,2,-1.],[7,8,7,1,2.]],threshold:1.0261740535497665e-003,right_val:0.5767908096313477,left_val:0.3886891901493073},{features:[[0,2,18,2,-1.],[0,3,18,1,2.]],threshold:-1.6307090409100056e-003,right_val:0.5347700715065002,left_val:0.3389458060264587},{features:[[9,6,2,5,-1.],[9,6,1,5,2.]],threshold:2.4546680506318808e-003,right_val:0.6387246847152710,left_val:0.4601413905620575},{features:[[7,5,3,8,-1.],[8,5,1,8,3.]],threshold:-9.9476519972085953e-004,right_val:0.4120396077632904,left_val:0.5769879221916199},{features:[[9,6,3,4,-1.],[10,6,1,4,3.]],threshold:0.0154091902077198,right_val:0.7089822292327881,left_val:0.4878709018230438},{features:[[4,13,3,2,-1.],[4,14,3,1,2.]],threshold:1.1784400558099151e-003,right_val:0.2895244956016541,left_val:0.5263553261756897},{features:[[9,4,6,3,-1.],[11,4,2,3,3.]],threshold:-0.0277019198983908,right_val:0.5219606757164002,left_val:0.1498828977346420},{features:[[5,4,6,3,-1.],[7,4,2,3,3.]],threshold:-0.0295053999871016,right_val:0.4999816119670868,left_val:0.0248933192342520},{features:[[14,11,5,2,-1.],[14,12,5,1,2.]],threshold:4.5159430010244250e-004,right_val:0.4029662907123566,left_val:0.5464622974395752},{features:[[1,2,6,9,-1.],[3,2,2,9,3.]],threshold:7.1772639639675617e-003,right_val:0.5866296887397766,left_val:0.4271056950092316},{features:[[14,6,6,13,-1.],[14,6,3,13,2.]],threshold:-0.0741820484399796,right_val:0.4919027984142304,left_val:0.6874179244041443},{features:[[3,6,14,8,-1.],[3,6,7,4,2.],[10,10,7,4,2.]],threshold:-0.0172541607171297,right_val:0.5348739027976990,left_val:0.3370676040649414},{features:[[16,0,4,11,-1.],[16,0,2,11,2.]],threshold:0.0148515598848462,right_val:0.6129904985427856,left_val:0.4626792967319489},{features:[[3,4,12,12,-1.],[3,4,6,6,2.],[9,10,6,6,2.]],threshold:0.0100020002573729,right_val:0.3423453867435455,left_val:0.5346122980117798},{features:[[11,4,5,3,-1.],[11,5,5,1,3.]],threshold:2.0138120744377375e-003,right_val:0.5824304223060608,left_val:0.4643830060958862},{features:[[4,11,4,2,-1.],[4,12,4,1,2.]],threshold:1.5135470312088728e-003,right_val:0.2856149971485138,left_val:0.5196396112442017},{features:[[10,7,2,2,-1.],[10,7,1,2,2.]],threshold:3.1381431035697460e-003,right_val:0.5958529710769653,left_val:0.4838162958621979},{features:[[8,7,2,2,-1.],[9,7,1,2,2.]],threshold:-5.1450440660119057e-003,right_val:0.4741412103176117,left_val:0.8920302987098694},{features:[[9,17,3,2,-1.],[10,17,1,2,3.]],threshold:-4.4736708514392376e-003,right_val:0.5337278842926025,left_val:0.2033942937850952},{features:[[5,6,3,3,-1.],[5,7,3,1,3.]],threshold:1.9628470763564110e-003,right_val:0.6725863218307495,left_val:0.4571633934974670},{features:[[10,0,3,3,-1.],[11,0,1,3,3.]],threshold:5.4260450415313244e-003,right_val:0.2845670878887177,left_val:0.5271108150482178},{features:[[5,6,6,2,-1.],[5,6,3,1,2.],[8,7,3,1,2.]],threshold:4.9611460417509079e-004,right_val:0.5718597769737244,left_val:0.4138312935829163},{features:[[12,16,4,3,-1.],[12,17,4,1,3.]],threshold:9.3728788197040558e-003,right_val:0.2804847061634064,left_val:0.5225151181221008},{features:[[3,12,3,2,-1.],[3,13,3,1,2.]],threshold:6.0500897234305739e-004,right_val:0.3314523994922638,left_val:0.5236768722534180},{features:[[9,12,3,2,-1.],[9,13,3,1,2.]],threshold:5.6792551185935736e-004,right_val:0.6276971101760864,left_val:0.4531059861183167},{features:[[1,11,16,4,-1.],[1,11,8,2,2.],[9,13,8,2,2.]],threshold:0.0246443394571543,right_val:0.2017143964767456,left_val:0.5130851864814758},{features:[[12,4,3,3,-1.],[12,5,3,1,3.]],threshold:-0.0102904504165053,right_val:0.4876641035079956,left_val:0.7786595225334168},{features:[[4,4,5,3,-1.],[4,5,5,1,3.]],threshold:2.0629419013857841e-003,right_val:0.5881264209747315,left_val:0.4288598895072937},{features:[[12,16,4,3,-1.],[12,17,4,1,3.]],threshold:-5.0519481301307678e-003,right_val:0.5286008715629578,left_val:0.3523977994918823},{features:[[5,4,3,3,-1.],[5,5,3,1,3.]],threshold:-5.7692620903253555e-003,right_val:0.4588094055652618,left_val:0.6841086149215698},{features:[[9,0,2,2,-1.],[9,1,2,1,2.]],threshold:-4.5789941214025021e-004,right_val:0.5485978126525879,left_val:0.3565520048141480},{features:[[8,9,4,2,-1.],[8,10,4,1,2.]],threshold:-7.5918837683275342e-004,right_val:0.5254197120666504,left_val:0.3368793129920960},{features:[[8,8,4,3,-1.],[8,9,4,1,3.]],threshold:-1.7737259622663260e-003,right_val:0.5454015135765076,left_val:0.3422161042690277},{features:[[0,13,6,3,-1.],[2,13,2,3,3.]],threshold:-8.5610467940568924e-003,right_val:0.4485856890678406,left_val:0.6533612012863159},{features:[[16,14,3,2,-1.],[16,15,3,1,2.]],threshold:1.7277270089834929e-003,right_val:0.3925352990627289,left_val:0.5307580232620239},{features:[[1,18,18,2,-1.],[7,18,6,2,3.]],threshold:-0.0281996093690395,right_val:0.4588584005832672,left_val:0.6857458949089050},{features:[[16,14,3,2,-1.],[16,15,3,1,2.]],threshold:-1.7781109781935811e-003,right_val:0.5369856953620911,left_val:0.4037851095199585},{features:[[1,14,3,2,-1.],[1,15,3,1,2.]],threshold:3.3177141449414194e-004,right_val:0.3705750107765198,left_val:0.5399798750877380},{features:[[7,14,6,3,-1.],[7,15,6,1,3.]],threshold:2.6385399978607893e-003,right_val:0.6452730894088745,left_val:0.4665437042713165},{features:[[5,14,8,3,-1.],[5,15,8,1,3.]],threshold:-2.1183069329708815e-003,right_val:0.4064677059650421,left_val:0.5914781093597412},{features:[[10,6,4,14,-1.],[10,6,2,14,2.]],threshold:-0.0147732896730304,right_val:0.5294762849807739,left_val:0.3642038106918335},{features:[[6,6,4,14,-1.],[8,6,2,14,2.]],threshold:-0.0168154407292604,right_val:0.5144972801208496,left_val:0.2664231956005096},{features:[[13,5,2,3,-1.],[13,6,2,1,3.]],threshold:-6.3370140269398689e-003,right_val:0.4852097928524017,left_val:0.6779531240463257},{features:[[7,16,6,1,-1.],[9,16,2,1,3.]],threshold:-4.4560048991115764e-005,right_val:0.4153054058551788,left_val:0.5613964796066284},{features:[[9,12,3,3,-1.],[9,13,3,1,3.]],threshold:-1.0240620467811823e-003,right_val:0.4566304087638855,left_val:0.5964478254318237},{features:[[7,0,3,3,-1.],[8,0,1,3,3.]],threshold:-2.3161689750850201e-003,right_val:0.5188159942626953,left_val:0.2976115047931671},{features:[[4,0,16,18,-1.],[4,9,16,9,2.]],threshold:0.5321757197380066,right_val:0.2202631980180740,left_val:0.5187839269638062},{features:[[1,1,16,14,-1.],[1,8,16,7,2.]],threshold:-0.1664305031299591,right_val:0.5060343146324158,left_val:0.1866022944450378},{features:[[3,9,15,4,-1.],[8,9,5,4,3.]],threshold:0.1125352978706360,right_val:0.1185022965073586,left_val:0.5212125182151794},{features:[[6,12,7,3,-1.],[6,13,7,1,3.]],threshold:9.3046864494681358e-003,right_val:0.6826149225234985,left_val:0.4589937031269074},{features:[[14,15,2,3,-1.],[14,16,2,1,3.]],threshold:-4.6255099587142467e-003,right_val:0.5225008726119995,left_val:0.3079940974712372},{features:[[2,3,16,14,-1.],[2,3,8,7,2.],[10,10,8,7,2.]],threshold:-0.1111646965146065,right_val:0.5080801844596863,left_val:0.2101044058799744},{features:[[16,2,4,18,-1.],[18,2,2,9,2.],[16,11,2,9,2.]],threshold:-0.0108884396031499,right_val:0.4790464043617249,left_val:0.5765355229377747},{features:[[4,15,2,3,-1.],[4,16,2,1,3.]],threshold:5.8564301580190659e-003,right_val:0.1563598960638046,left_val:0.5065100193023682},{features:[[16,2,4,18,-1.],[18,2,2,9,2.],[16,11,2,9,2.]],threshold:0.0548543892800808,right_val:0.7230510711669922,left_val:0.4966914951801300},{features:[[1,1,8,3,-1.],[1,2,8,1,3.]],threshold:-0.0111973397433758,right_val:0.5098798274993897,left_val:0.2194979041814804},{features:[[8,11,4,3,-1.],[8,12,4,1,3.]],threshold:4.4069071300327778e-003,right_val:0.6770902872085571,left_val:0.4778401851654053},{features:[[5,11,5,9,-1.],[5,14,5,3,3.]],threshold:-0.0636652931571007,right_val:0.5081024169921875,left_val:0.1936362981796265},{features:[[16,0,4,11,-1.],[16,0,2,11,2.]],threshold:-9.8081491887569427e-003,right_val:0.4810341000556946,left_val:0.5999063253402710},{features:[[7,0,6,1,-1.],[9,0,2,1,3.]],threshold:-2.1717099007219076e-003,right_val:0.5235472917556763,left_val:0.3338333964347839},{features:[[16,3,3,7,-1.],[17,3,1,7,3.]],threshold:-0.0133155202493072,right_val:0.4919213056564331,left_val:0.6617069840431213},{features:[[1,3,3,7,-1.],[2,3,1,7,3.]],threshold:2.5442079640924931e-003,right_val:0.6082184910774231,left_val:0.4488744139671326},{features:[[7,8,6,12,-1.],[7,12,6,4,3.]],threshold:0.0120378397405148,right_val:0.3292432129383087,left_val:0.5409392118453980},{features:[[0,0,4,11,-1.],[2,0,2,11,2.]],threshold:-0.0207010507583618,right_val:0.4594995975494385,left_val:0.6819120049476624},{features:[[14,0,6,20,-1.],[14,0,3,20,2.]],threshold:0.0276082791388035,right_val:0.5767282843589783,left_val:0.4630792140960693},{features:[[0,3,1,2,-1.],[0,4,1,1,2.]],threshold:1.2370620388537645e-003,right_val:0.2635016143321991,left_val:0.5165379047393799},{features:[[5,5,10,8,-1.],[10,5,5,4,2.],[5,9,5,4,2.]],threshold:-0.0376693382859230,right_val:0.5278980135917664,left_val:0.2536393105983734},{features:[[4,7,12,4,-1.],[4,7,6,2,2.],[10,9,6,2,2.]],threshold:-1.8057259730994701e-003,right_val:0.5517500042915344,left_val:0.3985156118869782}],threshold:50.6104812622070310},{simpleClassifiers:[{features:[[2,1,6,4,-1.],[5,1,3,4,2.]],threshold:4.4299028813838959e-003,right_val:0.6335226297378540,left_val:0.2891018092632294},{features:[[9,7,6,4,-1.],[12,7,3,2,2.],[9,9,3,2,2.]],threshold:-2.3813319858163595e-003,right_val:0.3477487862110138,left_val:0.6211789250373840},{features:[[5,6,2,6,-1.],[5,9,2,3,2.]],threshold:2.2915711160749197e-003,right_val:0.5582118034362793,left_val:0.2254412025213242},{features:[[9,16,6,4,-1.],[12,16,3,2,2.],[9,18,3,2,2.]],threshold:9.9457940086722374e-004,right_val:0.5930070877075195,left_val:0.3711710870265961},{features:[[9,4,2,12,-1.],[9,10,2,6,2.]],threshold:7.7164667891338468e-004,right_val:0.3347995877265930,left_val:0.5651720166206360},{features:[[7,1,6,18,-1.],[9,1,2,18,3.]],threshold:-1.1386410333216190e-003,right_val:0.5508630871772766,left_val:0.3069126009941101},{features:[[4,12,12,2,-1.],[8,12,4,2,3.]],threshold:-1.6403039626311511e-004,right_val:0.3699047863483429,left_val:0.5762827992439270},{features:[[8,8,6,2,-1.],[8,9,6,1,2.]],threshold:2.9793529392918572e-005,right_val:0.5437911152839661,left_val:0.2644244134426117},{features:[[8,0,3,6,-1.],[9,0,1,6,3.]],threshold:8.5774902254343033e-003,right_val:0.1795724928379059,left_val:0.5051138997077942},{features:[[11,18,3,2,-1.],[11,19,3,1,2.]],threshold:-2.6032689493149519e-004,right_val:0.4446826875209808,left_val:0.5826969146728516},{features:[[1,1,17,4,-1.],[1,3,17,2,2.]],threshold:-6.1404630541801453e-003,right_val:0.5346971750259399,left_val:0.3113852143287659},{features:[[11,8,4,12,-1.],[11,8,2,12,2.]],threshold:-0.0230869501829147,right_val:0.5331197977066040,left_val:0.3277946114540100},{features:[[8,14,4,3,-1.],[8,15,4,1,3.]],threshold:-0.0142436502501369,right_val:0.4588063061237335,left_val:0.7381709814071655},{features:[[12,3,2,17,-1.],[12,3,1,17,2.]],threshold:0.0194871295243502,right_val:0.2274471968412399,left_val:0.5256630778312683},{features:[[4,7,6,1,-1.],[6,7,2,1,3.]],threshold:-9.6681108698248863e-004,right_val:0.3815006911754608,left_val:0.5511230826377869},{features:[[18,3,2,3,-1.],[18,4,2,1,3.]],threshold:3.1474709976464510e-003,right_val:0.2543726861476898,left_val:0.5425636768341065},{features:[[8,4,3,4,-1.],[8,6,3,2,2.]],threshold:-1.8026070029009134e-004,right_val:0.3406304121017456,left_val:0.5380191802978516},{features:[[4,5,12,10,-1.],[4,10,12,5,2.]],threshold:-6.0266260989010334e-003,right_val:0.5420572161674500,left_val:0.3035801947116852},{features:[[5,18,4,2,-1.],[7,18,2,2,2.]],threshold:4.4462960795499384e-004,right_val:0.5660110116004944,left_val:0.3990997076034546},{features:[[17,2,3,6,-1.],[17,4,3,2,3.]],threshold:2.2609760053455830e-003,right_val:0.3940688073635101,left_val:0.5562806725502014},{features:[[7,7,6,6,-1.],[9,7,2,6,3.]],threshold:0.0511330589652061,right_val:0.7118561863899231,left_val:0.4609653949737549},{features:[[17,2,3,6,-1.],[17,4,3,2,3.]],threshold:-0.0177863091230392,right_val:0.5322144031524658,left_val:0.2316166013479233},{features:[[8,0,3,4,-1.],[9,0,1,4,3.]],threshold:-4.9679628573358059e-003,right_val:0.5122029185295105,left_val:0.2330771982669830},{features:[[9,14,2,3,-1.],[9,15,2,1,3.]],threshold:2.0667689386755228e-003,right_val:0.6455488204956055,left_val:0.4657444059848785},{features:[[0,12,6,3,-1.],[0,13,6,1,3.]],threshold:7.4413768015801907e-003,right_val:0.2361633926630020,left_val:0.5154392123222351},{features:[[8,14,4,3,-1.],[8,15,4,1,3.]],threshold:-3.6277279723435640e-003,right_val:0.4476661086082459,left_val:0.6219773292541504},{features:[[3,12,2,3,-1.],[3,13,2,1,3.]],threshold:-5.3530759178102016e-003,right_val:0.5102208256721497,left_val:0.1837355047464371},{features:[[5,6,12,7,-1.],[9,6,4,7,3.]],threshold:0.1453091949224472,right_val:0.1535930931568146,left_val:0.5145987272262573},{features:[[0,2,3,6,-1.],[0,4,3,2,3.]],threshold:2.4394490756094456e-003,right_val:0.3624661862850189,left_val:0.5343660116195679},{features:[[14,6,1,3,-1.],[14,7,1,1,3.]],threshold:-3.1283390708267689e-003,right_val:0.4845592081546783,left_val:0.6215007901191711},{features:[[2,0,3,14,-1.],[3,0,1,14,3.]],threshold:1.7940260004252195e-003,right_val:0.5824198126792908,left_val:0.4299261868000031},{features:[[12,14,5,6,-1.],[12,16,5,2,3.]],threshold:0.0362538211047649,right_val:0.1439467966556549,left_val:0.5260334014892578},{features:[[4,14,5,6,-1.],[4,16,5,2,3.]],threshold:-5.1746722310781479e-003,right_val:0.5287045240402222,left_val:0.3506538867950440},{features:[[11,10,2,2,-1.],[12,10,1,1,2.],[11,11,1,1,2.]],threshold:6.5383297624066472e-004,right_val:0.6122040152549744,left_val:0.4809640944004059},{features:[[5,0,3,14,-1.],[6,0,1,14,3.]],threshold:-0.0264802295714617,right_val:0.5045586228370667,left_val:0.1139362007379532},{features:[[10,15,2,3,-1.],[10,16,2,1,3.]],threshold:-3.0440660193562508e-003,right_val:0.4794734120368958,left_val:0.6352095007896423},{features:[[0,2,2,3,-1.],[0,3,2,1,3.]],threshold:3.6993520334362984e-003,right_val:0.2498510926961899,left_val:0.5131118297576904},{features:[[5,11,12,6,-1.],[5,14,12,3,2.]],threshold:-3.6762931267730892e-004,right_val:0.3709532022476196,left_val:0.5421394705772400},{features:[[6,11,3,9,-1.],[6,14,3,3,3.]],threshold:-0.0413822606205940,right_val:0.5081691741943359,left_val:0.1894959956407547},{features:[[11,10,2,2,-1.],[12,10,1,1,2.],[11,11,1,1,2.]],threshold:-1.0532729793339968e-003,right_val:0.4783608913421631,left_val:0.6454367041587830},{features:[[5,6,1,3,-1.],[5,7,1,1,3.]],threshold:-2.1648600231856108e-003,right_val:0.4499826133251190,left_val:0.6215031147003174},{features:[[4,9,13,3,-1.],[4,10,13,1,3.]],threshold:-5.6747748749330640e-004,right_val:0.5419334769248962,left_val:0.3712610900402069},{features:[[1,7,15,6,-1.],[6,7,5,6,3.]],threshold:0.1737584024667740,right_val:0.1215742006897926,left_val:0.5023643970489502},{features:[[4,5,12,6,-1.],[8,5,4,6,3.]],threshold:-2.9049699660390615e-003,right_val:0.5381883978843689,left_val:0.3240267932415009},{features:[[8,10,4,3,-1.],[8,11,4,1,3.]],threshold:1.2299539521336555e-003,right_val:0.5703486204147339,left_val:0.4165507853031158},{features:[[15,14,1,3,-1.],[15,15,1,1,3.]],threshold:-5.4329237900674343e-004,right_val:0.5547549128532410,left_val:0.3854042887687683},{features:[[1,11,5,3,-1.],[1,12,5,1,3.]],threshold:-8.3297258242964745e-003,right_val:0.5097082853317261,left_val:0.2204494029283524},{features:[[7,1,7,12,-1.],[7,7,7,6,2.]],threshold:-1.0417630255687982e-004,right_val:0.4303036034107208,left_val:0.5607066154479981},{features:[[0,1,6,10,-1.],[0,1,3,5,2.],[3,6,3,5,2.]],threshold:0.0312047004699707,right_val:0.6982004046440125,left_val:0.4621657133102417},{features:[[16,1,4,3,-1.],[16,2,4,1,3.]],threshold:7.8943502157926559e-003,right_val:0.2269068062305450,left_val:0.5269594192504883},{features:[[5,5,2,3,-1.],[5,6,2,1,3.]],threshold:-4.3645310215651989e-003,right_val:0.4537956118583679,left_val:0.6359223127365112},{features:[[12,2,3,5,-1.],[13,2,1,5,3.]],threshold:7.6793059706687927e-003,right_val:0.2740483880043030,left_val:0.5274767875671387},{features:[[0,3,4,6,-1.],[0,5,4,2,3.]],threshold:-0.0254311393946409,right_val:0.5071732997894287,left_val:0.2038519978523254},{features:[[8,12,4,2,-1.],[8,13,4,1,2.]],threshold:8.2000601105391979e-004,right_val:0.6119868159294128,left_val:0.4587455093860626},{features:[[8,18,3,1,-1.],[9,18,1,1,3.]],threshold:2.9284600168466568e-003,right_val:0.2028204947710037,left_val:0.5071274042129517},{features:[[11,10,2,2,-1.],[12,10,1,1,2.],[11,11,1,1,2.]],threshold:4.5256470912136137e-005,right_val:0.5430821776390076,left_val:0.4812104105949402},{features:[[7,10,2,2,-1.],[7,10,1,1,2.],[8,11,1,1,2.]],threshold:1.3158309739083052e-003,right_val:0.6779323220252991,left_val:0.4625813961029053},{features:[[11,11,4,4,-1.],[11,13,4,2,2.]],threshold:1.5870389761403203e-003,right_val:0.3431465029716492,left_val:0.5386291742324829},{features:[[8,12,3,8,-1.],[9,12,1,8,3.]],threshold:-0.0215396601706743,right_val:0.5003222823143005,left_val:0.0259425006806850},{features:[[13,0,6,3,-1.],[13,1,6,1,3.]],threshold:0.0143344802781940,right_val:0.1590632945299149,left_val:0.5202844738960266},{features:[[8,8,3,4,-1.],[9,8,1,4,3.]],threshold:-8.3881383761763573e-003,right_val:0.4648044109344482,left_val:0.7282481193542481},{features:[[5,7,10,10,-1.],[10,7,5,5,2.],[5,12,5,5,2.]],threshold:9.1906841844320297e-003,right_val:0.3923191130161285,left_val:0.5562356710433960},{features:[[3,18,8,2,-1.],[3,18,4,1,2.],[7,19,4,1,2.]],threshold:-5.8453059755265713e-003,right_val:0.4629127979278565,left_val:0.6803392767906189},{features:[[10,2,6,8,-1.],[12,2,2,8,3.]],threshold:-0.0547077991068363,right_val:0.5206125974655151,left_val:0.2561671137809753},{features:[[4,2,6,8,-1.],[6,2,2,8,3.]],threshold:9.1142775490880013e-003,right_val:0.3053877055644989,left_val:0.5189620256423950},{features:[[11,0,3,7,-1.],[12,0,1,7,3.]],threshold:-0.0155750000849366,right_val:0.5169094800949097,left_val:0.1295074969530106},{features:[[7,11,2,1,-1.],[8,11,1,1,2.]],threshold:-1.2050600344082341e-004,right_val:0.4230825006961823,left_val:0.5735098123550415},{features:[[15,14,1,3,-1.],[15,15,1,1,3.]],threshold:1.2273970060050488e-003,right_val:0.4079791903495789,left_val:0.5289878249168396},{features:[[7,15,2,2,-1.],[7,15,1,1,2.],[8,16,1,1,2.]],threshold:-1.2186600361019373e-003,right_val:0.4574409127235413,left_val:0.6575639843940735},{features:[[15,14,1,3,-1.],[15,15,1,1,3.]],threshold:-3.3256649039685726e-003,right_val:0.5195019841194153,left_val:0.3628047108650208},{features:[[6,0,3,7,-1.],[7,0,1,7,3.]],threshold:-0.0132883097976446,right_val:0.5043488740921021,left_val:0.1284265965223312},{features:[[18,1,2,7,-1.],[18,1,1,7,2.]],threshold:-3.3839771058410406e-003,right_val:0.4757505953311920,left_val:0.6292240023612976},{features:[[2,0,8,20,-1.],[2,10,8,10,2.]],threshold:-0.2195422053337097,right_val:0.5065013766288757,left_val:0.1487731933593750},{features:[[3,0,15,6,-1.],[3,2,15,2,3.]],threshold:4.9111708067357540e-003,right_val:0.5665838718414307,left_val:0.4256102144718170},{features:[[4,3,12,2,-1.],[4,4,12,1,2.]],threshold:-1.8744950648397207e-004,right_val:0.5586857199668884,left_val:0.4004144072532654},{features:[[16,0,4,5,-1.],[16,0,2,5,2.]],threshold:-5.2178641781210899e-003,right_val:0.4812706112861633,left_val:0.6009116172790527},{features:[[7,0,3,4,-1.],[8,0,1,4,3.]],threshold:-1.1111519997939467e-003,right_val:0.5287089943885803,left_val:0.3514933884143829},{features:[[16,0,4,5,-1.],[16,0,2,5,2.]],threshold:4.4036400504410267e-003,right_val:0.5924085974693298,left_val:0.4642275869846344},{features:[[1,7,6,13,-1.],[3,7,2,13,3.]],threshold:0.1229949966073036,right_val:0.0691524818539619,left_val:0.5025529265403748},{features:[[16,0,4,5,-1.],[16,0,2,5,2.]],threshold:-0.0123135102912784,right_val:0.4934012889862061,left_val:0.5884591937065125},{features:[[0,0,4,5,-1.],[2,0,2,5,2.]],threshold:4.1471039876341820e-003,right_val:0.5893477797508240,left_val:0.4372239112854004},{features:[[14,12,3,6,-1.],[14,14,3,2,3.]],threshold:-3.5502649843692780e-003,right_val:0.5396270155906677,left_val:0.4327551126480103},{features:[[3,12,3,6,-1.],[3,14,3,2,3.]],threshold:-0.0192242693156004,right_val:0.5068330764770508,left_val:0.1913134008646011},{features:[[16,1,4,3,-1.],[16,2,4,1,3.]],threshold:1.4395059552043676e-003,right_val:0.4243533015251160,left_val:0.5308178067207336},{features:[[8,7,2,10,-1.],[8,7,1,5,2.],[9,12,1,5,2.]],threshold:-6.7751999013125896e-003,right_val:0.4540086090564728,left_val:0.6365395784378052},{features:[[11,11,4,4,-1.],[11,13,4,2,2.]],threshold:7.0119630545377731e-003,right_val:0.3026199936866760,left_val:0.5189834237098694},{features:[[0,1,4,3,-1.],[0,2,4,1,3.]],threshold:5.4014651104807854e-003,right_val:0.2557682991027832,left_val:0.5105062127113342},{features:[[13,4,1,3,-1.],[13,5,1,1,3.]],threshold:9.0274988906458020e-004,right_val:0.5861827731132507,left_val:0.4696914851665497},{features:[[7,15,3,5,-1.],[8,15,1,5,3.]],threshold:0.0114744501188397,right_val:0.1527177989482880,left_val:0.5053645968437195},{features:[[9,7,3,5,-1.],[10,7,1,5,3.]],threshold:-6.7023430019617081e-003,right_val:0.4890604019165039,left_val:0.6508980989456177},{features:[[8,7,3,5,-1.],[9,7,1,5,3.]],threshold:-2.0462959073483944e-003,right_val:0.4514600038528442,left_val:0.6241816878318787},{features:[[10,6,4,14,-1.],[10,6,2,14,2.]],threshold:-9.9951568990945816e-003,right_val:0.5400953888893127,left_val:0.3432781100273132},{features:[[0,5,5,6,-1.],[0,7,5,2,3.]],threshold:-0.0357007086277008,right_val:0.5074077844619751,left_val:0.1878059059381485},{features:[[9,5,6,4,-1.],[9,5,3,4,2.]],threshold:4.5584561303257942e-004,right_val:0.5402569770812988,left_val:0.3805277049541473},{features:[[0,0,18,10,-1.],[6,0,6,10,3.]],threshold:-0.0542606003582478,right_val:0.4595097005367279,left_val:0.6843714714050293},{features:[[10,6,4,14,-1.],[10,6,2,14,2.]],threshold:6.0600461438298225e-003,right_val:0.4500527977943420,left_val:0.5502905249595642},{features:[[6,6,4,14,-1.],[8,6,2,14,2.]],threshold:-6.4791832119226456e-003,right_val:0.5310757160186768,left_val:0.3368858098983765},{features:[[13,4,1,3,-1.],[13,5,1,1,3.]],threshold:-1.4939469983801246e-003,right_val:0.4756175875663757,left_val:0.6487640142440796},{features:[[5,1,2,3,-1.],[6,1,1,3,2.]],threshold:1.4610530342906713e-005,right_val:0.5451064109802246,left_val:0.4034579098224640},{features:[[18,1,2,18,-1.],[19,1,1,9,2.],[18,10,1,9,2.]],threshold:-7.2321938350796700e-003,right_val:0.4824739992618561,left_val:0.6386873722076416},{features:[[2,1,4,3,-1.],[2,2,4,1,3.]],threshold:-4.0645818226039410e-003,right_val:0.5157335996627808,left_val:0.2986421883106232},{features:[[18,1,2,18,-1.],[19,1,1,9,2.],[18,10,1,9,2.]],threshold:0.0304630808532238,right_val:0.7159956097602844,left_val:0.5022199749946594},{features:[[1,14,4,6,-1.],[1,14,2,3,2.],[3,17,2,3,2.]],threshold:-8.0544911324977875e-003,right_val:0.4619275033473969,left_val:0.6492452025413513},{features:[[10,11,7,6,-1.],[10,13,7,2,3.]],threshold:0.0395051389932632,right_val:0.2450613975524902,left_val:0.5150570869445801},{features:[[0,10,6,10,-1.],[0,10,3,5,2.],[3,15,3,5,2.]],threshold:8.4530208259820938e-003,right_val:0.6394037008285523,left_val:0.4573669135570526},{features:[[11,0,3,4,-1.],[12,0,1,4,3.]],threshold:-1.1688120430335402e-003,right_val:0.5483661293983460,left_val:0.3865512013435364},{features:[[5,10,5,6,-1.],[5,13,5,3,2.]],threshold:2.8070670086890459e-003,right_val:0.2701480090618134,left_val:0.5128579139709473},{features:[[14,6,1,8,-1.],[14,10,1,4,2.]],threshold:4.7365209320560098e-004,right_val:0.5387461185455322,left_val:0.4051581919193268},{features:[[1,7,18,6,-1.],[1,7,9,3,2.],[10,10,9,3,2.]],threshold:0.0117410803213716,right_val:0.3719413876533508,left_val:0.5295950174331665},{features:[[9,7,2,2,-1.],[9,7,1,2,2.]],threshold:3.1833238899707794e-003,right_val:0.6895126104354858,left_val:0.4789406955242157},{features:[[5,9,4,5,-1.],[7,9,2,5,2.]],threshold:7.0241501089185476e-004,right_val:0.3918080925941467,left_val:0.5384489297866821}],threshold:54.6200714111328130},{simpleClassifiers:[{features:[[7,6,6,3,-1.],[9,6,2,3,3.]],threshold:0.0170599296689034,right_val:0.7142534852027893,left_val:0.3948527872562408},{features:[[1,0,18,4,-1.],[7,0,6,4,3.]],threshold:0.0218408405780792,right_val:0.6090016961097717,left_val:0.3370316028594971},{features:[[7,15,2,4,-1.],[7,17,2,2,2.]],threshold:2.4520049919374287e-004,right_val:0.5987902283668518,left_val:0.3500576019287109},{features:[[1,0,19,9,-1.],[1,3,19,3,3.]],threshold:8.3272606134414673e-003,right_val:0.5697240829467773,left_val:0.3267528116703033},{features:[[3,7,3,6,-1.],[3,9,3,2,3.]],threshold:5.7148298947140574e-004,right_val:0.5531656742095947,left_val:0.3044599890708923},{features:[[13,7,4,4,-1.],[15,7,2,2,2.],[13,9,2,2,2.]],threshold:6.7373987985774875e-004,right_val:0.5672631263732910,left_val:0.3650012016296387},{features:[[3,7,4,4,-1.],[3,7,2,2,2.],[5,9,2,2,2.]],threshold:3.4681590477703139e-005,right_val:0.5388727188110352,left_val:0.3313541114330292},{features:[[9,6,10,8,-1.],[9,10,10,4,2.]],threshold:-5.8563398197293282e-003,right_val:0.5498778820037842,left_val:0.2697942852973938},{features:[[3,8,14,12,-1.],[3,14,14,6,2.]],threshold:8.5102273151278496e-003,right_val:0.2762879133224487,left_val:0.5269358158111572},{features:[[6,5,10,12,-1.],[11,5,5,6,2.],[6,11,5,6,2.]],threshold:-0.0698172077536583,right_val:0.5259246826171875,left_val:0.2909603118896484},{features:[[9,11,2,3,-1.],[9,12,2,1,3.]],threshold:-8.6113670840859413e-004,right_val:0.4073697924613953,left_val:0.5892577171325684},{features:[[9,5,6,5,-1.],[9,5,3,5,2.]],threshold:9.7149249631911516e-004,right_val:0.5415862202644348,left_val:0.3523564040660858},{features:[[9,4,2,4,-1.],[9,6,2,2,2.]],threshold:-1.4727490452060010e-005,right_val:0.3503156006336212,left_val:0.5423017740249634},{features:[[9,5,6,5,-1.],[9,5,3,5,2.]],threshold:0.0484202913939953,right_val:0.3411195874214172,left_val:0.5193945765495300},{features:[[5,5,6,5,-1.],[8,5,3,5,2.]],threshold:1.3257140526548028e-003,right_val:0.5335376262664795,left_val:0.3157769143581390},{features:[[11,2,6,1,-1.],[13,2,2,1,3.]],threshold:1.4922149603080470e-005,right_val:0.5536553859710693,left_val:0.4451299905776978},{features:[[3,2,6,1,-1.],[5,2,2,1,3.]],threshold:-2.7173398993909359e-003,right_val:0.5248088836669922,left_val:0.3031741976737976},{features:[[13,5,2,3,-1.],[13,6,2,1,3.]],threshold:2.9219500720500946e-003,right_val:0.6606041789054871,left_val:0.4781453013420105},{features:[[0,10,1,4,-1.],[0,12,1,2,2.]],threshold:-1.9804988987743855e-003,right_val:0.5287625193595886,left_val:0.3186308145523071},{features:[[13,5,2,3,-1.],[13,6,2,1,3.]],threshold:-4.0012109093368053e-003,right_val:0.4749928116798401,left_val:0.6413596868515015},{features:[[8,18,3,2,-1.],[9,18,1,2,3.]],threshold:-4.3491991236805916e-003,right_val:0.5098996758460999,left_val:0.1507498025894165},{features:[[6,15,9,2,-1.],[6,16,9,1,2.]],threshold:1.3490889687091112e-003,right_val:0.5881167054176331,left_val:0.4316158890724182},{features:[[8,14,4,3,-1.],[8,15,4,1,3.]],threshold:0.0185970701277256,right_val:0.9089794158935547,left_val:0.4735553860664368},{features:[[18,4,2,4,-1.],[18,6,2,2,2.]],threshold:-1.8562379991635680e-003,right_val:0.5577837228775024,left_val:0.3553189039230347},{features:[[5,5,2,3,-1.],[5,6,2,1,3.]],threshold:2.2940430790185928e-003,right_val:0.6580877900123596,left_val:0.4500094950199127},{features:[[15,16,3,2,-1.],[15,17,3,1,2.]],threshold:2.9982850537635386e-004,right_val:0.3975878953933716,left_val:0.5629242062568665},{features:[[0,0,3,9,-1.],[0,3,3,3,3.]],threshold:3.5455459728837013e-003,right_val:0.3605485856533051,left_val:0.5381547212600708},{features:[[9,7,3,3,-1.],[9,8,3,1,3.]],threshold:9.6104722470045090e-003,right_val:0.1796745955944061,left_val:0.5255997180938721},{features:[[8,7,3,3,-1.],[8,8,3,1,3.]],threshold:-6.2783220782876015e-003,right_val:0.5114030241966248,left_val:0.2272856980562210},{features:[[9,5,2,6,-1.],[9,5,1,6,2.]],threshold:3.4598479978740215e-003,right_val:0.6608219146728516,left_val:0.4626308083534241},{features:[[8,6,3,4,-1.],[9,6,1,4,3.]],threshold:-1.3112019514665008e-003,right_val:0.4436857998371124,left_val:0.6317539811134338},{features:[[7,6,8,12,-1.],[11,6,4,6,2.],[7,12,4,6,2.]],threshold:2.6876179035753012e-003,right_val:0.4054022133350372,left_val:0.5421109795570374},{features:[[5,6,8,12,-1.],[5,6,4,6,2.],[9,12,4,6,2.]],threshold:3.9118169806897640e-003,right_val:0.3273454904556274,left_val:0.5358477830886841},{features:[[12,4,3,3,-1.],[12,5,3,1,3.]],threshold:-0.0142064504325390,right_val:0.4975781142711639,left_val:0.7793576717376709},{features:[[2,16,3,2,-1.],[2,17,3,1,2.]],threshold:7.1705528534948826e-004,right_val:0.3560903966426849,left_val:0.5297319889068604},{features:[[12,4,3,3,-1.],[12,5,3,1,3.]],threshold:1.6635019565001130e-003,right_val:0.5816481709480286,left_val:0.4678094089031220},{features:[[2,12,6,6,-1.],[2,14,6,2,3.]],threshold:3.3686188980937004e-003,right_val:0.3446420133113861,left_val:0.5276734232902527},{features:[[7,13,6,3,-1.],[7,14,6,1,3.]],threshold:0.0127995302900672,right_val:0.7472159266471863,left_val:0.4834679961204529},{features:[[6,14,6,3,-1.],[6,15,6,1,3.]],threshold:3.3901201095432043e-003,right_val:0.6401721239089966,left_val:0.4511859118938446},{features:[[14,15,5,3,-1.],[14,16,5,1,3.]],threshold:4.7070779837667942e-003,right_val:0.3555220961570740,left_val:0.5335658788681030},{features:[[5,4,3,3,-1.],[5,5,3,1,3.]],threshold:1.4819339849054813e-003,right_val:0.5772724151611328,left_val:0.4250707030296326},{features:[[14,15,5,3,-1.],[14,16,5,1,3.]],threshold:-6.9995759986341000e-003,right_val:0.5292900204658508,left_val:0.3003320097923279},{features:[[5,3,6,2,-1.],[7,3,2,2,3.]],threshold:0.0159390103071928,right_val:0.1675581932067871,left_val:0.5067319273948669},{features:[[8,15,4,3,-1.],[8,16,4,1,3.]],threshold:7.6377349905669689e-003,right_val:0.7085601091384888,left_val:0.4795069992542267},{features:[[1,15,5,3,-1.],[1,16,5,1,3.]],threshold:6.7334040068089962e-003,right_val:0.2162470072507858,left_val:0.5133113265037537},{features:[[8,13,4,6,-1.],[10,13,2,3,2.],[8,16,2,3,2.]],threshold:-0.0128588099032640,right_val:0.5251371860504150,left_val:0.1938841938972473},{features:[[7,8,3,3,-1.],[8,8,1,3,3.]],threshold:-6.2270800117403269e-004,right_val:0.4197868108749390,left_val:0.5686538219451904},{features:[[12,0,5,4,-1.],[12,2,5,2,2.]],threshold:-5.2651681471616030e-004,right_val:0.5429695844650269,left_val:0.4224168956279755},{features:[[0,2,20,2,-1.],[0,2,10,1,2.],[10,3,10,1,2.]],threshold:0.0110750999301672,right_val:0.2514517903327942,left_val:0.5113775134086609},{features:[[1,0,18,4,-1.],[7,0,6,4,3.]],threshold:-0.0367282517254353,right_val:0.4849618971347809,left_val:0.7194662094116211},{features:[[4,3,6,1,-1.],[6,3,2,1,3.]],threshold:-2.8207109426148236e-004,right_val:0.5394446253776550,left_val:0.3840261995792389},{features:[[4,18,13,2,-1.],[4,19,13,1,2.]],threshold:-2.7489690110087395e-003,right_val:0.4569182097911835,left_val:0.5937088727951050},{features:[[2,10,3,6,-1.],[2,12,3,2,3.]],threshold:0.0100475195795298,right_val:0.2802298069000244,left_val:0.5138576030731201},{features:[[14,12,6,8,-1.],[17,12,3,4,2.],[14,16,3,4,2.]],threshold:-8.1497840583324432e-003,right_val:0.4636121094226837,left_val:0.6090037226676941},{features:[[4,13,10,6,-1.],[4,13,5,3,2.],[9,16,5,3,2.]],threshold:-6.8833888508379459e-003,right_val:0.5254660248756409,left_val:0.3458611071109772},{features:[[14,12,1,2,-1.],[14,13,1,1,2.]],threshold:-1.4039360394235700e-005,right_val:0.4082083106040955,left_val:0.5693104267120361},{features:[[8,13,4,3,-1.],[8,14,4,1,3.]],threshold:1.5498419525101781e-003,right_val:0.5806517004966736,left_val:0.4350537061691284},{features:[[14,12,2,2,-1.],[14,13,2,1,2.]],threshold:-6.7841499112546444e-003,right_val:0.5182775259017944,left_val:0.1468873023986816},{features:[[4,12,2,2,-1.],[4,13,2,1,2.]],threshold:2.1705629478674382e-004,right_val:0.3456174135208130,left_val:0.5293524265289307},{features:[[8,12,9,2,-1.],[8,13,9,1,2.]],threshold:3.1198898795992136e-004,right_val:0.5942413806915283,left_val:0.4652450978755951},{features:[[9,14,2,3,-1.],[9,15,2,1,3.]],threshold:5.4507530294358730e-003,right_val:0.7024846076965332,left_val:0.4653508961200714},{features:[[11,10,3,6,-1.],[11,13,3,3,2.]],threshold:-2.5818689027801156e-004,right_val:0.3768967092037201,left_val:0.5497295260429382},{features:[[5,6,9,12,-1.],[5,12,9,6,2.]],threshold:-0.0174425393342972,right_val:0.5457497835159302,left_val:0.3919087946414948},{features:[[11,10,3,6,-1.],[11,13,3,3,2.]],threshold:-0.0453435294330120,right_val:0.5154908895492554,left_val:0.1631357073783875},{features:[[6,10,3,6,-1.],[6,13,3,3,2.]],threshold:1.9190689781680703e-003,right_val:0.2791895866394043,left_val:0.5145897865295410},{features:[[5,4,11,3,-1.],[5,5,11,1,3.]],threshold:-6.0177869163453579e-003,right_val:0.4756332933902741,left_val:0.6517636179924011},{features:[[7,1,5,10,-1.],[7,6,5,5,2.]],threshold:-4.0720738470554352e-003,right_val:0.4092685878276825,left_val:0.5514652729034424},{features:[[2,8,18,2,-1.],[2,9,18,1,2.]],threshold:3.9855059003457427e-004,right_val:0.5285550951957703,left_val:0.3165240883827210},{features:[[7,17,5,3,-1.],[7,18,5,1,3.]],threshold:-6.5418570302426815e-003,right_val:0.4652808904647827,left_val:0.6853377819061279},{features:[[5,9,12,1,-1.],[9,9,4,1,3.]],threshold:3.4845089539885521e-003,right_val:0.4502759873867035,left_val:0.5484588146209717},{features:[[0,14,6,6,-1.],[0,14,3,3,2.],[3,17,3,3,2.]],threshold:-0.0136967804282904,right_val:0.4572555124759674,left_val:0.6395779848098755},{features:[[5,9,12,1,-1.],[9,9,4,1,3.]],threshold:-0.0173471402376890,right_val:0.5181614756584168,left_val:0.2751072943210602},{features:[[3,9,12,1,-1.],[7,9,4,1,3.]],threshold:-4.0885428898036480e-003,right_val:0.5194984078407288,left_val:0.3325636088848114},{features:[[14,10,6,7,-1.],[14,10,3,7,2.]],threshold:-9.4687901437282562e-003,right_val:0.4851819872856140,left_val:0.5942280888557434},{features:[[1,0,16,2,-1.],[1,1,16,1,2.]],threshold:1.7084840219467878e-003,right_val:0.5519806146621704,left_val:0.4167110919952393},{features:[[10,9,10,9,-1.],[10,12,10,3,3.]],threshold:9.4809094443917274e-003,right_val:0.4208514988422394,left_val:0.5433894991874695},{features:[[0,1,10,2,-1.],[5,1,5,2,2.]],threshold:-4.7389650717377663e-003,right_val:0.4560655057430267,left_val:0.6407189965248108},{features:[[17,3,2,3,-1.],[17,4,2,1,3.]],threshold:6.5761050209403038e-003,right_val:0.2258227020502091,left_val:0.5214555263519287},{features:[[1,3,2,3,-1.],[1,4,2,1,3.]],threshold:-2.1690549328923225e-003,right_val:0.5156704783439636,left_val:0.3151527941226959},{features:[[9,7,3,6,-1.],[10,7,1,6,3.]],threshold:0.0146601703017950,right_val:0.6689941287040710,left_val:0.4870837032794952},{features:[[6,5,4,3,-1.],[8,5,2,3,2.]],threshold:1.7231999663636088e-004,right_val:0.5251078009605408,left_val:0.3569748997688294},{features:[[7,5,6,6,-1.],[9,5,2,6,3.]],threshold:-0.0218037609010935,right_val:0.4966329932212830,left_val:0.8825920820236206},{features:[[3,4,12,12,-1.],[3,4,6,6,2.],[9,10,6,6,2.]],threshold:-0.0947361066937447,right_val:0.5061113834381104,left_val:0.1446162015199661},{features:[[9,2,6,15,-1.],[11,2,2,15,3.]],threshold:5.5825551971793175e-003,right_val:0.4238066077232361,left_val:0.5396478772163391},{features:[[2,2,6,17,-1.],[4,2,2,17,3.]],threshold:1.9517090404406190e-003,right_val:0.5497786998748779,left_val:0.4170410931110382},{features:[[14,10,6,7,-1.],[14,10,3,7,2.]],threshold:0.0121499001979828,right_val:0.5664274096488953,left_val:0.4698367118835449},{features:[[0,10,6,7,-1.],[3,10,3,7,2.]],threshold:-7.5169620104134083e-003,right_val:0.4463135898113251,left_val:0.6267772912979126},{features:[[9,2,6,15,-1.],[11,2,2,15,3.]],threshold:-0.0716679096221924,right_val:0.5221003293991089,left_val:0.3097011148929596},{features:[[5,2,6,15,-1.],[7,2,2,15,3.]],threshold:-0.0882924199104309,right_val:0.5006365180015564,left_val:0.0811238884925842},{features:[[17,9,3,6,-1.],[17,11,3,2,3.]],threshold:0.0310630798339844,right_val:0.1282255947589874,left_val:0.5155503749847412},{features:[[6,7,6,6,-1.],[8,7,2,6,3.]],threshold:0.0466218404471874,right_val:0.7363960742950440,left_val:0.4699777960777283},{features:[[1,10,18,6,-1.],[10,10,9,3,2.],[1,13,9,3,2.]],threshold:-0.0121894897893071,right_val:0.5518996715545654,left_val:0.3920530080795288},{features:[[0,9,10,9,-1.],[0,12,10,3,3.]],threshold:0.0130161102861166,right_val:0.3685136139392853,left_val:0.5260658264160156},{features:[[8,15,4,3,-1.],[8,16,4,1,3.]],threshold:-3.4952899441123009e-003,right_val:0.4716280996799469,left_val:0.6339294910430908},{features:[[5,12,3,4,-1.],[5,14,3,2,2.]],threshold:-4.4015039748046547e-005,right_val:0.3776184916496277,left_val:0.5333027243614197},{features:[[3,3,16,12,-1.],[3,9,16,6,2.]],threshold:-0.1096649020910263,right_val:0.5198346972465515,left_val:0.1765342056751251},{features:[[1,1,12,12,-1.],[1,1,6,6,2.],[7,7,6,6,2.]],threshold:-9.0279558207839727e-004,right_val:0.3838908076286316,left_val:0.5324159860610962},{features:[[10,4,2,4,-1.],[11,4,1,2,2.],[10,6,1,2,2.]],threshold:7.1126641705632210e-004,right_val:0.5755224227905273,left_val:0.4647929966449738},{features:[[0,9,10,2,-1.],[0,9,5,1,2.],[5,10,5,1,2.]],threshold:-3.1250279862433672e-003,right_val:0.5166770815849304,left_val:0.3236708939075470},{features:[[9,11,3,3,-1.],[9,12,3,1,3.]],threshold:2.4144679773598909e-003,right_val:0.6459717750549316,left_val:0.4787439107894898},{features:[[3,12,9,2,-1.],[3,13,9,1,2.]],threshold:4.4391240226104856e-004,right_val:0.6010255813598633,left_val:0.4409308135509491},{features:[[9,9,2,2,-1.],[9,10,2,1,2.]],threshold:-2.2611189342569560e-004,right_val:0.5493255853652954,left_val:0.4038113951683044}],threshold:50.1697311401367190},{simpleClassifiers:[{features:[[3,4,13,6,-1.],[3,6,13,2,3.]],threshold:-0.0469012893736362,right_val:0.3743801116943359,left_val:0.6600171923637390},{features:[[9,7,6,4,-1.],[12,7,3,2,2.],[9,9,3,2,2.]],threshold:-1.4568349579349160e-003,right_val:0.3437797129154205,left_val:0.5783991217613220},{features:[[1,0,6,8,-1.],[4,0,3,8,2.]],threshold:5.5598369799554348e-003,right_val:0.5908216238021851,left_val:0.3622266948223114},{features:[[9,5,2,12,-1.],[9,11,2,6,2.]],threshold:7.3170487303286791e-004,right_val:0.2873558104038239,left_val:0.5500419139862061},{features:[[4,4,3,10,-1.],[4,9,3,5,2.]],threshold:1.3318009441718459e-003,right_val:0.5431019067764282,left_val:0.2673169970512390},{features:[[6,17,8,3,-1.],[6,18,8,1,3.]],threshold:2.4347059661522508e-004,right_val:0.5741388797760010,left_val:0.3855027854442596},{features:[[0,5,10,6,-1.],[0,7,10,2,3.]],threshold:-3.0512469820678234e-003,right_val:0.3462845087051392,left_val:0.5503209829330444},{features:[[13,2,3,2,-1.],[13,3,3,1,2.]],threshold:-6.8657199153676629e-004,right_val:0.5429509282112122,left_val:0.3291221857070923},{features:[[7,5,4,5,-1.],[9,5,2,5,2.]],threshold:1.4668200165033340e-003,right_val:0.5351811051368713,left_val:0.3588382005691528},{features:[[12,14,3,6,-1.],[12,16,3,2,3.]],threshold:3.2021870720200241e-004,right_val:0.5700234174728394,left_val:0.4296841919422150},{features:[[1,11,8,2,-1.],[1,12,8,1,2.]],threshold:7.4122188379988074e-004,right_val:0.3366870880126953,left_val:0.5282164812088013},{features:[[7,13,6,3,-1.],[7,14,6,1,3.]],threshold:3.8330298848450184e-003,right_val:0.6257336139678955,left_val:0.4559567868709564},{features:[[0,5,3,6,-1.],[0,7,3,2,3.]],threshold:-0.0154564399272203,right_val:0.5129452943801880,left_val:0.2350116968154907},{features:[[13,2,3,2,-1.],[13,3,3,1,2.]],threshold:2.6796779129654169e-003,right_val:0.4155062139034271,left_val:0.5329415202140808},{features:[[4,14,4,6,-1.],[4,14,2,3,2.],[6,17,2,3,2.]],threshold:2.8296569362282753e-003,right_val:0.5804538130760193,left_val:0.4273087978363037},{features:[[13,2,3,2,-1.],[13,3,3,1,2.]],threshold:-3.9444249123334885e-003,right_val:0.5202686190605164,left_val:0.2912611961364746},{features:[[8,2,4,12,-1.],[8,6,4,4,3.]],threshold:2.7179559692740440e-003,right_val:0.3585677146911621,left_val:0.5307688117027283},{features:[[14,0,6,8,-1.],[17,0,3,4,2.],[14,4,3,4,2.]],threshold:5.9077627956867218e-003,right_val:0.5941585898399353,left_val:0.4703775048255920},{features:[[7,17,3,2,-1.],[8,17,1,2,3.]],threshold:-4.2240349575877190e-003,right_val:0.5088796019554138,left_val:0.2141567021608353},{features:[[8,12,4,2,-1.],[8,13,4,1,2.]],threshold:4.0725888684391975e-003,right_val:0.6841061115264893,left_val:0.4766413867473602},{features:[[6,0,8,12,-1.],[6,0,4,6,2.],[10,6,4,6,2.]],threshold:0.0101495301350951,right_val:0.3748497068881989,left_val:0.5360798835754395},{features:[[14,0,2,10,-1.],[15,0,1,5,2.],[14,5,1,5,2.]],threshold:-1.8864999583456665e-004,right_val:0.3853805065155029,left_val:0.5720130205154419},{features:[[5,3,8,6,-1.],[5,3,4,3,2.],[9,6,4,3,2.]],threshold:-4.8864358104765415e-003,right_val:0.5340958833694458,left_val:0.3693122863769531},{features:[[14,0,6,10,-1.],[17,0,3,5,2.],[14,5,3,5,2.]],threshold:0.0261584799736738,right_val:0.6059989929199219,left_val:0.4962374866008759},{features:[[9,14,1,2,-1.],[9,15,1,1,2.]],threshold:4.8560759751126170e-004,right_val:0.6012468934059143,left_val:0.4438945949077606},{features:[[15,10,4,3,-1.],[15,11,4,1,3.]],threshold:0.0112687097862363,right_val:0.1840388029813767,left_val:0.5244250297546387},{features:[[8,14,2,3,-1.],[8,15,2,1,3.]],threshold:-2.8114619199186563e-003,right_val:0.4409897029399872,left_val:0.6060283780097961},{features:[[3,13,14,4,-1.],[10,13,7,2,2.],[3,15,7,2,2.]],threshold:-5.6112729944288731e-003,right_val:0.5589237213134766,left_val:0.3891170918941498},{features:[[1,10,4,3,-1.],[1,11,4,1,3.]],threshold:8.5680093616247177e-003,right_val:0.2062619030475617,left_val:0.5069345831871033},{features:[[9,11,6,1,-1.],[11,11,2,1,3.]],threshold:-3.8172779022715986e-004,right_val:0.4192610979080200,left_val:0.5882201790809631},{features:[[5,11,6,1,-1.],[7,11,2,1,3.]],threshold:-1.7680290329735726e-004,right_val:0.4003368914127350,left_val:0.5533605813980103},{features:[[3,5,16,15,-1.],[3,10,16,5,3.]],threshold:6.5112537704408169e-003,right_val:0.5444191098213196,left_val:0.3310146927833557},{features:[[6,12,4,2,-1.],[8,12,2,2,2.]],threshold:-6.5948683186434209e-005,right_val:0.3944905996322632,left_val:0.5433831810951233},{features:[[4,4,12,10,-1.],[10,4,6,5,2.],[4,9,6,5,2.]],threshold:6.9939051754772663e-003,right_val:0.4192714095115662,left_val:0.5600358247756958},{features:[[8,6,3,4,-1.],[9,6,1,4,3.]],threshold:-4.6744439750909805e-003,right_val:0.4604960978031158,left_val:0.6685466766357422},{features:[[8,12,4,8,-1.],[10,12,2,4,2.],[8,16,2,4,2.]],threshold:0.0115898502990603,right_val:0.2926830053329468,left_val:0.5357121229171753},{features:[[8,14,4,3,-1.],[8,15,4,1,3.]],threshold:0.0130078401416540,right_val:0.7307463288307190,left_val:0.4679817855358124},{features:[[12,2,3,2,-1.],[13,2,1,2,3.]],threshold:-1.1008579749614000e-003,right_val:0.5415065288543701,left_val:0.3937501013278961},{features:[[8,15,3,2,-1.],[8,16,3,1,2.]],threshold:6.0472649056464434e-004,right_val:0.5604041218757629,left_val:0.4242376089096069},{features:[[6,0,9,14,-1.],[9,0,3,14,3.]],threshold:-0.0144948400557041,right_val:0.5293182730674744,left_val:0.3631210029125214},{features:[[9,6,2,3,-1.],[10,6,1,3,2.]],threshold:-5.3056948818266392e-003,right_val:0.4621821045875549,left_val:0.6860452294349670},{features:[[10,8,2,3,-1.],[10,9,2,1,3.]],threshold:-8.1829127157106996e-004,right_val:0.5420439243316650,left_val:0.3944096863269806},{features:[[0,9,4,6,-1.],[0,11,4,2,3.]],threshold:-0.0190775208175182,right_val:0.5037891864776611,left_val:0.1962621957063675},{features:[[6,0,8,2,-1.],[6,1,8,1,2.]],threshold:3.5549470339901745e-004,right_val:0.5613973140716553,left_val:0.4086259007453919},{features:[[6,14,7,3,-1.],[6,15,7,1,3.]],threshold:1.9679730758070946e-003,right_val:0.5926123261451721,left_val:0.4489121139049530},{features:[[8,10,8,9,-1.],[8,13,8,3,3.]],threshold:6.9189141504466534e-003,right_val:0.3728385865688324,left_val:0.5335925817489624},{features:[[5,2,3,2,-1.],[6,2,1,2,3.]],threshold:2.9872779268771410e-003,right_val:0.2975643873214722,left_val:0.5111321210861206},{features:[[14,1,6,8,-1.],[17,1,3,4,2.],[14,5,3,4,2.]],threshold:-6.2264618463814259e-003,right_val:0.4824537932872772,left_val:0.5541489720344544},{features:[[0,1,6,8,-1.],[0,1,3,4,2.],[3,5,3,4,2.]],threshold:0.0133533002808690,right_val:0.6414797902107239,left_val:0.4586423933506012},{features:[[1,2,18,6,-1.],[10,2,9,3,2.],[1,5,9,3,2.]],threshold:0.0335052385926247,right_val:0.3429994881153107,left_val:0.5392425060272217},{features:[[9,3,2,1,-1.],[10,3,1,1,2.]],threshold:-2.5294460356235504e-003,right_val:0.5013315081596375,left_val:0.1703713983297348},{features:[[13,2,4,6,-1.],[15,2,2,3,2.],[13,5,2,3,2.]],threshold:-1.2801629491150379e-003,right_val:0.4697405099868774,left_val:0.5305461883544922},{features:[[5,4,3,3,-1.],[5,5,3,1,3.]],threshold:7.0687388069927692e-003,right_val:0.6436504721641541,left_val:0.4615545868873596},{features:[[13,5,1,3,-1.],[13,6,1,1,3.]],threshold:9.6880499040707946e-004,right_val:0.6043894290924072,left_val:0.4833599030971527},{features:[[2,16,5,3,-1.],[2,17,5,1,3.]],threshold:3.9647659286856651e-003,right_val:0.3231816887855530,left_val:0.5187637209892273},{features:[[13,2,4,6,-1.],[15,2,2,3,2.],[13,5,2,3,2.]],threshold:-0.0220577307045460,right_val:0.5200980901718140,left_val:0.4079256951808929},{features:[[3,2,4,6,-1.],[3,2,2,3,2.],[5,5,2,3,2.]],threshold:-6.6906312713399529e-004,right_val:0.3815600872039795,left_val:0.5331609249114990},{features:[[13,5,1,2,-1.],[13,6,1,1,2.]],threshold:-6.7009328631684184e-004,right_val:0.4688901901245117,left_val:0.5655422210693359},{features:[[5,5,2,2,-1.],[5,6,2,1,2.]],threshold:7.4284552829340100e-004,right_val:0.6287400126457214,left_val:0.4534381031990051},{features:[[13,9,2,2,-1.],[13,9,1,2,2.]],threshold:2.2227810695767403e-003,right_val:0.3303655982017517,left_val:0.5350633263587952},{features:[[5,9,2,2,-1.],[6,9,1,2,2.]],threshold:-5.4130521602928638e-003,right_val:0.5005434751510620,left_val:0.1113687008619309},{features:[[13,17,3,2,-1.],[13,18,3,1,2.]],threshold:-1.4520040167553816e-005,right_val:0.4325133860111237,left_val:0.5628737807273865},{features:[[6,16,4,4,-1.],[6,16,2,2,2.],[8,18,2,2,2.]],threshold:2.3369169502984732e-004,right_val:0.5447791218757629,left_val:0.4165835082530975},{features:[[9,16,2,3,-1.],[9,17,2,1,3.]],threshold:4.2894547805190086e-003,right_val:0.6778649091720581,left_val:0.4860391020774841},{features:[[0,13,9,6,-1.],[0,15,9,2,3.]],threshold:5.9103150852024555e-003,right_val:0.3612113893032074,left_val:0.5262305140495300},{features:[[9,14,2,6,-1.],[9,17,2,3,2.]],threshold:0.0129005396738648,right_val:0.3250288069248200,left_val:0.5319377183914185},{features:[[9,15,2,3,-1.],[9,16,2,1,3.]],threshold:4.6982979401946068e-003,right_val:0.6665925979614258,left_val:0.4618245065212250},{features:[[1,10,18,6,-1.],[1,12,18,2,3.]],threshold:0.0104398597031832,right_val:0.3883604109287262,left_val:0.5505670905113220},{features:[[8,11,4,2,-1.],[8,12,4,1,2.]],threshold:3.0443191062659025e-003,right_val:0.7301844954490662,left_val:0.4697853028774262},{features:[[7,9,6,2,-1.],[7,10,6,1,2.]],threshold:-6.1593751888722181e-004,right_val:0.5464984178543091,left_val:0.3830839097499847},{features:[[8,8,2,3,-1.],[8,9,2,1,3.]],threshold:-3.4247159492224455e-003,right_val:0.5089530944824219,left_val:0.2566300034523010},{features:[[17,5,3,4,-1.],[18,5,1,4,3.]],threshold:-9.3538565561175346e-003,right_val:0.4940795898437500,left_val:0.6469966173171997},{features:[[1,19,18,1,-1.],[7,19,6,1,3.]],threshold:0.0523389987647533,right_val:0.7878770828247070,left_val:0.4745982885360718},{features:[[9,0,3,2,-1.],[10,0,1,2,3.]],threshold:3.5765620414167643e-003,right_val:0.2748498022556305,left_val:0.5306664705276489},{features:[[1,8,1,6,-1.],[1,10,1,2,3.]],threshold:7.1555317845195532e-004,right_val:0.4041908979415894,left_val:0.5413125753402710},{features:[[12,17,8,3,-1.],[12,17,4,3,2.]],threshold:-0.0105166798457503,right_val:0.4815283119678497,left_val:0.6158512234687805},{features:[[0,5,3,4,-1.],[1,5,1,4,3.]],threshold:7.7347927726805210e-003,right_val:0.7028980851173401,left_val:0.4695805907249451},{features:[[9,7,2,3,-1.],[9,8,2,1,3.]],threshold:-4.3226778507232666e-003,right_val:0.5304684042930603,left_val:0.2849566042423248},{features:[[7,11,2,2,-1.],[7,11,1,1,2.],[8,12,1,1,2.]],threshold:-2.5534399319440126e-003,right_val:0.4688892066478729,left_val:0.7056984901428223},{features:[[11,3,2,5,-1.],[11,3,1,5,2.]],threshold:1.0268510231981054e-004,right_val:0.5573464035987854,left_val:0.3902932107448578},{features:[[7,3,2,5,-1.],[8,3,1,5,2.]],threshold:7.1395188570022583e-006,right_val:0.5263987779617310,left_val:0.3684231936931610},{features:[[15,13,2,3,-1.],[15,14,2,1,3.]],threshold:-1.6711989883333445e-003,right_val:0.5387271046638489,left_val:0.3849175870418549},{features:[[5,6,2,3,-1.],[5,7,2,1,3.]],threshold:4.9260449595749378e-003,right_val:0.7447251081466675,left_val:0.4729771912097931},{features:[[4,19,15,1,-1.],[9,19,5,1,3.]],threshold:4.3908702209591866e-003,right_val:0.5591921806335449,left_val:0.4809181094169617},{features:[[1,19,15,1,-1.],[6,19,5,1,3.]],threshold:-0.0177936293184757,right_val:0.4676927030086517,left_val:0.6903678178787231},{features:[[15,13,2,3,-1.],[15,14,2,1,3.]],threshold:2.0469669252634048e-003,right_val:0.3308162093162537,left_val:0.5370690226554871},{features:[[5,0,4,15,-1.],[7,0,2,15,2.]],threshold:0.0298914890736341,right_val:0.3309059143066406,left_val:0.5139865279197693},{features:[[9,6,2,5,-1.],[9,6,1,5,2.]],threshold:1.5494900289922953e-003,right_val:0.6078342795372009,left_val:0.4660237133502960},{features:[[9,5,2,7,-1.],[10,5,1,7,2.]],threshold:1.4956969534978271e-003,right_val:0.5863919854164124,left_val:0.4404835999011993},{features:[[16,11,3,3,-1.],[16,12,3,1,3.]],threshold:9.5885928021743894e-004,right_val:0.4208523035049439,left_val:0.5435971021652222},{features:[[1,11,3,3,-1.],[1,12,3,1,3.]],threshold:4.9643701640889049e-004,right_val:0.4000622034072876,left_val:0.5370578169822693},{features:[[6,6,8,3,-1.],[6,7,8,1,3.]],threshold:-2.7280810754746199e-003,right_val:0.4259642958641052,left_val:0.5659412741661072},{features:[[0,15,6,2,-1.],[0,16,6,1,2.]],threshold:2.3026480339467525e-003,right_val:0.3350869119167328,left_val:0.5161657929420471},{features:[[1,0,18,6,-1.],[7,0,6,6,3.]],threshold:0.2515163123607636,right_val:0.7147309780120850,left_val:0.4869661927223206},{features:[[6,0,3,4,-1.],[7,0,1,4,3.]],threshold:-4.6328022144734859e-003,right_val:0.5083789825439453,left_val:0.2727448940277100},{features:[[14,10,4,10,-1.],[16,10,2,5,2.],[14,15,2,5,2.]],threshold:-0.0404344908893108,right_val:0.5021767020225525,left_val:0.6851438879966736},{features:[[3,2,3,2,-1.],[4,2,1,2,3.]],threshold:1.4972220014897175e-005,right_val:0.5522555112838745,left_val:0.4284465014934540},{features:[[11,2,2,2,-1.],[11,3,2,1,2.]],threshold:-2.4050309730228037e-004,right_val:0.5390074849128723,left_val:0.4226118922233582},{features:[[2,10,4,10,-1.],[2,10,2,5,2.],[4,15,2,5,2.]],threshold:0.0236578397452831,right_val:0.7504366040229797,left_val:0.4744631946086884},{features:[[0,13,20,6,-1.],[10,13,10,3,2.],[0,16,10,3,2.]],threshold:-8.1449104472994804e-003,right_val:0.5538362860679627,left_val:0.4245058894157410},{features:[[0,5,2,15,-1.],[1,5,1,15,2.]],threshold:-3.6992130335420370e-003,right_val:0.4529713094234467,left_val:0.5952357053756714},{features:[[1,7,18,4,-1.],[10,7,9,2,2.],[1,9,9,2,2.]],threshold:-6.7718601785600185e-003,right_val:0.5473399758338928,left_val:0.4137794077396393},{features:[[0,0,2,17,-1.],[1,0,1,17,2.]],threshold:4.2669530957937241e-003,right_val:0.5797994136810303,left_val:0.4484114944934845},{features:[[2,6,16,6,-1.],[10,6,8,3,2.],[2,9,8,3,2.]],threshold:1.7791989957913756e-003,right_val:0.4432444870471954,left_val:0.5624858736991882},{features:[[8,14,1,3,-1.],[8,15,1,1,3.]],threshold:1.6774770338088274e-003,right_val:0.6364241838455200,left_val:0.4637751877307892},{features:[[8,15,4,2,-1.],[8,16,4,1,2.]],threshold:1.1732629500329494e-003,right_val:0.5914415717124939,left_val:0.4544503092765808},{features:[[5,2,8,2,-1.],[5,2,4,1,2.],[9,3,4,1,2.]],threshold:8.6998171173036098e-004,right_val:0.3885917961597443,left_val:0.5334752798080444},{features:[[6,11,8,6,-1.],[6,14,8,3,2.]],threshold:7.6378340600058436e-004,right_val:0.3744941949844360,left_val:0.5398585200309753},{features:[[9,13,2,2,-1.],[9,14,2,1,2.]],threshold:1.5684569370932877e-004,right_val:0.5614616274833679,left_val:0.4317873120307922},{features:[[18,4,2,6,-1.],[18,6,2,2,3.]],threshold:-0.0215113703161478,right_val:0.5185542702674866,left_val:0.1785925030708313},{features:[[9,12,2,2,-1.],[9,13,2,1,2.]],threshold:1.3081369979772717e-004,right_val:0.5682849884033203,left_val:0.4342499077320099},{features:[[18,4,2,6,-1.],[18,6,2,2,3.]],threshold:0.0219920407980680,right_val:0.2379394024610519,left_val:0.5161716938018799},{features:[[9,13,1,3,-1.],[9,14,1,1,3.]],threshold:-8.0136500764638186e-004,right_val:0.4466426968574524,left_val:0.5986763238906860},{features:[[18,4,2,6,-1.],[18,6,2,2,3.]],threshold:-8.2736099138855934e-003,right_val:0.5251057147979736,left_val:0.4108217954635620},{features:[[0,4,2,6,-1.],[0,6,2,2,3.]],threshold:3.6831789184361696e-003,right_val:0.3397518098354340,left_val:0.5173814296722412},{features:[[9,12,3,3,-1.],[9,13,3,1,3.]],threshold:-7.9525681212544441e-003,right_val:0.4845924079418182,left_val:0.6888983249664307},{features:[[3,13,2,3,-1.],[3,14,2,1,3.]],threshold:1.5382299898192286e-003,right_val:0.3454113900661469,left_val:0.5178567171096802},{features:[[13,13,4,3,-1.],[13,14,4,1,3.]],threshold:-0.0140435304492712,right_val:0.5188667774200440,left_val:0.1678421050310135},{features:[[5,4,3,3,-1.],[5,5,3,1,3.]],threshold:1.4315890148282051e-003,right_val:0.5655773878097534,left_val:0.4368256926536560},{features:[[5,2,10,6,-1.],[5,4,10,2,3.]],threshold:-0.0340142287313938,right_val:0.4959217011928558,left_val:0.7802296280860901},{features:[[3,13,4,3,-1.],[3,14,4,1,3.]],threshold:-0.0120272999629378,right_val:0.5032231807708740,left_val:0.1585101038217545},{features:[[3,7,15,5,-1.],[8,7,5,5,3.]],threshold:0.1331661939620972,right_val:0.2755128145217896,left_val:0.5163304805755615},{features:[[3,7,12,2,-1.],[7,7,4,2,3.]],threshold:-1.5221949433907866e-003,right_val:0.5214552283287048,left_val:0.3728317916393280},{features:[[10,3,3,9,-1.],[11,3,1,9,3.]],threshold:-9.3929271679371595e-004,right_val:0.4511165022850037,left_val:0.5838379263877869},{features:[[8,6,4,6,-1.],[10,6,2,6,2.]],threshold:0.0277197398245335,right_val:0.7331544756889343,left_val:0.4728286862373352},{features:[[9,7,4,3,-1.],[9,8,4,1,3.]],threshold:3.1030150130391121e-003,right_val:0.4101563096046448,left_val:0.5302202105522156},{features:[[0,9,4,9,-1.],[2,9,2,9,2.]],threshold:0.0778612196445465,right_val:0.1272961944341660,left_val:0.4998334050178528},{features:[[9,13,3,5,-1.],[10,13,1,5,3.]],threshold:-0.0158549398183823,right_val:0.5165656208992004,left_val:0.0508333593606949},{features:[[7,7,6,3,-1.],[9,7,2,3,3.]],threshold:-4.9725300632417202e-003,right_val:0.4684231877326965,left_val:0.6798133850097656},{features:[[9,7,3,5,-1.],[10,7,1,5,3.]],threshold:-9.7676506265997887e-004,right_val:0.4788931906223297,left_val:0.6010771989822388},{features:[[5,7,8,2,-1.],[9,7,4,2,2.]],threshold:-2.4647710379213095e-003,right_val:0.5220503807067871,left_val:0.3393397927284241},{features:[[5,9,12,2,-1.],[9,9,4,2,3.]],threshold:-6.7937700077891350e-003,right_val:0.5239663124084473,left_val:0.4365136921405792},{features:[[5,6,10,3,-1.],[10,6,5,3,2.]],threshold:0.0326080210506916,right_val:0.2425214946269989,left_val:0.5052723884582520},{features:[[10,12,3,1,-1.],[11,12,1,1,3.]],threshold:-5.8514421107247472e-004,right_val:0.4758574068546295,left_val:0.5733973979949951},{features:[[0,1,11,15,-1.],[0,6,11,5,3.]],threshold:-0.0296326000243425,right_val:0.5263597965240479,left_val:0.3892289102077484}],threshold:66.6691207885742190},{simpleClassifiers:[{features:[[1,0,18,6,-1.],[7,0,6,6,3.]],threshold:0.0465508513152599,right_val:0.6240522861480713,left_val:0.3276950120925903},{features:[[7,7,6,1,-1.],[9,7,2,1,3.]],threshold:7.9537127166986465e-003,right_val:0.6942939162254334,left_val:0.4256485104560852},{features:[[5,16,6,4,-1.],[5,16,3,2,2.],[8,18,3,2,2.]],threshold:6.8221561377868056e-004,right_val:0.5900732874870300,left_val:0.3711487054824829},{features:[[6,5,9,8,-1.],[6,9,9,4,2.]],threshold:-1.9348249770700932e-004,right_val:0.5300545096397400,left_val:0.2041133940219879},{features:[[5,10,2,6,-1.],[5,13,2,3,2.]],threshold:-2.6710508973337710e-004,right_val:0.3103179037570953,left_val:0.5416126251220703},{features:[[7,6,8,10,-1.],[11,6,4,5,2.],[7,11,4,5,2.]],threshold:2.7818060480058193e-003,right_val:0.3467069864273071,left_val:0.5277832746505737},{features:[[5,6,8,10,-1.],[5,6,4,5,2.],[9,11,4,5,2.]],threshold:-4.6779078547842801e-004,right_val:0.3294492065906525,left_val:0.5308231115341187},{features:[[9,5,2,2,-1.],[9,6,2,1,2.]],threshold:-3.0335160772665404e-005,right_val:0.3852097094058991,left_val:0.5773872733116150},{features:[[5,12,8,2,-1.],[5,13,8,1,2.]],threshold:7.8038009814918041e-004,right_val:0.6150057911872864,left_val:0.4317438900470734},{features:[[10,2,8,2,-1.],[10,3,8,1,2.]],threshold:-4.2553851380944252e-003,right_val:0.5324292778968811,left_val:0.2933903932571411},{features:[[4,0,2,10,-1.],[4,0,1,5,2.],[5,5,1,5,2.]],threshold:-2.4735610350035131e-004,right_val:0.3843030035495758,left_val:0.5468844771385193},{features:[[9,10,2,2,-1.],[9,11,2,1,2.]],threshold:-1.4724259381182492e-004,right_val:0.5755587220191956,left_val:0.4281542897224426},{features:[[2,8,15,3,-1.],[2,9,15,1,3.]],threshold:1.1864770203828812e-003,right_val:0.5471466183662415,left_val:0.3747301101684570},{features:[[8,13,4,3,-1.],[8,14,4,1,3.]],threshold:2.3936580400913954e-003,right_val:0.6111528873443604,left_val:0.4537783861160278},{features:[[7,2,3,2,-1.],[8,2,1,2,3.]],threshold:-1.5390539774671197e-003,right_val:0.5189538002014160,left_val:0.2971341907978058},{features:[[7,13,6,3,-1.],[7,14,6,1,3.]],threshold:-7.1968790143728256e-003,right_val:0.4726476967334747,left_val:0.6699066758155823},{features:[[9,9,2,2,-1.],[9,10,2,1,2.]],threshold:-4.1499789222143590e-004,right_val:0.5260317921638489,left_val:0.3384954035282135},{features:[[17,2,3,6,-1.],[17,4,3,2,3.]],threshold:4.4359830208122730e-003,right_val:0.3920140862464905,left_val:0.5399122238159180},{features:[[1,5,3,4,-1.],[2,5,1,4,3.]],threshold:2.6606200262904167e-003,right_val:0.6119617819786072,left_val:0.4482578039169312},{features:[[14,8,4,6,-1.],[14,10,4,2,3.]],threshold:-1.5287200221791863e-003,right_val:0.5340266227722168,left_val:0.3711237907409668},{features:[[1,4,3,8,-1.],[2,4,1,8,3.]],threshold:-4.7397250309586525e-003,right_val:0.4455145001411438,left_val:0.6031088232994080},{features:[[8,13,4,6,-1.],[8,16,4,3,2.]],threshold:-0.0148291299119592,right_val:0.5341861844062805,left_val:0.2838754057884216},{features:[[3,14,2,2,-1.],[3,15,2,1,2.]],threshold:9.2275557108223438e-004,right_val:0.3361653983592987,left_val:0.5209547281265259},{features:[[14,8,4,6,-1.],[14,10,4,2,3.]],threshold:0.0835298076272011,right_val:0.0811644494533539,left_val:0.5119969844818115},{features:[[2,8,4,6,-1.],[2,10,4,2,3.]],threshold:-7.5633148662745953e-004,right_val:0.5189831256866455,left_val:0.3317120075225830},{features:[[10,14,1,6,-1.],[10,17,1,3,2.]],threshold:9.8403859883546829e-003,right_val:0.2334959059953690,left_val:0.5247598290443420},{features:[[7,5,3,6,-1.],[8,5,1,6,3.]],threshold:-1.5953830443322659e-003,right_val:0.4295622110366821,left_val:0.5750094056129456},{features:[[11,2,2,6,-1.],[12,2,1,3,2.],[11,5,1,3,2.]],threshold:3.4766020689858124e-005,right_val:0.5564029216766357,left_val:0.4342445135116577},{features:[[6,6,6,5,-1.],[8,6,2,5,3.]],threshold:0.0298629105091095,right_val:0.6579188108444214,left_val:0.4579147100448608},{features:[[17,1,3,6,-1.],[17,3,3,2,3.]],threshold:0.0113255903124809,right_val:0.3673888146877289,left_val:0.5274311900138855},{features:[[8,7,3,5,-1.],[9,7,1,5,3.]],threshold:-8.7828645482659340e-003,right_val:0.4642167091369629,left_val:0.7100368738174439},{features:[[9,18,3,2,-1.],[10,18,1,2,3.]],threshold:4.3639959767460823e-003,right_val:0.2705877125263214,left_val:0.5279216170310974},{features:[[8,18,3,2,-1.],[9,18,1,2,3.]],threshold:4.1804728098213673e-003,right_val:0.2449083030223846,left_val:0.5072525143623352},{features:[[12,3,5,2,-1.],[12,4,5,1,2.]],threshold:-4.5668511302210391e-004,right_val:0.5548691153526306,left_val:0.4283105134963989},{features:[[7,1,5,12,-1.],[7,7,5,6,2.]],threshold:-3.7140368949621916e-003,right_val:0.4103653132915497,left_val:0.5519387722015381},{features:[[1,0,18,4,-1.],[7,0,6,4,3.]],threshold:-0.0253042895346880,right_val:0.4869889020919800,left_val:0.6867002248764038},{features:[[4,2,2,2,-1.],[4,3,2,1,2.]],threshold:-3.4454080741852522e-004,right_val:0.5287693142890930,left_val:0.3728874027729034},{features:[[11,14,4,2,-1.],[13,14,2,1,2.],[11,15,2,1,2.]],threshold:-8.3935231668874621e-004,right_val:0.4616062045097351,left_val:0.6060152053833008},{features:[[0,2,3,6,-1.],[0,4,3,2,3.]],threshold:0.0172800496220589,right_val:0.1819823980331421,left_val:0.5049635767936707},{features:[[9,7,2,3,-1.],[9,8,2,1,3.]],threshold:-6.3595077954232693e-003,right_val:0.5232778787612915,left_val:0.1631239950656891},{features:[[5,5,1,3,-1.],[5,6,1,1,3.]],threshold:1.0298109846189618e-003,right_val:0.6176549196243286,left_val:0.4463278055191040},{features:[[10,10,6,1,-1.],[10,10,3,1,2.]],threshold:1.0117109632119536e-003,right_val:0.4300698935985565,left_val:0.5473384857177734},{features:[[4,10,6,1,-1.],[7,10,3,1,2.]],threshold:-0.0103088002651930,right_val:0.5000867247581482,left_val:0.1166985034942627},{features:[[9,17,3,3,-1.],[9,18,3,1,3.]],threshold:5.4682018235325813e-003,right_val:0.6719213724136353,left_val:0.4769287109375000},{features:[[4,14,1,3,-1.],[4,15,1,1,3.]],threshold:-9.1696460731327534e-004,right_val:0.5178164839744568,left_val:0.3471089899539948},{features:[[12,5,3,3,-1.],[12,6,3,1,3.]],threshold:2.3922820109874010e-003,right_val:0.6216310858726502,left_val:0.4785236120223999},{features:[[4,5,12,3,-1.],[4,6,12,1,3.]],threshold:-7.5573818758130074e-003,right_val:0.4410085082054138,left_val:0.5814796090126038},{features:[[9,8,2,3,-1.],[9,9,2,1,3.]],threshold:-7.7024032361805439e-004,right_val:0.5465722084045410,left_val:0.3878000080585480},{features:[[4,9,3,3,-1.],[5,9,1,3,3.]],threshold:-8.7125990539789200e-003,right_val:0.4995836019515991,left_val:0.1660051047801971},{features:[[6,0,9,17,-1.],[9,0,3,17,3.]],threshold:-0.0103063201531768,right_val:0.5274233818054199,left_val:0.4093391001224518},{features:[[9,12,1,3,-1.],[9,13,1,1,3.]],threshold:-2.0940979011356831e-003,right_val:0.4572280049324036,left_val:0.6206194758415222},{features:[[9,5,2,15,-1.],[9,10,2,5,3.]],threshold:6.8099051713943481e-003,right_val:0.4155600070953369,left_val:0.5567759275436401},{features:[[8,14,2,3,-1.],[8,15,2,1,3.]],threshold:-1.0746059706434608e-003,right_val:0.4353024959564209,left_val:0.5638927817344666},{features:[[10,14,1,3,-1.],[10,15,1,1,3.]],threshold:2.1550289820879698e-003,right_val:0.6749758124351502,left_val:0.4826265871524811},{features:[[7,1,6,5,-1.],[9,1,2,5,3.]],threshold:0.0317423194646835,right_val:0.1883248984813690,left_val:0.5048379898071289},{features:[[0,0,20,2,-1.],[0,0,10,2,2.]],threshold:-0.0783827230334282,right_val:0.5260158181190491,left_val:0.2369548976421356},{features:[[2,13,5,3,-1.],[2,14,5,1,3.]],threshold:5.7415119372308254e-003,right_val:0.2776469886302948,left_val:0.5048828721046448},{features:[[9,11,2,3,-1.],[9,12,2,1,3.]],threshold:-2.9014600440859795e-003,right_val:0.4693317115306854,left_val:0.6238604784011841},{features:[[2,5,9,15,-1.],[2,10,9,5,3.]],threshold:-2.6427931152284145e-003,right_val:0.5169777274131775,left_val:0.3314141929149628},{features:[[5,0,12,10,-1.],[11,0,6,5,2.],[5,5,6,5,2.]],threshold:-0.1094966009259224,right_val:0.5183441042900085,left_val:0.2380045056343079},{features:[[5,1,2,3,-1.],[6,1,1,3,2.]],threshold:7.4075913289561868e-005,right_val:0.5362150073051453,left_val:0.4069635868072510},{features:[[10,7,6,1,-1.],[12,7,2,1,3.]],threshold:-5.0593802006915212e-004,right_val:0.4374594092369080,left_val:0.5506706237792969},{features:[[3,1,2,10,-1.],[3,1,1,5,2.],[4,6,1,5,2.]],threshold:-8.2131777890026569e-004,right_val:0.4209375977516174,left_val:0.5525709986686707},{features:[[13,7,2,1,-1.],[13,7,1,1,2.]],threshold:-6.0276539443293586e-005,right_val:0.4748266041278839,left_val:0.5455474853515625},{features:[[4,13,4,6,-1.],[4,15,4,2,3.]],threshold:6.8065142259001732e-003,right_val:0.3424577116966248,left_val:0.5157995820045471},{features:[[13,7,2,1,-1.],[13,7,1,1,2.]],threshold:1.7202789895236492e-003,right_val:0.6331263780593872,left_val:0.5013207793235779},{features:[[5,7,2,1,-1.],[6,7,1,1,2.]],threshold:-1.3016929733566940e-004,right_val:0.4226869940757752,left_val:0.5539718270301819},{features:[[2,12,18,4,-1.],[11,12,9,2,2.],[2,14,9,2,2.]],threshold:-4.8016388900578022e-003,right_val:0.5430780053138733,left_val:0.4425095021724701},{features:[[5,7,2,2,-1.],[5,7,1,1,2.],[6,8,1,1,2.]],threshold:-2.5399310979992151e-003,right_val:0.4697605073451996,left_val:0.7145782113075256},{features:[[16,3,4,2,-1.],[16,4,4,1,2.]],threshold:-1.4278929447755218e-003,right_val:0.5399605035781860,left_val:0.4070445001125336},{features:[[0,2,2,18,-1.],[0,2,1,9,2.],[1,11,1,9,2.]],threshold:-0.0251425504684448,right_val:0.4747352004051209,left_val:0.7884690761566162},{features:[[1,2,18,4,-1.],[10,2,9,2,2.],[1,4,9,2,2.]],threshold:-3.8899609353393316e-003,right_val:0.5577110052108765,left_val:0.4296191930770874},{features:[[9,14,1,3,-1.],[9,15,1,1,3.]],threshold:4.3947459198534489e-003,right_val:0.7023944258689880,left_val:0.4693162143230438},{features:[[2,12,18,4,-1.],[11,12,9,2,2.],[2,14,9,2,2.]],threshold:0.0246784202754498,right_val:0.3812510073184967,left_val:0.5242322087287903},{features:[[0,12,18,4,-1.],[0,12,9,2,2.],[9,14,9,2,2.]],threshold:0.0380476787686348,right_val:0.1687828004360199,left_val:0.5011739730834961},{features:[[11,4,5,3,-1.],[11,5,5,1,3.]],threshold:7.9424865543842316e-003,right_val:0.6369568109512329,left_val:0.4828582108020783},{features:[[6,4,7,3,-1.],[6,5,7,1,3.]],threshold:-1.5110049862414598e-003,right_val:0.4487667977809906,left_val:0.5906485915184021},{features:[[13,17,3,3,-1.],[13,18,3,1,3.]],threshold:6.4201741479337215e-003,right_val:0.2990570068359375,left_val:0.5241097807884216},{features:[[8,1,3,4,-1.],[9,1,1,4,3.]],threshold:-2.9802159406244755e-003,right_val:0.5078489780426025,left_val:0.3041465878486633},{features:[[11,4,2,4,-1.],[11,4,1,4,2.]],threshold:-7.4580078944563866e-004,right_val:0.5256826281547546,left_val:0.4128139019012451},{features:[[0,17,9,3,-1.],[3,17,3,3,3.]],threshold:-0.0104709500446916,right_val:0.4494296014308929,left_val:0.5808395147323608},{features:[[11,0,2,8,-1.],[12,0,1,4,2.],[11,4,1,4,2.]],threshold:9.3369204550981522e-003,right_val:0.2658948898315430,left_val:0.5246552824974060},{features:[[0,8,6,12,-1.],[0,8,3,6,2.],[3,14,3,6,2.]],threshold:0.0279369000345469,right_val:0.7087256908416748,left_val:0.4674955010414124},{features:[[10,7,4,12,-1.],[10,13,4,6,2.]],threshold:7.4277678504586220e-003,right_val:0.3758518099784851,left_val:0.5409486889839172},{features:[[5,3,8,14,-1.],[5,10,8,7,2.]],threshold:-0.0235845092684031,right_val:0.5238550901412964,left_val:0.3758639991283417},{features:[[14,10,6,1,-1.],[14,10,3,1,2.]],threshold:1.1452640173956752e-003,right_val:0.5804247260093689,left_val:0.4329578876495361},{features:[[0,4,10,4,-1.],[0,6,10,2,2.]],threshold:-4.3468660442158580e-004,right_val:0.3873069882392883,left_val:0.5280618071556091},{features:[[10,0,5,8,-1.],[10,4,5,4,2.]],threshold:0.0106485402211547,right_val:0.5681251883506775,left_val:0.4902113080024719},{features:[[8,1,4,8,-1.],[8,1,2,4,2.],[10,5,2,4,2.]],threshold:-3.9418050437234342e-004,right_val:0.4318251013755798,left_val:0.5570880174636841},{features:[[9,11,6,1,-1.],[11,11,2,1,3.]],threshold:-1.3270479394122958e-004,right_val:0.4343554973602295,left_val:0.5658439993858337},{features:[[8,9,3,4,-1.],[9,9,1,4,3.]],threshold:-2.0125510636717081e-003,right_val:0.4537523984909058,left_val:0.6056739091873169},{features:[[18,4,2,6,-1.],[18,6,2,2,3.]],threshold:2.4854319635778666e-003,right_val:0.4138010144233704,left_val:0.5390477180480957},{features:[[8,8,3,4,-1.],[9,8,1,4,3.]],threshold:1.8237880431115627e-003,right_val:0.5717188715934753,left_val:0.4354828894138336},{features:[[7,1,13,3,-1.],[7,2,13,1,3.]],threshold:-0.0166566595435143,right_val:0.5216122865676880,left_val:0.3010913133621216},{features:[[7,13,6,1,-1.],[9,13,2,1,3.]],threshold:8.0349558265879750e-004,right_val:0.3818396925926209,left_val:0.5300151109695435},{features:[[12,11,3,6,-1.],[12,13,3,2,3.]],threshold:3.4170378930866718e-003,right_val:0.4241400063037872,left_val:0.5328028798103333},{features:[[5,11,6,1,-1.],[7,11,2,1,3.]],threshold:-3.6222729249857366e-004,right_val:0.4186977148056030,left_val:0.5491728186607361},{features:[[1,4,18,10,-1.],[10,4,9,5,2.],[1,9,9,5,2.]],threshold:-0.1163002029061317,right_val:0.5226451158523560,left_val:0.1440722048282623},{features:[[8,6,4,9,-1.],[8,9,4,3,3.]],threshold:-0.0146950101479888,right_val:0.4715717136859894,left_val:0.7747725248336792},{features:[[8,6,4,3,-1.],[8,7,4,1,3.]],threshold:2.1972130052745342e-003,right_val:0.3315644860267639,left_val:0.5355433821678162},{features:[[8,7,3,3,-1.],[9,7,1,3,3.]],threshold:-4.6965209185145795e-004,right_val:0.4458136856555939,left_val:0.5767235159873962},{features:[[14,15,4,3,-1.],[14,16,4,1,3.]],threshold:6.5144998952746391e-003,right_val:0.3647888898849487,left_val:0.5215674042701721},{features:[[5,10,3,10,-1.],[6,10,1,10,3.]],threshold:0.0213000606745481,right_val:0.1567950993776321,left_val:0.4994204938411713},{features:[[8,15,4,3,-1.],[8,16,4,1,3.]],threshold:3.1881409231573343e-003,right_val:0.6287270188331604,left_val:0.4742200076580048},{features:[[0,8,1,6,-1.],[0,10,1,2,3.]],threshold:9.0019777417182922e-004,right_val:0.3943752050399780,left_val:0.5347954034805298},{features:[[10,15,1,3,-1.],[10,16,1,1,3.]],threshold:-5.1772277802228928e-003,right_val:0.5013138055801392,left_val:0.6727191805839539},{features:[[2,15,4,3,-1.],[2,16,4,1,3.]],threshold:-4.3764649890363216e-003,right_val:0.5128793120384216,left_val:0.3106675148010254},{features:[[18,3,2,8,-1.],[19,3,1,4,2.],[18,7,1,4,2.]],threshold:2.6299960445612669e-003,right_val:0.5755215883255005,left_val:0.4886310100555420},{features:[[0,3,2,8,-1.],[0,3,1,4,2.],[1,7,1,4,2.]],threshold:-2.0458688959479332e-003,right_val:0.4558076858520508,left_val:0.6025794148445129},{features:[[3,7,14,10,-1.],[10,7,7,5,2.],[3,12,7,5,2.]],threshold:0.0694827064871788,right_val:0.2185259014368057,left_val:0.5240747928619385},{features:[[0,7,19,3,-1.],[0,8,19,1,3.]],threshold:0.0240489393472672,right_val:0.2090622037649155,left_val:0.5011867284774780},{features:[[12,6,3,3,-1.],[12,7,3,1,3.]],threshold:3.1095340382307768e-003,right_val:0.7108548283576965,left_val:0.4866712093353272},{features:[[0,6,1,3,-1.],[0,7,1,1,3.]],threshold:-1.2503260513767600e-003,right_val:0.5156195163726807,left_val:0.3407891094684601},{features:[[12,6,3,3,-1.],[12,7,3,1,3.]],threshold:-1.0281190043315291e-003,right_val:0.4439432024955750,left_val:0.5575572252273560},{features:[[5,6,3,3,-1.],[5,7,3,1,3.]],threshold:-8.8893622159957886e-003,right_val:0.4620442092418671,left_val:0.6402000784873962},{features:[[8,2,4,2,-1.],[8,3,4,1,2.]],threshold:-6.1094801640138030e-004,right_val:0.5448899865150452,left_val:0.3766441941261292},{features:[[6,3,4,12,-1.],[8,3,2,12,2.]],threshold:-5.7686357758939266e-003,right_val:0.5133677124977112,left_val:0.3318648934364319},{features:[[13,6,2,3,-1.],[13,7,2,1,3.]],threshold:1.8506490159779787e-003,right_val:0.6406934857368469,left_val:0.4903570115566254},{features:[[0,10,20,4,-1.],[0,12,20,2,2.]],threshold:-0.0997994691133499,right_val:0.5015562176704407,left_val:0.1536051034927368},{features:[[2,0,17,14,-1.],[2,7,17,7,2.]],threshold:-0.3512834906578064,right_val:0.5174378752708435,left_val:0.0588231310248375},{features:[[0,0,6,10,-1.],[0,0,3,5,2.],[3,5,3,5,2.]],threshold:-0.0452445708215237,right_val:0.4677872955799103,left_val:0.6961488723754883},{features:[[14,6,6,4,-1.],[14,6,3,4,2.]],threshold:0.0714815780520439,right_val:0.1038092970848084,left_val:0.5167986154556274},{features:[[0,6,6,4,-1.],[3,6,3,4,2.]],threshold:2.1895780228078365e-003,right_val:0.5532060861587524,left_val:0.4273078143596649},{features:[[13,2,7,2,-1.],[13,3,7,1,2.]],threshold:-5.9242651332169771e-004,right_val:0.5276389122009277,left_val:0.4638943970203400},{features:[[0,2,7,2,-1.],[0,3,7,1,2.]],threshold:1.6788389766588807e-003,right_val:0.3932034969329834,left_val:0.5301648974418640},{features:[[6,11,14,2,-1.],[13,11,7,1,2.],[6,12,7,1,2.]],threshold:-2.2163488902151585e-003,right_val:0.4757033884525299,left_val:0.5630694031715393},{features:[[8,5,2,2,-1.],[8,5,1,1,2.],[9,6,1,1,2.]],threshold:1.1568699846975505e-004,right_val:0.5535702705383301,left_val:0.4307535886764526},{features:[[13,9,2,3,-1.],[13,9,1,3,2.]],threshold:-7.2017288766801357e-003,right_val:0.5193064212799072,left_val:0.1444882005453110},{features:[[1,1,3,12,-1.],[2,1,1,12,3.]],threshold:8.9081272017210722e-004,right_val:0.5593621134757996,left_val:0.4384432137012482},{features:[[17,4,1,3,-1.],[17,5,1,1,3.]],threshold:1.9605009583756328e-004,right_val:0.4705956876277924,left_val:0.5340415835380554},{features:[[2,4,1,3,-1.],[2,5,1,1,3.]],threshold:5.2022142335772514e-004,right_val:0.3810079097747803,left_val:0.5213856101036072},{features:[[14,5,1,3,-1.],[14,6,1,1,3.]],threshold:9.4588572392240167e-004,right_val:0.6130738854408264,left_val:0.4769414961338043},{features:[[7,16,2,3,-1.],[7,17,2,1,3.]],threshold:9.1698471806012094e-005,right_val:0.5429363250732422,left_val:0.4245009124279022},{features:[[8,13,4,6,-1.],[10,13,2,3,2.],[8,16,2,3,2.]],threshold:2.1833200007677078e-003,right_val:0.4191075861454010,left_val:0.5457730889320374},{features:[[5,5,1,3,-1.],[5,6,1,1,3.]],threshold:-8.6039671441540122e-004,right_val:0.4471659958362579,left_val:0.5764588713645935},{features:[[16,0,4,20,-1.],[16,0,2,20,2.]],threshold:-0.0132362395524979,right_val:0.4695009887218475,left_val:0.6372823119163513},{features:[[5,1,2,6,-1.],[5,1,1,3,2.],[6,4,1,3,2.]],threshold:4.3376701069064438e-004,right_val:0.3945829868316650,left_val:0.5317873954772949}],threshold:67.6989212036132810},{simpleClassifiers:[{features:[[5,4,10,4,-1.],[5,6,10,2,2.]],threshold:-0.0248471498489380,right_val:0.3873311877250671,left_val:0.6555516719818115},{features:[[15,2,4,12,-1.],[15,2,2,12,2.]],threshold:6.1348611488938332e-003,right_val:0.5973997712135315,left_val:0.3748072087764740},{features:[[7,6,4,12,-1.],[7,12,4,6,2.]],threshold:6.4498498104512691e-003,right_val:0.2548811137676239,left_val:0.5425491929054260},{features:[[14,5,1,8,-1.],[14,9,1,4,2.]],threshold:6.3491211039945483e-004,right_val:0.5387253761291504,left_val:0.2462442070245743},{features:[[1,4,14,10,-1.],[1,4,7,5,2.],[8,9,7,5,2.]],threshold:1.4023890253156424e-003,right_val:0.3528657853603363,left_val:0.5594322085380554},{features:[[11,6,6,14,-1.],[14,6,3,7,2.],[11,13,3,7,2.]],threshold:3.0044000595808029e-004,right_val:0.5765938162803650,left_val:0.3958503901958466},{features:[[3,6,6,14,-1.],[3,6,3,7,2.],[6,13,3,7,2.]],threshold:1.0042409849120304e-004,right_val:0.5534998178482056,left_val:0.3698996901512146},{features:[[4,9,15,2,-1.],[9,9,5,2,3.]],threshold:-5.0841490738093853e-003,right_val:0.5547800064086914,left_val:0.3711090981960297},{features:[[7,14,6,3,-1.],[7,15,6,1,3.]],threshold:-0.0195372607558966,right_val:0.4579297006130219,left_val:0.7492755055427551},{features:[[6,3,14,4,-1.],[13,3,7,2,2.],[6,5,7,2,2.]],threshold:-7.4532740654831287e-006,right_val:0.3904069960117340,left_val:0.5649787187576294},{features:[[1,9,15,2,-1.],[6,9,5,2,3.]],threshold:-3.6079459823668003e-003,right_val:0.5267801284790039,left_val:0.3381088078022003},{features:[[6,11,8,9,-1.],[6,14,8,3,3.]],threshold:2.0697501022368670e-003,right_val:0.3714388906955719,left_val:0.5519291162490845},{features:[[7,4,3,8,-1.],[8,4,1,8,3.]],threshold:-4.6463840408250690e-004,right_val:0.4113566875457764,left_val:0.5608214735984802},{features:[[14,6,2,6,-1.],[14,9,2,3,2.]],threshold:7.5490452582016587e-004,right_val:0.5329356193542481,left_val:0.3559206128120422},{features:[[5,7,6,4,-1.],[5,7,3,2,2.],[8,9,3,2,2.]],threshold:-9.8322238773107529e-004,right_val:0.3763205111026764,left_val:0.5414795875549316},{features:[[1,1,18,19,-1.],[7,1,6,19,3.]],threshold:-0.0199406407773495,right_val:0.4705299139022827,left_val:0.6347903013229370},{features:[[1,2,6,5,-1.],[4,2,3,5,2.]],threshold:3.7680300883948803e-003,right_val:0.5563716292381287,left_val:0.3913489878177643},{features:[[12,17,6,2,-1.],[12,18,6,1,2.]],threshold:-9.4528505578637123e-003,right_val:0.5215116739273071,left_val:0.2554892897605896},{features:[[2,17,6,2,-1.],[2,18,6,1,2.]],threshold:2.9560849070549011e-003,right_val:0.3063920140266419,left_val:0.5174679160118103},{features:[[17,3,3,6,-1.],[17,5,3,2,3.]],threshold:9.1078737750649452e-003,right_val:0.2885963022708893,left_val:0.5388448238372803},{features:[[8,17,3,3,-1.],[8,18,3,1,3.]],threshold:1.8219229532405734e-003,right_val:0.5852196812629700,left_val:0.4336043000221252},{features:[[10,13,2,6,-1.],[10,16,2,3,2.]],threshold:0.0146887395530939,right_val:0.2870005965232849,left_val:0.5287361741065979},{features:[[7,13,6,3,-1.],[7,14,6,1,3.]],threshold:-0.0143879903480411,right_val:0.4647370874881744,left_val:0.7019448876380920},{features:[[17,3,3,6,-1.],[17,5,3,2,3.]],threshold:-0.0189866498112679,right_val:0.5247011780738831,left_val:0.2986552119255066},{features:[[8,13,2,3,-1.],[8,14,2,1,3.]],threshold:1.1527639580890536e-003,right_val:0.5931661725044251,left_val:0.4323473870754242},{features:[[9,3,6,2,-1.],[11,3,2,2,3.]],threshold:0.0109336702153087,right_val:0.3130319118499756,left_val:0.5286864042282105},{features:[[0,3,3,6,-1.],[0,5,3,2,3.]],threshold:-0.0149327302351594,right_val:0.5084077119827271,left_val:0.2658419013023377},{features:[[8,5,4,6,-1.],[8,7,4,2,3.]],threshold:-2.9970539617352188e-004,right_val:0.3740724027156830,left_val:0.5463526844978333},{features:[[5,5,3,2,-1.],[5,6,3,1,2.]],threshold:4.1677621193230152e-003,right_val:0.7435721755027771,left_val:0.4703496992588043},{features:[[10,1,3,4,-1.],[11,1,1,4,3.]],threshold:-6.3905320130288601e-003,right_val:0.5280538201332092,left_val:0.2069258987903595},{features:[[1,2,5,9,-1.],[1,5,5,3,3.]],threshold:4.5029609464108944e-003,right_val:0.3483543097972870,left_val:0.5182648897171021},{features:[[13,6,2,3,-1.],[13,7,2,1,3.]],threshold:-9.2040365561842918e-003,right_val:0.4932360053062439,left_val:0.6803777217864990},{features:[[0,6,14,3,-1.],[7,6,7,3,2.]],threshold:0.0813272595405579,right_val:0.2253051996231079,left_val:0.5058398842811585},{features:[[2,11,18,8,-1.],[2,15,18,4,2.]],threshold:-0.1507928073406220,right_val:0.5264679789543152,left_val:0.2963424921035767},{features:[[5,6,2,3,-1.],[5,7,2,1,3.]],threshold:3.3179009333252907e-003,right_val:0.7072932124137878,left_val:0.4655495882034302},{features:[[10,6,4,2,-1.],[12,6,2,1,2.],[10,7,2,1,2.]],threshold:7.7402801252901554e-004,right_val:0.5668237805366516,left_val:0.4780347943305969},{features:[[6,6,4,2,-1.],[6,6,2,1,2.],[8,7,2,1,2.]],threshold:6.8199541419744492e-004,right_val:0.5722156763076782,left_val:0.4286996126174927},{features:[[10,1,3,4,-1.],[11,1,1,4,3.]],threshold:5.3671570494771004e-003,right_val:0.3114621937274933,left_val:0.5299307107925415},{features:[[7,1,2,7,-1.],[8,1,1,7,2.]],threshold:9.7018666565418243e-005,right_val:0.5269461870193481,left_val:0.3674638867378235},{features:[[4,2,15,14,-1.],[4,9,15,7,2.]],threshold:-0.1253408938646317,right_val:0.5245791077613831,left_val:0.2351492047309876},{features:[[8,7,3,2,-1.],[9,7,1,2,3.]],threshold:-5.2516269497573376e-003,right_val:0.4693767130374908,left_val:0.7115936875343323},{features:[[2,3,18,4,-1.],[11,3,9,2,2.],[2,5,9,2,2.]],threshold:-7.8342109918594360e-003,right_val:0.5409085750579834,left_val:0.4462651014328003},{features:[[9,7,2,2,-1.],[10,7,1,2,2.]],threshold:-1.1310069821774960e-003,right_val:0.4417662024497986,left_val:0.5945618748664856},{features:[[13,9,2,3,-1.],[13,9,1,3,2.]],threshold:1.7601120052859187e-003,right_val:0.3973453044891357,left_val:0.5353249907493591},{features:[[5,2,6,2,-1.],[7,2,2,2,3.]],threshold:-8.1581249833106995e-004,right_val:0.5264726877212524,left_val:0.3760268092155457},{features:[[9,5,2,7,-1.],[9,5,1,7,2.]],threshold:-3.8687589112669230e-003,right_val:0.4749819934368134,left_val:0.6309912800788879},{features:[[5,9,2,3,-1.],[6,9,1,3,2.]],threshold:1.5207129763439298e-003,right_val:0.3361223936080933,left_val:0.5230181813240051},{features:[[6,0,14,18,-1.],[6,9,14,9,2.]],threshold:0.5458673834800720,right_val:0.1172635033726692,left_val:0.5167139768600464},{features:[[2,16,6,3,-1.],[2,17,6,1,3.]],threshold:0.0156501904129982,right_val:0.1393294930458069,left_val:0.4979439079761505},{features:[[9,7,3,6,-1.],[10,7,1,6,3.]],threshold:-0.0117318602278829,right_val:0.4921196103096008,left_val:0.7129650712013245},{features:[[7,8,4,3,-1.],[7,9,4,1,3.]],threshold:-6.1765122227370739e-003,right_val:0.5049701929092407,left_val:0.2288102954626083},{features:[[7,12,6,3,-1.],[7,13,6,1,3.]],threshold:2.2457661107182503e-003,right_val:0.6048725843429565,left_val:0.4632433950901032},{features:[[9,12,2,3,-1.],[9,13,2,1,3.]],threshold:-5.1915869116783142e-003,right_val:0.4602192938327789,left_val:0.6467421054840088},{features:[[7,12,6,2,-1.],[9,12,2,2,3.]],threshold:-0.0238278806209564,right_val:0.5226079225540161,left_val:0.1482000946998596},{features:[[5,11,4,6,-1.],[5,14,4,3,2.]],threshold:1.0284580057486892e-003,right_val:0.3375957012176514,left_val:0.5135489106178284},{features:[[11,12,7,2,-1.],[11,13,7,1,2.]],threshold:-0.0100788502022624,right_val:0.5303567051887512,left_val:0.2740561068058014},{features:[[6,10,8,6,-1.],[6,10,4,3,2.],[10,13,4,3,2.]],threshold:2.6168930344283581e-003,right_val:0.3972454071044922,left_val:0.5332670807838440},{features:[[11,10,3,4,-1.],[11,12,3,2,2.]],threshold:5.4385367548093200e-004,right_val:0.4063411951065064,left_val:0.5365604162216187},{features:[[9,16,2,3,-1.],[9,17,2,1,3.]],threshold:5.3510512225329876e-003,right_val:0.6889045834541321,left_val:0.4653759002685547},{features:[[13,3,1,9,-1.],[13,6,1,3,3.]],threshold:-1.5274790348485112e-003,right_val:0.3624723851680756,left_val:0.5449501276016235},{features:[[1,13,14,6,-1.],[1,15,14,2,3.]],threshold:-0.0806244164705276,right_val:0.5000287294387817,left_val:0.1656087040901184},{features:[[13,6,1,6,-1.],[13,9,1,3,2.]],threshold:0.0221920292824507,right_val:0.2002808004617691,left_val:0.5132731199264526},{features:[[0,4,3,8,-1.],[1,4,1,8,3.]],threshold:7.3100631125271320e-003,right_val:0.6366536021232605,left_val:0.4617947936058044},{features:[[18,0,2,18,-1.],[18,0,1,18,2.]],threshold:-6.4063072204589844e-003,right_val:0.4867860972881317,left_val:0.5916250944137573},{features:[[2,3,6,2,-1.],[2,4,6,1,2.]],threshold:-7.6415040530264378e-004,right_val:0.5315797924995422,left_val:0.3888409137725830},{features:[[9,0,8,6,-1.],[9,2,8,2,3.]],threshold:7.6734489994123578e-004,right_val:0.5605279803276062,left_val:0.4159064888954163},{features:[[6,6,1,6,-1.],[6,9,1,3,2.]],threshold:6.1474501853808761e-004,right_val:0.5120148062705994,left_val:0.3089022040367127},{features:[[14,8,6,3,-1.],[14,9,6,1,3.]],threshold:-5.0105270929634571e-003,right_val:0.5207306146621704,left_val:0.3972199857234955},{features:[[0,0,2,18,-1.],[1,0,1,18,2.]],threshold:-8.6909132078289986e-003,right_val:0.4608575999736786,left_val:0.6257408261299133},{features:[[1,18,18,2,-1.],[10,18,9,1,2.],[1,19,9,1,2.]],threshold:-0.0163914598524570,right_val:0.5242266058921814,left_val:0.2085209935903549},{features:[[3,15,2,2,-1.],[3,16,2,1,2.]],threshold:4.0973909199237823e-004,right_val:0.3780320882797241,left_val:0.5222427248954773},{features:[[8,14,5,3,-1.],[8,15,5,1,3.]],threshold:-2.5242289993911982e-003,right_val:0.4611890017986298,left_val:0.5803927183151245},{features:[[8,14,2,3,-1.],[8,15,2,1,3.]],threshold:5.0945312250405550e-004,right_val:0.5846015810966492,left_val:0.4401271939277649},{features:[[12,3,3,3,-1.],[13,3,1,3,3.]],threshold:1.9656419754028320e-003,right_val:0.4184590876102448,left_val:0.5322325229644775},{features:[[7,5,6,2,-1.],[9,5,2,2,3.]],threshold:5.6298897834494710e-004,right_val:0.5234565734863281,left_val:0.3741844892501831},{features:[[15,5,5,2,-1.],[15,6,5,1,2.]],threshold:-6.7946797935292125e-004,right_val:0.5356478095054627,left_val:0.4631041884422302},{features:[[0,5,5,2,-1.],[0,6,5,1,2.]],threshold:7.2856349870562553e-003,right_val:0.2377564013004303,left_val:0.5044670104980469},{features:[[17,14,1,6,-1.],[17,17,1,3,2.]],threshold:-0.0174594894051552,right_val:0.5050435066223145,left_val:0.7289121150970459},{features:[[2,9,9,3,-1.],[5,9,3,3,3.]],threshold:-0.0254217498004436,right_val:0.4678100049495697,left_val:0.6667134761810303},{features:[[12,3,3,3,-1.],[13,3,1,3,3.]],threshold:-1.5647639520466328e-003,right_val:0.5323626995086670,left_val:0.4391759037971497},{features:[[0,0,4,18,-1.],[2,0,2,18,2.]],threshold:0.0114443600177765,right_val:0.5680012106895447,left_val:0.4346440136432648},{features:[[17,6,1,3,-1.],[17,7,1,1,3.]],threshold:-6.7352550104260445e-004,right_val:0.5296812057495117,left_val:0.4477140903472900},{features:[[2,14,1,6,-1.],[2,17,1,3,2.]],threshold:9.3194209039211273e-003,right_val:0.7462607026100159,left_val:0.4740200042724609},{features:[[19,8,1,2,-1.],[19,9,1,1,2.]],threshold:1.3328490604180843e-004,right_val:0.4752134978771210,left_val:0.5365061759948731},{features:[[5,3,3,3,-1.],[6,3,1,3,3.]],threshold:-7.8815799206495285e-003,right_val:0.5015255212783814,left_val:0.1752219051122665},{features:[[9,16,2,3,-1.],[9,17,2,1,3.]],threshold:-5.7985680177807808e-003,right_val:0.4896200895309448,left_val:0.7271236777305603},{features:[[2,6,1,3,-1.],[2,7,1,1,3.]],threshold:-3.8922499516047537e-004,right_val:0.5344941020011902,left_val:0.4003908932209015},{features:[[12,4,8,2,-1.],[16,4,4,1,2.],[12,5,4,1,2.]],threshold:-1.9288610201328993e-003,right_val:0.4803955852985382,left_val:0.5605612993240356},{features:[[0,4,8,2,-1.],[0,4,4,1,2.],[4,5,4,1,2.]],threshold:8.4214154630899429e-003,right_val:0.7623608708381653,left_val:0.4753246903419495},{features:[[2,16,18,4,-1.],[2,18,18,2,2.]],threshold:8.1655876711010933e-003,right_val:0.4191643893718720,left_val:0.5393261909484863},{features:[[7,15,2,4,-1.],[7,17,2,2,2.]],threshold:4.8280550981871784e-004,right_val:0.5399821996688843,left_val:0.4240800142288208},{features:[[4,0,14,3,-1.],[4,1,14,1,3.]],threshold:-2.7186630759388208e-003,right_val:0.5424923896789551,left_val:0.4244599938392639},{features:[[0,0,4,20,-1.],[2,0,2,20,2.]],threshold:-0.0125072300434113,right_val:0.4550411105155945,left_val:0.5895841717720032},{features:[[12,4,4,8,-1.],[14,4,2,4,2.],[12,8,2,4,2.]],threshold:-0.0242865197360516,right_val:0.5189179778099060,left_val:0.2647134959697723},{features:[[6,7,2,2,-1.],[6,7,1,1,2.],[7,8,1,1,2.]],threshold:-2.9676330741494894e-003,right_val:0.4749749898910523,left_val:0.7347682714462280},{features:[[10,6,2,3,-1.],[10,7,2,1,3.]],threshold:-0.0125289997085929,right_val:0.5177599787712097,left_val:0.2756049931049347},{features:[[8,7,3,2,-1.],[8,8,3,1,2.]],threshold:-1.0104000102728605e-003,right_val:0.5144724249839783,left_val:0.3510560989379883},{features:[[8,2,6,12,-1.],[8,8,6,6,2.]],threshold:-2.1348530426621437e-003,right_val:0.4667319953441620,left_val:0.5637925863265991},{features:[[4,0,11,12,-1.],[4,4,11,4,3.]],threshold:0.0195642597973347,right_val:0.6137639880180359,left_val:0.4614573121070862},{features:[[14,9,6,11,-1.],[16,9,2,11,3.]],threshold:-0.0971463471651077,right_val:0.5193555951118469,left_val:0.2998378872871399},{features:[[0,14,4,3,-1.],[0,15,4,1,3.]],threshold:4.5014568604528904e-003,right_val:0.3045755922794342,left_val:0.5077884793281555},{features:[[9,10,2,3,-1.],[9,11,2,1,3.]],threshold:6.3706971704959869e-003,right_val:0.6887500882148743,left_val:0.4861018955707550},{features:[[5,11,3,2,-1.],[5,12,3,1,2.]],threshold:-9.0721528977155685e-003,right_val:0.5017563104629517,left_val:0.1673395931720734},{features:[[9,15,3,3,-1.],[10,15,1,3,3.]],threshold:-5.3537208586931229e-003,right_val:0.5242633223533630,left_val:0.2692756950855255},{features:[[8,8,3,4,-1.],[9,8,1,4,3.]],threshold:-0.0109328404068947,right_val:0.4736028909683228,left_val:0.7183864116668701},{features:[[9,15,3,3,-1.],[10,15,1,3,3.]],threshold:8.2356072962284088e-003,right_val:0.2389862984418869,left_val:0.5223966836929321},{features:[[7,7,3,2,-1.],[8,7,1,2,3.]],threshold:-1.0038160253316164e-003,right_val:0.4433943033218384,left_val:0.5719355940818787},{features:[[2,10,16,4,-1.],[10,10,8,2,2.],[2,12,8,2,2.]],threshold:4.0859128348529339e-003,right_val:0.4148836135864258,left_val:0.5472841858863831},{features:[[2,3,4,17,-1.],[4,3,2,17,2.]],threshold:0.1548541933298111,right_val:0.0610615983605385,left_val:0.4973812103271484},{features:[[15,13,2,7,-1.],[15,13,1,7,2.]],threshold:2.0897459762636572e-004,right_val:0.5423889160156250,left_val:0.4709174036979675},{features:[[2,2,6,1,-1.],[5,2,3,1,2.]],threshold:3.3316991175524890e-004,right_val:0.5300992131233215,left_val:0.4089626967906952},{features:[[5,2,12,4,-1.],[9,2,4,4,3.]],threshold:-0.0108134001493454,right_val:0.4957334101200104,left_val:0.6104369759559631},{features:[[6,0,8,12,-1.],[6,0,4,6,2.],[10,6,4,6,2.]],threshold:0.0456560105085373,right_val:0.2866660058498383,left_val:0.5069689154624939},{features:[[13,7,2,2,-1.],[14,7,1,1,2.],[13,8,1,1,2.]],threshold:1.2569549726322293e-003,right_val:0.6318171024322510,left_val:0.4846917092800140},{features:[[0,12,20,6,-1.],[0,14,20,2,3.]],threshold:-0.1201507002115250,right_val:0.4980959892272949,left_val:0.0605261400341988},{features:[[14,7,2,3,-1.],[14,7,1,3,2.]],threshold:-1.0533799650147557e-004,right_val:0.4708042144775391,left_val:0.5363109707832336},{features:[[0,8,9,12,-1.],[3,8,3,12,3.]],threshold:-0.2070319056510925,right_val:0.4979098141193390,left_val:0.0596603304147720},{features:[[3,0,16,2,-1.],[3,0,8,2,2.]],threshold:1.2909180077258497e-004,right_val:0.5377997756004334,left_val:0.4712977111339569},{features:[[6,15,3,3,-1.],[6,16,3,1,3.]],threshold:3.8818528992123902e-004,right_val:0.5534191131591797,left_val:0.4363538026809692},{features:[[8,15,6,3,-1.],[8,16,6,1,3.]],threshold:-2.9243610333651304e-003,right_val:0.4825215935707092,left_val:0.5811185836791992},{features:[[0,10,1,6,-1.],[0,12,1,2,3.]],threshold:8.3882332546636462e-004,right_val:0.4038138985633850,left_val:0.5311700105667114},{features:[[10,9,4,3,-1.],[10,10,4,1,3.]],threshold:-1.9061550265178084e-003,right_val:0.5260015130043030,left_val:0.3770701885223389},{features:[[9,15,2,3,-1.],[9,16,2,1,3.]],threshold:8.9514348655939102e-003,right_val:0.7682183980941773,left_val:0.4766167998313904},{features:[[5,7,10,1,-1.],[5,7,5,1,2.]],threshold:0.0130834598094225,right_val:0.3062222003936768,left_val:0.5264462828636169},{features:[[4,0,12,19,-1.],[10,0,6,19,2.]],threshold:-0.2115933001041412,right_val:0.4695810079574585,left_val:0.6737198233604431},{features:[[0,6,20,6,-1.],[10,6,10,3,2.],[0,9,10,3,2.]],threshold:3.1493250280618668e-003,right_val:0.4386953115463257,left_val:0.5644835233688355},{features:[[3,6,2,2,-1.],[3,6,1,1,2.],[4,7,1,1,2.]],threshold:3.9754100725986063e-004,right_val:0.5895630121231079,left_val:0.4526061117649078},{features:[[15,6,2,2,-1.],[16,6,1,1,2.],[15,7,1,1,2.]],threshold:-1.3814480043947697e-003,right_val:0.4942413866519928,left_val:0.6070582270622253},{features:[[3,6,2,2,-1.],[3,6,1,1,2.],[4,7,1,1,2.]],threshold:-5.8122188784182072e-004,right_val:0.4508252143859863,left_val:0.5998213291168213},{features:[[14,4,1,12,-1.],[14,10,1,6,2.]],threshold:-2.3905329871922731e-003,right_val:0.5223848223686218,left_val:0.4205588996410370},{features:[[2,5,16,10,-1.],[2,5,8,5,2.],[10,10,8,5,2.]],threshold:0.0272689294070005,right_val:0.3563301861286163,left_val:0.5206447243690491},{features:[[9,17,3,2,-1.],[10,17,1,2,3.]],threshold:-3.7658358924090862e-003,right_val:0.5218814015388489,left_val:0.3144704103469849},{features:[[1,4,2,2,-1.],[1,5,2,1,2.]],threshold:-1.4903489500284195e-003,right_val:0.5124437212944031,left_val:0.3380196094512940},{features:[[5,0,15,5,-1.],[10,0,5,5,3.]],threshold:-0.0174282304942608,right_val:0.4919725954532623,left_val:0.5829960703849793},{features:[[0,0,15,5,-1.],[5,0,5,5,3.]],threshold:-0.0152780301868916,right_val:0.4617887139320374,left_val:0.6163144707679749},{features:[[11,2,2,17,-1.],[11,2,1,17,2.]],threshold:0.0319956094026566,right_val:0.1712764054536820,left_val:0.5166357159614563},{features:[[7,2,2,17,-1.],[8,2,1,17,2.]],threshold:-3.8256710395216942e-003,right_val:0.5131387710571289,left_val:0.3408012092113495},{features:[[15,11,2,9,-1.],[15,11,1,9,2.]],threshold:-8.5186436772346497e-003,right_val:0.4997941851615906,left_val:0.6105518937110901},{features:[[3,11,2,9,-1.],[4,11,1,9,2.]],threshold:9.0641621500253677e-004,right_val:0.5582311153411865,left_val:0.4327270984649658},{features:[[5,16,14,4,-1.],[5,16,7,4,2.]],threshold:0.0103448498994112,right_val:0.5452420115470886,left_val:0.4855653047561646}],threshold:69.2298736572265630},{simpleClassifiers:[{features:[[1,4,18,1,-1.],[7,4,6,1,3.]],threshold:7.8981826081871986e-003,right_val:0.5946462154388428,left_val:0.3332524895668030},{features:[[13,7,6,4,-1.],[16,7,3,2,2.],[13,9,3,2,2.]],threshold:1.6170160379260778e-003,right_val:0.5577868819236755,left_val:0.3490641117095947},{features:[[9,8,2,12,-1.],[9,12,2,4,3.]],threshold:-5.5449741194024682e-004,right_val:0.3291530013084412,left_val:0.5542566180229187},{features:[[12,1,6,6,-1.],[12,3,6,2,3.]],threshold:1.5428980113938451e-003,right_val:0.5545979142189026,left_val:0.3612579107284546},{features:[[5,2,6,6,-1.],[5,2,3,3,2.],[8,5,3,3,2.]],threshold:-1.0329450014978647e-003,right_val:0.5576140284538269,left_val:0.3530139029026032},{features:[[9,16,6,4,-1.],[12,16,3,2,2.],[9,18,3,2,2.]],threshold:7.7698158565908670e-004,right_val:0.5645321011543274,left_val:0.3916778862476349},{features:[[1,2,18,3,-1.],[7,2,6,3,3.]],threshold:0.1432030051946640,right_val:0.7023633122444153,left_val:0.4667482078075409},{features:[[7,4,9,10,-1.],[7,9,9,5,2.]],threshold:-7.3866490274667740e-003,right_val:0.5289257764816284,left_val:0.3073684871196747},{features:[[5,9,4,4,-1.],[7,9,2,4,2.]],threshold:-6.2936742324382067e-004,right_val:0.4037049114704132,left_val:0.5622118115425110},{features:[[11,10,3,6,-1.],[11,13,3,3,2.]],threshold:7.8893528552725911e-004,right_val:0.3557874858379364,left_val:0.5267661213874817},{features:[[7,11,5,3,-1.],[7,12,5,1,3.]],threshold:-0.0122280502691865,right_val:0.4625549912452698,left_val:0.6668320894241333},{features:[[7,11,6,6,-1.],[10,11,3,3,2.],[7,14,3,3,2.]],threshold:3.5420239437371492e-003,right_val:0.3869673013687134,left_val:0.5521438121795654},{features:[[0,0,10,9,-1.],[0,3,10,3,3.]],threshold:-1.0585320414975286e-003,right_val:0.5320926904678345,left_val:0.3628678023815155},{features:[[13,14,1,6,-1.],[13,16,1,2,3.]],threshold:1.4935660146875307e-005,right_val:0.5363323092460632,left_val:0.4632444977760315},{features:[[0,2,3,6,-1.],[0,4,3,2,3.]],threshold:5.2537708543241024e-003,right_val:0.3265708982944489,left_val:0.5132231712341309},{features:[[8,14,4,3,-1.],[8,15,4,1,3.]],threshold:-8.2338023930788040e-003,right_val:0.4774140119552612,left_val:0.6693689823150635},{features:[[6,14,1,6,-1.],[6,16,1,2,3.]],threshold:2.1866810129722580e-005,right_val:0.5457931160926819,left_val:0.4053862094879150},{features:[[9,15,2,3,-1.],[9,16,2,1,3.]],threshold:-3.8150229956954718e-003,right_val:0.4793178141117096,left_val:0.6454995870590210},{features:[[6,4,3,3,-1.],[7,4,1,3,3.]],threshold:1.1105879675596952e-003,right_val:0.3529678881168366,left_val:0.5270407199859619},{features:[[9,0,11,3,-1.],[9,1,11,1,3.]],threshold:-5.7707689702510834e-003,right_val:0.5352957844734192,left_val:0.3803547024726868},{features:[[0,6,20,3,-1.],[0,7,20,1,3.]],threshold:-3.0158339068293571e-003,right_val:0.3887133002281189,left_val:0.5339403152465820},{features:[[10,1,1,2,-1.],[10,2,1,1,2.]],threshold:-8.5453689098358154e-004,right_val:0.5273603796958923,left_val:0.3564616143703461},{features:[[9,6,2,6,-1.],[10,6,1,6,2.]],threshold:0.0110505102202296,right_val:0.6849737763404846,left_val:0.4671907126903534},{features:[[5,8,12,1,-1.],[9,8,4,1,3.]],threshold:0.0426058396697044,right_val:0.0702200904488564,left_val:0.5151473283767700},{features:[[3,8,12,1,-1.],[7,8,4,1,3.]],threshold:-3.0781750101596117e-003,right_val:0.5152602195739746,left_val:0.3041661083698273},{features:[[9,7,3,5,-1.],[10,7,1,5,3.]],threshold:-5.4815728217363358e-003,right_val:0.4897229969501495,left_val:0.6430295705795288},{features:[[3,9,6,2,-1.],[6,9,3,2,2.]],threshold:3.1881860923022032e-003,right_val:0.3826209902763367,left_val:0.5307493209838867},{features:[[12,9,3,3,-1.],[12,10,3,1,3.]],threshold:3.5947180003859103e-004,right_val:0.5421904921531677,left_val:0.4650047123432159},{features:[[7,0,6,1,-1.],[9,0,2,1,3.]],threshold:-4.0705031715333462e-003,right_val:0.5079116225242615,left_val:0.2849679887294769},{features:[[12,9,3,3,-1.],[12,10,3,1,3.]],threshold:-0.0145941702648997,right_val:0.5128461718559265,left_val:0.2971645891666412},{features:[[7,10,2,1,-1.],[8,10,1,1,2.]],threshold:-1.1947689927183092e-004,right_val:0.4343082010746002,left_val:0.5631098151206970},{features:[[6,4,9,13,-1.],[9,4,3,13,3.]],threshold:-6.9344649091362953e-004,right_val:0.5359959006309509,left_val:0.4403578042984009},{features:[[6,8,4,2,-1.],[6,9,4,1,2.]],threshold:1.4834799912932795e-005,right_val:0.5164697766304016,left_val:0.3421008884906769},{features:[[16,2,4,6,-1.],[16,2,2,6,2.]],threshold:9.0296985581517220e-003,right_val:0.6114075183868408,left_val:0.4639343023300171},{features:[[0,17,6,3,-1.],[0,18,6,1,3.]],threshold:-8.0640818923711777e-003,right_val:0.5075494050979614,left_val:0.2820158898830414},{features:[[10,10,3,10,-1.],[10,15,3,5,2.]],threshold:0.0260621197521687,right_val:0.2688778042793274,left_val:0.5208905935287476},{features:[[8,7,3,5,-1.],[9,7,1,5,3.]],threshold:0.0173146594315767,right_val:0.6738539934158325,left_val:0.4663713872432709},{features:[[10,4,4,3,-1.],[10,4,2,3,2.]],threshold:0.0226666405797005,right_val:0.2212723940610886,left_val:0.5209349989891052},{features:[[8,4,3,8,-1.],[9,4,1,8,3.]],threshold:-2.1965929772704840e-003,right_val:0.4538190066814423,left_val:0.6063101291656494},{features:[[6,6,9,13,-1.],[9,6,3,13,3.]],threshold:-9.5282476395368576e-003,right_val:0.5247430801391602,left_val:0.4635204970836639},{features:[[6,0,8,12,-1.],[6,0,4,6,2.],[10,6,4,6,2.]],threshold:8.0943619832396507e-003,right_val:0.3913882076740265,left_val:0.5289440155029297},{features:[[14,2,6,8,-1.],[16,2,2,8,3.]],threshold:-0.0728773325681686,right_val:0.4990234971046448,left_val:0.7752001881599426},{features:[[6,0,3,6,-1.],[7,0,1,6,3.]],threshold:-6.9009521976113319e-003,right_val:0.5048090219497681,left_val:0.2428039014339447},{features:[[14,2,6,8,-1.],[16,2,2,8,3.]],threshold:-0.0113082397729158,right_val:0.4842376112937927,left_val:0.5734364986419678},{features:[[0,5,6,6,-1.],[0,8,6,3,2.]],threshold:0.0596132017672062,right_val:0.2524977028369904,left_val:0.5029836297035217},{features:[[9,12,6,2,-1.],[12,12,3,1,2.],[9,13,3,1,2.]],threshold:-2.8624620754271746e-003,right_val:0.4898459911346436,left_val:0.6073045134544373},{features:[[8,17,3,2,-1.],[9,17,1,2,3.]],threshold:4.4781449250876904e-003,right_val:0.2220316976308823,left_val:0.5015289187431335},{features:[[11,6,2,2,-1.],[12,6,1,1,2.],[11,7,1,1,2.]],threshold:-1.7513240454718471e-003,right_val:0.4933868944644928,left_val:0.6614428758621216},{features:[[1,9,18,2,-1.],[7,9,6,2,3.]],threshold:0.0401634201407433,right_val:0.3741044998168945,left_val:0.5180878043174744},{features:[[11,6,2,2,-1.],[12,6,1,1,2.],[11,7,1,1,2.]],threshold:3.4768949262797832e-004,right_val:0.5818032026290894,left_val:0.4720416963100433},{features:[[3,4,12,8,-1.],[7,4,4,8,3.]],threshold:2.6551650371402502e-003,right_val:0.5221335887908936,left_val:0.3805010914802551},{features:[[13,11,5,3,-1.],[13,12,5,1,3.]],threshold:-8.7706279009580612e-003,right_val:0.5231295228004456,left_val:0.2944166064262390},{features:[[9,10,2,3,-1.],[9,11,2,1,3.]],threshold:-5.5122091434895992e-003,right_val:0.4722816944122315,left_val:0.7346177101135254},{features:[[14,7,2,3,-1.],[14,7,1,3,2.]],threshold:6.8672042107209563e-004,right_val:0.4242413043975830,left_val:0.5452876091003418},{features:[[5,4,1,3,-1.],[5,5,1,1,3.]],threshold:5.6019669864326715e-004,right_val:0.5601285099983215,left_val:0.4398862123489380},{features:[[13,4,2,3,-1.],[13,5,2,1,3.]],threshold:2.4143769405782223e-003,right_val:0.6136621832847595,left_val:0.4741686880588532},{features:[[5,4,2,3,-1.],[5,5,2,1,3.]],threshold:-1.5680900542065501e-003,right_val:0.4516409933567047,left_val:0.6044552922248840},{features:[[9,8,2,3,-1.],[9,9,2,1,3.]],threshold:-3.6827491130679846e-003,right_val:0.5294982194900513,left_val:0.2452459037303925},{features:[[8,9,2,2,-1.],[8,10,2,1,2.]],threshold:-2.9409190756268799e-004,right_val:0.5251451134681702,left_val:0.3732838034629822},{features:[[15,14,1,4,-1.],[15,16,1,2,2.]],threshold:4.2847759323194623e-004,right_val:0.4065535068511963,left_val:0.5498809814453125},{features:[[3,12,2,2,-1.],[3,13,2,1,2.]],threshold:-4.8817070201039314e-003,right_val:0.4999957084655762,left_val:0.2139908969402313},{features:[[12,15,2,2,-1.],[13,15,1,1,2.],[12,16,1,1,2.]],threshold:2.7272020815871656e-004,right_val:0.5813428759574890,left_val:0.4650287032127380},{features:[[9,13,2,2,-1.],[9,14,2,1,2.]],threshold:2.0947199664078653e-004,right_val:0.5572792887687683,left_val:0.4387486875057221},{features:[[4,11,14,9,-1.],[4,14,14,3,3.]],threshold:0.0485011897981167,right_val:0.3212889134883881,left_val:0.5244972705841065},{features:[[7,13,4,3,-1.],[7,14,4,1,3.]],threshold:-4.5166411437094212e-003,right_val:0.4545882046222687,left_val:0.6056813001632690},{features:[[15,14,1,4,-1.],[15,16,1,2,2.]],threshold:-0.0122916800901294,right_val:0.5152214169502258,left_val:0.2040929049253464},{features:[[4,14,1,4,-1.],[4,16,1,2,2.]],threshold:4.8549679922871292e-004,right_val:0.3739503026008606,left_val:0.5237604975700378},{features:[[14,0,6,13,-1.],[16,0,2,13,3.]],threshold:0.0305560491979122,right_val:0.5938246250152588,left_val:0.4960533976554871},{features:[[4,1,2,12,-1.],[4,1,1,6,2.],[5,7,1,6,2.]],threshold:-1.5105320198927075e-004,right_val:0.4145204126834869,left_val:0.5351303815841675},{features:[[11,14,6,6,-1.],[14,14,3,3,2.],[11,17,3,3,2.]],threshold:2.4937440175563097e-003,right_val:0.5514941215515137,left_val:0.4693366885185242},{features:[[3,14,6,6,-1.],[3,14,3,3,2.],[6,17,3,3,2.]],threshold:-0.0123821301385760,right_val:0.4681667983531952,left_val:0.6791396737098694},{features:[[14,17,3,2,-1.],[14,18,3,1,2.]],threshold:-5.1333461888134480e-003,right_val:0.5229160189628601,left_val:0.3608739078044891},{features:[[3,17,3,2,-1.],[3,18,3,1,2.]],threshold:5.1919277757406235e-004,right_val:0.3633613884449005,left_val:0.5300073027610779},{features:[[14,0,6,13,-1.],[16,0,2,13,3.]],threshold:0.1506042033433914,right_val:0.2211782038211823,left_val:0.5157316923141480},{features:[[0,0,6,13,-1.],[2,0,2,13,3.]],threshold:7.7144149690866470e-003,right_val:0.5776609182357788,left_val:0.4410496950149536},{features:[[10,10,7,6,-1.],[10,12,7,2,3.]],threshold:9.4443522393703461e-003,right_val:0.3756650090217590,left_val:0.5401855111122131},{features:[[6,15,2,2,-1.],[6,15,1,1,2.],[7,16,1,1,2.]],threshold:2.5006249779835343e-004,right_val:0.5607374906539917,left_val:0.4368270933628082},{features:[[6,11,8,6,-1.],[10,11,4,3,2.],[6,14,4,3,2.]],threshold:-3.3077150583267212e-003,right_val:0.5518230795860291,left_val:0.4244799017906189},{features:[[7,6,2,2,-1.],[7,6,1,1,2.],[8,7,1,1,2.]],threshold:7.4048910755664110e-004,right_val:0.5900576710700989,left_val:0.4496962130069733},{features:[[2,2,16,6,-1.],[10,2,8,3,2.],[2,5,8,3,2.]],threshold:0.0440920516848564,right_val:0.3156355023384094,left_val:0.5293493270874023},{features:[[5,4,3,3,-1.],[5,5,3,1,3.]],threshold:3.3639909233897924e-003,right_val:0.5848662257194519,left_val:0.4483296871185303},{features:[[11,7,3,10,-1.],[11,12,3,5,2.]],threshold:-3.9760079234838486e-003,right_val:0.5483639240264893,left_val:0.4559507071971893},{features:[[6,7,3,10,-1.],[6,12,3,5,2.]],threshold:2.7716930489987135e-003,right_val:0.3792484104633331,left_val:0.5341786146163940},{features:[[10,7,3,2,-1.],[11,7,1,2,3.]],threshold:-2.4123019829858094e-004,right_val:0.4576973021030426,left_val:0.5667188763618469},{features:[[8,12,4,2,-1.],[8,13,4,1,2.]],threshold:4.9425667384639382e-004,right_val:0.5628787279129028,left_val:0.4421244859695435},{features:[[10,1,1,3,-1.],[10,2,1,1,3.]],threshold:-3.8876468897797167e-004,right_val:0.5391063094139099,left_val:0.4288370907306671},{features:[[1,2,4,18,-1.],[1,2,2,9,2.],[3,11,2,9,2.]],threshold:-0.0500488989055157,right_val:0.4703742861747742,left_val:0.6899513006210327},{features:[[12,4,4,12,-1.],[12,10,4,6,2.]],threshold:-0.0366354808211327,right_val:0.5191826224327087,left_val:0.2217779010534287},{features:[[0,0,1,6,-1.],[0,2,1,2,3.]],threshold:2.4273579474538565e-003,right_val:0.3497397899627686,left_val:0.5136224031448364},{features:[[9,11,2,3,-1.],[9,12,2,1,3.]],threshold:1.9558030180633068e-003,right_val:0.6408380866050720,left_val:0.4826192855834961},{features:[[8,7,4,3,-1.],[8,8,4,1,3.]],threshold:-1.7494610510766506e-003,right_val:0.5272685289382935,left_val:0.3922835886478424},{features:[[10,7,3,2,-1.],[11,7,1,2,3.]],threshold:0.0139550799503922,right_val:0.8416504859924316,left_val:0.5078201889991760},{features:[[7,7,3,2,-1.],[8,7,1,2,3.]],threshold:-2.1896739781368524e-004,right_val:0.4314234852790833,left_val:0.5520489811897278},{features:[[9,4,6,1,-1.],[11,4,2,1,3.]],threshold:-1.5131309628486633e-003,right_val:0.5382571220397949,left_val:0.3934605121612549},{features:[[8,7,2,3,-1.],[9,7,1,3,2.]],threshold:-4.3622800149023533e-003,right_val:0.4736475944519043,left_val:0.7370628714561462},{features:[[12,7,8,6,-1.],[16,7,4,3,2.],[12,10,4,3,2.]],threshold:0.0651605874300003,right_val:0.3281595110893250,left_val:0.5159279704093933},{features:[[0,7,8,6,-1.],[0,7,4,3,2.],[4,10,4,3,2.]],threshold:-2.3567399475723505e-003,right_val:0.5172886252403259,left_val:0.3672826886177063},{features:[[18,2,2,10,-1.],[19,2,1,5,2.],[18,7,1,5,2.]],threshold:0.0151466596871614,right_val:0.6687604188919067,left_val:0.5031493902206421},{features:[[0,2,6,4,-1.],[3,2,3,4,2.]],threshold:-0.0228509604930878,right_val:0.4709596931934357,left_val:0.6767519712448120},{features:[[9,4,6,1,-1.],[11,4,2,1,3.]],threshold:4.8867650330066681e-003,right_val:0.4059878885746002,left_val:0.5257998108863831},{features:[[7,15,2,2,-1.],[7,15,1,1,2.],[8,16,1,1,2.]],threshold:1.7619599821045995e-003,right_val:0.6688278913497925,left_val:0.4696272909641266},{features:[[11,13,1,6,-1.],[11,16,1,3,2.]],threshold:-1.2942519970238209e-003,right_val:0.5344281792640686,left_val:0.4320712983608246},{features:[[8,13,1,6,-1.],[8,16,1,3,2.]],threshold:0.0109299495816231,right_val:0.1637486070394516,left_val:0.4997706115245819},{features:[[14,3,2,1,-1.],[14,3,1,1,2.]],threshold:2.9958489903947338e-005,right_val:0.5633224248886108,left_val:0.4282417893409729},{features:[[8,15,2,3,-1.],[8,16,2,1,3.]],threshold:-6.5884361974895000e-003,right_val:0.4700526893138886,left_val:0.6772121191024780},{features:[[12,15,7,4,-1.],[12,17,7,2,2.]],threshold:3.2527779694646597e-003,right_val:0.4536148905754089,left_val:0.5313397049903870},{features:[[4,14,12,3,-1.],[4,15,12,1,3.]],threshold:-4.0435739792883396e-003,right_val:0.4413388967514038,left_val:0.5660061836242676},{features:[[10,3,3,2,-1.],[11,3,1,2,3.]],threshold:-1.2523540062829852e-003,right_val:0.5356451869010925,left_val:0.3731913864612579},{features:[[4,12,2,2,-1.],[4,13,2,1,2.]],threshold:1.9246719602961093e-004,right_val:0.3738811016082764,left_val:0.5189986228942871},{features:[[10,11,4,6,-1.],[10,14,4,3,2.]],threshold:-0.0385896712541580,right_val:0.5188810825347900,left_val:0.2956373989582062},{features:[[7,13,2,2,-1.],[7,13,1,1,2.],[8,14,1,1,2.]],threshold:1.5489870565943420e-004,right_val:0.5509533286094666,left_val:0.4347135126590729},{features:[[4,11,14,4,-1.],[11,11,7,2,2.],[4,13,7,2,2.]],threshold:-0.0337638482451439,right_val:0.5195475816726685,left_val:0.3230330049991608},{features:[[1,18,18,2,-1.],[7,18,6,2,3.]],threshold:-8.2657067105174065e-003,right_val:0.4552114009857178,left_val:0.5975489020347595},{features:[[11,18,2,2,-1.],[12,18,1,1,2.],[11,19,1,1,2.]],threshold:1.4481440302915871e-005,right_val:0.5497426986694336,left_val:0.4745678007602692},{features:[[7,18,2,2,-1.],[7,18,1,1,2.],[8,19,1,1,2.]],threshold:1.4951299817766994e-005,right_val:0.5480644106864929,left_val:0.4324473142623901},{features:[[12,18,8,2,-1.],[12,19,8,1,2.]],threshold:-0.0187417995184660,right_val:0.5178533196449280,left_val:0.1580052971839905},{features:[[7,14,6,2,-1.],[7,15,6,1,2.]],threshold:1.7572239739820361e-003,right_val:0.5773764252662659,left_val:0.4517636895179749},{features:[[8,12,4,8,-1.],[10,12,2,4,2.],[8,16,2,4,2.]],threshold:-3.1391119118779898e-003,right_val:0.5460842251777649,left_val:0.4149647951126099},{features:[[4,9,3,3,-1.],[4,10,3,1,3.]],threshold:6.6656779381446540e-005,right_val:0.5293084979057312,left_val:0.4039090871810913},{features:[[7,10,6,2,-1.],[9,10,2,2,3.]],threshold:6.7743421532213688e-003,right_val:0.6121956110000610,left_val:0.4767651855945587},{features:[[5,0,4,15,-1.],[7,0,2,15,2.]],threshold:-7.3868161998689175e-003,right_val:0.5187280774116516,left_val:0.3586258888244629},{features:[[8,6,12,14,-1.],[12,6,4,14,3.]],threshold:0.0140409301966429,right_val:0.5576155781745911,left_val:0.4712139964103699},{features:[[5,16,3,3,-1.],[5,17,3,1,3.]],threshold:-5.5258329957723618e-003,right_val:0.5039281249046326,left_val:0.2661027014255524},{features:[[8,1,12,19,-1.],[12,1,4,19,3.]],threshold:0.3868423998355866,right_val:0.2525899112224579,left_val:0.5144339799880981},{features:[[3,0,3,2,-1.],[3,1,3,1,2.]],threshold:1.1459240340627730e-004,right_val:0.5423371195793152,left_val:0.4284994900226593},{features:[[10,12,4,5,-1.],[10,12,2,5,2.]],threshold:-0.0184675697237253,right_val:0.5213062167167664,left_val:0.3885835111141205},{features:[[6,12,4,5,-1.],[8,12,2,5,2.]],threshold:-4.5907011372037232e-004,right_val:0.4235909879207611,left_val:0.5412563085556030},{features:[[11,11,2,2,-1.],[12,11,1,1,2.],[11,12,1,1,2.]],threshold:1.2527540093287826e-003,right_val:0.6624091267585754,left_val:0.4899305105209351},{features:[[0,2,3,6,-1.],[0,4,3,2,3.]],threshold:1.4910609461367130e-003,right_val:0.4040051996707916,left_val:0.5286778211593628},{features:[[11,11,2,2,-1.],[12,11,1,1,2.],[11,12,1,1,2.]],threshold:-7.5435562757775187e-004,right_val:0.4795120060443878,left_val:0.6032990217208862},{features:[[7,6,4,10,-1.],[7,11,4,5,2.]],threshold:-6.9478838704526424e-003,right_val:0.5373504161834717,left_val:0.4084401130676270},{features:[[11,11,2,2,-1.],[12,11,1,1,2.],[11,12,1,1,2.]],threshold:2.8092920547351241e-004,right_val:0.5759382247924805,left_val:0.4846062958240509},{features:[[2,13,5,2,-1.],[2,14,5,1,2.]],threshold:9.6073717577382922e-004,right_val:0.3554979860782623,left_val:0.5164741277694702},{features:[[11,11,2,2,-1.],[12,11,1,1,2.],[11,12,1,1,2.]],threshold:-2.6883929967880249e-004,right_val:0.4731765985488892,left_val:0.5677582025527954},{features:[[7,11,2,2,-1.],[7,11,1,1,2.],[8,12,1,1,2.]],threshold:2.1599370520561934e-003,right_val:0.7070567011833191,left_val:0.4731487035751343},{features:[[14,13,3,3,-1.],[14,14,3,1,3.]],threshold:5.6235301308333874e-003,right_val:0.2781791985034943,left_val:0.5240243077278137},{features:[[3,13,3,3,-1.],[3,14,3,1,3.]],threshold:-5.0243991427123547e-003,right_val:0.5062304139137268,left_val:0.2837013900279999},{features:[[9,14,2,3,-1.],[9,15,2,1,3.]],threshold:-9.7611639648675919e-003,right_val:0.4934569001197815,left_val:0.7400717735290527},{features:[[8,7,3,3,-1.],[8,8,3,1,3.]],threshold:4.1515100747346878e-003,right_val:0.3407008051872253,left_val:0.5119131207466126},{features:[[13,5,3,3,-1.],[13,6,3,1,3.]],threshold:6.2465080991387367e-003,right_val:0.6579058766365051,left_val:0.4923788011074066},{features:[[0,9,5,3,-1.],[0,10,5,1,3.]],threshold:-7.0597478188574314e-003,right_val:0.5032842159271240,left_val:0.2434711009263992},{features:[[13,5,3,3,-1.],[13,6,3,1,3.]],threshold:-2.0587709732353687e-003,right_val:0.4695087075233460,left_val:0.5900310873985291},{features:[[9,12,2,8,-1.],[9,12,1,4,2.],[10,16,1,4,2.]],threshold:-2.4146060459315777e-003,right_val:0.5189201831817627,left_val:0.3647317886352539},{features:[[11,7,2,2,-1.],[12,7,1,1,2.],[11,8,1,1,2.]],threshold:-1.4817609917372465e-003,right_val:0.4940128028392792,left_val:0.6034948229789734},{features:[[0,16,6,4,-1.],[3,16,3,4,2.]],threshold:-6.3016400672495365e-003,right_val:0.4560427963733673,left_val:0.5818989872932434},{features:[[10,6,2,3,-1.],[10,7,2,1,3.]],threshold:3.4763428848236799e-003,right_val:0.3483993113040924,left_val:0.5217475891113281},{features:[[9,5,2,6,-1.],[9,7,2,2,3.]],threshold:-0.0222508702427149,right_val:0.5032082796096802,left_val:0.2360700070858002},{features:[[12,15,8,4,-1.],[12,15,4,4,2.]],threshold:-0.0306125506758690,right_val:0.4914919137954712,left_val:0.6499186754226685},{features:[[0,14,8,6,-1.],[4,14,4,6,2.]],threshold:0.0130574796348810,right_val:0.5683764219284058,left_val:0.4413323104381561},{features:[[9,0,3,2,-1.],[10,0,1,2,3.]],threshold:-6.0095742810517550e-004,right_val:0.5333483219146729,left_val:0.4359731078147888},{features:[[4,15,4,2,-1.],[6,15,2,2,2.]],threshold:-4.1514250915497541e-004,right_val:0.4326060116291046,left_val:0.5504062771797180},{features:[[12,7,3,13,-1.],[13,7,1,13,3.]],threshold:-0.0137762902304530,right_val:0.5201548933982849,left_val:0.4064112901687622},{features:[[5,7,3,13,-1.],[6,7,1,13,3.]],threshold:-0.0322965085506439,right_val:0.4977194964885712,left_val:0.0473519712686539},{features:[[9,6,3,9,-1.],[9,9,3,3,3.]],threshold:0.0535569787025452,right_val:0.6666939258575440,left_val:0.4881733059883118},{features:[[4,4,7,12,-1.],[4,10,7,6,2.]],threshold:8.1889545544981956e-003,right_val:0.4240820109844208,left_val:0.5400037169456482},{features:[[12,12,2,2,-1.],[13,12,1,1,2.],[12,13,1,1,2.]],threshold:2.1055320394225419e-004,right_val:0.5563852787017822,left_val:0.4802047908306122},{features:[[6,12,2,2,-1.],[6,12,1,1,2.],[7,13,1,1,2.]],threshold:-2.4382730480283499e-003,right_val:0.4773685038089752,left_val:0.7387793064117432},{features:[[8,9,4,2,-1.],[10,9,2,1,2.],[8,10,2,1,2.]],threshold:3.2835570164024830e-003,right_val:0.3171291947364807,left_val:0.5288546085357666},{features:[[3,6,2,2,-1.],[3,6,1,1,2.],[4,7,1,1,2.]],threshold:2.3729570675641298e-003,right_val:0.7060170769691467,left_val:0.4750812947750092},{features:[[16,6,3,2,-1.],[16,7,3,1,2.]],threshold:-1.4541699783876538e-003,right_val:0.5330739021301270,left_val:0.3811730146408081}],threshold:79.2490768432617190},{simpleClassifiers:[{features:[[0,7,19,4,-1.],[0,9,19,2,2.]],threshold:0.0557552389800549,right_val:0.6806036829948425,left_val:0.4019156992435455},{features:[[10,2,10,1,-1.],[10,2,5,1,2.]],threshold:2.4730248842388391e-003,right_val:0.5965719819068909,left_val:0.3351148962974548},{features:[[9,4,2,12,-1.],[9,10,2,6,2.]],threshold:-3.5031698644161224e-004,right_val:0.3482286930084229,left_val:0.5557708144187927},{features:[[12,18,4,1,-1.],[12,18,2,1,2.]],threshold:5.4167630150914192e-004,right_val:0.5693380832672119,left_val:0.4260858893394470},{features:[[1,7,6,4,-1.],[1,7,3,2,2.],[4,9,3,2,2.]],threshold:7.7193678589537740e-004,right_val:0.5433688759803772,left_val:0.3494240045547485},{features:[[12,0,6,13,-1.],[14,0,2,13,3.]],threshold:-1.5999219613149762e-003,right_val:0.5484359264373779,left_val:0.4028499126434326},{features:[[2,0,6,13,-1.],[4,0,2,13,3.]],threshold:-1.1832080053864047e-004,right_val:0.5425465106964111,left_val:0.3806901872158051},{features:[[10,5,8,8,-1.],[10,9,8,4,2.]],threshold:3.2909031142480671e-004,right_val:0.5429521799087524,left_val:0.2620100080966950},{features:[[8,3,2,5,-1.],[9,3,1,5,2.]],threshold:2.9518108931370080e-004,right_val:0.5399264097213745,left_val:0.3799768984317780},{features:[[8,4,9,1,-1.],[11,4,3,1,3.]],threshold:9.0466710389591753e-005,right_val:0.5440226197242737,left_val:0.4433645009994507},{features:[[3,4,9,1,-1.],[6,4,3,1,3.]],threshold:1.5007190086180344e-005,right_val:0.5409119725227356,left_val:0.3719654977321625},{features:[[1,0,18,10,-1.],[7,0,6,10,3.]],threshold:0.1393561065196991,right_val:0.4479042887687683,left_val:0.5525395870208740},{features:[[7,17,5,3,-1.],[7,18,5,1,3.]],threshold:1.6461990308016539e-003,right_val:0.5772169828414917,left_val:0.4264501035213471},{features:[[7,11,6,1,-1.],[9,11,2,1,3.]],threshold:4.9984431825578213e-004,right_val:0.5685871243476868,left_val:0.4359526038169861},{features:[[2,2,3,2,-1.],[2,3,3,1,2.]],threshold:-1.0971280280500650e-003,right_val:0.5205408930778503,left_val:0.3390136957168579},{features:[[8,12,4,2,-1.],[8,13,4,1,2.]],threshold:6.6919892560690641e-004,right_val:0.5980659723281860,left_val:0.4557456076145172},{features:[[6,10,3,6,-1.],[6,13,3,3,2.]],threshold:8.6471042595803738e-004,right_val:0.2944033145904541,left_val:0.5134841203689575},{features:[[11,4,2,4,-1.],[11,4,1,4,2.]],threshold:-2.7182599296793342e-004,right_val:0.5377181172370911,left_val:0.3906578123569489},{features:[[7,4,2,4,-1.],[8,4,1,4,2.]],threshold:3.0249499104684219e-005,right_val:0.5225688815116882,left_val:0.3679609894752502},{features:[[9,6,2,4,-1.],[9,6,1,4,2.]],threshold:-8.5225896909832954e-003,right_val:0.4892365038394928,left_val:0.7293102145195007},{features:[[6,13,8,3,-1.],[6,14,8,1,3.]],threshold:1.6705560265108943e-003,right_val:0.5696138143539429,left_val:0.4345324933528900},{features:[[9,15,3,4,-1.],[10,15,1,4,3.]],threshold:-7.1433838456869125e-003,right_val:0.5225623846054077,left_val:0.2591280043125153},{features:[[9,2,2,17,-1.],[10,2,1,17,2.]],threshold:-0.0163193698972464,right_val:0.4651575982570648,left_val:0.6922279000282288},{features:[[7,0,6,1,-1.],[9,0,2,1,3.]],threshold:4.8034260980784893e-003,right_val:0.3286302983760834,left_val:0.5352262854576111},{features:[[8,15,3,4,-1.],[9,15,1,4,3.]],threshold:-7.5421929359436035e-003,right_val:0.5034546256065369,left_val:0.2040544003248215},{features:[[7,13,7,3,-1.],[7,14,7,1,3.]],threshold:-0.0143631100654602,right_val:0.4889059066772461,left_val:0.6804888844490051},{features:[[8,16,3,3,-1.],[9,16,1,3,3.]],threshold:8.9063588529825211e-004,right_val:0.3895480930805206,left_val:0.5310695767402649},{features:[[6,2,8,10,-1.],[6,7,8,5,2.]],threshold:-4.4060191139578819e-003,right_val:0.4372426867485046,left_val:0.5741562843322754},{features:[[2,5,8,8,-1.],[2,9,8,4,2.]],threshold:-1.8862540309783071e-004,right_val:0.5098205208778381,left_val:0.2831785976886749},{features:[[14,16,2,2,-1.],[14,17,2,1,2.]],threshold:-3.7979281041771173e-003,right_val:0.5246580243110657,left_val:0.3372507989406586},{features:[[4,16,2,2,-1.],[4,17,2,1,2.]],threshold:1.4627049677073956e-004,right_val:0.3911710083484650,left_val:0.5306674242019653},{features:[[10,11,4,6,-1.],[10,14,4,3,2.]],threshold:-4.9164638767251745e-005,right_val:0.3942720890045166,left_val:0.5462496280670166},{features:[[6,11,4,6,-1.],[6,14,4,3,2.]],threshold:-0.0335825011134148,right_val:0.5048211812973023,left_val:0.2157824039459229},{features:[[10,14,1,3,-1.],[10,15,1,1,3.]],threshold:-3.5339309833943844e-003,right_val:0.4872696995735169,left_val:0.6465312242507935},{features:[[8,14,4,3,-1.],[8,15,4,1,3.]],threshold:5.0144111737608910e-003,right_val:0.6248074769973755,left_val:0.4617668092250824},{features:[[10,0,4,6,-1.],[12,0,2,3,2.],[10,3,2,3,2.]],threshold:0.0188173707574606,right_val:0.2000052034854889,left_val:0.5220689177513123},{features:[[0,3,20,2,-1.],[0,4,20,1,2.]],threshold:-1.3434339780360460e-003,right_val:0.5301619768142700,left_val:0.4014537930488586},{features:[[12,0,8,2,-1.],[16,0,4,1,2.],[12,1,4,1,2.]],threshold:1.7557960236445069e-003,right_val:0.5653169751167297,left_val:0.4794039130210877},{features:[[2,12,10,8,-1.],[2,16,10,4,2.]],threshold:-0.0956374630331993,right_val:0.5006706714630127,left_val:0.2034195065498352},{features:[[17,7,2,10,-1.],[18,7,1,5,2.],[17,12,1,5,2.]],threshold:-0.0222412291914225,right_val:0.5046340227127075,left_val:0.7672473192214966},{features:[[1,7,2,10,-1.],[1,7,1,5,2.],[2,12,1,5,2.]],threshold:-0.0155758196488023,right_val:0.4755851030349731,left_val:0.7490342259407044},{features:[[15,10,3,6,-1.],[15,12,3,2,3.]],threshold:5.3599118255078793e-003,right_val:0.4004670977592468,left_val:0.5365303754806519},{features:[[4,4,6,2,-1.],[6,4,2,2,3.]],threshold:-0.0217634998261929,right_val:0.4964174926280975,left_val:0.0740154981613159},{features:[[0,5,20,6,-1.],[0,7,20,2,3.]],threshold:-0.1656159013509750,right_val:0.5218086242675781,left_val:0.2859103083610535},{features:[[0,0,8,2,-1.],[0,0,4,1,2.],[4,1,4,1,2.]],threshold:1.6461320046801120e-004,right_val:0.5380793213844299,left_val:0.4191615879535675},{features:[[1,0,18,4,-1.],[7,0,6,4,3.]],threshold:-8.9077502489089966e-003,right_val:0.4877404868602753,left_val:0.6273192763328552},{features:[[1,13,6,2,-1.],[1,14,6,1,2.]],threshold:8.6346449097618461e-004,right_val:0.3671025931835175,left_val:0.5159940719604492},{features:[[10,8,3,4,-1.],[11,8,1,4,3.]],threshold:-1.3751760125160217e-003,right_val:0.4579083919525147,left_val:0.5884376764297485},{features:[[6,1,6,1,-1.],[8,1,2,1,3.]],threshold:-1.4081239933148026e-003,right_val:0.5139945149421692,left_val:0.3560509979724884},{features:[[8,14,4,3,-1.],[8,15,4,1,3.]],threshold:-3.9342888630926609e-003,right_val:0.4664272069931030,left_val:0.5994288921356201},{features:[[1,6,18,2,-1.],[10,6,9,2,2.]],threshold:-0.0319669283926487,right_val:0.5144183039665222,left_val:0.3345462083816528},{features:[[15,11,1,2,-1.],[15,12,1,1,2.]],threshold:-1.5089280168467667e-005,right_val:0.4414057135581970,left_val:0.5582656264305115},{features:[[6,5,1,2,-1.],[6,6,1,1,2.]],threshold:5.1994470413774252e-004,right_val:0.6168993711471558,left_val:0.4623680114746094},{features:[[13,4,1,3,-1.],[13,5,1,1,3.]],threshold:-3.4220460802316666e-003,right_val:0.4974805116653442,left_val:0.6557074785232544},{features:[[2,15,1,2,-1.],[2,16,1,1,2.]],threshold:1.7723299970384687e-004,right_val:0.3901908099651337,left_val:0.5269501805305481},{features:[[12,4,4,3,-1.],[12,5,4,1,3.]],threshold:1.5716759953647852e-003,right_val:0.5790457725524902,left_val:0.4633373022079468},{features:[[0,0,7,3,-1.],[0,1,7,1,3.]],threshold:-8.9041329920291901e-003,right_val:0.5053591132164002,left_val:0.2689608037471771},{features:[[9,12,6,2,-1.],[9,12,3,2,2.]],threshold:4.0677518700249493e-004,right_val:0.4329898953437805,left_val:0.5456603169441223},{features:[[5,4,2,3,-1.],[5,5,2,1,3.]],threshold:6.7604780197143555e-003,right_val:0.6689761877059937,left_val:0.4648993909358978},{features:[[18,4,2,3,-1.],[18,5,2,1,3.]],threshold:2.9100088868290186e-003,right_val:0.3377839922904968,left_val:0.5309703946113586},{features:[[3,0,8,6,-1.],[3,2,8,2,3.]],threshold:1.3885459629818797e-003,right_val:0.5349133014678955,left_val:0.4074738919734955},{features:[[0,2,20,6,-1.],[10,2,10,3,2.],[0,5,10,3,2.]],threshold:-0.0767642632126808,right_val:0.5228242278099060,left_val:0.1992176026105881},{features:[[4,7,2,4,-1.],[5,7,1,4,2.]],threshold:-2.2688310127705336e-004,right_val:0.4253072142601013,left_val:0.5438501834869385},{features:[[3,10,15,2,-1.],[8,10,5,2,3.]],threshold:-6.3094152137637138e-003,right_val:0.5378909707069397,left_val:0.4259178936481476},{features:[[3,0,12,11,-1.],[9,0,6,11,2.]],threshold:-0.1100727990269661,right_val:0.4721749126911163,left_val:0.6904156804084778},{features:[[13,0,2,6,-1.],[13,0,1,6,2.]],threshold:2.8619659133255482e-004,right_val:0.5548306107521057,left_val:0.4524914920330048},{features:[[0,19,2,1,-1.],[1,19,1,1,2.]],threshold:2.9425329557852820e-005,right_val:0.4236463904380798,left_val:0.5370373725891113},{features:[[16,10,4,10,-1.],[18,10,2,5,2.],[16,15,2,5,2.]],threshold:-0.0248865708708763,right_val:0.4969303905963898,left_val:0.6423557996749878},{features:[[4,8,10,3,-1.],[4,9,10,1,3.]],threshold:0.0331488512456417,right_val:0.1613811999559403,left_val:0.4988475143909454},{features:[[14,12,3,3,-1.],[14,13,3,1,3.]],threshold:7.8491691965609789e-004,right_val:0.4223009049892426,left_val:0.5416026115417481},{features:[[0,10,4,10,-1.],[0,10,2,5,2.],[2,15,2,5,2.]],threshold:4.7087189741432667e-003,right_val:0.6027557849884033,left_val:0.4576328992843628},{features:[[18,3,2,6,-1.],[18,5,2,2,3.]],threshold:2.4144479539245367e-003,right_val:0.4422498941421509,left_val:0.5308973193168640},{features:[[6,6,1,3,-1.],[6,7,1,1,3.]],threshold:1.9523180089890957e-003,right_val:0.6663324832916260,left_val:0.4705634117126465},{features:[[7,7,7,2,-1.],[7,8,7,1,2.]],threshold:1.3031980488449335e-003,right_val:0.5526962280273438,left_val:0.4406126141548157},{features:[[0,3,2,6,-1.],[0,5,2,2,3.]],threshold:4.4735497795045376e-003,right_val:0.3301498889923096,left_val:0.5129023790359497},{features:[[11,1,3,1,-1.],[12,1,1,1,3.]],threshold:-2.6652868837118149e-003,right_val:0.5175036191940308,left_val:0.3135471045970917},{features:[[5,0,2,6,-1.],[6,0,1,6,2.]],threshold:1.3666770246345550e-004,right_val:0.5306876897811890,left_val:0.4119370877742767},{features:[[1,1,18,14,-1.],[7,1,6,14,3.]],threshold:-0.0171264503151178,right_val:0.4836578965187073,left_val:0.6177806258201599},{features:[[4,6,8,3,-1.],[8,6,4,3,2.]],threshold:-2.6601430727168918e-004,right_val:0.5169736742973328,left_val:0.3654330968856812},{features:[[9,12,6,2,-1.],[9,12,3,2,2.]],threshold:-0.0229323804378510,right_val:0.5163992047309876,left_val:0.3490915000438690},{features:[[5,12,6,2,-1.],[8,12,3,2,2.]],threshold:2.3316550068557262e-003,right_val:0.3709389865398407,left_val:0.5166299939155579},{features:[[10,7,3,5,-1.],[11,7,1,5,3.]],threshold:0.0169256608933210,right_val:0.8053988218307495,left_val:0.5014736056327820},{features:[[7,7,3,5,-1.],[8,7,1,5,3.]],threshold:-8.9858826249837875e-003,right_val:0.4657020866870880,left_val:0.6470788717269898},{features:[[13,0,3,10,-1.],[14,0,1,10,3.]],threshold:-0.0118746999651194,right_val:0.5258755087852478,left_val:0.3246378898620606},{features:[[4,11,3,2,-1.],[4,12,3,1,2.]],threshold:1.9350569345988333e-004,right_val:0.3839643895626068,left_val:0.5191941857337952},{features:[[17,3,3,6,-1.],[18,3,1,6,3.]],threshold:5.8713490143418312e-003,right_val:0.6187043190002441,left_val:0.4918133914470673},{features:[[1,8,18,10,-1.],[1,13,18,5,2.]],threshold:-0.2483879029750824,right_val:0.4988150000572205,left_val:0.1836802959442139},{features:[[13,0,3,10,-1.],[14,0,1,10,3.]],threshold:0.0122560001909733,right_val:0.3632029891014099,left_val:0.5227053761482239},{features:[[9,14,2,3,-1.],[9,15,2,1,3.]],threshold:8.3990179700776935e-004,right_val:0.5774148106575012,left_val:0.4490250051021576},{features:[[16,3,3,7,-1.],[17,3,1,7,3.]],threshold:2.5407369248569012e-003,right_val:0.5858299136161804,left_val:0.4804787039756775},{features:[[4,0,3,10,-1.],[5,0,1,10,3.]],threshold:-0.0148224299773574,right_val:0.5023537278175354,left_val:0.2521049976348877},{features:[[16,3,3,7,-1.],[17,3,1,7,3.]],threshold:-5.7973959483206272e-003,right_val:0.4853715002536774,left_val:0.5996695756912231},{features:[[0,9,1,2,-1.],[0,10,1,1,2.]],threshold:7.2662148158997297e-004,right_val:0.3671779930591583,left_val:0.5153716802597046},{features:[[18,1,2,10,-1.],[18,1,1,10,2.]],threshold:-0.0172325801104307,right_val:0.4994656145572662,left_val:0.6621719002723694},{features:[[0,1,2,10,-1.],[1,1,1,10,2.]],threshold:7.8624086454510689e-003,right_val:0.6256101727485657,left_val:0.4633395075798035},{features:[[10,16,3,4,-1.],[11,16,1,4,3.]],threshold:-4.7343620099127293e-003,right_val:0.5281885266304016,left_val:0.3615573048591614},{features:[[2,8,3,3,-1.],[3,8,1,3,3.]],threshold:8.3048478700220585e-004,right_val:0.5550957918167114,left_val:0.4442889094352722},{features:[[11,0,2,6,-1.],[12,0,1,3,2.],[11,3,1,3,2.]],threshold:7.6602199114859104e-003,right_val:0.2613354921340942,left_val:0.5162935256958008},{features:[[7,0,2,6,-1.],[7,0,1,3,2.],[8,3,1,3,2.]],threshold:-4.1048377752304077e-003,right_val:0.5019031763076782,left_val:0.2789632081985474},{features:[[16,3,3,7,-1.],[17,3,1,7,3.]],threshold:4.8512578941881657e-003,right_val:0.5661668181419373,left_val:0.4968984127044678},{features:[[1,3,3,7,-1.],[2,3,1,7,3.]],threshold:9.9896453320980072e-004,right_val:0.5551813244819641,left_val:0.4445607960224152},{features:[[14,1,6,16,-1.],[16,1,2,16,3.]],threshold:-0.2702363133430481,right_val:0.5151314139366150,left_val:0.0293882098048925},{features:[[0,1,6,16,-1.],[2,1,2,16,3.]],threshold:-0.0130906803533435,right_val:0.4447459876537323,left_val:0.5699399709701538},{features:[[2,0,16,8,-1.],[10,0,8,4,2.],[2,4,8,4,2.]],threshold:-9.4342790544033051e-003,right_val:0.5487895011901856,left_val:0.4305466115474701},{features:[[6,8,5,3,-1.],[6,9,5,1,3.]],threshold:-1.5482039889320731e-003,right_val:0.5128080844879150,left_val:0.3680317103862763},{features:[[9,7,3,3,-1.],[10,7,1,3,3.]],threshold:5.3746132180094719e-003,right_val:0.6101555824279785,left_val:0.4838916957378388},{features:[[8,8,4,3,-1.],[8,9,4,1,3.]],threshold:1.5786769799888134e-003,right_val:0.4118548035621643,left_val:0.5325223207473755},{features:[[9,6,2,4,-1.],[9,6,1,4,2.]],threshold:3.6856050137430429e-003,right_val:0.6252303123474121,left_val:0.4810948073863983},{features:[[0,7,15,1,-1.],[5,7,5,1,3.]],threshold:9.3887019902467728e-003,right_val:0.3629410862922669,left_val:0.5200229883193970},{features:[[8,2,7,9,-1.],[8,5,7,3,3.]],threshold:0.0127926301211119,right_val:0.6738016009330750,left_val:0.4961709976196289},{features:[[1,7,16,4,-1.],[1,7,8,2,2.],[9,9,8,2,2.]],threshold:-3.3661040943115950e-003,right_val:0.5283598899841309,left_val:0.4060279130935669},{features:[[6,12,8,2,-1.],[6,13,8,1,2.]],threshold:3.9771420415490866e-004,right_val:0.5900775194168091,left_val:0.4674113988876343},{features:[[8,11,3,3,-1.],[8,12,3,1,3.]],threshold:1.4868030557408929e-003,right_val:0.6082053780555725,left_val:0.4519116878509522},{features:[[4,5,14,10,-1.],[11,5,7,5,2.],[4,10,7,5,2.]],threshold:-0.0886867493391037,right_val:0.5180991888046265,left_val:0.2807899117469788},{features:[[4,12,3,2,-1.],[4,13,3,1,2.]],threshold:-7.4296112870797515e-005,right_val:0.4087625145912170,left_val:0.5295584201812744},{features:[[9,11,6,1,-1.],[11,11,2,1,3.]],threshold:-1.4932939848222304e-005,right_val:0.4538542926311493,left_val:0.5461400151252747},{features:[[4,9,7,6,-1.],[4,11,7,2,3.]],threshold:5.9162238612771034e-003,right_val:0.4192134141921997,left_val:0.5329161286354065},{features:[[7,10,6,3,-1.],[7,11,6,1,3.]],threshold:1.1141640134155750e-003,right_val:0.5706217288970947,left_val:0.4512017965316773},{features:[[9,11,2,2,-1.],[9,12,2,1,2.]],threshold:8.9249362645205110e-005,right_val:0.5897638201713562,left_val:0.4577805995941162},{features:[[0,5,20,6,-1.],[0,7,20,2,3.]],threshold:2.5319510605186224e-003,right_val:0.3357639014720917,left_val:0.5299603939056397},{features:[[6,4,6,1,-1.],[8,4,2,1,3.]],threshold:0.0124262003228068,right_val:0.1346601992845535,left_val:0.4959059059619904},{features:[[9,11,6,1,-1.],[11,11,2,1,3.]],threshold:0.0283357501029968,right_val:6.1043637106195092e-004,left_val:0.5117079019546509},{features:[[5,11,6,1,-1.],[7,11,2,1,3.]],threshold:6.6165882162749767e-003,right_val:0.7011628150939941,left_val:0.4736349880695343},{features:[[10,16,3,4,-1.],[11,16,1,4,3.]],threshold:8.0468766391277313e-003,right_val:0.3282819986343384,left_val:0.5216417908668518},{features:[[8,7,3,3,-1.],[9,7,1,3,3.]],threshold:-1.1193980462849140e-003,right_val:0.4563739001750946,left_val:0.5809860825538635},{features:[[2,12,16,8,-1.],[2,16,16,4,2.]],threshold:0.0132775902748108,right_val:0.4103901088237763,left_val:0.5398362278938294},{features:[[0,15,15,2,-1.],[0,16,15,1,2.]],threshold:4.8794739996083081e-004,right_val:0.5410590767860413,left_val:0.4249286055564880},{features:[[15,4,5,6,-1.],[15,6,5,2,3.]],threshold:0.0112431701272726,right_val:0.3438215851783752,left_val:0.5269963741302490},{features:[[9,5,2,4,-1.],[10,5,1,4,2.]],threshold:-8.9896668214350939e-004,right_val:0.4456613063812256,left_val:0.5633075833320618},{features:[[8,10,9,6,-1.],[8,12,9,2,3.]],threshold:6.6677159629762173e-003,right_val:0.4362679123878479,left_val:0.5312889218330383},{features:[[2,19,15,1,-1.],[7,19,5,1,3.]],threshold:0.0289472993463278,right_val:0.6575797796249390,left_val:0.4701794981956482},{features:[[10,16,3,4,-1.],[11,16,1,4,3.]],threshold:-0.0234000496566296,right_val:0.5137398838996887,left_val:0.},{features:[[0,15,20,4,-1.],[0,17,20,2,2.]],threshold:-0.0891170501708984,right_val:0.4942430853843689,left_val:0.0237452797591686},{features:[[10,16,3,4,-1.],[11,16,1,4,3.]],threshold:-0.0140546001493931,right_val:0.5117511153221130,left_val:0.3127323091030121},{features:[[7,16,3,4,-1.],[8,16,1,4,3.]],threshold:8.1239398568868637e-003,right_val:0.2520025968551636,left_val:0.5009049177169800},{features:[[9,16,3,3,-1.],[9,17,3,1,3.]],threshold:-4.9964650534093380e-003,right_val:0.4927811920642853,left_val:0.6387143731117249},{features:[[8,11,4,6,-1.],[8,14,4,3,2.]],threshold:3.1253970228135586e-003,right_val:0.3680452108383179,left_val:0.5136849880218506},{features:[[9,6,2,12,-1.],[9,10,2,4,3.]],threshold:6.7669642157852650e-003,right_val:0.4363631904125214,left_val:0.5509843826293945},{features:[[8,17,4,3,-1.],[8,18,4,1,3.]],threshold:-2.3711440153419971e-003,right_val:0.4586946964263916,left_val:0.6162335276603699},{features:[[9,18,8,2,-1.],[13,18,4,1,2.],[9,19,4,1,2.]],threshold:-5.3522791713476181e-003,right_val:0.4920490980148315,left_val:0.6185457706451416},{features:[[1,18,8,2,-1.],[1,19,8,1,2.]],threshold:-0.0159688591957092,right_val:0.4983252882957459,left_val:0.1382617950439453},{features:[[13,5,6,15,-1.],[15,5,2,15,3.]],threshold:4.7676060348749161e-003,right_val:0.5490046143531799,left_val:0.4688057899475098},{features:[[9,8,2,2,-1.],[9,9,2,1,2.]],threshold:-2.4714691098779440e-003,right_val:0.5003952980041504,left_val:0.2368514984846115},{features:[[9,5,2,3,-1.],[9,5,1,3,2.]],threshold:-7.1033788844943047e-004,right_val:0.4721533060073853,left_val:0.5856394171714783},{features:[[1,5,6,15,-1.],[3,5,2,15,3.]],threshold:-0.1411755979061127,right_val:0.4961591064929962,left_val:0.0869000628590584},{features:[[4,1,14,8,-1.],[11,1,7,4,2.],[4,5,7,4,2.]],threshold:0.1065180972218514,right_val:0.1741005033254623,left_val:0.5138837099075317},{features:[[2,4,4,16,-1.],[2,4,2,8,2.],[4,12,2,8,2.]],threshold:-0.0527447499334812,right_val:0.4772881865501404,left_val:0.7353636026382446},{features:[[12,4,3,12,-1.],[12,10,3,6,2.]],threshold:-4.7431760467588902e-003,right_val:0.5292701721191406,left_val:0.3884406089782715},{features:[[4,5,10,12,-1.],[4,5,5,6,2.],[9,11,5,6,2.]],threshold:9.9676765967160463e-004,right_val:0.4003424048423767,left_val:0.5223492980003357},{features:[[9,14,2,3,-1.],[9,15,2,1,3.]],threshold:8.0284131690859795e-003,right_val:0.7212964296340942,left_val:0.4959106147289276},{features:[[5,4,2,3,-1.],[5,5,2,1,3.]],threshold:8.6025858763605356e-004,right_val:0.5538476109504700,left_val:0.4444884061813355},{features:[[12,2,4,10,-1.],[14,2,2,5,2.],[12,7,2,5,2.]],threshold:9.3191501218825579e-004,right_val:0.4163244068622589,left_val:0.5398371219635010},{features:[[6,4,7,3,-1.],[6,5,7,1,3.]],threshold:-2.5082060601562262e-003,right_val:0.4562500119209290,left_val:0.5854265093803406},{features:[[2,0,18,2,-1.],[11,0,9,1,2.],[2,1,9,1,2.]],threshold:-2.1378761157393456e-003,right_val:0.5280259251594544,left_val:0.4608069062232971},{features:[[0,0,18,2,-1.],[0,0,9,1,2.],[9,1,9,1,2.]],threshold:-2.1546049974858761e-003,right_val:0.5255997180938721,left_val:0.3791126906871796},{features:[[13,13,4,6,-1.],[15,13,2,3,2.],[13,16,2,3,2.]],threshold:-7.6214009895920753e-003,right_val:0.4952073991298676,left_val:0.5998609066009522},{features:[[3,13,4,6,-1.],[3,13,2,3,2.],[5,16,2,3,2.]],threshold:2.2055360022932291e-003,right_val:0.5588530898094177,left_val:0.4484206140041351},{features:[[10,12,2,6,-1.],[10,15,2,3,2.]],threshold:1.2586950324475765e-003,right_val:0.4423840939998627,left_val:0.5450747013092041},{features:[[5,9,10,10,-1.],[5,9,5,5,2.],[10,14,5,5,2.]],threshold:-5.0926720723509789e-003,right_val:0.5263035893440247,left_val:0.4118275046348572},{features:[[11,4,4,2,-1.],[13,4,2,1,2.],[11,5,2,1,2.]],threshold:-2.5095739401876926e-003,right_val:0.4998494982719421,left_val:0.5787907838821411},{features:[[7,12,6,8,-1.],[10,12,3,8,2.]],threshold:-0.0773275569081306,right_val:0.4811120033264160,left_val:0.8397865891456604},{features:[[12,2,4,10,-1.],[14,2,2,5,2.],[12,7,2,5,2.]],threshold:-0.0414858199656010,right_val:0.5176993012428284,left_val:0.2408611029386520},{features:[[8,11,2,1,-1.],[9,11,1,1,2.]],threshold:1.0355669655837119e-004,right_val:0.5417054295539856,left_val:0.4355360865592957},{features:[[10,5,1,12,-1.],[10,9,1,4,3.]],threshold:1.3255809899419546e-003,right_val:0.4894095063209534,left_val:0.5453971028327942},{features:[[0,11,6,9,-1.],[3,11,3,9,2.]],threshold:-8.0598732456564903e-003,right_val:0.4577918946743012,left_val:0.5771024227142334},{features:[[12,2,4,10,-1.],[14,2,2,5,2.],[12,7,2,5,2.]],threshold:0.0190586205571890,right_val:0.3400475084781647,left_val:0.5169867873191834},{features:[[4,2,4,10,-1.],[4,2,2,5,2.],[6,7,2,5,2.]],threshold:-0.0350578911602497,right_val:0.5000503063201904,left_val:0.2203243970870972},{features:[[11,4,4,2,-1.],[13,4,2,1,2.],[11,5,2,1,2.]],threshold:5.7296059094369411e-003,right_val:0.6597570776939392,left_val:0.5043408274650574},{features:[[0,14,6,3,-1.],[0,15,6,1,3.]],threshold:-0.0116483299061656,right_val:0.4996652901172638,left_val:0.2186284959316254},{features:[[11,4,4,2,-1.],[13,4,2,1,2.],[11,5,2,1,2.]],threshold:1.4544479781761765e-003,right_val:0.5503727793693543,left_val:0.5007681846618652},{features:[[6,1,3,2,-1.],[7,1,1,2,3.]],threshold:-2.5030909455381334e-004,right_val:0.5241670012474060,left_val:0.4129841029644013},{features:[[11,4,4,2,-1.],[13,4,2,1,2.],[11,5,2,1,2.]],threshold:-8.2907272735610604e-004,right_val:0.4974496066570282,left_val:0.5412868261337280},{features:[[5,4,4,2,-1.],[5,4,2,1,2.],[7,5,2,1,2.]],threshold:1.0862209601327777e-003,right_val:0.5879228711128235,left_val:0.4605529904365540},{features:[[13,0,2,12,-1.],[14,0,1,6,2.],[13,6,1,6,2.]],threshold:2.0000500080641359e-004,right_val:0.4705209136009216,left_val:0.5278854966163635},{features:[[6,0,3,10,-1.],[7,0,1,10,3.]],threshold:2.9212920926511288e-003,right_val:0.3755536973476410,left_val:0.5129609704017639},{features:[[3,0,17,8,-1.],[3,4,17,4,2.]],threshold:0.0253874007612467,right_val:0.5790768265724182,left_val:0.4822691977024078},{features:[[0,4,20,4,-1.],[0,6,20,2,2.]],threshold:-3.1968469265848398e-003,right_val:0.3962840139865875,left_val:0.5248395204544067}],threshold:87.6960296630859380},{simpleClassifiers:[{features:[[0,3,8,2,-1.],[4,3,4,2,2.]],threshold:5.8031738735735416e-003,right_val:0.5961983203887940,left_val:0.3498983979225159},{features:[[8,11,4,3,-1.],[8,12,4,1,3.]],threshold:-9.0003069490194321e-003,right_val:0.4478552043437958,left_val:0.6816636919975281},{features:[[5,7,6,4,-1.],[5,7,3,2,2.],[8,9,3,2,2.]],threshold:-1.1549659539014101e-003,right_val:0.3578251004219055,left_val:0.5585706233978272},{features:[[8,3,4,9,-1.],[8,6,4,3,3.]],threshold:-1.1069850297644734e-003,right_val:0.3050428032875061,left_val:0.5365036129951477},{features:[[8,15,1,4,-1.],[8,17,1,2,2.]],threshold:1.0308309720130637e-004,right_val:0.5344635844230652,left_val:0.3639095127582550},{features:[[4,5,12,7,-1.],[8,5,4,7,3.]],threshold:-5.0984839908778667e-003,right_val:0.5504264831542969,left_val:0.2859157025814056},{features:[[4,2,4,10,-1.],[4,2,2,5,2.],[6,7,2,5,2.]],threshold:8.2572200335562229e-004,right_val:0.3476041853427887,left_val:0.5236523747444153},{features:[[3,0,17,2,-1.],[3,1,17,1,2.]],threshold:9.9783325567841530e-003,right_val:0.6219646930694580,left_val:0.4750322103500366},{features:[[2,2,16,15,-1.],[2,7,16,5,3.]],threshold:-0.0374025292694569,right_val:0.5278062820434570,left_val:0.3343375921249390},{features:[[15,2,5,2,-1.],[15,3,5,1,2.]],threshold:4.8548257909715176e-003,right_val:0.3700444102287293,left_val:0.5192180871963501},{features:[[9,3,2,2,-1.],[10,3,1,2,2.]],threshold:-1.8664470408111811e-003,right_val:0.5091944932937622,left_val:0.2929843962192535},{features:[[4,5,16,15,-1.],[4,10,16,5,3.]],threshold:0.0168888904154301,right_val:0.5431225895881653,left_val:0.3686845898628235},{features:[[7,13,5,6,-1.],[7,16,5,3,2.]],threshold:-5.8372621424496174e-003,right_val:0.5221335887908936,left_val:0.3632183969020844},{features:[[10,7,3,2,-1.],[11,7,1,2,3.]],threshold:-1.4713739510625601e-003,right_val:0.4700650870800018,left_val:0.5870683789253235},{features:[[8,3,3,1,-1.],[9,3,1,1,3.]],threshold:-1.1522950371727347e-003,right_val:0.5140954256057739,left_val:0.3195894956588745},{features:[[9,16,3,3,-1.],[9,17,3,1,3.]],threshold:-4.2560300789773464e-003,right_val:0.4814921021461487,left_val:0.6301859021186829},{features:[[0,2,5,2,-1.],[0,3,5,1,2.]],threshold:-6.7378291860222816e-003,right_val:0.5025808215141296,left_val:0.1977048069238663},{features:[[12,5,4,3,-1.],[12,6,4,1,3.]],threshold:0.0113826701417565,right_val:0.6867045760154724,left_val:0.4954132139682770},{features:[[1,7,12,1,-1.],[5,7,4,1,3.]],threshold:5.1794708706438541e-003,right_val:0.3350647985935211,left_val:0.5164427757263184},{features:[[7,5,6,14,-1.],[7,12,6,7,2.]],threshold:-0.1174378991127014,right_val:0.5234413743019104,left_val:0.2315246015787125},{features:[[0,0,8,10,-1.],[0,0,4,5,2.],[4,5,4,5,2.]],threshold:0.0287034492939711,right_val:0.6722521185874939,left_val:0.4664297103881836},{features:[[9,1,3,2,-1.],[10,1,1,2,3.]],threshold:4.8231030814349651e-003,right_val:0.2723532915115356,left_val:0.5220875144004822},{features:[[8,1,3,2,-1.],[9,1,1,2,3.]],threshold:2.6798530016094446e-003,right_val:0.2906948924064636,left_val:0.5079277157783508},{features:[[12,4,3,3,-1.],[12,5,3,1,3.]],threshold:8.0504082143306732e-003,right_val:0.6395021080970764,left_val:0.4885950982570648},{features:[[7,4,6,16,-1.],[7,12,6,8,2.]],threshold:4.8054959625005722e-003,right_val:0.3656663894653320,left_val:0.5197256803512573},{features:[[12,4,3,3,-1.],[12,5,3,1,3.]],threshold:-2.2420159075409174e-003,right_val:0.4763701856136322,left_val:0.6153467893600464},{features:[[2,3,2,6,-1.],[2,5,2,2,3.]],threshold:-0.0137577103450894,right_val:0.5030903220176697,left_val:0.2637344896793366},{features:[[14,2,6,9,-1.],[14,5,6,3,3.]],threshold:-0.1033829972147942,right_val:0.5182461142539978,left_val:0.2287521958351135},{features:[[5,4,3,3,-1.],[5,5,3,1,3.]],threshold:-9.4432085752487183e-003,right_val:0.4694949090480804,left_val:0.6953303813934326},{features:[[9,17,3,2,-1.],[10,17,1,2,3.]],threshold:8.0271181650459766e-004,right_val:0.4268783926963806,left_val:0.5450655221939087},{features:[[5,5,2,3,-1.],[5,6,2,1,3.]],threshold:-4.1945669800043106e-003,right_val:0.4571642875671387,left_val:0.6091387867927551},{features:[[13,11,3,6,-1.],[13,13,3,2,3.]],threshold:0.0109422104433179,right_val:0.3284547030925751,left_val:0.5241063237190247},{features:[[3,14,2,6,-1.],[3,17,2,3,2.]],threshold:-5.7841069065034389e-004,right_val:0.4179368913173676,left_val:0.5387929081916809},{features:[[14,3,6,2,-1.],[14,4,6,1,2.]],threshold:-2.0888620056211948e-003,right_val:0.5301715731620789,left_val:0.4292691051959992},{features:[[0,8,16,2,-1.],[0,9,16,1,2.]],threshold:3.2383969519287348e-003,right_val:0.5220744013786316,left_val:0.3792347908020020},{features:[[14,3,6,2,-1.],[14,4,6,1,2.]],threshold:4.9075027927756310e-003,right_val:0.4126757979393005,left_val:0.5237283110618591},{features:[[0,0,5,6,-1.],[0,2,5,2,3.]],threshold:-0.0322779417037964,right_val:0.4994502067565918,left_val:0.1947655975818634},{features:[[12,5,4,3,-1.],[12,6,4,1,3.]],threshold:-8.9711230248212814e-003,right_val:0.4929032027721405,left_val:0.6011285185813904},{features:[[4,11,3,6,-1.],[4,13,3,2,3.]],threshold:0.0153210898861289,right_val:0.2039822041988373,left_val:0.5009753704071045},{features:[[12,5,4,3,-1.],[12,6,4,1,3.]],threshold:2.0855569746345282e-003,right_val:0.5721694827079773,left_val:0.4862189888954163},{features:[[9,5,1,3,-1.],[9,6,1,1,3.]],threshold:5.0615021027624607e-003,right_val:0.1801805943250656,left_val:0.5000218749046326},{features:[[12,5,4,3,-1.],[12,6,4,1,3.]],threshold:-3.7174751050770283e-003,right_val:0.4897592961788178,left_val:0.5530117154121399},{features:[[6,6,8,12,-1.],[6,12,8,6,2.]],threshold:-0.0121705001220107,right_val:0.5383723974227905,left_val:0.4178605973720551},{features:[[12,5,4,3,-1.],[12,6,4,1,3.]],threshold:4.6248398721218109e-003,right_val:0.5761327147483826,left_val:0.4997169971466065},{features:[[5,12,9,2,-1.],[8,12,3,2,3.]],threshold:-2.1040429419372231e-004,right_val:0.4097681045532227,left_val:0.5331807136535645},{features:[[12,5,4,3,-1.],[12,6,4,1,3.]],threshold:-0.0146417804062366,right_val:0.5051776170730591,left_val:0.5755925178527832},{features:[[4,5,4,3,-1.],[4,6,4,1,3.]],threshold:3.3199489116668701e-003,right_val:0.6031805872917175,left_val:0.4576976895332336},{features:[[6,6,9,2,-1.],[9,6,3,2,3.]],threshold:3.7236879579722881e-003,right_val:0.5415883064270020,left_val:0.4380396902561188},{features:[[4,11,1,3,-1.],[4,12,1,1,3.]],threshold:8.2951161311939359e-004,right_val:0.3702219128608704,left_val:0.5163031816482544},{features:[[14,12,6,6,-1.],[14,12,3,6,2.]],threshold:-0.0114084901288152,right_val:0.4862565100193024,left_val:0.6072946786880493},{features:[[7,0,3,7,-1.],[8,0,1,7,3.]],threshold:-4.5320121571421623e-003,right_val:0.5088962912559509,left_val:0.3292475938796997},{features:[[9,8,3,3,-1.],[10,8,1,3,3.]],threshold:5.1276017911732197e-003,right_val:0.6122708916664124,left_val:0.4829767942428589},{features:[[8,8,3,3,-1.],[9,8,1,3,3.]],threshold:9.8583158105611801e-003,right_val:0.6556177139282227,left_val:0.4660679996013641},{features:[[5,10,11,3,-1.],[5,11,11,1,3.]],threshold:0.0369859188795090,right_val:0.1690472066402435,left_val:0.5204849243164063},{features:[[5,7,10,1,-1.],[10,7,5,1,2.]],threshold:4.6491161920130253e-003,right_val:0.3725225031375885,left_val:0.5167322158813477},{features:[[9,7,3,2,-1.],[10,7,1,2,3.]],threshold:-4.2664702050387859e-003,right_val:0.4987342953681946,left_val:0.6406493186950684},{features:[[8,7,3,2,-1.],[9,7,1,2,3.]],threshold:-4.7956590424291790e-004,right_val:0.4464873969554901,left_val:0.5897293090820313},{features:[[11,9,4,2,-1.],[11,9,2,2,2.]],threshold:3.6827160511165857e-003,right_val:0.3472662866115570,left_val:0.5441560745239258},{features:[[5,9,4,2,-1.],[7,9,2,2,2.]],threshold:-0.0100598800927401,right_val:0.5004829764366150,left_val:0.2143162935972214},{features:[[14,10,2,4,-1.],[14,12,2,2,2.]],threshold:-3.0361840617842972e-004,right_val:0.4590323865413666,left_val:0.5386424064636231},{features:[[7,7,3,2,-1.],[8,7,1,2,3.]],threshold:-1.4545479789376259e-003,right_val:0.4497095048427582,left_val:0.5751184225082398},{features:[[14,17,6,3,-1.],[14,18,6,1,3.]],threshold:1.6515209572389722e-003,right_val:0.4238520860671997,left_val:0.5421937704086304},{features:[[4,5,12,12,-1.],[4,5,6,6,2.],[10,11,6,6,2.]],threshold:-7.8468639403581619e-003,right_val:0.5258157253265381,left_val:0.4077920913696289},{features:[[6,9,8,8,-1.],[10,9,4,4,2.],[6,13,4,4,2.]],threshold:-5.1259850151836872e-003,right_val:0.5479453206062317,left_val:0.4229275882244110},{features:[[0,4,15,4,-1.],[5,4,5,4,3.]],threshold:-0.0368909612298012,right_val:0.4674678146839142,left_val:0.6596375703811646},{features:[[13,2,4,1,-1.],[13,2,2,1,2.]],threshold:2.4035639944486320e-004,right_val:0.5573202967643738,left_val:0.4251135885715485},{features:[[4,12,2,2,-1.],[4,13,2,1,2.]],threshold:-1.5150169929256663e-005,right_val:0.4074114859104157,left_val:0.5259246826171875},{features:[[8,13,4,3,-1.],[8,14,4,1,3.]],threshold:2.2108471021056175e-003,right_val:0.5886352062225342,left_val:0.4671722948551178},{features:[[9,13,2,3,-1.],[9,14,2,1,3.]],threshold:-1.1568620102480054e-003,right_val:0.4487161934375763,left_val:0.5711066126823425},{features:[[13,11,2,3,-1.],[13,12,2,1,3.]],threshold:4.9996292218565941e-003,right_val:0.2898327112197876,left_val:0.5264198184013367},{features:[[7,12,4,4,-1.],[7,12,2,2,2.],[9,14,2,2,2.]],threshold:-1.4656189596280456e-003,right_val:0.5197871923446655,left_val:0.3891738057136536},{features:[[10,11,2,2,-1.],[11,11,1,1,2.],[10,12,1,1,2.]],threshold:-1.1975039960816503e-003,right_val:0.4927955865859985,left_val:0.5795872807502747},{features:[[8,17,3,2,-1.],[9,17,1,2,3.]],threshold:-4.4954330660402775e-003,right_val:0.5012555122375488,left_val:0.2377603054046631},{features:[[10,11,2,2,-1.],[11,11,1,1,2.],[10,12,1,1,2.]],threshold:1.4997160178609192e-004,right_val:0.5617607831954956,left_val:0.4876626133918762},{features:[[0,17,6,3,-1.],[0,18,6,1,3.]],threshold:2.6391509454697371e-003,right_val:0.3765509128570557,left_val:0.5168088078498840},{features:[[10,11,2,2,-1.],[11,11,1,1,2.],[10,12,1,1,2.]],threshold:-2.9368131072260439e-004,right_val:0.4874630868434906,left_val:0.5446649193763733},{features:[[8,11,2,2,-1.],[8,11,1,1,2.],[9,12,1,1,2.]],threshold:1.4211760135367513e-003,right_val:0.6691331863403320,left_val:0.4687897861003876},{features:[[12,5,8,4,-1.],[12,5,4,4,2.]],threshold:0.0794276371598244,right_val:0.2732945978641510,left_val:0.5193443894386292},{features:[[0,5,8,4,-1.],[4,5,4,4,2.]],threshold:0.0799375027418137,right_val:0.1782083958387375,left_val:0.4971731007099152},{features:[[13,2,4,1,-1.],[13,2,2,1,2.]],threshold:0.0110892597585917,right_val:0.3209475874900818,left_val:0.5165994763374329},{features:[[3,2,4,1,-1.],[5,2,2,1,2.]],threshold:1.6560709627810866e-004,right_val:0.5307276248931885,left_val:0.4058471918106079},{features:[[10,0,4,2,-1.],[12,0,2,1,2.],[10,1,2,1,2.]],threshold:-5.3354292176663876e-003,right_val:0.5158129930496216,left_val:0.3445056974887848},{features:[[7,12,3,1,-1.],[8,12,1,1,3.]],threshold:1.1287260567769408e-003,right_val:0.6075533032417297,left_val:0.4594863057136536},{features:[[8,11,4,8,-1.],[10,11,2,4,2.],[8,15,2,4,2.]],threshold:-0.0219692196696997,right_val:0.5228595733642578,left_val:0.1680400967597961},{features:[[9,9,2,2,-1.],[9,10,2,1,2.]],threshold:-2.1775320055894554e-004,right_val:0.5215672850608826,left_val:0.3861596882343292},{features:[[3,18,15,2,-1.],[3,19,15,1,2.]],threshold:2.0200149447191507e-004,right_val:0.4363039135932922,left_val:0.5517979264259338},{features:[[2,6,2,12,-1.],[2,6,1,6,2.],[3,12,1,6,2.]],threshold:-0.0217331498861313,right_val:0.4789851009845734,left_val:0.7999460101127625},{features:[[9,8,2,3,-1.],[9,9,2,1,3.]],threshold:-8.4399932529777288e-004,right_val:0.5374773144721985,left_val:0.4085975885391235},{features:[[7,10,3,2,-1.],[8,10,1,2,3.]],threshold:-4.3895249837078154e-004,right_val:0.4366143047809601,left_val:0.5470405220985413},{features:[[11,11,3,1,-1.],[12,11,1,1,3.]],threshold:1.5092400135472417e-003,right_val:0.5842149257659912,left_val:0.4988996982574463},{features:[[6,11,3,1,-1.],[7,11,1,1,3.]],threshold:-3.5547839943319559e-003,right_val:0.4721005856990814,left_val:0.6753690242767334},{features:[[9,2,4,2,-1.],[11,2,2,1,2.],[9,3,2,1,2.]],threshold:4.8191400128416717e-004,right_val:0.4357109069824219,left_val:0.5415853857994080},{features:[[4,12,2,3,-1.],[4,13,2,1,3.]],threshold:-6.0264398343861103e-003,right_val:0.4991880953311920,left_val:0.2258509993553162},{features:[[2,1,18,3,-1.],[8,1,6,3,3.]],threshold:-0.0116681400686502,right_val:0.4927498996257782,left_val:0.6256554722785950},{features:[[5,1,4,14,-1.],[7,1,2,14,2.]],threshold:-2.8718370012938976e-003,right_val:0.5245801806449890,left_val:0.3947784900665283},{features:[[8,16,12,3,-1.],[8,16,6,3,2.]],threshold:0.0170511696487665,right_val:0.5794224143028259,left_val:0.4752511084079742},{features:[[1,17,18,3,-1.],[7,17,6,3,3.]],threshold:-0.0133520802482963,right_val:0.4544535875320435,left_val:0.6041104793548584},{features:[[9,14,2,6,-1.],[9,17,2,3,2.]],threshold:-3.9301801007241011e-004,right_val:0.5544905066490173,left_val:0.4258275926113129},{features:[[9,12,1,8,-1.],[9,16,1,4,2.]],threshold:3.0483349692076445e-003,right_val:0.3780272901058197,left_val:0.5233420133590698},{features:[[9,14,2,3,-1.],[9,15,2,1,3.]],threshold:-4.3579288758337498e-003,right_val:0.4838674068450928,left_val:0.6371889114379883},{features:[[9,6,2,12,-1.],[9,10,2,4,3.]],threshold:5.6661018170416355e-003,right_val:0.4163666069507599,left_val:0.5374705791473389},{features:[[12,9,3,3,-1.],[12,10,3,1,3.]],threshold:6.0677339206449687e-005,right_val:0.5311625003814697,left_val:0.4638795852661133},{features:[[0,1,4,8,-1.],[2,1,2,8,2.]],threshold:0.0367381609976292,right_val:0.6466524004936218,left_val:0.4688656032085419},{features:[[9,1,6,2,-1.],[12,1,3,1,2.],[9,2,3,1,2.]],threshold:8.6528137326240540e-003,right_val:0.2188657969236374,left_val:0.5204318761825562},{features:[[1,3,12,14,-1.],[1,10,12,7,2.]],threshold:-0.1537135988473892,right_val:0.4958840012550354,left_val:0.1630371958017349},{features:[[8,12,4,2,-1.],[10,12,2,1,2.],[8,13,2,1,2.]],threshold:-4.1560421232134104e-004,right_val:0.4696458876132965,left_val:0.5774459242820740},{features:[[1,9,10,2,-1.],[1,9,5,1,2.],[6,10,5,1,2.]],threshold:-1.2640169588848948e-003,right_val:0.5217198133468628,left_val:0.3977175951004028},{features:[[8,15,4,3,-1.],[8,16,4,1,3.]],threshold:-3.5473341122269630e-003,right_val:0.4808315038681030,left_val:0.6046528220176697},{features:[[6,8,8,3,-1.],[6,9,8,1,3.]],threshold:3.0019069527043030e-005,right_val:0.5228201150894165,left_val:0.3996723890304565},{features:[[9,15,5,3,-1.],[9,16,5,1,3.]],threshold:1.3113019522279501e-003,right_val:0.5765997767448425,left_val:0.4712158143520355},{features:[[8,7,4,3,-1.],[8,8,4,1,3.]],threshold:-1.3374709524214268e-003,right_val:0.5253170132637024,left_val:0.4109584987163544},{features:[[7,7,6,2,-1.],[7,8,6,1,2.]],threshold:0.0208767093718052,right_val:0.1757981926202774,left_val:0.5202993750572205},{features:[[5,7,8,2,-1.],[5,7,4,1,2.],[9,8,4,1,2.]],threshold:-7.5497948564589024e-003,right_val:0.4694975018501282,left_val:0.6566609740257263},{features:[[12,9,3,3,-1.],[12,10,3,1,3.]],threshold:0.0241885501891375,right_val:0.3370220959186554,left_val:0.5128673911094666},{features:[[4,7,4,2,-1.],[4,8,4,1,2.]],threshold:-2.9358828905969858e-003,right_val:0.4694541096687317,left_val:0.6580786705017090},{features:[[14,2,6,9,-1.],[14,5,6,3,3.]],threshold:0.0575579293072224,right_val:0.2775259912014008,left_val:0.5146445035934448},{features:[[4,9,3,3,-1.],[5,9,1,3,3.]],threshold:-1.1343370424583554e-003,right_val:0.5192667245864868,left_val:0.3836601972579956},{features:[[12,9,3,3,-1.],[12,10,3,1,3.]],threshold:0.0168169997632504,right_val:0.6177260875701904,left_val:0.5085592865943909},{features:[[0,2,6,9,-1.],[0,5,6,3,3.]],threshold:5.0535178743302822e-003,right_val:0.3684791922569275,left_val:0.5138763189315796},{features:[[17,3,3,6,-1.],[18,3,1,6,3.]],threshold:-4.5874710194766521e-003,right_val:0.4835202097892761,left_val:0.5989655256271362},{features:[[0,3,3,6,-1.],[1,3,1,6,3.]],threshold:1.6882460331544280e-003,right_val:0.5723056793212891,left_val:0.4509486854076386},{features:[[17,14,1,2,-1.],[17,15,1,1,2.]],threshold:-1.6554000321775675e-003,right_val:0.5243319272994995,left_val:0.3496770858764648},{features:[[4,9,4,3,-1.],[6,9,2,3,2.]],threshold:-0.0193738006055355,right_val:0.4968712925910950,left_val:0.1120536997914314},{features:[[12,9,3,3,-1.],[12,10,3,1,3.]],threshold:0.0103744501248002,right_val:0.4395213127136231,left_val:0.5148196816444397},{features:[[5,9,3,3,-1.],[5,10,3,1,3.]],threshold:1.4973050565458834e-004,right_val:0.5269886851310730,left_val:0.4084999859333038},{features:[[9,5,6,8,-1.],[12,5,3,4,2.],[9,9,3,4,2.]],threshold:-0.0429819300770760,right_val:0.5018504261970520,left_val:0.6394104957580566},{features:[[5,5,6,8,-1.],[5,5,3,4,2.],[8,9,3,4,2.]],threshold:8.3065936341881752e-003,right_val:0.6698353290557861,left_val:0.4707553982734680},{features:[[16,1,4,6,-1.],[16,4,4,3,2.]],threshold:-4.1285790503025055e-003,right_val:0.5323647260665894,left_val:0.4541369080543518},{features:[[1,0,6,20,-1.],[3,0,2,20,3.]],threshold:1.7399420030415058e-003,right_val:0.5439866185188294,left_val:0.4333961904048920},{features:[[12,11,3,2,-1.],[13,11,1,2,3.]],threshold:1.1739750334527344e-004,right_val:0.5543426275253296,left_val:0.4579687118530273},{features:[[5,11,3,2,-1.],[6,11,1,2,3.]],threshold:1.8585780344437808e-004,right_val:0.5426754951477051,left_val:0.4324643909931183},{features:[[9,4,6,1,-1.],[11,4,2,1,3.]],threshold:5.5587692186236382e-003,right_val:0.3550611138343811,left_val:0.5257220864295960},{features:[[0,0,8,3,-1.],[4,0,4,3,2.]],threshold:-7.9851560294628143e-003,right_val:0.4630635976791382,left_val:0.6043018102645874},{features:[[15,0,2,5,-1.],[15,0,1,5,2.]],threshold:6.0594122624024749e-004,right_val:0.5533195137977600,left_val:0.4598254859447479},{features:[[4,1,3,2,-1.],[5,1,1,2,3.]],threshold:-2.2983040253166109e-004,right_val:0.5322461128234863,left_val:0.4130752086639404},{features:[[7,0,6,15,-1.],[9,0,2,15,3.]],threshold:4.3740210821852088e-004,right_val:0.5409289002418518,left_val:0.4043039977550507},{features:[[6,11,3,1,-1.],[7,11,1,1,3.]],threshold:2.9482020181603730e-004,right_val:0.5628852248191834,left_val:0.4494963884353638},{features:[[12,0,3,4,-1.],[13,0,1,4,3.]],threshold:0.0103126596659422,right_val:0.2704316973686218,left_val:0.5177510976791382},{features:[[5,4,6,1,-1.],[7,4,2,1,3.]],threshold:-7.7241109684109688e-003,right_val:0.4980553984642029,left_val:0.1988019049167633},{features:[[12,7,3,2,-1.],[12,8,3,1,2.]],threshold:-4.6797208487987518e-003,right_val:0.5018296241760254,left_val:0.6644750237464905},{features:[[0,1,4,6,-1.],[0,4,4,3,2.]],threshold:-5.0755459815263748e-003,right_val:0.5185269117355347,left_val:0.3898304998874664},{features:[[12,7,3,2,-1.],[12,8,3,1,2.]],threshold:2.2479740437120199e-003,right_val:0.5660336017608643,left_val:0.4801808893680573},{features:[[2,16,3,3,-1.],[2,17,3,1,3.]],threshold:8.3327008178457618e-004,right_val:0.3957188129425049,left_val:0.5210919976234436},{features:[[13,8,6,10,-1.],[16,8,3,5,2.],[13,13,3,5,2.]],threshold:-0.0412793308496475,right_val:0.5007054209709168,left_val:0.6154541969299316},{features:[[0,9,5,2,-1.],[0,10,5,1,2.]],threshold:-5.0930189900100231e-004,right_val:0.5228403806686401,left_val:0.3975942134857178},{features:[[12,11,2,2,-1.],[13,11,1,1,2.],[12,12,1,1,2.]],threshold:1.2568780221045017e-003,right_val:0.5939183235168457,left_val:0.4979138076305389},{features:[[3,15,3,3,-1.],[3,16,3,1,3.]],threshold:8.0048497766256332e-003,right_val:0.1633366048336029,left_val:0.4984497129917145},{features:[[12,7,3,2,-1.],[12,8,3,1,2.]],threshold:-1.1879300000146031e-003,right_val:0.4942624866962433,left_val:0.5904964804649353},{features:[[5,7,3,2,-1.],[5,8,3,1,2.]],threshold:6.1948952497914433e-004,right_val:0.5328726172447205,left_val:0.4199557900428772},{features:[[9,5,9,9,-1.],[9,8,9,3,3.]],threshold:6.6829859279096127e-003,right_val:0.4905889034271240,left_val:0.5418602824211121},{features:[[5,0,3,7,-1.],[6,0,1,7,3.]],threshold:-3.7062340416014194e-003,right_val:0.5138000249862671,left_val:0.3725939095020294},{features:[[5,2,12,5,-1.],[9,2,4,5,3.]],threshold:-0.0397394113242626,right_val:0.5050346851348877,left_val:0.6478961110115051},{features:[[6,11,2,2,-1.],[6,11,1,1,2.],[7,12,1,1,2.]],threshold:1.4085009461268783e-003,right_val:0.6377884149551392,left_val:0.4682339131832123},{features:[[15,15,3,2,-1.],[15,16,3,1,2.]],threshold:3.9322688826359808e-004,right_val:0.4150482118129730,left_val:0.5458530187606812},{features:[[2,15,3,2,-1.],[2,16,3,1,2.]],threshold:-1.8979819724336267e-003,right_val:0.5149704217910767,left_val:0.3690159916877747},{features:[[14,12,6,8,-1.],[17,12,3,4,2.],[14,16,3,4,2.]],threshold:-0.0139704402536154,right_val:0.4811357855796814,left_val:0.6050562858581543},{features:[[2,8,15,6,-1.],[7,8,5,6,3.]],threshold:-0.1010081991553307,right_val:0.4992361962795258,left_val:0.2017080038785934},{features:[[2,2,18,17,-1.],[8,2,6,17,3.]],threshold:-0.0173469204455614,right_val:0.4899486005306244,left_val:0.5713148713111877},{features:[[5,1,4,1,-1.],[7,1,2,1,2.]],threshold:1.5619759506080300e-004,right_val:0.5392642021179199,left_val:0.4215388894081116},{features:[[5,2,12,5,-1.],[9,2,4,5,3.]],threshold:0.1343892961740494,right_val:0.3767612874507904,left_val:0.5136151909828186},{features:[[3,2,12,5,-1.],[7,2,4,5,3.]],threshold:-0.0245822407305241,right_val:0.4747906923294067,left_val:0.7027357816696167},{features:[[4,9,12,4,-1.],[10,9,6,2,2.],[4,11,6,2,2.]],threshold:-3.8553720805794001e-003,right_val:0.5427716970443726,left_val:0.4317409098148346},{features:[[5,15,6,2,-1.],[5,15,3,1,2.],[8,16,3,1,2.]],threshold:-2.3165249731391668e-003,right_val:0.4618647992610931,left_val:0.5942698717117310},{features:[[10,14,2,3,-1.],[10,15,2,1,3.]],threshold:-4.8518120311200619e-003,right_val:0.4884895086288452,left_val:0.6191568970680237},{features:[[0,13,20,2,-1.],[0,13,10,1,2.],[10,14,10,1,2.]],threshold:2.4699938949197531e-003,right_val:0.4017199873924255,left_val:0.5256664752960205},{features:[[4,9,12,8,-1.],[10,9,6,4,2.],[4,13,6,4,2.]],threshold:0.0454969592392445,right_val:0.2685773968696594,left_val:0.5237867832183838},{features:[[8,13,3,6,-1.],[8,16,3,3,2.]],threshold:-0.0203195996582508,right_val:0.4979738891124725,left_val:0.2130445986986160},{features:[[10,12,2,2,-1.],[10,13,2,1,2.]],threshold:2.6994998916052282e-004,right_val:0.5543122291564941,left_val:0.4814041852951050},{features:[[9,12,2,2,-1.],[9,12,1,1,2.],[10,13,1,1,2.]],threshold:-1.8232699949294329e-003,right_val:0.4709989130496979,left_val:0.6482579708099365},{features:[[4,11,14,4,-1.],[11,11,7,2,2.],[4,13,7,2,2.]],threshold:-6.3015790656208992e-003,right_val:0.5306236147880554,left_val:0.4581927955150604},{features:[[8,5,4,2,-1.],[8,6,4,1,2.]],threshold:-2.4139499873854220e-004,right_val:0.4051763117313385,left_val:0.5232086777687073},{features:[[10,10,6,3,-1.],[12,10,2,3,3.]],threshold:-1.0330369696021080e-003,right_val:0.4789193868637085,left_val:0.5556201934814453},{features:[[2,14,1,2,-1.],[2,15,1,1,2.]],threshold:1.8041160365100950e-004,right_val:0.4011810123920441,left_val:0.5229442715644836},{features:[[13,8,6,12,-1.],[16,8,3,6,2.],[13,14,3,6,2.]],threshold:-0.0614078603684902,right_val:0.5010703206062317,left_val:0.6298682093620300},{features:[[1,8,6,12,-1.],[1,8,3,6,2.],[4,14,3,6,2.]],threshold:-0.0695439130067825,right_val:0.4773184061050415,left_val:0.7228280901908875},{features:[[10,0,6,10,-1.],[12,0,2,10,3.]],threshold:-0.0705426633358002,right_val:0.5182529091835022,left_val:0.2269513010978699},{features:[[5,11,8,4,-1.],[5,11,4,2,2.],[9,13,4,2,2.]],threshold:2.4423799477517605e-003,right_val:0.4098151028156281,left_val:0.5237097144126892},{features:[[10,16,8,4,-1.],[14,16,4,2,2.],[10,18,4,2,2.]],threshold:1.5494349645450711e-003,right_val:0.5468043088912964,left_val:0.4773750901222229},{features:[[7,7,6,6,-1.],[9,7,2,6,3.]],threshold:-0.0239142198115587,right_val:0.4783824980258942,left_val:0.7146975994110107},{features:[[10,2,4,10,-1.],[10,2,2,10,2.]],threshold:-0.0124536901712418,right_val:0.5241122841835022,left_val:0.2635296881198883},{features:[[6,1,4,9,-1.],[8,1,2,9,2.]],threshold:-2.0760179904755205e-004,right_val:0.5113608837127686,left_val:0.3623757064342499},{features:[[12,19,2,1,-1.],[12,19,1,1,2.]],threshold:2.9781080229440704e-005,right_val:0.5432801842689514,left_val:0.4705932140350342}],threshold:90.2533493041992190},{simpleClassifiers:[{features:[[1,2,4,9,-1.],[3,2,2,9,2.]],threshold:0.0117727499455214,right_val:0.6421167254447937,left_val:0.3860518932342529},{features:[[7,5,6,4,-1.],[9,5,2,4,3.]],threshold:0.0270375702530146,right_val:0.6754038929939270,left_val:0.4385654926300049},{features:[[9,4,2,4,-1.],[9,6,2,2,2.]],threshold:-3.6419500247575343e-005,right_val:0.3423315882682800,left_val:0.5487101078033447},{features:[[14,5,2,8,-1.],[14,9,2,4,2.]],threshold:1.9995409529656172e-003,right_val:0.5400317907333374,left_val:0.3230532109737396},{features:[[7,6,5,12,-1.],[7,12,5,6,2.]],threshold:4.5278300531208515e-003,right_val:0.2935043871402741,left_val:0.5091639757156372},{features:[[14,6,2,6,-1.],[14,9,2,3,2.]],threshold:4.7890920541249216e-004,right_val:0.5344064235687256,left_val:0.4178153872489929},{features:[[4,6,2,6,-1.],[4,9,2,3,2.]],threshold:1.1720920447260141e-003,right_val:0.5132070779800415,left_val:0.2899182140827179},{features:[[8,15,10,4,-1.],[13,15,5,2,2.],[8,17,5,2,2.]],threshold:9.5305702416226268e-004,right_val:0.5560845136642456,left_val:0.4280124902725220},{features:[[6,18,2,2,-1.],[7,18,1,2,2.]],threshold:1.5099150004971307e-005,right_val:0.5404760241508484,left_val:0.4044871926307678},{features:[[11,3,6,2,-1.],[11,4,6,1,2.]],threshold:-6.0817901976406574e-004,right_val:0.5503466129302979,left_val:0.4271768927574158},{features:[[2,0,16,6,-1.],[2,2,16,2,3.]],threshold:3.3224520739167929e-003,right_val:0.5369734764099121,left_val:0.3962723910808563},{features:[[11,3,6,2,-1.],[11,4,6,1,2.]],threshold:-1.1037490330636501e-003,right_val:0.5237749814987183,left_val:0.4727177917957306},{features:[[4,11,10,3,-1.],[4,12,10,1,3.]],threshold:-1.4350269921123981e-003,right_val:0.4223509132862091,left_val:0.5603008270263672},{features:[[11,3,6,2,-1.],[11,4,6,1,2.]],threshold:2.0767399109899998e-003,right_val:0.4732725918292999,left_val:0.5225917100906372},{features:[[3,3,6,2,-1.],[3,4,6,1,2.]],threshold:-1.6412809782195836e-004,right_val:0.5432739853858948,left_val:0.3999075889587402},{features:[[16,0,4,7,-1.],[16,0,2,7,2.]],threshold:8.8302437216043472e-003,right_val:0.6027327179908752,left_val:0.4678385853767395},{features:[[0,14,9,6,-1.],[0,16,9,2,3.]],threshold:-0.0105520701035857,right_val:0.5213974714279175,left_val:0.3493967056274414},{features:[[9,16,3,3,-1.],[9,17,3,1,3.]],threshold:-2.2731600329279900e-003,right_val:0.4749062955379486,left_val:0.6185818910598755},{features:[[4,6,6,2,-1.],[6,6,2,2,3.]],threshold:-8.4786332445219159e-004,right_val:0.3843482136726379,left_val:0.5285341143608093},{features:[[15,11,1,3,-1.],[15,12,1,1,3.]],threshold:1.2081359745934606e-003,right_val:0.3447335958480835,left_val:0.5360640883445740},{features:[[5,5,2,3,-1.],[5,6,2,1,3.]],threshold:2.6512730401009321e-003,right_val:0.6193962097167969,left_val:0.4558292031288147},{features:[[10,9,2,2,-1.],[10,10,2,1,2.]],threshold:-1.1012479662895203e-003,right_val:0.5327628254890442,left_val:0.3680230081081390},{features:[[3,1,4,3,-1.],[5,1,2,3,2.]],threshold:4.9561518244445324e-004,right_val:0.5274940729141235,left_val:0.3960595130920410},{features:[[16,0,4,7,-1.],[16,0,2,7,2.]],threshold:-0.0439017713069916,right_val:0.4992839097976685,left_val:0.7020444869995117},{features:[[0,0,20,1,-1.],[10,0,10,1,2.]],threshold:0.0346903502941132,right_val:0.2766602933406830,left_val:0.5049164295196533},{features:[[15,11,1,3,-1.],[15,12,1,1,3.]],threshold:-2.7442190330475569e-003,right_val:0.5274971127510071,left_val:0.2672632932662964},{features:[[0,4,3,4,-1.],[1,4,1,4,3.]],threshold:3.3316588960587978e-003,right_val:0.6001101732254028,left_val:0.4579482972621918},{features:[[16,3,3,6,-1.],[16,5,3,2,3.]],threshold:-0.0200445707887411,right_val:0.5235717892646790,left_val:0.3171594142913818},{features:[[1,3,3,6,-1.],[1,5,3,2,3.]],threshold:1.3492030557245016e-003,right_val:0.4034324884414673,left_val:0.5265362858772278},{features:[[6,2,12,6,-1.],[12,2,6,3,2.],[6,5,6,3,2.]],threshold:2.9702018946409225e-003,right_val:0.4571984112262726,left_val:0.5332456827163696},{features:[[8,10,4,3,-1.],[8,11,4,1,3.]],threshold:6.3039981760084629e-003,right_val:0.6034635901451111,left_val:0.4593310952186585},{features:[[4,2,14,6,-1.],[11,2,7,3,2.],[4,5,7,3,2.]],threshold:-0.0129365902394056,right_val:0.5372971296310425,left_val:0.4437963962554932},{features:[[9,11,2,3,-1.],[9,12,2,1,3.]],threshold:4.0148729458451271e-003,right_val:0.6437833905220032,left_val:0.4680323898792267},{features:[[15,13,2,3,-1.],[15,14,2,1,3.]],threshold:-2.6401679497212172e-003,right_val:0.5314332842826843,left_val:0.3709631860256195},{features:[[8,12,4,3,-1.],[8,13,4,1,3.]],threshold:0.0139184398576617,right_val:0.7130808830261231,left_val:0.4723555147647858},{features:[[15,11,1,3,-1.],[15,12,1,1,3.]],threshold:-4.5087869511917233e-004,right_val:0.5370404124259949,left_val:0.4492394030094147},{features:[[7,13,5,2,-1.],[7,14,5,1,2.]],threshold:2.5384349282830954e-004,right_val:0.5514402985572815,left_val:0.4406864047050476},{features:[[7,12,6,3,-1.],[7,13,6,1,3.]],threshold:2.2710000630468130e-003,right_val:0.5967984199523926,left_val:0.4682416915893555},{features:[[5,11,4,4,-1.],[5,13,4,2,2.]],threshold:2.4120779708027840e-003,right_val:0.3018598854541779,left_val:0.5079392194747925},{features:[[11,4,3,3,-1.],[12,4,1,3,3.]],threshold:-3.6025670851813629e-005,right_val:0.4471096992492676,left_val:0.5601037144660950},{features:[[6,4,3,3,-1.],[7,4,1,3,3.]],threshold:-7.4905529618263245e-003,right_val:0.4989944100379944,left_val:0.2207535058259964},{features:[[16,5,3,6,-1.],[17,5,1,6,3.]],threshold:-0.0175131205469370,right_val:0.5017648935317993,left_val:0.6531215906143189},{features:[[3,6,12,7,-1.],[7,6,4,7,3.]],threshold:0.1428163051605225,right_val:0.1482062041759491,left_val:0.4967963099479675},{features:[[16,5,3,6,-1.],[17,5,1,6,3.]],threshold:5.5345268920063972e-003,right_val:0.5954223871231079,left_val:0.4898946881294251},{features:[[3,13,2,3,-1.],[3,14,2,1,3.]],threshold:-9.6323591424152255e-004,right_val:0.5196074247360230,left_val:0.3927116990089417},{features:[[16,5,3,6,-1.],[17,5,1,6,3.]],threshold:-2.0370010752230883e-003,right_val:0.4884858131408691,left_val:0.5613325238227844},{features:[[1,5,3,6,-1.],[2,5,1,6,3.]],threshold:1.6614829655736685e-003,right_val:0.5578880906105042,left_val:0.4472880065441132},{features:[[1,9,18,1,-1.],[7,9,6,1,3.]],threshold:-3.1188090797513723e-003,right_val:0.5397477746009827,left_val:0.3840532898902893},{features:[[0,9,8,7,-1.],[4,9,4,7,2.]],threshold:-6.4000617712736130e-003,right_val:0.4533218145370483,left_val:0.5843983888626099},{features:[[12,11,8,2,-1.],[12,12,8,1,2.]],threshold:3.1319601112045348e-004,right_val:0.4234727919101715,left_val:0.5439221858978272},{features:[[0,11,8,2,-1.],[0,12,8,1,2.]],threshold:-0.0182220991700888,right_val:0.4958404898643494,left_val:0.1288464963436127},{features:[[9,13,2,3,-1.],[9,14,2,1,3.]],threshold:8.7969247251749039e-003,right_val:0.7153480052947998,left_val:0.4951297938823700},{features:[[4,10,12,4,-1.],[4,10,6,2,2.],[10,12,6,2,2.]],threshold:-4.2395070195198059e-003,right_val:0.5194936990737915,left_val:0.3946599960327148},{features:[[9,3,3,7,-1.],[10,3,1,7,3.]],threshold:9.7086271271109581e-003,right_val:0.6064900159835815,left_val:0.4897503852844238},{features:[[7,2,3,5,-1.],[8,2,1,5,3.]],threshold:-3.9934171363711357e-003,right_val:0.5060828924179077,left_val:0.3245440125465393},{features:[[9,12,4,6,-1.],[11,12,2,3,2.],[9,15,2,3,2.]],threshold:-0.0167850591242313,right_val:0.5203778743743897,left_val:0.1581953018903732},{features:[[8,7,3,6,-1.],[9,7,1,6,3.]],threshold:0.0182720907032490,right_val:0.6626979112625122,left_val:0.4680935144424439},{features:[[15,4,4,2,-1.],[15,5,4,1,2.]],threshold:5.6872838176786900e-003,right_val:0.3512184917926788,left_val:0.5211697816848755},{features:[[8,7,3,3,-1.],[9,7,1,3,3.]],threshold:-1.0739039862528443e-003,right_val:0.4529845118522644,left_val:0.5768386125564575},{features:[[14,2,6,4,-1.],[14,4,6,2,2.]],threshold:-3.7093870341777802e-003,right_val:0.5313581228256226,left_val:0.4507763087749481},{features:[[7,16,6,1,-1.],[9,16,2,1,3.]],threshold:-2.1110709349159151e-004,right_val:0.4333376884460449,left_val:0.5460820198059082},{features:[[15,13,2,3,-1.],[15,14,2,1,3.]],threshold:1.0670139454305172e-003,right_val:0.4078390896320343,left_val:0.5371856093406677},{features:[[8,7,3,10,-1.],[9,7,1,10,3.]],threshold:3.5943021066486835e-003,right_val:0.5643836259841919,left_val:0.4471287131309509},{features:[[11,10,2,6,-1.],[11,12,2,2,3.]],threshold:-5.1776031032204628e-003,right_val:0.5280330181121826,left_val:0.4499393105506897},{features:[[6,10,4,1,-1.],[8,10,2,1,2.]],threshold:-2.5414369883947074e-004,right_val:0.4407708048820496,left_val:0.5516173243522644},{features:[[10,9,2,2,-1.],[10,10,2,1,2.]],threshold:6.3522560521960258e-003,right_val:0.2465227991342545,left_val:0.5194190144538879},{features:[[8,9,2,2,-1.],[8,10,2,1,2.]],threshold:-4.4205080484971404e-004,right_val:0.5139682292938232,left_val:0.3830705881118774},{features:[[12,7,2,2,-1.],[13,7,1,1,2.],[12,8,1,1,2.]],threshold:7.4488727841526270e-004,right_val:0.5974786877632141,left_val:0.4891090989112854},{features:[[5,7,2,2,-1.],[5,7,1,1,2.],[6,8,1,1,2.]],threshold:-3.5116379149258137e-003,right_val:0.4768764972686768,left_val:0.7413681745529175},{features:[[13,0,3,14,-1.],[14,0,1,14,3.]],threshold:-0.0125409103929996,right_val:0.5252826809883118,left_val:0.3648819029331207},{features:[[4,0,3,14,-1.],[5,0,1,14,3.]],threshold:9.4931852072477341e-003,right_val:0.3629586994647980,left_val:0.5100492835044861},{features:[[13,4,3,14,-1.],[14,4,1,14,3.]],threshold:0.0129611501470208,right_val:0.4333561062812805,left_val:0.5232442021369934},{features:[[9,14,2,3,-1.],[9,15,2,1,3.]],threshold:4.7209449112415314e-003,right_val:0.6331052780151367,left_val:0.4648149013519287},{features:[[8,14,4,3,-1.],[8,15,4,1,3.]],threshold:-2.3119079414755106e-003,right_val:0.4531058073043823,left_val:0.5930309891700745},{features:[[4,2,3,16,-1.],[5,2,1,16,3.]],threshold:-2.8262299019843340e-003,right_val:0.5257101058959961,left_val:0.3870477974414825},{features:[[7,2,8,10,-1.],[7,7,8,5,2.]],threshold:-1.4311339473351836e-003,right_val:0.4561854898929596,left_val:0.5522503256797791},{features:[[6,14,7,3,-1.],[6,15,7,1,3.]],threshold:1.9378310535103083e-003,right_val:0.5736966729164124,left_val:0.4546220898628235},{features:[[9,2,10,12,-1.],[14,2,5,6,2.],[9,8,5,6,2.]],threshold:2.6343559147790074e-004,right_val:0.4571875035762787,left_val:0.5345739126205444},{features:[[6,7,8,2,-1.],[6,8,8,1,2.]],threshold:7.8257522545754910e-004,right_val:0.5220187902450562,left_val:0.3967815935611725},{features:[[8,13,4,6,-1.],[8,16,4,3,2.]],threshold:-0.0195504408329725,right_val:0.5243508219718933,left_val:0.2829642891883850},{features:[[6,6,1,3,-1.],[6,7,1,1,3.]],threshold:4.3914958951063454e-004,right_val:0.5899090170860291,left_val:0.4590066969394684},{features:[[16,2,4,6,-1.],[16,4,4,2,3.]],threshold:0.0214520003646612,right_val:0.2855378985404968,left_val:0.5231410861015320},{features:[[6,6,4,2,-1.],[6,6,2,1,2.],[8,7,2,1,2.]],threshold:5.8973580598831177e-004,right_val:0.5506421923637390,left_val:0.4397256970405579},{features:[[16,2,4,6,-1.],[16,4,4,2,3.]],threshold:-0.0261576101183891,right_val:0.5189175009727478,left_val:0.3135079145431519},{features:[[0,2,4,6,-1.],[0,4,4,2,3.]],threshold:-0.0139598604291677,right_val:0.5040717720985413,left_val:0.3213272988796234},{features:[[9,6,2,6,-1.],[9,6,1,6,2.]],threshold:-6.3699018210172653e-003,right_val:0.4849506914615631,left_val:0.6387544870376587},{features:[[3,4,6,10,-1.],[3,9,6,5,2.]],threshold:-8.5613820701837540e-003,right_val:0.5032019019126892,left_val:0.2759132087230682},{features:[[9,5,2,6,-1.],[9,5,1,6,2.]],threshold:9.6622901037335396e-004,right_val:0.5834879279136658,left_val:0.4685640931129456},{features:[[3,13,2,3,-1.],[3,14,2,1,3.]],threshold:7.6550268568098545e-004,right_val:0.3896422088146210,left_val:0.5175207257270813},{features:[[13,13,3,2,-1.],[13,14,3,1,2.]],threshold:-8.1833340227603912e-003,right_val:0.5208122134208679,left_val:0.2069136947393417},{features:[[2,16,10,4,-1.],[2,16,5,2,2.],[7,18,5,2,2.]],threshold:-9.3976939097046852e-003,right_val:0.4641222953796387,left_val:0.6134091019630432},{features:[[5,6,10,6,-1.],[10,6,5,3,2.],[5,9,5,3,2.]],threshold:4.8028980381786823e-003,right_val:0.4395219981670380,left_val:0.5454108119010925},{features:[[7,14,1,3,-1.],[7,15,1,1,3.]],threshold:-3.5680569708347321e-003,right_val:0.4681093990802765,left_val:0.6344485282897949},{features:[[14,16,6,3,-1.],[14,17,6,1,3.]],threshold:4.0733120404183865e-003,right_val:0.4015620052814484,left_val:0.5292683243751526},{features:[[5,4,3,3,-1.],[5,5,3,1,3.]],threshold:1.2568129459396005e-003,right_val:0.5452824831008911,left_val:0.4392988085746765},{features:[[7,4,10,3,-1.],[7,5,10,1,3.]],threshold:-2.9065010603517294e-003,right_val:0.4863379895687103,left_val:0.5898832082748413},{features:[[0,4,5,4,-1.],[0,6,5,2,2.]],threshold:-2.4409340694546700e-003,right_val:0.5247421860694885,left_val:0.4069364964962006},{features:[[13,11,3,9,-1.],[13,14,3,3,3.]],threshold:0.0248307008296251,right_val:0.3682524859905243,left_val:0.5182725787162781},{features:[[4,11,3,9,-1.],[4,14,3,3,3.]],threshold:-0.0488540083169937,right_val:0.4961281120777130,left_val:0.1307577937841415},{features:[[9,7,2,1,-1.],[9,7,1,1,2.]],threshold:-1.6110379947349429e-003,right_val:0.4872662127017975,left_val:0.6421005725860596},{features:[[5,0,6,17,-1.],[7,0,2,17,3.]],threshold:-0.0970094799995422,right_val:0.4950988888740540,left_val:0.0477693490684032},{features:[[10,3,6,3,-1.],[10,3,3,3,2.]],threshold:1.1209240183234215e-003,right_val:0.5354745984077454,left_val:0.4616267085075378},{features:[[2,2,15,4,-1.],[7,2,5,4,3.]],threshold:-1.3064090162515640e-003,right_val:0.4638805985450745,left_val:0.6261854171752930},{features:[[8,2,8,2,-1.],[12,2,4,1,2.],[8,3,4,1,2.]],threshold:4.5771620352752507e-004,right_val:0.4646640121936798,left_val:0.5384417772293091},{features:[[8,1,3,6,-1.],[8,3,3,2,3.]],threshold:-6.3149951165542006e-004,right_val:0.5130257010459900,left_val:0.3804047107696533},{features:[[9,17,2,2,-1.],[9,18,2,1,2.]],threshold:1.4505970466416329e-004,right_val:0.5664461851119995,left_val:0.4554310142993927},{features:[[0,0,2,14,-1.],[1,0,1,14,2.]],threshold:-0.0164745505899191,right_val:0.4715859889984131,left_val:0.6596958041191101},{features:[[12,0,7,3,-1.],[12,1,7,1,3.]],threshold:0.0133695797994733,right_val:0.3035964965820313,left_val:0.5195466279983521},{features:[[1,14,1,2,-1.],[1,15,1,1,2.]],threshold:1.0271780047332868e-004,right_val:0.4107066094875336,left_val:0.5229176282882690},{features:[[14,12,2,8,-1.],[15,12,1,4,2.],[14,16,1,4,2.]],threshold:-5.5311559699475765e-003,right_val:0.4960907101631165,left_val:0.6352887749671936},{features:[[1,0,7,3,-1.],[1,1,7,1,3.]],threshold:-2.6187049224972725e-003,right_val:0.5140984058380127,left_val:0.3824546039104462},{features:[[14,12,2,8,-1.],[15,12,1,4,2.],[14,16,1,4,2.]],threshold:5.0834268331527710e-003,right_val:0.6220818758010864,left_val:0.4950439929962158},{features:[[6,0,8,12,-1.],[6,0,4,6,2.],[10,6,4,6,2.]],threshold:0.0798181593418121,right_val:0.1322475969791412,left_val:0.4952335953712463},{features:[[6,1,8,9,-1.],[6,4,8,3,3.]],threshold:-0.0992265865206718,right_val:0.5008416771888733,left_val:0.7542728781700134},{features:[[5,2,2,2,-1.],[5,3,2,1,2.]],threshold:-6.5174017800018191e-004,right_val:0.5130121111869812,left_val:0.3699302971363068},{features:[[13,14,6,6,-1.],[16,14,3,3,2.],[13,17,3,3,2.]],threshold:-0.0189968496561050,right_val:0.4921202957630158,left_val:0.6689178943634033},{features:[[0,17,20,2,-1.],[0,17,10,1,2.],[10,18,10,1,2.]],threshold:0.0173468999564648,right_val:0.1859198063611984,left_val:0.4983300864696503},{features:[[10,3,2,6,-1.],[11,3,1,3,2.],[10,6,1,3,2.]],threshold:5.5082101607695222e-004,right_val:0.5522121787071228,left_val:0.4574424028396606},{features:[[5,12,6,2,-1.],[8,12,3,2,2.]],threshold:2.0056050270795822e-003,right_val:0.3856469988822937,left_val:0.5131744742393494},{features:[[10,7,6,13,-1.],[10,7,3,13,2.]],threshold:-7.7688191086053848e-003,right_val:0.5434309244155884,left_val:0.4361700117588043},{features:[[5,15,10,5,-1.],[10,15,5,5,2.]],threshold:0.0508782789111137,right_val:0.6840639710426331,left_val:0.4682720899581909},{features:[[10,4,4,10,-1.],[10,4,2,10,2.]],threshold:-2.2901780903339386e-003,right_val:0.5306099057197571,left_val:0.4329245090484619},{features:[[5,7,2,1,-1.],[6,7,1,1,2.]],threshold:-1.5715380141045898e-004,right_val:0.4378164112567902,left_val:0.5370057225227356},{features:[[10,3,6,7,-1.],[10,3,3,7,2.]],threshold:0.1051924005150795,right_val:0.0673614665865898,left_val:0.5137274265289307},{features:[[4,3,6,7,-1.],[7,3,3,7,2.]],threshold:2.7198919560760260e-003,right_val:0.5255665183067322,left_val:0.4112060964107513},{features:[[1,7,18,5,-1.],[7,7,6,5,3.]],threshold:0.0483377799391747,right_val:0.4438967108726502,left_val:0.5404623746871948},{features:[[3,17,4,3,-1.],[5,17,2,3,2.]],threshold:9.5703761326149106e-004,right_val:0.5399510860443115,left_val:0.4355969130992889},{features:[[8,14,12,6,-1.],[14,14,6,3,2.],[8,17,6,3,2.]],threshold:-0.0253712590783834,right_val:0.5031024813652039,left_val:0.5995175242424011},{features:[[0,13,20,4,-1.],[0,13,10,2,2.],[10,15,10,2,2.]],threshold:0.0524579510092735,right_val:0.1398351043462753,left_val:0.4950287938117981},{features:[[4,5,14,2,-1.],[11,5,7,1,2.],[4,6,7,1,2.]],threshold:-0.0123656298965216,right_val:0.4964106082916260,left_val:0.6397299170494080},{features:[[1,2,10,12,-1.],[1,2,5,6,2.],[6,8,5,6,2.]],threshold:-0.1458971947431564,right_val:0.4946322143077850,left_val:0.1001669988036156},{features:[[6,1,14,3,-1.],[6,2,14,1,3.]],threshold:-0.0159086007624865,right_val:0.5208340883255005,left_val:0.3312329947948456},{features:[[8,16,2,3,-1.],[8,17,2,1,3.]],threshold:3.9486068999394774e-004,right_val:0.5426102876663208,left_val:0.4406363964080811},{features:[[9,17,3,2,-1.],[10,17,1,2,3.]],threshold:-5.2454001270234585e-003,right_val:0.5189967155456543,left_val:0.2799589931964874},{features:[[5,15,4,2,-1.],[5,15,2,1,2.],[7,16,2,1,2.]],threshold:-5.0421799533069134e-003,right_val:0.4752142131328583,left_val:0.6987580060958862},{features:[[10,15,1,3,-1.],[10,16,1,1,3.]],threshold:2.9812189750373363e-003,right_val:0.6307479739189148,left_val:0.4983288943767548},{features:[[8,16,4,4,-1.],[8,16,2,2,2.],[10,18,2,2,2.]],threshold:-7.2884308174252510e-003,right_val:0.5026869773864746,left_val:0.2982333004474640},{features:[[6,11,8,6,-1.],[6,14,8,3,2.]],threshold:1.5094350092113018e-003,right_val:0.3832970857620239,left_val:0.5308442115783691},{features:[[2,13,5,2,-1.],[2,14,5,1,2.]],threshold:-9.3340799212455750e-003,right_val:0.4969817101955414,left_val:0.2037964016199112},{features:[[13,14,6,6,-1.],[16,14,3,3,2.],[13,17,3,3,2.]],threshold:0.0286671407520771,right_val:0.6928027272224426,left_val:0.5025696754455566},{features:[[1,9,18,4,-1.],[7,9,6,4,3.]],threshold:0.1701968014240265,right_val:0.1476442962884903,left_val:0.4960052967071533},{features:[[13,14,6,6,-1.],[16,14,3,3,2.],[13,17,3,3,2.]],threshold:-3.2614478841423988e-003,right_val:0.4826056063175201,left_val:0.5603063702583313},{features:[[0,2,1,6,-1.],[0,4,1,2,3.]],threshold:5.5769277969375253e-004,right_val:0.4129633009433746,left_val:0.5205562114715576},{features:[[5,0,15,20,-1.],[5,10,15,10,2.]],threshold:0.3625833988189697,right_val:0.3768612146377564,left_val:0.5221652984619141},{features:[[1,14,6,6,-1.],[1,14,3,3,2.],[4,17,3,3,2.]],threshold:-0.0116151301190257,right_val:0.4637489914894104,left_val:0.6022682785987854},{features:[[8,14,4,6,-1.],[10,14,2,3,2.],[8,17,2,3,2.]],threshold:-4.0795197710394859e-003,right_val:0.5337479114532471,left_val:0.4070447087287903},{features:[[7,11,2,1,-1.],[8,11,1,1,2.]],threshold:5.7204300537705421e-004,right_val:0.5900393128395081,left_val:0.4601835012435913},{features:[[9,17,3,2,-1.],[10,17,1,2,3.]],threshold:6.7543348995968699e-004,right_val:0.4345428943634033,left_val:0.5398252010345459},{features:[[8,17,3,2,-1.],[9,17,1,2,3.]],threshold:6.3295697327703238e-004,right_val:0.4051358997821808,left_val:0.5201563239097595},{features:[[12,14,4,6,-1.],[14,14,2,3,2.],[12,17,2,3,2.]],threshold:1.2435320531949401e-003,right_val:0.5547441244125366,left_val:0.4642387926578522},{features:[[4,14,4,6,-1.],[4,14,2,3,2.],[6,17,2,3,2.]],threshold:-4.7363857738673687e-003,right_val:0.4672552049160004,left_val:0.6198567152023315},{features:[[13,14,2,6,-1.],[14,14,1,3,2.],[13,17,1,3,2.]],threshold:-6.4658462069928646e-003,right_val:0.5019000768661499,left_val:0.6837332844734192},{features:[[5,14,2,6,-1.],[5,14,1,3,2.],[6,17,1,3,2.]],threshold:3.5017321351915598e-004,right_val:0.5363622903823853,left_val:0.4344803094863892},{features:[[7,0,6,12,-1.],[7,4,6,4,3.]],threshold:1.5754920605104417e-004,right_val:0.5732020735740662,left_val:0.4760079085826874},{features:[[0,7,12,2,-1.],[4,7,4,2,3.]],threshold:9.9774366244673729e-003,right_val:0.3635039925575256,left_val:0.5090985894203186},{features:[[10,3,3,13,-1.],[11,3,1,13,3.]],threshold:-4.1464529931545258e-004,right_val:0.4593802094459534,left_val:0.5570064783096314},{features:[[7,3,3,13,-1.],[8,3,1,13,3.]],threshold:-3.5888899583369493e-004,right_val:0.4339134991168976,left_val:0.5356845855712891},{features:[[10,8,6,3,-1.],[10,9,6,1,3.]],threshold:4.0463250479660928e-004,right_val:0.5436776876449585,left_val:0.4439803063869476},{features:[[3,11,3,2,-1.],[4,11,1,2,3.]],threshold:-8.2184787606820464e-004,right_val:0.5176299214363098,left_val:0.4042294919490814},{features:[[13,12,6,8,-1.],[16,12,3,4,2.],[13,16,3,4,2.]],threshold:5.9467419050633907e-003,right_val:0.5633779764175415,left_val:0.4927651882171631},{features:[[7,6,6,5,-1.],[9,6,2,5,3.]],threshold:-0.0217533893883228,right_val:0.4800840914249420,left_val:0.8006293773651123},{features:[[17,11,2,7,-1.],[17,11,1,7,2.]],threshold:-0.0145403798669577,right_val:0.5182222723960877,left_val:0.3946054875850678},{features:[[3,13,8,2,-1.],[7,13,4,2,2.]],threshold:-0.0405107699334621,right_val:0.4935792982578278,left_val:0.0213249903172255},{features:[[6,9,8,3,-1.],[6,10,8,1,3.]],threshold:-5.8458268176764250e-004,right_val:0.5314025282859802,left_val:0.4012795984745026},{features:[[4,3,4,3,-1.],[4,4,4,1,3.]],threshold:5.5151800625026226e-003,right_val:0.5896260738372803,left_val:0.4642418920993805},{features:[[11,3,4,3,-1.],[11,4,4,1,3.]],threshold:-6.0626221820712090e-003,right_val:0.5016477704048157,left_val:0.6502159237861633},{features:[[1,4,17,12,-1.],[1,8,17,4,3.]],threshold:0.0945358425378799,right_val:0.4126827120780945,left_val:0.5264708995819092},{features:[[11,3,4,3,-1.],[11,4,4,1,3.]],threshold:4.7315051779150963e-003,right_val:0.5892447829246521,left_val:0.4879199862480164},{features:[[4,8,6,3,-1.],[4,9,6,1,3.]],threshold:-5.2571471314877272e-004,right_val:0.5189412832260132,left_val:0.3917280137538910},{features:[[12,3,5,3,-1.],[12,4,5,1,3.]],threshold:-2.5464049540460110e-003,right_val:0.4985705912113190,left_val:0.5837599039077759},{features:[[1,11,2,7,-1.],[2,11,1,7,2.]],threshold:-0.0260756891220808,right_val:0.4955821931362152,left_val:0.1261983960866928},{features:[[15,12,2,8,-1.],[16,12,1,4,2.],[15,16,1,4,2.]],threshold:-5.4779709316790104e-003,right_val:0.5010265707969666,left_val:0.5722513794898987},{features:[[4,8,11,3,-1.],[4,9,11,1,3.]],threshold:5.1337741315364838e-003,right_val:0.4226376116275787,left_val:0.5273262262344360},{features:[[9,13,6,2,-1.],[12,13,3,1,2.],[9,14,3,1,2.]],threshold:4.7944980906322598e-004,right_val:0.5819587111473084,left_val:0.4450066983699799},{features:[[6,13,4,3,-1.],[6,14,4,1,3.]],threshold:-2.1114079281687737e-003,right_val:0.4511714875698090,left_val:0.5757653117179871},{features:[[9,12,3,3,-1.],[10,12,1,3,3.]],threshold:-0.0131799904629588,right_val:0.5160734057426453,left_val:0.1884381026029587},{features:[[5,3,3,3,-1.],[5,4,3,1,3.]],threshold:-4.7968099825084209e-003,right_val:0.4736118912696838,left_val:0.6589789986610413},{features:[[9,4,2,3,-1.],[9,5,2,1,3.]],threshold:6.7483168095350266e-003,right_val:0.3356395065784454,left_val:0.5259429812431335},{features:[[0,2,16,3,-1.],[0,3,16,1,3.]],threshold:1.4623369788751006e-003,right_val:0.4264092147350311,left_val:0.5355271100997925},{features:[[15,12,2,8,-1.],[16,12,1,4,2.],[15,16,1,4,2.]],threshold:4.7645159065723419e-003,right_val:0.5786827802658081,left_val:0.5034406781196594},{features:[[3,12,2,8,-1.],[3,12,1,4,2.],[4,16,1,4,2.]],threshold:6.8066660314798355e-003,right_val:0.6677829027175903,left_val:0.4756605029106140},{features:[[14,13,3,6,-1.],[14,15,3,2,3.]],threshold:3.6608621012419462e-003,right_val:0.4311546981334686,left_val:0.5369611978530884},{features:[[3,13,3,6,-1.],[3,15,3,2,3.]],threshold:0.0214496403932571,right_val:0.1888816058635712,left_val:0.4968641996383667},{features:[[6,5,10,2,-1.],[11,5,5,1,2.],[6,6,5,1,2.]],threshold:4.1678901761770248e-003,right_val:0.5815368890762329,left_val:0.4930733144283295},{features:[[2,14,14,6,-1.],[2,17,14,3,2.]],threshold:8.6467564105987549e-003,right_val:0.4132595062255859,left_val:0.5205205082893372},{features:[[10,14,1,3,-1.],[10,15,1,1,3.]],threshold:-3.6114078829996288e-004,right_val:0.4800927937030792,left_val:0.5483555197715759},{features:[[4,16,2,2,-1.],[4,16,1,1,2.],[5,17,1,1,2.]],threshold:1.0808729566633701e-003,right_val:0.6041421294212341,left_val:0.4689902067184448},{features:[[10,6,2,3,-1.],[10,7,2,1,3.]],threshold:5.7719959877431393e-003,right_val:0.3053277134895325,left_val:0.5171142220497131},{features:[[0,17,20,2,-1.],[0,17,10,1,2.],[10,18,10,1,2.]],threshold:1.5720770461484790e-003,right_val:0.4178803861141205,left_val:0.5219978094100952},{features:[[13,6,1,3,-1.],[13,7,1,1,3.]],threshold:-1.9307859474793077e-003,right_val:0.4812920093536377,left_val:0.5860369801521301},{features:[[8,13,3,2,-1.],[9,13,1,2,3.]],threshold:-7.8926272690296173e-003,right_val:0.4971733987331390,left_val:0.1749276965856552},{features:[[12,2,3,3,-1.],[13,2,1,3,3.]],threshold:-2.2224679123610258e-003,right_val:0.5212848186492920,left_val:0.4342589080333710},{features:[[3,18,2,2,-1.],[3,18,1,1,2.],[4,19,1,1,2.]],threshold:1.9011989934369922e-003,right_val:0.6892055273056030,left_val:0.4765186905860901},{features:[[9,16,3,4,-1.],[10,16,1,4,3.]],threshold:2.7576119173318148e-003,right_val:0.4337486028671265,left_val:0.5262191295623779},{features:[[6,6,1,3,-1.],[6,7,1,1,3.]],threshold:5.1787449046969414e-003,right_val:0.7843729257583618,left_val:0.4804069101810455},{features:[[13,1,5,2,-1.],[13,2,5,1,2.]],threshold:-9.0273341629654169e-004,right_val:0.5353423953056335,left_val:0.4120846986770630},{features:[[7,14,6,2,-1.],[7,14,3,1,2.],[10,15,3,1,2.]],threshold:5.1797959022223949e-003,right_val:0.6425960063934326,left_val:0.4740372896194458},{features:[[11,3,3,4,-1.],[12,3,1,4,3.]],threshold:-0.0101140001788735,right_val:0.5175017714500427,left_val:0.2468792051076889},{features:[[1,13,12,6,-1.],[5,13,4,6,3.]],threshold:-0.0186170600354671,right_val:0.4628978967666626,left_val:0.5756294131278992},{features:[[14,11,5,2,-1.],[14,12,5,1,2.]],threshold:5.9225959703326225e-003,right_val:0.3214271068572998,left_val:0.5169625878334045},{features:[[2,15,14,4,-1.],[2,15,7,2,2.],[9,17,7,2,2.]],threshold:-6.2945079989731312e-003,right_val:0.5141636729240418,left_val:0.3872014880180359},{features:[[3,7,14,2,-1.],[10,7,7,1,2.],[3,8,7,1,2.]],threshold:6.5353019163012505e-003,right_val:0.6310489773750305,left_val:0.4853048920631409},{features:[[1,11,4,2,-1.],[1,12,4,1,2.]],threshold:1.0878399480134249e-003,right_val:0.3723258972167969,left_val:0.5117315053939819},{features:[[14,0,6,14,-1.],[16,0,2,14,3.]],threshold:-0.0225422400981188,right_val:0.4887112975120544,left_val:0.5692740082740784},{features:[[4,11,1,3,-1.],[4,12,1,1,3.]],threshold:-3.0065660830587149e-003,right_val:0.5003992915153503,left_val:0.2556012868881226},{features:[[14,0,6,14,-1.],[16,0,2,14,3.]],threshold:7.4741272255778313e-003,right_val:0.5675926804542542,left_val:0.4810872972011566},{features:[[1,10,3,7,-1.],[2,10,1,7,3.]],threshold:0.0261623207479715,right_val:0.1777237057685852,left_val:0.4971194863319397},{features:[[8,12,9,2,-1.],[8,13,9,1,2.]],threshold:9.4352738233283162e-004,right_val:0.5491250753402710,left_val:0.4940010905265808},{features:[[0,6,20,1,-1.],[10,6,10,1,2.]],threshold:0.0333632417023182,right_val:0.2790724039077759,left_val:0.5007612109184265},{features:[[8,4,4,4,-1.],[8,4,2,4,2.]],threshold:-0.0151186501607299,right_val:0.4973031878471375,left_val:0.7059578895568848},{features:[[0,0,2,2,-1.],[0,1,2,1,2.]],threshold:9.8648946732282639e-004,right_val:0.3776761889457703,left_val:0.5128620266914368}],threshold:104.7491989135742200},{simpleClassifiers:[{features:[[5,3,10,9,-1.],[5,6,10,3,3.]],threshold:-0.0951507985591888,right_val:0.4017286896705627,left_val:0.6470757126808167},{features:[[15,2,4,10,-1.],[15,2,2,10,2.]],threshold:6.2702340073883533e-003,right_val:0.5746449232101440,left_val:0.3999822139739990},{features:[[8,2,2,7,-1.],[9,2,1,7,2.]],threshold:3.0018089455552399e-004,right_val:0.5538809895515442,left_val:0.3558770120143890},{features:[[7,4,12,1,-1.],[11,4,4,1,3.]],threshold:1.1757409665733576e-003,right_val:0.5382617712020874,left_val:0.4256534874439240},{features:[[3,4,9,1,-1.],[6,4,3,1,3.]],threshold:4.4235268433112651e-005,right_val:0.5589926838874817,left_val:0.3682908117771149},{features:[[15,10,1,4,-1.],[15,12,1,2,2.]],threshold:-2.9936920327600092e-005,right_val:0.4020367860794067,left_val:0.5452470183372498},{features:[[4,10,6,4,-1.],[7,10,3,4,2.]],threshold:3.0073199886828661e-003,right_val:0.3317843973636627,left_val:0.5239058136940002},{features:[[15,9,1,6,-1.],[15,12,1,3,2.]],threshold:-0.0105138896033168,right_val:0.5307983756065369,left_val:0.4320689141750336},{features:[[7,17,6,3,-1.],[7,18,6,1,3.]],threshold:8.3476826548576355e-003,right_val:0.6453298926353455,left_val:0.4504637122154236},{features:[[14,3,2,16,-1.],[15,3,1,8,2.],[14,11,1,8,2.]],threshold:-3.1492270063608885e-003,right_val:0.5370525121688843,left_val:0.4313425123691559},{features:[[4,9,1,6,-1.],[4,12,1,3,2.]],threshold:-1.4435649973165710e-005,right_val:0.3817971944808960,left_val:0.5326603055000305},{features:[[12,1,5,2,-1.],[12,2,5,1,2.]],threshold:-4.2855090578086674e-004,right_val:0.5382009744644165,left_val:0.4305163919925690},{features:[[6,18,4,2,-1.],[6,18,2,1,2.],[8,19,2,1,2.]],threshold:1.5062429883982986e-004,right_val:0.5544965267181397,left_val:0.4235970973968506},{features:[[2,4,16,10,-1.],[10,4,8,5,2.],[2,9,8,5,2.]],threshold:0.0715598315000534,right_val:0.2678802907466888,left_val:0.5303059816360474},{features:[[6,5,1,10,-1.],[6,10,1,5,2.]],threshold:8.4095180500298738e-004,right_val:0.5205433964729309,left_val:0.3557108938694000},{features:[[4,8,15,2,-1.],[9,8,5,2,3.]],threshold:0.0629865005612373,right_val:0.2861376106739044,left_val:0.5225362777709961},{features:[[1,8,15,2,-1.],[6,8,5,2,3.]],threshold:-3.3798629883676767e-003,right_val:0.5201697945594788,left_val:0.3624185919761658},{features:[[9,5,3,6,-1.],[9,7,3,2,3.]],threshold:-1.1810739670181647e-004,right_val:0.3959893882274628,left_val:0.5474476814270020},{features:[[5,7,8,2,-1.],[9,7,4,2,2.]],threshold:-5.4505601292476058e-004,right_val:0.5215715765953064,left_val:0.3740422129631043},{features:[[9,11,2,3,-1.],[9,12,2,1,3.]],threshold:-1.8454910023137927e-003,right_val:0.4584448933601379,left_val:0.5893052220344544},{features:[[1,0,16,3,-1.],[1,1,16,1,3.]],threshold:-4.3832371011376381e-004,right_val:0.5385351181030273,left_val:0.4084582030773163},{features:[[11,2,7,2,-1.],[11,3,7,1,2.]],threshold:-2.4000830017030239e-003,right_val:0.5293580293655396,left_val:0.3777455091476440},{features:[[5,1,10,18,-1.],[5,7,10,6,3.]],threshold:-0.0987957417964935,right_val:0.5070089101791382,left_val:0.2963612079620361},{features:[[17,4,3,2,-1.],[18,4,1,2,3.]],threshold:3.1798239797353745e-003,right_val:0.6726443767547607,left_val:0.4877632856369019},{features:[[8,13,1,3,-1.],[8,14,1,1,3.]],threshold:3.2406419632025063e-004,right_val:0.5561109781265259,left_val:0.4366911053657532},{features:[[3,14,14,6,-1.],[3,16,14,2,3.]],threshold:-0.0325472503900528,right_val:0.5308616161346436,left_val:0.3128157854080200},{features:[[0,2,3,4,-1.],[1,2,1,4,3.]],threshold:-7.7561130747199059e-003,right_val:0.4639872014522553,left_val:0.6560224890708923},{features:[[12,1,5,2,-1.],[12,2,5,1,2.]],threshold:0.0160272493958473,right_val:0.3141897916793823,left_val:0.5172680020332336},{features:[[3,1,5,2,-1.],[3,2,5,1,2.]],threshold:7.1002350523485802e-006,right_val:0.5336294770240784,left_val:0.4084446132183075},{features:[[10,13,2,3,-1.],[10,14,2,1,3.]],threshold:7.3422808200120926e-003,right_val:0.6603465080261231,left_val:0.4966922104358673},{features:[[8,13,2,3,-1.],[8,14,2,1,3.]],threshold:-1.6970280557870865e-003,right_val:0.4500182867050171,left_val:0.5908237099647522},{features:[[14,12,2,3,-1.],[14,13,2,1,3.]],threshold:2.4118260480463505e-003,right_val:0.3599720895290375,left_val:0.5315160751342773},{features:[[7,2,2,3,-1.],[7,3,2,1,3.]],threshold:-5.5300937965512276e-003,right_val:0.4996814131736755,left_val:0.2334040999412537},{features:[[5,6,10,4,-1.],[10,6,5,2,2.],[5,8,5,2,2.]],threshold:-2.6478730142116547e-003,right_val:0.4684734046459198,left_val:0.5880935788154602},{features:[[9,13,1,6,-1.],[9,16,1,3,2.]],threshold:0.0112956296652555,right_val:0.1884590983390808,left_val:0.4983777105808258},{features:[[10,12,2,2,-1.],[11,12,1,1,2.],[10,13,1,1,2.]],threshold:-6.6952878842130303e-004,right_val:0.4799019992351532,left_val:0.5872138142585754},{features:[[4,12,2,3,-1.],[4,13,2,1,3.]],threshold:1.4410680159926414e-003,right_val:0.3501011133193970,left_val:0.5131189227104187},{features:[[14,4,6,6,-1.],[14,6,6,2,3.]],threshold:2.4637870956212282e-003,right_val:0.4117639064788818,left_val:0.5339372158050537},{features:[[8,17,2,3,-1.],[8,18,2,1,3.]],threshold:3.3114518737420440e-004,right_val:0.5398246049880981,left_val:0.4313383102416992},{features:[[16,4,4,6,-1.],[16,6,4,2,3.]],threshold:-0.0335572697222233,right_val:0.5179154872894287,left_val:0.2675336897373200},{features:[[0,4,4,6,-1.],[0,6,4,2,3.]],threshold:0.0185394193977118,right_val:0.2317177057266235,left_val:0.4973869919776917},{features:[[14,6,2,3,-1.],[14,6,1,3,2.]],threshold:-2.9698139405809343e-004,right_val:0.4643664062023163,left_val:0.5529708266258240},{features:[[4,9,8,1,-1.],[8,9,4,1,2.]],threshold:-4.5577259152196348e-004,right_val:0.4469191133975983,left_val:0.5629584193229675},{features:[[8,12,4,3,-1.],[8,13,4,1,3.]],threshold:-0.0101589802652597,right_val:0.4925918877124786,left_val:0.6706212759017944},{features:[[5,12,10,6,-1.],[5,14,10,2,3.]],threshold:-2.2413829356082715e-005,right_val:0.3912901878356934,left_val:0.5239421725273132},{features:[[11,12,1,2,-1.],[11,13,1,1,2.]],threshold:7.2034963523037732e-005,right_val:0.5501788854598999,left_val:0.4799438118934631},{features:[[8,15,4,2,-1.],[8,16,4,1,2.]],threshold:-6.9267209619283676e-003,right_val:0.4698084890842438,left_val:0.6930009722709656},{features:[[6,9,8,8,-1.],[10,9,4,4,2.],[6,13,4,4,2.]],threshold:-7.6997838914394379e-003,right_val:0.5480883121490479,left_val:0.4099623858928680},{features:[[7,12,4,6,-1.],[7,12,2,3,2.],[9,15,2,3,2.]],threshold:-7.3130549862980843e-003,right_val:0.5057886242866516,left_val:0.3283475935459137},{features:[[10,11,3,1,-1.],[11,11,1,1,3.]],threshold:1.9650589674711227e-003,right_val:0.6398249864578247,left_val:0.4978047013282776},{features:[[9,7,2,10,-1.],[9,7,1,5,2.],[10,12,1,5,2.]],threshold:7.1647600270807743e-003,right_val:0.6222137212753296,left_val:0.4661160111427307},{features:[[8,0,6,6,-1.],[10,0,2,6,3.]],threshold:-0.0240786392241716,right_val:0.5222162008285523,left_val:0.2334644943475723},{features:[[3,11,2,6,-1.],[3,13,2,2,3.]],threshold:-0.0210279691964388,right_val:0.4938226044178009,left_val:0.1183653995394707},{features:[[16,12,1,2,-1.],[16,13,1,1,2.]],threshold:3.6017020465806127e-004,right_val:0.4116711020469666,left_val:0.5325019955635071},{features:[[1,14,6,6,-1.],[1,14,3,3,2.],[4,17,3,3,2.]],threshold:-0.0172197297215462,right_val:0.4664269089698792,left_val:0.6278762221336365},{features:[[13,1,3,6,-1.],[14,1,1,6,3.]],threshold:-7.8672142699360847e-003,right_val:0.5249736905097961,left_val:0.3403415083885193},{features:[[8,8,2,2,-1.],[8,9,2,1,2.]],threshold:-4.4777389848604798e-004,right_val:0.5086259245872498,left_val:0.3610411882400513},{features:[[9,9,3,3,-1.],[10,9,1,3,3.]],threshold:5.5486010387539864e-003,right_val:0.6203498244285584,left_val:0.4884265959262848},{features:[[8,7,3,3,-1.],[8,8,3,1,3.]],threshold:-6.9461148232221603e-003,right_val:0.5011097192764282,left_val:0.2625930011272430},{features:[[14,0,2,3,-1.],[14,0,1,3,2.]],threshold:1.3569870498031378e-004,right_val:0.5628312230110169,left_val:0.4340794980525971},{features:[[1,0,18,9,-1.],[7,0,6,9,3.]],threshold:-0.0458802506327629,right_val:0.4696274995803833,left_val:0.6507998704910278},{features:[[11,5,4,15,-1.],[11,5,2,15,2.]],threshold:-0.0215825606137514,right_val:0.5287616848945618,left_val:0.3826502859592438},{features:[[5,5,4,15,-1.],[7,5,2,15,2.]],threshold:-0.0202095396816731,right_val:0.5074477195739746,left_val:0.3233368098735809},{features:[[14,0,2,3,-1.],[14,0,1,3,2.]],threshold:5.8496710844337940e-003,right_val:0.4489670991897583,left_val:0.5177603960037231},{features:[[4,0,2,3,-1.],[5,0,1,3,2.]],threshold:-5.7476379879517481e-005,right_val:0.5246363878250122,left_val:0.4020850956439972},{features:[[11,12,2,2,-1.],[12,12,1,1,2.],[11,13,1,1,2.]],threshold:-1.1513100471347570e-003,right_val:0.4905154109001160,left_val:0.6315072178840637},{features:[[7,12,2,2,-1.],[7,12,1,1,2.],[8,13,1,1,2.]],threshold:1.9862831104546785e-003,right_val:0.6497151255607605,left_val:0.4702459871768951},{features:[[12,0,3,4,-1.],[13,0,1,4,3.]],threshold:-5.2719512023031712e-003,right_val:0.5227652788162231,left_val:0.3650383949279785},{features:[[4,11,3,3,-1.],[4,12,3,1,3.]],threshold:1.2662699446082115e-003,right_val:0.3877618014812470,left_val:0.5166100859642029},{features:[[12,7,4,2,-1.],[12,8,4,1,2.]],threshold:-6.2919440679252148e-003,right_val:0.5023847818374634,left_val:0.7375894188880920},{features:[[8,10,3,2,-1.],[9,10,1,2,3.]],threshold:6.7360111279413104e-004,right_val:0.5495585799217224,left_val:0.4423226118087769},{features:[[9,9,3,2,-1.],[10,9,1,2,3.]],threshold:-1.0523450328037143e-003,right_val:0.4859583079814911,left_val:0.5976396203041077},{features:[[8,9,3,2,-1.],[9,9,1,2,3.]],threshold:-4.4216238893568516e-004,right_val:0.4398930966854096,left_val:0.5955939292907715},{features:[[12,0,3,4,-1.],[13,0,1,4,3.]],threshold:1.1747940443456173e-003,right_val:0.4605058133602142,left_val:0.5349888205528259},{features:[[5,0,3,4,-1.],[6,0,1,4,3.]],threshold:5.2457437850534916e-003,right_val:0.2941577136516571,left_val:0.5049191117286682},{features:[[4,14,12,4,-1.],[10,14,6,2,2.],[4,16,6,2,2.]],threshold:-0.0245397202670574,right_val:0.5218586921691895,left_val:0.2550177872180939},{features:[[8,13,2,3,-1.],[8,14,2,1,3.]],threshold:7.3793041519820690e-004,right_val:0.5490816235542297,left_val:0.4424861073493958},{features:[[10,10,3,8,-1.],[10,14,3,4,2.]],threshold:1.4233799884095788e-003,right_val:0.4081355929374695,left_val:0.5319514274597168},{features:[[8,10,4,8,-1.],[8,10,2,4,2.],[10,14,2,4,2.]],threshold:-2.4149110540747643e-003,right_val:0.5238950252532959,left_val:0.4087659120559692},{features:[[10,8,3,1,-1.],[11,8,1,1,3.]],threshold:-1.2165299849584699e-003,right_val:0.4908052980899811,left_val:0.5674579143524170},{features:[[9,12,1,6,-1.],[9,15,1,3,2.]],threshold:-1.2438809499144554e-003,right_val:0.5256118178367615,left_val:0.4129425883293152},{features:[[10,8,3,1,-1.],[11,8,1,1,3.]],threshold:6.1942739412188530e-003,right_val:0.7313653230667114,left_val:0.5060194134712219},{features:[[7,8,3,1,-1.],[8,8,1,1,3.]],threshold:-1.6607169527560472e-003,right_val:0.4596369862556458,left_val:0.5979632139205933},{features:[[5,2,15,14,-1.],[5,9,15,7,2.]],threshold:-0.0273162592202425,right_val:0.5308842062950134,left_val:0.4174365103244782},{features:[[2,1,2,10,-1.],[2,1,1,5,2.],[3,6,1,5,2.]],threshold:-1.5845570014789701e-003,right_val:0.4519486129283905,left_val:0.5615804791450501},{features:[[14,14,2,3,-1.],[14,15,2,1,3.]],threshold:-1.5514739789068699e-003,right_val:0.5360785126686096,left_val:0.4076187014579773},{features:[[2,7,3,3,-1.],[3,7,1,3,3.]],threshold:3.8446558755822480e-004,right_val:0.5430442094802856,left_val:0.4347293972969055},{features:[[17,4,3,3,-1.],[17,5,3,1,3.]],threshold:-0.0146722598001361,right_val:0.5146093964576721,left_val:0.1659304946660996},{features:[[0,4,3,3,-1.],[0,5,3,1,3.]],threshold:8.1608882173895836e-003,right_val:0.1884745955467224,left_val:0.4961819052696228},{features:[[13,5,6,2,-1.],[16,5,3,1,2.],[13,6,3,1,2.]],threshold:1.1121659772470593e-003,right_val:0.6093816161155701,left_val:0.4868263900279999},{features:[[4,19,12,1,-1.],[8,19,4,1,3.]],threshold:-7.2603770531713963e-003,right_val:0.4690375924110413,left_val:0.6284325122833252},{features:[[12,12,2,4,-1.],[12,14,2,2,2.]],threshold:-2.4046430189628154e-004,right_val:0.4046044051647186,left_val:0.5575000047683716},{features:[[3,15,1,3,-1.],[3,16,1,1,3.]],threshold:-2.3348190006799996e-004,right_val:0.5252848267555237,left_val:0.4115762114524841},{features:[[11,16,6,4,-1.],[11,16,3,4,2.]],threshold:5.5736480280756950e-003,right_val:0.5690100789070129,left_val:0.4730072915554047},{features:[[2,10,3,10,-1.],[3,10,1,10,3.]],threshold:0.0306237693876028,right_val:0.1740095019340515,left_val:0.4971886873245239},{features:[[12,8,2,4,-1.],[12,8,1,4,2.]],threshold:9.2074798885732889e-004,right_val:0.4354872107505798,left_val:0.5372117757797241},{features:[[6,8,2,4,-1.],[7,8,1,4,2.]],threshold:-4.3550739064812660e-005,right_val:0.4347316920757294,left_val:0.5366883873939514},{features:[[10,14,2,3,-1.],[10,14,1,3,2.]],threshold:-6.6452710889279842e-003,right_val:0.5160533189773560,left_val:0.3435518145561218},{features:[[5,1,10,3,-1.],[10,1,5,3,2.]],threshold:0.0432219989597797,right_val:0.7293652892112732,left_val:0.4766792058944702},{features:[[10,7,3,2,-1.],[11,7,1,2,3.]],threshold:2.2331769578158855e-003,right_val:0.5633171200752258,left_val:0.5029315948486328},{features:[[5,6,9,2,-1.],[8,6,3,2,3.]],threshold:3.1829739455133677e-003,right_val:0.5192136764526367,left_val:0.4016092121601105},{features:[[9,8,2,2,-1.],[9,9,2,1,2.]],threshold:-1.8027749320026487e-004,right_val:0.5417919754981995,left_val:0.4088315963745117},{features:[[2,11,16,6,-1.],[2,11,8,3,2.],[10,14,8,3,2.]],threshold:-5.2934689447283745e-003,right_val:0.5243561863899231,left_val:0.4075677096843720},{features:[[12,7,2,2,-1.],[13,7,1,1,2.],[12,8,1,1,2.]],threshold:1.2750959722325206e-003,right_val:0.6387010812759399,left_val:0.4913282990455627},{features:[[9,5,2,3,-1.],[9,6,2,1,3.]],threshold:4.3385322205722332e-003,right_val:0.2947346866130829,left_val:0.5031672120094299},{features:[[9,7,3,2,-1.],[10,7,1,2,3.]],threshold:8.5250744596123695e-003,right_val:0.6308869123458862,left_val:0.4949789047241211},{features:[[5,1,8,12,-1.],[5,7,8,6,2.]],threshold:-9.4266352243721485e-004,right_val:0.4285649955272675,left_val:0.5328366756439209},{features:[[13,5,2,2,-1.],[13,6,2,1,2.]],threshold:1.3609660090878606e-003,right_val:0.5941501259803772,left_val:0.4991525113582611},{features:[[5,5,2,2,-1.],[5,6,2,1,2.]],threshold:4.4782509212382138e-004,right_val:0.5854480862617493,left_val:0.4573504030704498},{features:[[12,4,3,3,-1.],[12,5,3,1,3.]],threshold:1.3360050506889820e-003,right_val:0.5849052071571350,left_val:0.4604358971118927},{features:[[4,14,2,3,-1.],[4,15,2,1,3.]],threshold:-6.0967548051849008e-004,right_val:0.5229423046112061,left_val:0.3969388902187347},{features:[[12,4,3,3,-1.],[12,5,3,1,3.]],threshold:-2.3656780831515789e-003,right_val:0.4898357093334198,left_val:0.5808320045471191},{features:[[5,4,3,3,-1.],[5,5,3,1,3.]],threshold:1.0734340175986290e-003,right_val:0.5470039248466492,left_val:0.4351210892200470},{features:[[9,14,2,6,-1.],[10,14,1,3,2.],[9,17,1,3,2.]],threshold:2.1923359017819166e-003,right_val:0.3842903971672058,left_val:0.5355060100555420},{features:[[8,14,3,2,-1.],[9,14,1,2,3.]],threshold:5.4968618787825108e-003,right_val:0.2827191948890686,left_val:0.5018138885498047},{features:[[9,5,6,6,-1.],[11,5,2,6,3.]],threshold:-0.0753688216209412,right_val:0.5148826837539673,left_val:0.1225076019763947},{features:[[5,5,6,6,-1.],[7,5,2,6,3.]],threshold:0.0251344703137875,right_val:0.7025446295738220,left_val:0.4731766879558563},{features:[[13,13,1,2,-1.],[13,14,1,1,2.]],threshold:-2.9358599931583740e-005,right_val:0.4656086862087250,left_val:0.5430532097816467},{features:[[0,2,10,2,-1.],[0,3,10,1,2.]],threshold:-5.8355910005047917e-004,right_val:0.5190119743347168,left_val:0.4031040072441101},{features:[[13,13,1,2,-1.],[13,14,1,1,2.]],threshold:-2.6639450807124376e-003,right_val:0.5161771178245544,left_val:0.4308126866817474},{features:[[5,7,2,2,-1.],[5,7,1,1,2.],[6,8,1,1,2.]],threshold:-1.3804089976474643e-003,right_val:0.4695515930652618,left_val:0.6219829916954041},{features:[[13,5,2,7,-1.],[13,5,1,7,2.]],threshold:1.2313219485804439e-003,right_val:0.4425831139087677,left_val:0.5379363894462585},{features:[[6,13,1,2,-1.],[6,14,1,1,2.]],threshold:-1.4644179827882908e-005,right_val:0.4222503006458283,left_val:0.5281640291213989},{features:[[11,0,3,7,-1.],[12,0,1,7,3.]],threshold:-0.0128188095986843,right_val:0.5179932713508606,left_val:0.2582092881202698},{features:[[0,3,2,16,-1.],[0,3,1,8,2.],[1,11,1,8,2.]],threshold:0.0228521898388863,right_val:0.7609264254570007,left_val:0.4778693020343781},{features:[[11,0,3,7,-1.],[12,0,1,7,3.]],threshold:8.2305970136076212e-004,right_val:0.4671724140644074,left_val:0.5340992212295532},{features:[[6,0,3,7,-1.],[7,0,1,7,3.]],threshold:0.0127701200544834,right_val:0.1472366005182266,left_val:0.4965761005878449},{features:[[11,16,8,4,-1.],[11,16,4,4,2.]],threshold:-0.0500515103340149,right_val:0.5016592144966126,left_val:0.6414994001388550},{features:[[1,16,8,4,-1.],[5,16,4,4,2.]],threshold:0.0157752707600594,right_val:0.5685362219810486,left_val:0.4522320032119751},{features:[[13,5,2,7,-1.],[13,5,1,7,2.]],threshold:-0.0185016207396984,right_val:0.5137959122657776,left_val:0.2764748930931091},{features:[[5,5,2,7,-1.],[6,5,1,7,2.]],threshold:2.4626250378787518e-003,right_val:0.3795408010482788,left_val:0.5141941905021668},{features:[[18,6,2,14,-1.],[18,13,2,7,2.]],threshold:0.0629161670804024,right_val:0.6580433845520020,left_val:0.5060648918151856},{features:[[6,10,3,4,-1.],[6,12,3,2,2.]],threshold:-2.1648500478477217e-005,right_val:0.4019886851310730,left_val:0.5195388197898865},{features:[[14,7,1,2,-1.],[14,8,1,1,2.]],threshold:2.1180990152060986e-003,right_val:0.5954458713531494,left_val:0.4962365031242371},{features:[[0,1,18,6,-1.],[0,1,9,3,2.],[9,4,9,3,2.]],threshold:-0.0166348908096552,right_val:0.5175446867942810,left_val:0.3757933080196381},{features:[[14,7,1,2,-1.],[14,8,1,1,2.]],threshold:-2.8899470344185829e-003,right_val:0.5057178735733032,left_val:0.6624013781547546},{features:[[0,6,2,14,-1.],[0,13,2,7,2.]],threshold:0.0767832621932030,right_val:0.8047714829444885,left_val:0.4795796871185303},{features:[[17,0,3,12,-1.],[18,0,1,12,3.]],threshold:3.9170677773654461e-003,right_val:0.5719941854476929,left_val:0.4937882125377655},{features:[[0,6,18,3,-1.],[0,7,18,1,3.]],threshold:-0.0726706013083458,right_val:0.4943903982639313,left_val:0.0538945607841015},{features:[[6,0,14,16,-1.],[6,8,14,8,2.]],threshold:0.5403950214385986,right_val:0.1143338978290558,left_val:0.5129774212837219},{features:[[0,0,3,12,-1.],[1,0,1,12,3.]],threshold:2.9510019812732935e-003,right_val:0.5698574185371399,left_val:0.4528343975543976},{features:[[13,0,3,7,-1.],[14,0,1,7,3.]],threshold:3.4508369863033295e-003,right_val:0.4218730926513672,left_val:0.5357726812362671},{features:[[5,7,1,2,-1.],[5,8,1,1,2.]],threshold:-4.2077939724549651e-004,right_val:0.4637925922870636,left_val:0.5916172862052918},{features:[[14,4,6,6,-1.],[14,6,6,2,3.]],threshold:3.3051050268113613e-003,right_val:0.4382042884826660,left_val:0.5273385047912598},{features:[[5,7,7,2,-1.],[5,8,7,1,2.]],threshold:4.7735060798004270e-004,right_val:0.5181884765625000,left_val:0.4046528041362763},{features:[[8,6,6,9,-1.],[8,9,6,3,3.]],threshold:-0.0259285103529692,right_val:0.5089386105537415,left_val:0.7452235817909241},{features:[[5,4,6,1,-1.],[7,4,2,1,3.]],threshold:-2.9729790985584259e-003,right_val:0.5058795213699341,left_val:0.3295435905456543},{features:[[13,0,6,4,-1.],[16,0,3,2,2.],[13,2,3,2,2.]],threshold:5.8508329093456268e-003,right_val:0.5793024897575378,left_val:0.4857144057750702},{features:[[1,2,18,12,-1.],[1,6,18,4,3.]],threshold:-0.0459675192832947,right_val:0.5380653142929077,left_val:0.4312731027603149},{features:[[3,2,17,12,-1.],[3,6,17,4,3.]],threshold:0.1558596044778824,right_val:0.1684713959693909,left_val:0.5196170210838318},{features:[[5,14,7,3,-1.],[5,15,7,1,3.]],threshold:0.0151648297905922,right_val:0.6735026836395264,left_val:0.4735757112503052},{features:[[10,14,1,3,-1.],[10,15,1,1,3.]],threshold:-1.0604249546304345e-003,right_val:0.4775702953338623,left_val:0.5822926759719849},{features:[[3,14,3,3,-1.],[3,15,3,1,3.]],threshold:6.6476291976869106e-003,right_val:0.2319535017013550,left_val:0.4999198913574219},{features:[[14,4,6,6,-1.],[14,6,6,2,3.]],threshold:-0.0122311301529408,right_val:0.5262982249259949,left_val:0.4750893115997315},{features:[[0,4,6,6,-1.],[0,6,6,2,3.]],threshold:5.6528882123529911e-003,right_val:0.3561818897724152,left_val:0.5069767832756043},{features:[[12,5,4,3,-1.],[12,6,4,1,3.]],threshold:1.2977829901501536e-003,right_val:0.5619062781333923,left_val:0.4875693917274475},{features:[[4,5,4,3,-1.],[4,6,4,1,3.]],threshold:0.0107815898954868,right_val:0.6782308220863342,left_val:0.4750770032405853},{features:[[18,0,2,6,-1.],[18,2,2,2,3.]],threshold:2.8654779307544231e-003,right_val:0.4290736019611359,left_val:0.5305461883544922},{features:[[8,1,4,9,-1.],[10,1,2,9,2.]],threshold:2.8663428965955973e-003,right_val:0.5539351105690002,left_val:0.4518479108810425},{features:[[6,6,8,2,-1.],[6,6,4,2,2.]],threshold:-5.1983320154249668e-003,right_val:0.5434188842773438,left_val:0.4149119853973389},{features:[[6,5,4,2,-1.],[6,5,2,1,2.],[8,6,2,1,2.]],threshold:5.3739990107715130e-003,right_val:0.6507657170295715,left_val:0.4717896878719330},{features:[[10,5,2,3,-1.],[10,6,2,1,3.]],threshold:-0.0146415298804641,right_val:0.5161777138710022,left_val:0.2172164022922516},{features:[[9,5,1,3,-1.],[9,6,1,1,3.]],threshold:-1.5042580344015732e-005,right_val:0.4298836886882782,left_val:0.5337383747100830},{features:[[9,10,2,2,-1.],[9,11,2,1,2.]],threshold:-1.1875660129589960e-004,right_val:0.5582447052001953,left_val:0.4604594111442566},{features:[[0,8,4,3,-1.],[0,9,4,1,3.]],threshold:0.0169955305755138,right_val:0.0738800764083862,left_val:0.4945895075798035},{features:[[6,0,8,6,-1.],[6,3,8,3,2.]],threshold:-0.0350959412753582,right_val:0.4977591037750244,left_val:0.7005509138107300},{features:[[1,0,6,4,-1.],[1,0,3,2,2.],[4,2,3,2,2.]],threshold:2.4217350874096155e-003,right_val:0.5477694272994995,left_val:0.4466265141963959},{features:[[13,0,3,7,-1.],[14,0,1,7,3.]],threshold:-9.6340337768197060e-004,right_val:0.5313338041305542,left_val:0.4714098870754242},{features:[[9,16,2,2,-1.],[9,17,2,1,2.]],threshold:1.6391130338888615e-004,right_val:0.5342242121696472,left_val:0.4331546127796173},{features:[[11,4,6,10,-1.],[11,9,6,5,2.]],threshold:-0.0211414601653814,right_val:0.5204498767852783,left_val:0.2644700109958649},{features:[[0,10,19,2,-1.],[0,11,19,1,2.]],threshold:8.7775202700868249e-004,right_val:0.4152742922306061,left_val:0.5208349823951721},{features:[[9,5,8,9,-1.],[9,8,8,3,3.]],threshold:-0.0279439203441143,right_val:0.5018811821937561,left_val:0.6344125270843506},{features:[[4,0,3,7,-1.],[5,0,1,7,3.]],threshold:6.7297378554940224e-003,right_val:0.3500863909721375,left_val:0.5050438046455383},{features:[[8,6,4,12,-1.],[10,6,2,6,2.],[8,12,2,6,2.]],threshold:0.0232810396701097,right_val:0.6968677043914795,left_val:0.4966318011283875},{features:[[0,2,6,4,-1.],[0,4,6,2,2.]],threshold:-0.0116449799388647,right_val:0.5049629807472229,left_val:0.3300260007381439},{features:[[8,15,4,3,-1.],[8,16,4,1,3.]],threshold:0.0157643090933561,right_val:0.7321153879165649,left_val:0.4991598129272461},{features:[[8,0,3,7,-1.],[9,0,1,7,3.]],threshold:-1.3611479662358761e-003,right_val:0.5160670876502991,left_val:0.3911735117435455},{features:[[9,5,3,4,-1.],[10,5,1,4,3.]],threshold:-8.1522337859496474e-004,right_val:0.4949719011783600,left_val:0.5628911256790161},{features:[[8,5,3,4,-1.],[9,5,1,4,3.]],threshold:-6.0066272271797061e-004,right_val:0.4550595879554749,left_val:0.5853595137596130},{features:[[7,6,6,1,-1.],[9,6,2,1,3.]],threshold:4.9715518252924085e-004,right_val:0.5443599224090576,left_val:0.4271470010280609},{features:[[7,14,4,4,-1.],[7,14,2,2,2.],[9,16,2,2,2.]],threshold:2.3475370835512877e-003,right_val:0.3887656927108765,left_val:0.5143110752105713},{features:[[13,14,4,6,-1.],[15,14,2,3,2.],[13,17,2,3,2.]],threshold:-8.9261569082736969e-003,right_val:0.4971720874309540,left_val:0.6044502258300781},{features:[[7,8,1,8,-1.],[7,12,1,4,2.]],threshold:-0.0139199104160070,right_val:0.5000367760658264,left_val:0.2583160996437073},{features:[[16,0,2,8,-1.],[17,0,1,4,2.],[16,4,1,4,2.]],threshold:1.0209949687123299e-003,right_val:0.5560358166694641,left_val:0.4857374131679535},{features:[[2,0,2,8,-1.],[2,0,1,4,2.],[3,4,1,4,2.]],threshold:-2.7441629208624363e-003,right_val:0.4645777046680450,left_val:0.5936884880065918},{features:[[6,1,14,3,-1.],[6,2,14,1,3.]],threshold:-0.0162001308053732,right_val:0.5193495154380798,left_val:0.3163014948368073},{features:[[7,9,3,10,-1.],[7,14,3,5,2.]],threshold:4.3331980705261230e-003,right_val:0.3458878993988037,left_val:0.5061224102973938},{features:[[9,14,2,2,-1.],[9,15,2,1,2.]],threshold:5.8497930876910686e-004,right_val:0.5870177745819092,left_val:0.4779017865657806},{features:[[7,7,6,8,-1.],[7,11,6,4,2.]],threshold:-2.2466450463980436e-003,right_val:0.5374773144721985,left_val:0.4297851026058197},{features:[[9,7,3,6,-1.],[9,10,3,3,2.]],threshold:2.3146099410951138e-003,right_val:0.4640969932079315,left_val:0.5438671708106995},{features:[[7,13,3,3,-1.],[7,14,3,1,3.]],threshold:8.7679121643304825e-003,right_val:0.6771789789199829,left_val:0.4726893007755280},{features:[[9,9,2,2,-1.],[9,10,2,1,2.]],threshold:-2.2448020172305405e-004,right_val:0.5428048968315125,left_val:0.4229173064231873},{features:[[0,1,18,2,-1.],[6,1,6,2,3.]],threshold:-7.4336021207273006e-003,right_val:0.4683673977851868,left_val:0.6098880767822266},{features:[[7,1,6,14,-1.],[7,8,6,7,2.]],threshold:-2.3189240600913763e-003,right_val:0.4424242079257965,left_val:0.5689436793327332},{features:[[1,9,18,1,-1.],[7,9,6,1,3.]],threshold:-2.1042178850620985e-003,right_val:0.5187087059020996,left_val:0.3762221038341522},{features:[[9,7,2,2,-1.],[9,7,1,2,2.]],threshold:4.6034841216169298e-004,right_val:0.5771207213401794,left_val:0.4699405133724213},{features:[[9,3,2,9,-1.],[10,3,1,9,2.]],threshold:1.0547629790380597e-003,right_val:0.5601701736450195,left_val:0.4465216994285584},{features:[[18,14,2,3,-1.],[18,15,2,1,3.]],threshold:8.7148818420246243e-004,right_val:0.3914709091186523,left_val:0.5449805259704590},{features:[[7,11,3,1,-1.],[8,11,1,1,3.]],threshold:3.3364820410497487e-004,right_val:0.5645738840103149,left_val:0.4564009010791779},{features:[[10,8,3,4,-1.],[11,8,1,4,3.]],threshold:-1.4853250468149781e-003,right_val:0.4692778885364533,left_val:0.5747377872467041},{features:[[7,14,3,6,-1.],[8,14,1,6,3.]],threshold:3.0251620337367058e-003,right_val:0.3762814104557037,left_val:0.5166196823120117},{features:[[10,8,3,4,-1.],[11,8,1,4,3.]],threshold:5.0280741415917873e-003,right_val:0.6151527166366577,left_val:0.5002111792564392},{features:[[7,8,3,4,-1.],[8,8,1,4,3.]],threshold:-5.8164511574432254e-004,right_val:0.4390751123428345,left_val:0.5394598245620728},{features:[[7,9,6,9,-1.],[7,12,6,3,3.]],threshold:0.0451415292918682,right_val:0.2063035964965820,left_val:0.5188326835632324},{features:[[0,14,2,3,-1.],[0,15,2,1,3.]],threshold:-1.0795620037242770e-003,right_val:0.5137907266616821,left_val:0.3904685080051422},{features:[[11,12,1,2,-1.],[11,13,1,1,2.]],threshold:1.5995999274309725e-004,right_val:0.5427504181861877,left_val:0.4895322918891907},{features:[[4,3,8,3,-1.],[8,3,4,3,2.]],threshold:-0.0193592701107264,right_val:0.4773507118225098,left_val:0.6975228786468506},{features:[[0,4,20,6,-1.],[0,4,10,6,2.]],threshold:0.2072550952434540,right_val:0.3034991919994354,left_val:0.5233635902404785},{features:[[9,14,1,3,-1.],[9,15,1,1,3.]],threshold:-4.1953290929086506e-004,right_val:0.4460186064243317,left_val:0.5419396758079529},{features:[[8,14,4,3,-1.],[8,15,4,1,3.]],threshold:2.2582069505006075e-003,right_val:0.6027408838272095,left_val:0.4815764129161835},{features:[[0,15,14,4,-1.],[0,17,14,2,2.]],threshold:-6.7811207845807076e-003,right_val:0.5183305740356445,left_val:0.3980278968811035},{features:[[1,14,18,6,-1.],[1,17,18,3,2.]],threshold:0.0111543098464608,right_val:0.4188759922981262,left_val:0.5431231856346130},{features:[[0,0,10,6,-1.],[0,0,5,3,2.],[5,3,5,3,2.]],threshold:0.0431624315679073,right_val:0.6522961258888245,left_val:0.4738228023052216}],threshold:105.7611007690429700}],size:[20,20],tilted:false}; +})(jsfeat.haar); \ No newline at end of file diff --git a/cascades/handfist.js b/cascades/handfist.js new file mode 100755 index 0000000..ca623d5 --- /dev/null +++ b/cascades/handfist.js @@ -0,0 +1,7 @@ +/** + * this cascade is derived from https://github.com/mtschirs/js-objectdetect implementation + * @author Martin Tschirsich / http://www.tu-darmstadt.de/~m_t + */ +(function(global) { + global.handfist = {complexClassifiers:[{simpleClassifiers:[{features:[[3,3,9,16,-1.],[3,7,9,8,2.]],tilted:0,threshold:-0.0223442204296589,right_val:-0.9436557292938232,left_val:0.7737345099449158},{features:[[0,9,12,5,-1.],[6,9,6,5,2.]],tilted:0,threshold:-9.3714958056807518e-003,right_val:-0.9004204869270325,left_val:0.5525149106979370}],threshold:-0.3911409080028534},{simpleClassifiers:[{features:[[12,14,12,10,-1.],[12,14,6,5,2.],[18,19,6,5,2.]],tilted:0,threshold:0.0127444602549076,right_val:0.5557708144187927,left_val:-0.7241874933242798},{features:[[2,4,16,8,-1.],[2,8,16,4,2.]],tilted:0,threshold:-0.0203973893076181,right_val:-0.9134256243705750,left_val:0.3255875110626221},{features:[[9,6,15,14,-1.],[9,13,15,7,2.]],tilted:0,threshold:1.5015050303190947e-003,right_val:0.2950277030467987,left_val:-0.8422530293464661},{features:[[0,10,10,5,-1.],[5,10,5,5,2.]],tilted:0,threshold:-9.5540005713701248e-003,right_val:-0.8186870813369751,left_val:0.2949278056621552},{features:[[8,0,16,6,-1.],[8,0,16,3,2.]],tilted:1,threshold:-9.0454015880823135e-003,right_val:0.2449316978454590,left_val:-0.9253956079483032}],threshold:-0.8027257919311523},{simpleClassifiers:[{features:[[11,9,9,6,-1.],[14,12,3,6,3.]],tilted:1,threshold:0.0339135192334652,right_val:0.5952491760253906,left_val:-0.6010565757751465},{features:[[15,1,8,10,-1.],[15,6,8,5,2.]],tilted:0,threshold:-6.3976310193538666e-003,right_val:-0.9008722901344299,left_val:0.2902083992958069},{features:[[12,23,12,1,-1.],[18,23,6,1,2.]],tilted:0,threshold:3.5964029375463724e-003,right_val:0.3585815131664276,left_val:-0.6108912825584412},{features:[[0,8,16,11,-1.],[8,8,8,11,2.]],tilted:0,threshold:3.1002631294541061e-004,right_val:-0.9231098890304565,left_val:0.2521544992923737}],threshold:-0.6695849895477295},{simpleClassifiers:[{features:[[12,22,12,2,-1.],[18,22,6,2,2.]],tilted:0,threshold:8.9982077479362488e-003,right_val:0.5311666131019592,left_val:-0.6216139197349548},{features:[[6,7,10,5,-1.],[6,7,5,5,2.]],tilted:1,threshold:5.8961678296327591e-003,right_val:-0.8741096854209900,left_val:0.3589088022708893},{features:[[10,8,3,2,-1.],[10,9,3,1,2.]],tilted:0,threshold:-7.3489747592248023e-005,right_val:-0.8340616226196289,left_val:0.2021690011024475},{features:[[15,15,3,4,-1.],[15,15,3,2,2.]],tilted:1,threshold:-1.3183970004320145e-003,right_val:0.2309758067131043,left_val:-0.8218436241149902}],threshold:-0.9460288882255554},{simpleClassifiers:[{features:[[4,18,20,6,-1.],[4,18,10,3,2.],[14,21,10,3,2.]],tilted:0,threshold:5.8955969288945198e-003,right_val:0.3239434063434601,left_val:-0.7554979920387268},{features:[[3,1,20,14,-1.],[3,1,10,7,2.],[13,8,10,7,2.]],tilted:0,threshold:8.6170788854360580e-003,right_val:0.2782224118709564,left_val:-0.7028874754905701},{features:[[2,11,3,9,-1.],[3,14,1,3,9.]],tilted:0,threshold:-1.5837070532143116e-003,right_val:0.2773326933383942,left_val:-0.7751926779747009},{features:[[0,4,12,20,-1.],[0,4,6,10,2.],[6,14,6,10,2.]],tilted:0,threshold:7.9292394220829010e-003,right_val:0.2167312055826187,left_val:-0.7723438143730164},{features:[[16,15,6,2,-1.],[16,15,6,1,2.]],tilted:1,threshold:-1.4443190302699804e-003,right_val:0.2078661024570465,left_val:-0.8843228220939636},{features:[[11,8,7,2,-1.],[11,9,7,1,2.]],tilted:0,threshold:-4.8251380212605000e-004,right_val:-0.6776664853096008,left_val:0.2337501049041748},{features:[[20,15,4,6,-1.],[22,15,2,6,2.]],tilted:0,threshold:8.0077340826392174e-003,right_val:0.5163818001747131,left_val:-0.3731102049350739}],threshold:-1.0588489770889282},{simpleClassifiers:[{features:[[14,19,1,2,-1.],[14,20,1,1,2.]],tilted:0,threshold:-5.8145709772361442e-005,right_val:-0.6792302131652832,left_val:0.3404448032379150},{features:[[0,6,2,7,-1.],[1,6,1,7,2.]],tilted:0,threshold:-1.1419489746913314e-003,right_val:-0.5890597105026245,left_val:0.3598371148109436},{features:[[8,0,10,2,-1.],[8,0,5,2,2.]],tilted:1,threshold:5.8654937893152237e-003,right_val:0.1721540987491608,left_val:-0.9622359871864319},{features:[[5,8,16,7,-1.],[13,8,8,7,2.]],tilted:0,threshold:1.1028599692508578e-004,right_val:0.2389315962791443,left_val:-0.7706093192100525},{features:[[2,9,14,12,-1.],[9,9,7,12,2.]],tilted:0,threshold:0.0145609602332115,right_val:-0.8984915018081665,left_val:0.1552716046571732}],threshold:-0.7966647148132324},{simpleClassifiers:[{features:[[2,11,6,10,-1.],[2,11,3,5,2.],[5,16,3,5,2.]],tilted:0,threshold:3.9159432053565979e-003,right_val:0.2886646091938019,left_val:-0.7370954751968384},{features:[[0,3,4,9,-1.],[2,3,2,9,2.]],tilted:0,threshold:-4.6402178704738617e-003,right_val:-0.5601897239685059,left_val:0.3129867017269135},{features:[[7,10,10,8,-1.],[12,10,5,8,2.]],tilted:0,threshold:-4.2656981386244297e-003,right_val:0.2132489979267120,left_val:-0.8286197781562805},{features:[[8,16,16,8,-1.],[8,16,8,4,2.],[16,20,8,4,2.]],tilted:0,threshold:7.9925684258341789e-003,right_val:0.2340082973241806,left_val:-0.6752548217773438},{features:[[4,13,6,3,-1.],[6,15,2,3,3.]],tilted:1,threshold:-6.2725958414375782e-003,right_val:0.2019792944192886,left_val:-0.7839264273643494},{features:[[13,3,11,18,-1.],[13,12,11,9,2.]],tilted:0,threshold:-0.0288890209048986,right_val:0.1651563942432404,left_val:-0.7889788150787354},{features:[[10,7,5,4,-1.],[10,9,5,2,2.]],tilted:0,threshold:-1.5122259501367807e-003,right_val:-0.7596625089645386,left_val:0.1971655040979385},{features:[[11,17,6,3,-1.],[13,18,2,1,9.]],tilted:0,threshold:4.3620187789201736e-003,right_val:-0.9309347271919251,left_val:0.1344974040985107},{features:[[12,7,12,17,-1.],[15,7,6,17,2.]],tilted:0,threshold:-3.2192119397222996e-003,right_val:-0.6044244170188904,left_val:0.2437663972377777}],threshold:-1.0856239795684814},{simpleClassifiers:[{features:[[14,18,1,2,-1.],[14,19,1,1,2.]],tilted:0,threshold:-4.3883759644813836e-005,right_val:-0.6793813705444336,left_val:0.3130159080028534},{features:[[3,11,6,12,-1.],[3,11,3,6,2.],[6,17,3,6,2.]],tilted:0,threshold:6.2022951897233725e-004,right_val:0.1801322996616364,left_val:-0.8423554897308350},{features:[[22,13,2,7,-1.],[23,13,1,7,2.]],tilted:0,threshold:1.0972339659929276e-003,right_val:0.3450973927974701,left_val:-0.4771775007247925},{features:[[16,15,1,2,-1.],[16,15,1,1,2.]],tilted:1,threshold:-2.6349889230914414e-004,right_val:0.2153723984956741,left_val:-0.7629253864288330},{features:[[0,5,22,18,-1.],[0,14,22,9,2.]],tilted:0,threshold:-0.0542980991303921,right_val:0.1730009019374847,left_val:-0.8849576711654663},{features:[[13,19,3,3,-1.],[14,20,1,1,9.]],tilted:0,threshold:-2.1721520461142063e-003,right_val:0.1638997048139572,left_val:-0.8367894887924194},{features:[[15,0,5,2,-1.],[15,1,5,1,2.]],tilted:0,threshold:-1.6347350319847465e-003,right_val:-0.4079189002513886,left_val:0.3731253147125244},{features:[[5,15,4,5,-1.],[5,15,2,5,2.]],tilted:1,threshold:-2.9642079025506973e-003,right_val:0.1886135041713715,left_val:-0.7973154187202454}],threshold:-0.8849025964736939},{simpleClassifiers:[{features:[[12,16,2,8,-1.],[12,20,2,4,2.]],tilted:0,threshold:-2.6686030905693769e-003,right_val:-0.6534382104873657,left_val:0.2950133979320526},{features:[[0,18,2,4,-1.],[1,18,1,4,2.]],tilted:0,threshold:-7.9764809925109148e-004,right_val:-0.4435322880744934,left_val:0.3938421010971069},{features:[[8,3,12,4,-1.],[8,3,12,2,2.]],tilted:1,threshold:-5.1704752258956432e-003,right_val:0.2110860049724579,left_val:-0.7686781883239746},{features:[[6,17,3,2,-1.],[7,18,1,2,3.]],tilted:1,threshold:-1.5294969780370593e-003,right_val:0.1583137959241867,left_val:-0.8944628238677979},{features:[[1,0,10,6,-1.],[6,0,5,6,2.]],tilted:0,threshold:-6.3780639320611954e-003,right_val:-0.4529472887516022,left_val:0.3393965959548950},{features:[[12,9,3,2,-1.],[12,10,3,1,2.]],tilted:0,threshold:-2.6243639877066016e-004,right_val:-0.4983885884284973,left_val:0.2850841879844666},{features:[[11,1,12,11,-1.],[11,1,6,11,2.]],tilted:1,threshold:0.0361888185143471,right_val:-0.7394319772720337,left_val:0.2132015973329544},{features:[[21,13,2,10,-1.],[21,18,2,5,2.]],tilted:0,threshold:7.7682351693511009e-003,right_val:0.4112299978733063,left_val:-0.4052247107028961},{features:[[15,16,1,2,-1.],[15,16,1,1,2.]],tilted:1,threshold:-2.3738530580885708e-004,right_val:0.1911296993494034,left_val:-0.7753518819808960},{features:[[0,11,8,8,-1.],[0,11,4,4,2.],[4,15,4,4,2.]],tilted:0,threshold:4.2231627739965916e-003,right_val:0.1739158928394318,left_val:-0.7229338884353638}],threshold:-1.0250910520553589},{simpleClassifiers:[{features:[[11,11,7,6,-1.],[11,13,7,2,3.]],tilted:0,threshold:2.9137390665709972e-003,right_val:0.3337337076663971,left_val:-0.5349493026733398},{features:[[12,17,3,3,-1.],[13,18,1,1,9.]],tilted:0,threshold:-1.6270120395347476e-003,right_val:0.1722342073917389,left_val:-0.8804692029953003},{features:[[0,9,2,2,-1.],[1,9,1,2,2.]],tilted:0,threshold:-2.9037619242444634e-004,right_val:-0.5733091235160828,left_val:0.2734786868095398},{features:[[13,17,1,2,-1.],[13,18,1,1,2.]],tilted:0,threshold:-1.4552129869116470e-005,right_val:-0.5995762944221497,left_val:0.2491019070148468},{features:[[7,0,17,18,-1.],[7,9,17,9,2.]],tilted:0,threshold:0.0141834802925587,right_val:-0.8961830139160156,left_val:0.1507173925638199},{features:[[8,11,8,2,-1.],[8,11,8,1,2.]],tilted:1,threshold:-5.8600129705155268e-005,right_val:-0.7106314897537231,left_val:0.1771630048751831},{features:[[18,17,6,7,-1.],[21,17,3,7,2.]],tilted:0,threshold:7.3492531664669514e-003,right_val:0.2574213147163391,left_val:-0.5106546878814697},{features:[[2,19,8,1,-1.],[6,19,4,1,2.]],tilted:0,threshold:-1.7738100141286850e-003,right_val:0.1460683941841126,left_val:-0.8705360293388367}],threshold:-0.9740471243858337},{simpleClassifiers:[{features:[[12,10,10,6,-1.],[12,10,5,3,2.],[17,13,5,3,2.]],tilted:0,threshold:-8.5521116852760315e-003,right_val:-0.4556924998760223,left_val:0.3413020968437195},{features:[[5,20,18,4,-1.],[5,20,9,2,2.],[14,22,9,2,2.]],tilted:0,threshold:2.9570560436695814e-003,right_val:0.2246744036674500,left_val:-0.5616099834442139},{features:[[1,10,22,5,-1.],[12,10,11,5,2.]],tilted:0,threshold:-0.0195402801036835,right_val:0.1363316029310226,left_val:-0.8423789739608765},{features:[[1,11,12,1,-1.],[1,11,6,1,2.]],tilted:1,threshold:-3.2073149923235178e-003,right_val:0.1883326023817062,left_val:-0.7569847702980042},{features:[[12,0,12,24,-1.],[12,6,12,12,2.]],tilted:0,threshold:-8.4488727152347565e-003,right_val:-0.8026102185249329,left_val:0.1382011026144028},{features:[[4,15,5,6,-1.],[4,17,5,2,3.]],tilted:0,threshold:1.1350389831932262e-004,right_val:0.1435786038637161,left_val:-0.7027189135551453},{features:[[12,2,6,4,-1.],[14,4,2,4,3.]],tilted:1,threshold:-5.8187649119645357e-004,right_val:0.2510882019996643,left_val:-0.4507982134819031},{features:[[0,7,2,17,-1.],[1,7,1,17,2.]],tilted:0,threshold:-0.0161978900432587,right_val:-0.2079977989196777,left_val:0.6447368860244751},{features:[[13,15,3,9,-1.],[14,15,1,9,3.]],tilted:0,threshold:6.6894508199766278e-004,right_val:-0.7483944892883301,left_val:0.1998561024665833},{features:[[13,18,3,3,-1.],[14,19,1,1,9.]],tilted:0,threshold:-1.8372290069237351e-003,right_val:0.1146014034748077,left_val:-0.8788912892341614},{features:[[17,17,1,2,-1.],[17,18,1,1,2.]],tilted:0,threshold:-4.3397278204793110e-005,right_val:-0.5028128027915955,left_val:0.2129840999841690}],threshold:-1.4024209976196289},{simpleClassifiers:[{features:[[10,11,4,12,-1.],[10,11,2,6,2.],[12,17,2,6,2.]],tilted:0,threshold:-2.0713880658149719e-003,right_val:-0.5756726861000061,left_val:0.2486661970615387},{features:[[12,23,12,1,-1.],[18,23,6,1,2.]],tilted:0,threshold:3.6768750287592411e-003,right_val:0.2280506044626236,left_val:-0.5755078196525574},{features:[[13,10,3,4,-1.],[13,10,3,2,2.]],tilted:1,threshold:-3.0887479078955948e-004,right_val:-0.6454687118530273,left_val:0.2362288981676102},{features:[[0,0,24,24,-1.],[0,0,12,12,2.],[12,12,12,12,2.]],tilted:0,threshold:-0.0257820300757885,right_val:0.1617882996797562,left_val:-0.7496209144592285},{features:[[2,10,2,6,-1.],[2,13,2,3,2.]],tilted:0,threshold:-1.2850989587605000e-003,right_val:0.1440877020359039,left_val:-0.7813286781311035},{features:[[0,11,2,6,-1.],[0,14,2,3,2.]],tilted:0,threshold:3.3493789378553629e-003,right_val:-0.7505543231964111,left_val:0.1375873982906342},{features:[[0,1,24,1,-1.],[8,1,8,1,3.]],tilted:0,threshold:-2.6788329705595970e-003,right_val:-0.4255296885967255,left_val:0.2596372067928314},{features:[[13,7,4,2,-1.],[13,8,4,1,2.]],tilted:0,threshold:-2.8834199838456698e-005,right_val:-0.7050843238830566,left_val:0.1635348945856094},{features:[[0,13,3,10,-1.],[1,13,1,10,3.]],tilted:0,threshold:-1.6196980141103268e-003,right_val:-0.3415850102901459,left_val:0.3419960141181946},{features:[[1,10,10,10,-1.],[6,10,5,10,2.]],tilted:0,threshold:1.0517919436097145e-003,right_val:-0.7929052114486694,left_val:0.1479195058345795},{features:[[9,0,4,6,-1.],[9,0,4,3,2.]],tilted:1,threshold:-2.4886541068553925e-003,right_val:0.1043419018387795,left_val:-0.8937227129936218}],threshold:-1.1141099929809570},{simpleClassifiers:[{features:[[16,18,1,2,-1.],[16,19,1,1,2.]],tilted:0,threshold:-5.7590808864915743e-005,right_val:-0.6426038742065430,left_val:0.2734906971454620},{features:[[21,14,2,8,-1.],[22,14,1,8,2.]],tilted:0,threshold:7.1206100983545184e-004,right_val:0.2552855014801025,left_val:-0.5435984134674072},{features:[[0,7,21,9,-1.],[7,10,7,3,9.]],tilted:0,threshold:-0.3888005912303925,right_val:-0.1862079948186874,left_val:0.6930956840515137},{features:[[16,16,1,4,-1.],[16,17,1,2,2.]],tilted:0,threshold:2.5288251345045865e-004,right_val:-0.5620415806770325,left_val:0.2914173901081085},{features:[[19,15,2,6,-1.],[17,17,2,2,3.]],tilted:1,threshold:-2.1006830502301455e-003,right_val:0.1185996010899544,left_val:-0.6822040081024170},{features:[[6,0,15,4,-1.],[6,1,15,2,2.]],tilted:0,threshold:-3.2310429960489273e-003,right_val:-0.2774995863437653,left_val:0.3972072899341583},{features:[[9,16,1,4,-1.],[9,17,1,2,2.]],tilted:0,threshold:1.4478569937637076e-005,right_val:0.2119608968496323,left_val:-0.5476933717727661},{features:[[8,20,8,2,-1.],[8,20,4,1,2.],[12,21,4,1,2.]],tilted:0,threshold:-9.0244162129238248e-004,right_val:0.1194489970803261,left_val:-0.8646997213363648},{features:[[0,9,3,14,-1.],[1,9,1,14,3.]],tilted:0,threshold:-1.5906910412013531e-003,right_val:-0.3928124904632568,left_val:0.2919914126396179},{features:[[11,1,11,4,-1.],[11,1,11,2,2.]],tilted:1,threshold:7.4913240969181061e-003,right_val:-0.4020768105983734,left_val:0.2679530084133148}],threshold:-1.0776710510253906},{simpleClassifiers:[{features:[[15,20,1,2,-1.],[15,21,1,1,2.]],tilted:0,threshold:-7.1240079705603421e-005,right_val:-0.4779424071311951,left_val:0.2823083102703095},{features:[[2,18,1,2,-1.],[2,18,1,1,2.]],tilted:1,threshold:-2.6417701155878603e-004,right_val:-0.4036655128002167,left_val:0.3084900975227356},{features:[[0,14,12,6,-1.],[0,16,12,2,3.]],tilted:0,threshold:5.2890321239829063e-004,right_val:0.1605536937713623,left_val:-0.7423822879791260},{features:[[4,10,2,14,-1.],[4,10,1,7,2.],[5,17,1,7,2.]],tilted:0,threshold:3.8283021422103047e-004,right_val:0.1794416010379791,left_val:-0.6108828783035278},{features:[[22,3,2,15,-1.],[23,3,1,15,2.]],tilted:0,threshold:5.4077422246336937e-003,right_val:0.4017147123813629,left_val:-0.2767061889171600},{features:[[4,17,3,1,-1.],[5,18,1,1,3.]],tilted:1,threshold:-8.2620367174968123e-004,right_val:0.1641048043966293,left_val:-0.8456827998161316},{features:[[21,6,3,9,-1.],[21,9,3,3,3.]],tilted:0,threshold:-8.9606801047921181e-003,right_val:0.1270485967397690,left_val:-0.6698572039604187},{features:[[1,7,23,4,-1.],[1,9,23,2,2.]],tilted:0,threshold:-3.0286349356174469e-003,right_val:-0.7880274057388306,left_val:0.1227105036377907},{features:[[4,3,20,20,-1.],[4,13,20,10,2.]],tilted:0,threshold:-0.0262723900377750,right_val:0.1347829997539520,left_val:-0.7226560711860657},{features:[[14,13,7,4,-1.],[14,15,7,2,2.]],tilted:0,threshold:-5.0153239862993360e-004,right_val:-0.3537223935127258,left_val:0.2890014052391052},{features:[[2,6,2,2,-1.],[2,6,2,1,2.]],tilted:1,threshold:-1.9847620569635183e-004,right_val:-0.4667024016380310,left_val:0.2491115033626556}],threshold:-1.1201709508895874},{simpleClassifiers:[{features:[[13,15,6,4,-1.],[13,17,6,2,2.]],tilted:0,threshold:-1.6098109772428870e-003,right_val:-0.5425583124160767,left_val:0.2436411976814270},{features:[[17,0,7,24,-1.],[17,8,7,8,3.]],tilted:0,threshold:3.0391800682991743e-003,right_val:-0.7677937150001526,left_val:0.1427879035472870},{features:[[3,7,20,8,-1.],[13,7,10,8,2.]],tilted:0,threshold:-0.0111625995486975,right_val:0.1309580951929092,left_val:-0.7964649796485901},{features:[[0,7,22,1,-1.],[11,7,11,1,2.]],tilted:0,threshold:-1.6689340118318796e-003,right_val:-0.4947401881217957,left_val:0.2306797951459885},{features:[[7,9,8,2,-1.],[7,10,8,1,2.]],tilted:0,threshold:-8.8481552666053176e-004,right_val:-0.5158239006996155,left_val:0.2005017995834351},{features:[[2,0,3,18,-1.],[2,6,3,6,3.]],tilted:0,threshold:-2.6040559168905020e-003,right_val:-0.7818121910095215,left_val:0.1298092007637024},{features:[[2,13,3,5,-1.],[3,13,1,5,3.]],tilted:0,threshold:-2.3444599355570972e-004,right_val:0.1478334069252014,left_val:-0.5695487260818481},{features:[[14,16,3,4,-1.],[15,16,1,4,3.]],tilted:0,threshold:8.4604357834905386e-004,right_val:-0.8308842182159424,left_val:0.1037243008613586},{features:[[10,0,12,3,-1.],[10,1,12,1,3.]],tilted:0,threshold:-2.4807569570839405e-003,right_val:-0.2719523906707764,left_val:0.3425926864147186},{features:[[15,16,3,1,-1.],[16,17,1,1,3.]],tilted:1,threshold:-1.1127090547233820e-003,right_val:0.1176175028085709,left_val:-0.8275328278541565},{features:[[22,13,2,5,-1.],[23,13,1,5,2.]],tilted:0,threshold:1.4298419700935483e-003,right_val:0.2652699053287506,left_val:-0.3477616012096405},{features:[[11,14,4,6,-1.],[11,16,4,2,3.]],tilted:0,threshold:-1.4572150539606810e-003,right_val:0.1092033982276917,left_val:-0.8802363276481628}],threshold:-1.0063530206680298},{simpleClassifiers:[{features:[[14,15,1,2,-1.],[14,16,1,1,2.]],tilted:0,threshold:-1.4507149899145588e-005,right_val:-0.4580149054527283,left_val:0.2605004012584686},{features:[[6,3,6,5,-1.],[6,3,3,5,2.]],tilted:1,threshold:0.0136784398928285,right_val:0.1477705985307694,left_val:-0.7149971723556519},{features:[[2,8,1,2,-1.],[2,8,1,1,2.]],tilted:1,threshold:-7.3151881224475801e-005,right_val:-0.4995836019515991,left_val:0.2058611065149307},{features:[[9,17,4,4,-1.],[9,18,4,2,2.]],tilted:0,threshold:-6.7043182207271457e-004,right_val:0.1358278989791870,left_val:-0.7319483757019043},{features:[[10,6,4,5,-1.],[11,6,2,5,2.]],tilted:0,threshold:-1.1992789804935455e-003,right_val:-0.2521241009235382,left_val:0.4456472992897034},{features:[[2,21,12,2,-1.],[8,21,6,2,2.]],tilted:0,threshold:-0.0117351496592164,right_val:0.1424607038497925,left_val:-0.7972438931465149},{features:[[12,8,12,15,-1.],[16,8,4,15,3.]],tilted:0,threshold:-4.7361929900944233e-003,right_val:-0.5223402976989746,left_val:0.1624221056699753},{features:[[0,3,20,20,-1.],[0,13,20,10,2.]],tilted:0,threshold:-0.1084595024585724,right_val:0.1265926957130432,left_val:-0.7962973713874817},{features:[[16,17,4,2,-1.],[16,17,4,1,2.]],tilted:1,threshold:-3.2293208641931415e-004,right_val:0.0899520069360733,left_val:-0.7129234075546265},{features:[[21,14,2,5,-1.],[21,14,1,5,2.]],tilted:1,threshold:2.5980910286307335e-003,right_val:0.3197942078113556,left_val:-0.2800100147724152},{features:[[12,0,12,8,-1.],[12,0,12,4,2.]],tilted:1,threshold:-7.5798099860548973e-003,right_val:0.1406804025173187,left_val:-0.7153301239013672},{features:[[17,0,7,24,-1.],[17,6,7,12,2.]],tilted:0,threshold:-8.4003582596778870e-003,right_val:-0.6506950259208679,left_val:0.1168404966592789},{features:[[13,10,3,6,-1.],[13,12,3,2,3.]],tilted:0,threshold:3.6820198874920607e-003,right_val:0.3865979909896851,left_val:-0.2631436884403229}],threshold:-1.0373339653015137},{simpleClassifiers:[{features:[[8,11,9,9,-1.],[11,14,3,3,9.]],tilted:0,threshold:0.0240733902901411,right_val:0.2617827057838440,left_val:-0.4794333875179291},{features:[[17,18,7,6,-1.],[17,21,7,3,2.]],tilted:0,threshold:1.9582170061767101e-003,right_val:0.2301298975944519,left_val:-0.4434475898742676},{features:[[9,8,4,2,-1.],[9,9,4,1,2.]],tilted:0,threshold:-2.0559200493153185e-004,right_val:-0.7277694940567017,left_val:0.1224080994725227},{features:[[7,7,7,6,-1.],[7,9,7,2,3.]],tilted:0,threshold:1.0637210216373205e-003,right_val:0.6447200775146484,left_val:-0.1582341045141220},{features:[[2,9,1,9,-1.],[2,12,1,3,3.]],tilted:0,threshold:-3.5040560760535300e-004,right_val:0.2033808976411820,left_val:-0.5160586237907410},{features:[[1,0,1,20,-1.],[1,10,1,10,2.]],tilted:0,threshold:-1.5382179990410805e-003,right_val:-0.5412080287933350,left_val:0.2029495984315872},{features:[[5,11,4,3,-1.],[5,11,2,3,2.]],tilted:1,threshold:4.2215911671519279e-003,right_val:-0.6884710788726807,left_val:0.1420246958732605},{features:[[1,6,14,13,-1.],[8,6,7,13,2.]],tilted:0,threshold:4.0536639280617237e-003,right_val:-0.8890265226364136,left_val:0.0946411192417145},{features:[[11,6,6,4,-1.],[13,6,2,4,3.]],tilted:0,threshold:3.9104130119085312e-003,right_val:0.4553441107273102,left_val:-0.2211245000362396},{features:[[15,20,2,2,-1.],[15,20,2,1,2.]],tilted:1,threshold:-5.8839347911998630e-004,right_val:0.1466006040573120,left_val:-0.7423400878906250},{features:[[11,7,11,2,-1.],[11,8,11,1,2.]],tilted:0,threshold:4.7331111272796988e-004,right_val:-0.8416292071342468,left_val:0.0803736001253128},{features:[[14,0,7,4,-1.],[14,1,7,2,2.]],tilted:0,threshold:-1.4589539496228099e-003,right_val:-0.2989330887794495,left_val:0.2730404138565064}],threshold:-0.9257612824440002}],size:[24,24],tilted:true}; +})(jsfeat.haar); \ No newline at end of file diff --git a/cascades/handopen.js b/cascades/handopen.js new file mode 100755 index 0000000..f587675 --- /dev/null +++ b/cascades/handopen.js @@ -0,0 +1,7 @@ +/** + * this cascade is derived from https://github.com/mtschirs/js-objectdetect implementation + * @author Martin Tschirsich / http://www.tu-darmstadt.de/~m_t + */ +(function(global) { + global.handopen = {complexClassifiers:[{simpleClassifiers:[{features:[[0,2,24,21,-1.],[6,2,12,21,2.]],tilted:0,threshold:1.5003059804439545e-001,right_val:6.7985910177230835e-001,left_val:-8.1184512376785278e-001},{features:[[21,1,2,6,-1.],[21,1,2,3,2.]],tilted:1,threshold:-2.6187319308519363e-003,right_val:-2.4056260287761688e-001,left_val:1.4523890614509583e-001},{features:[[0,0,2,25,-1.],[1,0,1,25,2.]],tilted:0,threshold:1.3353739632293582e-003,right_val:3.6618021130561829e-001,left_val:-6.0511720180511475e-001},{features:[[2,16,21,9,-1.],[2,19,21,3,3.]],tilted:0,threshold:3.1417140271514654e-003,right_val:2.5102201104164124e-001,left_val:-4.9187308549880981e-001},{features:[[3,0,19,8,-1.],[3,2,19,4,2.]],tilted:0,threshold:6.2333769164979458e-004,right_val:2.6779899001121521e-001,left_val:-4.6784201264381409e-001},{features:[[11,0,10,22,-1.],[11,0,5,22,2.]],tilted:0,threshold:5.8959048241376877e-002,right_val:1.9723750650882721e-001,left_val:-1.6091950237751007e-001},{features:[[4,0,10,22,-1.],[9,0,5,22,2.]],tilted:0,threshold:6.2947690486907959e-002,right_val:3.6813440918922424e-001,left_val:-3.6895948648452759e-001}],threshold:-1.4329270124435425e+000},{simpleClassifiers:[{features:[[0,0,24,25,-1.],[6,0,12,25,2.]],tilted:0,threshold:2.3747350275516510e-001,right_val:4.9667519330978394e-001,left_val:-6.5408688783645630e-001},{features:[[21,1,4,22,-1.],[21,1,2,22,2.]],tilted:0,threshold:5.0346520729362965e-003,right_val:3.3853441476821899e-001,left_val:-6.9200718402862549e-001},{features:[[0,1,4,22,-1.],[2,1,2,22,2.]],tilted:0,threshold:3.9370087906718254e-003,right_val:2.1448600292205811e-001,left_val:-6.5886509418487549e-001},{features:[[2,1,21,21,-1.],[9,1,7,21,3.]],tilted:0,threshold:5.0707049667835236e-003,right_val:5.9291750192642212e-002,left_val:-5.2522331476211548e-001},{features:[[2,0,19,8,-1.],[2,2,19,4,2.]],tilted:0,threshold:3.4051720285788178e-004,right_val:2.4072030186653137e-001,left_val:-5.2820461988449097e-001},{features:[[2,17,21,8,-1.],[2,19,21,4,2.]],tilted:0,threshold:1.2807789971702732e-005,right_val:1.9243550300598145e-001,left_val:-5.5176711082458496e-001},{features:[[2,11,6,3,-1.],[4,11,2,3,3.]],tilted:0,threshold:-5.3984248079359531e-003,right_val:-2.4212449789047241e-001,left_val:4.7871538996696472e-001},{features:[[9,1,7,24,-1.],[9,13,7,12,2.]],tilted:0,threshold:1.3651129603385925e-001,right_val:4.9736741185188293e-001,left_val:-1.6812080144882202e-001},{features:[[7,0,11,24,-1.],[7,12,11,12,2.]],tilted:0,threshold:-1.9071920216083527e-001,right_val:-2.9403430223464966e-001,left_val:6.0721081495285034e-001},{features:[[1,0,23,2,-1.],[1,1,23,1,2.]],tilted:0,threshold:1.2038889690302312e-004,right_val:2.4322469532489777e-001,left_val:-4.9244078993797302e-001},{features:[[9,11,6,3,-1.],[11,11,2,3,3.]],tilted:0,threshold:-6.1202510260045528e-003,right_val:-2.5555029511451721e-001,left_val:5.7662928104400635e-001}],threshold:-1.3557660579681396e+000},{simpleClassifiers:[{features:[[0,5,24,15,-1.],[8,5,8,15,3.]],tilted:0,threshold:1.8524490296840668e-001,right_val:3.3992278575897217e-001,left_val:-5.9384208917617798e-001},{features:[[23,0,2,25,-1.],[23,0,1,25,2.]],tilted:0,threshold:1.2689189752563834e-003,right_val:2.5343731045722961e-001,left_val:-6.4463311433792114e-001},{features:[[0,0,2,25,-1.],[1,0,1,25,2.]],tilted:0,threshold:8.5763330571353436e-004,right_val:2.4189129471778870e-001,left_val:-6.7231202125549316e-001},{features:[[5,5,15,15,-1.],[5,10,15,5,3.]],tilted:0,threshold:-1.6834350302815437e-002,right_val:-4.3302649259567261e-001,left_val:3.2584258913993835e-001},{features:[[3,23,19,2,-1.],[3,24,19,1,2.]],tilted:0,threshold:-2.4595179638708942e-005,right_val:-5.1088571548461914e-001,left_val:2.5265690684318542e-001},{features:[[2,5,21,15,-1.],[9,10,7,5,9.]],tilted:0,threshold:1.7257420113310218e-003,right_val:1.2177280336618423e-001,left_val:-4.4695881009101868e-001},{features:[[10,5,5,20,-1.],[10,15,5,10,2.]],tilted:0,threshold:4.7322191298007965e-002,right_val:4.1599690914154053e-001,left_val:-2.6065969467163086e-001},{features:[[9,0,7,22,-1.],[9,11,7,11,2.]],tilted:0,threshold:-9.2192016541957855e-002,right_val:-2.9402649402618408e-001,left_val:4.9446830153465271e-001},{features:[[0,0,24,4,-1.],[0,2,24,2,2.]],tilted:0,threshold:2.5826389901340008e-003,right_val:2.5506868958473206e-001,left_val:-4.6076709032058716e-001},{features:[[11,10,4,5,-1.],[12,10,2,5,2.]],tilted:0,threshold:-3.0530600342899561e-003,right_val:-2.3860910534858704e-001,left_val:5.1746541261672974e-001},{features:[[11,11,3,3,-1.],[12,11,1,3,3.]],tilted:0,threshold:1.4302280033007264e-003,right_val:5.9509581327438354e-001,left_val:-1.8288139998912811e-001},{features:[[1,0,24,25,-1.],[9,0,8,25,3.]],tilted:0,threshold:2.3731220513582230e-002,right_val:1.1410690099000931e-001,left_val:-8.0241280794143677e-001},{features:[[10,11,4,3,-1.],[11,11,2,3,2.]],tilted:0,threshold:-1.7200269503518939e-003,right_val:-3.3559548854827881e-001,left_val:4.9770259857177734e-001},{features:[[23,19,2,4,-1.],[23,19,1,4,2.]],tilted:1,threshold:2.4453289370285347e-005,right_val:2.5604829192161560e-001,left_val:-4.0247130393981934e-001},{features:[[2,19,4,2,-1.],[2,19,4,1,2.]],tilted:1,threshold:2.2456999431597069e-005,right_val:1.9648410379886627e-001,left_val:-5.7257527112960815e-001},{features:[[19,0,6,2,-1.],[19,0,6,1,2.]],tilted:1,threshold:-1.1040309800591785e-005,right_val:-5.3783118724822998e-001,left_val:1.9324329495429993e-001},{features:[[5,0,2,5,-1.],[5,0,1,5,2.]],tilted:1,threshold:-2.4118829969665967e-005,right_val:-5.0164592266082764e-001,left_val:2.0425009727478027e-001},{features:[[24,23,1,2,-1.],[24,24,1,1,2.]],tilted:0,threshold:-2.9135821387171745e-004,right_val:1.1119560152292252e-001,left_val:-7.6120328903198242e-001},{features:[[0,0,1,24,-1.],[0,12,1,12,2.]],tilted:0,threshold:2.2033160552382469e-002,right_val:-9.1618537902832031e-001,left_val:5.7622238993644714e-002},{features:[[24,7,1,18,-1.],[24,16,1,9,2.]],tilted:0,threshold:-1.2498879805207253e-002,right_val:1.3170750439167023e-001,left_val:-7.2695672512054443e-001}],threshold:-1.5641080141067505e+000},{simpleClassifiers:[{features:[[0,0,12,25,-1.],[6,0,6,25,2.]],tilted:0,threshold:8.8611230254173279e-002,right_val:3.5186940431594849e-001,left_val:-6.6486412286758423e-001},{features:[[1,7,24,11,-1.],[9,7,8,11,3.]],tilted:0,threshold:2.5681449100375175e-002,right_val:9.6691556274890900e-002,left_val:-8.6079347133636475e-001},{features:[[0,1,2,24,-1.],[1,1,1,24,2.]],tilted:0,threshold:2.2021760742063634e-005,right_val:1.1921170353889465e-001,left_val:-8.0106097459793091e-001},{features:[[0,13,25,12,-1.],[0,16,25,6,2.]],tilted:0,threshold:2.0681109745055437e-003,right_val:2.0666299760341644e-001,left_val:-6.6451412439346313e-001},{features:[[0,0,25,12,-1.],[0,3,25,6,2.]],tilted:0,threshold:1.6312770312651992e-003,right_val:2.5481811165809631e-001,left_val:-6.8381088972091675e-001},{features:[[1,0,24,25,-1.],[9,0,8,25,3.]],tilted:0,threshold:1.9836429506540298e-002,right_val:1.2496689707040787e-001,left_val:-9.5206391811370850e-001},{features:[[3,0,19,4,-1.],[3,1,19,2,2.]],tilted:0,threshold:2.2290700144367293e-005,right_val:1.9276830554008484e-001,left_val:-7.0204389095306396e-001},{features:[[1,23,24,2,-1.],[1,24,24,1,2.]],tilted:0,threshold:-2.2802520106779411e-005,right_val:-7.8502702713012695e-001,left_val:2.1565049886703491e-001},{features:[[10,5,4,20,-1.],[10,15,4,10,2.]],tilted:0,threshold:3.5834241658449173e-002,right_val:5.3787577152252197e-001,left_val:-3.8406941294670105e-001},{features:[[14,6,1,14,-1.],[14,6,1,7,2.]],tilted:1,threshold:1.0084280074806884e-004,right_val:2.4612200260162354e-001,left_val:-6.8384587764739990e-001},{features:[[4,23,15,2,-1.],[4,24,15,1,2.]],tilted:0,threshold:2.6884470134973526e-002,right_val:-2.6435000000000000e+003,left_val:-2.9663830995559692e-001},{features:[[24,0,1,24,-1.],[24,12,1,12,2.]],tilted:0,threshold:2.0637569949030876e-002,right_val:-7.9614728689193726e-001,left_val:5.3151738643646240e-001},{features:[[0,0,1,16,-1.],[0,8,1,8,2.]],tilted:0,threshold:-8.8602686300873756e-003,right_val:1.8032559752464294e-001,left_val:-7.8123009204864502e-001},{features:[[18,7,4,11,-1.],[18,7,2,11,2.]],tilted:0,threshold:-7.8016798943281174e-003,right_val:-1.0996480286121368e-001,left_val:1.7774020135402679e-001},{features:[[0,2,14,23,-1.],[7,2,7,23,2.]],tilted:0,threshold:1.1463870108127594e-001,right_val:-2.2767600417137146e-001,left_val:5.1441919803619385e-001},{features:[[24,23,1,2,-1.],[24,24,1,1,2.]],tilted:0,threshold:-2.6180568966083229e-004,right_val:1.1731670051813126e-001,left_val:-6.9460737705230713e-001},{features:[[0,23,1,2,-1.],[0,24,1,1,2.]],tilted:0,threshold:-2.8006930369883776e-004,right_val:1.0120259970426559e-001,left_val:-7.9735141992568970e-001}],threshold:-1.4591870307922363e+000},{simpleClassifiers:[{features:[[0,0,1,2,-1.],[0,1,1,1,2.]],tilted:0,threshold:2.9352991259656847e-004,right_val:-7.6414722204208374e-001,left_val:1.3833090662956238e-001},{features:[[24,5,1,20,-1.],[24,15,1,10,2.]],tilted:0,threshold:-1.5867210924625397e-002,right_val:5.1472321152687073e-002,left_val:-9.0028488636016846e-001},{features:[[0,5,1,20,-1.],[0,15,1,10,2.]],tilted:0,threshold:-1.6637140884995461e-002,right_val:1.0005489736795425e-001,left_val:-8.9705729484558105e-001},{features:[[3,1,19,24,-1.],[3,13,19,12,2.]],tilted:0,threshold:-3.3240309357643127e-001,right_val:-1.9235250353813171e-001,left_val:4.9737390875816345e-001},{features:[[5,0,15,24,-1.],[5,12,15,12,2.]],tilted:0,threshold:2.4854320287704468e-001,right_val:4.5927569270133972e-001,left_val:-2.7211311459541321e-001},{features:[[24,7,1,18,-1.],[24,16,1,9,2.]],tilted:0,threshold:1.1056589893996716e-002,right_val:-7.7563858032226563e-001,left_val:1.1864840239286423e-001},{features:[[8,8,8,10,-1.],[8,13,8,5,2.]],tilted:0,threshold:1.8648169934749603e-001,right_val:-1.1346250000000000e+003,left_val:-1.2418299913406372e-002},{features:[[24,7,1,18,-1.],[24,16,1,9,2.]],tilted:0,threshold:1.7597459256649017e-002,right_val:-8.4127980470657349e-001,left_val:2.5591930374503136e-002},{features:[[0,7,1,18,-1.],[0,16,1,9,2.]],tilted:0,threshold:1.1070669628679752e-002,right_val:-7.1428167819976807e-001,left_val:1.0083609819412231e-001},{features:[[0,13,25,12,-1.],[0,16,25,6,2.]],tilted:0,threshold:1.6768550500273705e-002,right_val:1.9811430573463440e-001,left_val:-3.3646050095558167e-001},{features:[[4,0,14,14,-1.],[4,7,14,7,2.]],tilted:0,threshold:4.3410068750381470e-001,right_val:-1.2339289550781250e+003,left_val:-9.3027588445693254e-004},{features:[[23,0,2,2,-1.],[23,1,2,1,2.]],tilted:0,threshold:4.6659549116156995e-004,right_val:-5.8821451663970947e-001,left_val:1.2081030011177063e-001},{features:[[0,0,25,2,-1.],[0,1,25,1,2.]],tilted:0,threshold:1.9694319926202297e-003,right_val:2.1227480471134186e-001,left_val:-3.2620209455490112e-001},{features:[[12,11,4,4,-1.],[13,11,2,4,2.]],tilted:0,threshold:-2.8702169656753540e-003,right_val:-1.4962139725685120e-001,left_val:4.8137769103050232e-001},{features:[[9,11,4,4,-1.],[10,11,2,4,2.]],tilted:0,threshold:-3.4756050445139408e-003,right_val:-1.3120299577713013e-001,left_val:5.2802997827529907e-001},{features:[[23,0,2,4,-1.],[23,1,2,2,2.]],tilted:0,threshold:-5.4196082055568695e-004,right_val:1.2100230157375336e-001,left_val:-5.3317350149154663e-001},{features:[[2,22,1,2,-1.],[2,22,1,1,2.]],tilted:1,threshold:-9.3427370302379131e-004,right_val:5.8498218655586243e-002,left_val:-8.8130372762680054e-001},{features:[[24,22,1,2,-1.],[24,23,1,1,2.]],tilted:0,threshold:-2.8417719295248389e-004,right_val:6.8724647164344788e-002,left_val:-6.2143480777740479e-001},{features:[[0,23,25,2,-1.],[0,24,25,1,2.]],tilted:0,threshold:-4.0356540121138096e-003,right_val:-2.3718340694904327e-001,left_val:2.6959720253944397e-001},{features:[[24,21,1,4,-1.],[24,23,1,2,2.]],tilted:0,threshold:7.0708477869629860e-004,right_val:-4.5742911100387573e-001,left_val:8.4266871213912964e-002}],threshold:-1.1637979745864868e+000},{simpleClassifiers:[{features:[[2,22,1,2,-1.],[2,22,1,1,2.]],tilted:1,threshold:4.6358350664377213e-004,right_val:-3.8676708936691284e-001,left_val:1.8896600604057312e-001},{features:[[23,0,2,25,-1.],[23,0,1,25,2.]],tilted:0,threshold:3.8987519219517708e-003,right_val:3.1238529086112976e-001,left_val:-3.9730489253997803e-001},{features:[[0,0,10,25,-1.],[5,0,5,25,2.]],tilted:0,threshold:5.8029189705848694e-002,right_val:1.5904699265956879e-001,left_val:-5.0608777999877930e-001},{features:[[1,0,24,25,-1.],[1,0,12,25,2.]],tilted:0,threshold:-5.4033267498016357e-001,right_val:1.1976829916238785e-001,left_val:-7.6801401376724243e-001},{features:[[0,1,1,24,-1.],[0,7,1,12,2.]],tilted:0,threshold:1.2194709852337837e-002,right_val:-8.2098531723022461e-001,left_val:6.5259806811809540e-002},{features:[[23,0,2,25,-1.],[23,0,1,25,2.]],tilted:0,threshold:8.4217172116041183e-004,right_val:3.1723741441965103e-002,left_val:-2.5191161036491394e-001},{features:[[0,1,2,24,-1.],[1,1,1,24,2.]],tilted:0,threshold:3.8863120134919882e-003,right_val:2.2988179326057434e-001,left_val:-3.1038621068000793e-001},{features:[[24,1,1,2,-1.],[24,1,1,1,2.]],tilted:1,threshold:8.8707922259345651e-004,right_val:-6.9049417972564697e-001,left_val:6.5289810299873352e-002},{features:[[1,1,2,1,-1.],[1,1,1,1,2.]],tilted:1,threshold:-4.1859821067191660e-004,right_val:1.8126510083675385e-001,left_val:-3.9824271202087402e-001},{features:[[24,0,1,22,-1.],[24,11,1,11,2.]],tilted:0,threshold:-1.7866320908069611e-002,right_val:7.5951322913169861e-002,left_val:-9.4715738296508789e-001},{features:[[0,0,1,24,-1.],[0,8,1,8,3.]],tilted:0,threshold:-1.1730570346117020e-002,right_val:7.1461476385593414e-002,left_val:-6.8169498443603516e-001},{features:[[5,5,15,15,-1.],[5,10,15,5,3.]],tilted:0,threshold:-1.8845280632376671e-002,right_val:-2.7402049303054810e-001,left_val:2.6420509815216064e-001},{features:[[1,0,2,1,-1.],[1,0,1,1,2.]],tilted:1,threshold:5.1623297622427344e-004,right_val:-6.5890562534332275e-001,left_val:8.9989356696605682e-002},{features:[[17,12,2,6,-1.],[18,12,1,3,2.],[17,15,1,3,2.]],tilted:0,threshold:-1.9588230643421412e-003,right_val:-1.2648980319499969e-001,left_val:4.4965040683746338e-001},{features:[[6,12,2,6,-1.],[6,12,1,3,2.],[7,15,1,3,2.]],tilted:0,threshold:-1.8352799816057086e-003,right_val:-1.2392920255661011e-001,left_val:4.4554790854454041e-001},{features:[[14,12,6,2,-1.],[16,12,2,2,3.]],tilted:0,threshold:-4.6895779669284821e-003,right_val:-1.3527210056781769e-001,left_val:4.2773500084877014e-001},{features:[[0,8,18,9,-1.],[6,8,6,9,3.]],tilted:0,threshold:1.9215959310531616e-001,right_val:-7.4916952848434448e-001,left_val:8.4252431988716125e-002},{features:[[23,11,2,4,-1.],[23,12,2,2,2.]],tilted:0,threshold:5.6411779951304197e-004,right_val:-5.6502771377563477e-001,left_val:7.7006638050079346e-002},{features:[[9,10,4,3,-1.],[10,10,2,3,2.]],tilted:0,threshold:2.8751920908689499e-003,right_val:4.1225358843803406e-001,left_val:-1.3198760151863098e-001},{features:[[7,18,12,4,-1.],[7,19,12,2,2.]],tilted:0,threshold:7.7192699536681175e-003,right_val:-8.4410911798477173e-001,left_val:7.7505782246589661e-002},{features:[[9,10,4,3,-1.],[10,10,2,3,2.]],tilted:0,threshold:-1.6325690085068345e-003,right_val:-1.5619030594825745e-001,left_val:3.3561250567436218e-001},{features:[[23,11,2,4,-1.],[23,12,2,2,2.]],tilted:0,threshold:-5.6915491586551070e-004,right_val:8.1965819001197815e-002,left_val:-3.4847769141197205e-001},{features:[[4,3,16,22,-1.],[4,14,16,11,2.]],tilted:0,threshold:-2.1694660186767578e-001,right_val:-1.4847409725189209e-001,left_val:3.1710639595985413e-001},{features:[[4,0,21,24,-1.],[4,12,21,12,2.]],tilted:0,threshold:2.5057300925254822e-001,right_val:3.4584110975265503e-001,left_val:-2.3321990668773651e-001}],threshold:-1.2382400035858154e+000},{simpleClassifiers:[{features:[[0,0,24,25,-1.],[8,0,8,25,3.]],tilted:0,threshold:3.6485868692398071e-001,right_val:2.0066380500793457e-001,left_val:-3.6243289709091187e-001},{features:[[20,6,2,8,-1.],[21,6,1,4,2.],[20,10,1,4,2.]],tilted:0,threshold:-3.7072061095386744e-003,right_val:-1.2000480294227600e-001,left_val:5.8469599485397339e-001},{features:[[3,6,2,8,-1.],[3,6,1,4,2.],[4,10,1,4,2.]],tilted:0,threshold:-3.7888090591877699e-003,right_val:-9.6978336572647095e-002,left_val:5.5193948745727539e-001},{features:[[6,4,16,21,-1.],[10,4,8,21,2.]],tilted:0,threshold:6.6407203674316406e-002,right_val:9.7074352204799652e-002,left_val:-1.8292060494422913e-001},{features:[[0,2,4,19,-1.],[2,2,2,19,2.]],tilted:0,threshold:3.8407989777624607e-003,right_val:1.3275340199470520e-001,left_val:-4.5010709762573242e-001},{features:[[24,0,1,20,-1.],[24,10,1,10,2.]],tilted:0,threshold:1.5176840126514435e-002,right_val:-8.2534867525100708e-001,left_val:8.6718283593654633e-002},{features:[[5,3,15,22,-1.],[5,14,15,11,2.]],tilted:0,threshold:2.1945759654045105e-001,right_val:3.5320338606834412e-001,left_val:-1.6291670501232147e-001},{features:[[9,0,7,20,-1.],[9,10,7,10,2.]],tilted:0,threshold:-7.7002197504043579e-002,right_val:-1.9850799441337585e-001,left_val:3.8327819108963013e-001},{features:[[1,0,22,2,-1.],[1,1,22,1,2.]],tilted:0,threshold:5.0508929416537285e-003,right_val:2.8920450806617737e-001,left_val:-1.9514580070972443e-001},{features:[[24,0,1,20,-1.],[24,10,1,10,2.]],tilted:0,threshold:-1.6207909211516380e-002,right_val:4.6221490949392319e-002,left_val:-7.8625917434692383e-001},{features:[[0,0,1,20,-1.],[0,10,1,10,2.]],tilted:0,threshold:1.6638509929180145e-002,right_val:-8.7408941984176636e-001,left_val:5.8282759040594101e-002},{features:[[24,0,1,22,-1.],[24,11,1,11,2.]],tilted:0,threshold:-4.7077341005206108e-003,right_val:-9.1372027993202209e-002,left_val:1.0838989913463593e-001},{features:[[0,0,1,22,-1.],[0,11,1,11,2.]],tilted:0,threshold:-1.7989320680499077e-002,right_val:7.1595683693885803e-002,left_val:-7.6009011268615723e-001},{features:[[1,17,24,8,-1.],[1,21,24,4,2.]],tilted:0,threshold:-2.2045580670237541e-002,right_val:-2.5301960110664368e-001,left_val:2.0044830441474915e-001},{features:[[3,0,19,18,-1.],[3,9,19,9,2.]],tilted:0,threshold:1.0939480364322662e-001,right_val:2.8172031044960022e-001,left_val:-1.9698250293731689e-001},{features:[[23,23,1,2,-1.],[23,24,1,1,2.]],tilted:0,threshold:3.2741879113018513e-004,right_val:-6.2705790996551514e-001,left_val:7.4757352471351624e-002},{features:[[1,23,1,2,-1.],[1,24,1,1,2.]],tilted:0,threshold:3.3313198946416378e-004,right_val:-6.4261537790298462e-001,left_val:6.0775469988584518e-002},{features:[[23,21,2,4,-1.],[23,22,2,2,2.]],tilted:0,threshold:4.3790769996121526e-004,right_val:-4.7836649417877197e-001,left_val:7.6970867812633514e-002},{features:[[0,21,2,4,-1.],[0,22,2,2,2.]],tilted:0,threshold:4.5484420843422413e-004,right_val:-4.8621150851249695e-001,left_val:9.0992778539657593e-002},{features:[[2,17,21,8,-1.],[2,19,21,4,2.]],tilted:0,threshold:7.2560198605060577e-003,right_val:1.9337640702724457e-001,left_val:-2.6507800817489624e-001},{features:[[10,11,4,2,-1.],[11,11,2,2,2.]],tilted:0,threshold:-2.2607750725001097e-003,right_val:-1.1367010325193405e-001,left_val:4.2049959301948547e-001},{features:[[12,12,3,2,-1.],[13,12,1,2,3.]],tilted:0,threshold:-1.1031399480998516e-003,right_val:-1.0477790236473083e-001,left_val:3.4452688694000244e-001},{features:[[4,2,14,4,-1.],[4,3,14,2,2.]],tilted:0,threshold:-1.9140050280839205e-003,right_val:9.9808588624000549e-002,left_val:-4.7198608517646790e-001},{features:[[9,4,8,2,-1.],[9,5,8,1,2.]],tilted:0,threshold:-2.2288530599325895e-003,right_val:5.8708198368549347e-002,left_val:-6.2563192844390869e-001},{features:[[10,10,2,6,-1.],[10,10,1,3,2.],[11,13,1,3,2.]],tilted:0,threshold:-2.1744300611317158e-003,right_val:-1.1335399746894836e-001,left_val:4.3151539564132690e-001},{features:[[13,8,2,8,-1.],[14,8,1,4,2.],[13,12,1,4,2.]],tilted:0,threshold:2.8203260153532028e-003,right_val:3.8637679815292358e-001,left_val:-9.0162709355354309e-002},{features:[[3,10,18,12,-1.],[9,14,6,4,9.]],tilted:0,threshold:3.4067618846893311e-001,right_val:-8.3676660060882568e-001,left_val:5.5690128356218338e-002},{features:[[0,11,25,3,-1.],[0,12,25,1,3.]],tilted:0,threshold:6.3827941194176674e-003,right_val:-7.8409391641616821e-001,left_val:3.7600088864564896e-002},{features:[[0,0,25,12,-1.],[0,3,25,6,2.]],tilted:0,threshold:1.1914909631013870e-001,right_val:-9.2239922285079956e-001,left_val:3.1439449638128281e-002},{features:[[24,5,1,10,-1.],[24,10,1,5,2.]],tilted:0,threshold:-4.3900958262383938e-003,right_val:2.1284699440002441e-002,left_val:-3.9533978700637817e-001},{features:[[0,5,1,10,-1.],[0,10,1,5,2.]],tilted:0,threshold:-6.1812077183276415e-004,right_val:-1.7483870685100555e-001,left_val:2.3230640590190887e-001},{features:[[13,22,1,2,-1.],[13,23,1,1,2.]],tilted:0,threshold:-1.9955119933001697e-004,right_val:1.0967289656400681e-001,left_val:-2.8087100386619568e-001}],threshold:-1.1826640367507935e+000},{simpleClassifiers:[{features:[[7,12,3,1,-1.],[8,12,1,1,3.]],tilted:0,threshold:8.8703620713204145e-004,right_val:4.3664848804473877e-001,left_val:-1.4286060631275177e-001},{features:[[15,11,4,5,-1.],[15,11,2,5,2.]],tilted:0,threshold:1.2350199744105339e-002,right_val:2.6076430082321167e-001,left_val:-8.0335199832916260e-002},{features:[[7,11,4,3,-1.],[8,11,2,3,2.]],tilted:0,threshold:-2.5250180624425411e-003,right_val:-1.2449479848146439e-001,left_val:4.5786809921264648e-001},{features:[[14,12,3,1,-1.],[15,12,1,1,3.]],tilted:0,threshold:-7.8186811879277229e-004,right_val:-1.0820990055799484e-001,left_val:4.1217720508575439e-001},{features:[[8,12,3,1,-1.],[9,12,1,1,3.]],tilted:0,threshold:6.6686311038210988e-004,right_val:3.7527379393577576e-001,left_val:-1.4924609661102295e-001},{features:[[23,0,2,25,-1.],[23,0,1,25,2.]],tilted:0,threshold:1.0244899895042181e-003,right_val:1.4233219623565674e-001,left_val:-4.8530641198158264e-001},{features:[[0,0,2,25,-1.],[1,0,1,25,2.]],tilted:0,threshold:1.2527270009741187e-003,right_val:1.6024069488048553e-001,left_val:-4.4631031155586243e-001},{features:[[23,21,2,1,-1.],[23,21,1,1,2.]],tilted:1,threshold:4.7616599476896226e-004,right_val:-2.8740549087524414e-001,left_val:1.4618170261383057e-001},{features:[[2,20,1,2,-1.],[2,20,1,1,2.]],tilted:1,threshold:4.2036260128952563e-004,right_val:-3.5512998700141907e-001,left_val:1.7892700433731079e-001},{features:[[23,0,2,2,-1.],[23,0,1,2,2.]],tilted:0,threshold:4.3912709224969149e-004,right_val:-3.6231538653373718e-001,left_val:1.3554279506206512e-001},{features:[[3,23,19,2,-1.],[3,24,19,1,2.]],tilted:0,threshold:-5.2080918103456497e-003,right_val:-1.6971330344676971e-001,left_val:3.0311760306358337e-001},{features:[[23,0,2,2,-1.],[23,0,1,2,2.]],tilted:0,threshold:-8.5600721649825573e-004,right_val:6.7641116678714752e-002,left_val:-7.8621208667755127e-001},{features:[[0,0,2,2,-1.],[1,0,1,2,2.]],tilted:0,threshold:4.3306438601575792e-004,right_val:-4.1017350554466248e-001,left_val:1.1879850178956985e-001},{features:[[23,0,2,2,-1.],[23,0,1,2,2.]],tilted:0,threshold:2.1799209207529202e-005,right_val:1.0719849914312363e-001,left_val:-1.8755300343036652e-001},{features:[[0,0,2,2,-1.],[1,0,1,2,2.]],tilted:0,threshold:2.2921649360796437e-005,right_val:1.8351049721240997e-001,left_val:-2.5931510329246521e-001},{features:[[3,0,19,24,-1.],[3,12,19,12,2.]],tilted:0,threshold:3.3169940114021301e-001,right_val:3.0729588866233826e-001,left_val:-1.7855569720268250e-001},{features:[[5,0,15,24,-1.],[5,12,15,12,2.]],tilted:0,threshold:-2.6880529522895813e-001,right_val:-1.6482029855251312e-001,left_val:4.1601109504699707e-001},{features:[[0,0,25,8,-1.],[0,4,25,4,2.]],tilted:0,threshold:2.0318999886512756e-002,right_val:2.1150949597358704e-001,left_val:-2.8030520677566528e-001},{features:[[2,0,21,3,-1.],[9,1,7,1,9.]],tilted:0,threshold:3.9052091538906097e-002,right_val:2.2723379731178284e-001,left_val:-1.9721250236034393e-001},{features:[[19,9,4,8,-1.],[21,9,2,4,2.],[19,13,2,4,2.]],tilted:0,threshold:7.9546272754669189e-003,right_val:4.7643399238586426e-001,left_val:-1.1499509960412979e-001},{features:[[1,10,23,3,-1.],[1,11,23,1,3.]],tilted:0,threshold:6.8952748551964760e-003,right_val:-8.2518738508224487e-001,left_val:6.1748500913381577e-002},{features:[[12,9,2,12,-1.],[13,9,1,6,2.],[12,15,1,6,2.]],tilted:0,threshold:-3.5556990187615156e-003,right_val:-9.3571491539478302e-002,left_val:2.7410700917243958e-001},{features:[[0,3,1,22,-1.],[0,14,1,11,2.]],tilted:0,threshold:2.0416190847754478e-002,right_val:-8.7137848138809204e-001,left_val:4.7507200390100479e-002},{features:[[5,0,15,21,-1.],[10,7,5,7,9.]],tilted:0,threshold:4.1883000731468201e-001,right_val:-6.9378608465194702e-001,left_val:4.1436489671468735e-002},{features:[[1,0,2,1,-1.],[2,0,1,1,2.]],tilted:0,threshold:-5.2820937708020210e-004,right_val:3.5777650773525238e-002,left_val:-8.0074387788772583e-001},{features:[[19,9,4,8,-1.],[21,9,2,4,2.],[19,13,2,4,2.]],tilted:0,threshold:-4.6537858434021473e-003,right_val:-1.2797290086746216e-001,left_val:3.5810899734497070e-001},{features:[[2,9,4,8,-1.],[2,9,2,4,2.],[4,13,2,4,2.]],tilted:0,threshold:9.7785359248518944e-003,right_val:4.5907780528068542e-001,left_val:-8.5733927786350250e-002},{features:[[19,8,4,8,-1.],[21,8,2,4,2.],[19,12,2,4,2.]],tilted:0,threshold:3.4061060287058353e-003,right_val:1.7149560153484344e-001,left_val:-6.7135937511920929e-002},{features:[[2,8,4,8,-1.],[2,8,2,4,2.],[4,12,2,4,2.]],tilted:0,threshold:-7.1988371200859547e-003,right_val:-1.2102840095758438e-001,left_val:4.5996940135955811e-001},{features:[[0,8,25,4,-1.],[0,9,25,2,2.]],tilted:0,threshold:1.1576360091567039e-002,right_val:-8.8701897859573364e-001,left_val:5.5191241204738617e-002},{features:[[0,11,2,4,-1.],[0,12,2,2,2.]],tilted:0,threshold:5.1951088244095445e-004,right_val:-4.9204811453819275e-001,left_val:6.7860089242458344e-002},{features:[[1,0,23,8,-1.],[1,2,23,4,2.]],tilted:0,threshold:2.5765900500118732e-003,right_val:1.2351959943771362e-001,left_val:-2.8460198640823364e-001},{features:[[5,3,15,18,-1.],[5,9,15,6,3.]],tilted:0,threshold:1.6835910081863403e-001,right_val:6.7276817560195923e-001,left_val:-6.5295182168483734e-002}],threshold:-1.1619060039520264e+000},{simpleClassifiers:[{features:[[0,0,12,25,-1.],[6,0,6,25,2.]],tilted:0,threshold:8.0734930932521820e-002,right_val:1.2320630252361298e-001,left_val:-5.0151252746582031e-001},{features:[[22,1,1,24,-1.],[22,7,1,12,2.]],tilted:0,threshold:4.9881008453667164e-003,right_val:2.2033059597015381e-001,left_val:-1.3929890096187592e-001},{features:[[2,1,1,24,-1.],[2,7,1,12,2.]],tilted:0,threshold:5.5222441442310810e-003,right_val:3.0543148517608643e-001,left_val:-1.6725270450115204e-001},{features:[[4,23,19,2,-1.],[4,24,19,1,2.]],tilted:0,threshold:-1.7651449888944626e-003,right_val:-1.1531510204076767e-001,left_val:1.4461129903793335e-001},{features:[[1,2,23,21,-1.],[1,9,23,7,3.]],tilted:0,threshold:6.0122009366750717e-002,right_val:-3.8055491447448730e-001,left_val:1.6416029632091522e-001},{features:[[1,2,24,21,-1.],[9,9,8,7,9.]],tilted:0,threshold:6.1538379639387131e-002,right_val:8.2790613174438477e-002,left_val:-5.2694129943847656e-001},{features:[[0,0,16,24,-1.],[8,0,8,24,2.]],tilted:0,threshold:4.9553498625755310e-001,right_val:-6.7714440822601318e-001,left_val:4.2942259460687637e-002},{features:[[24,7,1,18,-1.],[24,16,1,9,2.]],tilted:0,threshold:-1.3491280376911163e-002,right_val:2.5981629267334938e-002,left_val:-7.9471498727798462e-001},{features:[[0,7,1,18,-1.],[0,16,1,9,2.]],tilted:0,threshold:-1.3543509878218174e-002,right_val:4.7937188297510147e-002,left_val:-7.9188191890716553e-001},{features:[[0,0,25,12,-1.],[0,3,25,6,2.]],tilted:0,threshold:1.1810439638793468e-002,right_val:1.2301079928874969e-001,left_val:-2.8349700570106506e-001},{features:[[5,21,15,3,-1.],[10,22,5,1,9.]],tilted:0,threshold:1.3551290147006512e-002,right_val:1.8431070446968079e-001,left_val:-2.0479810237884521e-001},{features:[[9,19,8,2,-1.],[9,20,8,1,2.]],tilted:0,threshold:2.2155249025672674e-003,right_val:-6.4096707105636597e-001,left_val:6.0262829065322876e-002},{features:[[11,1,1,2,-1.],[11,2,1,1,2.]],tilted:0,threshold:2.3545439762528986e-004,right_val:-3.2437419891357422e-001,left_val:1.0644689947366714e-001},{features:[[6,0,13,6,-1.],[6,2,13,2,3.]],tilted:0,threshold:4.8105299356393516e-004,right_val:1.3155519962310791e-001,left_val:-3.0601179599761963e-001},{features:[[12,23,1,2,-1.],[12,24,1,1,2.]],tilted:0,threshold:-2.0008509454783052e-004,right_val:1.3613070547580719e-001,left_val:-3.0324178934097290e-001},{features:[[6,19,14,6,-1.],[6,21,14,2,3.]],tilted:0,threshold:2.3672120732953772e-005,right_val:1.3083159923553467e-001,left_val:-3.0009239912033081e-001},{features:[[5,12,6,1,-1.],[7,12,2,1,3.]],tilted:0,threshold:3.6291049327701330e-003,right_val:3.5764211416244507e-001,left_val:-1.1187619715929031e-001},{features:[[17,8,2,6,-1.],[18,8,1,3,2.],[17,11,1,3,2.]],tilted:0,threshold:1.9785349722951651e-003,right_val:3.7574121356010437e-001,left_val:-9.9919758737087250e-002},{features:[[6,8,2,6,-1.],[6,8,1,3,2.],[7,11,1,3,2.]],tilted:0,threshold:-1.8082730239257216e-003,right_val:-1.0428240150213242e-001,left_val:4.0861770510673523e-001},{features:[[23,24,2,1,-1.],[23,24,1,1,2.]],tilted:0,threshold:-5.0346890930086374e-004,right_val:6.1041310429573059e-002,left_val:-8.4599661827087402e-001},{features:[[0,24,2,1,-1.],[1,24,1,1,2.]],tilted:0,threshold:-3.7712400080636144e-004,right_val:3.3072318881750107e-002,left_val:-7.1247512102127075e-001},{features:[[15,9,4,3,-1.],[16,9,2,3,2.]],tilted:0,threshold:2.8025570791214705e-003,right_val:2.4936139583587646e-001,left_val:-8.1714242696762085e-002},{features:[[6,9,4,3,-1.],[7,9,2,3,2.]],tilted:0,threshold:-2.5709250476211309e-003,right_val:-9.7475007176399231e-002,left_val:3.5556420683860779e-001},{features:[[23,0,2,25,-1.],[23,0,1,25,2.]],tilted:0,threshold:4.7641480341553688e-003,right_val:1.5445269644260406e-001,left_val:-1.8403269350528717e-001},{features:[[0,21,2,4,-1.],[0,21,1,2,2.],[1,23,1,2,2.]],tilted:0,threshold:5.5376789532601833e-004,right_val:-5.3317540884017944e-001,left_val:6.3511990010738373e-002},{features:[[23,0,2,25,-1.],[23,0,1,25,2.]],tilted:0,threshold:4.3237060308456421e-002,right_val:-6.4554607868194580e-001,left_val:2.2280379198491573e-003},{features:[[0,0,2,25,-1.],[1,0,1,25,2.]],tilted:0,threshold:5.6785959750413895e-003,right_val:1.8174830079078674e-001,left_val:-1.8612809479236603e-001},{features:[[23,15,2,2,-1.],[23,15,1,2,2.]],tilted:0,threshold:4.3273830669932067e-004,right_val:-2.7003818750381470e-001,left_val:1.2502700090408325e-001},{features:[[8,19,9,3,-1.],[8,20,9,1,3.]],tilted:0,threshold:-3.7943569477647543e-003,right_val:4.5233760029077530e-002,left_val:-7.8249299526214600e-001},{features:[[23,15,2,2,-1.],[23,15,1,2,2.]],tilted:0,threshold:2.9963750857859850e-003,right_val:5.2830129861831665e-001,left_val:-7.6169371604919434e-002},{features:[[0,15,2,2,-1.],[1,15,1,2,2.]],tilted:0,threshold:3.5630981437861919e-004,right_val:-2.4754630029201508e-001,left_val:1.4209270477294922e-001},{features:[[8,5,9,20,-1.],[8,15,9,10,2.]],tilted:0,threshold:1.1159469932317734e-001,right_val:2.8498700261116028e-001,left_val:-1.2094090133905411e-001},{features:[[7,3,11,22,-1.],[7,14,11,11,2.]],tilted:0,threshold:-1.3539190590381622e-001,right_val:-2.0331899821758270e-001,left_val:2.9897761344909668e-001},{features:[[2,6,23,4,-1.],[2,8,23,2,2.]],tilted:0,threshold:-3.0475310049951077e-003,right_val:1.5314429998397827e-001,left_val:-2.2049249708652496e-001},{features:[[11,5,3,6,-1.],[11,8,3,3,2.]],tilted:0,threshold:-2.6199448620900512e-004,right_val:-2.2174119949340820e-001,left_val:1.8473750352859497e-001},{features:[[6,0,15,1,-1.],[11,0,5,1,3.]],tilted:0,threshold:1.9398240372538567e-002,right_val:-6.4281028509140015e-001,left_val:4.4195670634508133e-002},{features:[[0,0,1,18,-1.],[0,9,1,9,2.]],tilted:0,threshold:-1.5306820161640644e-002,right_val:3.3107019960880280e-002,left_val:-8.3298677206039429e-001},{features:[[9,0,12,1,-1.],[12,0,6,1,2.]],tilted:0,threshold:2.9064790578559041e-004,right_val:9.9145926535129547e-002,left_val:-1.6691260039806366e-001},{features:[[0,1,19,24,-1.],[0,13,19,12,2.]],tilted:0,threshold:2.1586589515209198e-001,right_val:2.2601340711116791e-001,left_val:-1.4913189411163330e-001},{features:[[23,15,1,10,-1.],[23,20,1,5,2.]],tilted:0,threshold:-1.1482139816507697e-003,right_val:-8.3940923213958740e-002,left_val:1.3337799906730652e-001},{features:[[0,6,24,12,-1.],[12,6,12,12,2.]],tilted:0,threshold:-1.2832109630107880e-001,right_val:-1.2779660522937775e-001,left_val:2.6057571172714233e-001},{features:[[15,11,2,4,-1.],[16,11,1,2,2.],[15,13,1,2,2.]],tilted:0,threshold:-1.3299930142238736e-003,right_val:-8.2496158778667450e-002,left_val:3.9536279439926147e-001},{features:[[0,0,2,6,-1.],[0,2,2,2,3.]],tilted:0,threshold:-1.3658769894391298e-003,right_val:8.1771567463874817e-002,left_val:-4.2845389246940613e-001}],threshold:-1.1686840057373047e+000},{simpleClassifiers:[{features:[[0,0,24,25,-1.],[12,0,12,25,2.]],tilted:0,threshold:-5.4697930812835693e-001,right_val:6.5116211771965027e-002,left_val:-7.4169278144836426e-001},{features:[[22,11,1,14,-1.],[22,18,1,7,2.]],tilted:0,threshold:-2.9348989482969046e-003,right_val:-1.0431099683046341e-001,left_val:2.0817759633064270e-001},{features:[[0,9,21,8,-1.],[7,9,7,8,3.]],tilted:0,threshold:4.2346090078353882e-002,right_val:1.0494910180568695e-001,left_val:-4.1431620717048645e-001},{features:[[5,12,20,3,-1.],[10,12,10,3,2.]],tilted:0,threshold:2.0167229231446981e-003,right_val:5.8207400143146515e-002,left_val:-2.9576519131660461e-001},{features:[[5,5,15,15,-1.],[5,10,15,5,3.]],tilted:0,threshold:-2.3280899971723557e-002,right_val:-2.0072369277477264e-001,left_val:2.4461050331592560e-001},{features:[[22,0,1,24,-1.],[22,6,1,12,2.]],tilted:0,threshold:5.2206241525709629e-003,right_val:1.1710409820079803e-001,left_val:-6.9155037403106689e-002},{features:[[2,0,1,24,-1.],[2,6,1,12,2.]],tilted:0,threshold:5.0357701256871223e-003,right_val:2.8217938542366028e-001,left_val:-1.5814490616321564e-001},{features:[[0,9,25,16,-1.],[0,13,25,8,2.]],tilted:0,threshold:1.7077940702438354e-001,right_val:-8.5689657926559448e-001,left_val:5.2497748285531998e-002},{features:[[0,0,3,1,-1.],[1,0,1,1,3.]],tilted:0,threshold:-3.2828870462253690e-004,right_val:6.7810378968715668e-002,left_val:-4.5315450429916382e-001},{features:[[18,11,2,6,-1.],[19,11,1,3,2.],[18,14,1,3,2.]],tilted:0,threshold:-2.2234760690480471e-003,right_val:-1.1181300133466721e-001,left_val:4.0166100859642029e-001},{features:[[5,11,2,6,-1.],[5,11,1,3,2.],[6,14,1,3,2.]],tilted:0,threshold:-2.2535501047968864e-003,right_val:-9.2809401452541351e-002,left_val:3.9260658621788025e-001},{features:[[20,10,4,8,-1.],[22,10,2,4,2.],[20,14,2,4,2.]],tilted:0,threshold:-7.9935323446989059e-003,right_val:-8.7345071136951447e-002,left_val:4.2978098988533020e-001},{features:[[1,10,4,8,-1.],[1,10,2,4,2.],[3,14,2,4,2.]],tilted:0,threshold:-9.5514543354511261e-003,right_val:-7.3955677449703217e-002,left_val:4.8636689782142639e-001},{features:[[24,13,1,6,-1.],[24,15,1,2,3.]],tilted:0,threshold:7.9448771430179477e-004,right_val:-4.4167259335517883e-001,left_val:9.2045426368713379e-002},{features:[[0,14,1,6,-1.],[0,16,1,2,3.]],tilted:0,threshold:5.6366110220551491e-004,right_val:-3.9137899875640869e-001,left_val:8.5762083530426025e-002},{features:[[8,1,15,15,-1.],[13,6,5,5,9.]],tilted:0,threshold:3.4115129709243774e-001,right_val:-6.5657228231430054e-001,left_val:2.1570369601249695e-002},{features:[[7,7,6,9,-1.],[9,7,2,9,3.]],tilted:0,threshold:-1.3932379893958569e-002,right_val:-9.4087198376655579e-002,left_val:3.7450811266899109e-001},{features:[[11,10,4,4,-1.],[12,10,2,4,2.]],tilted:0,threshold:-3.4664489794522524e-003,right_val:-1.0363130271434784e-001,left_val:3.3531159162521362e-001},{features:[[5,1,12,4,-1.],[9,5,4,4,3.]],tilted:1,threshold:1.1305399984121323e-001,right_val:-8.0388927459716797e-001,left_val:4.4492159038782120e-002},{features:[[3,13,22,3,-1.],[3,14,22,1,3.]],tilted:0,threshold:7.3196208104491234e-003,right_val:-7.5850278139114380e-001,left_val:2.6117980480194092e-002},{features:[[10,12,4,2,-1.],[11,12,2,2,2.]],tilted:0,threshold:-1.2547730002552271e-003,right_val:-1.2721140682697296e-001,left_val:2.6369830965995789e-001},{features:[[21,0,4,25,-1.],[21,0,2,25,2.]],tilted:0,threshold:5.4105562157928944e-003,right_val:1.2777450680732727e-001,left_val:-4.2188149690628052e-001},{features:[[0,0,4,25,-1.],[2,0,2,25,2.]],tilted:0,threshold:5.0612930208444595e-003,right_val:7.7225938439369202e-002,left_val:-4.5063719153404236e-001},{features:[[24,0,1,2,-1.],[24,0,1,1,2.]],tilted:1,threshold:-4.3663478572852910e-004,right_val:1.4423480629920959e-001,left_val:-3.0216220021247864e-001},{features:[[1,0,2,1,-1.],[1,0,1,1,2.]],tilted:1,threshold:-4.6671440941281617e-004,right_val:1.2610529363155365e-001,left_val:-3.0956488847732544e-001},{features:[[0,6,25,2,-1.],[0,7,25,1,2.]],tilted:0,threshold:3.1374259851872921e-003,right_val:-3.6539548635482788e-001,left_val:1.0157799720764160e-001},{features:[[1,0,2,1,-1.],[1,0,1,1,2.]],tilted:1,threshold:-2.2114549210527912e-005,right_val:-2.5539168715476990e-001,left_val:1.2883719801902771e-001},{features:[[11,12,3,1,-1.],[12,12,1,1,3.]],tilted:0,threshold:3.6453141365200281e-004,right_val:2.3675279319286346e-001,left_val:-1.4327269792556763e-001},{features:[[1,12,21,3,-1.],[1,13,21,1,3.]],tilted:0,threshold:6.0733011923730373e-003,right_val:-6.9410818815231323e-001,left_val:4.9781698733568192e-002},{features:[[18,19,6,6,-1.],[18,22,6,3,2.]],tilted:0,threshold:-2.6409518904983997e-003,right_val:-1.3221520185470581e-001,left_val:1.1159580200910568e-001},{features:[[11,22,1,2,-1.],[11,23,1,1,2.]],tilted:0,threshold:-1.2848649930674583e-004,right_val:1.2487880140542984e-001,left_val:-2.5748521089553833e-001},{features:[[16,19,9,6,-1.],[16,22,9,3,2.]],tilted:0,threshold:-2.7002869173884392e-002,right_val:2.2851640358567238e-002,left_val:-2.1309000253677368e-001},{features:[[5,23,14,2,-1.],[5,24,14,1,2.]],tilted:0,threshold:-5.5548627860844135e-003,right_val:-1.2400159984827042e-001,left_val:3.4896078705787659e-001},{features:[[2,0,21,2,-1.],[2,1,21,1,2.]],tilted:0,threshold:4.3782647699117661e-003,right_val:2.1142059564590454e-001,left_val:-1.5955279767513275e-001},{features:[[0,14,17,3,-1.],[0,15,17,1,3.]],tilted:0,threshold:5.0675170496106148e-003,right_val:-6.7377299070358276e-001,left_val:5.1273059099912643e-002},{features:[[24,22,1,3,-1.],[24,23,1,1,3.]],tilted:0,threshold:3.8793749990873039e-004,right_val:-7.1641021966934204e-001,left_val:4.5997820794582367e-002},{features:[[1,15,1,10,-1.],[1,20,1,5,2.]],tilted:0,threshold:-1.4580220449715853e-003,right_val:-1.4839789271354675e-001,left_val:2.1615679562091827e-001},{features:[[7,1,11,24,-1.],[7,13,11,12,2.]],tilted:0,threshold:2.4079500138759613e-001,right_val:3.0170598626136780e-001,left_val:-1.1823660135269165e-001},{features:[[8,0,9,24,-1.],[8,12,9,12,2.]],tilted:0,threshold:-1.8808209896087646e-001,right_val:-1.3705970346927643e-001,left_val:3.1144750118255615e-001},{features:[[24,20,1,4,-1.],[24,22,1,2,2.]],tilted:0,threshold:-7.0596951991319656e-004,right_val:8.5756696760654449e-002,left_val:-4.3143850564956665e-001},{features:[[1,8,4,8,-1.],[1,8,2,4,2.],[3,12,2,4,2.]],tilted:0,threshold:7.6330509036779404e-003,right_val:4.0618151426315308e-001,left_val:-8.5229426622390747e-002},{features:[[22,23,3,2,-1.],[23,23,1,2,3.]],tilted:0,threshold:-5.4063898278400302e-004,right_val:5.3362339735031128e-002,left_val:-2.7844938635826111e-001},{features:[[0,8,1,10,-1.],[0,13,1,5,2.]],tilted:0,threshold:8.0850580707192421e-004,right_val:2.2427199780941010e-001,left_val:-1.5673060715198517e-001},{features:[[24,9,1,16,-1.],[24,13,1,8,2.]],tilted:0,threshold:-9.0161375701427460e-003,right_val:2.5498120114207268e-002,left_val:-7.6493132114410400e-001},{features:[[0,9,1,16,-1.],[0,13,1,8,2.]],tilted:0,threshold:5.7115959934890270e-003,right_val:-6.1655932664871216e-001,left_val:6.0737568885087967e-002}],threshold:-1.2197940349578857e+000},{simpleClassifiers:[{features:[[5,21,15,3,-1.],[10,21,5,3,3.]],tilted:0,threshold:1.8004509806632996e-001,right_val:-1.2683170166015625e+003,left_val:7.1775932156015188e-005},{features:[[3,23,22,2,-1.],[3,24,22,1,2.]],tilted:0,threshold:-3.2704269979149103e-003,right_val:-2.1053729951381683e-001,left_val:2.1751649677753448e-001},{features:[[3,12,2,6,-1.],[3,12,1,3,2.],[4,15,1,3,2.]],tilted:0,threshold:2.8901069890707731e-003,right_val:4.4793319702148438e-001,left_val:-9.4649657607078552e-002},{features:[[1,0,24,25,-1.],[7,0,12,25,2.]],tilted:0,threshold:2.6834228634834290e-001,right_val:1.3912549614906311e-001,left_val:-3.4015381336212158e-001},{features:[[4,9,2,6,-1.],[4,9,1,3,2.],[5,12,1,3,2.]],tilted:0,threshold:-2.9544678982347250e-003,right_val:-8.2894280552864075e-002,left_val:4.5975801348686218e-001},{features:[[5,19,19,6,-1.],[5,22,19,3,2.]],tilted:0,threshold:-8.4115490317344666e-002,right_val:6.5024472773075104e-002,left_val:-2.7309590578079224e-001},{features:[[4,9,2,6,-1.],[4,9,1,3,2.],[5,12,1,3,2.]],tilted:0,threshold:2.6462629903107882e-003,right_val:4.3064919114112854e-001,left_val:-8.5304662585258484e-002},{features:[[7,11,18,9,-1.],[13,14,6,3,9.]],tilted:0,threshold:2.3374849557876587e-001,right_val:-7.0049768686294556e-001,left_val:3.1148020178079605e-002},{features:[[0,0,24,1,-1.],[12,0,12,1,2.]],tilted:0,threshold:1.3991080224514008e-002,right_val:-3.8017541170120239e-001,left_val:6.3895016908645630e-002},{features:[[7,11,18,6,-1.],[13,13,6,2,9.]],tilted:0,threshold:1.5294119715690613e-002,right_val:8.8719643652439117e-002,left_val:-1.3300269842147827e-001},{features:[[10,12,3,2,-1.],[11,12,1,2,3.]],tilted:0,threshold:1.3851210242137313e-003,right_val:3.4786149859428406e-001,left_val:-8.3899021148681641e-002},{features:[[11,11,4,3,-1.],[12,11,2,3,2.]],tilted:0,threshold:4.0411897934973240e-003,right_val:3.8513410091400146e-001,left_val:-9.6694447100162506e-002},{features:[[10,11,4,3,-1.],[11,11,2,3,2.]],tilted:0,threshold:-1.5105110360309482e-003,right_val:-1.4276629686355591e-001,left_val:2.7030730247497559e-001},{features:[[7,24,12,1,-1.],[10,24,6,1,2.]],tilted:0,threshold:1.1216199956834316e-002,right_val:-7.4331712722778320e-001,left_val:5.2318520843982697e-002},{features:[[0,0,2,4,-1.],[0,1,2,2,2.]],tilted:0,threshold:4.6090059913694859e-004,right_val:-4.4167301058769226e-001,left_val:6.1226818710565567e-002},{features:[[4,9,18,9,-1.],[10,12,6,3,9.]],tilted:0,threshold:2.4240539968013763e-001,right_val:-8.2463300228118896e-001,left_val:3.5296630114316940e-002},{features:[[0,0,3,4,-1.],[0,1,3,2,2.]],tilted:0,threshold:-6.0484587447717786e-004,right_val:7.1387499570846558e-002,left_val:-4.0272709727287292e-001},{features:[[10,0,15,25,-1.],[15,0,5,25,3.]],tilted:0,threshold:3.5710370540618896e-001,right_val:-6.8163007497787476e-001,left_val:1.8752589821815491e-002},{features:[[0,8,16,9,-1.],[4,8,8,9,2.]],tilted:0,threshold:1.1522459983825684e-001,right_val:-6.7330968379974365e-001,left_val:4.6177390962839127e-002},{features:[[16,0,8,6,-1.],[16,3,8,3,2.]],tilted:0,threshold:3.8151650223881006e-003,right_val:8.8695816695690155e-002,left_val:-1.2972660362720490e-001},{features:[[0,20,21,2,-1.],[0,21,21,1,2.]],tilted:0,threshold:1.3831140240654349e-003,right_val:-3.3529379963874817e-001,left_val:9.5345683395862579e-002},{features:[[14,22,1,2,-1.],[14,22,1,1,2.]],tilted:1,threshold:5.1254231948405504e-004,right_val:-2.7034878730773926e-001,left_val:1.0987920314073563e-001},{features:[[0,0,11,12,-1.],[0,4,11,4,3.]],tilted:0,threshold:6.1746072024106979e-003,right_val:1.4264079928398132e-001,left_val:-2.1200719475746155e-001},{features:[[8,0,10,15,-1.],[8,5,10,5,3.]],tilted:0,threshold:1.0676769912242889e-001,right_val:-7.0405578613281250e-001,left_val:4.1373148560523987e-002},{features:[[4,24,12,1,-1.],[7,24,6,1,2.]],tilted:0,threshold:9.7706951200962067e-003,right_val:-6.3800191879272461e-001,left_val:4.0702451020479202e-002},{features:[[12,6,2,10,-1.],[13,6,1,5,2.],[12,11,1,5,2.]],tilted:0,threshold:2.8201229870319366e-003,right_val:2.6788440346717834e-001,left_val:-9.4522736966609955e-002},{features:[[0,22,1,3,-1.],[0,23,1,1,3.]],tilted:0,threshold:4.1142830741591752e-004,right_val:-6.3001567125320435e-001,left_val:4.7475989907979965e-002},{features:[[23,10,2,8,-1.],[23,14,2,4,2.]],tilted:0,threshold:1.5934780240058899e-003,right_val:1.6400060057640076e-001,left_val:-1.0703609883785248e-001},{features:[[0,0,24,1,-1.],[12,0,12,1,2.]],tilted:0,threshold:-1.1865469627082348e-002,right_val:8.3961293101310730e-002,left_val:-3.5861191153526306e-001},{features:[[23,0,2,25,-1.],[23,0,1,25,2.]],tilted:0,threshold:4.1225277818739414e-003,right_val:1.4402189850807190e-001,left_val:-2.3882789909839630e-001},{features:[[1,3,20,9,-1.],[11,3,10,9,2.]],tilted:0,threshold:-1.3517889380455017e-001,right_val:-6.7431576550006866e-002,left_val:4.7490730881690979e-001},{features:[[14,8,2,8,-1.],[15,8,1,4,2.],[14,12,1,4,2.]],tilted:0,threshold:2.7560358867049217e-003,right_val:2.9079490900039673e-001,left_val:-7.1827188134193420e-002},{features:[[10,2,5,4,-1.],[10,4,5,2,2.]],tilted:0,threshold:-4.2972611263394356e-003,right_val:5.6816298514604568e-002,left_val:-5.5687338113784790e-001},{features:[[14,0,2,3,-1.],[14,0,1,3,2.]],tilted:1,threshold:-1.2103000335628167e-004,right_val:1.1837910115718842e-001,left_val:-1.3359540700912476e-001},{features:[[11,3,2,14,-1.],[11,3,1,7,2.],[12,10,1,7,2.]],tilted:0,threshold:-2.4500500876456499e-003,right_val:-1.2817199528217316e-001,left_val:2.5945881009101868e-001},{features:[[23,10,2,8,-1.],[23,14,2,4,2.]],tilted:0,threshold:-1.7446579877287149e-003,right_val:-1.3044109940528870e-001,left_val:2.6169461011886597e-001},{features:[[10,23,1,2,-1.],[10,24,1,1,2.]],tilted:0,threshold:-1.6035139560699463e-004,right_val:1.2862069904804230e-001,left_val:-2.4382220208644867e-001},{features:[[9,19,10,6,-1.],[9,21,10,2,3.]],tilted:0,threshold:1.8494970572646707e-004,right_val:1.1913470178842545e-001,left_val:-2.3383130133152008e-001},{features:[[3,0,19,3,-1.],[3,1,19,1,3.]],tilted:0,threshold:2.8866168577224016e-004,right_val:1.5361200273036957e-001,left_val:-2.0316019654273987e-001},{features:[[24,0,1,16,-1.],[24,8,1,8,2.]],tilted:0,threshold:1.1300699785351753e-002,right_val:-7.8750622272491455e-001,left_val:6.2957696616649628e-002},{features:[[7,4,11,3,-1.],[7,5,11,1,3.]],tilted:0,threshold:5.8404598385095596e-003,right_val:-8.5410207509994507e-001,left_val:1.7734849825501442e-002},{features:[[23,0,2,24,-1.],[24,0,1,12,2.],[23,12,1,12,2.]],tilted:0,threshold:-8.3003882318735123e-003,right_val:-4.5239541679620743e-002,left_val:2.2870020568370819e-001},{features:[[5,5,15,3,-1.],[10,5,5,3,3.]],tilted:0,threshold:1.0016419691964984e-003,right_val:9.6414111554622650e-002,left_val:-2.9350730776786804e-001},{features:[[23,0,2,25,-1.],[23,0,1,25,2.]],tilted:0,threshold:-1.0042509995400906e-002,right_val:4.5914249494671822e-003,left_val:-5.9852880239486694e-001},{features:[[0,0,2,25,-1.],[1,0,1,25,2.]],tilted:0,threshold:4.0912739932537079e-003,right_val:1.2923860549926758e-001,left_val:-2.1593970060348511e-001},{features:[[23,7,2,3,-1.],[23,7,1,3,2.]],tilted:0,threshold:5.0562847172841430e-004,right_val:-2.5665798783302307e-001,left_val:1.5741920471191406e-001},{features:[[0,7,2,3,-1.],[1,7,1,3,2.]],tilted:0,threshold:5.2078161388635635e-004,right_val:-2.3445880413055420e-001,left_val:1.4819410443305969e-001},{features:[[23,8,2,1,-1.],[23,8,1,1,2.]],tilted:0,threshold:1.6813799738883972e-003,right_val:4.9866899847984314e-001,left_val:-6.6810980439186096e-002},{features:[[0,8,2,1,-1.],[1,8,1,1,2.]],tilted:0,threshold:1.4866109704598784e-003,right_val:4.2053240537643433e-001,left_val:-6.4803972840309143e-002},{features:[[12,6,2,12,-1.],[13,6,1,6,2.],[12,12,1,6,2.]],tilted:0,threshold:-2.1427311003208160e-003,right_val:-9.4888381659984589e-002,left_val:2.1503530442714691e-001},{features:[[1,19,15,3,-1.],[6,19,5,3,3.]],tilted:0,threshold:1.2026890181005001e-002,right_val:1.6060090065002441e-001,left_val:-1.7491519451141357e-001},{features:[[22,23,3,2,-1.],[23,23,1,2,3.]],tilted:0,threshold:5.4962979629635811e-004,right_val:-3.6075818538665771e-001,left_val:7.9216390848159790e-002}],threshold:-1.1867749691009521e+000},{simpleClassifiers:[{features:[[10,13,5,9,-1.],[10,16,5,3,3.]],tilted:0,threshold:2.0191150251775980e-003,right_val:1.7960040271282196e-001,left_val:-2.1191939711570740e-001},{features:[[13,12,5,8,-1.],[11,14,5,4,2.]],tilted:1,threshold:2.5026449002325535e-003,right_val:7.0980481803417206e-002,left_val:-1.2992329895496368e-001},{features:[[10,0,5,20,-1.],[10,10,5,10,2.]],tilted:0,threshold:-5.3158570080995560e-002,right_val:-1.7133300006389618e-001,left_val:2.7662891149520874e-001},{features:[[12,16,3,8,-1.],[12,20,3,4,2.]],tilted:0,threshold:1.1209100193809718e-005,right_val:2.5325238704681396e-001,left_val:-1.4314560592174530e-001},{features:[[8,2,8,20,-1.],[8,7,8,10,2.]],tilted:0,threshold:-7.1482710540294647e-002,right_val:5.4300498217344284e-002,left_val:-6.9515037536621094e-001},{features:[[8,19,10,4,-1.],[8,21,10,2,2.]],tilted:0,threshold:2.8659540694206953e-003,right_val:-2.9052281379699707e-001,left_val:4.6016551554203033e-002},{features:[[9,17,3,6,-1.],[9,20,3,3,2.]],tilted:0,threshold:1.9679629986057989e-005,right_val:2.0140969753265381e-001,left_val:-1.7965799570083618e-001},{features:[[0,23,25,2,-1.],[0,24,25,1,2.]],tilted:0,threshold:-5.2277408540248871e-003,right_val:-1.6386799514293671e-001,left_val:2.5270029902458191e-001},{features:[[1,7,2,6,-1.],[1,7,1,3,2.],[2,10,1,3,2.]],tilted:0,threshold:3.0542609747499228e-003,right_val:5.0366252660751343e-001,left_val:-7.1575798094272614e-002},{features:[[24,22,1,2,-1.],[24,23,1,1,2.]],tilted:0,threshold:-2.9728360823355615e-004,right_val:5.1399130374193192e-002,left_val:-5.2938801050186157e-001},{features:[[0,11,4,3,-1.],[2,11,2,3,2.]],tilted:0,threshold:-1.0779739823192358e-003,right_val:-9.3900568783283234e-002,left_val:3.7530121207237244e-001},{features:[[24,22,1,2,-1.],[24,23,1,1,2.]],tilted:0,threshold:-2.2623709810432047e-005,right_val:-1.1134230345487595e-001,left_val:1.6981379687786102e-001},{features:[[0,22,1,2,-1.],[0,23,1,1,2.]],tilted:0,threshold:-2.6898880605585873e-004,right_val:6.3903756439685822e-002,left_val:-5.2503097057342529e-001},{features:[[4,0,17,2,-1.],[4,1,17,1,2.]],tilted:0,threshold:4.3080640025436878e-003,right_val:2.1191169321537018e-001,left_val:-1.6974890232086182e-001},{features:[[0,1,1,2,-1.],[0,2,1,1,2.]],tilted:0,threshold:2.8652910259552300e-004,right_val:-5.3953951597213745e-001,left_val:6.9832988083362579e-002},{features:[[17,21,8,4,-1.],[17,23,8,2,2.]],tilted:0,threshold:-1.8647660035640001e-003,right_val:-1.0709100216627121e-001,left_val:7.9187482595443726e-002},{features:[[0,0,2,24,-1.],[1,0,1,24,2.]],tilted:0,threshold:1.0851949919015169e-003,right_val:8.5343867540359497e-002,left_val:-3.9847779273986816e-001},{features:[[22,20,2,2,-1.],[22,20,1,2,2.]],tilted:0,threshold:4.0944988722912967e-004,right_val:-1.4176020026206970e-001,left_val:5.4056350141763687e-002},{features:[[1,20,2,2,-1.],[2,20,1,2,2.]],tilted:0,threshold:4.2084971209987998e-004,right_val:-2.5249311327934265e-001,left_val:1.3462479412555695e-001},{features:[[21,20,4,1,-1.],[21,20,2,1,2.]],tilted:1,threshold:1.6839290037751198e-004,right_val:9.5340102910995483e-002,left_val:-2.2796970605850220e-001},{features:[[4,20,1,4,-1.],[4,20,1,2,2.]],tilted:1,threshold:1.4562309661414474e-004,right_val:1.2245950102806091e-001,left_val:-3.1346321105957031e-001},{features:[[11,14,3,3,-1.],[12,15,1,1,9.]],tilted:0,threshold:1.6215200303122401e-003,right_val:2.5915551185607910e-001,left_val:-1.2621709704399109e-001},{features:[[12,23,1,2,-1.],[12,24,1,1,2.]],tilted:0,threshold:-3.3472100767539814e-005,right_val:1.6651690006256104e-001,left_val:-1.8671259284019470e-001},{features:[[12,8,2,8,-1.],[13,8,1,4,2.],[12,12,1,4,2.]],tilted:0,threshold:-2.5778179988265038e-003,right_val:-8.0635949969291687e-002,left_val:2.5478971004486084e-001},{features:[[1,5,18,9,-1.],[7,8,6,3,9.]],tilted:0,threshold:2.2081619501113892e-001,right_val:-6.6497838497161865e-001,left_val:5.3643438965082169e-002},{features:[[23,10,2,2,-1.],[23,10,1,2,2.]],tilted:0,threshold:3.1700119143351912e-004,right_val:-1.5417550504207611e-001,left_val:7.9098179936408997e-002},{features:[[0,0,1,16,-1.],[0,8,1,8,2.]],tilted:0,threshold:1.2999719940125942e-002,right_val:-8.1742262840270996e-001,left_val:3.6135278642177582e-002},{features:[[12,8,2,8,-1.],[13,8,1,4,2.],[12,12,1,4,2.]],tilted:0,threshold:1.3553650351241231e-003,right_val:1.7422780394554138e-001,left_val:-9.7845867276191711e-002},{features:[[5,17,15,2,-1.],[10,17,5,2,3.]],tilted:0,threshold:8.5435097571462393e-004,right_val:1.0333210229873657e-001,left_val:-2.8668859601020813e-001},{features:[[5,1,18,3,-1.],[11,2,6,1,9.]],tilted:0,threshold:1.9186370074748993e-002,right_val:1.4288300275802612e-001,left_val:-2.0520329475402832e-001},{features:[[12,0,1,2,-1.],[12,1,1,1,2.]],tilted:0,threshold:1.8162580090574920e-004,right_val:-2.5909510254859924e-001,left_val:1.3736839592456818e-001},{features:[[0,3,25,22,-1.],[0,14,25,11,2.]],tilted:0,threshold:1.9275680184364319e-001,right_val:2.1485829353332520e-001,left_val:-1.5659409761428833e-001},{features:[[1,2,15,3,-1.],[6,3,5,1,9.]],tilted:0,threshold:1.2056250125169754e-002,right_val:2.1334210038185120e-001,left_val:-2.2499039769172668e-001},{features:[[12,8,2,8,-1.],[13,8,1,4,2.],[12,12,1,4,2.]],tilted:0,threshold:-1.0883549693971872e-003,right_val:-7.4455857276916504e-002,left_val:1.2353979796171188e-001},{features:[[11,8,2,8,-1.],[11,8,1,4,2.],[12,12,1,4,2.]],tilted:0,threshold:-2.4255490861833096e-003,right_val:-9.9332652986049652e-002,left_val:3.1007918715476990e-001},{features:[[14,2,1,18,-1.],[14,8,1,6,3.]],tilted:0,threshold:9.0482030063867569e-003,right_val:2.4705639481544495e-001,left_val:-8.5626669228076935e-002},{features:[[1,12,18,9,-1.],[7,15,6,3,9.]],tilted:0,threshold:2.3379500210285187e-001,right_val:-6.3548052310943604e-001,left_val:4.8708219081163406e-002},{features:[[7,3,12,3,-1.],[7,4,12,1,3.]],tilted:0,threshold:4.6182200312614441e-003,right_val:-6.5930128097534180e-001,left_val:3.2066959887742996e-002},{features:[[8,1,9,1,-1.],[11,1,3,1,3.]],tilted:0,threshold:7.6137272117193788e-005,right_val:1.1577039957046509e-001,left_val:-2.3533040285110474e-001},{features:[[5,0,15,1,-1.],[10,0,5,1,3.]],tilted:0,threshold:1.7868179827928543e-002,right_val:-6.0223627090454102e-001,left_val:5.7103220373392105e-002},{features:[[8,9,2,8,-1.],[8,9,1,4,2.],[9,13,1,4,2.]],tilted:0,threshold:-2.1019289270043373e-003,right_val:-1.0575859993696213e-001,left_val:2.6925888657569885e-001},{features:[[15,9,2,6,-1.],[16,9,1,3,2.],[15,12,1,3,2.]],tilted:0,threshold:3.3772839233279228e-003,right_val:3.5539248585700989e-001,left_val:-5.3210329264402390e-002},{features:[[6,5,3,12,-1.],[7,9,1,4,9.]],tilted:0,threshold:1.0936450213193893e-002,right_val:2.4860809743404388e-001,left_val:-1.1338409781455994e-001},{features:[[5,11,15,3,-1.],[5,12,15,1,3.]],tilted:0,threshold:6.7958370782434940e-003,right_val:-9.6363908052444458e-001,left_val:3.0205719172954559e-002},{features:[[7,9,11,3,-1.],[7,10,11,1,3.]],tilted:0,threshold:4.3736519291996956e-003,right_val:-6.4715677499771118e-001,left_val:2.9778029769659042e-002},{features:[[16,21,9,4,-1.],[16,23,9,2,2.]],tilted:0,threshold:1.0398699901998043e-002,right_val:-3.6711278557777405e-001,left_val:4.1304989717900753e-003},{features:[[5,11,4,1,-1.],[6,11,2,1,2.]],tilted:0,threshold:-1.0460240300744772e-003,right_val:-8.5172623395919800e-002,left_val:2.8792479634284973e-001},{features:[[12,23,1,2,-1.],[12,24,1,1,2.]],tilted:0,threshold:3.9401830872520804e-004,right_val:-6.4034730195999146e-001,left_val:3.9254769682884216e-002},{features:[[0,21,9,4,-1.],[0,23,9,2,2.]],tilted:0,threshold:-2.0856719929724932e-003,right_val:-1.6981109976768494e-001,left_val:1.4763970673084259e-001},{features:[[23,10,2,3,-1.],[23,10,1,3,2.]],tilted:0,threshold:3.7645150441676378e-003,right_val:4.0955379605293274e-001,left_val:-6.3431486487388611e-002},{features:[[0,10,2,3,-1.],[1,10,1,3,2.]],tilted:0,threshold:4.8305589007213712e-004,right_val:-2.3883299529552460e-001,left_val:1.5586610138416290e-001},{features:[[22,0,2,12,-1.],[22,6,2,6,2.]],tilted:0,threshold:4.0211779996752739e-003,right_val:1.7619979381561279e-001,left_val:-1.2030039727687836e-001},{features:[[2,0,1,12,-1.],[2,6,1,6,2.]],tilted:0,threshold:2.5966949760913849e-003,right_val:2.4293899536132813e-001,left_val:-1.4575859904289246e-001},{features:[[22,4,3,6,-1.],[22,7,3,3,2.]],tilted:0,threshold:-8.9815730461850762e-004,right_val:-1.6364639997482300e-001,left_val:2.2666700184345245e-001},{features:[[0,4,3,6,-1.],[0,7,3,3,2.]],tilted:0,threshold:-6.2149699078872800e-004,right_val:-1.6018569469451904e-001,left_val:2.0900680124759674e-001},{features:[[1,1,23,4,-1.],[1,3,23,2,2.]],tilted:0,threshold:2.3780961055308580e-003,right_val:1.1902090162038803e-001,left_val:-2.4557930231094360e-001}],threshold:-1.1352620124816895e+000},{simpleClassifiers:[{features:[[0,1,24,23,-1.],[12,1,12,23,2.]],tilted:0,threshold:6.0245269536972046e-001,right_val:-7.8507578372955322e-001,left_val:5.2337121218442917e-002},{features:[[24,11,1,14,-1.],[24,18,1,7,2.]],tilted:0,threshold:6.6552129574120045e-003,right_val:-5.4219800233840942e-001,left_val:7.1143716573715210e-002},{features:[[5,19,15,6,-1.],[10,21,5,2,9.]],tilted:0,threshold:2.7373209595680237e-002,right_val:1.5262730419635773e-001,left_val:-2.2720469534397125e-001},{features:[[1,24,24,1,-1.],[1,24,12,1,2.]],tilted:0,threshold:1.3735990040004253e-002,right_val:-3.0287069082260132e-001,left_val:1.2475749850273132e-001},{features:[[1,4,1,12,-1.],[1,10,1,6,2.]],tilted:0,threshold:2.5980870705097914e-003,right_val:2.7191510796546936e-001,left_val:-1.2733310461044312e-001},{features:[[18,5,7,12,-1.],[18,11,7,6,2.]],tilted:0,threshold:-1.0497280210256577e-001,right_val:-1.9078690093010664e-003,left_val:-7.0821052789688110e-001},{features:[[0,1,7,24,-1.],[0,7,7,12,2.]],tilted:0,threshold:1.1283349990844727e-001,right_val:-7.8128588199615479e-001,left_val:4.2468018829822540e-002},{features:[[18,10,2,4,-1.],[19,10,1,2,2.],[18,12,1,2,2.]],tilted:0,threshold:1.7136579845100641e-003,right_val:4.2818519473075867e-001,left_val:-8.5178561508655548e-002},{features:[[5,10,2,4,-1.],[5,10,1,2,2.],[6,12,1,2,2.]],tilted:0,threshold:-1.2761510442942381e-003,right_val:-7.8054942190647125e-002,left_val:3.7203249335289001e-001},{features:[[18,10,2,4,-1.],[19,10,1,2,2.],[18,12,1,2,2.]],tilted:0,threshold:-1.6786810010671616e-003,right_val:-9.5365412533283234e-002,left_val:4.5170649886131287e-001},{features:[[5,10,2,4,-1.],[5,10,1,2,2.],[6,12,1,2,2.]],tilted:0,threshold:1.0452580172568560e-003,right_val:3.1057640910148621e-001,left_val:-1.0327780246734619e-001},{features:[[20,24,4,1,-1.],[20,24,2,1,2.]],tilted:0,threshold:-1.2748680310323834e-003,right_val:6.3396677374839783e-002,left_val:-5.9134918451309204e-001},{features:[[2,11,18,3,-1.],[8,11,6,3,3.]],tilted:0,threshold:-9.1730579733848572e-003,right_val:5.8642920106649399e-002,left_val:-5.1909697055816650e-001},{features:[[24,11,1,14,-1.],[24,18,1,7,2.]],tilted:0,threshold:-8.5946340113878250e-003,right_val:3.9074189960956573e-002,left_val:-6.7389839887619019e-001},{features:[[0,9,18,9,-1.],[6,12,6,3,9.]],tilted:0,threshold:1.7572590708732605e-001,right_val:-4.8357391357421875e-001,left_val:7.0220336318016052e-002},{features:[[24,11,1,14,-1.],[24,18,1,7,2.]],tilted:0,threshold:1.2705760309472680e-003,right_val:1.6797809302806854e-001,left_val:-1.1456940323114395e-001},{features:[[11,1,3,8,-1.],[11,5,3,4,2.]],tilted:0,threshold:-2.1443589503178373e-005,right_val:-1.7952880263328552e-001,left_val:2.1516430377960205e-001},{features:[[24,0,1,22,-1.],[24,11,1,11,2.]],tilted:0,threshold:1.9370870664715767e-002,right_val:-8.3156830072402954e-001,left_val:2.8284879401326180e-002},{features:[[0,0,1,22,-1.],[0,11,1,11,2.]],tilted:0,threshold:-2.0381100475788116e-002,right_val:2.6280429214239120e-002,left_val:-9.0958088636398315e-001},{features:[[0,0,25,12,-1.],[0,3,25,6,2.]],tilted:0,threshold:2.6016689836978912e-002,right_val:1.7443889379501343e-001,left_val:-2.0010340213775635e-001},{features:[[5,0,15,18,-1.],[5,9,15,9,2.]],tilted:0,threshold:1.0690639913082123e-001,right_val:2.2835870087146759e-001,left_val:-1.6266860067844391e-001},{features:[[1,15,23,10,-1.],[1,20,23,5,2.]],tilted:0,threshold:-3.4786250442266464e-002,right_val:-2.0116269588470459e-001,left_val:2.0793099701404572e-001},{features:[[10,22,1,2,-1.],[10,23,1,1,2.]],tilted:0,threshold:-1.9677329692058265e-004,right_val:1.1807250231504440e-001,left_val:-3.1131440401077271e-001},{features:[[20,24,4,1,-1.],[20,24,2,1,2.]],tilted:0,threshold:6.5192329930141568e-004,right_val:-1.7708389461040497e-001,left_val:8.2236677408218384e-002},{features:[[1,24,4,1,-1.],[3,24,2,1,2.]],tilted:0,threshold:-1.4959790278226137e-003,right_val:4.2847748845815659e-002,left_val:-7.1390831470489502e-001},{features:[[23,6,1,12,-1.],[23,12,1,6,2.]],tilted:0,threshold:2.7109330985695124e-003,right_val:2.0900200307369232e-001,left_val:-1.0781349986791611e-001},{features:[[0,5,1,20,-1.],[0,10,1,10,2.]],tilted:0,threshold:7.5823841616511345e-003,right_val:-5.6809967756271362e-001,left_val:5.3877390921115875e-002},{features:[[9,20,15,3,-1.],[14,21,5,1,9.]],tilted:0,threshold:1.0195979848504066e-002,right_val:1.4719660580158234e-001,left_val:-1.9075849652290344e-001},{features:[[1,20,15,3,-1.],[6,21,5,1,9.]],tilted:0,threshold:1.3070380315184593e-002,right_val:1.9392399489879608e-001,left_val:-2.1738119423389435e-001},{features:[[11,1,3,2,-1.],[11,2,3,1,2.]],tilted:0,threshold:2.6393428561277688e-004,right_val:-2.2604019939899445e-001,left_val:1.5437519550323486e-001},{features:[[7,0,10,6,-1.],[7,2,10,2,3.]],tilted:0,threshold:5.4196250857785344e-005,right_val:1.2521779537200928e-001,left_val:-2.8408589959144592e-001},{features:[[20,12,4,6,-1.],[22,12,2,3,2.],[20,15,2,3,2.]],tilted:0,threshold:-6.9367061369121075e-003,right_val:-6.5932586789131165e-002,left_val:4.2877939343452454e-001},{features:[[1,12,4,6,-1.],[1,12,2,3,2.],[3,15,2,3,2.]],tilted:0,threshold:-6.9427280686795712e-003,right_val:-7.1486473083496094e-002,left_val:4.7249019145965576e-001},{features:[[11,10,12,3,-1.],[11,11,12,1,3.]],tilted:0,threshold:5.5062561295926571e-003,right_val:-7.6667702198028564e-001,left_val:3.3114258199930191e-002},{features:[[0,7,1,10,-1.],[0,12,1,5,2.]],tilted:0,threshold:1.6204440034925938e-003,right_val:2.3542539775371552e-001,left_val:-1.1487250030040741e-001},{features:[[23,7,2,10,-1.],[23,12,2,5,2.]],tilted:0,threshold:-1.9016009755432606e-003,right_val:-1.3353340327739716e-001,left_val:2.0602910220623016e-001},{features:[[0,7,2,10,-1.],[0,12,2,5,2.]],tilted:0,threshold:-3.1080169137567282e-003,right_val:-1.5519270300865173e-001,left_val:2.9334270954132080e-001},{features:[[22,3,2,3,-1.],[22,3,1,3,2.]],tilted:0,threshold:2.5391200324520469e-005,right_val:8.8196061551570892e-002,left_val:-1.6706739366054535e-001},{features:[[1,3,2,3,-1.],[2,3,1,3,2.]],tilted:0,threshold:6.0073379427194595e-004,right_val:-2.3356419801712036e-001,left_val:1.3103710114955902e-001},{features:[[22,1,2,2,-1.],[22,1,2,1,2.]],tilted:1,threshold:1.8550510285422206e-003,right_val:-4.8561948537826538e-001,left_val:3.6863099783658981e-002},{features:[[0,0,8,8,-1.],[2,0,4,8,2.]],tilted:0,threshold:1.4426410198211670e-002,right_val:3.0212250351905823e-001,left_val:-1.0693179816007614e-001},{features:[[24,3,1,6,-1.],[24,5,1,2,3.]],tilted:0,threshold:7.1379961445927620e-004,right_val:-3.4755659103393555e-001,left_val:6.6108718514442444e-002},{features:[[0,1,1,9,-1.],[0,4,1,3,3.]],tilted:0,threshold:7.4721040436998010e-004,right_val:-2.9426920413970947e-001,left_val:9.3699723482131958e-002},{features:[[13,5,2,10,-1.],[14,5,1,5,2.],[13,10,1,5,2.]],tilted:0,threshold:-2.7122199535369873e-003,right_val:-1.0037600249052048e-001,left_val:2.5431159138679504e-001},{features:[[1,0,3,3,-1.],[2,1,1,1,9.]],tilted:0,threshold:1.3803270412608981e-003,right_val:-3.4946250915527344e-001,left_val:7.2880066931247711e-002},{features:[[24,3,1,8,-1.],[24,7,1,4,2.]],tilted:0,threshold:-5.0929130520671606e-004,right_val:-1.0336030274629593e-001,left_val:1.5379770100116730e-001},{features:[[6,5,11,3,-1.],[6,6,11,1,3.]],tilted:0,threshold:5.4643009789288044e-003,right_val:-7.4866658449172974e-001,left_val:3.4406248480081558e-002},{features:[[15,10,2,6,-1.],[16,10,1,3,2.],[15,13,1,3,2.]],tilted:0,threshold:-1.5927649801596999e-003,right_val:-1.0934740304946899e-001,left_val:2.9663398861885071e-001},{features:[[5,24,12,1,-1.],[9,24,4,1,3.]],tilted:0,threshold:1.4028839766979218e-002,right_val:-6.6694360971450806e-001,left_val:3.9743378758430481e-002},{features:[[5,17,15,1,-1.],[10,17,5,1,3.]],tilted:0,threshold:2.7329521253705025e-004,right_val:8.0982193350791931e-002,left_val:-3.1862759590148926e-001},{features:[[2,22,10,2,-1.],[2,22,5,1,2.],[7,23,5,1,2.]],tilted:0,threshold:2.9240400181151927e-004,right_val:2.0133419334888458e-001,left_val:-1.2847329676151276e-001}],threshold:-1.0871520042419434e+000},{simpleClassifiers:[{features:[[0,11,1,14,-1.],[0,18,1,7,2.]],tilted:0,threshold:8.0609228461980820e-003,right_val:-6.0697358846664429e-001,left_val:5.8666739612817764e-002},{features:[[23,13,1,10,-1.],[23,18,1,5,2.]],tilted:0,threshold:-1.5501689631491899e-003,right_val:-4.8750329762697220e-002,left_val:1.7384129762649536e-001},{features:[[1,13,1,10,-1.],[1,18,1,5,2.]],tilted:0,threshold:1.2496999697759748e-003,right_val:3.3550319075584412e-001,left_val:-1.4429050683975220e-001},{features:[[23,3,1,20,-1.],[23,8,1,10,2.]],tilted:0,threshold:-4.8539130948483944e-003,right_val:-8.0262362957000732e-002,left_val:1.8641370534896851e-001},{features:[[1,3,1,20,-1.],[1,8,1,10,2.]],tilted:0,threshold:4.7115739434957504e-003,right_val:3.3180761337280273e-001,left_val:-1.5105469524860382e-001},{features:[[15,10,2,6,-1.],[16,10,1,3,2.],[15,13,1,3,2.]],tilted:0,threshold:1.7103999853134155e-003,right_val:2.3733739554882050e-001,left_val:-8.0037981271743774e-002},{features:[[2,3,10,18,-1.],[7,3,5,18,2.]],tilted:0,threshold:3.5812970250844955e-002,right_val:9.4173669815063477e-002,left_val:-3.5066539049148560e-001},{features:[[5,3,15,18,-1.],[5,9,15,6,3.]],tilted:0,threshold:-1.4962269924581051e-002,right_val:-1.7400909960269928e-001,left_val:2.0005929470062256e-001},{features:[[8,10,2,6,-1.],[8,10,1,3,2.],[9,13,1,3,2.]],tilted:0,threshold:2.7363249100744724e-003,right_val:3.8100358843803406e-001,left_val:-9.7571246325969696e-002},{features:[[20,5,4,8,-1.],[22,5,2,4,2.],[20,9,2,4,2.]],tilted:0,threshold:7.6132859103381634e-003,right_val:2.6586711406707764e-001,left_val:-5.4448898881673813e-002},{features:[[3,13,6,12,-1.],[3,19,6,6,2.]],tilted:0,threshold:-1.7225209623575211e-002,right_val:-1.2890140712261200e-001,left_val:2.4964700639247894e-001},{features:[[12,17,3,6,-1.],[12,20,3,3,2.]],tilted:0,threshold:-3.5690729419002309e-005,right_val:1.1350779980421066e-001,left_val:-1.3402619957923889e-001},{features:[[0,9,2,4,-1.],[0,10,2,2,2.]],tilted:0,threshold:5.5417261319234967e-004,right_val:-4.1190868616104126e-001,left_val:7.9089917242527008e-002},{features:[[19,1,6,20,-1.],[21,1,2,20,3.]],tilted:0,threshold:5.3478521294891834e-003,right_val:1.0175509750843048e-001,left_val:-9.6101686358451843e-002},{features:[[0,1,6,20,-1.],[2,1,2,20,3.]],tilted:0,threshold:7.4408110231161118e-003,right_val:2.0994450151920319e-001,left_val:-1.4914409816265106e-001},{features:[[24,13,1,2,-1.],[24,13,1,1,2.]],tilted:1,threshold:-4.4247441110201180e-004,right_val:9.5609091222286224e-002,left_val:-1.4710159599781036e-001},{features:[[1,13,2,1,-1.],[1,13,1,1,2.]],tilted:1,threshold:-4.5897331438027322e-004,right_val:1.4493109285831451e-001,left_val:-2.4636960029602051e-001},{features:[[22,14,3,10,-1.],[23,14,1,10,3.]],tilted:0,threshold:1.4815660193562508e-002,right_val:-3.6167469620704651e-001,left_val:1.3317920267581940e-002},{features:[[0,14,3,10,-1.],[1,14,1,10,3.]],tilted:0,threshold:2.4954939362942241e-005,right_val:1.8010890483856201e-001,left_val:-1.7566919326782227e-001},{features:[[1,6,24,12,-1.],[7,6,12,12,2.]],tilted:0,threshold:4.9202781170606613e-002,right_val:4.5933071523904800e-002,left_val:-5.4308730363845825e-001},{features:[[0,0,25,2,-1.],[0,1,25,1,2.]],tilted:0,threshold:5.7320448104292154e-004,right_val:9.2909567058086395e-002,left_val:-3.1106668710708618e-001},{features:[[14,1,1,2,-1.],[14,2,1,1,2.]],tilted:0,threshold:2.3219949798658490e-004,right_val:-2.1587720513343811e-001,left_val:7.1580216288566589e-002},{features:[[5,8,2,6,-1.],[5,8,1,3,2.],[6,11,1,3,2.]],tilted:0,threshold:1.8309779698029160e-003,right_val:3.0750191211700439e-001,left_val:-9.6833512187004089e-002},{features:[[19,22,2,1,-1.],[19,22,1,1,2.]],tilted:1,threshold:-1.4543849974870682e-003,right_val:1.9532160833477974e-002,left_val:-4.4618600606918335e-001},{features:[[6,22,1,2,-1.],[6,22,1,1,2.]],tilted:1,threshold:-1.0844180360436440e-003,right_val:4.4560171663761139e-002,left_val:-6.3614559173583984e-001},{features:[[14,1,1,2,-1.],[14,2,1,1,2.]],tilted:0,threshold:-1.0226800077361986e-004,right_val:4.7297880053520203e-002,left_val:-1.9193719327449799e-001},{features:[[10,1,1,2,-1.],[10,2,1,1,2.]],tilted:0,threshold:3.4586260881042108e-005,right_val:-1.8605320155620575e-001,left_val:1.6979439556598663e-001},{features:[[21,8,4,8,-1.],[23,8,2,4,2.],[21,12,2,4,2.]],tilted:0,threshold:9.2637836933135986e-003,right_val:4.3833279609680176e-001,left_val:-6.7655943334102631e-002},{features:[[0,8,4,8,-1.],[0,8,2,4,2.],[2,12,2,4,2.]],tilted:0,threshold:9.4706043601036072e-003,right_val:4.5724090933799744e-001,left_val:-7.1250461041927338e-002},{features:[[10,0,12,1,-1.],[14,0,4,1,3.]],tilted:0,threshold:1.3785040006041527e-002,right_val:-5.7532930374145508e-001,left_val:3.3277660608291626e-002},{features:[[5,0,12,1,-1.],[9,0,4,1,3.]],tilted:0,threshold:1.1125699616968632e-002,right_val:-5.1709657907485962e-001,left_val:6.2793843448162079e-002},{features:[[16,1,9,6,-1.],[16,4,9,3,2.]],tilted:0,threshold:1.3041479978710413e-003,right_val:7.9484373331069946e-002,left_val:-1.2779800593852997e-001},{features:[[0,7,22,11,-1.],[11,7,11,11,2.]],tilted:0,threshold:-7.1009919047355652e-002,right_val:-1.0819730162620544e-001,left_val:3.0970141291618347e-001},{features:[[5,2,15,6,-1.],[10,4,5,2,9.]],tilted:0,threshold:2.3755250498652458e-002,right_val:1.5606459975242615e-001,left_val:-2.1370269358158112e-001},{features:[[9,2,2,18,-1.],[9,2,1,9,2.],[10,11,1,9,2.]],tilted:0,threshold:4.2583458125591278e-003,right_val:3.0855301022529602e-001,left_val:-9.9179089069366455e-002},{features:[[14,8,2,8,-1.],[15,8,1,4,2.],[14,12,1,4,2.]],tilted:0,threshold:-2.9643340967595577e-003,right_val:-7.8191861510276794e-002,left_val:3.2569590210914612e-001},{features:[[9,8,2,8,-1.],[9,8,1,4,2.],[10,12,1,4,2.]],tilted:0,threshold:-2.6034889742732048e-003,right_val:-1.1317720264196396e-001,left_val:3.4033051133155823e-001},{features:[[11,0,12,1,-1.],[14,0,6,1,2.]],tilted:0,threshold:1.0820809984579682e-003,right_val:1.7554299533367157e-001,left_val:-1.2465389817953110e-001},{features:[[8,5,6,20,-1.],[8,15,6,10,2.]],tilted:0,threshold:5.7707168161869049e-002,right_val:2.2689869999885559e-001,left_val:-1.4793549478054047e-001},{features:[[1,14,24,6,-1.],[1,17,24,3,2.]],tilted:0,threshold:4.4605578295886517e-003,right_val:-1.9520080089569092e-001,left_val:1.7826089262962341e-001},{features:[[8,19,9,4,-1.],[8,20,9,2,2.]],tilted:0,threshold:-1.0610480094328523e-003,right_val:8.2996547222137451e-002,left_val:-3.7853738665580750e-001},{features:[[14,21,1,2,-1.],[14,22,1,1,2.]],tilted:0,threshold:-3.4135719033656642e-005,right_val:9.1380283236503601e-002,left_val:-1.3351039588451385e-001},{features:[[7,19,11,2,-1.],[7,20,11,1,2.]],tilted:0,threshold:1.6886419616639614e-003,right_val:-4.0701639652252197e-001,left_val:7.7249847352504730e-002},{features:[[5,22,15,3,-1.],[5,23,15,1,3.]],tilted:0,threshold:3.5142740234732628e-003,right_val:3.5281270742416382e-001,left_val:-9.5770522952079773e-002},{features:[[0,24,4,1,-1.],[2,24,2,1,2.]],tilted:0,threshold:2.3527929442934692e-005,right_val:1.2634140253067017e-001,left_val:-2.4744519591331482e-001},{features:[[23,20,2,1,-1.],[23,20,1,1,2.]],tilted:1,threshold:-1.2832640204578638e-003,right_val:2.2744800895452499e-002,left_val:-6.1840718984603882e-001},{features:[[9,9,2,8,-1.],[9,9,1,4,2.],[10,13,1,4,2.]],tilted:0,threshold:1.7268180381506681e-003,right_val:2.8422999382019043e-001,left_val:-1.1576849967241287e-001},{features:[[12,5,2,14,-1.],[13,5,1,7,2.],[12,12,1,7,2.]],tilted:0,threshold:-2.8906469233334064e-003,right_val:-7.6792337000370026e-002,left_val:1.6367140412330627e-001},{features:[[11,4,8,7,-1.],[13,6,4,7,2.]],tilted:1,threshold:-4.6315401792526245e-002,right_val:4.0850590914487839e-002,left_val:-7.4018758535385132e-001},{features:[[24,23,1,2,-1.],[24,24,1,1,2.]],tilted:0,threshold:5.7796889450401068e-004,right_val:-6.3632518053054810e-001,left_val:2.2493729367852211e-002},{features:[[0,23,1,2,-1.],[0,24,1,1,2.]],tilted:0,threshold:2.3074440832715482e-005,right_val:1.9955199956893921e-001,left_val:-1.6102099418640137e-001},{features:[[23,20,2,1,-1.],[23,20,1,1,2.]],tilted:1,threshold:3.7793751107528806e-004,right_val:-1.3862569630146027e-001,left_val:8.1283740699291229e-002},{features:[[2,20,1,2,-1.],[2,20,1,1,2.]],tilted:1,threshold:3.8195648812688887e-004,right_val:-2.4290829896926880e-001,left_val:1.3359279930591583e-001},{features:[[16,1,8,6,-1.],[16,4,8,3,2.]],tilted:0,threshold:5.8516408316791058e-003,right_val:1.1935660243034363e-001,left_val:-1.1702840030193329e-001},{features:[[0,23,24,1,-1.],[8,23,8,1,3.]],tilted:0,threshold:-6.6102901473641396e-003,right_val:-6.5725468099117279e-002,left_val:4.5771899819374084e-001},{features:[[6,22,15,1,-1.],[11,22,5,1,3.]],tilted:0,threshold:1.5774279600009322e-003,right_val:9.2294909060001373e-002,left_val:-1.7396670579910278e-001},{features:[[10,8,4,4,-1.],[11,8,2,4,2.]],tilted:0,threshold:-3.3255841117352247e-003,right_val:-9.2243947088718414e-002,left_val:3.4227269887924194e-001},{features:[[4,9,18,3,-1.],[4,10,18,1,3.]],tilted:0,threshold:7.9220151528716087e-003,right_val:-9.0017801523208618e-001,left_val:3.3358339220285416e-002},{features:[[6,12,2,1,-1.],[7,12,1,1,2.]],tilted:0,threshold:-1.5816869563423097e-004,right_val:-1.1450929939746857e-001,left_val:2.8342399001121521e-001},{features:[[12,1,1,2,-1.],[12,2,1,1,2.]],tilted:0,threshold:3.4481548937037587e-005,right_val:-1.8168149888515472e-001,left_val:1.6481010615825653e-001},{features:[[7,23,8,1,-1.],[9,23,4,1,2.]],tilted:0,threshold:2.0665400370489806e-005,right_val:1.3373629748821259e-001,left_val:-2.1995100378990173e-001},{features:[[12,15,1,10,-1.],[12,20,1,5,2.]],tilted:0,threshold:-1.1080419644713402e-002,right_val:-6.6116742789745331e-002,left_val:4.8246449232101440e-001},{features:[[1,17,11,8,-1.],[1,19,11,4,2.]],tilted:0,threshold:-1.7540570115670562e-003,right_val:9.9385917186737061e-002,left_val:-3.2195270061492920e-001},{features:[[5,5,15,18,-1.],[5,11,15,6,3.]],tilted:0,threshold:-4.3996911495923996e-002,right_val:-1.2036679685115814e-001,left_val:2.2565670311450958e-001},{features:[[1,1,8,6,-1.],[1,4,8,3,2.]],tilted:0,threshold:2.7804148849099874e-003,right_val:1.6074460744857788e-001,left_val:-1.7865939438343048e-001},{features:[[24,3,1,10,-1.],[24,8,1,5,2.]],tilted:0,threshold:-6.3753691501915455e-003,right_val:3.9249900728464127e-002,left_val:-6.4006751775741577e-001}],threshold:-1.1262429952621460e+000},{simpleClassifiers:[{features:[[2,10,6,2,-1.],[4,10,2,2,3.]],tilted:0,threshold:-5.5710230953991413e-003,right_val:-1.1429090052843094e-001,left_val:3.6355179548263550e-001},{features:[[10,0,5,18,-1.],[10,9,5,9,2.]],tilted:0,threshold:-4.2533349245786667e-002,right_val:-1.4519970118999481e-001,left_val:2.9995280504226685e-001},{features:[[4,5,17,20,-1.],[4,15,17,10,2.]],tilted:0,threshold:1.8632240593433380e-001,right_val:3.0858990550041199e-001,left_val:-1.7916500568389893e-001},{features:[[10,3,6,9,-1.],[10,6,6,3,3.]],tilted:0,threshold:7.9207762610167265e-004,right_val:1.5244559943675995e-001,left_val:-2.2290030121803284e-001},{features:[[7,0,11,18,-1.],[7,9,11,9,2.]],tilted:0,threshold:3.7020680308341980e-001,right_val:1.8848129882812500e+003,left_val:4.9322400242090225e-002},{features:[[21,9,2,4,-1.],[22,9,1,2,2.],[21,11,1,2,2.]],tilted:0,threshold:-1.4178600395098329e-003,right_val:-1.0939670354127884e-001,left_val:3.7516620755195618e-001},{features:[[9,4,6,6,-1.],[9,6,6,2,3.]],tilted:0,threshold:9.9071431905031204e-003,right_val:-5.6801307201385498e-001,left_val:1.1609580367803574e-001},{features:[[22,0,3,24,-1.],[23,0,1,24,3.]],tilted:0,threshold:1.2393960496410728e-003,right_val:1.3559770584106445e-001,left_val:-1.6311010718345642e-001},{features:[[0,0,3,24,-1.],[1,0,1,24,3.]],tilted:0,threshold:1.0521570220589638e-003,right_val:2.7264788746833801e-001,left_val:-1.3373890519142151e-001},{features:[[1,6,24,12,-1.],[7,6,12,12,2.]],tilted:0,threshold:4.4079091399908066e-002,right_val:4.0246348828077316e-002,left_val:-5.9660512208938599e-001},{features:[[5,0,12,3,-1.],[5,1,12,1,3.]],tilted:0,threshold:2.9262369498610497e-003,right_val:3.5247230529785156e-001,left_val:-1.0696300119161606e-001},{features:[[8,2,14,4,-1.],[8,3,14,2,2.]],tilted:0,threshold:-3.0069800559431314e-003,right_val:6.5251968801021576e-002,left_val:-4.8501899838447571e-001},{features:[[0,4,1,21,-1.],[0,11,1,7,3.]],tilted:0,threshold:-1.1685189791023731e-002,right_val:4.8711609095335007e-002,left_val:-6.4442038536071777e-001},{features:[[21,4,4,16,-1.],[21,4,2,16,2.]],tilted:0,threshold:1.9985749386250973e-003,right_val:5.2013739943504333e-002,left_val:-2.7951678633689880e-001},{features:[[0,4,4,16,-1.],[2,4,2,16,2.]],tilted:0,threshold:2.6772189885377884e-003,right_val:9.9645562469959259e-002,left_val:-4.2468771338462830e-001},{features:[[16,0,1,2,-1.],[16,1,1,1,2.]],tilted:0,threshold:6.8805456976406276e-005,right_val:-1.7418420314788818e-001,left_val:1.2885080277919769e-001},{features:[[1,4,2,1,-1.],[1,4,1,1,2.]],tilted:1,threshold:-5.4919061949476600e-004,right_val:1.2902539968490601e-001,left_val:-2.4935460090637207e-001},{features:[[23,3,1,14,-1.],[23,10,1,7,2.]],tilted:0,threshold:-3.6701560020446777e-003,right_val:-7.0212572813034058e-002,left_val:1.4826999604701996e-001},{features:[[1,7,1,8,-1.],[1,11,1,4,2.]],tilted:0,threshold:-1.1337900068610907e-003,right_val:-1.4618510007858276e-001,left_val:3.0599281191825867e-001},{features:[[23,8,2,10,-1.],[23,13,2,5,2.]],tilted:0,threshold:2.3506619036197662e-003,right_val:1.4266289770603180e-001,left_val:-8.9912116527557373e-002},{features:[[0,8,2,10,-1.],[0,13,2,5,2.]],tilted:0,threshold:2.8336180839687586e-003,right_val:2.5490570068359375e-001,left_val:-1.5099850296974182e-001},{features:[[23,22,2,1,-1.],[23,22,1,1,2.]],tilted:1,threshold:-1.2854239903390408e-003,right_val:4.2431071400642395e-002,left_val:-8.5387921333312988e-001},{features:[[2,22,1,2,-1.],[2,22,1,1,2.]],tilted:1,threshold:4.2762109660543501e-004,right_val:-2.9406520724296570e-001,left_val:1.0683789849281311e-001},{features:[[21,3,4,20,-1.],[23,3,2,10,2.],[21,13,2,10,2.]],tilted:0,threshold:1.6246499493718147e-002,right_val:2.4584819376468658e-001,left_val:-6.3655123114585876e-002},{features:[[0,3,4,20,-1.],[0,3,2,10,2.],[2,13,2,10,2.]],tilted:0,threshold:1.7573300749063492e-002,right_val:4.3239068984985352e-001,left_val:-1.0204940289258957e-001},{features:[[13,14,3,1,-1.],[14,14,1,1,3.]],tilted:0,threshold:3.9662708877585828e-004,right_val:1.4920459687709808e-001,left_val:-8.3214908838272095e-002},{features:[[0,21,4,3,-1.],[1,21,2,3,2.]],tilted:0,threshold:-3.6139058647677302e-004,right_val:1.2784530222415924e-001,left_val:-2.6586309075355530e-001},{features:[[21,10,4,2,-1.],[21,10,2,2,2.]],tilted:0,threshold:6.9180950522422791e-003,right_val:2.7569389343261719e-001,left_val:-7.3350369930267334e-002},{features:[[0,10,4,2,-1.],[2,10,2,2,2.]],tilted:0,threshold:6.1709531582891941e-003,right_val:3.1572508811950684e-001,left_val:-1.0247000306844711e-001},{features:[[23,8,2,12,-1.],[23,8,1,12,2.]],tilted:0,threshold:-7.1866158396005630e-004,right_val:-4.6928219497203827e-002,left_val:2.6965659856796265e-001},{features:[[0,7,2,11,-1.],[1,7,1,11,2.]],tilted:0,threshold:-7.2996778180822730e-004,right_val:-9.4768881797790527e-002,left_val:4.4648209214210510e-001},{features:[[13,0,12,24,-1.],[17,8,4,8,9.]],tilted:0,threshold:4.4531229138374329e-001,right_val:-5.9585410356521606e-001,left_val:2.9124239459633827e-002},{features:[[4,21,1,2,-1.],[4,21,1,1,2.]],tilted:1,threshold:-1.4287939993664622e-003,right_val:3.9988748729228973e-002,left_val:-7.4422240257263184e-001},{features:[[13,0,12,24,-1.],[17,8,4,8,9.]],tilted:0,threshold:1.2369489669799805e-001,right_val:9.1279089450836182e-002,left_val:-5.8587580919265747e-002},{features:[[0,0,12,24,-1.],[4,8,4,8,9.]],tilted:0,threshold:4.2855501174926758e-001,right_val:-7.4231338500976563e-001,left_val:4.5858480036258698e-002},{features:[[18,11,1,3,-1.],[18,12,1,1,3.]],tilted:0,threshold:2.5031169570866041e-005,right_val:9.3773640692234039e-002,left_val:-1.0736320167779922e-001},{features:[[6,11,1,3,-1.],[6,12,1,1,3.]],tilted:0,threshold:4.9963229685090482e-005,right_val:2.1811039745807648e-001,left_val:-1.4796620607376099e-001},{features:[[18,11,2,4,-1.],[19,11,1,2,2.],[18,13,1,2,2.]],tilted:0,threshold:2.9644069727510214e-003,right_val:5.7993519306182861e-001,left_val:-4.4790871441364288e-002},{features:[[5,11,2,4,-1.],[5,11,1,2,2.],[6,13,1,2,2.]],tilted:0,threshold:1.5743350377306342e-003,right_val:3.8991490006446838e-001,left_val:-7.9150870442390442e-002},{features:[[12,17,6,3,-1.],[12,18,6,1,3.]],tilted:0,threshold:6.0039688833057880e-003,right_val:-9.5635467767715454e-001,left_val:2.3944819346070290e-002},{features:[[0,12,2,4,-1.],[0,13,2,2,2.]],tilted:0,threshold:4.2808058788068593e-004,right_val:-3.6652448773384094e-001,left_val:7.5896047055721283e-002},{features:[[23,0,2,6,-1.],[23,0,2,3,2.]],tilted:1,threshold:1.1229339987039566e-002,right_val:-4.8159009218215942e-001,left_val:2.3623889312148094e-002},{features:[[2,0,6,2,-1.],[2,0,3,2,2.]],tilted:1,threshold:-1.5405230224132538e-003,right_val:-2.9972699284553528e-001,left_val:1.0571250319480896e-001},{features:[[15,0,8,1,-1.],[17,0,4,1,2.]],tilted:0,threshold:5.5489651858806610e-003,right_val:-4.7681280970573425e-001,left_val:1.7742669209837914e-002},{features:[[2,0,8,1,-1.],[4,0,4,1,2.]],tilted:0,threshold:4.0579969063401222e-003,right_val:-4.6888938546180725e-001,left_val:6.8737268447875977e-002},{features:[[12,10,11,3,-1.],[12,11,11,1,3.]],tilted:0,threshold:5.0152339972555637e-003,right_val:-7.2317951917648315e-001,left_val:1.9214930012822151e-002},{features:[[8,10,2,6,-1.],[8,10,1,3,2.],[9,13,1,3,2.]],tilted:0,threshold:1.7280939500778913e-003,right_val:3.2534700632095337e-001,left_val:-1.0325799882411957e-001},{features:[[1,23,24,2,-1.],[1,23,12,2,2.]],tilted:0,threshold:-2.4781659245491028e-002,right_val:8.6045600473880768e-002,left_val:-3.1078928709030151e-001},{features:[[8,8,2,12,-1.],[8,8,1,6,2.],[9,14,1,6,2.]],tilted:0,threshold:-1.8893589731305838e-003,right_val:-1.3323649764060974e-001,left_val:2.3782789707183838e-001},{features:[[7,13,11,3,-1.],[7,14,11,1,3.]],tilted:0,threshold:4.2236722074449062e-003,right_val:-6.6566771268844604e-001,left_val:5.0405610352754593e-002},{features:[[11,0,2,4,-1.],[11,0,2,2,2.]],tilted:1,threshold:-1.4858880080282688e-002,right_val:-6.4919866621494293e-002,left_val:6.0808688402175903e-001},{features:[[16,0,1,2,-1.],[16,1,1,1,2.]],tilted:0,threshold:1.7625730251893401e-003,right_val:6.1008471250534058e-001,left_val:-2.6388010010123253e-002},{features:[[8,0,1,2,-1.],[8,1,1,1,2.]],tilted:0,threshold:6.5077590988948941e-005,right_val:-1.9105610251426697e-001,left_val:1.8001219630241394e-001},{features:[[13,0,12,8,-1.],[13,2,12,4,2.]],tilted:0,threshold:-2.4088749196380377e-003,right_val:7.4184507131576538e-002,left_val:-2.3599469661712646e-001},{features:[[3,6,16,2,-1.],[7,6,8,2,2.]],tilted:0,threshold:2.9149129986763000e-003,right_val:1.2283849716186523e-001,left_val:-2.8016430139541626e-001},{features:[[13,12,1,12,-1.],[9,16,1,4,3.]],tilted:1,threshold:6.2007219530642033e-003,right_val:1.3337619602680206e-001,left_val:-1.2533469498157501e-001},{features:[[4,0,12,1,-1.],[7,0,6,1,2.]],tilted:0,threshold:1.1466739699244499e-002,right_val:-7.6637887954711914e-001,left_val:4.2434468865394592e-002},{features:[[3,2,20,16,-1.],[13,2,10,8,2.],[3,10,10,8,2.]],tilted:0,threshold:-3.5191178321838379e-002,right_val:-1.2784330546855927e-001,left_val:1.8971160054206848e-001},{features:[[1,1,6,24,-1.],[1,9,6,8,3.]],tilted:0,threshold:4.5229779061628506e-005,right_val:1.9156099855899811e-001,left_val:-2.0386409759521484e-001},{features:[[23,23,2,2,-1.],[23,23,1,2,2.]],tilted:0,threshold:3.5897540510632098e-004,right_val:-2.2871449589729309e-001,left_val:7.3452822864055634e-002},{features:[[0,23,2,2,-1.],[1,23,1,2,2.]],tilted:0,threshold:2.1426780222100206e-005,right_val:1.7463220655918121e-001,left_val:-2.3904530704021454e-001},{features:[[21,14,4,8,-1.],[21,14,2,8,2.]],tilted:0,threshold:5.4916929453611374e-002,right_val:-8.3265262842178345e-001,left_val:5.7207080535590649e-003},{features:[[0,14,4,8,-1.],[2,14,2,8,2.]],tilted:0,threshold:-1.6181350219994783e-003,right_val:-7.9697981476783752e-002,left_val:4.8578798770904541e-001},{features:[[22,3,3,11,-1.],[23,3,1,11,3.]],tilted:0,threshold:1.8090730300173163e-003,right_val:1.8998570740222931e-001,left_val:-5.5137149989604950e-002},{features:[[6,9,2,10,-1.],[6,9,1,5,2.],[7,14,1,5,2.]],tilted:0,threshold:-3.4946738742291927e-004,right_val:-1.5550769865512848e-001,left_val:1.9685539603233337e-001},{features:[[8,19,11,6,-1.],[8,21,11,2,3.]],tilted:0,threshold:2.9834950692020357e-004,right_val:9.0075306594371796e-002,left_val:-2.1016369760036469e-001},{features:[[9,20,6,2,-1.],[9,21,6,1,2.]],tilted:0,threshold:1.4741290360689163e-003,right_val:-5.2060151100158691e-001,left_val:5.4677028208971024e-002},{features:[[24,17,1,8,-1.],[24,21,1,4,2.]],tilted:0,threshold:6.1138661112636328e-004,right_val:1.8061339855194092e-001,left_val:-1.1104019731283188e-001},{features:[[10,4,2,4,-1.],[10,6,2,2,2.]],tilted:0,threshold:-2.2484369765152223e-005,right_val:-1.7276780307292938e-001,left_val:1.8097889423370361e-001},{features:[[24,17,1,8,-1.],[24,21,1,4,2.]],tilted:0,threshold:1.8067440250888467e-003,right_val:-3.5405930876731873e-001,left_val:7.0003516972064972e-002},{features:[[0,17,1,8,-1.],[0,21,1,4,2.]],tilted:0,threshold:4.2339949868619442e-004,right_val:2.4823880195617676e-001,left_val:-1.6226269304752350e-001},{features:[[16,8,2,8,-1.],[17,8,1,4,2.],[16,12,1,4,2.]],tilted:0,threshold:4.7990549355745316e-003,right_val:4.2028531432151794e-001,left_val:-5.3161401301622391e-002},{features:[[7,8,2,8,-1.],[7,8,1,4,2.],[8,12,1,4,2.]],tilted:0,threshold:1.0556719498708844e-003,right_val:2.5979140400886536e-001,left_val:-1.3919970393180847e-001},{features:[[7,6,12,12,-1.],[7,9,12,6,2.]],tilted:0,threshold:4.1018951684236526e-002,right_val:4.8265969753265381e-001,left_val:-5.3697388619184494e-002}],threshold:-1.1986110210418701e+000}],size:[25,25],tilted:true}; +})(jsfeat.haar); \ No newline at end of file diff --git a/cascades/mouth.js b/cascades/mouth.js new file mode 100755 index 0000000..2244665 --- /dev/null +++ b/cascades/mouth.js @@ -0,0 +1,7 @@ +/** + * this cascade is derived from https://github.com/mtschirs/js-objectdetect implementation + * @author Martin Tschirsich / http://www.tu-darmstadt.de/~m_t + */ +(function(global) { + global.mouth = {complexClassifiers:[{simpleClassifiers:[{features:[[0,0,14,9,-1.],[0,3,14,3,3.]],tilted:0,threshold:-0.1192855015397072,right_val:-0.4541360139846802,left_val:0.7854182124137878},{features:[[17,1,8,14,-1.],[17,8,8,7,2.]],tilted:0,threshold:-0.0641647726297379,right_val:0.2652035951614380,left_val:-0.7407680749893189},{features:[[7,3,11,6,-1.],[7,5,11,2,3.]],tilted:0,threshold:0.0910761803388596,right_val:0.8400946259498596,left_val:-0.2063370943069458},{features:[[5,2,15,6,-1.],[5,4,15,2,3.]],tilted:0,threshold:-0.1129330024123192,right_val:-0.1866362988948822,left_val:0.8284121751785278},{features:[[6,4,11,6,-1.],[6,6,11,2,3.]],tilted:0,threshold:-0.0741933435201645,right_val:-0.1527701020240784,left_val:0.8354660272598267},{features:[[17,1,6,3,-1.],[19,1,2,3,3.]],tilted:0,threshold:2.1404659491963685e-005,right_val:0.1858334988355637,left_val:-0.0716945603489876},{features:[[5,0,15,6,-1.],[5,2,15,2,3.]],tilted:0,threshold:-0.0996975302696228,right_val:-0.1721730977296829,left_val:0.6870458126068115},{features:[[7,3,13,6,-1.],[7,5,13,2,3.]],tilted:0,threshold:-0.0900413617491722,right_val:-0.1368771940469742,left_val:0.7310237884521484},{features:[[5,3,6,5,-1.],[8,3,3,5,2.]],tilted:0,threshold:2.5138311320915818e-004,right_val:0.3647777140140533,left_val:-0.3469826877117157},{features:[[21,14,4,1,-1.],[21,14,2,1,2.]],tilted:0,threshold:1.6144449546118267e-005,right_val:0.2320024073123932,left_val:-0.3085466027259827},{features:[[0,3,3,12,-1.],[0,7,3,4,3.]],tilted:0,threshold:1.9363909814273939e-005,right_val:0.2404107004404068,left_val:-0.3819856047630310},{features:[[22,10,3,4,-1.],[22,11,3,2,2.]],tilted:0,threshold:6.9673648104071617e-003,right_val:-0.7487065792083740,left_val:0.0545878112316132},{features:[[0,10,3,4,-1.],[0,11,3,2,2.]],tilted:0,threshold:-4.7189309261739254e-003,right_val:0.1205869019031525,left_val:-0.7476686835289002}],threshold:-1.4372119903564453},{simpleClassifiers:[{features:[[5,0,15,8,-1.],[5,2,15,4,2.]],tilted:0,threshold:-0.1006335020065308,right_val:-0.3866829872131348,left_val:0.7848083972930908},{features:[[20,0,5,9,-1.],[20,3,5,3,3.]],tilted:0,threshold:-0.0366767607629299,right_val:-0.4012677967548370,left_val:0.5453233718872070},{features:[[6,2,13,4,-1.],[6,4,13,2,2.]],tilted:0,threshold:0.0815562233328819,right_val:0.8084958195686340,left_val:-0.1315398067235947},{features:[[7,2,15,6,-1.],[7,4,15,2,3.]],tilted:0,threshold:-0.1064186021685600,right_val:-0.2083356976509094,left_val:0.6782389879226685},{features:[[2,3,4,12,-1.],[2,9,4,6,2.]],tilted:0,threshold:0.0156307406723499,right_val:0.3150509893894196,left_val:-0.3749788105487824},{features:[[6,1,14,6,-1.],[6,3,14,2,3.]],tilted:0,threshold:0.0711290463805199,right_val:0.7050542831420898,left_val:-0.1557385027408600},{features:[[8,3,9,6,-1.],[8,5,9,2,3.]],tilted:0,threshold:0.0736639127135277,right_val:0.6715884804725647,left_val:-0.1547683030366898},{features:[[21,0,4,6,-1.],[21,3,4,3,2.]],tilted:0,threshold:-1.0592950275167823e-004,right_val:-0.2670182883739471,left_val:0.1365388035774231},{features:[[1,12,1,3,-1.],[1,13,1,1,3.]],tilted:0,threshold:-1.9239520188421011e-003,right_val:0.1364576965570450,left_val:-0.7261438965797424},{features:[[23,12,1,3,-1.],[23,13,1,1,3.]],tilted:0,threshold:2.3057300131767988e-003,right_val:-0.6423184275627136,left_val:0.0706136971712112},{features:[[1,12,1,3,-1.],[1,13,1,1,3.]],tilted:0,threshold:1.8073299434036016e-003,right_val:-0.7050786018371582,left_val:0.1355642974376679},{features:[[7,7,11,8,-1.],[7,9,11,4,2.]],tilted:0,threshold:-0.0664333626627922,right_val:-0.1400263011455536,left_val:0.6158788204193115},{features:[[8,4,9,6,-1.],[8,6,9,2,3.]],tilted:0,threshold:-0.0689277201890945,right_val:-0.1224988028407097,left_val:0.6765924096107483}],threshold:-1.5416599512100220},{simpleClassifiers:[{features:[[1,0,15,9,-1.],[1,3,15,3,3.]],tilted:0,threshold:-0.1822655051946640,right_val:-0.3195483088493347,left_val:0.5961514711380005},{features:[[9,0,11,15,-1.],[9,5,11,5,3.]],tilted:0,threshold:0.2893281877040863,right_val:0.3762707114219666,left_val:-0.0240151602774858},{features:[[0,8,3,4,-1.],[0,9,3,2,2.]],tilted:0,threshold:-4.2456621304154396e-003,right_val:0.1214720010757446,left_val:-0.7117397785186768},{features:[[7,9,12,6,-1.],[7,12,12,3,2.]],tilted:0,threshold:0.0545681491494179,right_val:0.4597271978855133,left_val:-0.1822118014097214},{features:[[0,5,2,6,-1.],[0,7,2,2,3.]],tilted:0,threshold:-4.4434829615056515e-003,right_val:0.1655835956335068,left_val:-0.5354676842689514},{features:[[14,0,2,11,-1.],[14,0,1,11,2.]],tilted:0,threshold:-0.0204923897981644,right_val:-0.0151639897376299,left_val:-0.8770608901977539},{features:[[0,9,2,6,-1.],[0,11,2,2,3.]],tilted:0,threshold:-4.8007471486926079e-003,right_val:0.1356130987405777,left_val:-0.5431423187255859},{features:[[1,0,24,12,-1.],[13,0,12,6,2.],[1,6,12,6,2.]],tilted:0,threshold:0.1226660013198853,right_val:-0.6574401855468750,left_val:0.1124472022056580},{features:[[0,0,3,4,-1.],[0,2,3,2,2.]],tilted:0,threshold:-5.5254979088203982e-005,right_val:-0.3841981887817383,left_val:0.1536739021539688},{features:[[7,3,14,6,-1.],[7,5,14,2,3.]],tilted:0,threshold:-0.1131860986351967,right_val:-0.1094276010990143,left_val:0.4927195906639099},{features:[[5,3,15,4,-1.],[5,5,15,2,2.]],tilted:0,threshold:0.0792956873774529,right_val:0.4720517992973328,left_val:-0.1647461056709290},{features:[[8,13,12,1,-1.],[12,13,4,1,3.]],tilted:0,threshold:0.0148729300126433,right_val:-0.5926275849342346,left_val:0.0740143731236458},{features:[[2,3,12,6,-1.],[8,3,6,6,2.]],tilted:0,threshold:0.0538397915661335,right_val:0.3537890911102295,left_val:-0.2111544013023377},{features:[[21,2,4,9,-1.],[21,2,2,9,2.]],tilted:1,threshold:-0.0759592726826668,right_val:-0.1090068966150284,left_val:0.5931801795959473},{features:[[6,2,13,6,-1.],[6,4,13,2,3.]],tilted:0,threshold:0.1158166006207466,right_val:0.5940334796905518,left_val:-0.0984905213117599},{features:[[5,3,15,2,-1.],[5,4,15,1,2.]],tilted:0,threshold:-0.0160826407372952,right_val:-0.1654051989316940,left_val:0.3794195055961609},{features:[[0,11,5,3,-1.],[0,12,5,1,3.]],tilted:0,threshold:6.7254770547151566e-003,right_val:-0.7060937881469727,left_val:0.0937571078538895},{features:[[14,0,11,14,-1.],[14,7,11,7,2.]],tilted:0,threshold:-0.0611884109675884,right_val:0.0796229690313339,left_val:-0.4381029903888702},{features:[[2,10,4,1,-1.],[3,11,2,1,2.]],tilted:1,threshold:-5.5152038112282753e-003,right_val:0.0781789273023605,left_val:-0.7019357085227966},{features:[[1,0,24,12,-1.],[13,0,12,6,2.],[1,6,12,6,2.]],tilted:0,threshold:-0.1988534033298492,right_val:0.0560497716069222,left_val:-0.6726130843162537},{features:[[0,4,6,6,-1.],[0,4,3,3,2.],[3,7,3,3,2.]],tilted:0,threshold:0.0194473192095757,right_val:0.4151527881622315,left_val:-0.1165110021829605},{features:[[23,9,1,4,-1.],[22,10,1,2,2.]],tilted:1,threshold:-4.6706218272447586e-003,right_val:0.1049979999661446,left_val:-0.6090158820152283},{features:[[2,9,4,1,-1.],[3,10,2,1,2.]],tilted:1,threshold:4.0827528573572636e-003,right_val:-0.5490871071815491,left_val:0.0689968466758728},{features:[[16,4,8,10,-1.],[20,4,4,5,2.],[16,9,4,5,2.]],tilted:0,threshold:-0.0201979596167803,right_val:-0.1804888993501663,left_val:0.2884930074214935},{features:[[8,7,9,6,-1.],[8,9,9,2,3.]],tilted:0,threshold:0.0504430681467056,right_val:0.4609920978546143,left_val:-0.0897706300020218},{features:[[11,12,4,3,-1.],[12,12,2,3,2.]],tilted:0,threshold:-5.0139562226831913e-003,right_val:0.0588099807500839,left_val:-0.4820869863033295},{features:[[0,0,3,3,-1.],[0,1,3,1,3.]],tilted:0,threshold:8.5741933435201645e-003,right_val:-0.5979083180427551,left_val:0.0568646714091301},{features:[[11,9,14,2,-1.],[11,9,7,2,2.]],tilted:0,threshold:-0.0121624497696757,right_val:-0.1168325990438461,left_val:0.1446305960416794},{features:[[9,13,4,1,-1.],[10,13,2,1,2.]],tilted:0,threshold:-1.9329390488564968e-003,right_val:0.0609783902764320,left_val:-0.5450860857963562}],threshold:-1.5324319601058960},{simpleClassifiers:[{features:[[0,0,8,6,-1.],[0,3,8,3,2.]],tilted:0,threshold:-0.0320550985634327,right_val:-0.4258942902088165,left_val:0.4280030131340027},{features:[[5,1,15,6,-1.],[5,3,15,2,3.]],tilted:0,threshold:-0.1231034025549889,right_val:-0.2055584937334061,left_val:0.5121241807937622},{features:[[0,7,4,3,-1.],[0,8,4,1,3.]],tilted:0,threshold:-5.8588259853422642e-003,right_val:0.1075906008481979,left_val:-0.7101820707321167},{features:[[3,3,20,6,-1.],[8,3,10,6,2.]],tilted:0,threshold:0.0977141335606575,right_val:0.4571174979209900,left_val:-0.1477957963943481},{features:[[0,6,24,5,-1.],[6,6,12,5,2.]],tilted:0,threshold:-0.0527394600212574,right_val:-0.2183827012777329,left_val:0.3743767142295837},{features:[[8,5,9,6,-1.],[8,7,9,2,3.]],tilted:0,threshold:0.0584189109504223,right_val:0.4993282854557037,left_val:-0.1386294066905975},{features:[[5,2,14,4,-1.],[5,4,14,2,2.]],tilted:0,threshold:0.0887569189071655,right_val:0.6216561794281006,left_val:-0.1315895020961762},{features:[[22,8,3,6,-1.],[22,10,3,2,3.]],tilted:0,threshold:0.0145876696333289,right_val:-0.5815675258636475,left_val:0.0915696695446968},{features:[[3,9,18,2,-1.],[3,9,9,1,2.],[12,10,9,1,2.]],tilted:0,threshold:0.1044600009918213,right_val:-5.6644519531250000e+004,left_val:5.2740359678864479e-003},{features:[[22,8,3,6,-1.],[22,10,3,2,3.]],tilted:0,threshold:-8.4322784096002579e-003,right_val:0.0979617610573769,left_val:-0.4866046011447907},{features:[[0,0,24,6,-1.],[0,0,12,3,2.],[12,3,12,3,2.]],tilted:0,threshold:0.0406559295952320,right_val:-0.3656015992164612,left_val:0.1391579061746597},{features:[[14,11,4,4,-1.],[15,11,2,4,2.]],tilted:0,threshold:6.3366899266839027e-003,right_val:-0.6245471239089966,left_val:0.0641745477914810},{features:[[5,5,15,2,-1.],[5,6,15,1,2.]],tilted:0,threshold:0.0158455893397331,right_val:0.2889905869960785,left_val:-0.1791914999485016},{features:[[5,4,15,6,-1.],[5,6,15,2,3.]],tilted:0,threshold:-0.0746863335371017,right_val:-0.1314727962017059,left_val:0.5424023270606995},{features:[[0,7,2,3,-1.],[0,8,2,1,3.]],tilted:0,threshold:4.7695250250399113e-003,right_val:-0.6561154723167419,left_val:0.0965340435504913},{features:[[6,6,13,6,-1.],[6,8,13,2,3.]],tilted:0,threshold:-0.0535226687788963,right_val:-0.1353430002927780,left_val:0.4636800885200501},{features:[[0,11,6,3,-1.],[0,12,6,1,3.]],tilted:0,threshold:-6.3648750074207783e-003,right_val:0.0684857368469238,left_val:-0.6624563932418823},{features:[[11,0,14,14,-1.],[11,7,14,7,2.]],tilted:0,threshold:-0.2447337061166763,right_val:0.0450799688696861,left_val:-0.8181337118148804},{features:[[7,13,4,1,-1.],[8,13,2,1,2.]],tilted:0,threshold:-2.4634969886392355e-003,right_val:0.0495845898985863,left_val:-0.7681804895401001},{features:[[6,9,13,6,-1.],[6,11,13,2,3.]],tilted:0,threshold:-0.0358034893870354,right_val:-0.1447928994894028,left_val:0.3749603927135468},{features:[[0,9,4,4,-1.],[0,10,4,2,2.]],tilted:0,threshold:-5.6720529682934284e-003,right_val:0.0935847163200378,left_val:-0.6127536296844482},{features:[[21,0,4,6,-1.],[21,3,4,3,2.]],tilted:0,threshold:-0.0132687101140618,right_val:-0.2551889121532440,left_val:0.2863784134387970},{features:[[0,12,6,3,-1.],[0,13,6,1,3.]],tilted:0,threshold:-6.2518939375877380e-003,right_val:0.0677111670374870,left_val:-0.5896773934364319},{features:[[16,11,4,3,-1.],[17,11,2,3,2.]],tilted:0,threshold:7.3092570528388023e-003,right_val:-0.5714861154556274,left_val:0.0272198095917702},{features:[[0,7,10,8,-1.],[0,7,5,4,2.],[5,11,5,4,2.]],tilted:0,threshold:0.0258194394409657,right_val:0.3050251901149750,left_val:-0.1326007992029190},{features:[[22,2,3,8,-1.],[22,2,3,4,2.]],tilted:1,threshold:-0.0211078803986311,right_val:-0.1475265026092529,left_val:0.1200629025697708},{features:[[1,3,16,4,-1.],[9,3,8,4,2.]],tilted:0,threshold:0.0408483408391476,right_val:0.2530446052551270,left_val:-0.1736883074045181},{features:[[1,13,24,2,-1.],[13,13,12,1,2.],[1,14,12,1,2.]],tilted:0,threshold:-0.0179475992918015,right_val:0.0583698004484177,left_val:-0.7117617130279541},{features:[[5,5,4,10,-1.],[6,5,2,10,2.]],tilted:0,threshold:-0.0138895902782679,right_val:0.0435630008578300,left_val:-0.6778132915496826},{features:[[13,7,2,6,-1.],[11,9,2,2,3.]],tilted:1,threshold:-9.8488982766866684e-003,right_val:-0.0897465273737907,left_val:0.1479212939739227},{features:[[8,9,8,6,-1.],[8,12,8,3,2.]],tilted:0,threshold:-0.0659847036004066,right_val:-0.0681742578744888,left_val:0.5683801770210266},{features:[[24,7,1,4,-1.],[24,8,1,2,2.]],tilted:0,threshold:-1.8370660254731774e-003,right_val:0.0779643580317497,left_val:-0.4986937940120697},{features:[[5,7,15,6,-1.],[5,9,15,2,3.]],tilted:0,threshold:-0.0277651809155941,right_val:-0.1382624953985214,left_val:0.2679949104785919},{features:[[21,8,4,3,-1.],[21,9,4,1,3.]],tilted:0,threshold:9.9889356642961502e-003,right_val:-0.7317379117012024,left_val:0.0445619411766529}],threshold:-1.4849940538406372},{simpleClassifiers:[{features:[[5,2,15,4,-1.],[5,3,15,2,2.]],tilted:0,threshold:-0.0456383489072323,right_val:-0.2494937032461166,left_val:0.6275423169136047},{features:[[6,4,15,3,-1.],[6,5,15,1,3.]],tilted:0,threshold:-0.0310676805675030,right_val:-0.1671900004148483,left_val:0.6427816152572632},{features:[[0,3,2,12,-1.],[0,3,1,6,2.],[1,9,1,6,2.]],tilted:0,threshold:3.0193419661372900e-003,right_val:0.3676818013191223,left_val:-0.2399346977472305},{features:[[7,3,11,4,-1.],[7,4,11,2,2.]],tilted:0,threshold:0.0315676406025887,right_val:0.5750172734260559,left_val:-0.1147691980004311},{features:[[0,0,6,6,-1.],[0,3,6,3,2.]],tilted:0,threshold:-6.4146341755986214e-003,right_val:-0.3768770098686218,left_val:0.2154625058174133},{features:[[24,3,1,12,-1.],[24,7,1,4,3.]],tilted:0,threshold:-5.7010860182344913e-003,right_val:0.0946888476610184,left_val:-0.4533824026584625},{features:[[0,0,24,12,-1.],[0,0,12,6,2.],[12,6,12,6,2.]],tilted:0,threshold:0.1890300065279007,right_val:-0.7184885144233704,left_val:0.0801155269145966},{features:[[1,1,24,14,-1.],[13,1,12,7,2.],[1,8,12,7,2.]],tilted:0,threshold:0.1293978989124298,right_val:-0.5197048783302307,left_val:0.1093719005584717},{features:[[5,3,8,4,-1.],[5,3,8,2,2.]],tilted:1,threshold:-0.0657683908939362,right_val:-0.1238735020160675,left_val:0.5003104209899902},{features:[[24,9,1,4,-1.],[23,10,1,2,2.]],tilted:1,threshold:-4.0884059853851795e-003,right_val:0.0594223700463772,left_val:-0.5118011236190796},{features:[[7,7,11,8,-1.],[7,9,11,4,2.]],tilted:0,threshold:-0.0306642707437277,right_val:-0.1741248071193695,left_val:0.2964648902416229},{features:[[24,9,1,4,-1.],[23,10,1,2,2.]],tilted:1,threshold:2.7700960636138916e-003,right_val:-0.4009515047073364,left_val:0.0846907272934914},{features:[[0,6,1,9,-1.],[0,9,1,3,3.]],tilted:0,threshold:-6.2402039766311646e-003,right_val:0.0800850465893745,left_val:-0.5560923218727112},{features:[[8,2,9,3,-1.],[8,3,9,1,3.]],tilted:0,threshold:0.0105152595788240,right_val:0.3612711131572723,left_val:-0.1309404969215393},{features:[[9,4,7,4,-1.],[9,5,7,2,2.]],tilted:0,threshold:0.0181792695075274,right_val:0.3556562960147858,left_val:-0.1245180964469910},{features:[[22,0,3,2,-1.],[22,1,3,1,2.]],tilted:0,threshold:5.3037698380649090e-003,right_val:-0.6178466081619263,left_val:0.0638220235705376},{features:[[0,0,13,14,-1.],[0,7,13,7,2.]],tilted:0,threshold:-0.1947806030511856,right_val:0.0475768186151981,left_val:-0.7228901982307434},{features:[[21,9,4,4,-1.],[21,10,4,2,2.]],tilted:0,threshold:7.2230421938002110e-003,right_val:-0.5460836291313171,left_val:0.0453382283449173},{features:[[0,9,4,4,-1.],[0,10,4,2,2.]],tilted:0,threshold:5.0375838764011860e-003,right_val:-0.4817472100257874,left_val:0.0804468318820000},{features:[[22,9,1,4,-1.],[21,10,1,2,2.]],tilted:1,threshold:-7.1934829466044903e-003,right_val:0.0128700295463204,left_val:-0.5018991827964783},{features:[[3,9,4,1,-1.],[4,10,2,1,2.]],tilted:1,threshold:-4.4941599480807781e-003,right_val:0.0634675025939941,left_val:-0.5862709879875183},{features:[[15,3,10,12,-1.],[20,3,5,6,2.],[15,9,5,6,2.]],tilted:0,threshold:0.0874131396412849,right_val:0.4797031879425049,left_val:-0.0676202401518822},{features:[[0,8,14,6,-1.],[0,8,7,3,2.],[7,11,7,3,2.]],tilted:0,threshold:-0.0377015694975853,right_val:-0.0978809297084808,left_val:0.3913342952728272},{features:[[23,10,1,4,-1.],[22,11,1,2,2.]],tilted:1,threshold:3.0070370994508266e-003,right_val:-0.2472224980592728,left_val:0.0484924912452698},{features:[[0,3,10,12,-1.],[0,3,5,6,2.],[5,9,5,6,2.]],tilted:0,threshold:0.0974098667502403,right_val:0.5813519954681397,left_val:-0.0669010728597641},{features:[[23,0,2,1,-1.],[23,0,1,1,2.]],tilted:1,threshold:-4.0166568942368031e-003,right_val:0.0363924615085125,left_val:-0.5456554293632507},{features:[[8,3,9,3,-1.],[8,4,9,1,3.]],tilted:0,threshold:0.0104924896731973,right_val:0.3253425061702728,left_val:-0.1087466031312943},{features:[[7,5,11,4,-1.],[7,6,11,2,2.]],tilted:0,threshold:0.0249659996479750,right_val:0.3056510984897614,left_val:-0.1137896031141281},{features:[[2,7,20,8,-1.],[12,7,10,8,2.]],tilted:0,threshold:0.1301030069589615,right_val:0.3035365939140320,left_val:-0.1220476999878883},{features:[[12,5,9,8,-1.],[15,5,3,8,3.]],tilted:0,threshold:-0.0843720883131027,right_val:0.0178856607526541,left_val:-0.6943122148513794},{features:[[2,0,1,2,-1.],[2,0,1,1,2.]],tilted:1,threshold:-2.9267850331962109e-003,right_val:0.0564073212444782,left_val:-0.5401834845542908},{features:[[21,3,4,4,-1.],[22,4,2,4,2.]],tilted:1,threshold:-0.0206745099276304,right_val:-0.0685340464115143,left_val:0.4180921018123627},{features:[[4,5,9,8,-1.],[7,5,3,8,3.]],tilted:0,threshold:-0.0514506399631500,right_val:0.0529876984655857,left_val:-0.6289098262786865},{features:[[22,10,3,2,-1.],[22,10,3,1,2.]],tilted:1,threshold:-8.9261196553707123e-003,right_val:0.0236550793051720,left_val:-0.4644356071949005},{features:[[0,5,24,5,-1.],[6,5,12,5,2.]],tilted:0,threshold:-0.0830484703183174,right_val:-0.0938697606325150,left_val:0.3304196894168854},{features:[[9,7,7,3,-1.],[9,8,7,1,3.]],tilted:0,threshold:0.0113369999453425,right_val:0.3484053015708923,left_val:-0.0979600325226784},{features:[[2,0,20,9,-1.],[7,0,10,9,2.]],tilted:0,threshold:0.0827779024839401,right_val:0.2680957913398743,left_val:-0.1159391030669212},{features:[[11,2,8,9,-1.],[13,2,4,9,2.]],tilted:0,threshold:-0.0478848814964294,right_val:0.0222362894564867,left_val:-0.6079211235046387},{features:[[1,8,4,1,-1.],[2,9,2,1,2.]],tilted:1,threshold:-3.8582698907703161e-003,right_val:0.0554540418088436,left_val:-0.4688901007175446},{features:[[19,5,6,10,-1.],[22,5,3,5,2.],[19,10,3,5,2.]],tilted:0,threshold:-0.0334531292319298,right_val:-0.0631088465452194,left_val:0.4192667901515961},{features:[[0,5,6,10,-1.],[0,5,3,5,2.],[3,10,3,5,2.]],tilted:0,threshold:0.0126036396250129,right_val:0.2175220996141434,left_val:-0.1227632984519005},{features:[[10,10,9,2,-1.],[13,10,3,2,3.]],tilted:0,threshold:0.0262600891292095,right_val:-0.5688759088516235,left_val:0.0162896700203419}],threshold:-1.5437099933624268},{simpleClassifiers:[{features:[[5,2,15,2,-1.],[5,3,15,1,2.]],tilted:0,threshold:-0.0197793096303940,right_val:-0.2573797106742859,left_val:0.4472095072269440},{features:[[21,4,4,3,-1.],[21,4,2,3,2.]],tilted:0,threshold:-9.1997236013412476e-003,right_val:-0.1382309943437576,left_val:0.4397894144058228},{features:[[1,5,15,4,-1.],[1,6,15,2,2.]],tilted:0,threshold:0.0222425796091557,right_val:0.3406811952590942,left_val:-0.1761150062084198},{features:[[21,5,4,10,-1.],[23,5,2,5,2.],[21,10,2,5,2.]],tilted:0,threshold:5.3650550544261932e-003,right_val:0.1631094068288803,left_val:-0.1087490990757942},{features:[[0,0,21,8,-1.],[7,0,7,8,3.]],tilted:0,threshold:0.7425013780593872,right_val:-1.4172740478515625e+003,left_val:4.6233131433837116e-004},{features:[[5,0,15,6,-1.],[5,2,15,2,3.]],tilted:0,threshold:-0.1289999037981033,right_val:-0.1264209002256393,left_val:0.4220936894416809},{features:[[2,2,21,3,-1.],[9,2,7,3,3.]],tilted:0,threshold:0.4214023947715759,right_val:1.2071870117187500e+003,left_val:3.0299068894237280e-003},{features:[[6,3,15,6,-1.],[6,5,15,2,3.]],tilted:0,threshold:-0.1431712061166763,right_val:-0.1091170981526375,left_val:0.5070012211799622},{features:[[0,5,4,10,-1.],[0,5,2,5,2.],[2,10,2,5,2.]],tilted:0,threshold:4.4366121292114258e-003,right_val:0.2446105927228928,left_val:-0.2218814045190811},{features:[[22,10,1,4,-1.],[21,11,1,2,2.]],tilted:1,threshold:3.0177310109138489e-003,right_val:-0.3470205068588257,left_val:0.1072233989834786},{features:[[0,7,3,4,-1.],[0,8,3,2,2.]],tilted:0,threshold:-4.8220949247479439e-003,right_val:0.0803434476256371,left_val:-0.6534119248390198},{features:[[1,3,24,3,-1.],[7,3,12,3,2.]],tilted:0,threshold:0.0362788289785385,right_val:0.2242490947246552,left_val:-0.2207075059413910},{features:[[0,0,24,13,-1.],[6,0,12,13,2.]],tilted:0,threshold:-0.1675994992256165,right_val:-0.1054169982671738,left_val:0.4059072136878967},{features:[[5,3,15,4,-1.],[5,4,15,2,2.]],tilted:0,threshold:-0.0509919412434101,right_val:-0.1206474006175995,left_val:0.3452283143997192},{features:[[5,4,14,3,-1.],[5,5,14,1,3.]],tilted:0,threshold:0.0161635298281908,right_val:0.3696750998497009,left_val:-0.1465175002813339},{features:[[23,8,2,4,-1.],[22,9,2,2,2.]],tilted:1,threshold:8.3268675953149796e-003,right_val:-0.5490669012069702,left_val:0.0642398297786713},{features:[[2,8,4,2,-1.],[3,9,2,2,2.]],tilted:1,threshold:-7.2614871896803379e-003,right_val:0.0538330897688866,left_val:-0.6105815768241882},{features:[[9,8,9,6,-1.],[9,10,9,2,3.]],tilted:0,threshold:-0.0427855290472507,right_val:-0.1058441996574402,left_val:0.3435507118701935},{features:[[0,0,11,14,-1.],[0,7,11,7,2.]],tilted:0,threshold:-0.0558885596692562,right_val:0.0855342373251915,left_val:-0.4213463068008423},{features:[[1,0,24,12,-1.],[13,0,12,6,2.],[1,6,12,6,2.]],tilted:0,threshold:0.1077039018273354,right_val:-0.5105268955230713,left_val:0.0796676799654961},{features:[[0,0,3,4,-1.],[0,2,3,2,2.]],tilted:0,threshold:-4.8622798203723505e-005,right_val:-0.3022361099720001,left_val:0.1164970993995667},{features:[[7,2,15,4,-1.],[7,3,15,2,2.]],tilted:0,threshold:0.0272718109190464,right_val:0.3410704135894775,left_val:-0.0831976532936096},{features:[[2,10,4,1,-1.],[3,11,2,1,2.]],tilted:1,threshold:2.7942128945142031e-003,right_val:-0.4521746933460236,left_val:0.0836139172315598},{features:[[21,11,4,4,-1.],[21,12,4,2,2.]],tilted:0,threshold:-5.9649557806551456e-003,right_val:0.0588471181690693,left_val:-0.5814967751502991},{features:[[1,7,12,8,-1.],[1,7,6,4,2.],[7,11,6,4,2.]],tilted:0,threshold:-0.0364551208913326,right_val:-0.1163965016603470,left_val:0.2987614870071411},{features:[[7,8,11,6,-1.],[7,11,11,3,2.]],tilted:0,threshold:0.0560359284281731,right_val:0.3490499854087830,left_val:-0.1189749017357826},{features:[[0,13,2,2,-1.],[0,14,2,1,2.]],tilted:0,threshold:1.9068910041823983e-003,right_val:-0.5222734212875366,left_val:0.0623399801552296},{features:[[10,3,8,6,-1.],[12,3,4,6,2.]],tilted:0,threshold:-0.0314803011715412,right_val:0.0221100505441427,left_val:-0.5988280177116394},{features:[[7,3,8,6,-1.],[9,3,4,6,2.]],tilted:0,threshold:-0.0291779898107052,right_val:0.0378519818186760,left_val:-0.7628328204154968},{features:[[22,6,3,3,-1.],[22,7,3,1,3.]],tilted:0,threshold:9.3441819772124290e-003,right_val:-0.5464184880256653,left_val:0.0293787997215986},{features:[[0,5,5,6,-1.],[0,7,5,2,3.]],tilted:0,threshold:1.2941689928993583e-003,right_val:0.1293071061372757,left_val:-0.2152619063854218},{features:[[8,7,9,6,-1.],[8,9,9,2,3.]],tilted:0,threshold:0.0399527512490749,right_val:0.3440327942371368,left_val:-0.0815632417798042},{features:[[2,0,20,13,-1.],[12,0,10,13,2.]],tilted:0,threshold:0.2579689919948578,right_val:0.2971759140491486,left_val:-0.0829713121056557},{features:[[19,3,6,4,-1.],[22,3,3,2,2.],[19,5,3,2,2.]],tilted:0,threshold:8.3975978195667267e-003,right_val:0.3130742907524109,left_val:-0.1235759034752846},{features:[[3,8,12,3,-1.],[9,8,6,3,2.]],tilted:0,threshold:-0.0210481006652117,right_val:-0.1077592000365257,left_val:0.2553890943527222},{features:[[22,3,2,5,-1.],[22,3,1,5,2.]],tilted:1,threshold:0.0184192396700382,right_val:0.4613004922866821,left_val:-0.0348858311772347},{features:[[6,7,8,8,-1.],[8,7,4,8,2.]],tilted:0,threshold:-0.0335993207991123,right_val:0.0432357601821423,left_val:-0.6385626196861267},{features:[[20,0,3,1,-1.],[21,1,1,1,3.]],tilted:1,threshold:-5.9369178488850594e-003,right_val:0.0261388104408979,left_val:-0.3381235003471375},{features:[[5,0,1,3,-1.],[4,1,1,1,3.]],tilted:1,threshold:7.4244509451091290e-003,right_val:-0.6013135910034180,left_val:0.0416494794189930},{features:[[22,11,1,3,-1.],[21,12,1,1,3.]],tilted:1,threshold:-3.8341500330716372e-003,right_val:0.0227260906249285,left_val:-0.3147934973239899},{features:[[1,4,4,3,-1.],[3,4,2,3,2.]],tilted:0,threshold:5.9263929724693298e-003,right_val:0.2986125946044922,left_val:-0.0845179632306099},{features:[[19,4,6,8,-1.],[22,4,3,4,2.],[19,8,3,4,2.]],tilted:0,threshold:-0.0194444190710783,right_val:-0.0513583682477474,left_val:0.2213757932186127},{features:[[0,4,8,8,-1.],[0,4,4,4,2.],[4,8,4,4,2.]],tilted:0,threshold:0.0187752693891525,right_val:0.2647691071033478,left_val:-0.1223364025354385},{features:[[22,11,1,3,-1.],[21,12,1,1,3.]],tilted:1,threshold:6.4857508987188339e-003,right_val:-0.5246906280517578,left_val:0.0205634497106075},{features:[[0,1,24,14,-1.],[0,1,12,7,2.],[12,8,12,7,2.]],tilted:0,threshold:-0.2598725855350494,right_val:0.0345496907830238,left_val:-0.6570193767547607},{features:[[23,8,2,4,-1.],[23,9,2,2,2.]],tilted:0,threshold:-5.8150831609964371e-003,right_val:0.0302442405372858,left_val:-0.6595460772514343},{features:[[5,3,15,4,-1.],[5,4,15,2,2.]],tilted:0,threshold:-0.0261219404637814,right_val:-0.1252924054861069,left_val:0.1870407015085220},{features:[[8,1,9,3,-1.],[8,2,9,1,3.]],tilted:0,threshold:-5.7821800000965595e-003,right_val:-0.1182496026158333,left_val:0.2328509986400604},{features:[[0,8,2,4,-1.],[0,9,2,2,2.]],tilted:0,threshold:-2.9595640953630209e-003,right_val:0.0564655400812626,left_val:-0.4579938054084778},{features:[[18,10,7,2,-1.],[18,11,7,1,2.]],tilted:0,threshold:-0.0120882000774145,right_val:0.0244996603578329,left_val:-0.5189349055290222},{features:[[6,11,12,4,-1.],[6,12,12,2,2.]],tilted:0,threshold:-8.8109169155359268e-003,right_val:-0.0927671566605568,left_val:0.2570025026798248},{features:[[14,0,6,15,-1.],[16,0,2,15,3.]],tilted:0,threshold:-0.0459428504109383,right_val:0.0299462303519249,left_val:-0.4479719102382660},{features:[[0,10,7,2,-1.],[0,11,7,1,2.]],tilted:0,threshold:-0.0100041404366493,right_val:0.0364212691783905,left_val:-0.6149634122848511},{features:[[15,5,6,6,-1.],[18,5,3,3,2.],[15,8,3,3,2.]],tilted:0,threshold:-0.0116753997281194,right_val:-0.0613474808633327,left_val:0.1172877028584480},{features:[[5,0,6,15,-1.],[7,0,2,15,3.]],tilted:0,threshold:-0.0524668507277966,right_val:0.0306894704699516,left_val:-0.7613652944564819},{features:[[8,7,9,4,-1.],[8,8,9,2,2.]],tilted:0,threshold:0.0182263404130936,right_val:0.2695373892784119,left_val:-0.0854801833629608},{features:[[7,6,10,6,-1.],[7,8,10,2,3.]],tilted:0,threshold:-0.0452684201300144,right_val:-0.0773756429553032,left_val:0.3264470100402832},{features:[[19,11,1,3,-1.],[18,12,1,1,3.]],tilted:1,threshold:-8.1426883116364479e-003,right_val:9.3973511829972267e-003,left_val:-0.4582937955856323},{features:[[6,11,3,1,-1.],[7,12,1,1,3.]],tilted:1,threshold:-5.3349281661212444e-003,right_val:0.0352523885667324,left_val:-0.5775498151779175},{features:[[16,10,4,1,-1.],[16,10,2,1,2.]],tilted:0,threshold:-1.0754769900813699e-003,right_val:-0.1015762984752655,left_val:0.1434753984212875},{features:[[0,0,1,2,-1.],[0,1,1,1,2.]],tilted:0,threshold:-3.5198600962758064e-003,right_val:0.0328880697488785,left_val:-0.6082041263580322},{features:[[8,1,9,3,-1.],[8,2,9,1,3.]],tilted:0,threshold:0.0112483501434326,right_val:0.2323783040046692,left_val:-0.0905500426888466},{features:[[0,6,5,3,-1.],[0,7,5,1,3.]],tilted:0,threshold:-0.0119920196011662,right_val:0.0367036312818527,left_val:-0.5705332159996033},{features:[[21,8,1,4,-1.],[20,9,1,2,2.]],tilted:1,threshold:-0.0121055301278830,right_val:4.4598700478672981e-003,left_val:-0.7086269259452820}],threshold:-1.5637760162353516},{simpleClassifiers:[{features:[[5,1,15,6,-1.],[5,3,15,2,3.]],tilted:0,threshold:-0.1112890988588333,right_val:-0.2762526869773865,left_val:0.5214446783065796},{features:[[23,0,2,2,-1.],[24,0,1,1,2.],[23,1,1,1,2.]],tilted:0,threshold:-3.1310080084949732e-003,right_val:0.0243980996310711,left_val:-0.6073393225669861},{features:[[3,3,15,6,-1.],[3,5,15,2,3.]],tilted:0,threshold:-0.0975013524293900,right_val:-0.1652427017688751,left_val:0.5489286780357361},{features:[[19,0,6,9,-1.],[19,3,6,3,3.]],tilted:0,threshold:-0.0652247071266174,right_val:-0.2693930864334106,left_val:0.3402006924152374},{features:[[5,2,15,6,-1.],[5,4,15,2,3.]],tilted:0,threshold:0.1191802993416786,right_val:0.6395980119705200,left_val:-0.1123576015233994},{features:[[17,3,8,3,-1.],[17,4,8,1,3.]],tilted:0,threshold:-0.0140629801899195,right_val:-0.1284538954496384,left_val:0.3342761993408203},{features:[[4,3,8,4,-1.],[4,3,8,2,2.]],tilted:1,threshold:-0.0564025007188320,right_val:-0.1554156988859177,left_val:0.3790628910064697},{features:[[16,4,6,2,-1.],[16,5,6,1,2.]],tilted:0,threshold:7.1742408908903599e-003,right_val:0.1825089007616043,left_val:-0.1133088991045952},{features:[[0,0,24,12,-1.],[0,0,12,6,2.],[12,6,12,6,2.]],tilted:0,threshold:0.1259752959012985,right_val:-0.4853444099426270,left_val:0.0945485532283783},{features:[[22,10,3,2,-1.],[22,10,3,1,2.]],tilted:1,threshold:5.9177991934120655e-003,right_val:-0.5377039909362793,left_val:0.0701321363449097},{features:[[6,3,6,6,-1.],[4,5,6,2,3.]],tilted:1,threshold:-0.0439277403056622,right_val:-0.1080185994505882,left_val:0.3950741887092590},{features:[[14,4,9,1,-1.],[17,7,3,1,3.]],tilted:1,threshold:-9.8314704373478889e-003,right_val:-0.0468075983226299,left_val:0.0959606170654297},{features:[[3,10,2,3,-1.],[3,10,1,3,2.]],tilted:1,threshold:5.6353402324020863e-003,right_val:-0.5247716903686523,left_val:0.0943416282534599},{features:[[20,8,5,2,-1.],[20,8,5,1,2.]],tilted:1,threshold:-0.0115382801741362,right_val:0.0138055300340056,left_val:-0.5154880285263062},{features:[[0,9,16,6,-1.],[0,9,8,3,2.],[8,12,8,3,2.]],tilted:0,threshold:0.0286462493240833,right_val:0.2750437855720520,left_val:-0.1382701992988586},{features:[[6,2,13,3,-1.],[6,3,13,1,3.]],tilted:0,threshold:0.0138679798692465,right_val:0.3521435856819153,left_val:-0.1203586980700493},{features:[[0,1,3,4,-1.],[0,3,3,2,2.]],tilted:0,threshold:-4.0469371015205979e-004,right_val:-0.2590084075927734,left_val:0.1522637009620667},{features:[[8,0,9,12,-1.],[8,6,9,6,2.]],tilted:0,threshold:-0.1594581007957459,right_val:0.0514649897813797,left_val:-0.6391854882240295},{features:[[4,0,1,2,-1.],[4,0,1,1,2.]],tilted:1,threshold:-2.7928699273616076e-003,right_val:0.0542793795466423,left_val:-0.5840150713920593},{features:[[5,3,15,3,-1.],[5,4,15,1,3.]],tilted:0,threshold:0.0183532107621431,right_val:0.3529815971851349,left_val:-0.1051151007413864},{features:[[3,10,2,3,-1.],[3,10,1,3,2.]],tilted:1,threshold:-5.1810559816658497e-003,right_val:0.0798512324690819,left_val:-0.4741767942905426},{features:[[19,4,6,4,-1.],[22,4,3,2,2.],[19,6,3,2,2.]],tilted:0,threshold:9.2321299016475677e-003,right_val:0.1852813959121704,left_val:-0.0759327188134193},{features:[[0,3,8,4,-1.],[0,3,4,2,2.],[4,5,4,2,2.]],tilted:0,threshold:0.0121171101927757,right_val:0.2853634953498840,left_val:-0.1117528975009918},{features:[[19,10,5,3,-1.],[19,11,5,1,3.]],tilted:0,threshold:-7.2612818330526352e-003,right_val:0.0526883192360401,left_val:-0.5885108709335327},{features:[[1,10,5,3,-1.],[1,11,5,1,3.]],tilted:0,threshold:5.6134900078177452e-003,right_val:-0.5394589900970459,left_val:0.0474684908986092},{features:[[12,1,13,14,-1.],[12,8,13,7,2.]],tilted:0,threshold:-0.1945167928934097,right_val:0.0302108898758888,left_val:-0.5634222030639648},{features:[[0,1,13,14,-1.],[0,8,13,7,2.]],tilted:0,threshold:0.3550943136215210,right_val:-0.4980587959289551,left_val:0.0630894526839256},{features:[[11,3,6,12,-1.],[14,3,3,6,2.],[11,9,3,6,2.]],tilted:0,threshold:0.0331119708716869,right_val:-0.5246484875679016,left_val:0.0346324704587460},{features:[[9,5,6,10,-1.],[9,5,3,5,2.],[12,10,3,5,2.]],tilted:0,threshold:0.0342818088829517,right_val:-0.6470713019371033,left_val:0.0431439802050591},{features:[[20,8,5,4,-1.],[20,9,5,2,2.]],tilted:0,threshold:-7.8256614506244659e-003,right_val:0.0402393713593483,left_val:-0.4688000977039337},{features:[[0,8,5,4,-1.],[0,9,5,2,2.]],tilted:0,threshold:0.0111560495570302,right_val:-0.6095538735389710,left_val:0.0401505008339882},{features:[[8,9,9,3,-1.],[8,10,9,1,3.]],tilted:0,threshold:0.0113630602136254,right_val:0.3811689019203186,left_val:-0.0827489867806435},{features:[[7,10,6,4,-1.],[9,10,2,4,3.]],tilted:0,threshold:0.0204051006585360,right_val:-0.7467774152755737,left_val:0.0425756387412548},{features:[[6,6,14,4,-1.],[6,7,14,2,2.]],tilted:0,threshold:0.0191116295754910,right_val:0.2226520031690598,left_val:-0.1239197030663490},{features:[[9,6,5,4,-1.],[9,7,5,2,2.]],tilted:0,threshold:-7.3364898562431335e-003,right_val:-0.0926956906914711,left_val:0.3034206926822662},{features:[[22,5,3,6,-1.],[22,7,3,2,3.]],tilted:0,threshold:-8.6538922041654587e-003,right_val:0.0585405789315701,left_val:-0.3351745009422302},{features:[[0,5,3,6,-1.],[0,7,3,2,3.]],tilted:0,threshold:0.0347895994782448,right_val:-0.7483453154563904,left_val:0.0337578095495701},{features:[[17,1,5,4,-1.],[17,2,5,2,2.]],tilted:0,threshold:-0.0174188297241926,right_val:-0.0698786973953247,left_val:0.2445363998413086},{features:[[3,1,6,4,-1.],[3,2,6,2,2.]],tilted:0,threshold:3.5119079984724522e-003,right_val:0.2403315007686615,left_val:-0.1277886927127838},{features:[[21,14,4,1,-1.],[21,14,2,1,2.]],tilted:0,threshold:5.0669797929003835e-004,right_val:0.1439380049705505,left_val:-0.1169779002666473},{features:[[4,8,3,2,-1.],[5,9,1,2,3.]],tilted:1,threshold:-5.9512741863727570e-003,right_val:0.0478522293269634,left_val:-0.5078160762786865},{features:[[14,2,4,7,-1.],[14,2,2,7,2.]],tilted:0,threshold:0.0503778010606766,right_val:-0.7751696109771729,left_val:2.9282520990818739e-003},{features:[[7,2,4,7,-1.],[9,2,2,7,2.]],tilted:0,threshold:3.8862510118633509e-003,right_val:0.1570920050144196,left_val:-0.1550420969724655},{features:[[9,3,8,5,-1.],[11,3,4,5,2.]],tilted:0,threshold:0.0385116301476955,right_val:-0.6291617155075073,left_val:0.0230970401316881},{features:[[5,10,15,1,-1.],[10,10,5,1,3.]],tilted:0,threshold:-5.5746049620211124e-003,right_val:-0.1298052966594696,left_val:0.1807070970535278},{features:[[2,6,21,9,-1.],[9,6,7,9,3.]],tilted:0,threshold:0.1266476064920425,right_val:0.2957325875759125,left_val:-0.0865593999624252},{features:[[0,4,6,6,-1.],[0,6,6,2,3.]],tilted:0,threshold:5.4126111790537834e-003,right_val:0.1662916988134384,left_val:-0.1528324931859970},{features:[[1,12,24,3,-1.],[7,12,12,3,2.]],tilted:0,threshold:-0.0361530818045139,right_val:-0.1039886027574539,left_val:0.2797313034534454},{features:[[6,7,6,2,-1.],[6,8,6,1,2.]],tilted:0,threshold:7.1673998609185219e-003,right_val:0.2778528034687042,left_val:-0.0945642217993736},{features:[[13,8,2,4,-1.],[13,8,2,2,2.]],tilted:1,threshold:-6.7790350876748562e-003,right_val:-0.0839543119072914,left_val:0.1679068058729172},{features:[[8,6,8,5,-1.],[10,6,4,5,2.]],tilted:0,threshold:-0.0298676099628210,right_val:0.0346310697495937,left_val:-0.7236117124557495},{features:[[11,5,6,4,-1.],[11,6,6,2,2.]],tilted:0,threshold:6.5265512093901634e-003,right_val:0.1346033960580826,left_val:-0.1173760965466499},{features:[[0,14,4,1,-1.],[2,14,2,1,2.]],tilted:0,threshold:3.4080960176652297e-005,right_val:0.1322204023599625,left_val:-0.1753176003694534},{features:[[16,2,4,13,-1.],[17,2,2,13,2.]],tilted:0,threshold:-0.0176294595003128,right_val:0.0253861900418997,left_val:-0.5160853862762451},{features:[[0,7,1,4,-1.],[0,8,1,2,2.]],tilted:0,threshold:-1.5446309698745608e-003,right_val:0.0513300895690918,left_val:-0.4142186045646668},{features:[[24,0,1,2,-1.],[24,1,1,1,2.]],tilted:0,threshold:1.1520429980009794e-003,right_val:-0.3692800998687744,left_val:0.0366159491240978},{features:[[0,5,2,4,-1.],[1,5,1,4,2.]],tilted:0,threshold:-2.9612779617309570e-003,right_val:-0.0842714235186577,left_val:0.2446188032627106}],threshold:-1.5267670154571533},{simpleClassifiers:[{features:[[0,1,8,4,-1.],[0,3,8,2,2.]],tilted:0,threshold:-0.0141031695529819,right_val:-0.3928318023681641,left_val:0.2699790894985199},{features:[[15,11,10,4,-1.],[20,11,5,2,2.],[15,13,5,2,2.]],tilted:0,threshold:5.4714400321245193e-003,right_val:0.2749052047729492,left_val:-0.2269169986248016},{features:[[7,5,11,3,-1.],[7,6,11,1,3.]],tilted:0,threshold:0.0166354794055223,right_val:0.3224202096462250,left_val:-0.1547908037900925},{features:[[21,4,4,3,-1.],[21,4,2,3,2.]],tilted:0,threshold:-8.4477178752422333e-003,right_val:-0.1249654963612557,left_val:0.3320780992507935},{features:[[0,5,4,1,-1.],[2,5,2,1,2.]],tilted:0,threshold:-2.4904569145292044e-003,right_val:-0.1460298001766205,left_val:0.2900204956531525},{features:[[7,3,12,4,-1.],[7,4,12,2,2.]],tilted:0,threshold:0.0282104406505823,right_val:0.4805397987365723,left_val:-0.0831937119364738},{features:[[8,6,7,3,-1.],[8,7,7,1,3.]],tilted:0,threshold:9.3179903924465179e-003,right_val:0.3482030928134918,left_val:-0.1692426949739456},{features:[[16,0,9,14,-1.],[16,7,9,7,2.]],tilted:0,threshold:-0.0579102896153927,right_val:0.0840934887528419,left_val:-0.5040398836135864},{features:[[0,0,24,6,-1.],[0,0,12,3,2.],[12,3,12,3,2.]],tilted:0,threshold:0.0882126465439796,right_val:-0.4883395135402679,left_val:0.0733099877834320},{features:[[23,13,2,1,-1.],[23,13,1,1,2.]],tilted:0,threshold:6.0974380176048726e-005,right_val:0.1473277956247330,left_val:-0.1594507992267609},{features:[[0,13,24,2,-1.],[0,13,12,1,2.],[12,14,12,1,2.]],tilted:0,threshold:-0.0142063600942492,right_val:0.0507153607904911,left_val:-0.6365684866905212},{features:[[19,12,5,3,-1.],[19,13,5,1,3.]],tilted:0,threshold:-7.7181900851428509e-003,right_val:0.0328688994050026,left_val:-0.6330028772354126},{features:[[9,7,7,4,-1.],[9,8,7,2,2.]],tilted:0,threshold:0.0120071703568101,right_val:0.2893699109554291,left_val:-0.1254525035619736},{features:[[14,0,4,7,-1.],[14,0,2,7,2.]],tilted:1,threshold:0.0707826167345047,right_val:-0.5666698217391968,left_val:0.0305656604468822},{features:[[11,0,7,4,-1.],[11,0,7,2,2.]],tilted:1,threshold:-0.0504123307764530,right_val:0.0710048824548721,left_val:-0.5089793801307678},{features:[[9,4,14,2,-1.],[9,5,14,1,2.]],tilted:0,threshold:0.0220727995038033,right_val:0.2781184911727905,left_val:-0.1444841027259827},{features:[[3,2,15,4,-1.],[3,3,15,2,2.]],tilted:0,threshold:0.0147649403661489,right_val:0.3290185928344727,left_val:-0.1283989995718002},{features:[[19,12,5,3,-1.],[19,13,5,1,3.]],tilted:0,threshold:6.8206568248569965e-003,right_val:-0.5463265776634216,left_val:0.0654795467853546},{features:[[0,11,8,4,-1.],[0,11,4,2,2.],[4,13,4,2,2.]],tilted:0,threshold:2.0179790444672108e-003,right_val:0.1679659038782120,left_val:-0.2028342932462692},{features:[[7,9,11,6,-1.],[7,11,11,2,3.]],tilted:0,threshold:0.0250812191516161,right_val:0.3191860020160675,left_val:-0.1104943975806236},{features:[[0,11,7,4,-1.],[0,12,7,2,2.]],tilted:0,threshold:8.9391358196735382e-003,right_val:-0.5538399219512940,left_val:0.0734132081270218},{features:[[20,0,5,2,-1.],[20,1,5,1,2.]],tilted:0,threshold:-4.6396959805861115e-004,right_val:-0.1697127074003220,left_val:0.1123031005263329},{features:[[5,10,3,2,-1.],[6,11,1,2,3.]],tilted:1,threshold:-8.5602197796106339e-003,right_val:0.0417169481515884,left_val:-0.7347347736358643},{features:[[17,4,8,10,-1.],[21,4,4,5,2.],[17,9,4,5,2.]],tilted:0,threshold:-0.0389347188174725,right_val:-0.0792299434542656,left_val:0.2292626947164536},{features:[[5,3,15,2,-1.],[5,4,15,1,2.]],tilted:0,threshold:-0.0215415991842747,right_val:-0.1152340024709702,left_val:0.3007172048091888},{features:[[16,4,5,2,-1.],[16,5,5,1,2.]],tilted:0,threshold:4.9337721429765224e-003,right_val:0.1348572969436646,left_val:-0.1002838015556335},{features:[[1,0,22,10,-1.],[1,0,11,5,2.],[12,5,11,5,2.]],tilted:0,threshold:0.1615066975355148,right_val:-0.5656744837760925,left_val:0.0588171891868114},{features:[[20,0,5,2,-1.],[20,1,5,1,2.]],tilted:0,threshold:-0.0123260198161006,right_val:0.0187596306204796,left_val:-0.2823328077793121},{features:[[0,0,5,2,-1.],[0,1,5,1,2.]],tilted:0,threshold:5.2987951785326004e-003,right_val:-0.5719032287597656,left_val:0.0524063482880592},{features:[[10,1,6,12,-1.],[13,1,3,6,2.],[10,7,3,6,2.]],tilted:0,threshold:0.0289043206721544,right_val:-0.4854584038257599,left_val:0.0477108694612980},{features:[[0,0,1,8,-1.],[0,4,1,4,2.]],tilted:0,threshold:0.0155697297304869,right_val:-0.5100051760673523,left_val:0.0493178516626358},{features:[[6,0,13,6,-1.],[6,2,13,2,3.]],tilted:0,threshold:-0.0938120707869530,right_val:-0.1057069003582001,left_val:0.2564809024333954},{features:[[4,3,4,4,-1.],[3,4,4,2,2.]],tilted:1,threshold:-0.0286933295428753,right_val:-0.0509502515196800,left_val:0.5247043967247009},{features:[[20,8,5,3,-1.],[20,9,5,1,3.]],tilted:0,threshold:7.2301640175282955e-003,right_val:-0.4894312024116516,left_val:0.0583653002977371},{features:[[7,13,2,2,-1.],[7,13,1,1,2.],[8,14,1,1,2.]],tilted:0,threshold:8.2664839283097535e-005,right_val:0.1820268929004669,left_val:-0.1437218040227890},{features:[[16,13,2,2,-1.],[17,13,1,1,2.],[16,14,1,1,2.]],tilted:0,threshold:1.5241750515997410e-003,right_val:-0.3884589970111847,left_val:0.0201267991214991},{features:[[7,13,2,2,-1.],[7,13,1,1,2.],[8,14,1,1,2.]],tilted:0,threshold:-6.5512307628523558e-005,right_val:-0.1581206023693085,left_val:0.2280354052782059},{features:[[19,5,6,1,-1.],[21,5,2,1,3.]],tilted:0,threshold:2.4175599683076143e-003,right_val:0.2839250862598419,left_val:-0.0890450775623322},{features:[[0,8,6,6,-1.],[0,10,6,2,3.]],tilted:0,threshold:0.0343084894120693,right_val:-0.6263393163681030,left_val:0.0391304790973663},{features:[[6,8,13,4,-1.],[6,9,13,2,2.]],tilted:0,threshold:0.0127667998895049,right_val:0.2857427895069122,left_val:-0.0984294191002846},{features:[[3,10,8,1,-1.],[7,10,4,1,2.]],tilted:0,threshold:-2.7450299821794033e-003,right_val:-0.1267945021390915,left_val:0.2090786993503571},{features:[[16,11,4,4,-1.],[17,11,2,4,2.]],tilted:0,threshold:-7.0629850961267948e-003,right_val:0.0229746792465448,left_val:-0.4784719944000244},{features:[[5,6,15,2,-1.],[5,7,15,1,2.]],tilted:0,threshold:0.0109674101695418,right_val:0.1712857037782669,left_val:-0.1310741007328033},{features:[[3,1,20,10,-1.],[3,1,10,10,2.]],tilted:0,threshold:-0.1530689001083374,right_val:-0.0965401679277420,left_val:0.2361073046922684},{features:[[2,4,3,3,-1.],[2,5,3,1,3.]],tilted:0,threshold:2.1676090545952320e-003,right_val:0.2537584006786346,left_val:-0.1028804033994675},{features:[[16,11,4,4,-1.],[17,11,2,4,2.]],tilted:0,threshold:0.0107051497325301,right_val:-0.5868526101112366,left_val:0.0160892698913813},{features:[[5,11,4,4,-1.],[6,11,2,4,2.]],tilted:0,threshold:-6.1142919585108757e-003,right_val:0.0344046317040920,left_val:-0.6146798133850098},{features:[[17,4,8,10,-1.],[21,4,4,5,2.],[17,9,4,5,2.]],tilted:0,threshold:-0.0160057693719864,right_val:-0.0657811686396599,left_val:0.0954133197665215},{features:[[0,8,5,3,-1.],[0,9,5,1,3.]],tilted:0,threshold:8.5541699081659317e-003,right_val:-0.5490341186523438,left_val:0.0425793603062630},{features:[[23,13,2,1,-1.],[23,13,1,1,2.]],tilted:0,threshold:-5.5742941185599193e-005,right_val:-0.0978325977921486,left_val:0.1505846977233887},{features:[[0,13,2,1,-1.],[1,13,1,1,2.]],tilted:0,threshold:4.9888480134541169e-005,right_val:0.1464709937572479,left_val:-0.1522217988967896},{features:[[10,1,7,3,-1.],[10,2,7,1,3.]],tilted:0,threshold:9.3986131250858307e-003,right_val:0.2222844958305359,left_val:-0.0793018564581871},{features:[[0,3,8,12,-1.],[0,3,4,6,2.],[4,9,4,6,2.]],tilted:0,threshold:-0.0445945896208286,right_val:-0.0712599530816078,left_val:0.3217073082923889},{features:[[6,0,16,11,-1.],[6,0,8,11,2.]],tilted:0,threshold:0.2763071060180664,right_val:0.4636780917644501,left_val:-0.0312894396483898},{features:[[2,0,21,3,-1.],[9,0,7,3,3.]],tilted:0,threshold:-0.0459242798388004,right_val:-0.0946981832385063,left_val:0.2685551047325134},{features:[[23,1,2,12,-1.],[23,1,2,6,2.]],tilted:1,threshold:0.0328284502029419,right_val:-0.1909179985523224,left_val:0.0420088581740856},{features:[[2,0,1,2,-1.],[2,0,1,1,2.]],tilted:1,threshold:5.8416211977601051e-003,right_val:-0.5017232894897461,left_val:0.0443820804357529},{features:[[15,0,6,3,-1.],[17,0,2,3,3.]],tilted:0,threshold:0.0253127701580524,right_val:-0.4524691104888916,left_val:7.6768198050558567e-003},{features:[[8,9,6,4,-1.],[10,9,2,4,3.]],tilted:0,threshold:-0.0206803791224957,right_val:0.0277527105063200,left_val:-0.7082331180572510},{features:[[20,5,5,6,-1.],[20,7,5,2,3.]],tilted:0,threshold:1.9456259906291962e-003,right_val:0.0885240733623505,left_val:-0.1725641041994095},{features:[[0,4,24,8,-1.],[0,4,12,4,2.],[12,8,12,4,2.]],tilted:0,threshold:0.1318278014659882,right_val:-0.5236573815345764,left_val:0.0378756709396839},{features:[[22,10,1,4,-1.],[21,11,1,2,2.]],tilted:1,threshold:-4.8449821770191193e-003,right_val:0.0295521095395088,left_val:-0.3831801116466522},{features:[[7,0,11,3,-1.],[7,1,11,1,3.]],tilted:0,threshold:5.3295581601560116e-003,right_val:0.1712217032909393,left_val:-0.1172816008329392},{features:[[6,0,13,4,-1.],[6,1,13,2,2.]],tilted:0,threshold:-0.0353284589946270,right_val:-0.0650273412466049,left_val:0.3731549978256226}],threshold:-1.4507639408111572},{simpleClassifiers:[{features:[[7,11,11,4,-1.],[7,13,11,2,2.]],tilted:0,threshold:0.0136478496715426,right_val:0.3575335144996643,left_val:-0.2802368998527527},{features:[[21,3,4,12,-1.],[23,3,2,6,2.],[21,9,2,6,2.]],tilted:0,threshold:0.0123078199103475,right_val:0.2714886069297791,left_val:-0.1484645009040833},{features:[[2,4,21,6,-1.],[9,6,7,2,9.]],tilted:0,threshold:0.4659403860569000,right_val:0.5868018865585327,left_val:-0.0705008506774902},{features:[[23,3,2,10,-1.],[24,3,1,5,2.],[23,8,1,5,2.]],tilted:0,threshold:1.5693339519202709e-003,right_val:0.1375536024570465,left_val:-0.1150237023830414},{features:[[0,3,2,10,-1.],[0,3,1,5,2.],[1,8,1,5,2.]],tilted:0,threshold:2.5176738854497671e-003,right_val:0.2172407060861588,left_val:-0.1778890937566757},{features:[[24,10,1,4,-1.],[23,11,1,2,2.]],tilted:1,threshold:4.5299702323973179e-003,right_val:-0.5376703143119812,left_val:0.0458603501319885},{features:[[1,10,4,1,-1.],[2,11,2,1,2.]],tilted:1,threshold:4.0295510552823544e-003,right_val:-0.5803095102310181,left_val:0.0599071383476257},{features:[[8,10,9,4,-1.],[8,11,9,2,2.]],tilted:0,threshold:9.0281656011939049e-003,right_val:0.3474006950855255,left_val:-0.0889611616730690},{features:[[5,8,13,6,-1.],[5,11,13,3,2.]],tilted:0,threshold:-0.0710994601249695,right_val:-0.0876752585172653,left_val:0.4003205001354218},{features:[[5,0,15,4,-1.],[5,2,15,2,2.]],tilted:0,threshold:-0.0905078798532486,right_val:-0.1107280030846596,left_val:0.3202385008335114},{features:[[1,0,22,15,-1.],[12,0,11,15,2.]],tilted:0,threshold:0.3949914872646332,right_val:0.4376561045646668,left_val:-0.0544822700321674},{features:[[10,14,8,1,-1.],[12,14,4,1,2.]],tilted:0,threshold:6.0021281242370605e-003,right_val:-0.6277515888214111,left_val:0.0412968583405018},{features:[[1,3,8,4,-1.],[1,4,8,2,2.]],tilted:0,threshold:-0.0126753300428391,right_val:-0.1586595028638840,left_val:0.1864306032657623},{features:[[15,13,1,2,-1.],[15,14,1,1,2.]],tilted:0,threshold:5.2523188060149550e-004,right_val:0.1131825000047684,left_val:-0.0737809464335442},{features:[[5,2,15,6,-1.],[5,4,15,2,3.]],tilted:0,threshold:0.1519853025674820,right_val:0.5526459217071533,left_val:-0.0698502063751221},{features:[[23,12,2,1,-1.],[23,12,1,1,2.]],tilted:1,threshold:-5.9174448251724243e-003,right_val:0.0234292708337307,left_val:-0.4224376976490021},{features:[[2,12,1,2,-1.],[2,12,1,1,2.]],tilted:1,threshold:5.1085697486996651e-004,right_val:0.1747542023658752,left_val:-0.1782114058732987},{features:[[8,13,9,2,-1.],[11,13,3,2,3.]],tilted:0,threshold:-0.0286266505718231,right_val:0.0430335216224194,left_val:-0.7806789875030518},{features:[[8,0,8,2,-1.],[8,1,8,1,2.]],tilted:0,threshold:3.2388539984822273e-003,right_val:0.2301342934370041,left_val:-0.1174874976277351},{features:[[20,12,4,3,-1.],[20,13,4,1,3.]],tilted:0,threshold:-6.8310899659991264e-003,right_val:0.0224770605564117,left_val:-0.5170273780822754},{features:[[3,0,18,10,-1.],[3,0,9,5,2.],[12,5,9,5,2.]],tilted:0,threshold:-0.1381812989711762,right_val:0.0339458398520947,left_val:-0.6718307137489319},{features:[[10,12,6,3,-1.],[12,12,2,3,3.]],tilted:0,threshold:0.0129029303789139,right_val:-0.4739249050617218,left_val:0.0190411508083344},{features:[[0,0,1,8,-1.],[0,2,1,4,2.]],tilted:0,threshold:6.3398052006959915e-003,right_val:-0.5821130871772766,left_val:0.0412811301648617},{features:[[22,5,3,4,-1.],[22,6,3,2,2.]],tilted:0,threshold:8.4067512943875045e-005,right_val:0.1240853965282440,left_val:-0.2301639020442963},{features:[[0,5,4,4,-1.],[0,6,4,2,2.]],tilted:0,threshold:0.0172388590872288,right_val:-0.5818564891815186,left_val:0.0539665818214417},{features:[[6,0,14,10,-1.],[13,0,7,5,2.],[6,5,7,5,2.]],tilted:0,threshold:-0.0786773264408112,right_val:0.0569235086441040,left_val:-0.4061115086078644},{features:[[1,12,4,3,-1.],[1,13,4,1,3.]],tilted:0,threshold:5.5859591811895370e-003,right_val:-0.5646867752075195,left_val:0.0368424393236637},{features:[[20,7,2,2,-1.],[21,7,1,1,2.],[20,8,1,1,2.]],tilted:0,threshold:-6.1322399415075779e-004,right_val:-0.0668883100152016,left_val:0.1785047054290772},{features:[[3,7,2,2,-1.],[3,7,1,1,2.],[4,8,1,1,2.]],tilted:0,threshold:7.9400849062949419e-004,right_val:0.3054557144641876,left_val:-0.0783978328108788},{features:[[22,6,3,4,-1.],[22,7,3,2,2.]],tilted:0,threshold:0.0128271998837590,right_val:-0.6479570865631104,left_val:0.0404374599456787},{features:[[9,6,7,3,-1.],[9,7,7,1,3.]],tilted:0,threshold:0.0119779799133539,right_val:0.2267276048660278,left_val:-0.0993791595101357},{features:[[11,6,4,2,-1.],[11,7,4,1,2.]],tilted:0,threshold:-4.9378769472241402e-003,right_val:-0.0839221030473709,left_val:0.2706328034400940},{features:[[0,6,5,4,-1.],[0,7,5,2,2.]],tilted:0,threshold:0.0203377306461334,right_val:-0.6170961260795593,left_val:0.0400571115314960},{features:[[5,3,15,6,-1.],[5,5,15,2,3.]],tilted:0,threshold:-0.1582631021738052,right_val:-0.0776448771357536,left_val:0.3718011081218720},{features:[[4,4,5,2,-1.],[4,5,5,1,2.]],tilted:0,threshold:4.5150578953325748e-003,right_val:0.1946897059679031,left_val:-0.1424572020769119},{features:[[11,12,6,3,-1.],[13,12,2,3,3.]],tilted:0,threshold:-0.0179421696811914,right_val:0.0292347799986601,left_val:-0.7258480787277222},{features:[[3,0,1,3,-1.],[2,1,1,1,3.]],tilted:1,threshold:5.2153151482343674e-003,right_val:-0.4536756873130798,left_val:0.0460041500627995},{features:[[7,11,12,2,-1.],[11,11,4,2,3.]],tilted:0,threshold:-7.7863838523626328e-003,right_val:-0.1098980978131294,left_val:0.1746426969766617},{features:[[0,8,4,4,-1.],[0,9,4,2,2.]],tilted:0,threshold:9.4133447855710983e-003,right_val:-0.5983666181564331,left_val:0.0346476286649704},{features:[[8,7,9,3,-1.],[8,8,9,1,3.]],tilted:0,threshold:7.6218741014599800e-003,right_val:0.2037336975336075,left_val:-0.1057026013731957},{features:[[8,8,9,6,-1.],[8,10,9,2,3.]],tilted:0,threshold:0.0216018799692392,right_val:0.2887038886547089,left_val:-0.0909303426742554},{features:[[20,11,5,4,-1.],[20,12,5,2,2.]],tilted:0,threshold:-0.0118230897933245,right_val:0.0240826196968555,left_val:-0.6303614974021912},{features:[[7,5,8,3,-1.],[9,5,4,3,2.]],tilted:0,threshold:-0.0202329792082310,right_val:0.0235212203115225,left_val:-0.7420278787612915},{features:[[16,0,2,2,-1.],[17,0,1,1,2.],[16,1,1,1,2.]],tilted:0,threshold:6.4510147785767913e-004,right_val:0.1650166064500809,left_val:-0.0552557893097401},{features:[[0,11,5,4,-1.],[0,12,5,2,2.]],tilted:0,threshold:-8.1876022741198540e-003,right_val:0.0352346412837505,left_val:-0.5770931839942932},{features:[[16,0,2,2,-1.],[17,0,1,1,2.],[16,1,1,1,2.]],tilted:0,threshold:-4.5044958824291825e-004,right_val:-0.0824367776513100,left_val:0.1859780997037888},{features:[[5,9,6,6,-1.],[7,9,2,6,3.]],tilted:0,threshold:-0.0273097790777683,right_val:0.0276838503777981,left_val:-0.7204548716545105},{features:[[14,10,10,4,-1.],[19,10,5,2,2.],[14,12,5,2,2.]],tilted:0,threshold:7.3051019571721554e-003,right_val:0.1228180006146431,left_val:-0.0758159905672073},{features:[[6,6,3,1,-1.],[7,6,1,1,3.]],tilted:0,threshold:7.2118180105462670e-004,right_val:0.2212305068969727,left_val:-0.0847066268324852},{features:[[16,6,3,2,-1.],[17,6,1,2,3.]],tilted:0,threshold:-5.5794708896428347e-004,right_val:-0.0512673109769821,left_val:0.0922004431486130},{features:[[6,6,3,2,-1.],[7,6,1,2,3.]],tilted:0,threshold:-1.2906070332974195e-003,right_val:-0.0856367424130440,left_val:0.2364850938320160},{features:[[13,3,8,4,-1.],[12,4,8,2,2.]],tilted:1,threshold:-0.0234409496188164,right_val:0.0303556900471449,left_val:-0.3417592048645020},{features:[[2,0,1,2,-1.],[2,0,1,1,2.]],tilted:1,threshold:6.7003733420278877e-005,right_val:0.1098366007208824,left_val:-0.1778312027454376},{features:[[21,0,2,1,-1.],[21,0,1,1,2.]],tilted:1,threshold:-2.0913260523229837e-003,right_val:0.0488219298422337,left_val:-0.3296548128128052},{features:[[4,0,1,2,-1.],[4,0,1,1,2.]],tilted:1,threshold:5.2883368916809559e-003,right_val:-0.4229690134525299,left_val:0.0476020798087120},{features:[[13,1,8,6,-1.],[11,3,8,2,3.]],tilted:1,threshold:0.1046722009778023,right_val:-0.5163959860801697,left_val:0.0145577099174261},{features:[[12,3,4,8,-1.],[13,4,2,8,2.]],tilted:1,threshold:0.0410936884582043,right_val:-0.6734575033187866,left_val:0.0255694594234228},{features:[[3,0,20,15,-1.],[3,0,10,15,2.]],tilted:0,threshold:0.4545299112796783,right_val:0.4647259116172791,left_val:-0.0473212711513042},{features:[[9,0,7,3,-1.],[9,1,7,1,3.]],tilted:0,threshold:-4.4200271368026733e-003,right_val:-0.0805237367749214,left_val:0.2172905951738358},{features:[[12,1,5,2,-1.],[12,2,5,1,2.]],tilted:0,threshold:-3.3253689762204885e-003,right_val:-0.0847371667623520,left_val:0.1196364015340805},{features:[[6,1,13,3,-1.],[6,2,13,1,3.]],tilted:0,threshold:0.0152236903086305,right_val:0.2284111976623535,left_val:-0.0892436280846596},{features:[[14,3,10,12,-1.],[19,3,5,6,2.],[14,9,5,6,2.]],tilted:0,threshold:-0.0312239099293947,right_val:-0.1012998968362808,left_val:0.1464260965585709},{features:[[1,6,21,6,-1.],[8,6,7,6,3.]],tilted:0,threshold:-0.0729675367474556,right_val:-0.0998045280575752,left_val:0.1977909952402115},{features:[[12,0,10,12,-1.],[12,0,5,12,2.]],tilted:0,threshold:0.0434687100350857,right_val:0.1571179032325745,left_val:-0.0738932862877846},{features:[[7,8,11,3,-1.],[7,9,11,1,3.]],tilted:0,threshold:7.7427257783710957e-003,right_val:0.2449675947427750,left_val:-0.0907922536134720},{features:[[2,5,22,10,-1.],[2,5,11,10,2.]],tilted:0,threshold:-0.0834884494543076,right_val:-0.1288128942251205,left_val:0.1732859015464783},{features:[[5,4,15,4,-1.],[5,6,15,2,2.]],tilted:0,threshold:0.0421115085482597,right_val:0.1373448967933655,left_val:-0.1475321054458618},{features:[[7,1,15,6,-1.],[7,3,15,2,3.]],tilted:0,threshold:0.0966737270355225,right_val:0.3563303947448731,left_val:-0.0551961399614811},{features:[[0,8,2,6,-1.],[0,10,2,2,3.]],tilted:0,threshold:-8.8993981480598450e-003,right_val:0.0388906002044678,left_val:-0.5261930823326111},{features:[[5,1,15,4,-1.],[5,2,15,2,2.]],tilted:0,threshold:-0.0238508302718401,right_val:-0.1050153970718384,left_val:0.1924559026956558},{features:[[7,8,2,2,-1.],[7,8,1,1,2.],[8,9,1,1,2.]],tilted:0,threshold:-7.4902130290865898e-004,right_val:-0.0738597288727760,left_val:0.2476740926504135},{features:[[11,9,9,2,-1.],[14,9,3,2,3.]],tilted:0,threshold:-0.0230488497763872,right_val:0.0295383799821138,left_val:-0.5220348238945007},{features:[[7,8,2,2,-1.],[7,8,1,1,2.],[8,9,1,1,2.]],tilted:0,threshold:5.7920900871977210e-004,right_val:0.2493984997272492,left_val:-0.0807055011391640},{features:[[17,10,8,4,-1.],[17,11,8,2,2.]],tilted:0,threshold:-0.0254354309290648,right_val:0.0163280703127384,left_val:-0.6520490050315857},{features:[[0,10,8,4,-1.],[0,11,8,2,2.]],tilted:0,threshold:0.0176391601562500,right_val:-0.6850522756576538,left_val:0.0246949195861816},{features:[[16,11,6,4,-1.],[18,11,2,4,3.]],tilted:0,threshold:0.0205357391387224,right_val:-0.4285225868225098,left_val:0.0165182203054428},{features:[[0,13,24,1,-1.],[6,13,12,1,2.]],tilted:0,threshold:0.0111132804304361,right_val:0.2062001973390579,left_val:-0.0871591791510582}],threshold:-1.3936280012130737},{simpleClassifiers:[{features:[[0,9,10,6,-1.],[0,9,5,3,2.],[5,12,5,3,2.]],tilted:0,threshold:0.0140618495643139,right_val:0.4017829895019531,left_val:-0.2737283110618591},{features:[[13,5,10,10,-1.],[18,5,5,5,2.],[13,10,5,5,2.]],tilted:0,threshold:-0.0334245301783085,right_val:-0.1524070948362351,left_val:0.3433864116668701},{features:[[0,4,4,2,-1.],[2,4,2,2,2.]],tilted:0,threshold:-3.3982729073613882e-003,right_val:-0.2162856012582779,left_val:0.3046114146709442},{features:[[13,5,12,10,-1.],[19,5,6,5,2.],[13,10,6,5,2.]],tilted:0,threshold:0.0673939511179924,right_val:0.3304964005947113,left_val:-0.0539562106132507},{features:[[0,5,12,10,-1.],[0,5,6,5,2.],[6,10,6,5,2.]],tilted:0,threshold:-0.0515447482466698,right_val:-0.1334261000156403,left_val:0.3804036974906921},{features:[[11,11,3,4,-1.],[11,13,3,2,2.]],tilted:0,threshold:3.6630779504776001e-003,right_val:0.2139966934919357,left_val:-0.1760202944278717},{features:[[5,8,2,5,-1.],[5,8,1,5,2.]],tilted:1,threshold:7.8836623579263687e-003,right_val:-0.5150743126869202,left_val:0.0570616200566292},{features:[[4,14,18,1,-1.],[4,14,9,1,2.]],tilted:0,threshold:-8.9480048045516014e-003,right_val:-0.1190536990761757,left_val:0.2230996936559677},{features:[[1,0,1,6,-1.],[1,3,1,3,2.]],tilted:0,threshold:-5.5760587565600872e-004,right_val:-0.2558285892009735,left_val:0.0999659672379494},{features:[[8,9,9,4,-1.],[8,10,9,2,2.]],tilted:0,threshold:9.5389392226934433e-003,right_val:0.3246265947818756,left_val:-0.0655315071344376},{features:[[0,9,5,4,-1.],[0,10,5,2,2.]],tilted:0,threshold:7.7904132194817066e-003,right_val:-0.6068859100341797,left_val:0.0450260303914547},{features:[[19,5,6,2,-1.],[21,5,2,2,3.]],tilted:0,threshold:4.0692770853638649e-003,right_val:0.1570695042610169,left_val:-0.0624743513762951},{features:[[0,5,6,2,-1.],[2,5,2,2,3.]],tilted:0,threshold:3.1110940035432577e-003,right_val:0.2600801885128021,left_val:-0.0744680091738701},{features:[[13,9,6,3,-1.],[15,9,2,3,3.]],tilted:0,threshold:0.0156514495611191,right_val:-0.5172523260116577,left_val:0.0255663506686687},{features:[[2,3,21,9,-1.],[9,3,7,9,3.]],tilted:0,threshold:0.2044613063335419,right_val:0.3323906958103180,left_val:-0.0763430967926979},{features:[[11,9,10,2,-1.],[11,9,5,2,2.]],tilted:0,threshold:-0.0101691596210003,right_val:-0.1091597974300385,left_val:0.1606681048870087},{features:[[0,0,24,14,-1.],[0,0,12,7,2.],[12,7,12,7,2.]],tilted:0,threshold:0.1894780993461609,right_val:-0.5398759841918945,left_val:0.0538599416613579},{features:[[5,2,15,6,-1.],[5,4,15,2,3.]],tilted:0,threshold:-0.1479240059852600,right_val:-0.1132820993661881,left_val:0.2385465949773789},{features:[[2,0,16,11,-1.],[10,0,8,11,2.]],tilted:0,threshold:-0.1483031064271927,right_val:-0.0753156766295433,left_val:0.3646511137485504},{features:[[5,0,15,6,-1.],[5,2,15,2,3.]],tilted:0,threshold:-0.1325532943010330,right_val:-0.0949441567063332,left_val:0.2919555902481079},{features:[[10,5,5,4,-1.],[10,6,5,2,2.]],tilted:0,threshold:-0.0163901709020138,right_val:-0.0685021281242371,left_val:0.3920511901378632},{features:[[23,0,2,3,-1.],[23,1,2,1,3.]],tilted:0,threshold:-6.3240979798138142e-003,right_val:0.0337768010795116,left_val:-0.6633772253990173},{features:[[0,0,6,3,-1.],[0,1,6,1,3.]],tilted:0,threshold:0.0147409504279494,right_val:-0.5016931891441345,left_val:0.0431423708796501},{features:[[10,5,15,2,-1.],[10,6,15,1,2.]],tilted:0,threshold:0.0171020403504372,right_val:0.2036074995994568,left_val:-0.1739968061447144},{features:[[0,4,6,4,-1.],[0,4,3,2,2.],[3,6,3,2,2.]],tilted:0,threshold:-7.5232060626149178e-003,right_val:-0.0894730314612389,left_val:0.2614240050315857},{features:[[21,7,2,4,-1.],[20,8,2,2,2.]],tilted:1,threshold:8.0899456515908241e-003,right_val:-0.3869245946407318,left_val:0.0491316393017769},{features:[[4,7,4,2,-1.],[5,8,2,2,2.]],tilted:1,threshold:-0.0111914901062846,right_val:0.0292793400585651,left_val:-0.7151393890380859},{features:[[24,13,1,2,-1.],[24,14,1,1,2.]],tilted:0,threshold:-6.4855492382775992e-005,right_val:-0.1195824965834618,left_val:0.1147895976901054},{features:[[2,0,4,15,-1.],[3,0,2,15,2.]],tilted:0,threshold:0.0263162907212973,right_val:-0.8071029186248779,left_val:0.0260859299451113},{features:[[21,0,4,1,-1.],[22,1,2,1,2.]],tilted:1,threshold:-0.0132494196295738,right_val:7.5486088171601295e-003,left_val:-0.3211443126201630},{features:[[4,0,1,4,-1.],[3,1,1,2,2.]],tilted:1,threshold:6.2180599197745323e-003,right_val:-0.4065248966217041,left_val:0.0555592402815819},{features:[[1,1,24,14,-1.],[13,1,12,7,2.],[1,8,12,7,2.]],tilted:0,threshold:0.1724980026483536,right_val:-0.5056337714195252,left_val:0.0407503582537174},{features:[[6,9,6,6,-1.],[8,9,2,6,3.]],tilted:0,threshold:-0.0216798391193151,right_val:0.0264780297875404,left_val:-0.6235452890396118},{features:[[5,3,15,4,-1.],[10,3,5,4,3.]],tilted:0,threshold:0.0167031493037939,right_val:0.1374935954809189,left_val:-0.1379484981298447},{features:[[0,0,20,10,-1.],[5,0,10,10,2.]],tilted:0,threshold:-0.0904578119516373,right_val:-0.0822857320308685,left_val:0.2364515066146851},{features:[[19,3,6,12,-1.],[22,3,3,6,2.],[19,9,3,6,2.]],tilted:0,threshold:-0.0319220200181007,right_val:-0.0472433306276798,left_val:0.2578540146350861},{features:[[3,2,7,2,-1.],[3,3,7,1,2.]],tilted:0,threshold:-0.0107858600094914,right_val:-0.1092626005411148,left_val:0.1915684044361115},{features:[[19,3,6,12,-1.],[22,3,3,6,2.],[19,9,3,6,2.]],tilted:0,threshold:0.0153568601235747,right_val:0.1492947041988373,left_val:-0.0915980264544487},{features:[[0,3,6,12,-1.],[0,3,3,6,2.],[3,9,3,6,2.]],tilted:0,threshold:-0.0298386197537184,right_val:-0.0698615685105324,left_val:0.3693186044692993},{features:[[19,14,6,1,-1.],[19,14,3,1,2.]],tilted:0,threshold:1.5088700456544757e-003,right_val:0.1167493984103203,left_val:-0.0684053674340248},{features:[[4,2,6,13,-1.],[6,2,2,13,3.]],tilted:0,threshold:-0.0391593612730503,right_val:0.0376962982118130,left_val:-0.5139203071594238},{features:[[17,14,8,1,-1.],[19,14,4,1,2.]],tilted:0,threshold:9.6957627683877945e-003,right_val:-0.4685910940170288,left_val:0.0178152993321419},{features:[[0,14,8,1,-1.],[2,14,4,1,2.]],tilted:0,threshold:7.2683161124587059e-004,right_val:0.1574900001287460,left_val:-0.1310783028602600},{features:[[23,11,2,2,-1.],[23,11,2,1,2.]],tilted:1,threshold:3.9894571527838707e-003,right_val:-0.4237715899944305,left_val:0.0452235005795956},{features:[[2,11,2,2,-1.],[2,11,1,2,2.]],tilted:1,threshold:-5.1600970327854156e-003,right_val:0.0348056405782700,left_val:-0.5150998830795288},{features:[[8,4,9,4,-1.],[8,5,9,2,2.]],tilted:0,threshold:-0.0237389300018549,right_val:-0.0842292308807373,left_val:0.2213699966669083},{features:[[8,4,9,3,-1.],[8,5,9,1,3.]],tilted:0,threshold:0.0145637700334191,right_val:0.2186468988656998,left_val:-0.0898087024688721},{features:[[22,6,2,4,-1.],[23,6,1,2,2.],[22,8,1,2,2.]],tilted:0,threshold:7.2849658317863941e-004,right_val:0.1204996034502983,left_val:-0.0709035396575928},{features:[[7,3,6,8,-1.],[9,3,2,8,3.]],tilted:0,threshold:-0.0311498604714870,right_val:0.0294798705726862,left_val:-0.6067348122596741},{features:[[22,4,3,4,-1.],[22,5,3,2,2.]],tilted:0,threshold:0.0167685598134995,right_val:-0.4164066910743713,left_val:0.0236525908112526},{features:[[3,9,4,2,-1.],[4,10,2,2,2.]],tilted:1,threshold:-8.9033348485827446e-003,right_val:0.0302125699818134,left_val:-0.5536022186279297},{features:[[17,7,2,2,-1.],[18,7,1,1,2.],[17,8,1,1,2.]],tilted:0,threshold:5.3961132653057575e-004,right_val:0.1531303972005844,left_val:-0.0588473901152611},{features:[[9,11,6,1,-1.],[11,11,2,1,3.]],tilted:0,threshold:-8.3886012434959412e-003,right_val:0.0250979401171207,left_val:-0.7052780985832214},{features:[[17,7,2,2,-1.],[18,7,1,1,2.],[17,8,1,1,2.]],tilted:0,threshold:-3.4085000515915453e-004,right_val:-0.1048467978835106,left_val:0.1771869063377380},{features:[[0,7,2,4,-1.],[0,8,2,2,2.]],tilted:0,threshold:6.1828009784221649e-003,right_val:-0.4948574900627136,left_val:0.0330388285219669},{features:[[20,5,5,6,-1.],[20,7,5,2,3.]],tilted:0,threshold:8.2702568033710122e-004,right_val:0.0777885988354683,left_val:-0.1844830960035324},{features:[[6,7,2,2,-1.],[6,7,1,1,2.],[7,8,1,1,2.]],tilted:0,threshold:-6.0980831040069461e-004,right_val:-0.0837520435452461,left_val:0.1959578990936279},{features:[[17,7,2,2,-1.],[18,7,1,1,2.],[17,8,1,1,2.]],tilted:0,threshold:1.2273030006326735e-004,right_val:0.1209300011396408,left_val:-0.0814708098769188},{features:[[6,7,2,2,-1.],[6,7,1,1,2.],[7,8,1,1,2.]],tilted:0,threshold:4.6565610682591796e-004,right_val:0.2288299947977066,left_val:-0.0953319519758224},{features:[[15,0,4,9,-1.],[16,0,2,9,2.]],tilted:0,threshold:-0.0216477997601032,right_val:0.0170615408569574,left_val:-0.6933805942535400},{features:[[5,1,14,14,-1.],[5,1,7,7,2.],[12,8,7,7,2.]],tilted:0,threshold:0.0595006607472897,right_val:-0.2782197892665863,left_val:0.0526031702756882},{features:[[15,0,4,9,-1.],[16,0,2,9,2.]],tilted:0,threshold:0.0253651998937130,right_val:-0.6383489966392517,left_val:8.9954538270831108e-003},{features:[[0,7,5,3,-1.],[0,8,5,1,3.]],tilted:0,threshold:-3.9667091332376003e-003,right_val:0.0470112897455692,left_val:-0.3175272047519684},{features:[[21,2,3,4,-1.],[22,3,1,4,3.]],tilted:1,threshold:8.2784779369831085e-003,right_val:0.2219938933849335,left_val:-0.0544440597295761},{features:[[6,0,4,15,-1.],[7,0,2,15,2.]],tilted:0,threshold:-0.0221254508942366,right_val:0.0225456394255161,left_val:-0.6738150715827942},{features:[[21,2,3,4,-1.],[22,3,1,4,3.]],tilted:1,threshold:-0.0180159192532301,right_val:-0.0419279783964157,left_val:0.1972057968378067},{features:[[4,2,4,3,-1.],[3,3,4,1,3.]],tilted:1,threshold:8.4426235407590866e-003,right_val:0.2649214863777161,left_val:-0.0605471916496754},{features:[[13,5,3,7,-1.],[14,6,1,7,3.]],tilted:1,threshold:-0.0325668416917324,right_val:0.0118406098335981,left_val:-0.7107285857200623},{features:[[4,10,15,1,-1.],[9,10,5,1,3.]],tilted:0,threshold:-4.7655492089688778e-003,right_val:-0.1150531992316246,left_val:0.1384397000074387},{features:[[12,6,10,9,-1.],[12,6,5,9,2.]],tilted:0,threshold:0.0569362901151180,right_val:0.2665694057941437,left_val:-0.0613397099077702},{features:[[1,1,22,14,-1.],[12,1,11,14,2.]],tilted:0,threshold:0.1374146044254303,right_val:0.1789363026618958,left_val:-0.1139679029583931},{features:[[11,8,3,2,-1.],[11,9,3,1,2.]],tilted:0,threshold:3.4123009536415339e-003,right_val:0.2595616877079010,left_val:-0.0668940767645836},{features:[[2,5,11,2,-1.],[2,6,11,1,2.]],tilted:0,threshold:0.0116290198639035,right_val:0.1518495976924896,left_val:-0.1346206963062286}],threshold:-1.3217060565948486},{simpleClassifiers:[{features:[[4,1,10,4,-1.],[3,2,10,2,2.]],tilted:1,threshold:-0.0302658006548882,right_val:-0.1337769925594330,left_val:0.3809668123722076},{features:[[5,1,15,6,-1.],[5,3,15,2,3.]],tilted:0,threshold:-0.1888993978500366,right_val:-0.1143490970134735,left_val:0.3472220003604889},{features:[[0,9,6,6,-1.],[0,9,3,3,2.],[3,12,3,3,2.]],tilted:0,threshold:4.4756601564586163e-003,right_val:0.1983720064163208,left_val:-0.1779001951217651},{features:[[19,3,5,2,-1.],[19,4,5,1,2.]],tilted:0,threshold:-9.2559102922677994e-003,right_val:-0.0956856831908226,left_val:0.2553296089172363},{features:[[2,10,14,4,-1.],[2,10,7,2,2.],[9,12,7,2,2.]],tilted:0,threshold:0.0103751895949245,right_val:0.2047273963689804,left_val:-0.1290100961923599},{features:[[1,3,24,8,-1.],[9,3,8,8,3.]],tilted:0,threshold:0.2527360022068024,right_val:0.3413710892200470,left_val:-0.0779134780168533},{features:[[0,8,2,6,-1.],[0,10,2,2,3.]],tilted:0,threshold:7.9952310770750046e-003,right_val:-0.4138369858264923,left_val:0.1191667988896370},{features:[[23,14,2,1,-1.],[23,14,1,1,2.]],tilted:0,threshold:6.6510503529570997e-005,right_val:0.1328932046890259,left_val:-0.2305306047201157},{features:[[0,4,6,4,-1.],[0,4,3,2,2.],[3,6,3,2,2.]],tilted:0,threshold:0.0104297399520874,right_val:0.2935121059417725,left_val:-0.0622061118483543},{features:[[3,13,21,1,-1.],[10,13,7,1,3.]],tilted:0,threshold:-9.4513092190027237e-003,right_val:-0.1161310002207756,left_val:0.1671503931283951},{features:[[0,0,24,14,-1.],[0,0,12,7,2.],[12,7,12,7,2.]],tilted:0,threshold:-0.1386305987834930,right_val:0.0725729763507843,left_val:-0.4514685869216919},{features:[[24,0,1,10,-1.],[24,5,1,5,2.]],tilted:0,threshold:-0.0154232997447252,right_val:0.0248409193009138,left_val:-0.4277118146419525},{features:[[4,11,2,2,-1.],[4,11,1,2,2.]],tilted:1,threshold:-6.5782992169260979e-003,right_val:0.0402618311345577,left_val:-0.6540787816047669},{features:[[23,14,2,1,-1.],[23,14,1,1,2.]],tilted:0,threshold:-6.8917557655368000e-005,right_val:-0.1195247992873192,left_val:0.2068260014057159},{features:[[0,14,2,1,-1.],[1,14,1,1,2.]],tilted:0,threshold:7.1416288847103715e-005,right_val:0.1518989056348801,left_val:-0.1625899970531464},{features:[[7,2,11,6,-1.],[7,4,11,2,3.]],tilted:0,threshold:0.1354866027832031,right_val:0.4712490141391754,left_val:-0.0504554286599159},{features:[[2,2,2,2,-1.],[2,2,1,2,2.]],tilted:1,threshold:1.1286230292171240e-003,right_val:0.1492028981447220,left_val:-0.1934940963983536},{features:[[24,0,1,10,-1.],[24,5,1,5,2.]],tilted:0,threshold:0.0376871302723885,right_val:-0.5566216707229614,left_val:-6.5130472648888826e-004},{features:[[0,0,1,10,-1.],[0,5,1,5,2.]],tilted:0,threshold:-0.0177724994719028,right_val:0.0462512709200382,left_val:-0.5733047127723694},{features:[[12,11,6,2,-1.],[14,11,2,2,3.]],tilted:0,threshold:-0.0141524598002434,right_val:0.0153570203110576,left_val:-0.7905998826026917},{features:[[2,0,20,2,-1.],[7,0,10,2,2.]],tilted:0,threshold:-0.0194474104791880,right_val:-0.1021943986415863,left_val:0.2123239040374756},{features:[[10,0,10,4,-1.],[10,0,5,4,2.]],tilted:0,threshold:0.0129150198772550,right_val:0.1457864940166473,left_val:-0.0788644626736641},{features:[[0,0,20,1,-1.],[10,0,10,1,2.]],tilted:0,threshold:7.7283121645450592e-003,right_val:0.2055318057537079,left_val:-0.1338106989860535},{features:[[8,4,10,3,-1.],[8,5,10,1,3.]],tilted:0,threshold:-0.0264210291206837,right_val:-0.0841038301587105,left_val:0.2729040980339050},{features:[[9,6,7,6,-1.],[9,8,7,2,3.]],tilted:0,threshold:-0.0216425806283951,right_val:-0.0997976064682007,left_val:0.2165616005659103},{features:[[8,5,9,3,-1.],[8,6,9,1,3.]],tilted:0,threshold:-0.0186041705310345,right_val:-0.0684646219015121,left_val:0.3167817890644074},{features:[[6,0,1,3,-1.],[5,1,1,1,3.]],tilted:1,threshold:7.9184472560882568e-003,right_val:-0.5849621891975403,left_val:0.0389325916767120},{features:[[24,0,1,4,-1.],[24,2,1,2,2.]],tilted:0,threshold:-9.0868779807351530e-005,right_val:-0.2693997025489807,left_val:0.1183537989854813},{features:[[9,10,2,1,-1.],[10,10,1,1,2.]],tilted:0,threshold:-6.3271610997617245e-005,right_val:-0.1414014995098114,left_val:0.1483621001243591},{features:[[22,10,1,4,-1.],[21,11,1,2,2.]],tilted:1,threshold:3.0123859178274870e-003,right_val:-0.3168076872825623,left_val:0.0475597009062767},{features:[[4,0,6,5,-1.],[6,0,2,5,3.]],tilted:0,threshold:0.0202028602361679,right_val:-0.4958786964416504,left_val:0.0363369397819042},{features:[[17,3,8,12,-1.],[21,3,4,6,2.],[17,9,4,6,2.]],tilted:0,threshold:0.0681129470467567,right_val:0.3745648860931397,left_val:-0.0636018067598343},{features:[[0,3,8,12,-1.],[0,3,4,6,2.],[4,9,4,6,2.]],tilted:0,threshold:-0.0613449215888977,right_val:-0.0626903176307678,left_val:0.3703984022140503},{features:[[10,3,6,10,-1.],[13,3,3,5,2.],[10,8,3,5,2.]],tilted:0,threshold:-0.0239223092794418,right_val:0.0568292401731014,left_val:-0.3475331962108612},{features:[[3,10,4,1,-1.],[4,11,2,1,2.]],tilted:1,threshold:4.4279401190578938e-003,right_val:-0.5085908770561218,left_val:0.0318974405527115},{features:[[16,2,9,4,-1.],[16,2,9,2,2.]],tilted:1,threshold:-0.0923664569854736,right_val:9.9938698112964630e-003,left_val:-0.4889659881591797},{features:[[9,2,4,9,-1.],[9,2,2,9,2.]],tilted:1,threshold:-3.1878310255706310e-003,right_val:-0.2382344007492065,left_val:0.0857494324445724},{features:[[20,9,3,3,-1.],[20,10,3,1,3.]],tilted:0,threshold:6.2605291604995728e-003,right_val:-0.5500137209892273,left_val:0.0244128108024597},{features:[[6,1,13,4,-1.],[6,2,13,2,2.]],tilted:0,threshold:0.0217170491814613,right_val:0.2182479947805405,left_val:-0.0847987011075020},{features:[[10,4,5,4,-1.],[10,5,5,2,2.]],tilted:0,threshold:0.0102959601208568,right_val:0.1945870965719223,left_val:-0.1032914966344833},{features:[[0,5,3,3,-1.],[0,6,3,1,3.]],tilted:0,threshold:0.0121496301144362,right_val:-0.5932865738868713,left_val:0.0322238989174366},{features:[[21,5,4,4,-1.],[21,6,4,2,2.]],tilted:0,threshold:0.0191168300807476,right_val:-0.4538871943950653,left_val:0.0309407506138086},{features:[[0,5,4,4,-1.],[0,6,4,2,2.]],tilted:0,threshold:7.1067700628191233e-004,right_val:0.1262297928333283,left_val:-0.1545806974172592},{features:[[8,9,9,6,-1.],[8,11,9,2,3.]],tilted:0,threshold:-0.0294274203479290,right_val:-0.0861818864941597,left_val:0.2070481926202774},{features:[[4,11,3,1,-1.],[5,12,1,1,3.]],tilted:1,threshold:-3.7067469675093889e-003,right_val:0.0383589081466198,left_val:-0.5155926942825317},{features:[[23,14,2,1,-1.],[23,14,1,1,2.]],tilted:0,threshold:6.0146670875838026e-005,right_val:0.0884054377675056,left_val:-0.1023617982864380},{features:[[0,14,2,1,-1.],[1,14,1,1,2.]],tilted:0,threshold:-6.8713612563442439e-005,right_val:-0.0994443595409393,left_val:0.1984436959028244},{features:[[11,1,4,14,-1.],[11,8,4,7,2.]],tilted:0,threshold:-0.0848333984613419,right_val:0.0397581607103348,left_val:-0.3900933861732483},{features:[[4,0,2,3,-1.],[3,1,2,1,3.]],tilted:1,threshold:0.0115453395992517,right_val:-0.5021548867225647,left_val:0.0299104899168015},{features:[[24,12,1,2,-1.],[24,13,1,1,2.]],tilted:0,threshold:1.2721769744530320e-003,right_val:-0.3856284022331238,left_val:0.0357883498072624},{features:[[0,1,14,14,-1.],[0,8,14,7,2.]],tilted:0,threshold:0.3789406120777130,right_val:-0.3726823925971985,left_val:0.0429151207208633},{features:[[13,0,6,15,-1.],[15,0,2,15,3.]],tilted:0,threshold:0.0587286688387394,right_val:-0.7129334807395935,left_val:0.0175066608935595},{features:[[0,1,1,4,-1.],[0,3,1,2,2.]],tilted:0,threshold:-7.2667418862693012e-005,right_val:-0.1796067953109741,left_val:0.0852374136447906},{features:[[24,13,1,2,-1.],[24,14,1,1,2.]],tilted:0,threshold:-2.5661939289420843e-003,right_val:0.0211067497730255,left_val:-0.4941900074481964},{features:[[0,13,1,2,-1.],[0,14,1,1,2.]],tilted:0,threshold:-6.2544771935790777e-005,right_val:-0.1358107030391693,left_val:0.1260727941989899},{features:[[23,11,2,4,-1.],[23,12,2,2,2.]],tilted:0,threshold:-3.3382088877260685e-003,right_val:0.0313290804624558,left_val:-0.3425475955009460},{features:[[0,11,2,4,-1.],[0,12,2,2,2.]],tilted:0,threshold:4.0032588876783848e-003,right_val:-0.4785414040088654,left_val:0.0353341810405254},{features:[[16,10,2,2,-1.],[17,10,1,1,2.],[16,11,1,1,2.]],tilted:0,threshold:7.8725446655880660e-005,right_val:0.1098069027066231,left_val:-0.0865093916654587},{features:[[7,10,2,2,-1.],[7,10,1,1,2.],[8,11,1,1,2.]],tilted:0,threshold:3.5411381395533681e-004,right_val:0.1815810948610306,left_val:-0.0866223275661469},{features:[[1,0,24,6,-1.],[13,0,12,3,2.],[1,3,12,3,2.]],tilted:0,threshold:-0.1003293022513390,right_val:0.0407990105450153,left_val:-0.4118100106716156},{features:[[6,1,6,12,-1.],[8,1,2,12,3.]],tilted:0,threshold:0.0457341782748699,right_val:-0.5801063179969788,left_val:0.0250630006194115},{features:[[19,6,6,3,-1.],[19,7,6,1,3.]],tilted:0,threshold:0.0143571095541120,right_val:-0.3111906945705414,left_val:0.0273739993572235},{features:[[5,6,7,2,-1.],[5,7,7,1,2.]],tilted:0,threshold:4.2823958210647106e-003,right_val:0.1300680041313171,left_val:-0.1212206035852432},{features:[[9,6,7,4,-1.],[9,7,7,2,2.]],tilted:0,threshold:-0.0191692691296339,right_val:-0.0586979016661644,left_val:0.3547115027904511},{features:[[0,6,6,3,-1.],[0,7,6,1,3.]],tilted:0,threshold:0.0203719399869442,right_val:-0.6216102838516235,left_val:0.0270470399409533},{features:[[6,8,13,4,-1.],[6,9,13,2,2.]],tilted:0,threshold:-0.0119816595688462,right_val:-0.0943156927824020,left_val:0.1762886941432953},{features:[[7,10,2,2,-1.],[7,10,1,1,2.],[8,11,1,1,2.]],tilted:0,threshold:-9.4278322649188340e-005,right_val:-0.1071290969848633,left_val:0.1507049947977066},{features:[[12,11,6,2,-1.],[14,11,2,2,3.]],tilted:0,threshold:0.0101822800934315,right_val:-0.3503915071487427,left_val:0.0161433499306440},{features:[[6,0,12,10,-1.],[6,0,6,5,2.],[12,5,6,5,2.]],tilted:0,threshold:-0.0520590804517269,right_val:0.0477841906249523,left_val:-0.3121460080146790},{features:[[12,11,6,2,-1.],[14,11,2,2,3.]],tilted:0,threshold:-0.0249434690922499,right_val:-4.0430951048620045e-004,left_val:-0.7933396100997925},{features:[[7,0,2,2,-1.],[7,0,1,1,2.],[8,1,1,1,2.]],tilted:0,threshold:-6.2259827973321080e-004,right_val:-0.0712744519114494,left_val:0.2043831050395966},{features:[[16,0,2,2,-1.],[17,0,1,1,2.],[16,1,1,1,2.]],tilted:0,threshold:-5.6859298638300970e-005,right_val:-0.0658712089061737,left_val:0.0861500576138496},{features:[[7,0,2,2,-1.],[7,0,1,1,2.],[8,1,1,1,2.]],tilted:0,threshold:4.0834350511431694e-004,right_val:0.2224697023630142,left_val:-0.1051706001162529},{features:[[12,11,6,2,-1.],[14,11,2,2,3.]],tilted:0,threshold:-1.1075460352003574e-003,right_val:-0.0319086797535419,left_val:0.0464305393397808},{features:[[7,11,6,2,-1.],[9,11,2,2,3.]],tilted:0,threshold:-0.0123662399128079,right_val:0.0261646900326014,left_val:-0.6207143068313599},{features:[[5,12,18,3,-1.],[11,12,6,3,3.]],tilted:0,threshold:-0.0354762189090252,right_val:-0.0519298203289509,left_val:0.1230582967400551},{features:[[2,0,1,2,-1.],[2,0,1,1,2.]],tilted:1,threshold:-2.3794448934495449e-003,right_val:0.0417488515377045,left_val:-0.3795419931411743},{features:[[21,4,4,2,-1.],[23,4,2,1,2.],[21,5,2,1,2.]],tilted:0,threshold:1.3966970145702362e-003,right_val:0.1512037962675095,left_val:-0.0851486772298813},{features:[[9,3,7,3,-1.],[9,4,7,1,3.]],tilted:0,threshold:5.1437891088426113e-003,right_val:0.1789588034152985,left_val:-0.0816644281148911},{features:[[13,2,8,5,-1.],[15,4,4,5,2.]],tilted:1,threshold:-0.1239939033985138,right_val:9.5204189419746399e-003,left_val:-0.6658980846405029},{features:[[12,1,6,4,-1.],[11,2,6,2,2.]],tilted:1,threshold:0.0393908508121967,right_val:-0.7637290954589844,left_val:0.0182536505162716},{features:[[22,0,2,2,-1.],[22,1,2,1,2.]],tilted:0,threshold:2.9372270219027996e-003,right_val:-0.3233875036239624,left_val:0.0226261299103498},{features:[[4,1,16,12,-1.],[12,1,8,12,2.]],tilted:0,threshold:0.1816650927066803,right_val:0.2298932969570160,left_val:-0.0618673898279667},{features:[[3,0,20,10,-1.],[3,0,10,10,2.]],tilted:0,threshold:0.0892752110958099,right_val:0.2109096944332123,left_val:-0.0848015919327736},{features:[[0,4,6,6,-1.],[0,4,3,3,2.],[3,7,3,3,2.]],tilted:0,threshold:0.0179201308637857,right_val:0.2243462055921555,left_val:-0.0663900971412659},{features:[[22,4,3,3,-1.],[23,5,1,3,3.]],tilted:1,threshold:5.5024111643433571e-003,right_val:0.1079157963395119,left_val:-0.0559136196970940},{features:[[3,4,3,3,-1.],[2,5,3,1,3.]],tilted:1,threshold:-0.0126318400725722,right_val:-0.0470694787800312,left_val:0.3352184891700745},{features:[[22,7,3,4,-1.],[22,8,3,2,2.]],tilted:0,threshold:8.2040186971426010e-003,right_val:-0.5830680727958679,left_val:0.0521674789488316},{features:[[3,1,4,7,-1.],[4,1,2,7,2.]],tilted:0,threshold:0.0215438604354858,right_val:-0.8169081807136536,left_val:0.0103719802573323},{features:[[22,7,3,4,-1.],[22,8,3,2,2.]],tilted:0,threshold:-4.2779878713190556e-003,right_val:0.0348356589674950,left_val:-0.3437061011791229},{features:[[2,0,1,2,-1.],[2,0,1,1,2.]],tilted:1,threshold:9.5721762627363205e-003,right_val:-0.7592146992683411,left_val:0.0160374492406845},{features:[[18,4,6,2,-1.],[18,5,6,1,2.]],tilted:0,threshold:5.9499992057681084e-003,right_val:0.0937561765313149,left_val:-0.0835138633847237},{features:[[5,3,15,6,-1.],[5,5,15,2,3.]],tilted:0,threshold:-0.0868803784251213,right_val:-0.0735685229301453,left_val:0.1977919936180115},{features:[[16,4,8,4,-1.],[16,5,8,2,2.]],tilted:0,threshold:5.7690730318427086e-003,right_val:0.0826714411377907,left_val:-0.0611343309283257},{features:[[0,1,24,10,-1.],[0,1,12,5,2.],[12,6,12,5,2.]],tilted:0,threshold:0.1480645984411240,right_val:-0.4085262119770050,left_val:0.0396532900631428},{features:[[14,0,4,7,-1.],[15,0,2,7,2.]],tilted:0,threshold:-0.0186682697385550,right_val:0.0156445093452930,left_val:-0.6671301126480103},{features:[[0,7,3,4,-1.],[0,8,3,2,2.]],tilted:0,threshold:0.0101426700130105,right_val:-0.5610821843147278,left_val:0.0211487896740437},{features:[[18,5,4,4,-1.],[20,5,2,2,2.],[18,7,2,2,2.]],tilted:0,threshold:-2.6263110339641571e-003,right_val:-0.0586008317768574,left_val:0.0881423130631447},{features:[[5,5,6,2,-1.],[5,5,3,1,2.],[8,6,3,1,2.]],tilted:0,threshold:3.0406240839511156e-003,right_val:0.1942113041877747,left_val:-0.0699731782078743},{features:[[21,9,2,3,-1.],[21,10,2,1,3.]],tilted:0,threshold:-4.0523111820220947e-003,right_val:0.0284519009292126,left_val:-0.3989843130111694},{features:[[7,1,2,2,-1.],[7,1,1,1,2.],[8,2,1,1,2.]],tilted:0,threshold:3.3293411252088845e-004,right_val:0.1521372944116592,left_val:-0.0920187085866928},{features:[[16,1,2,2,-1.],[17,1,1,1,2.],[16,2,1,1,2.]],tilted:0,threshold:-1.4471479516942054e-004,right_val:-0.0869787335395813,left_val:0.1328881978988648}],threshold:-1.4393190145492554},{simpleClassifiers:[{features:[[9,7,7,6,-1.],[9,9,7,2,3.]],tilted:0,threshold:-0.0305288899689913,right_val:-0.1605879068374634,left_val:0.3361127972602844},{features:[[17,2,7,2,-1.],[17,3,7,1,2.]],tilted:0,threshold:-6.8238358944654465e-003,right_val:-0.2578383982181549,left_val:0.2510839104652405},{features:[[4,2,9,4,-1.],[3,3,9,2,2.]],tilted:1,threshold:-0.0260700508952141,right_val:-0.1111562028527260,left_val:0.3176701068878174},{features:[[19,14,6,1,-1.],[19,14,3,1,2.]],tilted:0,threshold:1.6021650517359376e-003,right_val:0.1561331003904343,left_val:-0.1096177026629448},{features:[[6,9,11,6,-1.],[6,11,11,2,3.]],tilted:0,threshold:-0.0346175394952297,right_val:-0.0955564379692078,left_val:0.2614395916461945},{features:[[17,3,8,12,-1.],[21,3,4,6,2.],[17,9,4,6,2.]],tilted:0,threshold:0.0825498923659325,right_val:0.3189736902713776,left_val:-0.0359772108495235},{features:[[0,7,24,8,-1.],[0,7,12,4,2.],[12,11,12,4,2.]],tilted:0,threshold:-0.1079908013343811,right_val:0.0965379774570465,left_val:-0.4661987125873566},{features:[[5,3,16,12,-1.],[13,3,8,6,2.],[5,9,8,6,2.]],tilted:0,threshold:-0.0710962936282158,right_val:0.0201707594096661,left_val:-0.3290941119194031},{features:[[0,3,24,6,-1.],[8,5,8,2,9.]],tilted:0,threshold:0.6102272272109985,right_val:0.5919780731201172,left_val:-0.0410851910710335},{features:[[1,8,24,1,-1.],[7,8,12,1,2.]],tilted:0,threshold:-9.6180485561490059e-003,right_val:-0.1256957054138184,left_val:0.1845327019691467},{features:[[1,9,14,6,-1.],[1,9,7,3,2.],[8,12,7,3,2.]],tilted:0,threshold:-0.0216567497700453,right_val:-0.0654195472598076,left_val:0.3558863103389740},{features:[[19,5,3,2,-1.],[19,6,3,1,2.]],tilted:0,threshold:3.2288730144500732e-003,right_val:0.1442176997661591,left_val:-0.1597114056348801},{features:[[0,14,10,1,-1.],[5,14,5,1,2.]],tilted:0,threshold:3.6023850552737713e-003,right_val:0.1848530024290085,left_val:-0.1301265954971314},{features:[[5,1,15,6,-1.],[5,3,15,2,3.]],tilted:0,threshold:0.1224254965782166,right_val:0.4787274003028870,left_val:-0.0509620085358620},{features:[[1,1,7,6,-1.],[1,3,7,2,3.]],tilted:0,threshold:-0.0398168414831162,right_val:-0.1490415036678314,left_val:0.1911015063524246},{features:[[15,12,6,3,-1.],[17,13,2,1,9.]],tilted:0,threshold:0.0165654607117176,right_val:-0.2660810947418213,left_val:0.0250385701656342},{features:[[4,0,1,3,-1.],[3,1,1,1,3.]],tilted:1,threshold:6.7314971238374710e-003,right_val:-0.5751237273216248,left_val:0.0361662209033966},{features:[[1,12,24,3,-1.],[7,12,12,3,2.]],tilted:0,threshold:-0.0238826293498278,right_val:-0.1013408973813057,left_val:0.1817242056131363},{features:[[3,12,6,3,-1.],[5,13,2,1,9.]],tilted:0,threshold:0.0168766304850578,right_val:-0.4964488148689270,left_val:0.0499957092106342},{features:[[1,0,24,12,-1.],[13,0,12,6,2.],[1,6,12,6,2.]],tilted:0,threshold:0.0814632922410965,right_val:-0.3092927038669586,left_val:0.0508196912705898},{features:[[2,0,21,15,-1.],[9,0,7,15,3.]],tilted:0,threshold:0.1567866057157517,right_val:0.2097589969635010,left_val:-0.0846417918801308},{features:[[17,3,6,2,-1.],[17,4,6,1,2.]],tilted:0,threshold:0.0107369897887111,right_val:0.2673564851284027,left_val:-0.0588766187429428},{features:[[3,3,14,2,-1.],[3,4,14,1,2.]],tilted:0,threshold:-0.0162507798522711,right_val:-0.1275278925895691,left_val:0.2185824960470200},{features:[[4,0,21,4,-1.],[11,0,7,4,3.]],tilted:0,threshold:-0.0513998307287693,right_val:-0.0564976185560226,left_val:0.1707165986299515},{features:[[6,13,4,1,-1.],[7,13,2,1,2.]],tilted:0,threshold:1.8661050125956535e-003,right_val:-0.4740450084209442,left_val:0.0403385981917381},{features:[[17,3,8,12,-1.],[21,3,4,6,2.],[17,9,4,6,2.]],tilted:0,threshold:-0.0494354106485844,right_val:-0.0417859293520451,left_val:0.1537600010633469},{features:[[0,3,8,12,-1.],[0,3,4,6,2.],[4,9,4,6,2.]],tilted:0,threshold:0.0696671828627586,right_val:0.3099964857101440,left_val:-0.0588539093732834},{features:[[5,0,16,8,-1.],[13,0,8,4,2.],[5,4,8,4,2.]],tilted:0,threshold:-0.0781185403466225,right_val:0.0523068793118000,left_val:-0.4109517037868500},{features:[[3,7,4,2,-1.],[4,8,2,2,2.]],tilted:1,threshold:-8.6161941289901733e-003,right_val:0.0286804605275393,left_val:-0.5668942928314209},{features:[[5,11,15,4,-1.],[5,12,15,2,2.]],tilted:0,threshold:6.8916371092200279e-003,right_val:0.1680631041526794,left_val:-0.0957784205675125},{features:[[10,13,1,2,-1.],[10,14,1,1,2.]],tilted:0,threshold:8.4734419942833483e-005,right_val:0.1278074979782105,left_val:-0.1476065963506699},{features:[[12,14,6,1,-1.],[14,14,2,1,3.]],tilted:0,threshold:-6.5460228361189365e-003,right_val:0.0211423803120852,left_val:-0.5353912711143494},{features:[[9,5,6,4,-1.],[9,6,6,2,2.]],tilted:0,threshold:-0.0119369700551033,right_val:-0.0659059137105942,left_val:0.2489618957042694},{features:[[12,5,13,2,-1.],[12,6,13,1,2.]],tilted:0,threshold:0.0160134993493557,right_val:0.0920000970363617,left_val:-0.0751639306545258},{features:[[5,0,15,6,-1.],[5,2,15,2,3.]],tilted:0,threshold:-0.1797882020473480,right_val:-0.0546800307929516,left_val:0.3122220933437347},{features:[[3,0,20,15,-1.],[3,0,10,15,2.]],tilted:0,threshold:0.4293603003025055,right_val:0.4671711027622223,left_val:-0.0467442497611046},{features:[[1,1,22,14,-1.],[12,1,11,14,2.]],tilted:0,threshold:0.1762980967760086,right_val:0.2303612977266312,left_val:-0.1196762025356293},{features:[[15,5,10,2,-1.],[15,6,10,1,2.]],tilted:0,threshold:0.0434980615973473,right_val:-0.3402695953845978,left_val:0.0213767793029547},{features:[[0,5,13,2,-1.],[0,6,13,1,2.]],tilted:0,threshold:0.0168955195695162,right_val:0.1834042966365814,left_val:-0.1305568963289261},{features:[[5,2,15,4,-1.],[5,3,15,2,2.]],tilted:0,threshold:0.0185353793203831,right_val:0.2354936003684998,left_val:-0.0754243135452271},{features:[[5,4,15,3,-1.],[5,5,15,1,3.]],tilted:0,threshold:0.0173294302076101,right_val:0.2036404013633728,left_val:-0.0853839814662933},{features:[[21,11,4,4,-1.],[21,12,4,2,2.]],tilted:0,threshold:8.6630741134285927e-003,right_val:-0.6201460957527161,left_val:0.0385910011827946},{features:[[5,0,1,2,-1.],[5,0,1,1,2.]],tilted:1,threshold:5.7052681222558022e-003,right_val:-0.4070529043674469,left_val:0.0312472805380821},{features:[[23,3,2,4,-1.],[23,3,1,4,2.]],tilted:0,threshold:-1.8030379433184862e-003,right_val:-0.1433366984128952,left_val:0.1957851052284241},{features:[[7,1,4,6,-1.],[8,1,2,6,2.]],tilted:0,threshold:-0.0187879204750061,right_val:0.0169819705188274,left_val:-0.8691418766975403},{features:[[8,6,11,3,-1.],[8,7,11,1,3.]],tilted:0,threshold:0.0186009202152491,right_val:0.1891387999057770,left_val:-0.0818153098225594},{features:[[0,13,2,1,-1.],[1,13,1,1,2.]],tilted:0,threshold:8.4120598330628127e-005,right_val:0.1211050972342491,left_val:-0.1289912015199661},{features:[[21,12,3,3,-1.],[21,13,3,1,3.]],tilted:0,threshold:-5.6057129986584187e-003,right_val:0.0159890707582235,left_val:-0.4698300957679749},{features:[[1,12,3,3,-1.],[1,13,3,1,3.]],tilted:0,threshold:3.5192570649087429e-003,right_val:-0.4484112858772278,left_val:0.0361930206418037},{features:[[23,3,2,4,-1.],[23,3,1,4,2.]],tilted:0,threshold:1.7741440096870065e-003,right_val:0.1395574957132340,left_val:-0.0433034710586071},{features:[[0,3,2,4,-1.],[1,3,1,4,2.]],tilted:0,threshold:-1.6350420191884041e-003,right_val:-0.1124152988195419,left_val:0.1395068019628525},{features:[[21,3,4,10,-1.],[23,3,2,5,2.],[21,8,2,5,2.]],tilted:0,threshold:6.4794770441949368e-003,right_val:0.0728941932320595,left_val:-0.0600515604019165},{features:[[0,3,4,10,-1.],[0,3,2,5,2.],[2,8,2,5,2.]],tilted:0,threshold:-0.0203247498720884,right_val:-0.0396846085786819,left_val:0.4297815859317780},{features:[[24,1,1,4,-1.],[24,2,1,2,2.]],tilted:0,threshold:-6.3453041948378086e-003,right_val:0.0242939405143261,left_val:-0.2533842921257019},{features:[[0,0,1,6,-1.],[0,2,1,2,3.]],tilted:0,threshold:9.0959975495934486e-003,right_val:-0.4518730044364929,left_val:0.0340887792408466},{features:[[16,1,4,4,-1.],[17,1,2,4,2.]],tilted:0,threshold:0.0161635801196098,right_val:-0.7205737829208374,left_val:6.8225921131670475e-003},{features:[[5,1,4,4,-1.],[6,1,2,4,2.]],tilted:0,threshold:-0.0112293101847172,right_val:0.0222914796322584,left_val:-0.6191986203193665},{features:[[15,2,10,12,-1.],[15,8,10,6,2.]],tilted:0,threshold:-0.1763328015804291,right_val:8.8407555595040321e-003,left_val:-0.6819115877151489},{features:[[8,5,9,3,-1.],[8,6,9,1,3.]],tilted:0,threshold:0.0192962400615215,right_val:0.2013067007064819,left_val:-0.0796290487051010},{features:[[6,7,14,2,-1.],[6,8,14,1,2.]],tilted:0,threshold:0.0105654401704669,right_val:0.1872760951519013,left_val:-0.0832984521985054},{features:[[10,7,5,4,-1.],[10,8,5,2,2.]],tilted:0,threshold:-6.7616738379001617e-003,right_val:-0.0813189968466759,left_val:0.2069583982229233},{features:[[23,12,2,3,-1.],[23,13,2,1,3.]],tilted:0,threshold:-2.3086878936737776e-003,right_val:0.0293897707015276,left_val:-0.2798121869564056},{features:[[0,7,4,4,-1.],[0,8,4,2,2.]],tilted:0,threshold:-6.9189318455755711e-003,right_val:0.0291001908481121,left_val:-0.5095586180686951},{features:[[3,13,21,2,-1.],[10,13,7,2,3.]],tilted:0,threshold:-0.0195926092565060,right_val:-0.0666698589920998,left_val:0.1248695999383926},{features:[[6,1,3,1,-1.],[7,1,1,1,3.]],tilted:0,threshold:-5.6698801927268505e-004,right_val:-0.0755556300282478,left_val:0.1772525012493134},{features:[[16,0,2,2,-1.],[17,0,1,1,2.],[16,1,1,1,2.]],tilted:0,threshold:6.5187108702957630e-004,right_val:0.1377387940883637,left_val:-0.0468317084014416},{features:[[7,0,2,2,-1.],[7,0,1,1,2.],[8,1,1,1,2.]],tilted:0,threshold:-4.3244438711553812e-004,right_val:-0.0822173282504082,left_val:0.1750548034906387},{features:[[23,12,2,3,-1.],[23,13,2,1,3.]],tilted:0,threshold:3.2091289758682251e-003,right_val:-0.3546032905578613,left_val:0.0258904304355383},{features:[[8,8,9,2,-1.],[11,8,3,2,3.]],tilted:0,threshold:-0.0288993604481220,right_val:0.0180548094213009,left_val:-0.7315214276313782},{features:[[23,12,2,3,-1.],[23,13,2,1,3.]],tilted:0,threshold:9.8803699074778706e-005,right_val:0.0343451388180256,left_val:-0.0383186303079128},{features:[[0,12,2,3,-1.],[0,13,2,1,3.]],tilted:0,threshold:-2.2848090156912804e-003,right_val:0.0380517281591892,left_val:-0.3603490889072418},{features:[[8,4,9,9,-1.],[8,7,9,3,3.]],tilted:0,threshold:0.2230083048343658,right_val:0.4118692874908447,left_val:-0.0353877097368240},{features:[[3,11,12,4,-1.],[3,11,6,2,2.],[9,13,6,2,2.]],tilted:0,threshold:3.8663020823150873e-003,right_val:0.1196625977754593,left_val:-0.1147940978407860},{features:[[10,10,5,4,-1.],[10,11,5,2,2.]],tilted:0,threshold:3.6781090311706066e-003,right_val:0.2093122005462647,left_val:-0.0887862071394920},{features:[[7,14,6,1,-1.],[9,14,2,1,3.]],tilted:0,threshold:3.6886930465698242e-003,right_val:-0.3311671912670136,left_val:0.0420652516186237},{features:[[4,0,18,15,-1.],[4,0,9,15,2.]],tilted:0,threshold:-0.5000842809677124,right_val:-0.0300164502114058,left_val:0.4582319855690002},{features:[[0,3,4,4,-1.],[1,3,2,4,2.]],tilted:0,threshold:3.2457590568810701e-003,right_val:0.2244455963373184,left_val:-0.0581394806504250},{features:[[22,0,3,4,-1.],[22,2,3,2,2.]],tilted:0,threshold:-7.2515371721237898e-004,right_val:-0.2164471000432968,left_val:0.0857456997036934},{features:[[0,0,20,8,-1.],[5,0,10,8,2.]],tilted:0,threshold:0.0756241232156754,right_val:0.1809341013431549,left_val:-0.0728698670864105},{features:[[1,5,24,10,-1.],[13,5,12,5,2.],[1,10,12,5,2.]],tilted:0,threshold:-0.1401147991418839,right_val:0.0322263389825821,left_val:-0.3049497008323669},{features:[[0,5,5,6,-1.],[0,7,5,2,3.]],tilted:0,threshold:1.2914249673485756e-003,right_val:0.0796989724040031,left_val:-0.1651930958032608},{features:[[18,3,4,2,-1.],[18,4,4,1,2.]],tilted:0,threshold:4.8063062131404877e-003,right_val:0.1528493016958237,left_val:-0.0511631406843662},{features:[[2,3,4,2,-1.],[2,3,4,1,2.]],tilted:1,threshold:0.0197005104273558,right_val:0.5898631215095520,left_val:-0.0214679203927517},{features:[[14,1,6,6,-1.],[16,1,2,6,3.]],tilted:0,threshold:-0.0282465498894453,right_val:0.0215946007519960,left_val:-0.3611007034778595},{features:[[5,1,6,6,-1.],[7,1,2,6,3.]],tilted:0,threshold:0.0318388007581234,right_val:-0.5591915845870972,left_val:0.0213881190866232},{features:[[11,10,6,1,-1.],[13,10,2,1,3.]],tilted:0,threshold:5.2926959469914436e-003,right_val:-0.3245368003845215,left_val:0.0171414706856012},{features:[[6,8,11,4,-1.],[6,9,11,2,2.]],tilted:0,threshold:9.3176206573843956e-003,right_val:0.1877806931734085,left_val:-0.0691479519009590},{features:[[23,13,2,2,-1.],[24,13,1,1,2.],[23,14,1,1,2.]],tilted:0,threshold:1.9812679965980351e-004,right_val:0.1166272014379501,left_val:-0.0710251703858376},{features:[[6,0,13,4,-1.],[6,1,13,2,2.]],tilted:0,threshold:0.0172033403068781,right_val:0.1448491960763931,left_val:-0.0834768265485764},{features:[[17,0,3,1,-1.],[18,1,1,1,3.]],tilted:1,threshold:8.0548562109470367e-003,right_val:-0.2763100862503052,left_val:0.0214444492012262},{features:[[8,0,1,3,-1.],[7,1,1,1,3.]],tilted:1,threshold:6.7419088445603848e-003,right_val:-0.3555370867252350,left_val:0.0341341383755207},{features:[[22,12,2,2,-1.],[23,12,1,1,2.],[22,13,1,1,2.]],tilted:0,threshold:5.7136920077027753e-005,right_val:0.0822271332144737,left_val:-0.0699329003691673},{features:[[0,13,2,1,-1.],[1,13,1,1,2.]],tilted:0,threshold:-6.0014430346200243e-005,right_val:-0.0801942795515060,left_val:0.1533315926790237},{features:[[22,13,2,1,-1.],[22,13,1,1,2.]],tilted:0,threshold:-6.6377622715663165e-005,right_val:-0.0435769110918045,left_val:0.0740585327148438},{features:[[1,13,2,1,-1.],[2,13,1,1,2.]],tilted:0,threshold:7.0605492510367185e-005,right_val:0.1157367005944252,left_val:-0.1192411035299301},{features:[[22,13,3,1,-1.],[23,13,1,1,3.]],tilted:0,threshold:7.2301438194699585e-005,right_val:0.0793638303875923,left_val:-0.0702318474650383},{features:[[1,2,2,12,-1.],[2,2,1,12,2.]],tilted:0,threshold:-1.4867830323055387e-003,right_val:-0.1076287999749184,left_val:0.1245760992169380},{features:[[18,3,4,2,-1.],[18,4,4,1,2.]],tilted:0,threshold:-5.2434820681810379e-003,right_val:-0.0614912398159504,left_val:0.1116774976253510},{features:[[3,3,4,2,-1.],[3,4,4,1,2.]],tilted:0,threshold:7.8055239282548428e-003,right_val:0.3046393096446991,left_val:-0.0496800504624844},{features:[[24,0,1,12,-1.],[24,3,1,6,2.]],tilted:0,threshold:0.0167157892137766,right_val:-0.5641499757766724,left_val:0.0242684707045555},{features:[[5,8,15,6,-1.],[5,10,15,2,3.]],tilted:0,threshold:-0.0197794307023287,right_val:-0.1014008000493050,left_val:0.1293102055788040},{features:[[19,7,6,2,-1.],[19,7,6,1,2.]],tilted:1,threshold:-6.7752218456007540e-005,right_val:-0.0876037329435349,left_val:0.0773630663752556},{features:[[1,10,5,3,-1.],[1,11,5,1,3.]],tilted:0,threshold:-0.0129433302208781,right_val:0.0158042199909687,left_val:-0.8692914843559265},{features:[[24,0,1,12,-1.],[24,3,1,6,2.]],tilted:0,threshold:-0.0125468103215098,right_val:0.0456306189298630,left_val:-0.1350758969783783},{features:[[0,0,1,12,-1.],[0,3,1,6,2.]],tilted:0,threshold:7.9727862030267715e-003,right_val:-0.3409133851528168,left_val:0.0405779294669628},{features:[[9,0,12,1,-1.],[13,0,4,1,3.]],tilted:0,threshold:-6.3152899965643883e-003,right_val:-0.0561671592295170,left_val:0.1372991949319840},{features:[[4,0,12,1,-1.],[8,0,4,1,3.]],tilted:0,threshold:-3.6897659301757813e-003,right_val:-0.0914164036512375,left_val:0.1639326065778732},{features:[[3,0,20,1,-1.],[8,0,10,1,2.]],tilted:0,threshold:5.0578881055116653e-003,right_val:0.1433712989091873,left_val:-0.0800797268748283},{features:[[1,0,9,2,-1.],[4,0,3,2,3.]],tilted:0,threshold:-0.0299335699528456,right_val:0.0227312203496695,left_val:-0.5326762199401856},{features:[[11,6,8,2,-1.],[11,7,8,1,2.]],tilted:0,threshold:7.0810988545417786e-003,right_val:0.1027508974075317,left_val:-0.0732182189822197},{features:[[11,3,3,8,-1.],[11,7,3,4,2.]],tilted:0,threshold:0.0508137904107571,right_val:-0.2544622123241425,left_val:0.0516868904232979},{features:[[20,4,4,2,-1.],[21,5,2,2,2.]],tilted:1,threshold:4.7044758684933186e-003,right_val:0.0760648325085640,left_val:-0.0572907589375973},{features:[[6,7,2,6,-1.],[6,7,1,6,2.]],tilted:1,threshold:4.6408819034695625e-003,right_val:-0.2172269970178604,left_val:0.0559986904263496},{features:[[20,4,4,2,-1.],[21,5,2,2,2.]],tilted:1,threshold:-9.5121748745441437e-003,right_val:-0.0377242304384708,left_val:0.1812860071659088},{features:[[5,4,2,4,-1.],[4,5,2,2,2.]],tilted:1,threshold:2.5726249441504478e-003,right_val:0.1421934068202972,left_val:-0.1238458007574081}],threshold:-1.3500690460205078},{simpleClassifiers:[{features:[[7,5,11,3,-1.],[7,6,11,1,3.]],tilted:0,threshold:0.0184330195188522,right_val:0.3351263999938965,left_val:-0.1618741005659103},{features:[[20,1,3,4,-1.],[20,2,3,2,2.]],tilted:0,threshold:4.8202150501310825e-003,right_val:0.2755692005157471,left_val:-0.0972008332610130},{features:[[8,4,9,3,-1.],[8,5,9,1,3.]],tilted:0,threshold:0.0214508101344109,right_val:0.3922119140625000,left_val:-0.1013654991984367},{features:[[9,6,9,3,-1.],[9,7,9,1,3.]],tilted:0,threshold:0.0201995000243187,right_val:0.3485709130764008,left_val:-0.1041551977396011},{features:[[0,7,8,8,-1.],[0,7,4,4,2.],[4,11,4,4,2.]],tilted:0,threshold:0.0154604399576783,right_val:0.2296576052904129,left_val:-0.1814713031053543},{features:[[9,7,7,3,-1.],[9,8,7,1,3.]],tilted:0,threshold:0.0121146701276302,right_val:0.3321264982223511,left_val:-0.0955794528126717},{features:[[8,3,9,3,-1.],[8,4,9,1,3.]],tilted:0,threshold:0.0166161693632603,right_val:0.3475660085678101,left_val:-0.0751067474484444},{features:[[21,1,1,6,-1.],[19,3,1,2,3.]],tilted:1,threshold:-0.0151290399953723,right_val:-0.1150512024760246,left_val:0.1396238952875137},{features:[[0,7,24,5,-1.],[6,7,12,5,2.]],tilted:0,threshold:-0.0707296282052994,right_val:-0.1016533970832825,left_val:0.2683610916137695},{features:[[24,11,1,2,-1.],[24,11,1,1,2.]],tilted:1,threshold:2.2831759415566921e-003,right_val:-0.4632245898246765,left_val:0.0443518795073032},{features:[[5,2,8,5,-1.],[5,2,4,5,2.]],tilted:1,threshold:5.5853649973869324e-003,right_val:-0.3147256970405579,left_val:0.0919516831636429},{features:[[16,3,8,12,-1.],[20,3,4,6,2.],[16,9,4,6,2.]],tilted:0,threshold:-0.0406785085797310,right_val:-0.0726505890488625,left_val:0.1471066027879715},{features:[[0,0,24,12,-1.],[0,0,12,6,2.],[12,6,12,6,2.]],tilted:0,threshold:-0.1358978003263474,right_val:0.0469954796135426,left_val:-0.5053529739379883},{features:[[8,2,10,8,-1.],[13,2,5,4,2.],[8,6,5,4,2.]],tilted:0,threshold:-0.0384974703192711,right_val:0.0552083589136600,left_val:-0.3717043101787567},{features:[[0,3,2,8,-1.],[0,3,1,4,2.],[1,7,1,4,2.]],tilted:0,threshold:2.7928350027650595e-003,right_val:0.1937797069549561,left_val:-0.1162076964974403},{features:[[22,11,2,4,-1.],[22,12,2,2,2.]],tilted:0,threshold:5.3412551060318947e-003,right_val:-0.4924449026584625,left_val:0.0129640102386475},{features:[[1,11,2,4,-1.],[1,12,2,2,2.]],tilted:0,threshold:-2.6604509912431240e-003,right_val:0.0437755398452282,left_val:-0.4564127027988434},{features:[[12,2,13,12,-1.],[12,8,13,6,2.]],tilted:0,threshold:0.3209887146949768,right_val:-0.3930096924304962,left_val:0.0484563298523426},{features:[[5,8,2,4,-1.],[5,8,1,4,2.]],tilted:1,threshold:-7.2495201602578163e-003,right_val:0.0410884395241737,left_val:-0.4188942015171051},{features:[[15,6,6,7,-1.],[17,6,2,7,3.]],tilted:0,threshold:0.0233532395213842,right_val:-0.3757928013801575,left_val:0.0302080996334553},{features:[[4,6,6,6,-1.],[6,6,2,6,3.]],tilted:0,threshold:-0.0224980209022760,right_val:0.0389229394495487,left_val:-0.4524075090885162},{features:[[13,13,9,2,-1.],[16,13,3,2,3.]],tilted:0,threshold:-0.0238666702061892,right_val:0.0138155296444893,left_val:-0.5288146734237671},{features:[[4,4,7,4,-1.],[3,5,7,2,2.]],tilted:1,threshold:-0.0336419306695461,right_val:-0.0403416194021702,left_val:0.4436714053153992},{features:[[18,4,6,8,-1.],[21,4,3,4,2.],[18,8,3,4,2.]],tilted:0,threshold:0.0221408791840076,right_val:0.2051838934421539,left_val:-0.0495454296469688},{features:[[3,14,9,1,-1.],[6,14,3,1,3.]],tilted:0,threshold:0.0106034297496080,right_val:-0.5148760080337524,left_val:0.0319968499243259},{features:[[11,11,14,4,-1.],[18,11,7,2,2.],[11,13,7,2,2.]],tilted:0,threshold:9.6357148140668869e-003,right_val:0.1527843028306961,left_val:-0.1237379983067513},{features:[[1,4,6,8,-1.],[1,4,3,4,2.],[4,8,3,4,2.]],tilted:0,threshold:0.0297187492251396,right_val:0.2904588878154755,left_val:-0.0567854084074497},{features:[[23,0,2,2,-1.],[23,0,1,2,2.]],tilted:1,threshold:2.0548420434352010e-004,right_val:0.1070784032344818,left_val:-0.2718465924263001},{features:[[6,0,13,4,-1.],[6,1,13,2,2.]],tilted:0,threshold:-0.0486726500093937,right_val:-0.0456859990954399,left_val:0.4235774874687195},{features:[[11,0,4,2,-1.],[11,1,4,1,2.]],tilted:0,threshold:2.5377809070050716e-003,right_val:0.2103600949048996,left_val:-0.0727348327636719},{features:[[2,0,2,2,-1.],[2,0,2,1,2.]],tilted:1,threshold:-3.3941529691219330e-003,right_val:0.0445483289659023,left_val:-0.3815236985683441},{features:[[20,9,5,6,-1.],[20,11,5,2,3.]],tilted:0,threshold:-0.0237451493740082,right_val:0.0249414704740047,left_val:-0.4413619935512543},{features:[[5,2,15,3,-1.],[5,3,15,1,3.]],tilted:0,threshold:-0.0200922992080450,right_val:-0.0953345969319344,left_val:0.1694606989622116},{features:[[9,2,7,3,-1.],[9,3,7,1,3.]],tilted:0,threshold:0.0110265100374818,right_val:0.2484644949436188,left_val:-0.0721762925386429},{features:[[2,14,21,1,-1.],[9,14,7,1,3.]],tilted:0,threshold:-0.0158068798482418,right_val:-0.0724460408091545,left_val:0.2241718024015427},{features:[[8,11,16,4,-1.],[8,11,8,4,2.]],tilted:0,threshold:0.0490073598921299,right_val:0.2583925127983093,left_val:-0.0551217384636402},{features:[[0,12,24,2,-1.],[12,12,12,2,2.]],tilted:0,threshold:0.0288716107606888,right_val:0.1924846023321152,left_val:-0.1153011992573738},{features:[[22,9,3,6,-1.],[22,11,3,2,3.]],tilted:0,threshold:7.3990179225802422e-003,right_val:-0.2191856950521469,left_val:0.0522995889186859},{features:[[0,1,12,2,-1.],[0,1,6,1,2.],[6,2,6,1,2.]],tilted:0,threshold:-6.1737848445773125e-003,right_val:-0.0696693286299706,left_val:0.2038096934556961},{features:[[8,9,9,3,-1.],[8,10,9,1,3.]],tilted:0,threshold:9.4332564622163773e-003,right_val:0.2586283981800079,left_val:-0.0534071698784828},{features:[[0,9,3,6,-1.],[0,11,3,2,3.]],tilted:0,threshold:0.0143210804089904,right_val:-0.4679594039916992,left_val:0.0336425192654133},{features:[[11,11,14,4,-1.],[18,11,7,2,2.],[11,13,7,2,2.]],tilted:0,threshold:0.0224872808903456,right_val:0.1123055964708328,left_val:-0.0431007482111454},{features:[[7,9,4,6,-1.],[8,9,2,6,2.]],tilted:0,threshold:-8.8018830865621567e-003,right_val:0.0238500293344259,left_val:-0.5997744798660278},{features:[[10,12,6,2,-1.],[12,12,2,2,3.]],tilted:0,threshold:-9.2824921011924744e-003,right_val:0.0247395392507315,left_val:-0.3792850077152252},{features:[[0,12,1,2,-1.],[0,13,1,1,2.]],tilted:0,threshold:-3.8288799260044470e-005,right_val:-0.1270592063665390,left_val:0.1094501987099648},{features:[[15,3,10,12,-1.],[20,3,5,6,2.],[15,9,5,6,2.]],tilted:0,threshold:-0.1060767024755478,right_val:-0.0179706607013941,left_val:0.1223917007446289},{features:[[10,9,4,6,-1.],[10,9,2,3,2.],[12,12,2,3,2.]],tilted:0,threshold:0.0145011199638247,right_val:-0.5499516725540161,left_val:0.0254385806620121},{features:[[11,3,6,4,-1.],[11,3,3,4,2.]],tilted:0,threshold:-0.0294254906475544,right_val:0.0163295306265354,left_val:-0.4407989084720612},{features:[[0,0,14,14,-1.],[0,7,14,7,2.]],tilted:0,threshold:-0.2141247987747192,right_val:0.0224080495536327,left_val:-0.5817149281501770},{features:[[15,2,10,12,-1.],[20,2,5,6,2.],[15,8,5,6,2.]],tilted:0,threshold:-0.0159379299730062,right_val:-0.0470217689871788,left_val:0.0447719283401966},{features:[[8,3,6,4,-1.],[11,3,3,4,2.]],tilted:0,threshold:0.0358322896063328,right_val:-0.5430511236190796,left_val:0.0257156305015087},{features:[[23,5,2,6,-1.],[23,7,2,2,3.]],tilted:0,threshold:-0.0114978998899460,right_val:0.0246592592447996,left_val:-0.4132392108440399},{features:[[10,8,5,3,-1.],[10,9,5,1,3.]],tilted:0,threshold:7.6680490747094154e-003,right_val:0.2419749945402145,left_val:-0.0596144981682301},{features:[[20,7,5,4,-1.],[20,8,5,2,2.]],tilted:0,threshold:0.0123357502743602,right_val:-0.4776956140995026,left_val:0.0375008806586266},{features:[[7,10,11,4,-1.],[7,11,11,2,2.]],tilted:0,threshold:0.0130474697798491,right_val:0.2419895976781845,left_val:-0.0609255395829678},{features:[[16,13,1,2,-1.],[16,14,1,1,2.]],tilted:0,threshold:5.2074559789616615e-005,right_val:0.0891881734132767,left_val:-0.0981822684407234},{features:[[3,1,5,4,-1.],[3,2,5,2,2.]],tilted:0,threshold:3.2866070978343487e-003,right_val:0.1441165059804916,left_val:-0.0941056609153748},{features:[[17,3,8,2,-1.],[17,4,8,1,2.]],tilted:0,threshold:-0.0417326614260674,right_val:0.0221338905394077,left_val:-0.6405817270278931},{features:[[0,7,5,4,-1.],[0,8,5,2,2.]],tilted:0,threshold:9.7638191655278206e-003,right_val:-0.3354279994964600,left_val:0.0412781611084938},{features:[[9,4,12,6,-1.],[13,4,4,6,3.]],tilted:0,threshold:0.1077456995844841,right_val:-0.4347884058952332,left_val:8.1762494519352913e-003},{features:[[4,4,12,6,-1.],[8,4,4,6,3.]],tilted:0,threshold:0.1119699031114578,right_val:-0.6503595113754273,left_val:0.0199715103954077},{features:[[11,0,12,9,-1.],[11,0,6,9,2.]],tilted:0,threshold:0.0680430680513382,right_val:0.1384491026401520,left_val:-0.0602735094726086},{features:[[4,5,16,8,-1.],[12,5,8,8,2.]],tilted:0,threshold:0.1206192970275879,right_val:0.2128939926624298,left_val:-0.0666261836886406},{features:[[16,12,2,1,-1.],[16,12,1,1,2.]],tilted:0,threshold:-2.7089789509773254e-003,right_val:7.0062931627035141e-003,left_val:-0.4214768111705780},{features:[[7,12,2,1,-1.],[8,12,1,1,2.]],tilted:0,threshold:-9.8798991530202329e-005,right_val:-0.1178120002150536,left_val:0.1287330985069275},{features:[[19,3,6,4,-1.],[22,3,3,2,2.],[19,5,3,2,2.]],tilted:0,threshold:0.0177976898849010,right_val:0.2582241892814636,left_val:-0.0398075394332409},{features:[[8,10,6,3,-1.],[10,10,2,3,3.]],tilted:0,threshold:-0.0155267501249909,right_val:0.0254285801202059,left_val:-0.5375617146492004},{features:[[16,6,2,2,-1.],[17,6,1,1,2.],[16,7,1,1,2.]],tilted:0,threshold:-1.1374800233170390e-003,right_val:-0.0317900516092777,left_val:0.1497129052877426},{features:[[0,0,24,2,-1.],[0,0,12,1,2.],[12,1,12,1,2.]],tilted:0,threshold:0.0219873897731304,right_val:-0.4156928062438965,left_val:0.0302675794810057},{features:[[16,6,2,2,-1.],[17,6,1,1,2.],[16,7,1,1,2.]],tilted:0,threshold:5.9880971093662083e-005,right_val:0.0799537077546120,left_val:-0.0641673132777214},{features:[[0,3,6,4,-1.],[0,3,3,2,2.],[3,5,3,2,2.]],tilted:0,threshold:7.6966080814599991e-003,right_val:0.1708455979824066,left_val:-0.0727465227246284},{features:[[22,0,3,4,-1.],[22,2,3,2,2.]],tilted:0,threshold:6.2799488659948111e-004,right_val:-0.1379152983427048,left_val:0.0341552086174488},{features:[[11,0,2,3,-1.],[11,1,2,1,3.]],tilted:0,threshold:-1.2622140347957611e-003,right_val:-0.0755578279495239,left_val:0.1615235060453415},{features:[[21,7,2,4,-1.],[20,8,2,2,2.]],tilted:1,threshold:-0.0110059296712279,right_val:0.0268340297043324,left_val:-0.4823004007339478},{features:[[4,9,10,1,-1.],[9,9,5,1,2.]],tilted:0,threshold:-9.5793791115283966e-003,right_val:-0.0669640377163887,left_val:0.1946887969970703},{features:[[16,6,2,2,-1.],[17,6,1,1,2.],[16,7,1,1,2.]],tilted:0,threshold:-9.1821959358640015e-005,right_val:-0.0674495473504066,left_val:0.0793757066130638},{features:[[7,6,2,2,-1.],[7,6,1,1,2.],[8,7,1,1,2.]],tilted:0,threshold:1.2134959688410163e-003,right_val:0.2775780856609345,left_val:-0.0511140711605549},{features:[[16,6,2,2,-1.],[17,6,1,1,2.],[16,7,1,1,2.]],tilted:0,threshold:7.9206802183762193e-004,right_val:0.1130611971020699,left_val:-0.0284809302538633},{features:[[0,0,1,4,-1.],[0,2,1,2,2.]],tilted:0,threshold:2.7196949813514948e-003,right_val:-0.3822895884513855,left_val:0.0362051688134670},{features:[[16,6,2,2,-1.],[17,6,1,1,2.],[16,7,1,1,2.]],tilted:0,threshold:-7.0203691720962524e-003,right_val:9.6215400844812393e-005,left_val:-0.7084425091743469},{features:[[7,6,2,2,-1.],[7,6,1,1,2.],[8,7,1,1,2.]],tilted:0,threshold:-7.4910762486979365e-004,right_val:-0.0707588419318199,left_val:0.1899659931659699},{features:[[8,9,9,6,-1.],[11,11,3,2,9.]],tilted:0,threshold:-0.0300100892782211,right_val:-0.0833628922700882,left_val:0.1409595012664795},{features:[[0,5,2,6,-1.],[0,7,2,2,3.]],tilted:0,threshold:0.0211524497717619,right_val:-0.4697616100311279,left_val:0.0258801300078630},{features:[[14,4,4,7,-1.],[15,5,2,7,2.]],tilted:1,threshold:-0.0319705903530121,right_val:0.0121158296242356,left_val:-0.5124071240425110},{features:[[2,13,20,2,-1.],[2,13,10,1,2.],[12,14,10,1,2.]],tilted:0,threshold:0.0105077195912600,right_val:-0.3098644018173218,left_val:0.0386607907712460},{features:[[23,7,2,2,-1.],[24,7,1,1,2.],[23,8,1,1,2.]],tilted:0,threshold:4.8152811359614134e-005,right_val:0.0678063929080963,left_val:-0.0616559796035290},{features:[[3,2,1,4,-1.],[3,3,1,2,2.]],tilted:0,threshold:9.6495117759332061e-004,right_val:0.1991685926914215,left_val:-0.0613585598766804},{features:[[11,2,14,4,-1.],[11,3,14,2,2.]],tilted:0,threshold:-0.0404121391475201,right_val:-0.0717744380235672,left_val:0.1341411024332047},{features:[[5,7,4,5,-1.],[6,7,2,5,2.]],tilted:0,threshold:5.8856019750237465e-003,right_val:-0.3332307040691376,left_val:0.0359793491661549},{features:[[23,8,1,4,-1.],[22,9,1,2,2.]],tilted:1,threshold:5.3272489458322525e-003,right_val:-0.5153871178627014,left_val:0.0328989103436470},{features:[[2,0,10,8,-1.],[7,0,5,8,2.]],tilted:0,threshold:0.0532727986574173,right_val:0.1582656949758530,left_val:-0.0784574225544930},{features:[[1,5,24,3,-1.],[9,6,8,1,9.]],tilted:0,threshold:0.0174429006874561,right_val:-0.1186174973845482,left_val:0.1339583992958069},{features:[[10,0,4,10,-1.],[10,5,4,5,2.]],tilted:0,threshold:-0.0433590598404408,right_val:0.0467031300067902,left_val:-0.2269790023565292},{features:[[5,4,15,3,-1.],[5,5,15,1,3.]],tilted:0,threshold:-0.0231206398457289,right_val:-0.0685165524482727,left_val:0.1634031981229782},{features:[[11,6,3,6,-1.],[11,8,3,2,3.]],tilted:0,threshold:-9.3796178698539734e-003,right_val:-0.0771108269691467,left_val:0.1582739949226379},{features:[[18,8,7,3,-1.],[18,9,7,1,3.]],tilted:0,threshold:-0.0141222495585680,right_val:0.0232016704976559,left_val:-0.5691561102867127},{features:[[0,0,4,2,-1.],[0,1,4,1,2.]],tilted:0,threshold:-0.0155957797542214,right_val:0.0111829601228237,left_val:-0.7199953794479370},{features:[[20,0,2,1,-1.],[20,0,1,1,2.]],tilted:1,threshold:7.4529898120090365e-004,right_val:0.0582969412207603,left_val:-0.0766925588250160},{features:[[0,6,1,8,-1.],[0,8,1,4,2.]],tilted:0,threshold:-5.1220599561929703e-003,right_val:0.0252124201506376,left_val:-0.4147517085075378},{features:[[23,7,2,2,-1.],[24,7,1,1,2.],[23,8,1,1,2.]],tilted:0,threshold:-5.7267909141955897e-005,right_val:-0.0668906867504120,left_val:0.0905847102403641},{features:[[0,7,2,2,-1.],[0,7,1,1,2.],[1,8,1,1,2.]],tilted:0,threshold:8.8431767653673887e-004,right_val:0.2420555055141449,left_val:-0.0570513382554054},{features:[[24,8,1,4,-1.],[23,9,1,2,2.]],tilted:1,threshold:-6.3992529176175594e-003,right_val:0.0172231607139111,left_val:-0.4766991138458252},{features:[[1,8,3,1,-1.],[2,9,1,1,3.]],tilted:1,threshold:3.4215620253235102e-003,right_val:-0.3505514860153198,left_val:0.0330659411847591},{features:[[21,7,2,2,-1.],[22,7,1,1,2.],[21,8,1,1,2.]],tilted:0,threshold:6.0761801432818174e-004,right_val:0.1801937073469162,left_val:-0.0633307918906212},{features:[[5,8,15,6,-1.],[5,10,15,2,3.]],tilted:0,threshold:-0.0271245595067739,right_val:-0.0843034014105797,left_val:0.1347420066595078},{features:[[6,7,14,8,-1.],[6,9,14,4,2.]],tilted:0,threshold:0.0320383384823799,right_val:0.1796665936708450,left_val:-0.0676692426204681},{features:[[1,4,10,2,-1.],[1,5,10,1,2.]],tilted:0,threshold:7.2583961300551891e-003,right_val:0.1166217997670174,left_val:-0.0986167713999748},{features:[[12,5,3,3,-1.],[13,6,1,1,9.]],tilted:0,threshold:-3.7803640589118004e-003,right_val:-0.0477618910372257,left_val:0.1233021020889282},{features:[[0,4,7,3,-1.],[0,5,7,1,3.]],tilted:0,threshold:0.0392416305840015,right_val:-0.7329750061035156,left_val:0.0167705602943897},{features:[[21,7,2,2,-1.],[22,7,1,1,2.],[21,8,1,1,2.]],tilted:0,threshold:-5.3865249356022105e-005,right_val:-0.0751027390360832,left_val:0.0850126668810844},{features:[[2,7,2,2,-1.],[2,7,1,1,2.],[3,8,1,1,2.]],tilted:0,threshold:8.2592968828976154e-004,right_val:0.2059426009654999,left_val:-0.0551505312323570},{features:[[22,9,1,3,-1.],[21,10,1,1,3.]],tilted:1,threshold:-5.6403529015369713e-005,right_val:-0.0699946209788322,left_val:0.0762555226683617},{features:[[11,13,2,2,-1.],[11,13,1,1,2.],[12,14,1,1,2.]],tilted:0,threshold:-5.6928332196548581e-004,right_val:0.0468857996165752,left_val:-0.2483194023370743},{features:[[19,3,6,12,-1.],[22,3,3,6,2.],[19,9,3,6,2.]],tilted:0,threshold:0.0424826890230179,right_val:0.1484764963388443,left_val:-0.0344216786324978},{features:[[0,3,6,12,-1.],[0,3,3,6,2.],[3,9,3,6,2.]],tilted:0,threshold:-0.0339534096419811,right_val:-0.0431083589792252,left_val:0.2843470871448517},{features:[[17,1,4,11,-1.],[18,1,2,11,2.]],tilted:0,threshold:0.0188998207449913,right_val:-0.4192070066928864,left_val:0.0142998602241278},{features:[[0,10,6,3,-1.],[0,11,6,1,3.]],tilted:0,threshold:1.9765710458159447e-003,right_val:-0.1786025017499924,left_val:0.0621932409703732},{features:[[23,11,2,1,-1.],[23,11,1,1,2.]],tilted:0,threshold:-5.0894439482362941e-005,right_val:-0.0689786225557327,left_val:0.0948854833841324},{features:[[4,1,4,11,-1.],[5,1,2,11,2.]],tilted:0,threshold:0.0114915501326323,right_val:-0.3628959059715271,left_val:0.0331886112689972},{features:[[21,3,4,12,-1.],[23,3,2,6,2.],[21,9,2,6,2.]],tilted:0,threshold:-0.0215106792747974,right_val:-0.0317491404712200,left_val:0.2759737968444824},{features:[[0,3,4,12,-1.],[0,3,2,6,2.],[2,9,2,6,2.]],tilted:0,threshold:0.0130551997572184,right_val:0.1449849009513855,left_val:-0.0830815583467484},{features:[[11,11,6,4,-1.],[11,12,6,2,2.]],tilted:0,threshold:6.6747581586241722e-003,right_val:0.1383360028266907,left_val:-0.0461902506649494},{features:[[6,11,13,4,-1.],[6,12,13,2,2.]],tilted:0,threshold:-7.0616300217807293e-003,right_val:-0.0837985798716545,left_val:0.1968749016523361},{features:[[11,10,3,1,-1.],[12,10,1,1,3.]],tilted:0,threshold:6.1481661396101117e-004,right_val:-0.1981233954429627,left_val:0.0542011298239231},{features:[[5,2,13,8,-1.],[5,6,13,4,2.]],tilted:0,threshold:0.2860183119773865,right_val:-0.4173370003700256,left_val:0.0232954602688551},{features:[[15,2,10,6,-1.],[15,4,10,2,3.]],tilted:0,threshold:0.0463717207312584,right_val:0.1808013021945953,left_val:-0.0290123391896486},{features:[[0,2,10,6,-1.],[0,4,10,2,3.]],tilted:0,threshold:-0.0557247512042522,right_val:-0.1061223000288010,left_val:0.1358146965503693},{features:[[12,1,13,8,-1.],[12,3,13,4,2.]],tilted:0,threshold:-0.2584396898746491,right_val:0.0151501996442676,left_val:-0.4910731911659241}],threshold:-1.3960490226745605},{simpleClassifiers:[{features:[[5,3,15,3,-1.],[5,4,15,1,3.]],tilted:0,threshold:-0.0417404398322105,right_val:-0.1386588066816330,left_val:0.4202992916107178},{features:[[9,3,9,3,-1.],[9,4,9,1,3.]],tilted:0,threshold:0.0274386107921600,right_val:0.6378138065338135,left_val:-0.0691855624318123},{features:[[3,2,7,3,-1.],[2,3,7,1,3.]],tilted:1,threshold:-0.0319233611226082,right_val:-0.0588022507727146,left_val:0.5562999844551086},{features:[[5,2,15,3,-1.],[5,3,15,1,3.]],tilted:0,threshold:-0.0426339097321033,right_val:-0.0923223569989204,left_val:0.3957036137580872},{features:[[5,4,15,3,-1.],[5,5,15,1,3.]],tilted:0,threshold:-0.0453329794108868,right_val:-0.0990284606814384,left_val:0.4831672012805939},{features:[[17,6,2,2,-1.],[18,6,1,1,2.],[17,7,1,1,2.]],tilted:0,threshold:1.4149550115689635e-003,right_val:0.3782787919044495,left_val:-0.0383210293948650},{features:[[5,10,2,3,-1.],[5,10,1,3,2.]],tilted:1,threshold:3.1844570767134428e-003,right_val:-0.3629348874092102,left_val:0.0845874175429344},{features:[[23,11,2,4,-1.],[23,13,2,2,2.]],tilted:0,threshold:7.9865548759698868e-003,right_val:-0.4990949034690857,left_val:0.0660245269536972},{features:[[0,11,14,4,-1.],[0,11,7,2,2.],[7,13,7,2,2.]],tilted:0,threshold:8.3637079223990440e-003,right_val:0.1732781976461411,left_val:-0.1568834036588669},{features:[[10,4,6,3,-1.],[10,5,6,1,3.]],tilted:0,threshold:0.0166161693632603,right_val:0.3208172023296356,left_val:-0.1092156991362572},{features:[[0,1,24,14,-1.],[0,1,12,7,2.],[12,8,12,7,2.]],tilted:0,threshold:-0.1083723008632660,right_val:0.0960887372493744,left_val:-0.3144314885139465},{features:[[1,5,24,8,-1.],[13,5,12,4,2.],[1,9,12,4,2.]],tilted:0,threshold:-0.0552641600370407,right_val:0.0760045275092125,left_val:-0.3238588869571686},{features:[[0,0,24,12,-1.],[0,0,12,6,2.],[12,6,12,6,2.]],tilted:0,threshold:0.1263256967067719,right_val:-0.4011892974376679,left_val:0.0652572736144066},{features:[[10,0,15,14,-1.],[10,7,15,7,2.]],tilted:0,threshold:0.3880456089973450,right_val:-0.2850419878959656,left_val:0.0290472805500031},{features:[[1,11,2,1,-1.],[1,11,1,1,2.]],tilted:1,threshold:2.1647498942911625e-003,right_val:-0.4483107030391693,left_val:0.0566388815641403},{features:[[1,11,24,4,-1.],[1,11,12,4,2.]],tilted:0,threshold:-0.0850358307361603,right_val:-0.1127642020583153,left_val:0.2374248951673508},{features:[[7,7,10,3,-1.],[7,8,10,1,3.]],tilted:0,threshold:0.0297137200832367,right_val:0.4747174084186554,left_val:-0.0403699316084385},{features:[[9,5,7,3,-1.],[9,6,7,1,3.]],tilted:0,threshold:0.0189488306641579,right_val:0.2721098959445953,left_val:-0.0794471576809883},{features:[[0,9,2,6,-1.],[0,11,2,2,3.]],tilted:0,threshold:-5.4433820769190788e-003,right_val:0.0573576912283897,left_val:-0.4018659889698029},{features:[[22,8,3,2,-1.],[22,8,3,1,2.]],tilted:1,threshold:-7.4416291899979115e-003,right_val:0.0343283303081989,left_val:-0.4642170965671539},{features:[[12,6,1,3,-1.],[12,7,1,1,3.]],tilted:0,threshold:3.1745829619467258e-003,right_val:0.2899833023548126,left_val:-0.0719946026802063},{features:[[24,6,1,6,-1.],[24,8,1,2,3.]],tilted:0,threshold:-4.6435040421783924e-003,right_val:0.0394870713353157,left_val:-0.4219543039798737},{features:[[3,3,7,2,-1.],[3,3,7,1,2.]],tilted:1,threshold:-0.0225970800966024,right_val:-0.0772427767515183,left_val:0.2745698094367981},{features:[[10,4,6,10,-1.],[13,4,3,5,2.],[10,9,3,5,2.]],tilted:0,threshold:0.0175681803375483,right_val:-0.2755838930606842,left_val:0.0604698508977890},{features:[[0,3,14,6,-1.],[0,6,14,3,2.]],tilted:0,threshold:0.2285360991954804,right_val:-0.5375431180000305,left_val:0.0372774116694927},{features:[[9,0,8,8,-1.],[13,0,4,4,2.],[9,4,4,4,2.]],tilted:0,threshold:0.0323306396603584,right_val:-0.3844825029373169,left_val:0.0458961501717567},{features:[[3,4,5,3,-1.],[2,5,5,1,3.]],tilted:1,threshold:-0.0285396501421928,right_val:-0.0340728089213371,left_val:0.5891790986061096},{features:[[18,9,7,6,-1.],[18,11,7,2,3.]],tilted:0,threshold:0.0286119598895311,right_val:-0.2325512021780014,left_val:0.0241741407662630},{features:[[0,9,7,6,-1.],[0,11,7,2,3.]],tilted:0,threshold:0.0190214607864618,right_val:-0.3404670059680939,left_val:0.0562911406159401},{features:[[12,1,3,3,-1.],[12,2,3,1,3.]],tilted:0,threshold:-5.7942080311477184e-003,right_val:-0.0638626366853714,left_val:0.2392093986272812},{features:[[9,2,6,8,-1.],[9,2,3,4,2.],[12,6,3,4,2.]],tilted:0,threshold:0.0198575407266617,right_val:-0.3405377864837647,left_val:0.0513716302812099},{features:[[1,14,24,1,-1.],[7,14,12,1,2.]],tilted:0,threshold:-0.0227794591337442,right_val:-0.0604945607483387,left_val:0.2922581136226654},{features:[[0,3,12,12,-1.],[0,3,6,6,2.],[6,9,6,6,2.]],tilted:0,threshold:0.1480142027139664,right_val:0.4667116999626160,left_val:-0.0343834199011326},{features:[[11,3,9,4,-1.],[14,3,3,4,3.]],tilted:0,threshold:-0.0337039716541767,right_val:0.0263036508113146,left_val:-0.3770483136177063},{features:[[9,4,6,6,-1.],[9,4,3,3,2.],[12,7,3,3,2.]],tilted:0,threshold:-0.0162283908575773,right_val:0.0570861399173737,left_val:-0.3382456898689270},{features:[[20,0,4,1,-1.],[20,0,2,1,2.]],tilted:1,threshold:-4.2941919527947903e-003,right_val:0.0434178002178669,left_val:-0.3295148909091950},{features:[[8,3,9,4,-1.],[11,3,3,4,3.]],tilted:0,threshold:-0.0235741101205349,right_val:0.0398236103355885,left_val:-0.3945200145244598},{features:[[14,4,6,9,-1.],[16,4,2,9,3.]],tilted:0,threshold:0.0218487493693829,right_val:-0.2596569955348969,left_val:0.0268086697906256},{features:[[5,4,6,9,-1.],[7,4,2,9,3.]],tilted:0,threshold:-0.0209309905767441,right_val:0.0437827892601490,left_val:-0.3641955852508545},{features:[[16,5,2,2,-1.],[17,5,1,1,2.],[16,6,1,1,2.]],tilted:0,threshold:1.6019339673221111e-003,right_val:0.2182880043983460,left_val:-0.0240206904709339},{features:[[0,0,15,12,-1.],[0,4,15,4,3.]],tilted:0,threshold:-0.5489655733108521,right_val:0.0286840796470642,left_val:-0.5673372149467468},{features:[[8,1,11,3,-1.],[8,2,11,1,3.]],tilted:0,threshold:0.0151870902627707,right_val:0.2107073962688446,left_val:-0.0816961303353310},{features:[[0,6,1,6,-1.],[0,8,1,2,3.]],tilted:0,threshold:-3.0653451103717089e-003,right_val:0.0471426397562027,left_val:-0.3701387047767639},{features:[[14,5,1,3,-1.],[14,6,1,1,3.]],tilted:0,threshold:-2.2847671061754227e-003,right_val:-0.0419041812419891,left_val:0.1813296973705292},{features:[[7,2,2,2,-1.],[7,2,1,1,2.],[8,3,1,1,2.]],tilted:0,threshold:1.3886080123484135e-003,right_val:0.3120515942573547,left_val:-0.0477169714868069},{features:[[22,9,1,4,-1.],[21,10,1,2,2.]],tilted:1,threshold:-4.2354268953204155e-003,right_val:0.0365724302828312,left_val:-0.3120726943016052},{features:[[10,5,5,3,-1.],[10,6,5,1,3.]],tilted:0,threshold:4.9234707839787006e-003,right_val:0.1364745944738388,left_val:-0.1105178967118263},{features:[[14,5,1,3,-1.],[14,6,1,1,3.]],tilted:0,threshold:-9.7824353724718094e-004,right_val:-0.0396985597908497,left_val:0.1019112989306450},{features:[[0,0,2,2,-1.],[0,1,2,1,2.]],tilted:0,threshold:2.3952899500727654e-003,right_val:-0.4620797038078308,left_val:0.0345855616033077},{features:[[22,9,1,4,-1.],[21,10,1,2,2.]],tilted:1,threshold:-2.7391599360271357e-005,right_val:-0.0576489008963108,left_val:0.0470036789774895},{features:[[3,9,4,1,-1.],[4,10,2,1,2.]],tilted:1,threshold:-3.7895010318607092e-003,right_val:0.0392708182334900,left_val:-0.3904446959495544},{features:[[8,8,9,3,-1.],[8,9,9,1,3.]],tilted:0,threshold:0.0251507405191660,right_val:0.4742729067802429,left_val:-0.0313480608165264},{features:[[2,8,21,3,-1.],[9,9,7,1,9.]],tilted:0,threshold:-0.0545641481876373,right_val:-0.0982013270258904,left_val:0.1494560986757278},{features:[[10,6,8,8,-1.],[12,6,4,8,2.]],tilted:0,threshold:-0.0416621901094913,right_val:0.0152987902984023,left_val:-0.4245094060897827},{features:[[7,3,6,12,-1.],[9,3,2,12,3.]],tilted:0,threshold:-0.0207394007593393,right_val:0.0479229800403118,left_val:-0.3218981921672821},{features:[[11,0,3,1,-1.],[12,0,1,1,3.]],tilted:0,threshold:-9.7902817651629448e-004,right_val:-0.0597994215786457,left_val:0.2330693006515503},{features:[[10,10,4,4,-1.],[11,10,2,4,2.]],tilted:0,threshold:-4.1547799482941628e-003,right_val:0.0456931404769421,left_val:-0.3040251135826111},{features:[[16,5,2,2,-1.],[17,5,1,1,2.],[16,6,1,1,2.]],tilted:0,threshold:-2.6045470804092474e-005,right_val:-0.0540977194905281,left_val:0.0553880184888840},{features:[[7,5,2,2,-1.],[7,5,1,1,2.],[8,6,1,1,2.]],tilted:0,threshold:1.0567409917712212e-003,right_val:0.2473292946815491,left_val:-0.0526767596602440},{features:[[1,0,24,8,-1.],[13,0,12,4,2.],[1,4,12,4,2.]],tilted:0,threshold:0.1842923015356064,right_val:-0.5789644718170166,left_val:0.0165581107139587},{features:[[6,6,3,1,-1.],[7,6,1,1,3.]],tilted:0,threshold:1.4177090488374233e-003,right_val:0.2524789869785309,left_val:-0.0524071305990219},{features:[[21,12,4,3,-1.],[21,13,4,1,3.]],tilted:0,threshold:-4.0882350876927376e-003,right_val:0.0269502196460962,left_val:-0.3066633939743042},{features:[[0,3,4,4,-1.],[0,3,2,2,2.],[2,5,2,2,2.]],tilted:0,threshold:8.5421912372112274e-003,right_val:0.2716326117515564,left_val:-0.0481166206300259},{features:[[19,0,2,3,-1.],[19,0,1,3,2.]],tilted:1,threshold:0.0195690393447876,right_val:-0.3371602892875671,left_val:0.0251199807971716},{features:[[2,2,15,6,-1.],[2,5,15,3,2.]],tilted:0,threshold:0.2677350938320160,right_val:-0.5075724124908447,left_val:0.0231193397194147},{features:[[5,0,15,2,-1.],[5,1,15,1,2.]],tilted:0,threshold:-0.0326806083321571,right_val:-0.0481392890214920,left_val:0.2773688137531281},{features:[[0,0,2,4,-1.],[0,1,2,2,2.]],tilted:0,threshold:-5.0574508495628834e-003,right_val:0.0363070890307426,left_val:-0.3639586865901947},{features:[[23,1,2,12,-1.],[20,4,2,6,2.]],tilted:1,threshold:0.0791702270507813,right_val:0.1632819026708603,left_val:-0.0295530706644058},{features:[[4,2,2,3,-1.],[4,3,2,1,3.]],tilted:0,threshold:2.2955629974603653e-003,right_val:0.1921634972095490,left_val:-0.0644191280007362},{features:[[20,0,2,2,-1.],[20,0,1,2,2.]],tilted:1,threshold:2.1744619880337268e-004,right_val:0.0513428300619125,left_val:-0.1248127967119217},{features:[[0,12,4,3,-1.],[0,13,4,1,3.]],tilted:0,threshold:-5.9793200343847275e-003,right_val:0.0236572697758675,left_val:-0.5400406122207642},{features:[[13,1,12,8,-1.],[13,3,12,4,2.]],tilted:0,threshold:-0.2183004021644592,right_val:0.0188296400010586,left_val:-0.3002713024616242},{features:[[5,0,2,2,-1.],[5,0,2,1,2.]],tilted:1,threshold:-2.5782659649848938e-003,right_val:0.0437353104352951,left_val:-0.2936800122261047},{features:[[11,2,14,12,-1.],[11,8,14,6,2.]],tilted:0,threshold:-0.1344317942857742,right_val:0.0219516493380070,left_val:-0.2982031106948853},{features:[[0,2,14,12,-1.],[0,8,14,6,2.]],tilted:0,threshold:0.3329834043979645,right_val:-0.3464672863483429,left_val:0.0417996607720852},{features:[[16,7,6,8,-1.],[18,7,2,8,3.]],tilted:0,threshold:-0.0276046600192785,right_val:0.0150398099794984,left_val:-0.3169625997543335},{features:[[7,0,13,2,-1.],[7,0,13,1,2.]],tilted:1,threshold:0.0284599401056767,right_val:-0.4115855097770691,left_val:0.0311327595263720},{features:[[16,7,6,8,-1.],[18,7,2,8,3.]],tilted:0,threshold:0.0568751804530621,right_val:-0.8496329784393311,left_val:3.1998890917748213e-003},{features:[[3,7,6,8,-1.],[5,7,2,8,3.]],tilted:0,threshold:-0.0264140591025352,right_val:0.0285327993333340,left_val:-0.4030340015888214},{features:[[17,7,2,2,-1.],[18,7,1,1,2.],[17,8,1,1,2.]],tilted:0,threshold:8.2670920528471470e-004,right_val:0.2083473950624466,left_val:-0.0478886701166630},{features:[[12,5,3,6,-1.],[13,6,1,6,3.]],tilted:1,threshold:-0.0174812003970146,right_val:0.0261973403394222,left_val:-0.4784274101257324},{features:[[20,2,1,6,-1.],[20,4,1,2,3.]],tilted:0,threshold:0.0102093704044819,right_val:0.3333239853382111,left_val:-0.0323491990566254},{features:[[7,2,2,2,-1.],[7,2,1,1,2.],[8,3,1,1,2.]],tilted:0,threshold:-9.0442842338234186e-004,right_val:-0.0502184815704823,left_val:0.2252988964319229},{features:[[19,10,2,1,-1.],[19,10,1,1,2.]],tilted:0,threshold:-5.5155509471660480e-005,right_val:-0.0922556668519974,left_val:0.0854163095355034},{features:[[6,4,8,2,-1.],[8,4,4,2,2.]],tilted:0,threshold:-7.5864349491894245e-003,right_val:0.0428331792354584,left_val:-0.2745333909988403},{features:[[9,5,16,7,-1.],[13,5,8,7,2.]],tilted:0,threshold:0.0689363330602646,right_val:0.2202139943838120,left_val:-0.0362212397158146},{features:[[6,7,2,2,-1.],[6,7,1,1,2.],[7,8,1,1,2.]],tilted:0,threshold:1.0017789900302887e-003,right_val:0.2603206038475037,left_val:-0.0464680194854736},{features:[[17,7,2,2,-1.],[18,7,1,1,2.],[17,8,1,1,2.]],tilted:0,threshold:-1.5333900228142738e-003,right_val:-0.0321949794888496,left_val:0.2831267118453980},{features:[[11,13,2,2,-1.],[11,13,1,1,2.],[12,14,1,1,2.]],tilted:0,threshold:5.0275481771677732e-004,right_val:-0.2383649945259094,left_val:0.0547226108610630},{features:[[17,7,2,2,-1.],[18,7,1,1,2.],[17,8,1,1,2.]],tilted:0,threshold:6.7827408201992512e-005,right_val:0.0501381084322929,left_val:-0.0391390211880207},{features:[[6,7,2,2,-1.],[6,7,1,1,2.],[7,8,1,1,2.]],tilted:0,threshold:-9.6863682847470045e-004,right_val:-0.0608406700193882,left_val:0.2108709067106247},{features:[[20,8,5,3,-1.],[20,9,5,1,3.]],tilted:0,threshold:0.0157267302274704,right_val:-0.8977199196815491,left_val:0.0115508204326034},{features:[[11,13,2,2,-1.],[11,13,1,1,2.],[12,14,1,1,2.]],tilted:0,threshold:-6.1983527848497033e-004,right_val:0.0380632318556309,left_val:-0.2865422964096069},{features:[[5,11,15,4,-1.],[5,12,15,2,2.]],tilted:0,threshold:-0.0148898903280497,right_val:-0.0534253492951393,left_val:0.2188885957002640},{features:[[0,8,6,3,-1.],[0,9,6,1,3.]],tilted:0,threshold:9.1423774138092995e-003,right_val:-0.4331383109092712,left_val:0.0289719104766846},{features:[[19,10,2,1,-1.],[19,10,1,1,2.]],tilted:0,threshold:4.4567110307980329e-005,right_val:0.0829902365803719,left_val:-0.0493506006896496},{features:[[4,10,2,1,-1.],[5,10,1,1,2.]],tilted:0,threshold:-4.6295441279653460e-005,right_val:-0.1154157966375351,left_val:0.1145173981785774},{features:[[1,0,24,6,-1.],[13,0,12,3,2.],[1,3,12,3,2.]],tilted:0,threshold:-0.0951543077826500,right_val:0.0389639586210251,left_val:-0.3621807992458344},{features:[[5,1,2,5,-1.],[5,1,1,5,2.]],tilted:1,threshold:0.0114479204639792,right_val:0.1799890995025635,left_val:-0.0633771494030952},{features:[[21,3,4,12,-1.],[23,3,2,6,2.],[21,9,2,6,2.]],tilted:0,threshold:0.0168469492346048,right_val:0.2080432027578354,left_val:-0.0795559063553810},{features:[[0,3,4,12,-1.],[0,3,2,6,2.],[2,9,2,6,2.]],tilted:0,threshold:-0.0195328295230865,right_val:-0.0368879809975624,left_val:0.3306660056114197},{features:[[24,2,1,6,-1.],[24,5,1,3,2.]],tilted:0,threshold:-9.9951513111591339e-003,right_val:0.0200320500880480,left_val:-0.2601873874664307},{features:[[5,2,9,8,-1.],[8,2,3,8,3.]],tilted:0,threshold:0.0559661500155926,right_val:-0.3797968029975891,left_val:0.0298731103539467},{features:[[24,2,1,6,-1.],[24,5,1,3,2.]],tilted:0,threshold:0.0223989300429821,right_val:-0.3070712089538574,left_val:9.4442693516612053e-003},{features:[[0,2,1,6,-1.],[0,5,1,3,2.]],tilted:0,threshold:-0.0111306598410010,right_val:0.0237820893526077,left_val:-0.4547461867332459},{features:[[9,6,9,4,-1.],[9,7,9,2,2.]],tilted:0,threshold:0.0103914495557547,right_val:0.1017400026321411,left_val:-0.0801509991288185},{features:[[11,6,3,4,-1.],[11,7,3,2,2.]],tilted:0,threshold:-9.7076389938592911e-003,right_val:-0.0475250408053398,left_val:0.3220044970512390},{features:[[20,14,2,1,-1.],[20,14,1,1,2.]],tilted:0,threshold:1.9170529412804171e-005,right_val:0.0758714973926544,left_val:-0.0619046017527580},{features:[[0,8,6,4,-1.],[0,9,6,2,2.]],tilted:0,threshold:-5.7660471647977829e-003,right_val:0.0357113592326641,left_val:-0.2893261909484863},{features:[[16,0,2,2,-1.],[17,0,1,1,2.],[16,1,1,1,2.]],tilted:0,threshold:-8.0189562868326902e-004,right_val:-0.0337995104491711,left_val:0.1487676948308945},{features:[[8,0,9,15,-1.],[11,5,3,5,9.]],tilted:0,threshold:-0.4516898989677429,right_val:0.0182942803949118,left_val:-0.5800644755363464},{features:[[13,9,4,6,-1.],[14,9,2,6,2.]],tilted:0,threshold:7.1167000569403172e-003,right_val:-0.4342006146907806,left_val:0.0221952199935913},{features:[[8,2,9,3,-1.],[8,3,9,1,3.]],tilted:0,threshold:0.0214324798434973,right_val:0.2711758911609650,left_val:-0.0425198413431644}],threshold:-1.3937480449676514},{simpleClassifiers:[{features:[[0,9,8,6,-1.],[0,9,4,3,2.],[4,12,4,3,2.]],tilted:0,threshold:8.8465185835957527e-003,right_val:0.2158975005149841,left_val:-0.2059727013111115},{features:[[20,1,5,4,-1.],[20,3,5,2,2.]],tilted:0,threshold:-0.0114869000390172,right_val:-0.2512278854846954,left_val:0.1450283974409103},{features:[[4,3,16,7,-1.],[8,3,8,7,2.]],tilted:0,threshold:0.0613779015839100,right_val:0.2893109023571014,left_val:-0.1210888996720314},{features:[[15,0,10,8,-1.],[15,2,10,4,2.]],tilted:0,threshold:-0.0514667406678200,right_val:-0.1447598934173584,left_val:0.0770430117845535},{features:[[0,2,24,10,-1.],[0,2,12,5,2.],[12,7,12,5,2.]],tilted:0,threshold:0.0990432873368263,right_val:-0.3668490052223206,left_val:0.0879464074969292},{features:[[20,9,5,4,-1.],[20,10,5,2,2.]],tilted:0,threshold:6.0240789316594601e-003,right_val:-0.4230535030364990,left_val:0.0559716187417507},{features:[[0,14,22,1,-1.],[11,14,11,1,2.]],tilted:0,threshold:9.3228947371244431e-003,right_val:0.1423504054546356,left_val:-0.1488721966743469},{features:[[22,0,3,12,-1.],[22,0,3,6,2.]],tilted:1,threshold:-0.0837828367948532,right_val:0.0671857669949532,left_val:-0.0506230294704437},{features:[[0,4,2,2,-1.],[1,4,1,2,2.]],tilted:0,threshold:-1.4369570417329669e-003,right_val:-0.1184794977307320,left_val:0.1669974029064179},{features:[[20,9,5,4,-1.],[20,10,5,2,2.]],tilted:0,threshold:-8.4923747926950455e-003,right_val:0.0469529181718826,left_val:-0.5746508240699768},{features:[[0,9,5,4,-1.],[0,10,5,2,2.]],tilted:0,threshold:6.1581619083881378e-003,right_val:-0.4179377853870392,left_val:0.0387838594615459},{features:[[7,3,18,6,-1.],[13,5,6,2,9.]],tilted:0,threshold:0.3882668018341065,right_val:0.3883490860462189,left_val:-0.0341588892042637},{features:[[4,10,10,1,-1.],[9,10,5,1,2.]],tilted:0,threshold:-6.2880381010472775e-003,right_val:-0.1096756979823113,left_val:0.1877942979335785},{features:[[21,1,4,10,-1.],[21,1,2,10,2.]],tilted:1,threshold:-0.0886473506689072,right_val:-0.0496502704918385,left_val:0.2961074113845825},{features:[[4,1,10,4,-1.],[4,1,10,2,2.]],tilted:1,threshold:0.0573849491775036,right_val:0.4039953947067261,left_val:-0.0621429793536663},{features:[[16,8,4,7,-1.],[17,8,2,7,2.]],tilted:0,threshold:6.3049891032278538e-003,right_val:-0.2553277909755707,left_val:0.0302408598363400},{features:[[5,8,4,7,-1.],[6,8,2,7,2.]],tilted:0,threshold:-0.0128176100552082,right_val:0.0188356805592775,left_val:-0.7491502761840820},{features:[[6,0,13,2,-1.],[6,1,13,1,2.]],tilted:0,threshold:6.5159690566360950e-003,right_val:0.1975888013839722,left_val:-0.0749715119600296},{features:[[0,12,8,3,-1.],[0,13,8,1,3.]],tilted:0,threshold:8.2992920652031898e-003,right_val:-0.4346657097339630,left_val:0.0329895503818989},{features:[[22,0,2,1,-1.],[22,0,1,1,2.]],tilted:1,threshold:6.3911718316376209e-003,right_val:-0.3072845935821533,left_val:0.0297571904957294},{features:[[3,0,1,2,-1.],[3,0,1,1,2.]],tilted:1,threshold:6.8949637352488935e-005,right_val:0.0927027910947800,left_val:-0.1729405969381332},{features:[[17,3,8,8,-1.],[21,3,4,4,2.],[17,7,4,4,2.]],tilted:0,threshold:0.0413548089563847,right_val:0.1629645973443985,left_val:-0.0279047600924969},{features:[[6,2,13,6,-1.],[6,4,13,2,3.]],tilted:0,threshold:0.1899937987327576,right_val:0.4835174977779388,left_val:-0.0312954708933830},{features:[[10,0,15,14,-1.],[10,7,15,7,2.]],tilted:0,threshold:-0.1273290067911148,right_val:0.0414485186338425,left_val:-0.4309565126895905},{features:[[1,1,12,1,-1.],[1,1,6,1,2.]],tilted:1,threshold:-0.0356059707701206,right_val:0.0775555819272995,left_val:-0.2009662985801697},{features:[[18,3,4,2,-1.],[18,4,4,1,2.]],tilted:0,threshold:-7.2760661132633686e-003,right_val:-0.0564889013767242,left_val:0.1169442981481552},{features:[[7,11,6,4,-1.],[9,11,2,4,3.]],tilted:0,threshold:-0.0167282801121473,right_val:0.0246787108480930,left_val:-0.5582438707351685},{features:[[20,4,5,6,-1.],[20,6,5,2,3.]],tilted:0,threshold:3.5163350403308868e-003,right_val:0.0638676136732101,left_val:-0.1312393993139267},{features:[[1,12,5,3,-1.],[1,13,5,1,3.]],tilted:0,threshold:-3.7709469906985760e-003,right_val:0.0413776598870754,left_val:-0.3320902884006500},{features:[[1,0,24,2,-1.],[13,0,12,1,2.],[1,1,12,1,2.]],tilted:0,threshold:-0.0138869602233171,right_val:0.0425702482461929,left_val:-0.3127424120903015},{features:[[3,3,5,3,-1.],[2,4,5,1,3.]],tilted:1,threshold:9.3537326902151108e-003,right_val:0.1907455027103424,left_val:-0.0667856708168983},{features:[[17,6,8,4,-1.],[19,6,4,4,2.]],tilted:0,threshold:-0.0194346699863672,right_val:-0.0473581515252590,left_val:0.3152694106101990},{features:[[5,0,1,3,-1.],[4,1,1,1,3.]],tilted:1,threshold:6.2511018477380276e-003,right_val:-0.3830946981906891,left_val:0.0309588797390461},{features:[[23,0,2,4,-1.],[23,2,2,2,2.]],tilted:0,threshold:-0.0252969004213810,right_val:0.0151915997266769,left_val:-0.2962245941162109},{features:[[0,0,3,6,-1.],[0,3,3,3,2.]],tilted:0,threshold:-3.0754129402339458e-003,right_val:-0.1764045059680939,left_val:0.0729133188724518},{features:[[11,1,14,2,-1.],[18,1,7,1,2.],[11,2,7,1,2.]],tilted:0,threshold:7.8001008369028568e-003,right_val:0.1162889003753662,left_val:-0.0501575507223606},{features:[[0,1,14,2,-1.],[0,1,7,1,2.],[7,2,7,1,2.]],tilted:0,threshold:-7.7680540271103382e-003,right_val:-0.0778944417834282,left_val:0.2415755987167358},{features:[[5,4,15,6,-1.],[5,6,15,2,3.]],tilted:0,threshold:-0.0880923122167587,right_val:-0.0482993088662624,left_val:0.2515082955360413},{features:[[10,7,2,2,-1.],[10,8,2,1,2.]],tilted:0,threshold:-1.7023129621520638e-003,right_val:-0.0970716699957848,left_val:0.1797576993703842},{features:[[13,2,8,5,-1.],[15,4,4,5,2.]],tilted:1,threshold:-0.0997034236788750,right_val:0.0155829498544335,left_val:-0.4700092971324921},{features:[[2,9,2,2,-1.],[2,9,1,2,2.]],tilted:1,threshold:4.6657170169055462e-003,right_val:-0.4018146991729736,left_val:0.0295135807245970},{features:[[12,8,6,3,-1.],[14,8,2,3,3.]],tilted:0,threshold:-0.0176613796502352,right_val:0.0168585199862719,left_val:-0.5449513792991638},{features:[[0,9,24,6,-1.],[8,11,8,2,9.]],tilted:0,threshold:-0.2230933010578156,right_val:-0.0632233396172524,left_val:0.1843273043632507},{features:[[1,12,24,3,-1.],[9,13,8,1,9.]],tilted:0,threshold:0.0528507791459560,right_val:0.1994421929121018,left_val:-0.0734771713614464},{features:[[5,11,15,4,-1.],[5,13,15,2,2.]],tilted:0,threshold:-0.0246656592935324,right_val:-0.0523515492677689,left_val:0.2699545025825501},{features:[[24,10,1,4,-1.],[23,11,1,2,2.]],tilted:1,threshold:-4.9799769185483456e-003,right_val:0.0269833803176880,left_val:-0.4495851993560791},{features:[[1,10,4,1,-1.],[2,11,2,1,2.]],tilted:1,threshold:3.0535869300365448e-003,right_val:-0.3464896082878113,left_val:0.0375075116753578},{features:[[15,1,10,14,-1.],[15,8,10,7,2.]],tilted:0,threshold:-0.0263100396841764,right_val:0.0256136003881693,left_val:-0.1766241043806076},{features:[[0,7,4,2,-1.],[2,7,2,2,2.]],tilted:0,threshold:-4.8684021458029747e-003,right_val:-0.0605575516819954,left_val:0.1877097040414810},{features:[[20,4,5,6,-1.],[20,6,5,2,3.]],tilted:0,threshold:0.0458405800163746,right_val:-0.2026686072349548,left_val:0.0330421291291714},{features:[[0,4,7,6,-1.],[0,6,7,2,3.]],tilted:0,threshold:6.7487969063222408e-003,right_val:0.1144922971725464,left_val:-0.1384654939174652},{features:[[11,7,6,3,-1.],[11,8,6,1,3.]],tilted:0,threshold:0.0107938302680850,right_val:0.1810662001371384,left_val:-0.0550474487245083},{features:[[8,10,9,1,-1.],[11,10,3,1,3.]],tilted:0,threshold:-0.0132016502320766,right_val:0.0258085392415524,left_val:-0.4654887914657593},{features:[[5,10,15,1,-1.],[10,10,5,1,3.]],tilted:0,threshold:-4.9963342025876045e-003,right_val:-0.1140139997005463,left_val:0.1138966009020805},{features:[[7,8,6,3,-1.],[9,8,2,3,3.]],tilted:0,threshold:-0.0158193595707417,right_val:0.0220876205712557,left_val:-0.4853562116622925},{features:[[23,12,2,1,-1.],[23,12,1,1,2.]],tilted:0,threshold:6.8264620495028794e-005,right_val:0.0840993970632553,left_val:-0.0819193720817566},{features:[[0,13,24,2,-1.],[0,13,12,1,2.],[12,14,12,1,2.]],tilted:0,threshold:-0.0156373791396618,right_val:0.0227358005940914,left_val:-0.4515635073184967},{features:[[9,9,7,3,-1.],[9,10,7,1,3.]],tilted:0,threshold:8.3005577325820923e-003,right_val:0.2212347984313965,left_val:-0.0514142103493214},{features:[[0,6,2,4,-1.],[0,7,2,2,2.]],tilted:0,threshold:6.6999751143157482e-003,right_val:-0.3543488979339600,left_val:0.0297896005213261},{features:[[18,2,5,4,-1.],[18,3,5,2,2.]],tilted:0,threshold:5.1744161173701286e-003,right_val:0.2202914059162140,left_val:-0.0496886894106865},{features:[[1,4,8,2,-1.],[1,4,4,1,2.],[5,5,4,1,2.]],tilted:0,threshold:6.1278040520846844e-003,right_val:0.1783366054296494,left_val:-0.0630758926272392},{features:[[21,8,4,4,-1.],[21,9,4,2,2.]],tilted:0,threshold:6.8791587837040424e-003,right_val:-0.2993854880332947,left_val:0.0284415297210217},{features:[[4,4,8,4,-1.],[4,5,8,2,2.]],tilted:0,threshold:-0.0217361003160477,right_val:-0.0602877512574196,left_val:0.1791318953037262},{features:[[11,4,14,4,-1.],[11,5,14,2,2.]],tilted:0,threshold:0.0140090202912688,right_val:0.1548174023628235,left_val:-0.1060196980834007},{features:[[3,0,18,9,-1.],[12,0,9,9,2.]],tilted:0,threshold:0.2186813950538635,right_val:0.2573468983173370,left_val:-0.0483517609536648},{features:[[3,0,20,15,-1.],[3,0,10,15,2.]],tilted:0,threshold:0.2838009893894196,right_val:0.2936053872108460,left_val:-0.0509055890142918},{features:[[12,1,6,8,-1.],[14,3,2,8,3.]],tilted:1,threshold:0.1209316030144692,right_val:-0.6926872134208679,left_val:0.0173095706850290},{features:[[17,4,1,9,-1.],[14,7,1,3,3.]],tilted:1,threshold:0.0569618307054043,right_val:0.3227567970752716,left_val:-0.0186788197606802},{features:[[6,7,4,8,-1.],[7,7,2,8,2.]],tilted:0,threshold:-9.0500963851809502e-003,right_val:0.0268415194004774,left_val:-0.4240661859512329},{features:[[21,5,4,3,-1.],[21,6,4,1,3.]],tilted:0,threshold:0.0231182798743248,right_val:-0.5228689908981323,left_val:0.0105462800711393},{features:[[7,0,2,2,-1.],[7,0,1,1,2.],[8,1,1,1,2.]],tilted:0,threshold:1.1480690445750952e-003,right_val:0.2319914996623993,left_val:-0.0459857396781445},{features:[[21,8,4,3,-1.],[21,9,4,1,3.]],tilted:0,threshold:-9.8909307271242142e-003,right_val:0.0142617002129555,left_val:-0.5407552123069763},{features:[[7,1,2,2,-1.],[7,1,1,1,2.],[8,2,1,1,2.]],tilted:0,threshold:7.0599978789687157e-004,right_val:0.1677557975053787,left_val:-0.0649549588561058},{features:[[16,1,2,2,-1.],[17,1,1,1,2.],[16,2,1,1,2.]],tilted:0,threshold:-8.2311293226666749e-005,right_val:-0.0542482398450375,left_val:0.0727679133415222},{features:[[0,8,4,3,-1.],[0,9,4,1,3.]],tilted:0,threshold:5.3380471654236317e-003,right_val:-0.3186857998371124,left_val:0.0320924408733845},{features:[[20,9,2,2,-1.],[21,9,1,1,2.],[20,10,1,1,2.]],tilted:0,threshold:5.9835889260284603e-005,right_val:0.0571143105626106,left_val:-0.0492977797985077},{features:[[3,9,2,2,-1.],[3,9,1,1,2.],[4,10,1,1,2.]],tilted:0,threshold:4.0741640987107530e-005,right_val:0.1105673015117645,left_val:-0.0992263928055763},{features:[[19,3,6,12,-1.],[22,3,3,6,2.],[19,9,3,6,2.]],tilted:0,threshold:-0.0271146595478058,right_val:-0.0621489509940147,left_val:0.2459900975227356},{features:[[7,1,2,2,-1.],[7,1,1,1,2.],[8,2,1,1,2.]],tilted:0,threshold:-8.8477227836847305e-004,right_val:-0.0529261194169521,left_val:0.2023449987173080},{features:[[7,4,12,3,-1.],[7,5,12,1,3.]],tilted:0,threshold:-0.0192636791616678,right_val:-0.0715369805693626,left_val:0.1516259014606476},{features:[[0,0,11,2,-1.],[0,1,11,1,2.]],tilted:0,threshold:9.6891522407531738e-003,right_val:-0.3255082964897156,left_val:0.0357108712196350},{features:[[13,2,6,5,-1.],[15,2,2,5,3.]],tilted:0,threshold:-0.0228419005870819,right_val:0.0171892996877432,left_val:-0.3499914109706879},{features:[[0,0,24,10,-1.],[0,0,12,5,2.],[12,5,12,5,2.]],tilted:0,threshold:-0.1477797031402588,right_val:0.0216299500316381,left_val:-0.4319078028202057},{features:[[20,4,2,3,-1.],[20,5,2,1,3.]],tilted:0,threshold:2.3399880155920982e-003,right_val:0.0963377729058266,left_val:-0.0442668199539185},{features:[[0,3,7,4,-1.],[0,4,7,2,2.]],tilted:0,threshold:-0.0728321895003319,right_val:0.0117990002036095,left_val:-0.8186188936233521},{features:[[11,1,14,14,-1.],[11,8,14,7,2.]],tilted:0,threshold:-0.3072721064090729,right_val:3.5564110148698092e-003,left_val:-0.7007309198379517},{features:[[6,2,6,5,-1.],[8,2,2,5,3.]],tilted:0,threshold:-0.0207666493952274,right_val:0.0246222894638777,left_val:-0.3913905024528503},{features:[[16,0,2,2,-1.],[17,0,1,1,2.],[16,1,1,1,2.]],tilted:0,threshold:-3.6341920495033264e-003,right_val:5.5562350898981094e-003,left_val:-0.4501088857650757},{features:[[7,0,2,2,-1.],[7,0,1,1,2.],[8,1,1,1,2.]],tilted:0,threshold:-7.0794070779811591e-005,right_val:-0.0905004590749741,left_val:0.1087834984064102},{features:[[16,0,2,2,-1.],[17,0,1,1,2.],[16,1,1,1,2.]],tilted:0,threshold:-8.8314860477112234e-005,right_val:-0.0494646318256855,left_val:0.0641764104366302},{features:[[2,0,20,1,-1.],[7,0,10,1,2.]],tilted:0,threshold:-0.0110706500709057,right_val:-0.0670493170619011,left_val:0.1473083049058914},{features:[[11,0,14,1,-1.],[11,0,7,1,2.]],tilted:0,threshold:6.3626351766288280e-003,right_val:0.0926633775234222,left_val:-0.0400333292782307},{features:[[9,3,6,2,-1.],[9,4,6,1,2.]],tilted:0,threshold:-7.7499519102275372e-003,right_val:-0.0774780735373497,left_val:0.1392461061477661},{features:[[11,3,3,4,-1.],[11,4,3,2,2.]],tilted:0,threshold:4.7532729804515839e-003,right_val:0.1706562042236328,left_val:-0.0729171708226204},{features:[[0,11,18,3,-1.],[6,12,6,1,9.]],tilted:0,threshold:-0.0168079808354378,right_val:-0.0801806673407555,left_val:0.1308007985353470},{features:[[15,3,10,12,-1.],[20,3,5,6,2.],[15,9,5,6,2.]],tilted:0,threshold:0.1279494017362595,right_val:0.3711799085140228,left_val:-0.0199226494878531},{features:[[0,3,14,3,-1.],[0,4,14,1,3.]],tilted:0,threshold:-0.0181895997375250,right_val:-0.0830406174063683,left_val:0.1235873028635979},{features:[[9,4,8,3,-1.],[11,4,4,3,2.]],tilted:0,threshold:-0.0161725897341967,right_val:0.0227566491812468,left_val:-0.4490650892257690},{features:[[0,12,2,1,-1.],[1,12,1,1,2.]],tilted:0,threshold:6.8046152591705322e-005,right_val:0.0935735777020454,left_val:-0.1011824011802673},{features:[[23,13,2,2,-1.],[24,13,1,1,2.],[23,14,1,1,2.]],tilted:0,threshold:1.1714019638020545e-004,right_val:0.1062628999352455,left_val:-0.0810816064476967},{features:[[0,13,2,2,-1.],[0,13,1,1,2.],[1,14,1,1,2.]],tilted:0,threshold:5.4521678976016119e-005,right_val:0.1159989982843399,left_val:-0.0932891815900803},{features:[[9,12,8,1,-1.],[11,12,4,1,2.]],tilted:0,threshold:-9.5095802098512650e-003,right_val:0.0141592798754573,left_val:-0.5051903724670410},{features:[[0,7,6,4,-1.],[0,8,6,2,2.]],tilted:0,threshold:-2.8461390174925327e-003,right_val:0.0473652109503746,left_val:-0.1991575956344605},{features:[[19,3,6,12,-1.],[22,3,3,6,2.],[19,9,3,6,2.]],tilted:0,threshold:0.0232862401753664,right_val:0.0805157274007797,left_val:-0.0403292290866375},{features:[[0,3,6,12,-1.],[0,3,3,6,2.],[3,9,3,6,2.]],tilted:0,threshold:-0.0426056496798992,right_val:-0.0383727103471756,left_val:0.3344807922840118},{features:[[23,7,2,4,-1.],[23,8,2,2,2.]],tilted:0,threshold:4.5101181603968143e-003,right_val:-0.2349215000867844,left_val:0.0263549294322729},{features:[[0,7,2,4,-1.],[0,8,2,2,2.]],tilted:0,threshold:6.1817811802029610e-003,right_val:-0.4420514106750488,left_val:0.0211725104600191},{features:[[13,7,8,4,-1.],[17,7,4,2,2.],[13,9,4,2,2.]],tilted:0,threshold:-0.0106069697067142,right_val:-0.0324725992977619,left_val:0.0654574930667877},{features:[[0,1,10,14,-1.],[0,8,10,7,2.]],tilted:0,threshold:-0.0858135819435120,right_val:0.0301514994353056,left_val:-0.3406231105327606},{features:[[9,8,7,3,-1.],[9,9,7,1,3.]],tilted:0,threshold:6.2758061103522778e-003,right_val:0.1503033936023712,left_val:-0.0619911886751652},{features:[[9,8,3,4,-1.],[9,9,3,2,2.]],tilted:0,threshold:-3.0965260230004787e-003,right_val:-0.0813362672924995,left_val:0.1481299996376038},{features:[[18,10,2,3,-1.],[17,11,2,1,3.]],tilted:1,threshold:-0.0111239803954959,right_val:0.0152134699746966,left_val:-0.4638158082962036},{features:[[7,10,3,2,-1.],[8,11,1,2,3.]],tilted:1,threshold:-0.0111039802432060,right_val:0.0135854296386242,left_val:-0.6005380153656006},{features:[[23,0,2,1,-1.],[23,0,1,1,2.]],tilted:1,threshold:-3.2944830600172281e-003,right_val:0.0262269694358110,left_val:-0.4641366004943848},{features:[[12,8,4,3,-1.],[12,8,2,3,2.]],tilted:1,threshold:0.0113766100257635,right_val:0.1575082987546921,left_val:-0.0565435998141766},{features:[[5,7,15,3,-1.],[10,8,5,1,9.]],tilted:0,threshold:-0.0294652003794909,right_val:-0.0651882514357567,left_val:0.1486423015594482},{features:[[0,0,20,8,-1.],[10,0,10,8,2.]],tilted:0,threshold:0.0491673015058041,right_val:0.1015425994992256,left_val:-0.0922251716256142},{features:[[21,0,4,3,-1.],[20,1,4,1,3.]],tilted:1,threshold:-0.0209590997546911,right_val:-0.0255501996725798,left_val:0.1749638020992279},{features:[[4,0,3,4,-1.],[5,1,1,4,3.]],tilted:1,threshold:5.4627470672130585e-003,right_val:0.1695216000080109,left_val:-0.0626592189073563},{features:[[18,3,5,2,-1.],[18,4,5,1,2.]],tilted:0,threshold:-4.3515427969396114e-003,right_val:-0.0598390214145184,left_val:0.0822615697979927},{features:[[2,3,5,2,-1.],[2,4,5,1,2.]],tilted:0,threshold:7.4772499501705170e-003,right_val:0.2469687014818192,left_val:-0.0495455190539360},{features:[[13,0,2,5,-1.],[13,0,1,5,2.]],tilted:1,threshold:-0.0374278612434864,right_val:3.5620180424302816e-003,left_val:-0.9178332090377808},{features:[[5,12,6,3,-1.],[7,13,2,1,9.]],tilted:0,threshold:-0.0248439908027649,right_val:0.0171825792640448,left_val:-0.4893918037414551},{features:[[13,0,2,5,-1.],[13,0,1,5,2.]],tilted:1,threshold:8.0120442435145378e-003,right_val:-0.0648176670074463,left_val:0.0217423699796200},{features:[[9,6,4,2,-1.],[9,7,4,1,2.]],tilted:0,threshold:5.7306028902530670e-003,right_val:0.1390995979309082,left_val:-0.0707883909344673},{features:[[18,9,4,3,-1.],[18,10,4,1,3.]],tilted:0,threshold:0.0109893204644322,right_val:-0.3556833863258362,left_val:7.0361187681555748e-003},{features:[[3,9,4,3,-1.],[3,10,4,1,3.]],tilted:0,threshold:-3.5342550836503506e-003,right_val:0.0395394414663315,left_val:-0.2303902953863144},{features:[[7,9,15,6,-1.],[7,12,15,3,2.]],tilted:0,threshold:0.0326121784746647,right_val:0.0961622893810272,left_val:-0.0834509506821632},{features:[[4,1,12,6,-1.],[4,1,6,3,2.],[10,4,6,3,2.]],tilted:0,threshold:-0.0519190989434719,right_val:0.0235583093017340,left_val:-0.3597438931465149},{features:[[10,5,14,10,-1.],[10,10,14,5,2.]],tilted:0,threshold:0.2802706062793732,right_val:-0.2738722860813141,left_val:0.0191025994718075},{features:[[10,6,2,3,-1.],[10,7,2,1,3.]],tilted:0,threshold:-1.8680640496313572e-003,right_val:-0.0592420399188995,left_val:0.1557087004184723},{features:[[13,4,4,6,-1.],[14,5,2,6,2.]],tilted:1,threshold:0.0412711799144745,right_val:-0.6225361824035645,left_val:9.2102894559502602e-003},{features:[[12,4,6,4,-1.],[11,5,6,2,2.]],tilted:1,threshold:-0.0341574586927891,right_val:0.0140588199719787,left_val:-0.6910676956176758},{features:[[19,0,5,3,-1.],[19,1,5,1,3.]],tilted:0,threshold:0.0281112492084503,right_val:-0.6016489267349243,left_val:6.3892039470374584e-003},{features:[[6,7,3,1,-1.],[7,7,1,1,3.]],tilted:0,threshold:-9.7675784491002560e-004,right_val:-0.0533109381794930,left_val:0.1663821935653687},{features:[[19,0,5,3,-1.],[19,1,5,1,3.]],tilted:0,threshold:-0.0284041091799736,right_val:4.9202498048543930e-003,left_val:-0.8431190848350525},{features:[[6,7,3,1,-1.],[7,7,1,1,3.]],tilted:0,threshold:9.7658135928213596e-004,right_val:0.1696853935718536,left_val:-0.0524366609752178},{features:[[11,0,6,15,-1.],[13,0,2,15,3.]],tilted:0,threshold:-0.0793864428997040,right_val:4.5842900872230530e-003,left_val:-0.7418122291564941},{features:[[0,2,2,6,-1.],[0,2,1,3,2.],[1,5,1,3,2.]],tilted:0,threshold:2.9205000028014183e-003,right_val:0.1705241948366165,left_val:-0.0499707907438278},{features:[[21,0,2,1,-1.],[21,0,1,1,2.]],tilted:1,threshold:-4.9792099744081497e-003,right_val:0.0113332699984312,left_val:-0.4247047007083893},{features:[[4,0,1,2,-1.],[4,0,1,1,2.]],tilted:1,threshold:7.5309360399842262e-003,right_val:-0.4817556142807007,left_val:0.0200634505599737},{features:[[9,0,14,8,-1.],[9,0,7,8,2.]],tilted:0,threshold:-0.1206317022442818,right_val:-0.0404023304581642,left_val:0.1783839017152786},{features:[[7,0,2,2,-1.],[7,0,1,1,2.],[8,1,1,1,2.]],tilted:0,threshold:6.4506952185183764e-005,right_val:0.1069532036781311,left_val:-0.0858542472124100},{features:[[4,6,18,4,-1.],[4,6,9,4,2.]],tilted:0,threshold:0.1407386958599091,right_val:0.4258378148078919,left_val:-0.0227742493152618},{features:[[0,7,2,2,-1.],[0,7,1,1,2.],[1,8,1,1,2.]],tilted:0,threshold:5.8708712458610535e-004,right_val:0.1556326001882553,left_val:-0.0585701502859592},{features:[[23,7,2,2,-1.],[24,7,1,1,2.],[23,8,1,1,2.]],tilted:0,threshold:4.2137140553677455e-005,right_val:0.0648988783359528,left_val:-0.0576708205044270},{features:[[0,7,2,2,-1.],[0,7,1,1,2.],[1,8,1,1,2.]],tilted:0,threshold:-5.4859159718034789e-005,right_val:-0.0935516208410263,left_val:0.1383187025785446},{features:[[23,7,2,2,-1.],[24,7,1,1,2.],[23,8,1,1,2.]],tilted:0,threshold:-8.1318263255525380e-005,right_val:-0.0584529899060726,left_val:0.0786737129092216},{features:[[0,7,2,2,-1.],[0,7,1,1,2.],[1,8,1,1,2.]],tilted:0,threshold:1.0710170317906886e-004,right_val:0.1105291023850441,left_val:-0.1036069020628929},{features:[[24,6,1,4,-1.],[24,7,1,2,2.]],tilted:0,threshold:5.9485197998583317e-003,right_val:-0.6046726703643799,left_val:0.0124739902094007},{features:[[0,6,1,4,-1.],[0,7,1,2,2.]],tilted:0,threshold:-3.8341151084750891e-003,right_val:0.0139579800888896,left_val:-0.5651066899299622},{features:[[11,0,6,15,-1.],[13,0,2,15,3.]],tilted:0,threshold:0.0481832996010780,right_val:-0.2265198975801468,left_val:6.8787620402872562e-003},{features:[[0,1,2,3,-1.],[0,2,2,1,3.]],tilted:0,threshold:9.8468521609902382e-003,right_val:-0.5408421754837036,left_val:0.0149204200133681},{features:[[8,1,9,3,-1.],[8,2,9,1,3.]],tilted:0,threshold:7.0795980282127857e-003,right_val:0.1212510019540787,left_val:-0.0740584135055542},{features:[[8,1,3,3,-1.],[9,2,1,1,9.]],tilted:0,threshold:-1.7187669873237610e-003,right_val:-0.0767944231629372,left_val:0.1150275021791458},{features:[[19,7,5,3,-1.],[18,8,5,1,3.]],tilted:1,threshold:0.0141321197152138,right_val:-0.3713991045951843,left_val:0.0222348105162382},{features:[[6,7,3,5,-1.],[7,8,1,5,3.]],tilted:1,threshold:-8.0704037100076675e-003,right_val:0.0307344105094671,left_val:-0.2536310851573944},{features:[[1,0,24,14,-1.],[13,0,12,7,2.],[1,7,12,7,2.]],tilted:0,threshold:0.2283755987882614,right_val:-0.5456647872924805,left_val:0.0168569702655077},{features:[[8,11,9,4,-1.],[8,12,9,2,2.]],tilted:0,threshold:-0.0106975501403213,right_val:-0.0482324399054050,left_val:0.1705504059791565},{features:[[6,11,14,4,-1.],[6,12,14,2,2.]],tilted:0,threshold:6.1057992279529572e-003,right_val:0.1244964972138405,left_val:-0.0747807994484901},{features:[[0,11,3,4,-1.],[0,12,3,2,2.]],tilted:0,threshold:3.5825320519506931e-003,right_val:-0.2529211938381195,left_val:0.0343106091022491},{features:[[17,11,8,2,-1.],[17,12,8,1,2.]],tilted:0,threshold:8.7969396263360977e-003,right_val:-0.2092120051383972,left_val:0.0227318406105042},{features:[[0,11,8,2,-1.],[0,12,8,1,2.]],tilted:0,threshold:-0.0117600196972489,right_val:0.0150208799168468,left_val:-0.5789325237274170},{features:[[23,13,1,2,-1.],[23,14,1,1,2.]],tilted:0,threshold:1.4420140068978071e-003,right_val:-0.1743503063917160,left_val:0.0108067002147436},{features:[[1,13,1,2,-1.],[1,14,1,1,2.]],tilted:0,threshold:-4.9062469770433381e-005,right_val:-0.0946391522884369,left_val:0.0891510024666786},{features:[[9,0,14,8,-1.],[9,0,7,8,2.]],tilted:0,threshold:0.0330546088516712,right_val:0.0724259391427040,left_val:-0.0502973310649395},{features:[[0,1,14,8,-1.],[0,3,14,4,2.]],tilted:0,threshold:-0.0449321903288364,right_val:-0.1246540024876595,left_val:0.0714013203978539},{features:[[20,4,2,3,-1.],[20,5,2,1,3.]],tilted:0,threshold:-0.0123274503275752,right_val:-0.0160399992018938,left_val:0.2216438055038452},{features:[[0,1,14,9,-1.],[0,4,14,3,3.]],tilted:0,threshold:-0.3724926114082336,right_val:0.0260022208094597,left_val:-0.3693152964115143},{features:[[9,13,9,1,-1.],[12,13,3,1,3.]],tilted:0,threshold:0.0152763100340962,right_val:-0.5456783771514893,left_val:5.3399899043142796e-003},{features:[[7,13,9,1,-1.],[10,13,3,1,3.]],tilted:0,threshold:-0.0145687395706773,right_val:0.0139877004548907,left_val:-0.5883231163024902},{features:[[20,7,2,2,-1.],[21,7,1,1,2.],[20,8,1,1,2.]],tilted:0,threshold:9.9890248384326696e-004,right_val:0.1743257045745850,left_val:-0.0358810797333717}],threshold:-1.3605639934539795},{simpleClassifiers:[{features:[[5,9,15,6,-1.],[5,12,15,3,2.]],tilted:0,threshold:0.0572950802743435,right_val:0.2448291033506393,left_val:-0.1768665015697479},{features:[[21,0,2,6,-1.],[21,3,2,3,2.]],tilted:0,threshold:-0.0100825401023030,right_val:-0.2031147032976151,left_val:0.1378919035196304},{features:[[4,4,8,10,-1.],[4,4,4,5,2.],[8,9,4,5,2.]],tilted:0,threshold:-0.0185250397771597,right_val:-0.1676190942525864,left_val:0.1623972952365875},{features:[[16,1,8,6,-1.],[16,3,8,2,3.]],tilted:0,threshold:-0.0527544915676117,right_val:-0.1428814977407455,left_val:0.1347105056047440},{features:[[2,1,11,2,-1.],[2,1,11,1,2.]],tilted:1,threshold:0.0243547502905130,right_val:0.4326488971710205,left_val:-0.0266546793282032},{features:[[20,4,5,6,-1.],[20,6,5,2,3.]],tilted:0,threshold:0.0634179636836052,right_val:-0.4013176858425140,left_val:0.0422610901296139},{features:[[0,4,5,6,-1.],[0,6,5,2,3.]],tilted:0,threshold:3.8921029772609472e-003,right_val:0.1267316043376923,left_val:-0.1906750947237015},{features:[[19,11,6,4,-1.],[22,11,3,2,2.],[19,13,3,2,2.]],tilted:0,threshold:1.5238909982144833e-003,right_val:0.1246439963579178,left_val:-0.1371546983718872},{features:[[10,4,5,2,-1.],[10,5,5,1,2.]],tilted:0,threshold:-6.7657418549060822e-003,right_val:-0.0607152618467808,left_val:0.2558242976665497},{features:[[7,6,11,4,-1.],[7,7,11,2,2.]],tilted:0,threshold:-0.0241763703525066,right_val:-0.0642128363251686,left_val:0.2859889864921570},{features:[[9,2,4,4,-1.],[9,2,2,4,2.]],tilted:1,threshold:-9.1761918738484383e-003,right_val:-0.1999447047710419,left_val:0.1021848022937775},{features:[[1,0,24,11,-1.],[7,0,12,11,2.]],tilted:0,threshold:-0.1578399986028671,right_val:-0.0785783529281616,left_val:0.2398308068513870},{features:[[4,0,10,10,-1.],[9,0,5,10,2.]],tilted:0,threshold:0.0487401895225048,right_val:0.1558353006839752,left_val:-0.1100914031267166},{features:[[23,8,2,4,-1.],[23,8,2,2,2.]],tilted:1,threshold:0.0191179793328047,right_val:-0.3720233142375946,left_val:0.0197066999971867},{features:[[2,8,4,2,-1.],[2,8,2,2,2.]],tilted:1,threshold:-0.0127781601622701,right_val:0.0353787206113338,left_val:-0.4160012900829315},{features:[[23,3,2,12,-1.],[24,3,1,6,2.],[23,9,1,6,2.]],tilted:0,threshold:2.6996301021426916e-003,right_val:0.1149144023656845,left_val:-0.0985597372055054},{features:[[9,3,6,12,-1.],[9,3,3,6,2.],[12,9,3,6,2.]],tilted:0,threshold:0.0245021991431713,right_val:-0.3663294017314911,left_val:0.0430920794606209},{features:[[1,0,24,12,-1.],[13,0,12,6,2.],[1,6,12,6,2.]],tilted:0,threshold:0.0850031301379204,right_val:-0.2886289954185486,left_val:0.0430114008486271},{features:[[0,3,2,12,-1.],[0,3,1,6,2.],[1,9,1,6,2.]],tilted:0,threshold:3.1647530850023031e-003,right_val:0.1279425024986267,left_val:-0.1142930984497070},{features:[[14,8,3,4,-1.],[14,8,3,2,2.]],tilted:1,threshold:0.0116577902808785,right_val:0.1422376930713654,left_val:-0.0515255816280842},{features:[[0,0,6,1,-1.],[2,0,2,1,3.]],tilted:0,threshold:-6.6801449283957481e-003,right_val:0.0287305805832148,left_val:-0.4743103981018066},{features:[[9,2,16,7,-1.],[13,2,8,7,2.]],tilted:0,threshold:-0.0388207696378231,right_val:-0.0473909191787243,left_val:0.0953134000301361},{features:[[8,7,1,6,-1.],[8,7,1,3,2.]],tilted:1,threshold:-0.0254217702895403,right_val:0.0284377895295620,left_val:-0.4219881892204285},{features:[[8,7,9,4,-1.],[8,8,9,2,2.]],tilted:0,threshold:-0.0121460696682334,right_val:-0.0762820765376091,left_val:0.1830082982778549},{features:[[7,5,10,4,-1.],[7,6,10,2,2.]],tilted:0,threshold:-0.0267872195690870,right_val:-0.0522297993302345,left_val:0.2859373092651367},{features:[[14,2,1,6,-1.],[12,4,1,2,3.]],tilted:1,threshold:-0.0116149904206395,right_val:-0.0663506835699081,left_val:0.1138594970107079},{features:[[0,3,8,12,-1.],[0,3,4,6,2.],[4,9,4,6,2.]],tilted:0,threshold:-0.0599568895995617,right_val:-0.0470041483640671,left_val:0.2777940034866333},{features:[[19,13,6,2,-1.],[19,13,3,2,2.]],tilted:0,threshold:-8.6737014353275299e-003,right_val:-0.0287764091044664,left_val:0.2129196971654892},{features:[[0,13,6,2,-1.],[3,13,3,2,2.]],tilted:0,threshold:2.8543549124151468e-003,right_val:0.1421594023704529,left_val:-0.1221636980772018},{features:[[23,12,1,3,-1.],[23,13,1,1,3.]],tilted:0,threshold:2.2713060025125742e-003,right_val:-0.4104354083538055,left_val:0.0182375106960535},{features:[[1,12,1,3,-1.],[1,13,1,1,3.]],tilted:0,threshold:-1.2334890197962523e-003,right_val:0.0350435785949230,left_val:-0.3772745132446289},{features:[[23,12,1,3,-1.],[23,13,1,1,3.]],tilted:0,threshold:-2.6904400438070297e-003,right_val:0.0100445803254843,left_val:-0.4196098148822784},{features:[[4,10,10,1,-1.],[9,10,5,1,2.]],tilted:0,threshold:-2.6551370974630117e-003,right_val:-0.1072231009602547,left_val:0.1150795966386795},{features:[[23,12,1,3,-1.],[23,13,1,1,3.]],tilted:0,threshold:-5.6895318266469985e-005,right_val:-0.0317232310771942,left_val:0.0416303612291813},{features:[[1,12,1,3,-1.],[1,13,1,1,3.]],tilted:0,threshold:9.8731368780136108e-004,right_val:-0.2815021872520447,left_val:0.0429715514183044},{features:[[11,2,12,4,-1.],[11,3,12,2,2.]],tilted:0,threshold:0.0182135794311762,right_val:0.1914888024330139,left_val:-0.0451830588281155},{features:[[3,1,12,6,-1.],[3,3,12,2,3.]],tilted:0,threshold:-0.0872772708535194,right_val:-0.1219599992036820,left_val:0.1718962937593460},{features:[[23,0,2,2,-1.],[23,0,1,2,2.]],tilted:1,threshold:-5.3898650221526623e-003,right_val:0.0155352503061295,left_val:-0.3866654038429260},{features:[[2,0,2,2,-1.],[2,0,2,1,2.]],tilted:1,threshold:0.0108539797365665,right_val:-0.3959751129150391,left_val:0.0364841781556606},{features:[[14,13,4,2,-1.],[15,13,2,2,2.]],tilted:0,threshold:-4.1801291517913342e-003,right_val:0.0170424394309521,left_val:-0.4820233881473541},{features:[[3,6,6,3,-1.],[2,7,6,1,3.]],tilted:1,threshold:-0.0234517697244883,right_val:-0.0220960807055235,left_val:0.4986476898193359},{features:[[14,13,4,2,-1.],[15,13,2,2,2.]],tilted:0,threshold:2.9061511158943176e-003,right_val:-0.3256624042987824,left_val:0.0269486699253321},{features:[[0,7,24,4,-1.],[0,7,12,2,2.],[12,9,12,2,2.]],tilted:0,threshold:0.0463646091520786,right_val:-0.3762974143028259,left_val:0.0268820300698280},{features:[[23,0,2,2,-1.],[23,1,2,1,2.]],tilted:0,threshold:-2.1972910326439887e-004,right_val:-0.1089593023061752,left_val:0.0705367177724838},{features:[[7,13,4,2,-1.],[8,13,2,2,2.]],tilted:0,threshold:-3.7804399617016315e-003,right_val:0.0199932008981705,left_val:-0.4887917041778565},{features:[[16,11,2,2,-1.],[17,11,1,1,2.],[16,12,1,1,2.]],tilted:0,threshold:6.0642170865321532e-005,right_val:0.0811428874731064,left_val:-0.0753576681017876},{features:[[8,11,9,4,-1.],[8,12,9,2,2.]],tilted:0,threshold:-0.0106888897716999,right_val:-0.0562041401863098,left_val:0.2206722944974899},{features:[[2,12,21,3,-1.],[9,13,7,1,9.]],tilted:0,threshold:0.0436831787228584,right_val:0.1712581962347031,left_val:-0.0610822103917599},{features:[[1,13,21,2,-1.],[8,13,7,2,3.]],tilted:0,threshold:-0.0202471297234297,right_val:-0.0770068317651749,left_val:0.1565587073564529},{features:[[22,10,1,4,-1.],[21,11,1,2,2.]],tilted:1,threshold:-5.9285280294716358e-003,right_val:0.0202764291316271,left_val:-0.4369310140609741},{features:[[3,5,6,3,-1.],[2,6,6,1,3.]],tilted:1,threshold:0.0113492002710700,right_val:0.1651744991540909,left_val:-0.0597750283777714},{features:[[13,2,8,5,-1.],[15,4,4,5,2.]],tilted:1,threshold:-0.1365716010332108,right_val:4.2868419550359249e-003,left_val:-0.8707361817359924},{features:[[4,2,8,6,-1.],[4,4,8,2,3.]],tilted:0,threshold:0.0663046464323998,right_val:0.2649452090263367,left_val:-0.0388697795569897},{features:[[5,1,15,4,-1.],[5,2,15,2,2.]],tilted:0,threshold:0.0195911191403866,right_val:0.1665123999118805,left_val:-0.0803443267941475},{features:[[0,1,8,4,-1.],[0,2,8,2,2.]],tilted:0,threshold:0.0340932197868824,right_val:-0.4526833891868591,left_val:0.0261821094900370},{features:[[10,0,15,14,-1.],[10,7,15,7,2.]],tilted:0,threshold:-0.2061661928892136,right_val:0.0156788490712643,left_val:-0.4254589080810547},{features:[[9,13,6,2,-1.],[11,13,2,2,3.]],tilted:0,threshold:-7.6675140298902988e-003,right_val:0.0274340193718672,left_val:-0.3513334095478058},{features:[[8,9,11,4,-1.],[8,10,11,2,2.]],tilted:0,threshold:-0.0129145104438066,right_val:-0.0633687376976013,left_val:0.1359857022762299},{features:[[8,6,3,3,-1.],[9,7,1,3,3.]],tilted:1,threshold:0.0160742308944464,right_val:-0.4643712937831879,left_val:0.0215212907642126},{features:[[21,5,4,6,-1.],[21,7,4,2,3.]],tilted:0,threshold:0.0369430296123028,right_val:-0.3073608875274658,left_val:0.0274755004793406},{features:[[12,3,6,6,-1.],[10,5,6,2,3.]],tilted:1,threshold:-0.0755213573575020,right_val:0.0237817000597715,left_val:-0.4241931140422821},{features:[[12,9,10,6,-1.],[12,9,5,6,2.]],tilted:0,threshold:0.0243982393294573,right_val:0.1672402024269104,left_val:-0.0493879318237305},{features:[[3,9,10,6,-1.],[8,9,5,6,2.]],tilted:0,threshold:0.1157704964280129,right_val:-0.6928011178970337,left_val:0.0166440103203058},{features:[[12,0,4,1,-1.],[13,0,2,1,2.]],tilted:0,threshold:9.1529998462647200e-004,right_val:0.1328525990247726,left_val:-0.0502800084650517},{features:[[3,10,4,1,-1.],[4,11,2,1,2.]],tilted:1,threshold:-3.6248450633138418e-003,right_val:0.0284923594444990,left_val:-0.3066833913326263},{features:[[18,12,1,2,-1.],[18,12,1,1,2.]],tilted:1,threshold:-7.3581631295382977e-004,right_val:-0.0392797887325287,left_val:0.0559885688126087},{features:[[2,0,20,10,-1.],[12,0,10,10,2.]],tilted:0,threshold:0.2000436931848526,right_val:0.1685038954019547,left_val:-0.0568408109247684},{features:[[22,2,3,6,-1.],[23,3,1,6,3.]],tilted:1,threshold:-0.0178776904940605,right_val:-0.0514639392495155,left_val:0.1931751966476440},{features:[[3,2,6,3,-1.],[2,3,6,1,3.]],tilted:1,threshold:0.0113503802567720,right_val:0.2181939035654068,left_val:-0.0489644110202789},{features:[[21,1,4,6,-1.],[23,1,2,3,2.],[21,4,2,3,2.]],tilted:0,threshold:0.0125029096379876,right_val:0.2713862061500549,left_val:-0.0419848784804344},{features:[[0,1,4,6,-1.],[0,1,2,3,2.],[2,4,2,3,2.]],tilted:0,threshold:-9.3033276498317719e-003,right_val:-0.0626974031329155,left_val:0.1590452045202255},{features:[[24,0,1,6,-1.],[24,3,1,3,2.]],tilted:0,threshold:9.8205171525478363e-003,right_val:-0.3304075896739960,left_val:0.0155331101268530},{features:[[0,0,1,6,-1.],[0,3,1,3,2.]],tilted:0,threshold:4.4993069022893906e-003,right_val:-0.3112137019634247,left_val:0.0376702398061752},{features:[[18,0,6,6,-1.],[18,2,6,2,3.]],tilted:0,threshold:0.0140464501455426,right_val:0.1032719984650612,left_val:-0.0434262491762638},{features:[[5,1,15,4,-1.],[5,2,15,2,2.]],tilted:0,threshold:-0.0411175191402435,right_val:-0.0664343684911728,left_val:0.1867991983890533},{features:[[4,8,18,1,-1.],[10,8,6,1,3.]],tilted:0,threshold:-0.0107145197689533,right_val:-0.0663585364818573,left_val:0.1244383975863457},{features:[[8,6,6,4,-1.],[8,7,6,2,2.]],tilted:0,threshold:9.2895422130823135e-003,right_val:0.1224353983998299,left_val:-0.0821698531508446},{features:[[9,5,8,2,-1.],[11,5,4,2,2.]],tilted:0,threshold:-0.0130508001893759,right_val:0.0166369099169970,left_val:-0.4003388881683350},{features:[[5,0,6,6,-1.],[7,0,2,6,3.]],tilted:0,threshold:-0.0364681892096996,right_val:0.0148177295923233,left_val:-0.5473737716674805},{features:[[21,8,2,1,-1.],[21,8,1,1,2.]],tilted:0,threshold:-7.5372940045781434e-005,right_val:-0.0578790009021759,left_val:0.0594716407358646},{features:[[7,1,2,2,-1.],[7,1,2,1,2.]],tilted:1,threshold:0.0142522901296616,right_val:-0.3336473107337952,left_val:0.0252972692251205},{features:[[17,4,8,4,-1.],[17,5,8,2,2.]],tilted:0,threshold:3.3469200134277344e-003,right_val:0.0745013207197189,left_val:-0.0707368031144142},{features:[[6,0,13,2,-1.],[6,1,13,1,2.]],tilted:0,threshold:4.4445958919823170e-003,right_val:0.1451885998249054,left_val:-0.0672459527850151},{features:[[21,5,4,6,-1.],[21,7,4,2,3.]],tilted:0,threshold:-8.7205823510885239e-003,right_val:0.0275202393531799,left_val:-0.2021352946758270},{features:[[0,5,4,6,-1.],[0,7,4,2,3.]],tilted:0,threshold:0.0469216890633106,right_val:-0.5311927795410156,left_val:0.0161568503826857},{features:[[21,8,2,1,-1.],[21,8,1,1,2.]],tilted:0,threshold:5.8387980971019715e-005,right_val:0.0720106214284897,left_val:-0.0557161718606949},{features:[[2,8,2,1,-1.],[3,8,1,1,2.]],tilted:0,threshold:-4.6103101340122521e-005,right_val:-0.0971473827958107,left_val:0.0959030091762543},{features:[[23,0,2,1,-1.],[23,0,1,1,2.]],tilted:1,threshold:6.0657761059701443e-003,right_val:-0.2376091033220291,left_val:0.0240712091326714},{features:[[4,0,15,4,-1.],[4,1,15,2,2.]],tilted:0,threshold:-0.0555203706026077,right_val:-0.0299711804836988,left_val:0.3074511885643005},{features:[[15,1,10,8,-1.],[15,3,10,4,2.]],tilted:0,threshold:-0.0365539006888866,right_val:-0.0570152215659618,left_val:0.0328120291233063},{features:[[0,5,4,2,-1.],[0,5,2,1,2.],[2,6,2,1,2.]],tilted:0,threshold:1.8784699495881796e-003,right_val:0.1390983015298843,left_val:-0.0653261989355087},{features:[[23,0,2,1,-1.],[23,0,1,1,2.]],tilted:1,threshold:-7.4822120368480682e-003,right_val:5.9286328032612801e-003,left_val:-0.7748216986656189},{features:[[0,5,1,4,-1.],[0,6,1,2,2.]],tilted:0,threshold:-3.3365150447934866e-003,right_val:0.0226737502962351,left_val:-0.3616085052490234},{features:[[19,13,4,2,-1.],[19,14,4,1,2.]],tilted:0,threshold:-0.0122549999505281,right_val:4.3241591192781925e-003,left_val:-0.6580218076705933},{features:[[7,12,2,2,-1.],[7,12,1,1,2.],[8,13,1,1,2.]],tilted:0,threshold:-2.5022740010172129e-004,right_val:-0.0613101907074451,left_val:0.1368491053581238},{features:[[1,0,24,8,-1.],[13,0,12,4,2.],[1,4,12,4,2.]],tilted:0,threshold:0.1189583986997604,right_val:-0.3081929087638855,left_val:0.0244670100510120},{features:[[2,4,3,3,-1.],[2,5,3,1,3.]],tilted:0,threshold:1.8534749979153275e-003,right_val:0.1380506008863449,left_val:-0.0657177790999413},{features:[[20,6,4,3,-1.],[19,7,4,1,3.]],tilted:1,threshold:-0.0139663796871901,right_val:0.0166652500629425,left_val:-0.4281671941280365},{features:[[5,6,3,4,-1.],[6,7,1,4,3.]],tilted:1,threshold:-0.0120118902996182,right_val:0.0174813903868198,left_val:-0.4546675086021423},{features:[[16,11,2,2,-1.],[17,11,1,1,2.],[16,12,1,1,2.]],tilted:0,threshold:8.6380320135504007e-004,right_val:-0.1949577033519745,left_val:0.0268306396901608},{features:[[7,11,2,2,-1.],[7,11,1,1,2.],[8,12,1,1,2.]],tilted:0,threshold:-5.4863549303263426e-004,right_val:-0.0519250482320786,left_val:0.1728172004222870},{features:[[9,5,9,3,-1.],[12,5,3,3,3.]],tilted:0,threshold:0.0356420204043388,right_val:-0.2636224925518036,left_val:0.0119973402470350},{features:[[0,0,6,1,-1.],[2,0,2,1,3.]],tilted:0,threshold:9.2830741778016090e-003,right_val:-0.5276867151260376,left_val:0.0153813296929002},{features:[[17,4,8,1,-1.],[19,4,4,1,2.]],tilted:0,threshold:3.3444799482822418e-003,right_val:0.1556369960308075,left_val:-0.0448165088891983},{features:[[7,5,9,3,-1.],[10,5,3,3,3.]],tilted:0,threshold:-0.0348524898290634,right_val:0.0147144095972180,left_val:-0.6144651770591736},{features:[[17,4,8,1,-1.],[19,4,4,1,2.]],tilted:0,threshold:-3.6836538929492235e-003,right_val:-0.0403181910514832,left_val:0.0679996237158775},{features:[[0,4,8,1,-1.],[2,4,4,1,2.]],tilted:0,threshold:2.6370671112090349e-003,right_val:0.1650273054838181,left_val:-0.0527165904641151},{features:[[16,11,2,2,-1.],[17,11,1,1,2.],[16,12,1,1,2.]],tilted:0,threshold:-1.1408380232751369e-003,right_val:0.0155292097479105,left_val:-0.1495666950941086},{features:[[6,11,12,2,-1.],[9,11,6,2,2.]],tilted:0,threshold:-5.5604642257094383e-003,right_val:-0.0783084183931351,left_val:0.1015162020921707},{features:[[4,6,20,9,-1.],[9,6,10,9,2.]],tilted:0,threshold:0.0313040204346180,right_val:0.1036399006843567,left_val:-0.0519621782004833},{features:[[6,8,12,2,-1.],[6,9,12,1,2.]],tilted:0,threshold:9.2903850600123405e-003,right_val:0.1653061956167221,left_val:-0.0539887212216854},{features:[[6,8,13,4,-1.],[6,9,13,2,2.]],tilted:0,threshold:-0.0108930300921202,right_val:-0.0734129622578621,left_val:0.1281013935804367},{features:[[2,13,4,2,-1.],[2,14,4,1,2.]],tilted:0,threshold:-4.9190609715878963e-003,right_val:0.0244891606271267,left_val:-0.3507530987262726},{features:[[11,1,3,12,-1.],[11,4,3,6,2.]],tilted:0,threshold:0.0811754167079926,right_val:-0.3776533007621765,left_val:0.0209406390786171},{features:[[7,10,11,4,-1.],[7,11,11,2,2.]],tilted:0,threshold:-7.1189319714903831e-003,right_val:-0.0743796005845070,left_val:0.1320966929197311},{features:[[5,9,15,6,-1.],[5,11,15,2,3.]],tilted:0,threshold:0.0290335901081562,right_val:0.1686525046825409,left_val:-0.0601534284651279},{features:[[1,5,14,10,-1.],[1,10,14,5,2.]],tilted:0,threshold:0.2666859030723572,right_val:-0.3336375057697296,left_val:0.0302151106297970},{features:[[13,10,2,2,-1.],[14,10,1,1,2.],[13,11,1,1,2.]],tilted:0,threshold:1.3437710003927350e-003,right_val:-0.3497652113437653,left_val:0.0244619604200125},{features:[[0,0,4,2,-1.],[0,1,4,1,2.]],tilted:0,threshold:-6.4065970946103334e-005,right_val:-0.1218236982822418,left_val:0.0681859701871872},{features:[[18,3,4,2,-1.],[18,4,4,1,2.]],tilted:0,threshold:-2.2273659706115723e-003,right_val:-0.0569609887897968,left_val:0.0591664388775826},{features:[[0,7,4,4,-1.],[0,8,4,2,2.]],tilted:0,threshold:1.0822839976754040e-004,right_val:0.0699028074741364,left_val:-0.1183675006031990},{features:[[12,12,6,2,-1.],[14,12,2,2,3.]],tilted:0,threshold:7.7762501314282417e-003,right_val:-0.3238837122917175,left_val:0.0182663407176733},{features:[[7,0,3,1,-1.],[8,0,1,1,3.]],tilted:0,threshold:-8.5627898806706071e-004,right_val:-0.0523401089012623,left_val:0.1596496999263763},{features:[[15,0,2,1,-1.],[15,0,1,1,2.]],tilted:0,threshold:3.9805951528251171e-003,right_val:-0.6384922862052918,left_val:5.6993248872458935e-003},{features:[[8,0,2,1,-1.],[9,0,1,1,2.]],tilted:0,threshold:-4.9052381655201316e-004,right_val:-0.0742301419377327,left_val:0.1629474014043808},{features:[[18,3,2,10,-1.],[18,3,1,10,2.]],tilted:0,threshold:-0.0184035003185272,right_val:0.0107059404253960,left_val:-0.6773443222045898},{features:[[7,1,2,2,-1.],[7,1,1,1,2.],[8,2,1,1,2.]],tilted:0,threshold:-8.9714571367949247e-004,right_val:-0.0477185398340225,left_val:0.1691973060369492},{features:[[18,0,7,3,-1.],[18,1,7,1,3.]],tilted:0,threshold:-0.0167341101914644,right_val:0.0124420495703816,left_val:-0.3151237964630127},{features:[[7,12,6,2,-1.],[9,12,2,2,3.]],tilted:0,threshold:-0.0119769899174571,right_val:0.0144362701103091,left_val:-0.5293223857879639},{features:[[20,7,4,3,-1.],[20,8,4,1,3.]],tilted:0,threshold:7.0368088781833649e-003,right_val:-0.2470992058515549,left_val:0.0264915898442268},{features:[[5,3,2,10,-1.],[6,3,1,10,2.]],tilted:0,threshold:-0.0105798998847604,right_val:0.0187591798603535,left_val:-0.4092808067798615},{features:[[16,0,2,2,-1.],[17,0,1,1,2.],[16,1,1,1,2.]],tilted:0,threshold:6.0849997680634260e-004,right_val:0.0843884497880936,left_val:-0.0334094502031803},{features:[[7,0,2,2,-1.],[7,0,1,1,2.],[8,1,1,1,2.]],tilted:0,threshold:-5.9445307124406099e-004,right_val:-0.0555582903325558,left_val:0.1412419974803925},{features:[[15,0,6,2,-1.],[17,0,2,2,3.]],tilted:0,threshold:-0.0157594103366137,right_val:0.0156633593142033,left_val:-0.3833500146865845},{features:[[0,0,1,4,-1.],[0,2,1,2,2.]],tilted:0,threshold:-0.0101080304011703,right_val:0.0209970101714134,left_val:-0.3391439020633698},{features:[[22,1,2,12,-1.],[18,5,2,4,3.]],tilted:1,threshold:8.8242385536432266e-003,right_val:-0.0345581099390984,left_val:0.0468829013407230},{features:[[4,0,12,3,-1.],[8,4,4,3,3.]],tilted:1,threshold:0.1695280969142914,right_val:0.2978200018405914,left_val:-0.0297883804887533},{features:[[14,13,2,2,-1.],[15,13,1,1,2.],[14,14,1,1,2.]],tilted:0,threshold:1.4175090473145247e-003,right_val:-0.2557711899280548,left_val:0.0145506802946329},{features:[[11,6,3,3,-1.],[12,7,1,1,9.]],tilted:0,threshold:-6.2455357983708382e-003,right_val:-0.0457185097038746,left_val:0.1703144013881683},{features:[[15,1,10,8,-1.],[15,3,10,4,2.]],tilted:0,threshold:0.0829719901084900,right_val:0.2358570992946625,left_val:-0.0108856502920389},{features:[[0,1,10,8,-1.],[0,3,10,4,2.]],tilted:0,threshold:-0.0363879613578320,right_val:-0.1351491957902908,left_val:0.0720635578036308},{features:[[11,3,14,10,-1.],[11,8,14,5,2.]],tilted:0,threshold:0.2605817019939423,right_val:-0.2081860005855560,left_val:0.0307604894042015},{features:[[0,0,24,12,-1.],[0,0,12,6,2.],[12,6,12,6,2.]],tilted:0,threshold:-0.1837086975574493,right_val:0.0176900699734688,left_val:-0.4619984030723572},{features:[[20,7,4,3,-1.],[20,8,4,1,3.]],tilted:0,threshold:-3.9726989343762398e-003,right_val:0.0209467206150293,left_val:-0.1660892963409424},{features:[[0,1,7,3,-1.],[0,2,7,1,3.]],tilted:0,threshold:0.0214559100568295,right_val:-0.3625465929508209,left_val:0.0231478307396173},{features:[[20,7,4,3,-1.],[20,8,4,1,3.]],tilted:0,threshold:0.0144318202510476,right_val:-0.2445929050445557,left_val:4.4689280912280083e-003},{features:[[0,7,1,8,-1.],[0,9,1,4,2.]],tilted:0,threshold:-3.3524229656904936e-003,right_val:0.0316352993249893,left_val:-0.2480840981006622},{features:[[22,4,3,4,-1.],[23,5,1,4,3.]],tilted:1,threshold:-0.0156694706529379,right_val:-0.0374899208545685,left_val:0.3172483146190643},{features:[[11,2,12,1,-1.],[15,6,4,1,3.]],tilted:1,threshold:-0.0400774292647839,right_val:0.0327349714934826,left_val:-0.2589775919914246},{features:[[22,4,3,4,-1.],[23,5,1,4,3.]],tilted:1,threshold:0.0123612098395824,right_val:0.1690649986267090,left_val:-0.0450748614966869},{features:[[1,7,4,3,-1.],[1,8,4,1,3.]],tilted:0,threshold:0.0109678898006678,right_val:-0.4384852945804596,left_val:0.0187921095639467},{features:[[13,9,6,2,-1.],[15,9,2,2,3.]],tilted:0,threshold:-0.0137434704229236,right_val:0.0122369602322578,left_val:-0.4609765112400055},{features:[[6,7,2,2,-1.],[6,7,1,1,2.],[7,8,1,1,2.]],tilted:0,threshold:-1.0322439484298229e-003,right_val:-0.0516587682068348,left_val:0.1648599952459335},{features:[[13,9,6,2,-1.],[15,9,2,2,3.]],tilted:0,threshold:8.8313361629843712e-003,right_val:-0.2015953958034515,left_val:0.0159355308860540},{features:[[4,0,6,2,-1.],[6,0,2,2,3.]],tilted:0,threshold:0.0144206797704101,right_val:-0.4641633033752441,left_val:0.0160773508250713},{features:[[13,9,6,2,-1.],[15,9,2,2,3.]],tilted:0,threshold:-1.8205989617854357e-003,right_val:-0.0280837193131447,left_val:0.0433134213089943},{features:[[7,7,2,6,-1.],[7,7,1,6,2.]],tilted:1,threshold:3.9304671809077263e-003,right_val:-0.1514773964881897,left_val:0.0497011989355087},{features:[[24,0,1,10,-1.],[24,5,1,5,2.]],tilted:0,threshold:-8.3210691809654236e-003,right_val:0.0179813895374537,left_val:-0.1029928028583527},{features:[[6,7,3,1,-1.],[7,7,1,1,3.]],tilted:0,threshold:-1.1277500307187438e-003,right_val:-0.0483443103730679,left_val:0.1659521013498306},{features:[[14,13,2,2,-1.],[15,13,1,1,2.],[14,14,1,1,2.]],tilted:0,threshold:-7.8385067172348499e-004,right_val:0.0250845197588205,left_val:-0.1946461051702499},{features:[[8,7,4,1,-1.],[9,7,2,1,2.]],tilted:0,threshold:-8.5464341100305319e-004,right_val:-0.0529893897473812,left_val:0.1473073959350586},{features:[[24,4,1,9,-1.],[21,7,1,3,3.]],tilted:1,threshold:-6.1449417844414711e-003,right_val:-0.0323545187711716,left_val:0.0951583385467529},{features:[[1,4,9,1,-1.],[4,7,3,1,3.]],tilted:1,threshold:0.0537422299385071,right_val:0.5178387761116028,left_val:-0.0160139091312885},{features:[[11,1,6,13,-1.],[13,1,2,13,3.]],tilted:0,threshold:-9.1773690655827522e-003,right_val:-0.0286986008286476,left_val:0.0658730715513229},{features:[[10,2,4,7,-1.],[11,2,2,7,2.]],tilted:0,threshold:-1.6262140125036240e-003,right_val:-0.0662005692720413,left_val:0.1165013015270233},{features:[[11,1,6,13,-1.],[13,1,2,13,3.]],tilted:0,threshold:-0.0702467709779739,right_val:3.3650770783424377e-003,left_val:-0.5561671257019043},{features:[[8,1,6,13,-1.],[10,1,2,13,3.]],tilted:0,threshold:-0.0457130484282970,right_val:0.0145238302648067,left_val:-0.5554363131523132},{features:[[16,9,4,1,-1.],[16,9,2,1,2.]],tilted:0,threshold:-1.6252630157396197e-003,right_val:-0.0477535910904408,left_val:0.0774459466338158},{features:[[5,9,4,1,-1.],[7,9,2,1,2.]],tilted:0,threshold:-8.7784547358751297e-003,right_val:0.0114997997879982,left_val:-0.6660557985305786},{features:[[17,4,1,9,-1.],[14,7,1,3,3.]],tilted:1,threshold:0.0581780597567558,right_val:0.2431164979934692,left_val:-0.0126901902258396},{features:[[7,4,2,2,-1.],[7,4,1,1,2.],[8,5,1,1,2.]],tilted:0,threshold:-1.0166700230911374e-003,right_val:-0.0434626787900925,left_val:0.1701835989952087},{features:[[13,9,2,2,-1.],[14,9,1,1,2.],[13,10,1,1,2.]],tilted:0,threshold:-8.3186908159404993e-004,right_val:0.0277679692953825,left_val:-0.1554417014122009},{features:[[7,11,2,2,-1.],[7,11,1,1,2.],[8,12,1,1,2.]],tilted:0,threshold:1.0635660146363080e-004,right_val:0.0975525230169296,left_val:-0.0799610763788223},{features:[[13,9,2,2,-1.],[14,9,1,1,2.],[13,10,1,1,2.]],tilted:0,threshold:7.7358598355203867e-004,right_val:-0.1640979051589966,left_val:0.0280197393149138},{features:[[6,13,10,1,-1.],[11,13,5,1,2.]],tilted:0,threshold:-5.1288288086652756e-003,right_val:-0.0521811507642269,left_val:0.1435500979423523},{features:[[9,8,10,7,-1.],[9,8,5,7,2.]],tilted:0,threshold:-0.0296237897127867,right_val:-0.0727018266916275,left_val:0.1256711930036545},{features:[[4,5,15,10,-1.],[9,5,5,10,3.]],tilted:0,threshold:0.0479203201830387,right_val:0.1496749967336655,left_val:-0.0627507865428925},{features:[[20,6,5,4,-1.],[20,7,5,2,2.]],tilted:0,threshold:0.0299077890813351,right_val:-0.5352283716201782,left_val:3.3279890194535255e-003},{features:[[0,6,5,4,-1.],[0,7,5,2,2.]],tilted:0,threshold:-3.1103161163628101e-003,right_val:0.0402609407901764,left_val:-0.1846338063478470},{features:[[11,7,3,1,-1.],[12,7,1,1,3.]],tilted:0,threshold:1.1777599574998021e-003,right_val:0.1833201944828033,left_val:-0.0421488806605339},{features:[[9,4,7,3,-1.],[9,5,7,1,3.]],tilted:0,threshold:0.0149721698835492,right_val:0.1479559987783432,left_val:-0.0501780100166798},{features:[[15,4,4,3,-1.],[15,4,2,3,2.]],tilted:0,threshold:0.0226974897086620,right_val:-0.3510260879993439,left_val:8.8858045637607574e-003},{features:[[6,4,4,3,-1.],[8,4,2,3,2.]],tilted:0,threshold:0.0128841297701001,right_val:-0.2406193017959595,left_val:0.0346549116075039},{features:[[16,6,2,2,-1.],[17,6,1,1,2.],[16,7,1,1,2.]],tilted:0,threshold:-1.1240700259804726e-003,right_val:-0.0288430396467447,left_val:0.1314530968666077},{features:[[7,6,2,2,-1.],[7,6,1,1,2.],[8,7,1,1,2.]],tilted:0,threshold:-1.3627869775518775e-003,right_val:-0.0379555486142635,left_val:0.2013843953609467},{features:[[14,13,2,2,-1.],[15,13,1,1,2.],[14,14,1,1,2.]],tilted:0,threshold:5.3557957289740443e-004,right_val:-0.1196514964103699,left_val:0.0279592797160149},{features:[[6,0,4,2,-1.],[6,0,4,1,2.]],tilted:1,threshold:-0.0152801796793938,right_val:0.0156223699450493,left_val:-0.4851869940757752},{features:[[20,14,2,1,-1.],[20,14,1,1,2.]],tilted:0,threshold:4.6412500523729250e-005,right_val:0.0601089298725128,left_val:-0.0589389093220234},{features:[[1,13,6,2,-1.],[1,13,3,1,2.],[4,14,3,1,2.]],tilted:0,threshold:9.6553878393024206e-005,right_val:0.0779175236821175,left_val:-0.0965948700904846},{features:[[12,1,2,2,-1.],[12,2,2,1,2.]],tilted:0,threshold:3.8991239853203297e-003,right_val:0.1902385950088501,left_val:-0.0261822007596493},{features:[[8,0,8,8,-1.],[8,0,4,4,2.],[12,4,4,4,2.]],tilted:0,threshold:0.0237854700535536,right_val:-0.1793317049741745,left_val:0.0403596796095371},{features:[[16,12,2,2,-1.],[17,12,1,1,2.],[16,13,1,1,2.]],tilted:0,threshold:5.9117228374816477e-005,right_val:0.0789666101336479,left_val:-0.0676945373415947},{features:[[0,4,8,8,-1.],[0,4,4,4,2.],[4,8,4,4,2.]],tilted:0,threshold:0.0585355199873447,right_val:0.2635962069034576,left_val:-0.0279133208096027},{features:[[19,4,2,1,-1.],[19,4,1,1,2.]],tilted:0,threshold:-6.7125670611858368e-003,right_val:3.6960430443286896e-003,left_val:-0.8246011137962341},{features:[[4,4,2,1,-1.],[5,4,1,1,2.]],tilted:0,threshold:-4.6747662127017975e-003,right_val:9.2743840068578720e-003,left_val:-0.7625464797019959},{features:[[20,0,2,2,-1.],[21,0,1,1,2.],[20,1,1,1,2.]],tilted:0,threshold:5.3981528617441654e-003,right_val:-0.8057739734649658,left_val:1.9147379789501429e-003},{features:[[0,5,15,3,-1.],[0,6,15,1,3.]],tilted:0,threshold:7.7252141200006008e-003,right_val:0.0925986021757126,left_val:-0.0822006091475487},{features:[[13,5,1,3,-1.],[13,6,1,1,3.]],tilted:0,threshold:-1.1672140099108219e-003,right_val:-0.0459650196135044,left_val:0.1147938966751099},{features:[[4,9,3,2,-1.],[5,10,1,2,3.]],tilted:1,threshold:-7.4022258631885052e-003,right_val:0.0174518898129463,left_val:-0.4262216091156006},{features:[[20,0,2,2,-1.],[21,0,1,1,2.],[20,1,1,1,2.]],tilted:0,threshold:6.5430802351329476e-005,right_val:0.0498182512819767,left_val:-0.0445476993918419},{features:[[3,0,2,2,-1.],[3,0,1,1,2.],[4,1,1,1,2.]],tilted:0,threshold:4.6353430661838502e-005,right_val:0.0922331288456917,left_val:-0.0820099934935570}],threshold:-1.2964390516281128},{simpleClassifiers:[{features:[[0,11,12,4,-1.],[0,11,6,2,2.],[6,13,6,2,2.]],tilted:0,threshold:0.0105607798323035,right_val:0.2072951048612595,left_val:-0.1728546023368835},{features:[[17,1,8,4,-1.],[17,3,8,2,2.]],tilted:0,threshold:-0.0382373891770840,right_val:-0.1585303992033005,left_val:0.1771112978458405},{features:[[6,6,13,6,-1.],[6,8,13,2,3.]],tilted:0,threshold:-0.0541206710040569,right_val:-0.0884335711598396,left_val:0.2564443051815033},{features:[[23,4,2,3,-1.],[23,4,1,3,2.]],tilted:0,threshold:-2.2004460915923119e-003,right_val:-0.1101640984416008,left_val:0.2010346055030823},{features:[[2,13,10,2,-1.],[2,14,10,1,2.]],tilted:0,threshold:0.0654388666152954,right_val:-4.3508232421875000e+003,left_val:7.8213139204308391e-004},{features:[[23,4,2,3,-1.],[23,4,1,3,2.]],tilted:0,threshold:-0.0135645801201463,right_val:4.8653590492904186e-003,left_val:-0.5407810807228088},{features:[[0,4,2,3,-1.],[1,4,1,3,2.]],tilted:0,threshold:-1.8708320567384362e-003,right_val:-0.1228590980172157,left_val:0.1633561998605728},{features:[[2,7,21,3,-1.],[9,8,7,1,9.]],tilted:0,threshold:0.1699268966913223,right_val:0.4810850024223328,left_val:-4.5410599559545517e-003},{features:[[2,11,2,2,-1.],[2,11,1,2,2.]],tilted:1,threshold:3.5981500986963511e-003,right_val:-0.4236158132553101,left_val:0.0356757305562496},{features:[[2,2,21,6,-1.],[9,4,7,2,9.]],tilted:0,threshold:0.5448976159095764,right_val:0.5460472106933594,left_val:-0.0198735594749451},{features:[[1,1,8,6,-1.],[1,3,8,2,3.]],tilted:0,threshold:-0.0627753064036369,right_val:-0.1143800020217896,left_val:0.1722137033939362},{features:[[6,4,15,4,-1.],[6,5,15,2,2.]],tilted:0,threshold:-0.0459444113075733,right_val:-0.0732216089963913,left_val:0.2595784068107605},{features:[[2,10,4,1,-1.],[3,11,2,1,2.]],tilted:1,threshold:2.1809421014040709e-003,right_val:-0.3175086975097656,left_val:0.0495434813201427},{features:[[4,14,18,1,-1.],[4,14,9,1,2.]],tilted:0,threshold:-9.6566081047058105e-003,right_val:-0.0890468433499336,left_val:0.1581763029098511},{features:[[0,3,24,10,-1.],[0,3,12,5,2.],[12,8,12,5,2.]],tilted:0,threshold:0.0808042436838150,right_val:-0.2887117862701416,left_val:0.0503276288509369},{features:[[15,3,10,12,-1.],[20,3,5,6,2.],[15,9,5,6,2.]],tilted:0,threshold:0.0987789332866669,right_val:0.3119831085205078,left_val:-0.0381883382797241},{features:[[9,5,6,3,-1.],[9,6,6,1,3.]],tilted:0,threshold:8.4114018827676773e-003,right_val:0.1344850063323975,left_val:-0.0949936509132385},{features:[[2,13,21,1,-1.],[9,13,7,1,3.]],tilted:0,threshold:-0.0147700998932123,right_val:-0.0750405564904213,left_val:0.1715719997882843},{features:[[0,3,10,12,-1.],[0,3,5,6,2.],[5,9,5,6,2.]],tilted:0,threshold:0.1057564020156860,right_val:0.3495194017887116,left_val:-0.0440231785178185},{features:[[5,3,15,4,-1.],[5,4,15,2,2.]],tilted:0,threshold:0.0401043891906738,right_val:0.2763915061950684,left_val:-0.0572791509330273},{features:[[8,6,9,3,-1.],[8,7,9,1,3.]],tilted:0,threshold:0.0135993398725986,right_val:0.1596630066633225,left_val:-0.0886402428150177},{features:[[14,13,3,1,-1.],[15,13,1,1,3.]],tilted:0,threshold:-3.3378789667040110e-003,right_val:7.1760369464755058e-003,left_val:-0.4990870058536530},{features:[[7,1,10,2,-1.],[7,2,10,1,2.]],tilted:0,threshold:6.5490198321640491e-003,right_val:0.2110590040683746,left_val:-0.0597806982696056},{features:[[14,13,3,1,-1.],[15,13,1,1,3.]],tilted:0,threshold:-6.2758670537732542e-005,right_val:-0.0541992485523224,left_val:0.0655476525425911},{features:[[8,13,3,1,-1.],[9,13,1,1,3.]],tilted:0,threshold:9.0889551211148500e-004,right_val:-0.2828716039657593,left_val:0.0425700992345810},{features:[[1,0,24,12,-1.],[13,0,12,6,2.],[1,6,12,6,2.]],tilted:0,threshold:0.0881031826138496,right_val:-0.2983728945255280,left_val:0.0406627096235752},{features:[[0,0,13,14,-1.],[0,7,13,7,2.]],tilted:0,threshold:-0.1351538002490997,right_val:0.0259989295154810,left_val:-0.4011076092720032},{features:[[21,6,3,3,-1.],[20,7,3,1,3.]],tilted:1,threshold:0.0105496803298593,right_val:-0.3554666042327881,left_val:0.0265602301806211},{features:[[8,9,8,4,-1.],[8,10,8,2,2.]],tilted:0,threshold:-0.0109745198860765,right_val:-0.0715849623084068,left_val:0.1540209054946899},{features:[[13,10,6,4,-1.],[15,10,2,4,3.]],tilted:0,threshold:-0.0128105496987700,right_val:0.0205432493239641,left_val:-0.2680475115776062},{features:[[11,3,4,4,-1.],[11,3,2,4,2.]],tilted:1,threshold:-0.0673751235008240,right_val:0.0192500203847885,left_val:-0.5299177169799805},{features:[[13,10,6,4,-1.],[15,10,2,4,3.]],tilted:0,threshold:0.0133285904303193,right_val:-0.2692896127700806,left_val:0.0141924796625972},{features:[[7,10,10,4,-1.],[7,12,10,2,2.]],tilted:0,threshold:-0.0349247902631760,right_val:-0.0366922505199909,left_val:0.2877762019634247},{features:[[13,10,6,4,-1.],[15,10,2,4,3.]],tilted:0,threshold:-0.0259607005864382,right_val:4.2013241909444332e-003,left_val:-0.5250588059425354},{features:[[6,10,6,4,-1.],[8,10,2,4,3.]],tilted:0,threshold:-0.0144326100125909,right_val:0.0239412691444159,left_val:-0.4404621124267578},{features:[[21,14,4,1,-1.],[21,14,2,1,2.]],tilted:0,threshold:1.0242980206385255e-003,right_val:0.1090075969696045,left_val:-0.0813294127583504},{features:[[0,7,4,4,-1.],[0,8,4,2,2.]],tilted:0,threshold:-3.3913699444383383e-003,right_val:0.0353980511426926,left_val:-0.2744260132312775},{features:[[19,3,6,12,-1.],[22,3,3,6,2.],[19,9,3,6,2.]],tilted:0,threshold:-0.0254591107368469,right_val:-0.0505212917923927,left_val:0.1884281933307648},{features:[[5,1,15,2,-1.],[5,2,15,1,2.]],tilted:0,threshold:-0.0250639300793409,right_val:-0.0679820179939270,left_val:0.1583306044340134},{features:[[19,1,3,4,-1.],[19,2,3,2,2.]],tilted:0,threshold:4.5757358893752098e-003,right_val:0.1146584972739220,left_val:-0.0512838996946812},{features:[[2,5,20,4,-1.],[12,5,10,4,2.]],tilted:0,threshold:-0.1538352966308594,right_val:-0.0233538504689932,left_val:0.4274145960807800},{features:[[21,14,4,1,-1.],[21,14,2,1,2.]],tilted:0,threshold:6.7441980354487896e-003,right_val:-0.1990616023540497,left_val:0.0116364201530814},{features:[[0,14,4,1,-1.],[2,14,2,1,2.]],tilted:0,threshold:4.9857632257044315e-004,right_val:0.0913273170590401,left_val:-0.1112217977643013},{features:[[19,3,6,12,-1.],[22,3,3,6,2.],[19,9,3,6,2.]],tilted:0,threshold:0.0416502095758915,right_val:0.1340909004211426,left_val:-0.0342307090759277},{features:[[0,3,6,12,-1.],[0,3,3,6,2.],[3,9,3,6,2.]],tilted:0,threshold:-0.0486865788698196,right_val:-0.0367092713713646,left_val:0.3840608894824982},{features:[[19,1,3,4,-1.],[19,2,3,2,2.]],tilted:0,threshold:-0.0142661100253463,right_val:-0.0373262614011765,left_val:0.1904101967811585},{features:[[3,1,3,4,-1.],[3,2,3,2,2.]],tilted:0,threshold:2.0738251041620970e-003,right_val:0.1367546021938324,left_val:-0.0940800234675407},{features:[[10,1,10,2,-1.],[10,1,5,2,2.]],tilted:0,threshold:-0.0127805396914482,right_val:-0.0321417711675167,left_val:0.0790209397673607},{features:[[5,0,8,3,-1.],[9,0,4,3,2.]],tilted:0,threshold:8.7420884519815445e-003,right_val:0.1433219015598297,left_val:-0.0805833786725998},{features:[[21,0,2,1,-1.],[21,0,1,1,2.]],tilted:1,threshold:6.9780537160113454e-005,right_val:0.0694082602858543,left_val:-0.1539752036333084},{features:[[2,8,4,2,-1.],[3,9,2,2,2.]],tilted:1,threshold:-7.9981610178947449e-003,right_val:0.0232297703623772,left_val:-0.4497911930084229},{features:[[21,0,2,1,-1.],[21,0,1,1,2.]],tilted:1,threshold:5.3804512135684490e-003,right_val:-0.1725358963012695,left_val:0.0246548391878605},{features:[[2,0,21,1,-1.],[9,0,7,1,3.]],tilted:0,threshold:-0.0200069397687912,right_val:-0.0625987574458122,left_val:0.1652639061212540},{features:[[21,0,2,1,-1.],[21,0,1,1,2.]],tilted:1,threshold:-4.4656409882009029e-003,right_val:0.0105512700974941,left_val:-0.3730463087558746},{features:[[4,0,1,2,-1.],[4,0,1,1,2.]],tilted:1,threshold:-3.1919090542942286e-003,right_val:0.0209588091820478,left_val:-0.4411549866199493},{features:[[1,11,24,4,-1.],[13,11,12,2,2.],[1,13,12,2,2.]],tilted:0,threshold:-0.0622704289853573,right_val:0.0132205402478576,left_val:-0.5413467884063721},{features:[[0,11,24,4,-1.],[0,11,12,2,2.],[12,13,12,2,2.]],tilted:0,threshold:-0.0449563488364220,right_val:0.0206683203577995,left_val:-0.4331294000148773},{features:[[16,5,2,2,-1.],[17,5,1,1,2.],[16,6,1,1,2.]],tilted:0,threshold:1.1595709947869182e-003,right_val:0.1087998002767563,left_val:-0.0236924402415752},{features:[[7,5,2,2,-1.],[7,5,1,1,2.],[8,6,1,1,2.]],tilted:0,threshold:-8.8405620772391558e-004,right_val:-0.0524947308003902,left_val:0.1649617999792099},{features:[[18,1,6,2,-1.],[18,1,3,2,2.]],tilted:0,threshold:0.0266917701810598,right_val:-0.5571644902229309,left_val:0.0148458201438189},{features:[[2,0,21,2,-1.],[9,0,7,2,3.]],tilted:0,threshold:0.0182767305523157,right_val:0.1257701069116592,left_val:-0.0662862136960030},{features:[[13,0,10,15,-1.],[13,0,5,15,2.]],tilted:0,threshold:-0.0809113383293152,right_val:-0.0498078204691410,left_val:0.1131376996636391},{features:[[6,0,13,4,-1.],[6,1,13,2,2.]],tilted:0,threshold:-0.0364037007093430,right_val:-0.0383339710533619,left_val:0.2336605936288834},{features:[[11,3,9,3,-1.],[11,4,9,1,3.]],tilted:0,threshold:-0.0139478798955679,right_val:-0.0678260922431946,left_val:0.0991646125912666},{features:[[3,2,10,3,-1.],[2,3,10,1,3.]],tilted:1,threshold:-0.0224205106496811,right_val:-0.0484246909618378,left_val:0.1904506981372833},{features:[[6,6,16,8,-1.],[6,6,8,8,2.]],tilted:0,threshold:0.0995163321495056,right_val:0.2056124061346054,left_val:-0.0482200607657433},{features:[[5,0,12,15,-1.],[8,0,6,15,2.]],tilted:0,threshold:0.1495629996061325,right_val:-0.6450886726379395,left_val:0.0141723398119211},{features:[[23,8,2,4,-1.],[23,8,1,4,2.]],tilted:0,threshold:9.6693442901596427e-004,right_val:0.0635498985648155,left_val:-0.0378436110913754},{features:[[0,5,3,3,-1.],[0,6,3,1,3.]],tilted:0,threshold:0.0120417503640056,right_val:-0.4774137139320374,left_val:0.0180350895971060},{features:[[21,5,4,2,-1.],[22,5,2,2,2.]],tilted:0,threshold:2.3097700905054808e-003,right_val:0.1302794069051743,left_val:-0.0415334291756153},{features:[[0,5,4,2,-1.],[1,5,2,2,2.]],tilted:0,threshold:2.2019869647920132e-003,right_val:0.1736146062612534,left_val:-0.0514689311385155},{features:[[21,2,3,4,-1.],[22,3,1,4,3.]],tilted:1,threshold:0.0272558908909559,right_val:0.3625235855579376,left_val:-0.0153390001505613},{features:[[4,2,4,3,-1.],[3,3,4,1,3.]],tilted:1,threshold:8.8747506961226463e-003,right_val:0.2076780050992966,left_val:-0.0426916293799877},{features:[[23,2,2,2,-1.],[23,2,2,1,2.]],tilted:1,threshold:4.7241621650755405e-003,right_val:0.0873611792922020,left_val:-0.0500567816197872},{features:[[0,5,4,4,-1.],[0,6,4,2,2.]],tilted:0,threshold:7.3167313530575484e-005,right_val:0.0726777836680412,left_val:-0.1244131028652191},{features:[[23,7,2,5,-1.],[23,7,1,5,2.]],tilted:0,threshold:-1.2639940250664949e-003,right_val:-0.0404986217617989,left_val:0.0776199027895927},{features:[[0,0,1,4,-1.],[0,1,1,2,2.]],tilted:0,threshold:3.6909559275954962e-003,right_val:-0.3086219131946564,left_val:0.0311388503760099},{features:[[23,1,2,4,-1.],[23,3,2,2,2.]],tilted:0,threshold:-0.0283522401005030,right_val:0.0135328602045774,left_val:-0.3550184071063995},{features:[[0,1,2,4,-1.],[0,3,2,2,2.]],tilted:0,threshold:-9.6667202888056636e-004,right_val:-0.1432974934577942,left_val:0.0676028430461884},{features:[[19,3,5,4,-1.],[19,4,5,2,2.]],tilted:0,threshold:-0.0587403103709221,right_val:4.2741261422634125e-003,left_val:-0.5506312847137451},{features:[[12,1,6,2,-1.],[12,1,6,1,2.]],tilted:1,threshold:-0.0272757392376661,right_val:0.0125345299020410,left_val:-0.6493160724639893},{features:[[19,11,6,4,-1.],[19,12,6,2,2.]],tilted:0,threshold:-0.0117558799684048,right_val:0.0137637602165341,left_val:-0.5648565292358398},{features:[[1,3,6,4,-1.],[1,4,6,2,2.]],tilted:0,threshold:7.5923758558928967e-003,right_val:0.2005586028099060,left_val:-0.0431140698492527},{features:[[23,0,2,1,-1.],[23,0,1,1,2.]],tilted:1,threshold:-7.1979401400312781e-004,right_val:0.0340671092271805,left_val:-0.1374174952507019},{features:[[2,0,1,2,-1.],[2,0,1,1,2.]],tilted:1,threshold:4.1190441697835922e-003,right_val:-0.2477497011423111,left_val:0.0367105789482594},{features:[[19,0,4,2,-1.],[20,0,2,2,2.]],tilted:0,threshold:7.5443051755428314e-003,right_val:-0.4473736882209778,left_val:7.2344779036939144e-003},{features:[[0,0,2,12,-1.],[0,0,1,6,2.],[1,6,1,6,2.]],tilted:0,threshold:-5.2358289249241352e-003,right_val:-0.0386803299188614,left_val:0.2173164039850235},{features:[[22,4,2,8,-1.],[23,4,1,4,2.],[22,8,1,4,2.]],tilted:0,threshold:7.4686598964035511e-004,right_val:0.0385193713009357,left_val:-0.0371707193553448},{features:[[1,4,2,8,-1.],[1,4,1,4,2.],[2,8,1,4,2.]],tilted:0,threshold:8.8468490866944194e-004,right_val:0.0926149412989616,left_val:-0.1020980030298233},{features:[[17,9,4,1,-1.],[17,9,2,1,2.]],tilted:0,threshold:-1.1738609755411744e-003,right_val:-0.0856960415840149,left_val:0.1108791977167130},{features:[[12,2,5,8,-1.],[10,4,5,4,2.]],tilted:1,threshold:-0.0989599674940109,right_val:0.0212421305477619,left_val:-0.4499149918556213},{features:[[18,13,2,2,-1.],[19,13,1,1,2.],[18,14,1,1,2.]],tilted:0,threshold:8.8248471729457378e-004,right_val:-0.1995048969984055,left_val:0.0228975899517536},{features:[[6,9,13,6,-1.],[6,11,13,2,3.]],tilted:0,threshold:-0.0413776896893978,right_val:-0.0591393709182739,left_val:0.1549389958381653},{features:[[6,10,13,4,-1.],[6,11,13,2,2.]],tilted:0,threshold:6.7946789786219597e-003,right_val:0.1739570051431656,left_val:-0.0783610120415688},{features:[[0,8,24,4,-1.],[0,8,12,2,2.],[12,10,12,2,2.]],tilted:0,threshold:0.0447585098445416,right_val:-0.3311159014701843,left_val:0.0260890107601881},{features:[[17,10,8,3,-1.],[17,11,8,1,3.]],tilted:0,threshold:2.9978479724377394e-003,right_val:-0.1491470038890839,left_val:0.0459281504154205},{features:[[4,0,16,8,-1.],[4,0,8,4,2.],[12,4,8,4,2.]],tilted:0,threshold:-0.0595893599092960,right_val:0.0325236506760120,left_val:-0.2485350966453552},{features:[[14,0,1,2,-1.],[14,1,1,1,2.]],tilted:0,threshold:9.4199320301413536e-004,right_val:0.1344856023788452,left_val:-0.0425546802580357},{features:[[3,9,6,6,-1.],[5,9,2,6,3.]],tilted:0,threshold:-0.0239475108683109,right_val:0.0178181305527687,left_val:-0.4583190977573395},{features:[[13,10,12,3,-1.],[16,10,6,3,2.]],tilted:0,threshold:7.4462359771132469e-003,right_val:0.0580310709774494,left_val:-0.0423585288226604},{features:[[0,10,12,3,-1.],[3,10,6,3,2.]],tilted:0,threshold:-0.0129095697775483,right_val:-0.0445232689380646,left_val:0.1973039060831070},{features:[[19,8,5,3,-1.],[19,9,5,1,3.]],tilted:0,threshold:2.8930921107530594e-003,right_val:-0.1371746063232422,left_val:0.0428810603916645},{features:[[7,1,3,1,-1.],[8,1,1,1,3.]],tilted:0,threshold:-6.8186258431524038e-004,right_val:-0.0565496906638145,left_val:0.1337869018316269},{features:[[15,1,3,1,-1.],[16,1,1,1,3.]],tilted:0,threshold:9.0884382370859385e-004,right_val:0.1220118999481201,left_val:-0.0361675098538399},{features:[[7,1,3,1,-1.],[8,1,1,1,3.]],tilted:0,threshold:4.2305429815314710e-004,right_val:0.1302513927221298,left_val:-0.0695094764232636},{features:[[20,8,2,3,-1.],[20,9,2,1,3.]],tilted:0,threshold:-1.6460029873996973e-003,right_val:0.0327382087707520,left_val:-0.1300535947084427},{features:[[2,0,4,2,-1.],[3,0,2,2,2.]],tilted:0,threshold:7.2493818588554859e-003,right_val:-0.6227869987487793,left_val:0.0122888395562768},{features:[[19,8,5,3,-1.],[19,9,5,1,3.]],tilted:0,threshold:7.8207803890109062e-003,right_val:-0.1486981958150864,left_val:7.4369488283991814e-003},{features:[[4,1,6,11,-1.],[6,1,2,11,3.]],tilted:0,threshold:0.0359272807836533,right_val:-0.3921496868133545,left_val:0.0188675802201033},{features:[[16,9,2,1,-1.],[16,9,1,1,2.]],tilted:0,threshold:-6.1618811741936952e-005,right_val:-0.0677392184734344,left_val:0.0568877793848515},{features:[[5,2,15,4,-1.],[5,3,15,2,2.]],tilted:0,threshold:0.0374080687761307,right_val:0.2218790054321289,left_val:-0.0385471209883690},{features:[[11,2,3,3,-1.],[11,3,3,1,3.]],tilted:0,threshold:-5.2155661396682262e-003,right_val:-0.0673948600888252,left_val:0.1363334953784943},{features:[[2,7,18,6,-1.],[11,7,9,6,2.]],tilted:0,threshold:-0.0935681909322739,right_val:-0.0487747117877007,left_val:0.1743745058774948},{features:[[1,6,24,9,-1.],[7,6,12,9,2.]],tilted:0,threshold:0.0762281417846680,right_val:0.1471180021762848,left_val:-0.0574758499860764},{features:[[0,0,1,10,-1.],[0,5,1,5,2.]],tilted:0,threshold:-0.0200377702713013,right_val:0.0179230198264122,left_val:-0.4157789945602417},{features:[[9,3,10,2,-1.],[9,4,10,1,2.]],tilted:0,threshold:-0.0118243796750903,right_val:-0.0700482204556465,left_val:0.1144623011350632},{features:[[12,6,1,3,-1.],[12,7,1,1,3.]],tilted:0,threshold:-1.6057320171967149e-003,right_val:-0.0499466583132744,left_val:0.1678820997476578},{features:[[16,9,2,1,-1.],[16,9,1,1,2.]],tilted:0,threshold:-2.5517439935356379e-003,right_val:0.0113612702116370,left_val:-0.3828516900539398},{features:[[7,9,2,1,-1.],[8,9,1,1,2.]],tilted:0,threshold:-9.9515629699453712e-005,right_val:-0.0903496667742729,left_val:0.0925496816635132},{features:[[16,7,6,6,-1.],[19,7,3,3,2.],[16,10,3,3,2.]],tilted:0,threshold:-0.0167104993015528,right_val:-0.0413177497684956,left_val:0.1787143051624298},{features:[[10,10,2,2,-1.],[10,10,1,1,2.],[11,11,1,1,2.]],tilted:0,threshold:-9.6687301993370056e-004,right_val:0.0305528100579977,left_val:-0.2522006928920746},{features:[[16,9,2,2,-1.],[17,9,1,1,2.],[16,10,1,1,2.]],tilted:0,threshold:-6.0828930145362392e-005,right_val:-0.0474381409585476,left_val:0.0542593784630299},{features:[[7,9,2,2,-1.],[7,9,1,1,2.],[8,10,1,1,2.]],tilted:0,threshold:-8.6335372179746628e-004,right_val:-0.0423120781779289,left_val:0.1779994070529938},{features:[[13,10,2,2,-1.],[14,10,1,1,2.],[13,11,1,1,2.]],tilted:0,threshold:-8.9218461653217673e-004,right_val:0.0251416098326445,left_val:-0.1845878958702087},{features:[[11,7,2,3,-1.],[11,8,2,1,3.]],tilted:0,threshold:-3.4870179370045662e-003,right_val:-0.0460440590977669,left_val:0.1677664965391159},{features:[[19,0,6,3,-1.],[19,1,6,1,3.]],tilted:0,threshold:0.0195988900959492,right_val:-0.3022567927837372,left_val:0.0180558506399393},{features:[[0,0,6,3,-1.],[0,1,6,1,3.]],tilted:0,threshold:-0.0109872100874782,right_val:0.0197681505233049,left_val:-0.3727653026580811},{features:[[24,0,1,2,-1.],[24,1,1,1,2.]],tilted:0,threshold:-6.6390639403834939e-005,right_val:-0.1268360018730164,left_val:0.0768569633364677},{features:[[0,0,16,1,-1.],[4,0,8,1,2.]],tilted:0,threshold:-4.2606238275766373e-003,right_val:-0.0696604028344154,left_val:0.1132820025086403},{features:[[19,11,6,4,-1.],[19,12,6,2,2.]],tilted:0,threshold:7.3147160001099110e-003,right_val:-0.2646273076534271,left_val:0.0329976715147495},{features:[[0,11,6,4,-1.],[0,12,6,2,2.]],tilted:0,threshold:-0.0101194800809026,right_val:0.0138464700430632,left_val:-0.4706184864044190},{features:[[5,3,15,6,-1.],[5,6,15,3,2.]],tilted:0,threshold:0.0921443328261375,right_val:0.0808285027742386,left_val:-0.0886306688189507},{features:[[8,3,9,3,-1.],[8,4,9,1,3.]],tilted:0,threshold:0.0118425898253918,right_val:0.1590622961521149,left_val:-0.0542713403701782},{features:[[12,0,1,12,-1.],[12,3,1,6,2.]],tilted:0,threshold:0.0260604508221149,right_val:-0.3709642887115479,left_val:0.0202190801501274},{features:[[1,3,14,8,-1.],[1,7,14,4,2.]],tilted:0,threshold:0.2863250076770783,right_val:-0.3946934938430786,left_val:0.0171639006584883},{features:[[15,0,6,4,-1.],[17,0,2,4,3.]],tilted:0,threshold:-0.0193374603986740,right_val:0.0148878796026111,left_val:-0.2173891961574554},{features:[[3,7,4,2,-1.],[3,7,2,1,2.],[5,8,2,1,2.]],tilted:0,threshold:6.8996037589386106e-004,right_val:0.1074123978614807,left_val:-0.0642509534955025},{features:[[14,5,1,8,-1.],[14,9,1,4,2.]],tilted:0,threshold:0.0273154806345701,right_val:-0.5541477799415588,left_val:5.0893737934529781e-003},{features:[[0,7,3,3,-1.],[0,8,3,1,3.]],tilted:0,threshold:-7.3149320669472218e-003,right_val:0.0114226602017879,left_val:-0.5788456201553345},{features:[[11,12,6,3,-1.],[13,12,2,3,3.]],tilted:0,threshold:0.0134929800406098,right_val:-0.3359794020652771,left_val:6.9531891494989395e-003},{features:[[8,12,6,3,-1.],[10,12,2,3,3.]],tilted:0,threshold:0.0170349292457104,right_val:-0.6638085842132568,left_val:9.6587073057889938e-003},{features:[[16,5,6,10,-1.],[19,5,3,5,2.],[16,10,3,5,2.]],tilted:0,threshold:-0.0495363213121891,right_val:7.1444557979702950e-003,left_val:-0.1099594011902809},{features:[[3,5,6,10,-1.],[3,5,3,5,2.],[6,10,3,5,2.]],tilted:0,threshold:-0.0326232202351093,right_val:-0.0416569598019123,left_val:0.1888170987367630},{features:[[17,8,8,1,-1.],[19,8,4,1,2.]],tilted:0,threshold:2.5752598885446787e-003,right_val:0.1057118028402329,left_val:-0.0510260090231895},{features:[[0,8,8,1,-1.],[2,8,4,1,2.]],tilted:0,threshold:2.4968909565359354e-003,right_val:0.1347001940011978,left_val:-0.0559858083724976},{features:[[9,13,14,2,-1.],[9,13,7,2,2.]],tilted:0,threshold:-0.0116916997358203,right_val:-0.0498108491301537,left_val:0.0694792568683624},{features:[[1,14,20,1,-1.],[6,14,10,1,2.]],tilted:0,threshold:5.0966278649866581e-003,right_val:0.1201341003179550,left_val:-0.0719841867685318},{features:[[17,7,2,2,-1.],[18,7,1,1,2.],[17,8,1,1,2.]],tilted:0,threshold:8.6429098155349493e-004,right_val:0.1105908975005150,left_val:-0.0280915908515453},{features:[[0,8,2,2,-1.],[0,9,2,1,2.]],tilted:0,threshold:-3.0658349860459566e-003,right_val:0.0187105592340231,left_val:-0.4070394039154053},{features:[[17,7,2,2,-1.],[18,7,1,1,2.],[17,8,1,1,2.]],tilted:0,threshold:-5.5272910685744137e-005,right_val:-0.0700317397713661,left_val:0.0707912817597389},{features:[[6,7,2,2,-1.],[6,7,1,1,2.],[7,8,1,1,2.]],tilted:0,threshold:6.5698497928678989e-004,right_val:0.1548248976469040,left_val:-0.0492957085371017},{features:[[13,10,2,2,-1.],[14,10,1,1,2.],[13,11,1,1,2.]],tilted:0,threshold:5.3707341430708766e-004,right_val:-0.1238510981202126,left_val:0.0302961803972721},{features:[[4,0,6,4,-1.],[6,0,2,4,3.]],tilted:0,threshold:-0.0272689107805490,right_val:0.0149874398484826,left_val:-0.4674024879932404},{features:[[10,0,6,2,-1.],[12,0,2,2,3.]],tilted:0,threshold:-2.6138951070606709e-003,right_val:-0.0615368783473969,left_val:0.1166682019829750},{features:[[8,1,8,3,-1.],[10,1,4,3,2.]],tilted:0,threshold:-0.0277075897902250,right_val:0.0120052499696612,left_val:-0.6434546709060669},{features:[[14,6,7,2,-1.],[14,6,7,1,2.]],tilted:1,threshold:-0.0200542695820332,right_val:0.0109763201326132,left_val:-0.3493579030036926},{features:[[8,10,4,1,-1.],[9,10,2,1,2.]],tilted:0,threshold:6.9170317146927118e-004,right_val:-0.1491888016462326,left_val:0.0442647784948349},{features:[[16,11,2,2,-1.],[17,11,1,1,2.],[16,12,1,1,2.]],tilted:0,threshold:6.4560663304291666e-005,right_val:0.0473436005413532,left_val:-0.0422041602432728},{features:[[7,11,2,2,-1.],[7,11,1,1,2.],[8,12,1,1,2.]],tilted:0,threshold:-8.8378103100694716e-005,right_val:-0.0740641728043556,left_val:0.1016054973006249},{features:[[16,11,2,2,-1.],[17,11,1,1,2.],[16,12,1,1,2.]],tilted:0,threshold:-6.6106527810916305e-005,right_val:-0.0495208092033863,left_val:0.0759406536817551},{features:[[7,11,2,2,-1.],[7,11,1,1,2.],[8,12,1,1,2.]],tilted:0,threshold:4.2288508848287165e-004,right_val:0.1385688036680222,left_val:-0.0588600113987923},{features:[[17,9,4,1,-1.],[17,9,2,1,2.]],tilted:0,threshold:2.5251980405300856e-003,right_val:0.1643659025430679,left_val:-0.0302844792604446},{features:[[4,9,4,1,-1.],[6,9,2,1,2.]],tilted:0,threshold:-9.0347938239574432e-003,right_val:0.0117079298943281,left_val:-0.6502289175987244},{features:[[11,8,3,4,-1.],[11,9,3,2,2.]],tilted:0,threshold:-4.2698681354522705e-003,right_val:-0.0608336813747883,left_val:0.1213309019804001},{features:[[9,6,3,2,-1.],[10,7,1,2,3.]],tilted:1,threshold:0.0166539791971445,right_val:-0.5031678080558777,left_val:0.0145571101456881},{features:[[21,0,4,8,-1.],[19,2,4,4,2.]],tilted:1,threshold:-0.1178558021783829,right_val:5.8299610391259193e-003,left_val:-0.3486539125442505},{features:[[4,0,8,4,-1.],[6,2,4,4,2.]],tilted:1,threshold:-0.0389890410006046,right_val:-0.0824354067444801,left_val:0.1082129999995232},{features:[[20,1,5,2,-1.],[20,1,5,1,2.]],tilted:1,threshold:-6.9744870997965336e-003,right_val:-0.0447417609393597,left_val:0.0920993909239769},{features:[[0,6,6,4,-1.],[0,7,6,2,2.]],tilted:0,threshold:0.0154374102130532,right_val:-0.2408691942691803,left_val:0.0294817406684160},{features:[[20,6,5,4,-1.],[20,7,5,2,2.]],tilted:0,threshold:-5.9599988162517548e-003,right_val:0.0256420802325010,left_val:-0.2254153043031693},{features:[[6,8,3,1,-1.],[7,8,1,1,3.]],tilted:0,threshold:-5.3358142031356692e-004,right_val:-0.0571242086589336,left_val:0.1183808967471123},{features:[[1,8,24,2,-1.],[13,8,12,1,2.],[1,9,12,1,2.]],tilted:0,threshold:0.0176937691867352,right_val:-0.3055857121944428,left_val:0.0266077890992165},{features:[[8,8,8,3,-1.],[8,9,8,1,3.]],tilted:0,threshold:5.3599448874592781e-003,right_val:0.1210888996720314,left_val:-0.0569497905671597},{features:[[17,11,6,4,-1.],[19,11,2,4,3.]],tilted:0,threshold:0.0158548094332218,right_val:-0.2521420121192932,left_val:0.0215572193264961},{features:[[0,0,18,1,-1.],[9,0,9,1,2.]],tilted:0,threshold:0.0549633502960205,right_val:-0.5730599761009216,left_val:0.0106362197548151},{features:[[14,6,3,2,-1.],[15,7,1,2,3.]],tilted:1,threshold:-3.7383600138127804e-003,right_val:-0.0306048095226288,left_val:0.0774415433406830},{features:[[5,6,13,2,-1.],[5,7,13,1,2.]],tilted:0,threshold:0.0182623900473118,right_val:0.1176588013768196,left_val:-0.0549028292298317},{features:[[14,6,3,2,-1.],[15,7,1,2,3.]],tilted:1,threshold:-0.0318278707563877,right_val:1.3938200427219272e-003,left_val:-0.9110031723976135},{features:[[10,6,2,6,-1.],[10,8,2,2,3.]],tilted:0,threshold:-3.6466179881244898e-003,right_val:-0.0722526162862778,left_val:0.1085240989923477},{features:[[20,1,5,2,-1.],[20,1,5,1,2.]],tilted:1,threshold:-0.0517431795597076,right_val:1.8797840457409620e-003,left_val:-0.9186943173408508},{features:[[5,1,2,5,-1.],[5,1,1,5,2.]],tilted:1,threshold:-9.0449545532464981e-003,right_val:-0.0388442091643810,left_val:0.1787680983543396},{features:[[24,7,1,8,-1.],[24,9,1,4,2.]],tilted:0,threshold:-4.5340228825807571e-003,right_val:0.0297267790883780,left_val:-0.2472573071718216},{features:[[7,7,11,3,-1.],[7,8,11,1,3.]],tilted:0,threshold:6.8734101951122284e-003,right_val:0.1065412983298302,left_val:-0.0675214827060699},{features:[[13,11,2,2,-1.],[14,11,1,1,2.],[13,12,1,1,2.]],tilted:0,threshold:7.7327789040282369e-004,right_val:-0.1398307979106903,left_val:0.0221925694495440},{features:[[10,11,3,1,-1.],[11,11,1,1,3.]],tilted:0,threshold:-8.5252941062208265e-005,right_val:-0.0786189734935761,left_val:0.0903024971485138},{features:[[24,7,1,8,-1.],[24,9,1,4,2.]],tilted:0,threshold:4.8931739293038845e-003,right_val:-0.1617130041122437,left_val:0.0311242006719112},{features:[[10,5,2,4,-1.],[10,5,2,2,2.]],tilted:1,threshold:-0.0357618294656277,right_val:0.0201859101653099,left_val:-0.3406237065792084},{features:[[22,1,2,3,-1.],[21,2,2,1,3.]],tilted:1,threshold:-0.0110698901116848,right_val:-0.0340334698557854,left_val:0.1165141984820366},{features:[[3,1,3,2,-1.],[4,2,1,2,3.]],tilted:1,threshold:3.4201510716229677e-003,right_val:0.1339436024427414,left_val:-0.0530161187052727},{features:[[16,4,3,3,-1.],[17,5,1,1,9.]],tilted:0,threshold:-0.0499692708253860,right_val:2.7547380886971951e-003,left_val:-0.8493295907974243},{features:[[3,0,3,2,-1.],[3,0,3,1,2.]],tilted:1,threshold:-1.1221430031582713e-003,right_val:0.0413381010293961,left_val:-0.1629413068294525},{features:[[17,0,8,3,-1.],[17,0,4,3,2.]],tilted:0,threshold:0.0371481291949749,right_val:-0.2840433120727539,left_val:0.0171750299632549},{features:[[0,12,4,3,-1.],[0,13,4,1,3.]],tilted:0,threshold:2.3847341071814299e-003,right_val:-0.1844726949930191,left_val:0.0348382107913494},{features:[[2,3,21,3,-1.],[9,3,7,3,3.]],tilted:0,threshold:0.1431124955415726,right_val:-0.2543725967407227,left_val:0.0252217296510935},{features:[[8,1,2,5,-1.],[8,1,1,5,2.]],tilted:1,threshold:-0.0119188595563173,right_val:-0.0447442717850208,left_val:0.1655784994363785},{features:[[19,7,6,4,-1.],[22,7,3,2,2.],[19,9,3,2,2.]],tilted:0,threshold:6.4779450185596943e-003,right_val:0.0799132883548737,left_val:-0.0250237993896008},{features:[[0,7,6,4,-1.],[0,7,3,2,2.],[3,9,3,2,2.]],tilted:0,threshold:1.4581739669665694e-003,right_val:0.0829188674688339,left_val:-0.0797923728823662},{features:[[24,4,1,4,-1.],[24,5,1,2,2.]],tilted:0,threshold:6.2418850138783455e-003,right_val:-0.2995111048221588,left_val:0.0132909296080470},{features:[[4,7,3,4,-1.],[3,8,3,2,2.]],tilted:1,threshold:-0.0227145906537771,right_val:-0.0150371296331286,left_val:0.4398984909057617},{features:[[17,9,4,1,-1.],[18,9,2,1,2.]],tilted:0,threshold:-4.3001482263207436e-003,right_val:7.9521266743540764e-003,left_val:-0.3546585142612457},{features:[[4,9,4,1,-1.],[5,9,2,1,2.]],tilted:0,threshold:1.0604769922792912e-003,right_val:-0.1762923002243042,left_val:0.0385937690734863},{features:[[23,6,2,2,-1.],[23,7,2,1,2.]],tilted:0,threshold:4.3205441907048225e-003,right_val:-0.1075016036629677,left_val:0.0171245392411947},{features:[[0,6,2,2,-1.],[0,7,2,1,2.]],tilted:0,threshold:-3.8217399269342422e-003,right_val:0.0141258295625448,left_val:-0.4589209854602814},{features:[[12,0,3,1,-1.],[13,0,1,1,3.]],tilted:0,threshold:9.7336847102269530e-004,right_val:0.1268056929111481,left_val:-0.0361551195383072},{features:[[1,7,2,2,-1.],[1,7,1,1,2.],[2,8,1,1,2.]],tilted:0,threshold:-7.9081847798079252e-004,right_val:-0.0376146212220192,left_val:0.1707147061824799},{features:[[22,7,2,2,-1.],[23,7,1,1,2.],[22,8,1,1,2.]],tilted:0,threshold:-7.6159887248650193e-004,right_val:-0.0603629797697067,left_val:0.2311398983001709},{features:[[2,11,6,4,-1.],[4,11,2,4,3.]],tilted:0,threshold:-0.0210315398871899,right_val:0.0156012997031212,left_val:-0.4918564856052399},{features:[[14,1,10,4,-1.],[19,1,5,2,2.],[14,3,5,2,2.]],tilted:0,threshold:0.0180973205715418,right_val:0.1050693020224571,left_val:-0.0467358492314816},{features:[[6,2,12,2,-1.],[6,3,12,1,2.]],tilted:0,threshold:-0.0131208598613739,right_val:-0.0857265591621399,left_val:0.1018344014883041},{features:[[9,6,8,9,-1.],[9,9,8,3,3.]],tilted:0,threshold:0.2012819051742554,right_val:0.5418189764022827,left_val:-9.4874696806073189e-003},{features:[[3,8,3,3,-1.],[4,9,1,1,9.]],tilted:0,threshold:7.3326090350747108e-003,right_val:-0.2452981024980545,left_val:0.0282447207719088},{features:[[22,7,2,2,-1.],[23,7,1,1,2.],[22,8,1,1,2.]],tilted:0,threshold:9.0540642850100994e-004,right_val:0.2322594970464706,left_val:-0.0559650883078575},{features:[[11,10,2,2,-1.],[11,10,1,1,2.],[12,11,1,1,2.]],tilted:0,threshold:5.3532002493739128e-004,right_val:-0.1652047038078308,left_val:0.0432194508612156},{features:[[22,7,2,2,-1.],[23,7,1,1,2.],[22,8,1,1,2.]],tilted:0,threshold:-8.0239711678586900e-005,right_val:-0.0475415214896202,left_val:0.0588538907468319},{features:[[4,13,10,1,-1.],[9,13,5,1,2.]],tilted:0,threshold:4.8403399996459484e-003,right_val:0.1303326934576035,left_val:-0.0541158504784107},{features:[[3,0,20,15,-1.],[3,0,10,15,2.]],tilted:0,threshold:0.6619219779968262,right_val:0.5785722732543945,left_val:-0.0147952698171139},{features:[[0,13,24,1,-1.],[6,13,12,1,2.]],tilted:0,threshold:-8.5441237315535545e-003,right_val:-0.0628988370299339,left_val:0.1165743991732597},{features:[[22,7,2,2,-1.],[23,7,1,1,2.],[22,8,1,1,2.]],tilted:0,threshold:5.4021849791752174e-005,right_val:0.0699716731905937,left_val:-0.0602008998394012}],threshold:-1.2540320158004761}],size:[25,15],tilted:true}; +})(jsfeat.haar); \ No newline at end of file diff --git a/cascades/profileface.js b/cascades/profileface.js new file mode 100755 index 0000000..a32cbfd --- /dev/null +++ b/cascades/profileface.js @@ -0,0 +1,7 @@ +/** + * this cascade is derived from https://github.com/mtschirs/js-objectdetect implementation + * @author Martin Tschirsich / http://www.tu-darmstadt.de/~m_t + */ +(function(global) { + global.profileface = {complexClassifiers:[{simpleClassifiers:[{features:[[8,7,2,6,-1.],[8,10,2,3,2.]],threshold:1.1384399840608239e-003,right_val:0.7341383099555969,left_val:-0.8377197980880737},{features:[[8,3,10,7,-1.],[13,3,5,7,2.]],threshold:-0.0113423503935337,right_val:-0.7239630222320557,left_val:0.6270201802253723},{features:[[10,11,3,6,-1.],[10,14,3,3,2.]],threshold:-1.1023089755326509e-003,right_val:-0.6608840823173523,left_val:0.3760018944740295}],threshold:-1.1856809854507446},{simpleClassifiers:[{features:[[10,4,8,8,-1.],[14,4,4,8,2.]],threshold:-0.0195538699626923,right_val:-0.6339616775512695,left_val:0.4924583137035370},{features:[[5,7,5,4,-1.],[5,9,5,2,2.]],threshold:2.2794529795646667e-003,right_val:0.3581846058368683,left_val:-0.6460496783256531},{features:[[8,4,6,6,-1.],[8,4,3,3,2.],[11,7,3,3,2.]],threshold:2.4270440917462111e-003,right_val:0.2849431037902832,left_val:-0.4725323021411896},{features:[[10,14,5,2,-1.],[10,15,5,1,2.]],threshold:1.9644061103463173e-003,right_val:-0.7786815762519836,left_val:0.1699953973293304},{features:[[7,11,8,4,-1.],[7,13,8,2,2.]],threshold:2.2895270958542824e-003,right_val:-0.6672509908676148,left_val:0.1555171012878418},{features:[[11,14,3,3,-1.],[11,15,3,1,3.]],threshold:-3.0143910553306341e-003,right_val:0.1460456997156143,left_val:-0.6872130036354065},{features:[[3,5,3,11,-1.],[4,5,1,11,3.]],threshold:-0.0173990093171597,right_val:-0.1657290011644363,left_val:0.7252438068389893},{features:[[8,7,9,6,-1.],[8,10,9,3,2.]],threshold:9.0722442837432027e-004,right_val:0.2360499948263168,left_val:-0.4638808071613312},{features:[[13,12,1,2,-1.],[13,13,1,1,2.]],threshold:-1.5043979510664940e-003,right_val:0.1143691986799240,left_val:-0.7595962882041931},{features:[[1,3,6,17,-1.],[4,3,3,17,2.]],threshold:0.1080468967556953,right_val:0.7909234166145325,left_val:-0.1286551952362061},{features:[[11,12,1,3,-1.],[11,13,1,1,3.]],threshold:-1.1923050042241812e-003,right_val:0.1484749019145966,left_val:-0.6240354776382446},{features:[[1,9,6,9,-1.],[4,9,3,9,2.]],threshold:-0.0205713901668787,right_val:-0.2128700017929077,left_val:0.4080848991870880}],threshold:-1.4913179874420166},{simpleClassifiers:[{features:[[10,5,8,6,-1.],[14,5,4,6,2.]],threshold:-0.0368992090225220,right_val:-0.4087265133857727,left_val:0.5330861806869507},{features:[[7,8,9,6,-1.],[7,10,9,2,3.]],threshold:2.4960909504443407e-003,right_val:0.2712517976760864,left_val:-0.6948931217193604},{features:[[5,8,6,6,-1.],[5,8,3,3,2.],[8,11,3,3,2.]],threshold:2.4068039783742279e-004,right_val:0.2193035036325455,left_val:-0.5620825290679932},{features:[[2,0,4,18,-1.],[4,0,2,18,2.]],threshold:-0.0580218285322189,right_val:-0.1508214026689529,left_val:0.6906061768531799},{features:[[10,12,3,4,-1.],[10,14,3,2,2.]],threshold:1.1526979506015778e-003,right_val:-0.6631165742874146,left_val:0.1392538994550705},{features:[[7,0,3,9,-1.],[7,3,3,3,3.]],threshold:7.4388440698385239e-003,right_val:0.3169938027858734,left_val:-0.3333317041397095},{features:[[11,13,1,3,-1.],[11,14,1,1,3.]],threshold:-1.4158539706841111e-003,right_val:0.1324332058429718,left_val:-0.6800730228424072},{features:[[4,8,5,2,-1.],[4,9,5,1,2.]],threshold:8.8562711607664824e-004,right_val:0.1973295956850052,left_val:-0.3867216110229492},{features:[[11,13,2,3,-1.],[11,14,2,1,3.]],threshold:2.5714060757309198e-003,right_val:-0.7317706942558289,left_val:0.1203565970063210},{features:[[12,12,1,3,-1.],[12,13,1,1,3.]],threshold:1.8255549948662519e-003,right_val:-0.7719609141349793,left_val:0.0779798403382301},{features:[[9,12,2,8,-1.],[9,16,2,4,2.]],threshold:-1.1993020307272673e-003,right_val:-0.4147912859916687,left_val:0.1682122945785523},{features:[[6,3,4,13,-1.],[8,3,2,13,2.]],threshold:0.0231790803372860,right_val:-0.7104706764221191,left_val:0.0753373205661774},{features:[[2,6,4,12,-1.],[4,6,2,12,2.]],threshold:0.0465394183993340,right_val:0.6627069711685181,left_val:-0.1046483963727951},{features:[[11,13,3,2,-1.],[12,13,1,2,3.]],threshold:-1.7157640540972352e-003,right_val:0.1627524048089981,left_val:-0.4961821138858795},{features:[[3,5,3,11,-1.],[4,5,1,11,3.]],threshold:-0.0127788297832012,right_val:-0.1602790057659149,left_val:0.4625453948974609},{features:[[3,6,13,12,-1.],[3,12,13,6,2.]],threshold:-0.1521482020616531,right_val:0.1002250984311104,left_val:-0.7059270143508911},{features:[[7,7,6,6,-1.],[7,7,3,3,2.],[10,10,3,3,2.]],threshold:3.1789899803698063e-003,right_val:-0.3909341990947723,left_val:0.1234574988484383},{features:[[4,7,3,2,-1.],[5,7,1,2,3.]],threshold:-2.2882770281285048e-003,right_val:-0.1621042042970657,left_val:0.3708150088787079},{features:[[5,4,14,3,-1.],[12,4,7,3,2.]],threshold:-2.9806189704686403e-003,right_val:-0.3323985934257507,left_val:0.1808705925941467},{features:[[10,12,3,2,-1.],[11,12,1,2,3.]],threshold:-1.5072739915922284e-003,right_val:0.0982888564467430,left_val:-0.4947231113910675},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:1.9225040450692177e-003,right_val:0.3077332973480225,left_val:-0.1779111027717590},{features:[[12,14,1,3,-1.],[12,15,1,1,3.]],threshold:1.9025449873879552e-003,right_val:-0.5902097225189209,left_val:0.0847949981689453},{features:[[3,6,3,3,-1.],[4,6,1,3,3.]],threshold:-3.5421559587121010e-003,right_val:-0.1439293026924133,left_val:0.3117577135562897},{features:[[8,4,3,2,-1.],[9,4,1,2,3.]],threshold:-2.9751660767942667e-003,right_val:0.0826398879289627,left_val:-0.6364914178848267},{features:[[3,3,3,13,-1.],[4,3,1,13,3.]],threshold:0.0100032901391387,right_val:0.4238753020763397,left_val:-0.1169926002621651},{features:[[15,4,2,3,-1.],[15,5,2,1,3.]],threshold:-1.9193530315533280e-003,right_val:0.1103824004530907,left_val:-0.4711583852767944},{features:[[12,8,4,4,-1.],[12,10,4,2,2.]],threshold:0.0250706207007170,right_val:-0.8035132884979248,left_val:0.0487759299576283}],threshold:-1.9596290588378906},{simpleClassifiers:[{features:[[8,7,8,9,-1.],[8,10,8,3,3.]],threshold:0.0142147997394204,right_val:0.3346172869205475,left_val:-0.6357787847518921},{features:[[8,0,12,6,-1.],[8,0,6,3,2.],[14,3,6,3,2.]],threshold:-0.0125259095802903,right_val:-0.4133152961730957,left_val:0.3276613056659699},{features:[[5,9,3,6,-1.],[5,12,3,3,2.]],threshold:-2.2514370357384905e-005,right_val:-0.5428205132484436,left_val:0.2310263067483902},{features:[[11,12,2,4,-1.],[12,12,1,4,2.]],threshold:1.8600060138851404e-003,right_val:-0.6913194060325623,left_val:0.1793334931135178},{features:[[10,11,3,8,-1.],[11,11,1,8,3.]],threshold:7.8344792127609253e-003,right_val:-0.7812684774398804,left_val:0.0910713002085686},{features:[[5,5,5,6,-1.],[5,7,5,2,3.]],threshold:-4.2322301305830479e-003,right_val:-0.4290603101253510,left_val:0.2065840959548950},{features:[[10,13,2,6,-1.],[10,16,2,3,2.]],threshold:-7.5860600918531418e-004,right_val:-0.4207031130790710,left_val:0.2073071002960205},{features:[[10,15,3,4,-1.],[11,15,1,4,3.]],threshold:-3.5626380704343319e-003,right_val:0.1311862021684647,left_val:-0.6322708725929260},{features:[[7,3,3,3,-1.],[8,3,1,3,3.]],threshold:-4.9960161559283733e-003,right_val:0.0782033279538155,left_val:-0.7511237859725952},{features:[[5,8,6,2,-1.],[8,8,3,2,2.]],threshold:7.3098740540444851e-003,right_val:-0.6631010770797730,left_val:0.0934286415576935},{features:[[8,7,4,2,-1.],[10,7,2,2,2.]],threshold:2.2772040392737836e-004,right_val:0.2000820040702820,left_val:-0.3414882123470306},{features:[[5,6,2,3,-1.],[6,6,1,3,2.]],threshold:8.3124160300940275e-004,right_val:0.2585771083831787,left_val:-0.2544816136360169},{features:[[8,0,3,8,-1.],[9,0,1,8,3.]],threshold:-7.5492179021239281e-003,right_val:0.0830044224858284,left_val:-0.6613898873329163},{features:[[5,10,3,8,-1.],[5,14,3,4,2.]],threshold:-0.0380399487912655,right_val:0.0592315904796124,left_val:-0.8216357231140137},{features:[[12,3,3,2,-1.],[13,3,1,2,3.]],threshold:2.8484580107033253e-003,right_val:-0.5833374261856079,left_val:0.0897299572825432},{features:[[8,2,3,4,-1.],[9,2,1,4,3.]],threshold:4.8181698657572269e-003,right_val:-0.5761976838111877,left_val:0.0939605608582497},{features:[[14,10,1,8,-1.],[14,14,1,4,2.]],threshold:-0.0111904898658395,right_val:0.0736088976264000,left_val:-0.6254429817199707},{features:[[6,12,2,3,-1.],[6,13,2,1,3.]],threshold:-6.4537129364907742e-003,right_val:-0.1002079024910927,left_val:0.5512338876724243},{features:[[6,12,2,3,-1.],[6,13,2,1,3.]],threshold:3.3225629013031721e-003,right_val:0.5366494059562683,left_val:-0.1079789027571678},{features:[[9,12,3,2,-1.],[10,12,1,2,3.]],threshold:4.6705761924386024e-003,right_val:-0.6768360137939453,left_val:0.0883211269974709},{features:[[12,2,1,12,-1.],[12,6,1,4,3.]],threshold:-0.0116133103147149,right_val:0.0765566304326057,left_val:-0.5071188211441040},{features:[[2,8,14,6,-1.],[2,8,7,3,2.],[9,11,7,3,2.]],threshold:-0.0375156104564667,right_val:0.0594486109912395,left_val:-0.7293627262115479},{features:[[11,3,3,17,-1.],[12,3,1,17,3.]],threshold:0.0230860300362110,right_val:-0.7845978140830994,left_val:0.0507189594209194},{features:[[12,12,1,2,-1.],[12,13,1,1,2.]],threshold:-7.1651988946541678e-006,right_val:-0.2571322023868561,left_val:0.1668622046709061},{features:[[13,1,2,1,-1.],[14,1,1,1,2.]],threshold:7.1611627936363220e-004,right_val:-0.4279364049434662,left_val:0.1063603013753891},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:4.1476460173726082e-003,right_val:0.4199318885803223,left_val:-0.1206965968012810},{features:[[5,10,1,3,-1.],[5,11,1,1,3.]],threshold:-2.5815099943429232e-003,right_val:-0.1004581004381180,left_val:0.4871808886528015},{features:[[12,12,2,3,-1.],[12,13,2,1,3.]],threshold:-1.7147070029750466e-003,right_val:0.1037511005997658,left_val:-0.4609631001949310}],threshold:-1.9849590063095093},{simpleClassifiers:[{features:[[8,2,10,10,-1.],[13,2,5,10,2.]],threshold:-0.0612027198076248,right_val:-0.3940125107765198,left_val:0.3907910883426666},{features:[[11,13,3,1,-1.],[12,13,1,1,3.]],threshold:-1.4643670292571187e-003,right_val:0.1566022038459778,left_val:-0.7369784116744995},{features:[[12,10,1,4,-1.],[12,12,1,2,2.]],threshold:7.2080420795828104e-004,right_val:-0.5801265835762024,left_val:0.2167553007602692},{features:[[8,7,2,6,-1.],[8,10,2,3,2.]],threshold:6.4895692048594356e-004,right_val:0.1278524994850159,left_val:-0.7230809926986694},{features:[[12,11,1,3,-1.],[12,12,1,1,3.]],threshold:-1.7158190021291375e-003,right_val:0.1021030992269516,left_val:-0.7710043191909790},{features:[[9,12,3,3,-1.],[10,12,1,3,3.]],threshold:-2.2490581031888723e-003,right_val:0.1242726966738701,left_val:-0.6062312722206116},{features:[[6,0,8,6,-1.],[6,3,8,3,2.]],threshold:0.0538419783115387,right_val:0.5335056781768799,left_val:-0.1716974973678589},{features:[[0,0,8,19,-1.],[4,0,4,19,2.]],threshold:-0.1328897029161453,right_val:-0.1895489990711212,left_val:0.5592436790466309},{features:[[5,6,4,9,-1.],[5,9,4,3,3.]],threshold:9.0965389972552657e-004,right_val:0.1692426055669785,left_val:-0.4716643095016480},{features:[[13,14,1,2,-1.],[13,15,1,1,2.]],threshold:6.0799147468060255e-004,right_val:-0.5984687805175781,left_val:0.1134722009301186},{features:[[1,3,8,15,-1.],[5,3,4,15,2.]],threshold:0.1607262939214706,right_val:0.6648719906806946,left_val:-0.1029551997780800},{features:[[13,14,2,3,-1.],[13,15,2,1,3.]],threshold:-1.7097239615395665e-003,right_val:0.1339205056428909,left_val:-0.4727627933025360},{features:[[5,7,3,2,-1.],[6,7,1,2,3.]],threshold:1.1734620202332735e-003,right_val:0.2613565027713776,left_val:-0.2279558926820755},{features:[[8,5,3,1,-1.],[9,5,1,1,3.]],threshold:-1.5138329472392797e-003,right_val:0.1102833971381187,left_val:-0.5539500117301941},{features:[[9,5,3,1,-1.],[10,5,1,1,3.]],threshold:-2.1774161141365767e-003,right_val:0.0784866735339165,left_val:-0.6222890019416809},{features:[[6,11,1,3,-1.],[6,12,1,1,3.]],threshold:-2.7727920096367598e-003,right_val:-0.1349655985832214,left_val:0.4614112079143524},{features:[[18,4,1,2,-1.],[18,5,1,1,2.]],threshold:9.3199027469381690e-004,right_val:-0.5163183808326721,left_val:0.1016277000308037},{features:[[6,11,2,3,-1.],[6,12,2,1,3.]],threshold:2.9746659565716982e-003,right_val:0.4211730062961578,left_val:-0.1299920976161957},{features:[[10,10,3,4,-1.],[11,10,1,4,3.]],threshold:-5.0399480387568474e-003,right_val:0.0776241272687912,left_val:-0.6370617151260376},{features:[[6,5,2,14,-1.],[6,12,2,7,2.]],threshold:0.0234148502349854,right_val:-0.5983113050460815,left_val:0.0721827968955040},{features:[[14,8,3,4,-1.],[14,10,3,2,2.]],threshold:-1.0927390540018678e-003,right_val:0.1182999014854431,left_val:-0.4166488051414490},{features:[[4,5,3,6,-1.],[4,7,3,2,3.]],threshold:-1.6441360348835588e-003,right_val:-0.2755101919174194,left_val:0.1858306974172592},{features:[[5,10,2,8,-1.],[5,14,2,4,2.]],threshold:-0.0257362797856331,right_val:0.0639077499508858,left_val:-0.7514647841453552},{features:[[9,1,3,2,-1.],[10,1,1,2,3.]],threshold:-2.8924590442329645e-003,right_val:0.0732977390289307,left_val:-0.5678088068962097},{features:[[10,1,3,3,-1.],[11,1,1,3,3.]],threshold:-5.2889231592416763e-003,right_val:0.0686869472265244,left_val:-0.6373888850212097},{features:[[9,12,8,8,-1.],[9,12,4,4,2.],[13,16,4,4,2.]],threshold:3.2964269630610943e-003,right_val:0.1598978042602539,left_val:-0.2506295144557953},{features:[[8,13,6,4,-1.],[10,13,2,4,3.]],threshold:0.0249144397675991,right_val:-0.7620877027511597,left_val:0.0552609786391258},{features:[[3,6,3,12,-1.],[4,6,1,12,3.]],threshold:-0.0150885004550219,right_val:-0.1200395971536636,left_val:0.3703337907791138}],threshold:-1.8260079622268677},{simpleClassifiers:[{features:[[9,3,8,5,-1.],[13,3,4,5,2.]],threshold:-0.0118571799248457,right_val:-0.5170331001281738,left_val:0.2942155897617340},{features:[[7,7,3,6,-1.],[7,10,3,3,2.]],threshold:2.0991980563849211e-003,right_val:0.2064850032329559,left_val:-0.6147174835205078},{features:[[5,10,10,4,-1.],[5,12,10,2,2.]],threshold:-1.5772449842188507e-004,right_val:-0.5525804758071899,left_val:0.2287074029445648},{features:[[11,12,1,6,-1.],[11,15,1,3,2.]],threshold:-2.0669099467340857e-004,right_val:-0.5492612719535828,left_val:0.1207000985741615},{features:[[5,8,6,2,-1.],[8,8,3,2,2.]],threshold:2.2675560321658850e-003,right_val:-0.4607430100440979,left_val:0.1535481065511704},{features:[[2,0,8,4,-1.],[2,0,4,2,2.],[6,2,4,2,2.]],threshold:0.0144694996997714,right_val:0.4207141101360321,left_val:-0.1897630989551544},{features:[[11,7,3,5,-1.],[12,7,1,5,3.]],threshold:-1.2127560330554843e-003,right_val:0.0994258671998978,left_val:-0.4513986110687256},{features:[[12,13,2,3,-1.],[12,14,2,1,3.]],threshold:2.1505509503185749e-003,right_val:-0.6206424236297607,left_val:0.1020087972283363},{features:[[12,12,1,2,-1.],[12,13,1,1,2.]],threshold:-1.6638869419693947e-003,right_val:0.0772146806120873,left_val:-0.7036749124526978},{features:[[5,11,6,3,-1.],[8,11,3,3,2.]],threshold:1.0530210565775633e-003,right_val:0.1761610954999924,left_val:-0.3245396018028259},{features:[[2,6,3,9,-1.],[3,6,1,9,3.]],threshold:0.0118364095687866,right_val:0.4264113008975983,left_val:-0.1350782066583633},{features:[[12,12,1,3,-1.],[12,13,1,1,3.]],threshold:9.6512871095910668e-004,right_val:-0.4854493141174316,left_val:0.0945027694106102},{features:[[5,8,4,2,-1.],[5,9,4,1,2.]],threshold:7.5651629595085979e-004,right_val:0.1686761975288391,left_val:-0.2995952963829041},{features:[[3,8,3,7,-1.],[4,8,1,7,3.]],threshold:0.0108391502872109,right_val:0.4691441059112549,left_val:-0.1112103015184403},{features:[[1,3,6,15,-1.],[3,3,2,15,3.]],threshold:-0.0514394193887711,right_val:-0.1177640035748482,left_val:0.4172692000865936},{features:[[12,14,4,3,-1.],[12,15,4,1,3.]],threshold:3.4927250817418098e-003,right_val:-0.5259935259819031,left_val:0.0925122797489166},{features:[[9,0,2,20,-1.],[9,0,1,10,2.],[10,10,1,10,2.]],threshold:-0.0139263998717070,right_val:0.0523864589631557,left_val:-0.6663349866867065},{features:[[6,12,3,3,-1.],[6,13,3,1,3.]],threshold:4.5590959489345551e-003,right_val:0.4377475082874298,left_val:-0.0933838412165642},{features:[[5,7,3,10,-1.],[5,12,3,5,2.]],threshold:-0.0373186990618706,right_val:0.0726278498768806,left_val:-0.5958368778228760},{features:[[8,5,2,1,-1.],[9,5,1,1,2.]],threshold:1.2496879789978266e-003,right_val:-0.4877246022224426,left_val:0.0695372372865677},{features:[[5,12,3,3,-1.],[5,13,3,1,3.]],threshold:-3.7307639140635729e-003,right_val:-0.1173909008502960,left_val:0.3269925117492676},{features:[[15,5,4,2,-1.],[15,6,4,1,2.]],threshold:2.1144179627299309e-003,right_val:-0.4178802073001862,left_val:0.0928890928626060},{features:[[15,5,3,2,-1.],[15,6,3,1,2.]],threshold:-6.4239342464134097e-004,right_val:0.1310780942440033,left_val:-0.2933219075202942},{features:[[5,11,2,3,-1.],[5,12,2,1,3.]],threshold:-3.1379980500787497e-003,right_val:-0.1150685027241707,left_val:0.3244552016258240},{features:[[6,5,4,12,-1.],[8,5,2,12,2.]],threshold:-0.0391869693994522,right_val:0.0500534810125828,left_val:-0.7936044931411743},{features:[[7,4,3,3,-1.],[8,4,1,3,3.]],threshold:4.4646807946264744e-003,right_val:-0.5653573870658875,left_val:0.0547760203480721},{features:[[5,6,2,3,-1.],[6,6,1,3,2.]],threshold:8.6451368406414986e-004,right_val:0.1975816041231155,left_val:-0.1747120022773743},{features:[[4,8,3,1,-1.],[5,8,1,1,3.]],threshold:2.4237011093646288e-003,right_val:0.4076026082038879,left_val:-0.0952961891889572},{features:[[12,10,2,1,-1.],[13,10,1,1,2.]],threshold:-2.5377490092068911e-003,right_val:0.0699205473065376,left_val:-0.6245474219322205},{features:[[10,13,5,2,-1.],[10,14,5,1,2.]],threshold:-7.3309220169903710e-006,right_val:-0.2815726995468140,left_val:0.1224924996495247},{features:[[11,13,1,3,-1.],[11,14,1,1,3.]],threshold:-1.8882560543715954e-003,right_val:0.0658209323883057,left_val:-0.6267039775848389},{features:[[7,2,3,6,-1.],[7,4,3,2,3.]],threshold:6.0609861975535750e-004,right_val:0.1290224045515060,left_val:-0.2548140883445740},{features:[[5,11,2,3,-1.],[5,12,2,1,3.]],threshold:2.3213759995996952e-003,right_val:0.3245609104633331,left_val:-0.0974301174283028},{features:[[12,14,2,3,-1.],[12,15,2,1,3.]],threshold:-1.8534410046413541e-003,right_val:0.0829688534140587,left_val:-0.4406534135341644},{features:[[8,5,3,3,-1.],[8,6,3,1,3.]],threshold:2.3999500554054976e-003,right_val:0.2828806042671204,left_val:-0.1204126998782158},{features:[[7,6,9,10,-1.],[7,11,9,5,2.]],threshold:-0.0813561975955963,right_val:0.0465683005750179,left_val:-0.7397223114967346},{features:[[0,18,18,2,-1.],[6,18,6,2,3.]],threshold:-2.9865680262446404e-003,right_val:-0.1983491033315659,left_val:0.1633462011814117},{features:[[0,5,1,8,-1.],[0,9,1,4,2.]],threshold:2.8128880076110363e-003,right_val:-0.2939819991588593,left_val:0.1183737963438034},{features:[[1,3,8,10,-1.],[1,8,8,5,2.]],threshold:-0.1006079018115997,right_val:0.0425100214779377,left_val:-0.7371764779090881},{features:[[9,12,6,2,-1.],[9,13,6,1,2.]],threshold:1.1854549666168168e-004,right_val:-0.2913986146450043,left_val:0.1047106012701988},{features:[[9,6,2,3,-1.],[9,7,2,1,3.]],threshold:2.2375308908522129e-003,right_val:0.3404592871665955,left_val:-0.0960420593619347},{features:[[9,4,3,3,-1.],[10,4,1,3,3.]],threshold:-4.4986992143094540e-003,right_val:0.0562368407845497,left_val:-0.5823466181755066},{features:[[13,13,1,3,-1.],[13,14,1,1,3.]],threshold:-3.6484538577497005e-004,right_val:0.1011399030685425,left_val:-0.2795613110065460},{features:[[2,6,13,3,-1.],[2,7,13,1,3.]],threshold:-7.9940296709537506e-003,right_val:-0.1194123029708862,left_val:0.2777594923973084},{features:[[10,15,2,4,-1.],[11,15,1,4,2.]],threshold:-5.1547219045460224e-003,right_val:0.0489171408116817,left_val:-0.6022951006889343},{features:[[7,7,2,3,-1.],[8,7,1,3,2.]],threshold:-8.1772619159892201e-004,right_val:-0.1640768945217133,left_val:0.1766050010919571},{features:[[3,6,12,8,-1.],[3,6,6,4,2.],[9,10,6,4,2.]],threshold:0.0674346983432770,right_val:-0.7186576128005981,left_val:0.0407614596188068},{features:[[12,0,8,4,-1.],[12,0,4,2,2.],[16,2,4,2,2.]],threshold:-2.4103289470076561e-003,right_val:-0.1608185023069382,left_val:0.1767168045043945},{features:[[9,15,3,3,-1.],[10,15,1,3,3.]],threshold:-3.5183799918740988e-003,right_val:0.0706716328859329,left_val:-0.4307860136032105},{features:[[10,14,1,2,-1.],[10,15,1,1,2.]],threshold:-1.4561560419679154e-005,right_val:-0.2338785976171494,left_val:0.1271470040082932},{features:[[6,11,5,6,-1.],[6,14,5,3,2.]],threshold:-0.0479518212378025,right_val:0.0368030816316605,left_val:-0.7908576726913452},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:2.1735159680247307e-003,right_val:0.2533034980297089,left_val:-0.1308927983045578},{features:[[5,10,1,3,-1.],[5,11,1,1,3.]],threshold:-3.4542270004749298e-003,right_val:-0.0753372535109520,left_val:0.5102524757385254}],threshold:-1.9446740150451660},{simpleClassifiers:[{features:[[5,6,3,4,-1.],[6,6,1,4,3.]],threshold:4.5243161730468273e-003,right_val:0.5190864205360413,left_val:-0.3048551976680756},{features:[[9,6,6,4,-1.],[11,6,2,4,3.]],threshold:2.3372350260615349e-003,right_val:0.2905215919017792,left_val:-0.4290454089641571},{features:[[6,5,12,6,-1.],[6,7,12,2,3.]],threshold:-4.4243237935006618e-003,right_val:-0.4595498144626617,left_val:0.2106857001781464},{features:[[3,1,16,7,-1.],[11,1,8,7,2.]],threshold:-0.0128874396905303,right_val:-0.4587906897068024,left_val:0.1913823038339615},{features:[[12,11,1,6,-1.],[12,14,1,3,2.]],threshold:-5.2370920457178727e-005,right_val:-0.5026736855506897,left_val:0.1414148956537247},{features:[[6,6,9,8,-1.],[6,10,9,4,2.]],threshold:-4.7738491557538509e-003,right_val:0.1234100982546806,left_val:-0.4876083135604858},{features:[[5,9,4,6,-1.],[5,12,4,3,2.]],threshold:9.6315861446782947e-004,right_val:-0.4479374885559082,left_val:0.1336739957332611},{features:[[1,0,6,14,-1.],[4,0,3,14,2.]],threshold:-0.0891403034329414,right_val:-0.1592300981283188,left_val:0.5038766860961914},{features:[[8,1,1,9,-1.],[8,4,1,3,3.]],threshold:1.7201449954882264e-003,right_val:0.2434068024158478,left_val:-0.2053536027669907},{features:[[11,13,2,2,-1.],[11,14,2,1,2.]],threshold:-2.6712119579315186e-003,right_val:0.0530356504023075,left_val:-0.6331971287727356},{features:[[2,7,4,13,-1.],[4,7,2,13,2.]],threshold:0.0373532809317112,right_val:0.4664533138275147,left_val:-0.1136024966835976},{features:[[5,8,6,6,-1.],[8,8,3,6,2.]],threshold:-0.0315109603106976,right_val:0.0693718567490578,left_val:-0.6882048249244690},{features:[[18,0,2,20,-1.],[19,0,1,20,2.]],threshold:0.0152938198298216,right_val:0.4626778960227966,left_val:-0.1004384011030197},{features:[[6,7,3,3,-1.],[7,7,1,3,3.]],threshold:5.4966909810900688e-003,right_val:0.4512706100940704,left_val:-0.0935146436095238},{features:[[13,10,1,4,-1.],[13,12,1,2,2.]],threshold:-4.6311439946293831e-003,right_val:0.0850035473704338,left_val:-0.6431459784507752},{features:[[12,11,2,2,-1.],[12,12,2,1,2.]],threshold:8.0943357897922397e-004,right_val:-0.4932079911231995,left_val:0.0797389671206474},{features:[[3,6,12,6,-1.],[3,6,6,3,2.],[9,9,6,3,2.]],threshold:0.0297459401190281,right_val:-0.5048243999481201,left_val:0.0784204676747322},{features:[[10,13,2,2,-1.],[10,14,2,1,2.]],threshold:9.7070122137665749e-004,right_val:-0.5703517794609070,left_val:0.0581354387104511},{features:[[6,13,2,3,-1.],[6,14,2,1,3.]],threshold:2.4534659460186958e-003,right_val:0.3685297071933746,left_val:-0.1125906035304070},{features:[[13,5,1,3,-1.],[13,6,1,1,3.]],threshold:1.9709810148924589e-003,right_val:-0.5268386006355286,left_val:0.0771853104233742},{features:[[6,14,3,3,-1.],[6,15,3,1,3.]],threshold:4.8643019981682301e-003,right_val:0.4147444069385529,left_val:-0.1047953963279724},{features:[[5,15,3,3,-1.],[5,16,3,1,3.]],threshold:1.0143260005861521e-003,right_val:0.2867107987403870,left_val:-0.1473156064748764},{features:[[15,3,1,3,-1.],[15,4,1,1,3.]],threshold:-9.5099088503047824e-004,right_val:0.0881083533167839,left_val:-0.3807004988193512},{features:[[3,8,3,12,-1.],[4,8,1,12,3.]],threshold:-5.6730289943516254e-003,right_val:-0.1369633972644806,left_val:0.2481890022754669},{features:[[3,4,3,14,-1.],[4,4,1,14,3.]],threshold:0.0169878993183374,right_val:0.5278167128562927,left_val:-0.0808960422873497},{features:[[6,11,6,2,-1.],[9,11,3,2,2.]],threshold:-7.5278789736330509e-003,right_val:0.0893896669149399,left_val:-0.4688000977039337},{features:[[4,8,8,4,-1.],[8,8,4,4,2.]],threshold:0.0339485295116901,right_val:-0.6739956140518189,left_val:0.0505947917699814},{features:[[4,5,2,4,-1.],[5,5,1,4,2.]],threshold:8.3328841719776392e-004,right_val:0.1960709989070892,left_val:-0.1893136054277420},{features:[[7,3,2,1,-1.],[8,3,1,1,2.]],threshold:-5.9632491320371628e-004,right_val:0.1054477021098137,left_val:-0.3622928857803345},{features:[[12,16,2,3,-1.],[12,17,2,1,3.]],threshold:3.0905720777809620e-003,right_val:-0.5531697273254395,left_val:0.0572096295654774},{features:[[3,16,6,3,-1.],[3,17,6,1,3.]],threshold:3.5152619238942862e-003,right_val:0.2936989963054657,left_val:-0.1221107020974159},{features:[[13,4,2,1,-1.],[14,4,1,1,2.]],threshold:7.9333729809150100e-004,right_val:-0.4453982114791870,left_val:0.0759779065847397},{features:[[9,16,4,4,-1.],[11,16,2,4,2.]],threshold:-0.0111893601715565,right_val:0.0574383698403835,left_val:-0.5059651732444763},{features:[[5,9,3,1,-1.],[6,9,1,1,3.]],threshold:-1.1787790572270751e-003,right_val:-0.1076223030686379,left_val:0.3079969882965088},{features:[[6,8,2,2,-1.],[6,9,2,1,2.]],threshold:5.4418851505033672e-005,right_val:0.1313844025135040,left_val:-0.2599756121635437},{features:[[12,13,2,1,-1.],[13,13,1,1,2.]],threshold:-7.2562302193546202e-006,right_val:-0.2109470069408417,left_val:0.1543983966112137},{features:[[6,7,6,3,-1.],[8,7,2,3,3.]],threshold:-8.3436258137226105e-004,right_val:-0.2436766028404236,left_val:0.1368986964225769},{features:[[5,8,2,10,-1.],[5,13,2,5,2.]],threshold:-0.0333806090056896,right_val:0.0509867407381535,left_val:-0.6747735738754273},{features:[[0,8,1,2,-1.],[0,9,1,1,2.]],threshold:7.4093497823923826e-004,right_val:-0.3522076010704041,left_val:0.0912485271692276},{features:[[2,11,4,4,-1.],[4,11,2,4,2.]],threshold:-2.0966369193047285e-003,right_val:-0.1638002991676331,left_val:0.1911004930734634},{features:[[1,9,12,3,-1.],[5,9,4,3,3.]],threshold:-0.0693395063281059,right_val:0.0357266291975975,left_val:-0.8770086765289307},{features:[[8,15,2,3,-1.],[9,15,1,3,2.]],threshold:-5.7089990004897118e-003,right_val:0.0355459600687027,left_val:-0.6806722879409790},{features:[[8,6,3,3,-1.],[8,7,3,1,3.]],threshold:6.8668760359287262e-003,right_val:0.5226590037345886,left_val:-0.0648868680000305},{features:[[1,2,1,2,-1.],[1,3,1,1,2.]],threshold:5.4602831369265914e-004,right_val:-0.3028525114059448,left_val:0.1092441976070404},{features:[[5,1,7,6,-1.],[5,3,7,2,3.]],threshold:6.4349039457738400e-003,right_val:0.1902212947607040,left_val:-0.1656195074319840},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:-0.0101124197244644,right_val:-0.0383473299443722,left_val:0.7452300190925598},{features:[[13,7,3,4,-1.],[13,9,3,2,2.]],threshold:-7.5152877252548933e-004,right_val:0.1132168993353844,left_val:-0.2814728021621704},{features:[[5,10,3,3,-1.],[5,11,3,1,3.]],threshold:2.8225290589034557e-003,right_val:0.2560853064060211,left_val:-0.1236440017819405},{features:[[7,5,3,1,-1.],[8,5,1,1,3.]],threshold:2.2058798931539059e-003,right_val:-0.5615208148956299,left_val:0.0573342815041542},{features:[[0,0,11,16,-1.],[0,8,11,8,2.]],threshold:0.2816418111324310,right_val:-0.6492379903793335,left_val:0.0420923791825771},{features:[[7,4,3,2,-1.],[8,4,1,2,3.]],threshold:-4.2593148536980152e-003,right_val:0.0435026586055756,left_val:-0.6485499739646912},{features:[[6,12,2,3,-1.],[6,13,2,1,3.]],threshold:2.6586679741740227e-003,right_val:0.3415873050689697,left_val:-0.0935261398553848},{features:[[6,11,2,3,-1.],[6,12,2,1,3.]],threshold:2.0971989724785089e-003,right_val:0.3176026940345764,left_val:-0.1106892973184586},{features:[[13,5,2,2,-1.],[13,6,2,1,2.]],threshold:-1.0267860488966107e-003,right_val:0.0989731103181839,left_val:-0.3761210143566132}],threshold:-1.8389279842376709},{simpleClassifiers:[{features:[[8,8,2,6,-1.],[8,10,2,2,3.]],threshold:2.6354179717600346e-003,right_val:0.2771103084087372,left_val:-0.5249680876731873},{features:[[5,6,3,4,-1.],[6,6,1,4,3.]],threshold:2.6279650628566742e-003,right_val:0.3701362907886505,left_val:-0.3219544887542725},{features:[[10,0,10,8,-1.],[10,0,5,4,2.],[15,4,5,4,2.]],threshold:-5.8889109641313553e-003,right_val:-0.4180032908916473,left_val:0.2377752959728241},{features:[[9,7,2,12,-1.],[9,11,2,4,3.]],threshold:1.9291159696877003e-003,right_val:0.1369217038154602,left_val:-0.4712206125259399},{features:[[6,3,12,12,-1.],[6,3,6,6,2.],[12,9,6,6,2.]],threshold:-0.0152054801583290,right_val:0.1740240007638931,left_val:-0.3961842954158783},{features:[[5,7,4,6,-1.],[5,9,4,2,3.]],threshold:2.3393579758703709e-003,right_val:0.1565911024808884,left_val:-0.3850890100002289},{features:[[5,7,10,10,-1.],[5,7,5,5,2.],[10,12,5,5,2.]],threshold:0.0423956215381622,right_val:-0.6216400265693665,left_val:0.1047870963811874},{features:[[2,1,4,15,-1.],[4,1,2,15,2.]],threshold:-0.0569596402347088,right_val:-0.1268478035926819,left_val:0.5122585892677307},{features:[[12,11,2,2,-1.],[13,11,1,2,2.]],threshold:-7.2845568865886889e-006,right_val:-0.3118562102317810,left_val:0.1513689011335373},{features:[[6,11,10,6,-1.],[6,14,10,3,2.]],threshold:-0.0796337500214577,right_val:0.0449784286320210,left_val:-0.8432474732398987},{features:[[5,12,4,3,-1.],[5,13,4,1,3.]],threshold:5.9168688021600246e-003,right_val:0.4743410050868988,left_val:-0.1074597984552383},{features:[[6,12,1,3,-1.],[6,13,1,1,3.]],threshold:-1.4736950397491455e-003,right_val:-0.1476064026355743,left_val:0.3606745004653931},{features:[[3,7,12,8,-1.],[3,7,6,4,2.],[9,11,6,4,2.]],threshold:-0.0396309718489647,right_val:0.0748667865991592,left_val:-0.6583898067474365},{features:[[6,2,2,6,-1.],[6,4,2,2,3.]],threshold:6.2401412287726998e-004,right_val:0.1565213948488236,left_val:-0.2619565129280090},{features:[[11,11,5,4,-1.],[11,13,5,2,2.]],threshold:-2.3399210476782173e-005,right_val:-0.3032081127166748,left_val:0.1215751022100449},{features:[[5,8,6,6,-1.],[8,8,3,6,2.]],threshold:0.0308020301163197,right_val:-0.6660987734794617,left_val:0.0444087311625481},{features:[[5,12,4,2,-1.],[7,12,2,2,2.]],threshold:1.4787449617870152e-004,right_val:0.1472305059432983,left_val:-0.2444950938224793},{features:[[3,13,3,7,-1.],[4,13,1,7,3.]],threshold:4.8630568198859692e-003,right_val:0.3259679973125458,left_val:-0.1126781031489372},{features:[[11,7,5,9,-1.],[11,10,5,3,3.]],threshold:0.0621918812394142,right_val:-0.6403107047080994,left_val:0.0574399605393410},{features:[[4,3,15,9,-1.],[4,6,15,3,3.]],threshold:1.4668420189991593e-003,right_val:-0.3372788131237030,left_val:0.0953566431999207},{features:[[15,13,2,2,-1.],[15,13,1,1,2.],[16,14,1,1,2.]],threshold:-1.4742349776497576e-005,right_val:-0.1708389967679977,left_val:0.1975961029529572},{features:[[6,5,6,13,-1.],[9,5,3,13,2.]],threshold:-0.0324956700205803,right_val:0.0903633311390877,left_val:-0.3684872984886169},{features:[[5,9,3,1,-1.],[6,9,1,1,3.]],threshold:-1.5333830378949642e-003,right_val:-0.1041681990027428,left_val:0.3225637972354889},{features:[[6,1,2,15,-1.],[6,6,2,5,3.]],threshold:-0.0279989093542099,right_val:0.0826537832617760,left_val:-0.4909791052341461},{features:[[11,0,4,3,-1.],[13,0,2,3,2.]],threshold:4.9783890135586262e-003,right_val:-0.4405778050422669,left_val:0.0732380300760269},{features:[[0,0,2,4,-1.],[0,2,2,2,2.]],threshold:6.8226028233766556e-003,right_val:-0.4146091043949127,left_val:0.0767660290002823},{features:[[4,8,9,3,-1.],[4,9,9,1,3.]],threshold:0.0114978803321719,right_val:0.4009974896907806,left_val:-0.0914401113986969},{features:[[6,5,6,2,-1.],[8,5,2,2,3.]],threshold:-0.0110030695796013,right_val:0.0727767273783684,left_val:-0.5741754174232483},{features:[[4,15,2,2,-1.],[4,15,1,1,2.],[5,16,1,1,2.]],threshold:4.9345887964591384e-004,right_val:0.2457520961761475,left_val:-0.1335359066724777},{features:[[6,14,2,3,-1.],[6,15,2,1,3.]],threshold:2.2130589932203293e-003,right_val:0.3163211941719055,left_val:-0.1075384020805359},{features:[[6,12,1,6,-1.],[6,15,1,3,2.]],threshold:5.1011620089411736e-003,right_val:-0.4294820129871368,left_val:0.0789853185415268},{features:[[5,9,2,10,-1.],[5,14,2,5,2.]],threshold:-0.0373056381940842,right_val:0.0450499393045902,left_val:-0.6792119145393372},{features:[[3,6,3,10,-1.],[4,6,1,10,3.]],threshold:-6.1271698214113712e-003,right_val:-0.1455928981304169,left_val:0.2306205928325653},{features:[[3,7,3,5,-1.],[4,7,1,5,3.]],threshold:7.6517700217664242e-003,right_val:0.4307296872138977,left_val:-0.0903551727533340},{features:[[11,0,6,2,-1.],[13,0,2,2,3.]],threshold:-0.0112808700650930,right_val:0.0746744498610497,left_val:-0.4785071909427643},{features:[[11,12,2,1,-1.],[12,12,1,1,2.]],threshold:-1.4724049833603203e-005,right_val:-0.2253564000129700,left_val:0.1445989012718201},{features:[[11,12,2,1,-1.],[12,12,1,1,2.]],threshold:-1.9895960576832294e-003,right_val:0.0549059212207794,left_val:-0.6152756810188294},{features:[[6,16,1,3,-1.],[6,17,1,1,3.]],threshold:1.6876959707587957e-003,right_val:0.3300470113754273,left_val:-0.0976197868585587},{features:[[10,16,5,3,-1.],[10,17,5,1,3.]],threshold:9.8390737548470497e-003,right_val:-0.7551510930061340,left_val:0.0409724116325378},{features:[[7,13,1,3,-1.],[7,14,1,1,3.]],threshold:1.3243829598650336e-003,right_val:0.3066510856151581,left_val:-0.1004628017544746},{features:[[12,4,8,2,-1.],[12,5,8,1,2.]],threshold:3.1150300055742264e-003,right_val:-0.3352459967136383,left_val:0.0898044705390930},{features:[[8,7,4,3,-1.],[10,7,2,3,2.]],threshold:7.3907422120100819e-006,right_val:0.1328824013471603,left_val:-0.2241040021181107},{features:[[12,10,5,9,-1.],[12,13,5,3,3.]],threshold:0.0325595699250698,right_val:-0.5424032807350159,left_val:0.0501133985817432},{features:[[5,11,2,3,-1.],[5,12,2,1,3.]],threshold:-2.9865119140595198e-003,right_val:-0.1116421967744827,left_val:0.2838534116744995},{features:[[5,11,3,3,-1.],[5,12,3,1,3.]],threshold:1.6058710170909762e-003,right_val:0.2903267145156860,left_val:-0.1202408000826836},{features:[[11,0,2,4,-1.],[12,0,1,4,2.]],threshold:2.2018649615347385e-003,right_val:-0.4384604990482330,left_val:0.0781101286411285},{features:[[5,9,10,6,-1.],[5,9,5,3,2.],[10,12,5,3,2.]],threshold:-5.7107508182525635e-003,right_val:0.0929412990808487,left_val:-0.3260880112648010},{features:[[6,12,3,3,-1.],[6,13,3,1,3.]],threshold:8.9503038907423615e-004,right_val:0.2233189940452576,left_val:-0.1350415945053101},{features:[[1,3,6,12,-1.],[1,9,6,6,2.]],threshold:0.0772592499852180,right_val:-0.4171401858329773,left_val:0.0732213407754898},{features:[[1,5,5,10,-1.],[1,10,5,5,2.]],threshold:-0.0101456101983786,right_val:0.1409918963909149,left_val:-0.2733097076416016},{features:[[10,14,1,2,-1.],[10,15,1,1,2.]],threshold:-7.0878718361200299e-006,right_val:-0.2325371950864792,left_val:0.1260295957326889},{features:[[9,5,2,8,-1.],[9,5,1,4,2.],[10,9,1,4,2.]],threshold:-8.0232005566358566e-003,right_val:0.0441995784640312,left_val:-0.6268284916877747},{features:[[17,12,3,1,-1.],[18,12,1,1,3.]],threshold:-1.5409339684993029e-003,right_val:-0.0958197265863419,left_val:0.3215487897396088},{features:[[5,16,2,3,-1.],[5,17,2,1,3.]],threshold:-1.3815560378134251e-003,right_val:-0.1084505990147591,left_val:0.2390906065702438},{features:[[11,18,7,2,-1.],[11,19,7,1,2.]],threshold:-8.5559524595737457e-003,right_val:0.0469044595956802,left_val:-0.6288099288940430},{features:[[12,6,3,8,-1.],[13,6,1,8,3.]],threshold:1.4967939932830632e-005,right_val:0.1626560986042023,left_val:-0.1733105033636093}],threshold:-1.8807189464569092},{simpleClassifiers:[{features:[[11,6,6,5,-1.],[14,6,3,5,2.]],threshold:-9.2911375686526299e-003,right_val:-0.4868162870407105,left_val:0.2667650878429413},{features:[[9,7,4,6,-1.],[9,7,2,3,2.],[11,10,2,3,2.]],threshold:-1.0201609693467617e-003,right_val:-0.4297147095203400,left_val:0.2146916985511780},{features:[[10,8,6,6,-1.],[10,10,6,2,3.]],threshold:1.8099240260198712e-003,right_val:0.1729315072298050,left_val:-0.4708526134490967},{features:[[2,1,4,17,-1.],[4,1,2,17,2.]],threshold:-0.0631954520940781,right_val:-0.1192208006978035,left_val:0.5586851239204407},{features:[[7,1,9,4,-1.],[7,3,9,2,2.]],threshold:1.5157799934968352e-003,right_val:0.1425653994083405,left_val:-0.3308742940425873},{features:[[7,6,3,4,-1.],[8,6,1,4,3.]],threshold:-3.1134260352700949e-003,right_val:-0.1556340008974075,left_val:0.3189736008644104},{features:[[5,9,8,2,-1.],[9,9,4,2,2.]],threshold:6.7187240347266197e-003,right_val:-0.4614211022853851,left_val:0.1130800992250443},{features:[[11,12,1,4,-1.],[11,14,1,2,2.]],threshold:-1.4929190001566894e-005,right_val:-0.3826808929443359,left_val:0.1130312010645866},{features:[[13,11,1,3,-1.],[13,12,1,1,3.]],threshold:-1.9974811002612114e-003,right_val:0.0555626712739468,left_val:-0.6783381104469299},{features:[[10,19,4,1,-1.],[12,19,2,1,2.]],threshold:4.4361899199429899e-005,right_val:0.1752458959817886,left_val:-0.2147872000932694},{features:[[5,4,10,12,-1.],[5,4,5,6,2.],[10,10,5,6,2.]],threshold:-9.4379335641860962e-003,right_val:0.1049441024661064,left_val:-0.2900882065296173},{features:[[4,6,5,6,-1.],[4,9,5,3,2.]],threshold:1.0263459989801049e-004,right_val:0.1158011034131050,left_val:-0.3680945038795471},{features:[[5,10,4,8,-1.],[5,14,4,4,2.]],threshold:-0.0435120798647404,right_val:0.0451606288552284,left_val:-0.5796747803688049},{features:[[7,5,3,3,-1.],[7,6,3,1,3.]],threshold:2.3894330952316523e-003,right_val:0.2572689950466156,left_val:-0.1244383007287979},{features:[[7,4,2,2,-1.],[8,4,1,2,2.]],threshold:3.6203579511493444e-003,right_val:-0.6445654034614563,left_val:0.0483852699398994},{features:[[0,0,2,1,-1.],[1,0,1,1,2.]],threshold:-4.2086638859473169e-004,right_val:0.0975081324577332,left_val:-0.2996363937854767},{features:[[0,3,6,16,-1.],[2,3,2,16,3.]],threshold:-0.0363201610743999,right_val:-0.1037318035960197,left_val:0.3249903023242950},{features:[[2,6,3,12,-1.],[3,6,1,12,3.]],threshold:5.5678240023553371e-003,right_val:0.2772139012813568,left_val:-0.1286551952362061},{features:[[12,11,2,2,-1.],[12,12,2,1,2.]],threshold:1.4324679505079985e-003,right_val:-0.5041165947914124,left_val:0.0630446672439575},{features:[[18,0,2,13,-1.],[19,0,1,13,2.]],threshold:1.2268769787624478e-003,right_val:0.1794432997703552,left_val:-0.1707358956336975},{features:[[9,14,5,4,-1.],[9,16,5,2,2.]],threshold:4.0125530213117599e-003,right_val:-0.4132161140441895,left_val:0.0721001327037811},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:4.7377590090036392e-003,right_val:0.3430379927158356,left_val:-0.0901008769869804},{features:[[10,14,4,3,-1.],[10,15,4,1,3.]],threshold:4.3965759687125683e-003,right_val:-0.5917593836784363,left_val:0.0547530911862850},{features:[[12,13,1,3,-1.],[12,14,1,1,3.]],threshold:1.8952810205519199e-003,right_val:-0.6490725874900818,left_val:0.0401207096874714},{features:[[5,10,1,3,-1.],[5,11,1,1,3.]],threshold:-1.3425230281427503e-003,right_val:-0.1100924015045166,left_val:0.3032169938087463},{features:[[6,6,6,14,-1.],[9,6,3,14,2.]],threshold:-0.0464057400822639,right_val:0.0703070312738419,left_val:-0.4602647125720978},{features:[[5,11,6,3,-1.],[8,11,3,3,2.]],threshold:0.0258755497634411,right_val:-0.6484752297401428,left_val:0.0389873199164867},{features:[[5,7,2,4,-1.],[6,7,1,4,2.]],threshold:1.0986380511894822e-003,right_val:0.1813354045152664,left_val:-0.1645876020193100},{features:[[7,3,11,9,-1.],[7,6,11,3,3.]],threshold:-3.9583959733135998e-004,right_val:-0.2755435109138489,left_val:0.0978056564927101},{features:[[10,4,9,6,-1.],[10,6,9,2,3.]],threshold:-0.0456339903175831,right_val:0.0548557713627815,left_val:-0.5427601933479309},{features:[[8,5,2,3,-1.],[8,6,2,1,3.]],threshold:-4.7068470157682896e-003,right_val:-0.0696870908141136,left_val:0.4096142053604126},{features:[[0,0,3,1,-1.],[1,0,1,1,3.]],threshold:2.0004810357932001e-004,right_val:-0.2109135985374451,left_val:0.1290896981954575},{features:[[9,4,4,6,-1.],[9,4,2,3,2.],[11,7,2,3,2.]],threshold:1.1126570170745254e-003,right_val:0.1245858967304230,left_val:-0.2221307009458542},{features:[[5,9,3,1,-1.],[6,9,1,1,3.]],threshold:-1.4747029636055231e-003,right_val:-0.0907562375068665,left_val:0.2918517887592316},{features:[[6,4,3,2,-1.],[7,4,1,2,3.]],threshold:4.3162931688129902e-003,right_val:-0.5106865167617798,left_val:0.0615429095923901},{features:[[7,14,1,3,-1.],[7,15,1,1,3.]],threshold:2.0302709890529513e-004,right_val:0.1646644026041031,left_val:-0.1563991010189056},{features:[[1,3,1,2,-1.],[1,4,1,1,2.]],threshold:3.4639390651136637e-004,right_val:-0.2553279995918274,left_val:0.1077354028820992},{features:[[7,16,2,3,-1.],[7,17,2,1,3.]],threshold:1.5631220303475857e-003,right_val:0.2545036077499390,left_val:-0.0954280197620392},{features:[[19,6,1,2,-1.],[19,7,1,1,2.]],threshold:5.5476918350905180e-004,right_val:-0.3079142868518829,left_val:0.0797742530703545},{features:[[6,15,2,3,-1.],[6,16,2,1,3.]],threshold:2.7690480928868055e-003,right_val:0.3019863963127136,left_val:-0.0919008925557137},{features:[[11,13,1,3,-1.],[11,14,1,1,3.]],threshold:1.1085179867222905e-003,right_val:-0.4168049097061157,left_val:0.0626248866319656},{features:[[17,10,3,1,-1.],[18,10,1,1,3.]],threshold:3.4288389142602682e-003,right_val:0.4729351997375488,left_val:-0.0574735589325428},{features:[[10,0,6,1,-1.],[13,0,3,1,2.]],threshold:-2.0233790855854750e-003,right_val:0.1080666035413742,left_val:-0.2412866055965424},{features:[[14,0,6,4,-1.],[14,0,3,2,2.],[17,2,3,2,2.]],threshold:-9.1446418082341552e-004,right_val:-0.1603191941976547,left_val:0.1799096018075943},{features:[[12,7,4,6,-1.],[12,10,4,3,2.]],threshold:0.0388806909322739,right_val:-0.6408532261848450,left_val:0.0391326211392879},{features:[[14,5,1,2,-1.],[14,6,1,1,2.]],threshold:1.2836069799959660e-003,right_val:-0.4391455948352814,left_val:0.0529120489954948},{features:[[6,13,4,3,-1.],[6,14,4,1,3.]],threshold:3.5828219261020422e-003,right_val:0.3077293038368225,left_val:-0.0974621623754501},{features:[[5,12,4,3,-1.],[5,13,4,1,3.]],threshold:2.3203529417514801e-003,right_val:0.2673572897911072,left_val:-0.1092979982495308},{features:[[9,3,2,1,-1.],[10,3,1,1,2.]],threshold:1.1978139809798449e-004,right_val:-0.2358634024858475,left_val:0.1162312999367714},{features:[[9,3,3,3,-1.],[10,3,1,3,3.]],threshold:-2.8259279206395149e-003,right_val:0.0570084005594254,left_val:-0.4193572998046875},{features:[[9,5,3,1,-1.],[10,5,1,1,3.]],threshold:2.4410230107605457e-003,right_val:-0.5336285829544067,left_val:0.0427068807184696},{features:[[7,8,4,3,-1.],[7,9,4,1,3.]],threshold:2.6899650692939758e-003,right_val:0.2477902024984360,left_val:-0.1135182976722717},{features:[[1,4,1,6,-1.],[1,6,1,2,3.]],threshold:-3.1081750057637691e-003,right_val:0.0825432091951370,left_val:-0.2948892116546631},{features:[[3,2,3,11,-1.],[4,2,1,11,3.]],threshold:-6.6210748627781868e-003,right_val:-0.1144362017512322,left_val:0.2295868992805481},{features:[[3,2,3,18,-1.],[4,2,1,18,3.]],threshold:4.6786409802734852e-003,right_val:0.2677769958972931,left_val:-0.1287520974874497},{features:[[5,12,6,2,-1.],[8,12,3,2,2.]],threshold:-1.2973829871043563e-003,right_val:0.0964717268943787,left_val:-0.2728042900562286},{features:[[6,11,2,3,-1.],[6,12,2,1,3.]],threshold:2.9523740522563457e-003,right_val:0.2920745015144348,left_val:-0.0870406925678253},{features:[[7,17,3,1,-1.],[8,17,1,1,3.]],threshold:-1.6173559706658125e-003,right_val:0.0653864666819572,left_val:-0.4020785093307495},{features:[[3,10,8,6,-1.],[3,13,8,3,2.]],threshold:-0.0754177570343018,right_val:0.0246026907116175,left_val:-0.8972333073616028},{features:[[3,2,3,17,-1.],[4,2,1,17,3.]],threshold:-2.5402200408279896e-003,right_val:-0.1502546072006226,left_val:0.1525865048170090},{features:[[4,9,8,1,-1.],[8,9,4,1,2.]],threshold:3.7864660844206810e-003,right_val:-0.3388194143772125,left_val:0.0764772072434425},{features:[[2,7,3,6,-1.],[3,7,1,6,3.]],threshold:-0.0140055101364851,right_val:-0.0590039305388927,left_val:0.4442639052867889},{features:[[18,4,1,2,-1.],[18,5,1,1,2.]],threshold:5.5956508731469512e-004,right_val:-0.3560470938682556,left_val:0.0740071237087250},{features:[[7,8,2,6,-1.],[7,10,2,2,3.]],threshold:2.5946850655600429e-004,right_val:0.0873992070555687,left_val:-0.2812618911266327},{features:[[11,12,2,3,-1.],[11,13,2,1,3.]],threshold:4.4409232214093208e-003,right_val:-0.7728418707847595,left_val:0.0286236591637135},{features:[[16,11,3,1,-1.],[17,11,1,1,3.]],threshold:-2.3343560751527548e-003,right_val:-0.0712075382471085,left_val:0.3546060025691986},{features:[[16,11,3,2,-1.],[17,11,1,2,3.]],threshold:9.7654951969161630e-004,right_val:0.2254537045955658,left_val:-0.1013842001557350},{features:[[15,3,1,4,-1.],[15,5,1,2,2.]],threshold:-4.3227209243923426e-004,right_val:0.1227314993739128,left_val:-0.2109587937593460}],threshold:-1.7268099784851074},{simpleClassifiers:[{features:[[11,0,9,11,-1.],[14,0,3,11,3.]],threshold:-0.0124802095815539,right_val:-0.4700151979923248,left_val:0.2611210942268372},{features:[[7,0,5,6,-1.],[7,3,5,3,2.]],threshold:0.0354509614408016,right_val:0.4771861135959625,left_val:-0.2000845968723297},{features:[[8,7,2,6,-1.],[8,10,2,3,2.]],threshold:2.0369330886751413e-003,right_val:0.1513264030218124,left_val:-0.4770315885543823},{features:[[11,11,4,6,-1.],[11,14,4,3,2.]],threshold:-4.3946420191787183e-005,right_val:-0.5179628729820252,left_val:0.1228848025202751},{features:[[4,7,3,2,-1.],[5,7,1,2,3.]],threshold:-3.8480788934975863e-003,right_val:-0.1459532976150513,left_val:0.4111368060112000},{features:[[3,7,3,2,-1.],[4,7,1,2,3.]],threshold:-2.8316550888121128e-003,right_val:-0.1762959957122803,left_val:0.2871097028255463},{features:[[11,11,2,3,-1.],[11,12,2,1,3.]],threshold:2.5026081129908562e-003,right_val:-0.5780801177024841,left_val:0.0796688422560692},{features:[[5,9,4,6,-1.],[5,12,4,3,2.]],threshold:3.0812958721071482e-004,right_val:-0.4254018068313599,left_val:0.0828387066721916},{features:[[16,4,2,3,-1.],[17,4,1,3,2.]],threshold:6.1186961829662323e-004,right_val:-0.3059141933917999,left_val:0.1364181041717529},{features:[[12,12,2,1,-1.],[13,12,1,1,2.]],threshold:-1.4354350241774227e-005,right_val:-0.2568199932575226,left_val:0.1419748961925507},{features:[[8,5,6,4,-1.],[8,5,3,2,2.],[11,7,3,2,2.]],threshold:1.6148330178111792e-003,right_val:0.1328839063644409,left_val:-0.2623932957649231},{features:[[10,15,3,3,-1.],[11,15,1,3,3.]],threshold:2.0318101160228252e-003,right_val:-0.4314146041870117,left_val:0.0757495686411858},{features:[[3,7,3,7,-1.],[4,7,1,7,3.]],threshold:9.5563679933547974e-003,right_val:0.4000456929206848,left_val:-0.0914244800806046},{features:[[11,4,1,2,-1.],[11,5,1,1,2.]],threshold:-7.8439561184495687e-004,right_val:0.0917778164148331,left_val:-0.3661993145942688},{features:[[3,9,3,5,-1.],[4,9,1,5,3.]],threshold:-3.9661130867898464e-003,right_val:-0.1428164988756180,left_val:0.2369821071624756},{features:[[10,15,3,3,-1.],[11,15,1,3,3.]],threshold:-2.3194469977170229e-003,right_val:0.0786841064691544,left_val:-0.4224534034729004},{features:[[3,3,6,12,-1.],[3,9,6,6,2.]],threshold:-0.0734902024269104,right_val:0.0404968708753586,left_val:-0.6221855282783508},{features:[[3,5,5,6,-1.],[3,7,5,2,3.]],threshold:-3.6803178954869509e-003,right_val:-0.2099042981863022,left_val:0.1261202991008759},{features:[[6,6,4,11,-1.],[8,6,2,11,2.]],threshold:-0.0410192906856537,right_val:0.0279939491301775,left_val:-0.8031694293022156},{features:[[6,5,2,6,-1.],[7,5,1,6,2.]],threshold:-4.8213129048235714e-004,right_val:-0.1786963045597076,left_val:0.1482598036527634},{features:[[2,6,3,8,-1.],[3,6,1,8,3.]],threshold:-0.0165982507169247,right_val:-0.0640516877174377,left_val:0.4144228100776672},{features:[[6,4,3,1,-1.],[7,4,1,1,3.]],threshold:-1.0631670011207461e-003,right_val:0.0824259966611862,left_val:-0.3346652090549469},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:1.8658409826457500e-003,right_val:0.2318338006734848,left_val:-0.1311978995800018},{features:[[5,10,1,3,-1.],[5,11,1,1,3.]],threshold:-2.5827190838754177e-003,right_val:-0.0841216668486595,left_val:0.3841595053672791},{features:[[13,14,2,3,-1.],[13,15,2,1,3.]],threshold:1.7159619601443410e-003,right_val:-0.4109899103641510,left_val:0.0769715383648872},{features:[[10,11,2,3,-1.],[10,12,2,1,3.]],threshold:-3.9140181615948677e-003,right_val:0.0384184606373310,left_val:-0.6250861883163452},{features:[[19,5,1,3,-1.],[19,6,1,1,3.]],threshold:4.2724498780444264e-004,right_val:-0.2697522938251495,left_val:0.0860165730118752},{features:[[5,14,5,3,-1.],[5,15,5,1,3.]],threshold:3.3992920070886612e-003,right_val:0.2703082859516144,left_val:-0.1017651036381722},{features:[[4,10,10,4,-1.],[9,10,5,4,2.]],threshold:-0.0364572815597057,right_val:0.0558542497456074,left_val:-0.4926198124885559},{features:[[12,12,2,3,-1.],[12,13,2,1,3.]],threshold:1.6230379696935415e-003,right_val:-0.4205349981784821,left_val:0.0575670786201954},{features:[[5,13,4,3,-1.],[5,14,4,1,3.]],threshold:4.6655549667775631e-003,right_val:0.3209528028964996,left_val:-0.0911583974957466},{features:[[6,12,3,3,-1.],[6,13,3,1,3.]],threshold:3.1331549398601055e-003,right_val:0.3407345116138458,left_val:-0.0969326570630074},{features:[[6,15,3,2,-1.],[7,15,1,2,3.]],threshold:-1.6835830174386501e-003,right_val:0.0822260826826096,left_val:-0.3676624894142151},{features:[[4,11,8,2,-1.],[8,11,4,2,2.]],threshold:0.0277286507189274,right_val:-0.6519839167594910,left_val:0.0401174984872341},{features:[[14,3,6,8,-1.],[14,7,6,4,2.]],threshold:0.0950153097510338,right_val:-0.8888198137283325,left_val:0.0230651199817657},{features:[[8,5,12,5,-1.],[12,5,4,5,3.]],threshold:0.0747556164860725,right_val:0.4739970862865448,left_val:-0.0639468729496002},{features:[[5,14,6,2,-1.],[7,14,2,2,3.]],threshold:0.0166933406144381,right_val:-0.7115241885185242,left_val:0.0464772582054138},{features:[[6,11,2,3,-1.],[6,12,2,1,3.]],threshold:1.2088769581168890e-003,right_val:0.2242414951324463,left_val:-0.1135926991701126},{features:[[13,12,1,3,-1.],[13,13,1,1,3.]],threshold:-6.1751517932862043e-004,right_val:0.0850189328193665,left_val:-0.3126823008060455},{features:[[6,3,14,12,-1.],[6,3,7,6,2.],[13,9,7,6,2.]],threshold:8.5786692798137665e-003,right_val:0.1564093977212906,left_val:-0.1555946022272110},{features:[[18,6,2,2,-1.],[18,7,2,1,2.]],threshold:6.1184767400845885e-004,right_val:-0.2652013897895813,left_val:0.0944039374589920},{features:[[14,7,6,10,-1.],[16,7,2,10,3.]],threshold:-3.4570440184324980e-003,right_val:-0.1622052937746048,left_val:0.1514606028795242},{features:[[9,8,2,3,-1.],[9,9,2,1,3.]],threshold:1.3953070156276226e-003,right_val:0.2499831020832062,left_val:-0.0999962165951729},{features:[[0,6,2,4,-1.],[0,8,2,2,2.]],threshold:3.5910680890083313e-003,right_val:-0.3008154928684235,left_val:0.0810116827487946},{features:[[9,0,6,2,-1.],[11,0,2,2,3.]],threshold:5.4192831739783287e-003,right_val:-0.3235566020011902,left_val:0.0676500424742699},{features:[[12,0,8,2,-1.],[12,0,4,1,2.],[16,1,4,1,2.]],threshold:-1.1379310162737966e-003,right_val:-0.1272972971200943,left_val:0.1888744980096817},{features:[[3,10,14,6,-1.],[3,12,14,2,3.]],threshold:9.1047259047627449e-003,right_val:-0.2228015065193176,left_val:0.1016054004430771},{features:[[6,7,3,4,-1.],[7,7,1,4,3.]],threshold:6.5050171688199043e-003,right_val:0.3577027022838593,left_val:-0.0729864165186882},{features:[[10,13,2,1,-1.],[11,13,1,1,2.]],threshold:-1.4676549653813709e-005,right_val:-0.1740354001522064,left_val:0.1469310969114304},{features:[[11,6,5,10,-1.],[11,11,5,5,2.]],threshold:-9.4403158873319626e-003,right_val:0.0966195464134216,left_val:-0.2653675079345703},{features:[[3,16,4,4,-1.],[3,16,2,2,2.],[5,18,2,2,2.]],threshold:-4.2933300137519836e-003,right_val:-0.1055020987987518,left_val:0.2565683126449585},{features:[[6,2,3,3,-1.],[7,2,1,3,3.]],threshold:4.3133171275258064e-003,right_val:-0.4571993947029114,left_val:0.0659365728497505},{features:[[4,0,8,20,-1.],[4,0,4,10,2.],[8,10,4,10,2.]],threshold:0.0588544681668282,right_val:-0.3307807147502899,left_val:0.0679182633757591},{features:[[3,16,3,4,-1.],[4,16,1,4,3.]],threshold:-2.8407620266079903e-003,right_val:-0.0920921564102173,left_val:0.2395350039005280},{features:[[3,16,3,1,-1.],[4,16,1,1,3.]],threshold:9.6359942108392715e-004,right_val:0.2646299898624420,left_val:-0.1098238006234169},{features:[[11,13,1,2,-1.],[11,14,1,1,2.]],threshold:-1.4724590073456056e-005,right_val:-0.2270458042621613,left_val:0.1111116036772728},{features:[[11,13,1,3,-1.],[11,14,1,1,3.]],threshold:-8.0675468780100346e-004,right_val:0.0781226530671120,left_val:-0.3633514046669006},{features:[[6,19,14,1,-1.],[13,19,7,1,2.]],threshold:7.3296198388561606e-004,right_val:0.1518490016460419,left_val:-0.1560512930154800},{features:[[5,7,3,3,-1.],[6,7,1,3,3.]],threshold:6.3753738068044186e-003,right_val:0.2972387969493866,left_val:-0.0719579532742500},{features:[[7,4,3,2,-1.],[8,4,1,2,3.]],threshold:4.6390579082071781e-003,right_val:-0.6113234758377075,left_val:0.0359696000814438},{features:[[9,18,2,1,-1.],[10,18,1,1,2.]],threshold:-7.1079272311180830e-004,right_val:0.0693146288394928,left_val:-0.2880684137344360},{features:[[6,17,2,3,-1.],[6,18,2,1,3.]],threshold:2.9162289574742317e-003,right_val:0.3268168866634369,left_val:-0.0759684592485428},{features:[[9,7,3,6,-1.],[9,9,3,2,3.]],threshold:-0.0178531408309937,right_val:-0.0481740310788155,left_val:0.4420630931854248},{features:[[9,12,3,7,-1.],[10,12,1,7,3.]],threshold:8.3874985575675964e-003,right_val:-0.5441532731056213,left_val:0.0489138998091221},{features:[[8,9,1,3,-1.],[8,10,1,1,3.]],threshold:2.9458320568664931e-005,right_val:0.1062937006354332,left_val:-0.2113123983144760},{features:[[8,5,12,11,-1.],[12,5,4,11,3.]],threshold:-0.0981927067041397,right_val:-0.0692968666553497,left_val:0.3531824052333832},{features:[[2,0,1,2,-1.],[2,1,1,1,2.]],threshold:4.6140368795022368e-004,right_val:-0.2581192851066589,left_val:0.0962707772850990},{features:[[0,0,1,2,-1.],[0,1,1,1,2.]],threshold:-2.4016610404942185e-004,right_val:0.0999848917126656,left_val:-0.2297642976045609},{features:[[8,0,12,16,-1.],[12,0,4,16,3.]],threshold:0.0378824807703495,right_val:0.2316477000713348,left_val:-0.1036543995141983},{features:[[0,0,1,2,-1.],[0,1,1,1,2.]],threshold:3.2621581340208650e-004,right_val:-0.2368970066308975,left_val:0.0979339405894279}],threshold:-1.6056820154190063},{simpleClassifiers:[{features:[[11,0,9,11,-1.],[14,0,3,11,3.]],threshold:-0.0367441214621067,right_val:-0.3177989125251770,left_val:0.3407934010028839},{features:[[5,5,3,6,-1.],[6,5,1,6,3.]],threshold:2.1955010015517473e-003,right_val:0.2586979866027832,left_val:-0.2872959077358246},{features:[[8,8,3,4,-1.],[8,10,3,2,2.]],threshold:8.3034839481115341e-003,right_val:0.2675926983356476,left_val:-0.2180044949054718},{features:[[13,2,6,12,-1.],[13,8,6,6,2.]],threshold:2.6289420202374458e-003,right_val:0.1463983952999115,left_val:-0.3600608110427856},{features:[[10,6,4,14,-1.],[10,13,4,7,2.]],threshold:1.9458869937807322e-003,right_val:-0.4205875992774963,left_val:0.1367772072553635},{features:[[1,1,10,1,-1.],[6,1,5,1,2.]],threshold:-0.0217043906450272,right_val:-0.0980915725231171,left_val:0.4890331923961639},{features:[[4,2,13,6,-1.],[4,4,13,2,3.]],threshold:4.2956420220434666e-003,right_val:0.1571262925863266,left_val:-0.2782556116580963},{features:[[11,13,2,3,-1.],[12,13,1,3,2.]],threshold:4.9894629046320915e-004,right_val:-0.3377942144870758,left_val:0.1100381016731262},{features:[[6,9,4,9,-1.],[6,12,4,3,3.]],threshold:0.0246527995914221,right_val:-0.5471053719520569,left_val:0.0458206608891487},{features:[[6,6,3,10,-1.],[6,11,3,5,2.]],threshold:-0.0230757407844067,right_val:0.0670447796583176,left_val:-0.4980142116546631},{features:[[2,10,3,4,-1.],[3,10,1,4,3.]],threshold:0.0119912801310420,right_val:0.4829424917697907,left_val:-0.0708770230412483},{features:[[3,8,3,6,-1.],[4,8,1,6,3.]],threshold:0.0154306795448065,right_val:0.4523684978485107,left_val:-0.0659497380256653},{features:[[11,12,3,6,-1.],[12,12,1,6,3.]],threshold:-4.5555769465863705e-003,right_val:0.0678776577115059,left_val:-0.4466569125652313},{features:[[8,6,2,3,-1.],[8,7,2,1,3.]],threshold:-4.4582979753613472e-003,right_val:-0.0947923585772514,left_val:0.3365691900253296},{features:[[5,8,6,6,-1.],[5,8,3,3,2.],[8,11,3,3,2.]],threshold:1.3494009908754379e-004,right_val:0.1029383018612862,left_val:-0.3028885126113892},{features:[[3,7,3,1,-1.],[4,7,1,1,3.]],threshold:-4.2500188574194908e-003,right_val:-0.0729563832283020,left_val:0.4255012869834900},{features:[[10,12,3,3,-1.],[10,13,3,1,3.]],threshold:-1.4293759595602751e-003,right_val:0.0900392532348633,left_val:-0.3011676073074341},{features:[[5,11,2,3,-1.],[5,12,2,1,3.]],threshold:-6.3978550024330616e-003,right_val:-0.0793208703398705,left_val:0.4194355010986328},{features:[[10,12,4,3,-1.],[10,13,4,1,3.]],threshold:2.6083870325237513e-003,right_val:-0.4189716875553131,left_val:0.0835989266633987},{features:[[5,11,3,3,-1.],[5,12,3,1,3.]],threshold:8.6870808154344559e-003,right_val:0.5264474153518677,left_val:-0.0630156993865967},{features:[[9,2,3,1,-1.],[10,2,1,1,3.]],threshold:-1.0380990570411086e-003,right_val:0.0803010389208794,left_val:-0.3622015118598938},{features:[[2,0,18,14,-1.],[2,7,18,7,2.]],threshold:0.4407005012035370,right_val:-0.7276449203491211,left_val:0.0349130593240261},{features:[[9,2,3,2,-1.],[10,2,1,2,3.]],threshold:3.3689520787447691e-003,right_val:-0.4863327145576477,left_val:0.0573327802121639},{features:[[8,6,4,3,-1.],[8,7,4,1,3.]],threshold:1.7443710239604115e-003,right_val:0.2702358067035675,left_val:-0.1099466010928154},{features:[[4,8,5,2,-1.],[4,9,5,1,2.]],threshold:5.3788698278367519e-004,right_val:0.1006338000297546,left_val:-0.2743942141532898},{features:[[0,3,1,6,-1.],[0,5,1,2,3.]],threshold:1.0072899749502540e-003,right_val:-0.2322160005569458,left_val:0.1075676977634430},{features:[[13,9,1,6,-1.],[13,12,1,3,2.]],threshold:-8.2518812268972397e-003,right_val:0.0357042290270329,left_val:-0.6521630287170410},{features:[[6,16,3,3,-1.],[6,17,3,1,3.]],threshold:3.5490558948367834e-003,right_val:0.3176743090152741,left_val:-0.0842548683285713},{features:[[3,16,7,3,-1.],[3,17,7,1,3.]],threshold:-0.0110333599150181,right_val:-0.0625870525836945,left_val:0.4127162098884583},{features:[[10,15,5,3,-1.],[10,16,5,1,3.]],threshold:3.2278439030051231e-003,right_val:-0.4117225110530853,left_val:0.0712669864296913},{features:[[4,0,5,20,-1.],[4,10,5,10,2.]],threshold:0.1754038929939270,right_val:-0.6377506852149963,left_val:0.0349589809775352},{features:[[6,2,2,2,-1.],[7,2,1,2,2.]],threshold:-4.8067080206237733e-004,right_val:0.0989306494593620,left_val:-0.2450311034917831},{features:[[18,0,2,15,-1.],[18,5,2,5,3.]],threshold:-1.8284550169482827e-003,right_val:-0.1979990005493164,left_val:0.1348651945590973},{features:[[6,15,7,3,-1.],[6,16,7,1,3.]],threshold:1.7096720403060317e-003,right_val:0.2100570946931839,left_val:-0.1052595004439354},{features:[[10,13,6,2,-1.],[10,14,6,1,2.]],threshold:3.9468301110900939e-004,right_val:-0.2740539908409119,left_val:0.0809525474905968},{features:[[13,8,1,9,-1.],[13,11,1,3,3.]],threshold:2.3097719531506300e-003,right_val:-0.1995880007743835,left_val:0.1233822032809258},{features:[[3,0,4,4,-1.],[3,0,2,2,2.],[5,2,2,2,2.]],threshold:3.1529190018773079e-003,right_val:0.2208960056304932,left_val:-0.1061254963278770},{features:[[0,3,1,6,-1.],[0,5,1,2,3.]],threshold:-1.9097010372206569e-003,right_val:0.0870225802063942,left_val:-0.2509470880031586},{features:[[5,8,3,1,-1.],[6,8,1,1,3.]],threshold:-1.2370609911158681e-003,right_val:-0.0759372934699059,left_val:0.3076052069664002},{features:[[5,6,2,3,-1.],[6,6,1,3,2.]],threshold:3.7081091431900859e-004,right_val:0.1348019987344742,left_val:-0.1606508046388626},{features:[[6,11,6,7,-1.],[8,11,2,7,3.]],threshold:0.0342688485980034,right_val:-0.6354715824127197,left_val:0.0352609492838383},{features:[[8,7,4,3,-1.],[8,8,4,1,3.]],threshold:4.6664681285619736e-003,right_val:0.4324232041835785,left_val:-0.0524948611855507},{features:[[3,8,8,1,-1.],[7,8,4,1,2.]],threshold:0.0104235699400306,right_val:-0.5074523091316223,left_val:0.0516124293208122},{features:[[5,12,3,3,-1.],[5,13,3,1,3.]],threshold:0.0112151801586151,right_val:0.5764592885971069,left_val:-0.0386142507195473},{features:[[9,7,2,8,-1.],[9,7,1,4,2.],[10,11,1,4,2.]],threshold:-7.3029109444178175e-006,right_val:-0.1727436929941177,left_val:0.1205231994390488},{features:[[14,2,3,5,-1.],[15,2,1,5,3.]],threshold:-4.9072802066802979e-003,right_val:0.0591164417564869,left_val:-0.3481855094432831},{features:[[6,13,2,3,-1.],[6,14,2,1,3.]],threshold:1.9488829420879483e-003,right_val:0.2402089983224869,left_val:-0.0888612270355225},{features:[[6,14,1,2,-1.],[6,15,1,1,2.]],threshold:1.3313010276760906e-004,right_val:0.1992992013692856,left_val:-0.1465771943330765},{features:[[12,10,2,3,-1.],[12,11,2,1,3.]],threshold:-1.4298240421339869e-003,right_val:0.0599094182252884,left_val:-0.3900522887706757},{features:[[1,14,12,3,-1.],[5,14,4,3,3.]],threshold:-6.4831459894776344e-003,right_val:-0.1165544986724854,left_val:0.1814136952161789},{features:[[11,8,3,1,-1.],[12,8,1,1,3.]],threshold:7.2958500823006034e-006,right_val:0.1181278005242348,left_val:-0.1821924000978470},{features:[[14,4,2,3,-1.],[14,5,2,1,3.]],threshold:4.1690681246109307e-004,right_val:-0.2035371065139771,left_val:0.1059167981147766},{features:[[7,8,3,2,-1.],[8,8,1,2,3.]],threshold:5.1982058212161064e-003,right_val:0.6026421189308167,left_val:-0.0359626412391663},{features:[[2,7,3,11,-1.],[3,7,1,11,3.]],threshold:-4.0649957954883575e-003,right_val:-0.0985998436808586,left_val:0.2069641947746277},{features:[[0,14,2,1,-1.],[1,14,1,1,2.]],threshold:-4.7734950203448534e-004,right_val:0.0931742712855339,left_val:-0.2462954968214035},{features:[[6,15,3,2,-1.],[7,15,1,2,3.]],threshold:5.2415160462260246e-003,right_val:-0.5493478775024414,left_val:0.0365285202860832},{features:[[18,10,2,4,-1.],[18,10,1,2,2.],[19,12,1,2,2.]],threshold:3.7873629480600357e-003,right_val:0.3873398005962372,left_val:-0.0575970895588398},{features:[[13,12,2,2,-1.],[14,12,1,2,2.]],threshold:-1.4434250260819681e-005,right_val:-0.1744707971811295,left_val:0.1129285991191864},{features:[[9,5,8,12,-1.],[13,5,4,12,2.]],threshold:0.0420115999877453,right_val:0.4545480012893677,left_val:-0.0465568602085114},{features:[[11,5,3,3,-1.],[12,5,1,3,3.]],threshold:7.9663433134555817e-003,right_val:-0.5370252132415772,left_val:0.0422587394714355},{features:[[16,11,2,2,-1.],[16,11,1,1,2.],[17,12,1,1,2.]],threshold:5.3092982852831483e-004,right_val:0.2179591953754425,left_val:-0.0979187190532684},{features:[[14,5,1,2,-1.],[14,6,1,1,2.]],threshold:5.2906107157468796e-004,right_val:-0.2886753976345062,left_val:0.0779610574245453},{features:[[3,0,8,16,-1.],[3,8,8,8,2.]],threshold:-0.1955624967813492,right_val:0.0272760000079870,left_val:-0.7647573947906494},{features:[[3,11,3,5,-1.],[4,11,1,5,3.]],threshold:-0.0115599501878023,right_val:-0.0636149868369102,left_val:0.3352600038051605},{features:[[0,8,12,6,-1.],[4,8,4,6,3.]],threshold:-0.1400565952062607,right_val:0.0280244704335928,left_val:-0.7623205184936523},{features:[[6,9,4,2,-1.],[6,9,2,1,2.],[8,10,2,1,2.]],threshold:4.4643289584200829e-005,right_val:0.0993916988372803,left_val:-0.2032092958688736},{features:[[11,15,3,5,-1.],[12,15,1,5,3.]],threshold:3.9411801844835281e-003,right_val:-0.3758454024791718,left_val:0.0499362796545029},{features:[[18,10,2,6,-1.],[18,10,1,3,2.],[19,13,1,3,2.]],threshold:-4.5965691097080708e-003,right_val:-0.0638099312782288,left_val:0.3303121030330658},{features:[[13,15,6,1,-1.],[16,15,3,1,2.]],threshold:-6.9790292764082551e-004,right_val:-0.1319292038679123,left_val:0.1609371006488800},{features:[[5,10,7,6,-1.],[5,13,7,3,2.]],threshold:6.1886821640655398e-004,right_val:-0.3302145898342133,left_val:0.0746211931109428},{features:[[2,11,6,6,-1.],[2,14,6,3,2.]],threshold:-0.0327551402151585,right_val:0.0493086613714695,left_val:-0.4064356088638306},{features:[[11,14,3,3,-1.],[11,15,3,1,3.]],threshold:3.3697509206831455e-003,right_val:-0.4975732862949371,left_val:0.0406270995736122},{features:[[7,14,6,3,-1.],[7,15,6,1,3.]],threshold:3.7391821388155222e-004,right_val:0.1651796996593475,left_val:-0.1493179947137833},{features:[[5,14,5,3,-1.],[5,15,5,1,3.]],threshold:-4.0217190980911255e-003,right_val:-0.0766421034932137,left_val:0.2953197062015533},{features:[[6,16,3,1,-1.],[7,16,1,1,3.]],threshold:-7.2943832492455840e-004,right_val:0.0792439877986908,left_val:-0.2735581099987030},{features:[[4,15,4,3,-1.],[4,16,4,1,3.]],threshold:-5.7726111263036728e-003,right_val:-0.0760872066020966,left_val:0.3474124073982239},{features:[[2,2,4,8,-1.],[2,2,2,4,2.],[4,6,2,4,2.]],threshold:-2.1122458856552839e-003,right_val:-0.1244447007775307,left_val:0.1729051023721695},{features:[[12,13,2,3,-1.],[12,14,2,1,3.]],threshold:4.4956691563129425e-003,right_val:-0.7400333881378174,left_val:0.0302187297493219},{features:[[9,13,4,3,-1.],[9,14,4,1,3.]],threshold:-1.1419389629736543e-003,right_val:0.0769115462899208,left_val:-0.2349448949098587},{features:[[8,8,5,3,-1.],[8,9,5,1,3.]],threshold:2.7658098842948675e-003,right_val:0.2100971043109894,left_val:-0.0916666612029076},{features:[[9,12,3,2,-1.],[10,12,1,2,3.]],threshold:-7.2281848406419158e-004,right_val:0.0753781422972679,left_val:-0.2558746933937073},{features:[[4,0,8,2,-1.],[4,0,4,1,2.],[8,1,4,1,2.]],threshold:1.8604539800435305e-003,right_val:0.1972692012786865,left_val:-0.0945110693573952},{features:[[0,12,1,2,-1.],[0,13,1,1,2.]],threshold:-2.8568008565343916e-004,right_val:0.0972900390625000,left_val:-0.2107331007719040},{features:[[8,14,8,4,-1.],[8,16,8,2,2.]],threshold:-0.0387961007654667,right_val:0.0244103092700243,left_val:-0.7872459292411804},{features:[[4,17,9,3,-1.],[4,18,9,1,3.]],threshold:-0.0121198697015643,right_val:-0.0579074993729591,left_val:0.3646681010723114}],threshold:-1.5173089504241943},{simpleClassifiers:[{features:[[10,0,2,8,-1.],[10,4,2,4,2.]],threshold:5.6008538231253624e-003,right_val:0.3381746113300324,left_val:-0.3849158883094788},{features:[[10,13,2,6,-1.],[10,16,2,3,2.]],threshold:-3.7205789703875780e-003,right_val:-0.3067378103733063,left_val:0.2461411952972412},{features:[[7,2,10,5,-1.],[12,2,5,5,2.]],threshold:-2.5333440862596035e-003,right_val:-0.4272018969058991,left_val:0.1253120005130768},{features:[[9,7,4,6,-1.],[9,7,2,3,2.],[11,10,2,3,2.]],threshold:-7.3425087612122297e-004,right_val:-0.3511157035827637,left_val:0.1331433057785034},{features:[[12,10,1,6,-1.],[12,13,1,3,2.]],threshold:-1.4792960428167135e-004,right_val:-0.3859119117259979,left_val:0.1254530996084213},{features:[[1,2,6,8,-1.],[4,2,3,8,2.]],threshold:-0.0489763393998146,right_val:-0.1149478033185005,left_val:0.3645674884319305},{features:[[10,12,1,3,-1.],[10,13,1,1,3.]],threshold:1.0917349718511105e-003,right_val:-0.4139983057975769,left_val:0.0790053382515907},{features:[[5,7,3,2,-1.],[6,7,1,2,3.]],threshold:5.4457997903227806e-003,right_val:0.3308556079864502,left_val:-0.1192184016108513},{features:[[10,13,1,3,-1.],[10,14,1,1,3.]],threshold:1.5979419695213437e-003,right_val:-0.5502822995185852,left_val:0.0411811992526054},{features:[[4,3,16,9,-1.],[4,6,16,3,3.]],threshold:-1.3023250503465533e-003,right_val:-0.3571932017803192,left_val:0.0828394368290901},{features:[[5,12,4,3,-1.],[7,12,2,3,2.]],threshold:4.8810569569468498e-004,right_val:0.1497281044721603,left_val:-0.2092863023281097},{features:[[10,14,1,3,-1.],[10,15,1,1,3.]],threshold:2.1033850498497486e-003,right_val:-0.6109995841979981,left_val:0.0518394187092781},{features:[[10,6,3,8,-1.],[11,6,1,8,3.]],threshold:0.0119843604043126,right_val:-0.5898572206497192,left_val:0.0410223491489887},{features:[[1,8,3,5,-1.],[2,8,1,5,3.]],threshold:-0.0118985902518034,right_val:-0.0647147074341774,left_val:0.4584499895572662},{features:[[6,7,3,2,-1.],[7,7,1,2,3.]],threshold:5.3713661618530750e-003,right_val:0.4120436906814575,left_val:-0.0615604706108570},{features:[[9,10,3,3,-1.],[10,10,1,3,3.]],threshold:4.3421140871942043e-003,right_val:-0.4870339035987854,left_val:0.0605016611516476},{features:[[11,4,4,3,-1.],[11,5,4,1,3.]],threshold:6.6142519935965538e-003,right_val:-0.5034617185592651,left_val:0.0468731895089149},{features:[[16,11,3,1,-1.],[17,11,1,1,3.]],threshold:1.2339729582890868e-003,right_val:0.3042829930782318,left_val:-0.0815384387969971},{features:[[8,0,6,3,-1.],[10,0,2,3,3.]],threshold:-0.0129756601527333,right_val:0.0486814901232719,left_val:-0.4783433079719544},{features:[[17,11,2,2,-1.],[17,11,1,1,2.],[18,12,1,1,2.]],threshold:-1.7806360265240073e-003,right_val:-0.0681260377168655,left_val:0.3769873082637787},{features:[[11,3,7,3,-1.],[11,4,7,1,3.]],threshold:7.8339744359254837e-003,right_val:-0.4673858880996704,left_val:0.0545012801885605},{features:[[6,11,1,3,-1.],[6,12,1,1,3.]],threshold:-6.0113701038062572e-003,right_val:-0.0444346405565739,left_val:0.5487005114555359},{features:[[7,4,3,2,-1.],[8,4,1,2,3.]],threshold:-2.0694560371339321e-003,right_val:0.0643834024667740,left_val:-0.3775554895401001},{features:[[7,3,3,3,-1.],[8,3,1,3,3.]],threshold:4.7843591310083866e-003,right_val:-0.5263398289680481,left_val:0.0462521500885487},{features:[[6,12,2,3,-1.],[6,13,2,1,3.]],threshold:-6.2808818183839321e-003,right_val:-0.0690513029694557,left_val:0.3945186138153076},{features:[[6,12,2,3,-1.],[6,13,2,1,3.]],threshold:1.6099009662866592e-003,right_val:0.2732166945934296,left_val:-0.1031619012355804},{features:[[10,12,2,3,-1.],[10,13,2,1,3.]],threshold:-8.2392559852451086e-004,right_val:0.0846015736460686,left_val:-0.2803941071033478},{features:[[5,0,12,2,-1.],[5,1,12,1,2.]],threshold:-0.0101233199238777,right_val:-0.0613229498267174,left_val:0.3363595008850098},{features:[[4,11,8,4,-1.],[4,13,8,2,2.]],threshold:0.0105257201939821,right_val:-0.5167213082313538,left_val:0.0461656004190445},{features:[[6,12,8,4,-1.],[6,14,8,2,2.]],threshold:-0.0267744995653629,right_val:0.0398578196763992,left_val:-0.5032597184181213},{features:[[4,0,4,2,-1.],[4,0,2,1,2.],[6,1,2,1,2.]],threshold:4.0248301811516285e-003,right_val:0.3665980994701386,left_val:-0.0615013800561428},{features:[[13,9,4,2,-1.],[13,10,4,1,2.]],threshold:-4.6271650353446603e-004,right_val:0.0813112631440163,left_val:-0.2643983066082001},{features:[[12,10,2,2,-1.],[13,10,1,2,2.]],threshold:-5.1834900659741834e-005,right_val:-0.2026937007904053,left_val:0.1115439981222153},{features:[[9,9,6,1,-1.],[12,9,3,1,2.]],threshold:4.8874281346797943e-003,right_val:0.3361203074455261,left_val:-0.0696449875831604},{features:[[6,6,14,6,-1.],[6,9,14,3,2.]],threshold:0.1263823062181473,right_val:-0.6584991812705994,left_val:0.0368136391043663},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:-8.0248164013028145e-003,right_val:-0.0488858595490456,left_val:0.4660192131996155},{features:[[11,11,1,3,-1.],[11,12,1,1,3.]],threshold:-1.1518909595906734e-003,right_val:0.0585728511214256,left_val:-0.4046675860881805},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:9.8190037533640862e-004,right_val:0.1774435043334961,left_val:-0.1319722980260849},{features:[[12,11,6,2,-1.],[14,11,2,2,3.]],threshold:-0.0194479804486036,right_val:0.0338345915079117,left_val:-0.6848952770233154},{features:[[11,11,2,1,-1.],[12,11,1,1,2.]],threshold:-7.2442039709130768e-006,right_val:-0.1872612982988358,left_val:0.1155311018228531},{features:[[3,11,14,1,-1.],[10,11,7,1,2.]],threshold:-0.0170390605926514,right_val:0.0677377134561539,left_val:-0.3510529100894928},{features:[[1,13,6,5,-1.],[3,13,2,5,3.]],threshold:0.0111865801736712,right_val:0.2107709944248200,left_val:-0.0934200435876846},{features:[[14,0,2,1,-1.],[15,0,1,1,2.]],threshold:7.6585268834605813e-004,right_val:-0.3212788105010986,left_val:0.0659657567739487},{features:[[10,0,10,1,-1.],[15,0,5,1,2.]],threshold:1.4231950626708567e-004,right_val:0.1375764012336731,left_val:-0.1546013057231903},{features:[[5,15,3,3,-1.],[5,16,3,1,3.]],threshold:-5.5553209967911243e-003,right_val:-0.0647535324096680,left_val:0.3131935000419617},{features:[[12,14,2,2,-1.],[12,15,2,1,2.]],threshold:1.2308239820413291e-004,right_val:-0.2225106954574585,left_val:0.0976666212081909},{features:[[12,14,2,3,-1.],[12,15,2,1,3.]],threshold:-1.6092039877548814e-003,right_val:0.0644525587558746,left_val:-0.3621559143066406},{features:[[8,6,1,3,-1.],[8,7,1,1,3.]],threshold:-1.5626100357621908e-003,right_val:-0.0955511033535004,left_val:0.2258878052234650},{features:[[0,2,1,3,-1.],[0,3,1,1,3.]],threshold:-5.0116342026740313e-004,right_val:0.0891745314002037,left_val:-0.2228921949863434},{features:[[0,2,1,3,-1.],[0,3,1,1,3.]],threshold:3.7322030402719975e-004,right_val:-0.2112991958856583,left_val:0.0919690132141113},{features:[[4,8,2,2,-1.],[4,8,1,1,2.],[5,9,1,1,2.]],threshold:-2.2882660850882530e-003,right_val:-0.0534558594226837,left_val:0.3898904919624329},{features:[[3,6,8,10,-1.],[3,6,4,5,2.],[7,11,4,5,2.]],threshold:-0.0468840301036835,right_val:0.0321945212781429,left_val:-0.6235709190368652},{features:[[6,15,1,3,-1.],[6,16,1,1,3.]],threshold:1.8901260336861014e-003,right_val:0.2742008864879608,left_val:-0.0726151466369629},{features:[[12,0,3,8,-1.],[13,0,1,8,3.]],threshold:0.0158053301274776,right_val:-0.6960816979408264,left_val:0.0286018308252096},{features:[[10,0,10,6,-1.],[10,0,5,3,2.],[15,3,5,3,2.]],threshold:0.0326441787183285,right_val:0.5087339878082275,left_val:-0.0407722517848015},{features:[[17,2,2,2,-1.],[17,3,2,1,2.]],threshold:6.5482832724228501e-004,right_val:-0.2758063077926636,left_val:0.0857249125838280},{features:[[8,0,12,14,-1.],[14,0,6,14,2.]],threshold:-0.0111429300159216,right_val:-0.2091481983661652,left_val:0.0873260125517845},{features:[[10,18,2,1,-1.],[11,18,1,1,2.]],threshold:-5.8072229148820043e-004,right_val:0.0663378909230232,left_val:-0.2947142124176025},{features:[[18,9,2,6,-1.],[18,9,1,3,2.],[19,12,1,3,2.]],threshold:-7.4414577102288604e-004,right_val:-0.1065462976694107,left_val:0.1801795959472656},{features:[[18,4,2,16,-1.],[18,4,1,8,2.],[19,12,1,8,2.]],threshold:7.6460661366581917e-003,right_val:0.3158234059810638,left_val:-0.0636081472039223},{features:[[5,8,6,6,-1.],[8,8,3,6,2.]],threshold:0.0326172113418579,right_val:-0.6054118871688843,left_val:0.0326064415276051},{features:[[6,5,4,11,-1.],[8,5,2,11,2.]],threshold:-0.0345272310078144,right_val:0.0278887692838907,left_val:-0.5977085828781128},{features:[[6,8,2,2,-1.],[7,8,1,2,2.]],threshold:3.2211719080805779e-003,right_val:0.4030562043190002,left_val:-0.0491839200258255},{features:[[6,5,2,5,-1.],[7,5,1,5,2.]],threshold:-4.1549839079380035e-004,right_val:-0.1584533005952835,left_val:0.1353314071893692},{features:[[10,16,3,4,-1.],[11,16,1,4,3.]],threshold:2.5140501093119383e-003,right_val:-0.3076852858066559,left_val:0.0632185712456703},{features:[[3,0,8,18,-1.],[3,9,8,9,2.]],threshold:-0.2081820964813232,right_val:0.0226959604769945,left_val:-0.7575026154518127},{features:[[1,7,7,3,-1.],[1,8,7,1,3.]],threshold:-0.0260672792792320,right_val:0.0193754807114601,left_val:-0.7495995759963989},{features:[[5,5,2,6,-1.],[5,7,2,2,3.]],threshold:-5.8264029212296009e-004,right_val:-0.1991982012987137,left_val:0.0946582332253456},{features:[[3,8,3,10,-1.],[4,8,1,10,3.]],threshold:-3.2769259996712208e-003,right_val:-0.1232203021645546,left_val:0.1621433049440384},{features:[[3,12,3,2,-1.],[4,12,1,2,3.]],threshold:1.3998829526826739e-003,right_val:0.2315165996551514,left_val:-0.1084920018911362},{features:[[3,9,10,3,-1.],[8,9,5,3,2.]],threshold:-0.0120559800416231,right_val:0.0932729616761208,left_val:-0.2400285005569458},{features:[[6,15,6,2,-1.],[8,15,2,2,3.]],threshold:3.1805539038032293e-003,right_val:-0.2543506920337677,left_val:0.0762641206383705},{features:[[5,9,3,2,-1.],[6,9,1,2,3.]],threshold:-1.0693799704313278e-003,right_val:-0.0907302424311638,left_val:0.2225888967514038},{features:[[17,5,3,3,-1.],[17,6,3,1,3.]],threshold:-2.9467688873410225e-003,right_val:0.0605810396373272,left_val:-0.3424269855022430},{features:[[8,6,1,3,-1.],[8,7,1,1,3.]],threshold:8.8108901400119066e-004,right_val:0.2691198885440826,left_val:-0.0783262029290199},{features:[[18,5,1,3,-1.],[18,6,1,1,3.]],threshold:2.8118939371779561e-004,right_val:-0.2194790989160538,left_val:0.0983708277344704},{features:[[5,2,5,6,-1.],[5,5,5,3,2.]],threshold:-0.0185748692601919,right_val:-0.0712407529354095,left_val:0.2672972083091736},{features:[[11,1,6,3,-1.],[13,1,2,3,3.]],threshold:-0.0248103495687246,right_val:0.0294463094323874,left_val:-0.6832203269004822},{features:[[6,7,2,10,-1.],[6,12,2,5,2.]],threshold:2.8904930222779512e-003,right_val:-0.2402520030736923,left_val:0.0761610120534897},{features:[[3,14,4,4,-1.],[5,14,2,4,2.]],threshold:3.5410430282354355e-003,right_val:0.1850941926240921,left_val:-0.1074208989739418},{features:[[2,11,4,1,-1.],[4,11,2,1,2.]],threshold:-8.4244477329775691e-004,right_val:-0.1140777021646500,left_val:0.1872722953557968},{features:[[6,4,3,2,-1.],[7,4,1,2,3.]],threshold:-2.5338360574096441e-003,right_val:0.0512516610324383,left_val:-0.3587019145488739},{features:[[8,3,2,6,-1.],[8,5,2,2,3.]],threshold:1.9654980860650539e-003,right_val:0.1304101943969727,left_val:-0.1406472027301788},{features:[[0,10,20,10,-1.],[10,10,10,10,2.]],threshold:0.3157410025596619,right_val:-0.6315789222717285,left_val:0.0295509696006775},{features:[[13,7,2,2,-1.],[13,8,2,1,2.]],threshold:-2.9846638790331781e-004,right_val:0.0788754224777222,left_val:-0.2291108071804047},{features:[[10,8,10,4,-1.],[15,8,5,4,2.]],threshold:-0.1154548004269600,right_val:0.0222614500671625,left_val:-0.8189594149589539},{features:[[0,10,16,2,-1.],[8,10,8,2,2.]],threshold:-0.0358172990381718,right_val:0.0606441907584667,left_val:-0.3061293959617615},{features:[[10,14,6,6,-1.],[10,14,3,3,2.],[13,17,3,3,2.]],threshold:0.0170716904103756,right_val:0.3215267956256867,left_val:-0.0611348412930965},{features:[[13,10,1,3,-1.],[13,11,1,1,3.]],threshold:-2.1385080181062222e-003,right_val:0.0386673696339130,left_val:-0.5479816198348999},{features:[[4,4,10,8,-1.],[4,4,5,4,2.],[9,8,5,4,2.]],threshold:0.0654244571924210,right_val:-0.8562883138656616,left_val:0.0178842600435019},{features:[[5,1,6,6,-1.],[5,1,3,3,2.],[8,4,3,3,2.]],threshold:-0.0134199298918247,right_val:-0.0675596669316292,left_val:0.3099510073661804},{features:[[11,10,8,3,-1.],[11,11,8,1,3.]],threshold:0.0189397092908621,right_val:-0.7533819079399109,left_val:0.0287297293543816},{features:[[3,11,3,6,-1.],[3,13,3,2,3.]],threshold:-0.0291204601526260,right_val:0.0203595496714115,left_val:-0.7359461784362793}],threshold:-1.6563049554824829},{simpleClassifiers:[{features:[[8,0,12,6,-1.],[8,0,6,3,2.],[14,3,6,3,2.]],threshold:-0.0134190302342176,right_val:-0.4178233146667481,left_val:0.3053801059722900},{features:[[7,8,2,4,-1.],[7,8,1,2,2.],[8,10,1,2,2.]],threshold:1.7404999816790223e-003,right_val:0.3540956079959869,left_val:-0.2710157930850983},{features:[[11,1,7,10,-1.],[11,6,7,5,2.]],threshold:7.7174860052764416e-003,right_val:0.2118998020887375,left_val:-0.3127137124538422},{features:[[10,15,3,2,-1.],[10,16,3,1,2.]],threshold:-1.4514879694615956e-005,right_val:-0.3352273106575012,left_val:0.1615709066390991},{features:[[11,11,2,3,-1.],[12,11,1,3,2.]],threshold:-1.4871519852022175e-005,right_val:-0.2936952114105225,left_val:0.1457162052392960},{features:[[6,8,3,2,-1.],[6,9,3,1,2.]],threshold:1.5004149463493377e-004,right_val:0.1040794998407364,left_val:-0.4014987945556641},{features:[[11,14,1,3,-1.],[11,15,1,1,3.]],threshold:1.8634879961609840e-003,right_val:-0.6520826816558838,left_val:0.0490628406405449},{features:[[5,11,2,3,-1.],[5,12,2,1,3.]],threshold:-2.9590800404548645e-003,right_val:-0.1329340934753418,left_val:0.2880443036556244},{features:[[12,12,2,2,-1.],[12,13,2,1,2.]],threshold:3.3067780896089971e-004,right_val:-0.4154086112976074,left_val:0.0396153703331947},{features:[[11,3,8,9,-1.],[11,6,8,3,3.]],threshold:-1.6816710121929646e-003,right_val:-0.2323751002550125,left_val:0.1303257942199707},{features:[[10,11,3,3,-1.],[11,11,1,3,3.]],threshold:3.4896740689873695e-003,right_val:-0.4717600941658020,left_val:0.0688529163599014},{features:[[6,11,1,3,-1.],[6,12,1,1,3.]],threshold:1.6204500570893288e-003,right_val:0.3488718867301941,left_val:-0.1099696010351181},{features:[[9,6,2,3,-1.],[10,6,1,3,2.]],threshold:1.9125849939882755e-004,right_val:0.1477562040090561,left_val:-0.2031732052564621},{features:[[7,8,2,6,-1.],[7,10,2,2,3.]],threshold:0.0224852599203587,right_val:-0.5481569170951843,left_val:0.0519297309219837},{features:[[3,0,4,6,-1.],[3,0,2,3,2.],[5,3,2,3,2.]],threshold:0.0100359497591853,right_val:0.2600057125091553,left_val:-0.1094331964850426},{features:[[5,0,3,17,-1.],[6,0,1,17,3.]],threshold:0.0400916300714016,right_val:-0.7472460269927979,left_val:0.0386570505797863},{features:[[12,9,6,3,-1.],[12,10,6,1,3.]],threshold:0.0153190195560455,right_val:-0.7771779894828796,left_val:0.0285793691873550},{features:[[10,19,8,1,-1.],[14,19,4,1,2.]],threshold:9.0913427993655205e-004,right_val:0.1736337989568710,left_val:-0.1504954993724823},{features:[[13,3,5,3,-1.],[13,4,5,1,3.]],threshold:-6.0226190835237503e-003,right_val:0.0581856705248356,left_val:-0.4770449101924896},{features:[[5,7,2,2,-1.],[6,7,1,2,2.]],threshold:7.8066787682473660e-004,right_val:0.1623692065477371,left_val:-0.1634933948516846},{features:[[12,10,3,10,-1.],[13,10,1,10,3.]],threshold:-0.0114920204505324,right_val:0.0460096113383770,left_val:-0.5618547797203064},{features:[[4,7,6,3,-1.],[7,7,3,3,2.]],threshold:8.9691327884793282e-003,right_val:-0.3382484018802643,left_val:0.0665704831480980},{features:[[6,10,1,3,-1.],[6,11,1,1,3.]],threshold:7.2241941234096885e-004,right_val:0.1900296956300736,left_val:-0.1288266927003861},{features:[[6,9,2,3,-1.],[6,10,2,1,3.]],threshold:1.4879239643050823e-005,right_val:0.1315100938081741,left_val:-0.2176592946052551},{features:[[11,3,6,3,-1.],[11,4,6,1,3.]],threshold:8.7159732356667519e-003,right_val:-0.5236771702766419,left_val:0.0481882393360138},{features:[[13,14,2,3,-1.],[13,15,2,1,3.]],threshold:-1.3809900265187025e-003,right_val:0.0670123621821404,left_val:-0.3173463046550751},{features:[[6,16,8,4,-1.],[6,16,4,2,2.],[10,18,4,2,2.]],threshold:0.0140041103586555,right_val:0.3490039110183716,left_val:-0.0721551775932312},{features:[[10,5,3,15,-1.],[11,5,1,15,3.]],threshold:-0.0128834601491690,right_val:0.0392199903726578,left_val:-0.5967429876327515},{features:[[10,0,10,6,-1.],[10,0,5,3,2.],[15,3,5,3,2.]],threshold:9.9220760166645050e-003,right_val:0.3549165129661560,left_val:-0.0736170485615730},{features:[[11,2,3,16,-1.],[12,2,1,16,3.]],threshold:-0.0103603601455688,right_val:0.0545167215168476,left_val:-0.4965578019618988},{features:[[7,12,2,2,-1.],[7,12,1,1,2.],[8,13,1,1,2.]],threshold:5.9103948296979070e-004,right_val:0.2373840957880020,left_val:-0.0916490927338600},{features:[[6,4,2,1,-1.],[7,4,1,1,2.]],threshold:1.4986419955675956e-005,right_val:0.1421668976545334,left_val:-0.1562436074018478},{features:[[6,3,3,4,-1.],[7,3,1,4,3.]],threshold:6.2526292167603970e-003,right_val:-0.4386126101016998,left_val:0.0465709418058395},{features:[[0,13,16,6,-1.],[0,15,16,2,3.]],threshold:0.0907229781150818,right_val:-0.7555767893791199,left_val:0.0235441196709871},{features:[[7,14,2,3,-1.],[7,15,2,1,3.]],threshold:1.2880839640274644e-003,right_val:0.1995418965816498,left_val:-0.1099981963634491},{features:[[15,17,2,2,-1.],[15,18,2,1,2.]],threshold:-5.3202832350507379e-004,right_val:0.0943498313426971,left_val:-0.2368102073669434},{features:[[17,12,2,2,-1.],[17,12,1,1,2.],[18,13,1,1,2.]],threshold:1.4669039519503713e-003,right_val:0.3543792963027954,left_val:-0.0604179389774799},{features:[[11,1,3,19,-1.],[12,1,1,19,3.]],threshold:0.0259292703121901,right_val:-0.7117512226104736,left_val:0.0302053801715374},{features:[[1,11,19,4,-1.],[1,13,19,2,2.]],threshold:-0.0722578391432762,right_val:0.0220785401761532,left_val:-0.7683005928993225},{features:[[17,8,2,10,-1.],[17,8,1,5,2.],[18,13,1,5,2.]],threshold:-2.5999830104410648e-003,right_val:-0.0925756469368935,left_val:0.2287825047969818},{features:[[9,0,11,20,-1.],[9,10,11,10,2.]],threshold:0.4203611016273499,right_val:-0.6394466757774353,left_val:0.0341291502118111},{features:[[4,1,12,12,-1.],[4,1,6,6,2.],[10,7,6,6,2.]],threshold:-2.1722039673477411e-003,right_val:0.0967273488640785,left_val:-0.2045879960060120},{features:[[5,11,3,6,-1.],[6,11,1,6,3.]],threshold:-0.0185732506215572,right_val:0.0265874005854130,left_val:-0.7232174277305603},{features:[[4,8,3,1,-1.],[5,8,1,1,3.]],threshold:2.1321140229701996e-003,right_val:0.2900441884994507,left_val:-0.0792631730437279},{features:[[18,1,2,4,-1.],[19,1,1,4,2.]],threshold:1.4585970347980037e-005,right_val:0.1285791993141174,left_val:-0.1581220030784607},{features:[[11,0,8,15,-1.],[15,0,4,15,2.]],threshold:-0.2591994106769562,right_val:0.0213276296854019,left_val:-0.8320639133453369},{features:[[5,5,6,2,-1.],[7,5,2,2,3.]],threshold:-0.0127138802781701,right_val:0.0352829098701477,left_val:-0.4867066144943237},{features:[[17,11,2,2,-1.],[17,11,1,1,2.],[18,12,1,1,2.]],threshold:2.1182969212532043e-003,right_val:0.4349882006645203,left_val:-0.0481418594717979},{features:[[6,8,2,8,-1.],[6,12,2,4,2.]],threshold:4.9225408583879471e-003,right_val:-0.3571991026401520,left_val:0.0593890100717545},{features:[[9,9,2,4,-1.],[9,11,2,2,2.]],threshold:7.1720690466463566e-003,right_val:0.3171677887439728,left_val:-0.0727212205529213},{features:[[0,8,2,2,-1.],[0,9,2,1,2.]],threshold:1.5319329686462879e-003,right_val:-0.2982640862464905,left_val:0.0761052817106247},{features:[[7,12,8,4,-1.],[7,14,8,2,2.]],threshold:-0.0261416807770729,right_val:0.0419912002980709,left_val:-0.4812982976436615},{features:[[11,13,3,2,-1.],[11,14,3,1,2.]],threshold:-7.1861818469187710e-006,right_val:-0.2554089128971100,left_val:0.1038590967655182},{features:[[5,8,2,2,-1.],[5,8,1,1,2.],[6,9,1,1,2.]],threshold:-5.8513309340924025e-004,right_val:-0.1044678017497063,left_val:0.2155243009328842},{features:[[12,11,2,3,-1.],[12,12,2,1,3.]],threshold:7.3564669582992792e-004,right_val:-0.2322968989610672,left_val:0.0828503072261810},{features:[[10,8,2,2,-1.],[10,8,1,1,2.],[11,9,1,1,2.]],threshold:-4.4216000242158771e-004,right_val:-0.1108435988426209,left_val:0.1984968930482864},{features:[[6,16,3,2,-1.],[7,16,1,2,3.]],threshold:6.6545000299811363e-003,right_val:-0.6381940245628357,left_val:0.0298448391258717},{features:[[13,12,2,1,-1.],[14,12,1,1,2.]],threshold:-1.4856060261081439e-005,right_val:-0.1630474030971527,left_val:0.1064781025052071},{features:[[16,9,2,6,-1.],[16,9,1,3,2.],[17,12,1,3,2.]],threshold:4.4933347962796688e-003,right_val:0.3220021128654480,left_val:-0.0583121813833714},{features:[[17,2,2,6,-1.],[17,4,2,2,3.]],threshold:3.8110970053821802e-003,right_val:-0.2714948058128357,left_val:0.0712374374270439},{features:[[13,2,7,6,-1.],[13,4,7,2,3.]],threshold:-0.0383090190589428,right_val:0.0297903995960951,left_val:-0.6238747835159302},{features:[[16,10,4,4,-1.],[16,10,2,2,2.],[18,12,2,2,2.]],threshold:-2.5534629821777344e-003,right_val:-0.0934725701808929,left_val:0.2094762027263641},{features:[[11,10,2,2,-1.],[11,11,2,1,2.]],threshold:-2.9908109354437329e-005,right_val:-0.1285872012376785,left_val:0.1477189958095551},{features:[[6,13,3,3,-1.],[6,14,3,1,3.]],threshold:2.0549520850181580e-003,right_val:0.2191116958856583,left_val:-0.0936039835214615},{features:[[4,14,4,2,-1.],[4,15,4,1,2.]],threshold:3.3064800663851202e-004,right_val:0.1690506041049957,left_val:-0.1443066000938416},{features:[[0,9,2,1,-1.],[1,9,1,1,2.]],threshold:4.0969369001686573e-004,right_val:-0.2179321050643921,left_val:0.0898449569940567},{features:[[7,6,4,8,-1.],[7,10,4,4,2.]],threshold:-5.1680381875485182e-004,right_val:0.0724907070398331,left_val:-0.2733086049556732},{features:[[9,17,7,3,-1.],[9,18,7,1,3.]],threshold:-0.0122852995991707,right_val:0.0288281291723251,left_val:-0.5789995193481445},{features:[[7,12,2,3,-1.],[7,13,2,1,3.]],threshold:1.4923219569027424e-003,right_val:0.2131579071283341,left_val:-0.0897484272718430},{features:[[12,17,4,3,-1.],[12,18,4,1,3.]],threshold:3.7809570785611868e-003,right_val:-0.3258047997951508,left_val:0.0568691305816174},{features:[[11,7,9,11,-1.],[14,7,3,11,3.]],threshold:-0.1363079994916916,right_val:0.0340148694813252,left_val:-0.5195829272270203},{features:[[16,14,4,5,-1.],[18,14,2,5,2.]],threshold:0.0211922507733107,right_val:0.4313400089740753,left_val:-0.0598157495260239},{features:[[9,2,3,4,-1.],[10,2,1,4,3.]],threshold:-2.2501780185848475e-003,right_val:0.0694940388202667,left_val:-0.3272511065006256},{features:[[3,11,2,8,-1.],[3,11,1,4,2.],[4,15,1,4,2.]],threshold:-0.0133094396442175,right_val:-0.0380551107227802,left_val:0.5568472146987915},{features:[[13,2,6,18,-1.],[13,2,3,9,2.],[16,11,3,9,2.]],threshold:-0.0486744008958340,right_val:-0.0480452999472618,left_val:0.3750388920307159},{features:[[9,12,5,2,-1.],[9,13,5,1,2.]],threshold:-1.4651560377387796e-005,right_val:-0.2298455983400345,left_val:0.0930435433983803},{features:[[11,8,4,10,-1.],[11,8,2,5,2.],[13,13,2,5,2.]],threshold:-7.7605661936104298e-003,right_val:-0.0546693094074726,left_val:0.3885821104049683},{features:[[0,11,20,1,-1.],[10,11,10,1,2.]],threshold:0.0244293306022882,right_val:-0.5106111168861389,left_val:0.0458986498415470},{features:[[1,12,1,2,-1.],[1,13,1,1,2.]],threshold:-2.1317049686331302e-004,right_val:0.1050731018185616,left_val:-0.2051361054182053}],threshold:-1.5920439958572388},{simpleClassifiers:[{features:[[6,7,6,3,-1.],[8,7,2,3,3.]],threshold:-5.7014292106032372e-003,right_val:-0.3312371969223023,left_val:0.2757621109485626},{features:[[8,5,10,3,-1.],[13,5,5,3,2.]],threshold:-4.4359369203448296e-003,right_val:-0.5028861761093140,left_val:0.1558748036623001},{features:[[5,5,4,6,-1.],[5,7,4,2,3.]],threshold:-5.0388257950544357e-003,right_val:-0.3519606888294220,left_val:0.1610901057720184},{features:[[5,11,6,3,-1.],[8,11,3,3,2.]],threshold:8.0847437493503094e-004,right_val:0.1444645971059799,left_val:-0.3331570029258728},{features:[[2,8,3,7,-1.],[3,8,1,7,3.]],threshold:0.0216053295880556,right_val:0.5910193920135498,left_val:-0.0867235735058784},{features:[[2,10,3,6,-1.],[3,10,1,6,3.]],threshold:-0.0182668399065733,right_val:-0.0846208631992340,left_val:0.5026186108589172},{features:[[14,0,2,2,-1.],[15,0,1,2,2.]],threshold:-8.3384668687358499e-004,right_val:0.1135276034474373,left_val:-0.3083251118659973},{features:[[8,7,4,4,-1.],[8,7,2,2,2.],[10,9,2,2,2.]],threshold:-0.0153366001322865,right_val:0.0330578386783600,left_val:-0.6861060857772827},{features:[[4,13,4,3,-1.],[4,14,4,1,3.]],threshold:-5.0607877783477306e-003,right_val:-0.0921182334423065,left_val:0.3439927995204926},{features:[[8,11,6,2,-1.],[8,12,6,1,2.]],threshold:-1.4741700397280511e-005,right_val:-0.2523517906665802,left_val:0.1177816987037659},{features:[[17,3,1,4,-1.],[17,5,1,2,2.]],threshold:-1.1485730065032840e-003,right_val:0.0835330486297607,left_val:-0.2905001938343048},{features:[[6,13,2,3,-1.],[6,14,2,1,3.]],threshold:2.8824089094996452e-003,right_val:0.3127414882183075,left_val:-0.0906742364168167},{features:[[7,9,6,8,-1.],[7,9,3,4,2.],[10,13,3,4,2.]],threshold:-0.0292243603616953,right_val:0.0332797802984715,left_val:-0.6915637850761414},{features:[[5,15,2,3,-1.],[5,16,2,1,3.]],threshold:2.1423520520329475e-003,right_val:0.2460308969020844,left_val:-0.1008772999048233},{features:[[7,10,4,9,-1.],[7,13,4,3,3.]],threshold:-0.0334710590541363,right_val:0.0550520718097687,left_val:-0.5095394253730774},{features:[[5,4,2,1,-1.],[6,4,1,1,2.]],threshold:1.4763450053578708e-005,right_val:0.1281639933586121,left_val:-0.1782314926385880},{features:[[0,1,6,19,-1.],[2,1,2,19,3.]],threshold:0.0163415595889091,right_val:0.1966349929571152,left_val:-0.1325473934412003},{features:[[5,8,6,2,-1.],[8,8,3,2,2.]],threshold:2.2475779987871647e-003,right_val:-0.2947632074356079,left_val:0.0790484473109245},{features:[[5,11,3,3,-1.],[5,12,3,1,3.]],threshold:4.6113221906125546e-003,right_val:0.3239440917968750,left_val:-0.0763384476304054},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:2.8979079797863960e-003,right_val:0.2635338902473450,left_val:-0.1083905026316643},{features:[[9,12,2,4,-1.],[9,12,1,2,2.],[10,14,1,2,2.]],threshold:1.3482819776982069e-003,right_val:-0.3483985960483551,left_val:0.0791345611214638},{features:[[12,7,2,10,-1.],[12,12,2,5,2.]],threshold:4.6576592139899731e-003,right_val:-0.3111054003238678,left_val:0.0763560906052589},{features:[[10,6,6,8,-1.],[10,10,6,4,2.]],threshold:-3.9915097877383232e-003,right_val:0.0826234668493271,left_val:-0.3415162861347199},{features:[[4,3,2,6,-1.],[5,3,1,6,2.]],threshold:6.0268798843026161e-003,right_val:0.2634766101837158,left_val:-0.0962778329849243},{features:[[4,6,3,3,-1.],[5,6,1,3,3.]],threshold:-4.1388701647520065e-003,right_val:-0.0943352878093719,left_val:0.2357172966003418},{features:[[10,7,2,8,-1.],[10,7,1,4,2.],[11,11,1,4,2.]],threshold:-0.0103717502206564,right_val:0.0336452201008797,left_val:-0.7297279834747315},{features:[[2,0,6,10,-1.],[2,5,6,5,2.]],threshold:0.1037362962961197,right_val:-0.5824512839317322,left_val:0.0313470698893070},{features:[[8,10,6,2,-1.],[8,11,6,1,2.]],threshold:-1.8832299974747002e-004,right_val:-0.1372316032648087,left_val:0.1666329950094223},{features:[[10,0,2,1,-1.],[11,0,1,1,2.]],threshold:-6.0749921249225736e-004,right_val:0.0814833715558052,left_val:-0.2725754082202911},{features:[[4,16,4,3,-1.],[4,17,4,1,3.]],threshold:2.3499270901083946e-003,right_val:0.2185488939285278,left_val:-0.1028544008731842},{features:[[7,4,3,2,-1.],[8,4,1,2,3.]],threshold:-3.1354159582406282e-003,right_val:0.0447473600506783,left_val:-0.4924603998661041},{features:[[7,5,3,1,-1.],[8,5,1,1,3.]],threshold:1.5564589994028211e-003,right_val:-0.4052621126174927,left_val:0.0530962608754635},{features:[[5,5,6,3,-1.],[5,6,6,1,3.]],threshold:6.3236099667847157e-003,right_val:0.2841371893882752,left_val:-0.0791168063879013},{features:[[5,5,5,3,-1.],[5,6,5,1,3.]],threshold:-4.8074051737785339e-003,right_val:-0.0828240811824799,left_val:0.2999025881290436},{features:[[10,7,6,9,-1.],[10,10,6,3,3.]],threshold:0.0764323025941849,right_val:-0.5731434226036072,left_val:0.0391463711857796},{features:[[17,4,1,2,-1.],[17,5,1,1,2.]],threshold:7.0249952841550112e-004,right_val:-0.3324547111988068,left_val:0.0528328716754913},{features:[[4,9,10,4,-1.],[4,9,5,2,2.],[9,11,5,2,2.]],threshold:-8.2157138967886567e-004,right_val:0.0881458297371864,left_val:-0.2123001962900162},{features:[[5,6,3,10,-1.],[5,11,3,5,2.]],threshold:-0.0101482803002000,right_val:0.0965974032878876,left_val:-0.2207161039113998},{features:[[2,13,18,5,-1.],[11,13,9,5,2.]],threshold:-0.1734880954027176,right_val:0.0325470604002476,left_val:-0.5982220172882080},{features:[[5,12,3,3,-1.],[5,13,3,1,3.]],threshold:4.3031540699303150e-003,right_val:0.2898102998733521,left_val:-0.0682535469532013},{features:[[9,12,2,4,-1.],[9,14,2,2,2.]],threshold:-7.3378678280278109e-006,right_val:-0.2586359083652496,left_val:0.0751555636525154},{features:[[5,11,15,6,-1.],[5,13,15,2,3.]],threshold:1.9277239916846156e-003,right_val:-0.1659514009952545,left_val:0.1085646003484726},{features:[[16,0,4,6,-1.],[16,0,2,3,2.],[18,3,2,3,2.]],threshold:-4.2054480873048306e-003,right_val:-0.0919417068362236,left_val:0.1981130987405777},{features:[[11,12,2,2,-1.],[11,12,1,1,2.],[12,13,1,1,2.]],threshold:1.1466189753264189e-003,right_val:-0.4399102926254273,left_val:0.0420787297189236},{features:[[6,6,3,5,-1.],[7,6,1,5,3.]],threshold:-6.7244949750602245e-003,right_val:-0.0570969581604004,left_val:0.3445686101913452},{features:[[13,13,2,1,-1.],[14,13,1,1,2.]],threshold:-1.4554189874615986e-005,right_val:-0.1625221073627472,left_val:0.1163256019353867},{features:[[5,8,3,2,-1.],[6,8,1,2,3.]],threshold:-2.6114559732377529e-003,right_val:-0.0682430416345596,left_val:0.2808496952056885},{features:[[0,0,2,1,-1.],[1,0,1,1,2.]],threshold:-1.9477460591588169e-004,right_val:0.0934132263064384,left_val:-0.1936886012554169},{features:[[0,0,2,1,-1.],[1,0,1,1,2.]],threshold:2.6438338682055473e-004,right_val:-0.2158662974834442,left_val:0.0993543714284897},{features:[[16,12,3,1,-1.],[17,12,1,1,3.]],threshold:2.0134719088673592e-003,right_val:0.2912097871303558,left_val:-0.0612092018127441},{features:[[8,5,12,8,-1.],[14,5,6,8,2.]],threshold:-0.2602435946464539,right_val:0.0211507603526115,left_val:-0.8380218148231506},{features:[[5,13,4,4,-1.],[5,13,2,2,2.],[7,15,2,2,2.]],threshold:-0.0159447006881237,right_val:0.0221448391675949,left_val:-0.6397479772567749},{features:[[5,7,2,3,-1.],[6,7,1,3,2.]],threshold:6.7249889252707362e-004,right_val:0.1232635006308556,left_val:-0.1401409059762955},{features:[[9,2,2,10,-1.],[9,2,1,5,2.],[10,7,1,5,2.]],threshold:0.0130427703261375,right_val:-0.6630306839942932,left_val:0.0243068896234035},{features:[[9,14,1,2,-1.],[9,15,1,1,2.]],threshold:-1.4540290067088790e-005,right_val:-0.1740916967391968,left_val:0.0901373624801636},{features:[[15,7,2,4,-1.],[15,9,2,2,2.]],threshold:0.0179208293557167,right_val:-0.6506714224815369,left_val:0.0256446208804846},{features:[[7,5,4,3,-1.],[7,6,4,1,3.]],threshold:1.6542300581932068e-003,right_val:0.1668816059827805,left_val:-0.1038570031523705},{features:[[3,10,8,2,-1.],[7,10,4,2,2.]],threshold:0.0353620909154415,right_val:-0.6900941729545593,left_val:0.0230930093675852},{features:[[13,8,2,2,-1.],[13,9,2,1,2.]],threshold:3.3049840567400679e-005,right_val:0.0938730984926224,left_val:-0.1740894019603729},{features:[[9,6,2,3,-1.],[9,7,2,1,3.]],threshold:3.3775588963180780e-003,right_val:0.3049055933952332,left_val:-0.0585224591195583},{features:[[13,10,5,2,-1.],[13,11,5,1,2.]],threshold:7.3239738121628761e-003,right_val:-0.4616098105907440,left_val:0.0409994088113308},{features:[[16,11,2,2,-1.],[16,11,1,1,2.],[17,12,1,1,2.]],threshold:-2.9797051101922989e-003,right_val:-0.0362468697130680,left_val:0.5113676190376282},{features:[[0,10,2,4,-1.],[0,10,1,2,2.],[1,12,1,2,2.]],threshold:2.0306499209254980e-003,right_val:-0.2669849991798401,left_val:0.0653093531727791},{features:[[0,8,2,8,-1.],[0,8,1,4,2.],[1,12,1,4,2.]],threshold:-6.8856950383633375e-004,right_val:0.0993618965148926,left_val:-0.1760412007570267},{features:[[6,14,5,3,-1.],[6,15,5,1,3.]],threshold:1.5746579738333821e-003,right_val:0.1694055050611496,left_val:-0.1031226962804794},{features:[[18,8,2,4,-1.],[19,8,1,4,2.]],threshold:1.5011089853942394e-003,right_val:0.1889909058809280,left_val:-0.0881284475326538},{features:[[14,2,3,1,-1.],[15,2,1,1,3.]],threshold:1.3503979425877333e-004,right_val:-0.1848344057798386,left_val:0.0941454768180847},{features:[[9,13,3,3,-1.],[9,14,3,1,3.]],threshold:5.5570588447153568e-003,right_val:-0.5548262000083923,left_val:0.0299590602517128},{features:[[5,13,6,3,-1.],[5,14,6,1,3.]],threshold:9.4529995694756508e-003,right_val:0.4013828933238983,left_val:-0.0531363897025585},{features:[[12,12,1,3,-1.],[12,13,1,1,3.]],threshold:-6.1030662618577480e-004,right_val:0.0668813511729240,left_val:-0.2706044912338257},{features:[[2,14,14,6,-1.],[2,17,14,3,2.]],threshold:-0.1132924035191536,right_val:0.0250429902225733,left_val:-0.6517850756645203},{features:[[7,5,2,4,-1.],[7,5,1,2,2.],[8,7,1,2,2.]],threshold:-2.0354389562271535e-004,right_val:-0.1517436951398850,left_val:0.1089242026209831},{features:[[5,17,2,2,-1.],[5,17,1,1,2.],[6,18,1,1,2.]],threshold:-1.4983189757913351e-003,right_val:-0.0584670491516590,left_val:0.2738873064517975},{features:[[9,3,3,5,-1.],[10,3,1,5,3.]],threshold:7.5277159921824932e-003,right_val:-0.4273988902568817,left_val:0.0409915298223495},{features:[[6,17,4,3,-1.],[6,18,4,1,3.]],threshold:3.6209179088473320e-003,right_val:0.2606475055217743,left_val:-0.0673092380166054},{features:[[10,0,6,4,-1.],[12,0,2,4,3.]],threshold:0.0121530499309301,right_val:-0.3831908106803894,left_val:0.0507682710886002},{features:[[4,8,6,10,-1.],[4,8,3,5,2.],[7,13,3,5,2.]],threshold:0.0461263395845890,right_val:-0.6503952741622925,left_val:0.0242329891771078},{features:[[4,3,2,6,-1.],[5,3,1,6,2.]],threshold:7.1408541407436132e-004,right_val:0.1220854967832565,left_val:-0.1347637027502060},{features:[[3,4,6,6,-1.],[5,4,2,6,3.]],threshold:-4.4331620447337627e-003,right_val:-0.1021870970726013,left_val:0.1993961036205292},{features:[[5,8,2,8,-1.],[5,12,2,4,2.]],threshold:1.3099729549139738e-003,right_val:-0.2450371980667114,left_val:0.0745170265436172},{features:[[5,11,2,2,-1.],[5,12,2,1,2.]],threshold:2.6161450659856200e-004,right_val:0.1992460042238236,left_val:-0.0842879563570023},{features:[[12,13,1,3,-1.],[12,14,1,1,3.]],threshold:-2.7577539440244436e-003,right_val:0.0248511098325253,left_val:-0.6873446702957153},{features:[[5,1,4,15,-1.],[5,6,4,5,3.]],threshold:0.0694696903228760,right_val:-0.3971717953681946,left_val:0.0384387299418449},{features:[[6,11,1,3,-1.],[6,12,1,1,3.]],threshold:-1.3031469425186515e-003,right_val:-0.0917233079671860,left_val:0.2008994966745377},{features:[[6,11,3,3,-1.],[6,12,3,1,3.]],threshold:1.3012000126764178e-003,right_val:0.1924819052219391,left_val:-0.0953058525919914},{features:[[11,0,3,3,-1.],[12,0,1,3,3.]],threshold:-3.9377259090542793e-003,right_val:0.0437380112707615,left_val:-0.3922409117221832},{features:[[2,2,15,3,-1.],[7,2,5,3,3.]],threshold:0.0961257070302963,right_val:0.3744184970855713,left_val:-0.0432694405317307},{features:[[4,0,16,5,-1.],[12,0,8,5,2.]],threshold:-0.1918185949325562,right_val:0.0287755392491817,left_val:-0.6132056117057800},{features:[[13,7,6,8,-1.],[13,11,6,4,2.]],threshold:-3.2945619896054268e-003,right_val:0.0776550173759460,left_val:-0.2244682013988495},{features:[[9,9,3,4,-1.],[9,11,3,2,2.]],threshold:-8.5190916433930397e-003,right_val:-0.0413103885948658,left_val:0.4472055137157440},{features:[[5,2,6,16,-1.],[5,2,3,8,2.],[8,10,3,8,2.]],threshold:-0.0494314692914486,right_val:0.0368637405335903,left_val:-0.5181968212127686},{features:[[10,7,6,3,-1.],[13,7,3,3,2.]],threshold:0.0231108795851469,right_val:0.5914663076400757,left_val:-0.0330784209072590},{features:[[12,11,2,1,-1.],[13,11,1,1,2.]],threshold:-4.3400399590609595e-005,right_val:-0.1952629983425140,left_val:0.1139502972364426},{features:[[0,0,1,8,-1.],[0,4,1,4,2.]],threshold:5.4926839657127857e-003,right_val:-0.2559199035167694,left_val:0.0616160705685616},{features:[[9,7,2,3,-1.],[9,8,2,1,3.]],threshold:1.1886029969900846e-003,right_val:0.2429125010967255,left_val:-0.0685091167688370},{features:[[6,5,4,15,-1.],[8,5,2,15,2.]],threshold:8.8473428040742874e-003,right_val:-0.2317638993263245,left_val:0.0764672830700874},{features:[[7,7,2,2,-1.],[8,7,1,2,2.]],threshold:2.3952820338308811e-003,right_val:0.4581176936626434,left_val:-0.0446208603680134},{features:[[1,3,1,2,-1.],[1,4,1,1,2.]],threshold:-1.5011220239102840e-004,right_val:0.1062223985791206,left_val:-0.1656074970960617},{features:[[6,2,6,11,-1.],[9,2,3,11,2.]],threshold:-0.0234658997505903,right_val:0.0661793574690819,left_val:-0.2493131011724472},{features:[[9,6,9,6,-1.],[9,8,9,2,3.]],threshold:-6.6368370316922665e-003,right_val:-0.1151050999760628,left_val:0.1435842067003250},{features:[[9,8,3,3,-1.],[9,9,3,1,3.]],threshold:1.1986029567196965e-003,right_val:0.1760554015636444,left_val:-0.0983475223183632},{features:[[6,8,2,3,-1.],[6,9,2,1,3.]],threshold:7.9502072185277939e-003,right_val:-0.5017663836479187,left_val:0.0354813784360886},{features:[[13,1,2,8,-1.],[13,5,2,4,2.]],threshold:-4.5950649655424058e-004,right_val:0.0934000834822655,left_val:-0.1692876070737839},{features:[[6,0,6,4,-1.],[6,2,6,2,2.]],threshold:-0.0193010699003935,right_val:-0.0511401109397411,left_val:0.4183666110038757},{features:[[0,6,20,14,-1.],[10,6,10,14,2.]],threshold:0.4016349911689758,right_val:-0.6476805806159973,left_val:0.0293589197099209}],threshold:-1.6632529497146606},{simpleClassifiers:[{features:[[8,0,12,6,-1.],[8,0,6,3,2.],[14,3,6,3,2.]],threshold:-0.0362842902541161,right_val:-0.2584043145179749,left_val:0.4284189939498901},{features:[[8,7,9,9,-1.],[8,10,9,3,3.]],threshold:0.0305208303034306,right_val:0.2175661027431488,left_val:-0.2971504032611847},{features:[[10,14,6,6,-1.],[10,14,3,3,2.],[13,17,3,3,2.]],threshold:3.3444820437580347e-003,right_val:0.1975443959236145,left_val:-0.2173435986042023},{features:[[8,7,4,10,-1.],[8,7,2,5,2.],[10,12,2,5,2.]],threshold:-1.3315919786691666e-003,right_val:-0.2313368022441864,left_val:0.1553592979907990},{features:[[15,4,3,3,-1.],[15,5,3,1,3.]],threshold:-1.9773480016738176e-003,right_val:0.0885544270277023,left_val:-0.4200130105018616},{features:[[14,0,6,6,-1.],[16,0,2,6,3.]],threshold:-3.7038238951936364e-004,right_val:-0.2387913018465042,left_val:0.1276978999376297},{features:[[5,9,10,6,-1.],[5,9,5,3,2.],[10,12,5,3,2.]],threshold:-7.3736459016799927e-003,right_val:0.0297653190791607,left_val:-0.4072006046772003},{features:[[11,12,2,1,-1.],[12,12,1,1,2.]],threshold:-2.1873020159546286e-005,right_val:-0.2223708927631378,left_val:0.1233820989727974},{features:[[11,7,3,7,-1.],[12,7,1,7,3.]],threshold:4.5575048716273159e-005,right_val:0.1295361965894699,left_val:-0.2309291064739227},{features:[[9,0,2,18,-1.],[9,0,1,9,2.],[10,9,1,9,2.]],threshold:-0.0112471701577306,right_val:0.0419076606631279,left_val:-0.5476273894309998},{features:[[3,6,3,4,-1.],[4,6,1,4,3.]],threshold:-8.9430268853902817e-003,right_val:-0.0908012166619301,left_val:0.2794528901576996},{features:[[14,10,2,2,-1.],[14,10,1,1,2.],[15,11,1,1,2.]],threshold:1.4646670024376363e-005,right_val:0.1496804058551788,left_val:-0.1677788048982620},{features:[[4,7,3,2,-1.],[5,7,1,2,3.]],threshold:-6.5398351289331913e-003,right_val:-0.0719872564077377,left_val:0.3365462124347687},{features:[[10,14,4,3,-1.],[10,15,4,1,3.]],threshold:3.3825531136244535e-003,right_val:-0.4580630064010620,left_val:0.0499318800866604},{features:[[12,12,2,3,-1.],[12,13,2,1,3.]],threshold:2.7450500056147575e-003,right_val:-0.5711386203765869,left_val:0.0361195094883442},{features:[[3,0,2,8,-1.],[3,0,1,4,2.],[4,4,1,4,2.]],threshold:0.0103563796728849,right_val:0.4212119877338409,left_val:-0.0530491583049297},{features:[[14,4,5,3,-1.],[14,5,5,1,3.]],threshold:3.1687319278717041e-003,right_val:-0.3467491865158081,left_val:0.0628499388694763},{features:[[6,16,1,3,-1.],[6,17,1,1,3.]],threshold:1.3616570504382253e-003,right_val:0.2525748014450073,left_val:-0.0906610563397408},{features:[[5,16,2,3,-1.],[5,17,2,1,3.]],threshold:-2.2238260135054588e-003,right_val:-0.0966490805149078,left_val:0.2659519016742706},{features:[[4,6,10,6,-1.],[4,6,5,3,2.],[9,9,5,3,2.]],threshold:0.0110908998176456,right_val:-0.3010335862636566,left_val:0.0866380631923676},{features:[[9,14,7,4,-1.],[9,16,7,2,2.]],threshold:-6.7766150459647179e-004,right_val:-0.2146414965391159,left_val:0.0942778289318085},{features:[[10,11,2,4,-1.],[10,11,1,2,2.],[11,13,1,2,2.]],threshold:-3.3104580361396074e-003,right_val:0.0327384881675243,left_val:-0.5916264057159424},{features:[[5,12,4,3,-1.],[5,13,4,1,3.]],threshold:2.3221869487315416e-003,right_val:0.2054619938135147,left_val:-0.0955572500824928},{features:[[5,13,3,2,-1.],[5,14,3,1,2.]],threshold:3.0947118648327887e-004,right_val:0.1770471930503845,left_val:-0.1299227029085159},{features:[[7,13,8,4,-1.],[7,15,8,2,2.]],threshold:-0.0322141684591770,right_val:0.0317492596805096,left_val:-0.6466249227523804},{features:[[8,4,3,1,-1.],[9,4,1,1,3.]],threshold:-8.3192758029326797e-004,right_val:0.0610405914485455,left_val:-0.3066675066947937},{features:[[6,1,1,4,-1.],[6,3,1,2,2.]],threshold:3.9188290247693658e-004,right_val:0.1183035001158714,left_val:-0.1579546928405762},{features:[[8,0,12,6,-1.],[8,0,6,3,2.],[14,3,6,3,2.]],threshold:-0.0362037383019924,right_val:0.0831830129027367,left_val:-0.2273122966289520},{features:[[8,5,2,3,-1.],[8,6,2,1,3.]],threshold:2.6437509804964066e-003,right_val:0.2354550957679749,left_val:-0.0766910612583160},{features:[[8,5,2,3,-1.],[8,6,2,1,3.]],threshold:-3.4368310589343309e-003,right_val:-0.0736729875206947,left_val:0.3605703115463257},{features:[[7,4,3,1,-1.],[8,4,1,1,3.]],threshold:-5.5921601597219706e-004,right_val:0.0782756432890892,left_val:-0.2534317970275879},{features:[[7,9,2,2,-1.],[7,9,1,1,2.],[8,10,1,1,2.]],threshold:4.3010139052057639e-005,right_val:0.0975393801927567,left_val:-0.1822309941053391},{features:[[15,14,4,6,-1.],[15,14,2,3,2.],[17,17,2,3,2.]],threshold:5.3192679770290852e-003,right_val:0.2422181069850922,left_val:-0.0769019499421120},{features:[[7,9,1,4,-1.],[7,11,1,2,2.]],threshold:-6.9484501145780087e-003,right_val:0.0346019491553307,left_val:-0.5827587246894836},{features:[[10,11,3,9,-1.],[11,11,1,9,3.]],threshold:0.0124477799981833,right_val:-0.6171249747276306,left_val:0.0238836593925953},{features:[[17,11,3,1,-1.],[18,11,1,1,3.]],threshold:1.0083100060001016e-003,right_val:0.2474427074193955,left_val:-0.0751521810889244},{features:[[17,11,3,1,-1.],[18,11,1,1,3.]],threshold:-2.3544009309262037e-003,right_val:-0.0650262311100960,left_val:0.3145940005779266},{features:[[0,1,1,2,-1.],[0,2,1,1,2.]],threshold:4.5676861191168427e-004,right_val:-0.2377721965312958,left_val:0.0797581970691681},{features:[[9,15,7,3,-1.],[9,16,7,1,3.]],threshold:6.6723190248012543e-003,right_val:-0.4604541957378388,left_val:0.0387791991233826},{features:[[15,0,2,2,-1.],[16,0,1,2,2.]],threshold:7.1861818469187710e-006,right_val:0.1253253072500229,left_val:-0.1311053931713104},{features:[[5,0,1,14,-1.],[5,7,1,7,2.]],threshold:0.0303925909101963,right_val:-0.5387092828750610,left_val:0.0296705309301615},{features:[[7,3,1,2,-1.],[7,4,1,1,2.]],threshold:1.4835850379313342e-005,right_val:0.1056685969233513,left_val:-0.1577858030796051},{features:[[7,0,4,6,-1.],[7,2,4,2,3.]],threshold:0.0144158601760864,right_val:0.3059771060943604,left_val:-0.0762713477015495},{features:[[7,2,3,2,-1.],[8,2,1,2,3.]],threshold:3.2787520904093981e-003,right_val:-0.3892802894115448,left_val:0.0444643087685108},{features:[[5,12,4,3,-1.],[5,13,4,1,3.]],threshold:0.0107705201953650,right_val:0.4149397909641266,left_val:-0.0393240116536617},{features:[[18,5,1,2,-1.],[18,6,1,1,2.]],threshold:5.4678268497809768e-004,right_val:-0.2754693031311035,left_val:0.0587216913700104},{features:[[18,0,2,10,-1.],[18,0,1,5,2.],[19,5,1,5,2.]],threshold:-1.8106499919667840e-003,right_val:-0.0936754271388054,left_val:0.1828175038099289},{features:[[0,2,13,6,-1.],[0,4,13,2,3.]],threshold:0.1177124977111816,right_val:-0.7069668173789978,left_val:0.0231757592409849},{features:[[0,0,2,2,-1.],[0,0,1,1,2.],[1,1,1,1,2.]],threshold:-3.1166549888439476e-004,right_val:0.0765738412737846,left_val:-0.2058593034744263},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:-9.7939418628811836e-003,right_val:-0.0347460284829140,left_val:0.4873268008232117},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:1.0002780472859740e-003,right_val:0.1549056023359299,left_val:-0.1100362017750740},{features:[[6,12,2,4,-1.],[7,12,1,4,2.]],threshold:6.9929230958223343e-003,right_val:-0.5432611703872681,left_val:0.0329236090183258},{features:[[7,9,4,10,-1.],[9,9,2,10,2.]],threshold:0.0341630205512047,right_val:-0.7080914974212647,left_val:0.0180628206580877},{features:[[2,0,9,16,-1.],[2,8,9,8,2.]],threshold:-0.2080841064453125,right_val:0.0202558208256960,left_val:-0.6787961125373840},{features:[[10,3,2,8,-1.],[10,3,1,4,2.],[11,7,1,4,2.]],threshold:2.4889659835025668e-004,right_val:0.0881523564457893,left_val:-0.1771952062845230},{features:[[1,2,12,3,-1.],[5,2,4,3,3.]],threshold:-9.3355607241392136e-003,right_val:-0.0944746211171150,left_val:0.1794805973768234},{features:[[4,6,2,3,-1.],[5,6,1,3,2.]],threshold:2.9192469082772732e-004,right_val:0.1381925940513611,left_val:-0.1378616988658905},{features:[[1,7,6,10,-1.],[3,7,2,10,3.]],threshold:9.1989226639270782e-003,right_val:0.1761810034513474,left_val:-0.1026910990476608},{features:[[1,14,2,1,-1.],[2,14,1,1,2.]],threshold:6.8165437551215291e-004,right_val:-0.2362183034420013,left_val:0.0748213082551956},{features:[[11,12,1,2,-1.],[11,13,1,1,2.]],threshold:-1.4507620107906405e-005,right_val:-0.1778573989868164,left_val:0.0958617702126503},{features:[[12,8,3,5,-1.],[13,8,1,5,3.]],threshold:1.7662490427028388e-004,right_val:0.1339432001113892,left_val:-0.1380535960197449},{features:[[6,5,9,6,-1.],[6,7,9,2,3.]],threshold:-1.7513500060886145e-003,right_val:-0.2317402958869934,left_val:0.0776235833764076},{features:[[13,8,2,3,-1.],[13,9,2,1,3.]],threshold:5.1342020742595196e-003,right_val:-0.5242084860801697,left_val:0.0303639695048332},{features:[[7,15,6,4,-1.],[7,15,3,2,2.],[10,17,3,2,2.]],threshold:9.4114318490028381e-003,right_val:0.3029138147830963,left_val:-0.0589945688843727},{features:[[10,15,6,3,-1.],[10,16,6,1,3.]],threshold:-1.0448819957673550e-003,right_val:0.1015603020787239,left_val:-0.1712469011545181},{features:[[3,2,2,6,-1.],[3,2,1,3,2.],[4,5,1,3,2.]],threshold:-6.3579198904335499e-003,right_val:-0.0506944507360458,left_val:0.3198671042919159},{features:[[10,15,3,5,-1.],[11,15,1,5,3.]],threshold:-6.3502117991447449e-003,right_val:0.0318000689148903,left_val:-0.5241327285766602},{features:[[12,9,5,2,-1.],[12,10,5,1,2.]],threshold:0.0122517598792911,right_val:-0.7942218780517578,left_val:0.0165596809238195},{features:[[4,11,10,1,-1.],[9,11,5,1,2.]],threshold:-0.0140007203444839,right_val:0.0246525593101978,left_val:-0.5444440245628357},{features:[[6,12,6,2,-1.],[6,12,3,1,2.],[9,13,3,1,2.]],threshold:1.9229920580983162e-003,right_val:0.2188820987939835,left_val:-0.0769449770450592},{features:[[6,11,1,3,-1.],[6,12,1,1,3.]],threshold:-3.4030789975076914e-003,right_val:-0.0580233298242092,left_val:0.3014340102672577},{features:[[3,12,8,4,-1.],[3,12,4,2,2.],[7,14,4,2,2.]],threshold:-0.0277286097407341,right_val:0.0300717204809189,left_val:-0.5670499801635742},{features:[[0,3,1,3,-1.],[0,4,1,1,3.]],threshold:1.4990579802542925e-004,right_val:-0.1698942929506302,left_val:0.0914046168327332},{features:[[10,12,2,1,-1.],[11,12,1,1,2.]],threshold:-1.4532960449287202e-005,right_val:-0.1398334950208664,left_val:0.1044266000390053},{features:[[3,10,3,6,-1.],[3,12,3,2,3.]],threshold:0.0283159501850605,right_val:-0.8120127916336060,left_val:0.0178121291100979},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:-1.7363600200042129e-003,right_val:-0.0763988196849823,left_val:0.1968863010406494},{features:[[8,7,4,6,-1.],[8,9,4,2,3.]],threshold:-0.0220814906060696,right_val:-0.0334458686411381,left_val:0.4449751079082489},{features:[[12,11,1,3,-1.],[12,12,1,1,3.]],threshold:1.2189210392534733e-003,right_val:-0.3779031038284302,left_val:0.0491547808051109},{features:[[12,11,2,3,-1.],[12,12,2,1,3.]],threshold:-5.4838892538100481e-004,right_val:0.0804464966058731,left_val:-0.2282302975654602},{features:[[6,10,2,2,-1.],[6,10,1,1,2.],[7,11,1,1,2.]],threshold:-9.3702552840113640e-004,right_val:-0.0653892010450363,left_val:0.2525896131992340},{features:[[3,10,9,6,-1.],[3,13,9,3,2.]],threshold:0.0124967200681567,right_val:-0.4046553075313568,left_val:0.0382158793509007},{features:[[4,8,7,10,-1.],[4,13,7,5,2.]],threshold:-0.0167643707245588,right_val:0.1211981028318405,left_val:-0.1450871974229813},{features:[[6,8,11,3,-1.],[6,9,11,1,3.]],threshold:5.6504327803850174e-003,right_val:0.2219441980123520,left_val:-0.0871391370892525},{features:[[6,5,1,14,-1.],[6,12,1,7,2.]],threshold:5.2610319107770920e-004,right_val:-0.2050247043371201,left_val:0.0872220769524574},{features:[[13,6,5,10,-1.],[13,11,5,5,2.]],threshold:1.5574200078845024e-003,right_val:0.0944352820515633,left_val:-0.1703668981790543},{features:[[2,0,13,15,-1.],[2,5,13,5,3.]],threshold:0.2560909092426300,right_val:-0.7405092120170593,left_val:0.0177901107817888},{features:[[6,7,2,2,-1.],[7,7,1,2,2.]],threshold:3.3561999443918467e-003,right_val:0.3757339119911194,left_val:-0.0426672697067261},{features:[[4,5,9,4,-1.],[7,5,3,4,3.]],threshold:0.0470729283988476,right_val:-0.6452227830886841,left_val:0.0320152193307877},{features:[[6,7,3,3,-1.],[7,7,1,3,3.]],threshold:-2.2168930154293776e-003,right_val:-0.0773726925253868,left_val:0.2075704038143158},{features:[[8,1,3,4,-1.],[9,1,1,4,3.]],threshold:5.0796428695321083e-003,right_val:-0.3772296905517578,left_val:0.0418293289840221},{features:[[8,11,7,2,-1.],[8,12,7,1,2.]],threshold:7.0120906457304955e-005,right_val:-0.1850626021623612,left_val:0.0810318887233734},{features:[[4,7,3,2,-1.],[5,7,1,2,3.]],threshold:-5.2204862004145980e-004,right_val:-0.1309031993150711,left_val:0.1252845972776413},{features:[[4,14,2,6,-1.],[4,14,1,3,2.],[5,17,1,3,2.]],threshold:-6.1609707772731781e-003,right_val:-0.0512521788477898,left_val:0.3117778897285461},{features:[[0,7,8,13,-1.],[4,7,4,13,2.]],threshold:-0.2842487990856171,right_val:0.0228110793977976,left_val:-0.7034050822257996},{features:[[6,3,4,9,-1.],[8,3,2,9,2.]],threshold:-0.0417467206716537,right_val:0.0166863501071930,left_val:-0.7891426086425781},{features:[[9,12,2,3,-1.],[9,13,2,1,3.]],threshold:-1.0051350109279156e-003,right_val:0.0618873983621597,left_val:-0.2218129932880402},{features:[[16,14,2,6,-1.],[16,14,1,3,2.],[17,17,1,3,2.]],threshold:-1.3900640187785029e-003,right_val:-0.0765824019908905,left_val:0.1879747956991196},{features:[[11,14,2,3,-1.],[11,15,2,1,3.]],threshold:-4.0118378819897771e-004,right_val:0.0868067592382431,left_val:-0.1729117035865784},{features:[[11,14,1,2,-1.],[11,15,1,1,2.]],threshold:-2.9202610676293261e-005,right_val:-0.1713646054267883,left_val:0.0923197790980339},{features:[[8,8,3,2,-1.],[8,9,3,1,2.]],threshold:-2.6532830670475960e-003,right_val:-0.0398264490067959,left_val:0.3942284882068634},{features:[[13,1,3,5,-1.],[14,1,1,5,3.]],threshold:-7.8933471813797951e-003,right_val:0.0366033613681793,left_val:-0.4332689046859741},{features:[[6,15,8,2,-1.],[6,15,4,1,2.],[10,16,4,1,2.]],threshold:8.7933447211980820e-003,right_val:0.4874078929424286,left_val:-0.0332059487700462},{features:[[13,2,3,4,-1.],[14,2,1,4,3.]],threshold:0.0120147597044706,right_val:-0.8159726858139038,left_val:0.0222442205995321},{features:[[1,8,1,6,-1.],[1,10,1,2,3.]],threshold:2.1147020161151886e-003,right_val:-0.2095922976732254,left_val:0.0649429336190224},{features:[[12,0,8,2,-1.],[12,0,4,1,2.],[16,1,4,1,2.]],threshold:-9.9916034378111362e-004,right_val:-0.1014946997165680,left_val:0.1540234982967377},{features:[[5,8,3,1,-1.],[6,8,1,1,3.]],threshold:-7.6499581336975098e-004,right_val:-0.0711996629834175,left_val:0.2023645043373108},{features:[[7,5,2,4,-1.],[8,5,1,4,2.]],threshold:-4.2193511035293341e-004,right_val:-0.1284545958042145,left_val:0.1152143031358719},{features:[[7,2,2,1,-1.],[8,2,1,1,2.]],threshold:-4.1548791341483593e-004,right_val:0.0703761428594589,left_val:-0.2116852998733521},{features:[[0,4,2,3,-1.],[0,5,2,1,3.]],threshold:1.5300279483199120e-003,right_val:-0.2226932048797607,left_val:0.0612637586891651},{features:[[3,17,2,2,-1.],[3,17,1,1,2.],[4,18,1,1,2.]],threshold:-2.6573969516903162e-003,right_val:-0.0382760204374790,left_val:0.3846232891082764},{features:[[6,0,12,9,-1.],[12,0,6,9,2.]],threshold:-0.2198860049247742,right_val:0.0280993897467852,left_val:-0.5154678225517273},{features:[[7,0,12,3,-1.],[11,0,4,3,3.]],threshold:-8.7377207819372416e-004,right_val:-0.1399068981409073,left_val:0.1014932990074158},{features:[[14,0,6,6,-1.],[14,0,3,3,2.],[17,3,3,3,2.]],threshold:7.5169820338487625e-003,right_val:0.2548643052577972,left_val:-0.0616716407239437},{features:[[15,2,1,2,-1.],[15,3,1,1,2.]],threshold:-1.3438290625344962e-004,right_val:0.0889388769865036,left_val:-0.1661804020404816}],threshold:-1.5384509563446045},{simpleClassifiers:[{features:[[8,2,1,6,-1.],[8,4,1,2,3.]],threshold:3.5007519181817770e-003,right_val:0.3362810909748077,left_val:-0.2825669050216675},{features:[[5,7,3,2,-1.],[6,7,1,2,3.]],threshold:4.1042729280889034e-003,right_val:0.3409196138381958,left_val:-0.1587762981653214},{features:[[6,7,4,6,-1.],[6,10,4,3,2.]],threshold:9.8724407143890858e-004,right_val:0.1177171990275383,left_val:-0.4609476029872894},{features:[[8,6,10,2,-1.],[13,6,5,2,2.]],threshold:-4.0168981067836285e-003,right_val:-0.3847660124301910,left_val:0.1399492025375366},{features:[[2,1,4,15,-1.],[4,1,2,15,2.]],threshold:-0.0427845008671284,right_val:-0.1167381033301354,left_val:0.3151994943618774},{features:[[5,9,3,6,-1.],[5,12,3,3,2.]],threshold:-5.6273501832038164e-004,right_val:-0.3359470069408417,left_val:0.0823151096701622},{features:[[12,11,2,1,-1.],[13,11,1,1,2.]],threshold:-4.3416650441940874e-005,right_val:-0.2506802976131439,left_val:0.1069177985191345},{features:[[6,4,6,2,-1.],[8,4,2,2,3.]],threshold:0.0153475701808929,right_val:-0.6461243033409119,left_val:9.7383828833699226e-003},{features:[[12,9,4,8,-1.],[12,13,4,4,2.]],threshold:1.8295480404049158e-003,right_val:-0.2963764071464539,left_val:0.0891644433140755},{features:[[15,8,2,4,-1.],[15,10,2,2,2.]],threshold:3.2098879455588758e-004,right_val:0.1147847995162010,left_val:-0.2313679009675980},{features:[[6,12,3,3,-1.],[6,13,3,1,3.]],threshold:1.0728760389611125e-003,right_val:0.1965368986129761,left_val:-0.1298218965530396},{features:[[6,12,2,3,-1.],[6,13,2,1,3.]],threshold:-4.9566011875867844e-003,right_val:-0.0769897773861885,left_val:0.3531399965286255},{features:[[5,10,4,6,-1.],[7,10,2,6,2.]],threshold:-1.6319400165230036e-003,right_val:0.1031965985894203,left_val:-0.2370198965072632},{features:[[7,8,2,9,-1.],[7,11,2,3,3.]],threshold:0.0198620501905680,right_val:-0.4095511138439179,left_val:0.0591875985264778},{features:[[5,13,4,3,-1.],[5,14,4,1,3.]],threshold:-9.5205483958125114e-003,right_val:-0.0576475784182549,left_val:0.3906176984310150},{features:[[11,12,2,2,-1.],[11,12,1,1,2.],[12,13,1,1,2.]],threshold:-1.0885810479521751e-003,right_val:0.0449610017240047,left_val:-0.5290268063545227},{features:[[5,13,5,3,-1.],[5,14,5,1,3.]],threshold:3.5348529927432537e-003,right_val:0.2444998025894165,left_val:-0.0927075371146202},{features:[[4,9,8,1,-1.],[8,9,4,1,2.]],threshold:5.7174800895154476e-003,right_val:-0.3987899124622345,left_val:0.0573061890900135},{features:[[12,0,8,6,-1.],[12,0,4,3,2.],[16,3,4,3,2.]],threshold:-1.4010589802637696e-003,right_val:-0.1952082067728043,left_val:0.1075778007507324},{features:[[11,12,1,2,-1.],[11,13,1,1,2.]],threshold:-2.2306239698082209e-003,right_val:0.0278753396123648,left_val:-0.6132832765579224},{features:[[8,4,3,3,-1.],[9,4,1,3,3.]],threshold:-5.0583072006702423e-003,right_val:0.0304825305938721,left_val:-0.5473973155021668},{features:[[8,0,7,15,-1.],[8,5,7,5,3.]],threshold:0.1372572034597397,right_val:-0.6081774830818176,left_val:0.0281623005867004},{features:[[3,0,8,4,-1.],[3,0,4,2,2.],[7,2,4,2,2.]],threshold:3.7828299682587385e-003,right_val:0.1338230967521668,left_val:-0.1264097988605499},{features:[[0,11,20,1,-1.],[10,11,10,1,2.]],threshold:-0.0106290299445391,right_val:0.0999545827507973,left_val:-0.1734337955713272},{features:[[3,14,3,2,-1.],[4,14,1,2,3.]],threshold:5.6623672135174274e-003,right_val:0.3294081985950470,left_val:-0.0524192303419113},{features:[[3,11,3,8,-1.],[4,11,1,8,3.]],threshold:-4.5901038683950901e-003,right_val:-0.0926810428500175,left_val:0.1878466010093689},{features:[[7,13,2,5,-1.],[8,13,1,5,2.]],threshold:7.1088741533458233e-003,right_val:-0.5796813964843750,left_val:0.0326054096221924},{features:[[14,4,3,3,-1.],[14,5,3,1,3.]],threshold:-1.9310249481350183e-003,right_val:0.0586587004363537,left_val:-0.2870723903179169},{features:[[5,11,2,3,-1.],[5,12,2,1,3.]],threshold:3.5559700336307287e-003,right_val:0.3023276031017304,left_val:-0.0628413930535316},{features:[[6,12,1,2,-1.],[6,13,1,1,2.]],threshold:2.1007249597460032e-004,right_val:0.2072288990020752,left_val:-0.1202944964170456},{features:[[5,13,3,1,-1.],[6,13,1,1,3.]],threshold:3.0181880574673414e-003,right_val:-0.4556720852851868,left_val:0.0427644215524197},{features:[[12,11,1,3,-1.],[12,12,1,1,3.]],threshold:-2.0919379312545061e-003,right_val:0.0247723907232285,left_val:-0.5806704163551331},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:4.9380292184650898e-003,right_val:0.2671546041965485,left_val:-0.0678257793188095},{features:[[5,9,1,3,-1.],[5,10,1,1,3.]],threshold:1.0227119782939553e-003,right_val:0.1713601052761078,left_val:-0.1105057969689369},{features:[[1,9,12,9,-1.],[1,12,12,3,3.]],threshold:-0.0912167131900787,right_val:0.0311765093356371,left_val:-0.5561740994453430},{features:[[12,14,3,3,-1.],[12,15,3,1,3.]],threshold:1.9377609714865685e-003,right_val:-0.3340210020542145,left_val:0.0524700693786144},{features:[[10,14,5,3,-1.],[10,15,5,1,3.]],threshold:-4.5235231518745422e-003,right_val:0.0448835305869579,left_val:-0.3862803876399994},{features:[[5,11,3,3,-1.],[5,12,3,1,3.]],threshold:1.1070469627156854e-003,right_val:0.1769437044858933,left_val:-0.0946480110287666},{features:[[5,11,2,6,-1.],[5,14,2,3,2.]],threshold:-0.0145228896290064,right_val:0.0406540706753731,left_val:-0.4485464096069336},{features:[[6,5,2,14,-1.],[6,12,2,7,2.]],threshold:0.0208956394344568,right_val:-0.4431704878807068,left_val:0.0359883904457092},{features:[[2,8,5,2,-1.],[2,9,5,1,2.]],threshold:7.3273790803796146e-006,right_val:0.0881317630410194,left_val:-0.1973697990179062},{features:[[10,14,1,2,-1.],[10,15,1,1,2.]],threshold:-1.4750339687452652e-005,right_val:-0.1938769966363907,left_val:0.0882030129432678},{features:[[7,14,4,6,-1.],[7,16,4,2,3.]],threshold:0.0101600196212530,right_val:0.2772558927536011,left_val:-0.0736835226416588},{features:[[8,12,3,1,-1.],[9,12,1,1,3.]],threshold:1.4658429790870287e-005,right_val:0.1116539016366005,left_val:-0.1351404041051865},{features:[[4,8,3,1,-1.],[5,8,1,1,3.]],threshold:2.9789519030600786e-003,right_val:0.2903389930725098,left_val:-0.0563563890755177},{features:[[3,6,3,4,-1.],[4,6,1,4,3.]],threshold:6.7907930351793766e-003,right_val:0.2965075075626373,left_val:-0.0554680600762367},{features:[[4,4,3,8,-1.],[4,8,3,4,2.]],threshold:0.0357466191053391,right_val:-0.3794310092926025,left_val:0.0442322716116905},{features:[[12,5,2,2,-1.],[12,6,2,1,2.]],threshold:-8.6023868061602116e-004,right_val:0.0639833286404610,left_val:-0.2552424073219299},{features:[[16,10,2,2,-1.],[16,10,1,1,2.],[17,11,1,1,2.]],threshold:-3.2749359961599112e-003,right_val:-0.0308024100959301,left_val:0.5164237022399902},{features:[[0,0,2,1,-1.],[1,0,1,1,2.]],threshold:-1.4287419617176056e-004,right_val:0.0902005508542061,left_val:-0.1701482981443405},{features:[[7,0,5,8,-1.],[7,4,5,4,2.]],threshold:-0.0592520609498024,right_val:-0.0348029993474483,left_val:0.4478740096092224},{features:[[4,5,8,10,-1.],[4,5,4,5,2.],[8,10,4,5,2.]],threshold:0.0491697415709496,right_val:-0.3933770060539246,left_val:0.0437972284853458},{features:[[7,5,3,3,-1.],[7,6,3,1,3.]],threshold:2.4047859478741884e-003,right_val:0.1759777069091797,left_val:-0.0859821587800980},{features:[[10,6,10,14,-1.],[10,13,10,7,2.]],threshold:-0.0885699987411499,right_val:0.0567525215446949,left_val:-0.2969442903995514},{features:[[8,6,2,3,-1.],[8,7,2,1,3.]],threshold:3.5266599152237177e-003,right_val:0.3235999047756195,left_val:-0.0541605390608311},{features:[[13,10,1,4,-1.],[13,12,1,2,2.]],threshold:-1.4674359590571839e-005,right_val:-0.1719594001770020,left_val:0.1009529978036881},{features:[[3,9,12,4,-1.],[3,9,6,2,2.],[9,11,6,2,2.]],threshold:-0.0106728803366423,right_val:0.0396874994039536,left_val:-0.3910335898399353},{features:[[7,14,3,6,-1.],[7,16,3,2,3.]],threshold:-0.0131775699555874,right_val:-0.0555244088172913,left_val:0.2746025025844574},{features:[[10,10,3,2,-1.],[11,10,1,2,3.]],threshold:-2.0427990239113569e-003,right_val:0.0511519387364388,left_val:-0.3261694014072418},{features:[[3,4,10,4,-1.],[3,4,5,2,2.],[8,6,5,2,2.]],threshold:0.0254307091236115,right_val:-0.3912068009376526,left_val:0.0344121493399143},{features:[[4,10,4,3,-1.],[4,11,4,1,3.]],threshold:6.6575622186064720e-003,right_val:0.2549391090869904,left_val:-0.0621246397495270},{features:[[5,3,6,4,-1.],[5,3,3,2,2.],[8,5,3,2,2.]],threshold:-0.0249226298183203,right_val:0.0205200500786304,left_val:-0.7561764717102051},{features:[[6,8,6,10,-1.],[9,8,3,10,2.]],threshold:0.0648694783449173,right_val:-0.8518260717391968,left_val:0.0135357603430748},{features:[[10,15,6,3,-1.],[10,16,6,1,3.]],threshold:-1.9129139836877584e-003,right_val:0.0688096135854721,left_val:-0.2060957998037338},{features:[[3,4,3,7,-1.],[4,4,1,7,3.]],threshold:-2.7280850335955620e-003,right_val:-0.1130895987153053,left_val:0.1385322064161301},{features:[[3,3,3,11,-1.],[4,3,1,11,3.]],threshold:3.9647668600082397e-003,right_val:0.1886792927980423,left_val:-0.0859800502657890},{features:[[7,14,5,3,-1.],[7,15,5,1,3.]],threshold:8.6866566562093794e-005,right_val:0.1154389008879662,left_val:-0.1340935975313187},{features:[[17,11,2,2,-1.],[17,11,1,1,2.],[18,12,1,1,2.]],threshold:-1.0680439881980419e-003,right_val:-0.0595842301845551,left_val:0.2404395937919617},{features:[[9,0,3,4,-1.],[10,0,1,4,3.]],threshold:6.4973197877407074e-003,right_val:-0.4382789134979248,left_val:0.0357217416167259},{features:[[11,1,3,1,-1.],[12,1,1,1,3.]],threshold:3.3825050923041999e-004,right_val:-0.1924086958169937,left_val:0.0751887708902359},{features:[[17,11,2,2,-1.],[17,11,1,1,2.],[18,12,1,1,2.]],threshold:2.4638089817017317e-003,right_val:0.4139853119850159,left_val:-0.0381082482635975},{features:[[0,10,2,1,-1.],[1,10,1,1,2.]],threshold:7.1629788726568222e-004,right_val:-0.2312994003295898,left_val:0.0676755607128143},{features:[[17,0,2,8,-1.],[17,0,1,4,2.],[18,4,1,4,2.]],threshold:-1.1354340240359306e-003,right_val:-0.0982241407036781,left_val:0.1641391962766647},{features:[[6,7,6,2,-1.],[8,7,2,2,3.]],threshold:-4.6024488983675838e-004,right_val:-0.1819128990173340,left_val:0.0788791030645370},{features:[[5,7,6,9,-1.],[8,7,3,9,2.]],threshold:-8.1474315375089645e-003,right_val:0.0776966735720634,left_val:-0.1862782984972000},{features:[[6,8,9,3,-1.],[9,8,3,3,3.]],threshold:-0.0338823311030865,right_val:-0.0401093512773514,left_val:0.4181846082210541},{features:[[11,7,6,4,-1.],[13,7,2,4,3.]],threshold:-4.3395790271461010e-003,right_val:-0.0835095569491386,left_val:0.1896183937788010},{features:[[8,5,2,2,-1.],[9,5,1,2,2.]],threshold:2.4691419675946236e-003,right_val:-0.3828414082527161,left_val:0.0437569916248322},{features:[[15,3,4,10,-1.],[15,8,4,5,2.]],threshold:0.0876881778240204,right_val:-0.5999131798744202,left_val:0.0234664306044579},{features:[[9,2,1,2,-1.],[9,3,1,1,2.]],threshold:7.1277258939517196e-006,right_val:0.0941810384392738,left_val:-0.1457494944334030},{features:[[7,15,8,2,-1.],[7,15,4,1,2.],[11,16,4,1,2.]],threshold:-2.2863550111651421e-003,right_val:-0.0626305416226387,left_val:0.2217684984207153},{features:[[6,5,2,9,-1.],[7,5,1,9,2.]],threshold:-1.4718780221301131e-005,right_val:-0.1340776979923248,left_val:0.1121044009923935},{features:[[6,6,2,4,-1.],[7,6,1,4,2.]],threshold:2.9124629218131304e-003,right_val:0.2692106962203980,left_val:-0.0611139312386513},{features:[[10,15,2,4,-1.],[11,15,1,4,2.]],threshold:-7.2532321792095900e-004,right_val:0.0902047231793404,left_val:-0.1831759065389633},{features:[[9,17,3,2,-1.],[10,17,1,2,3.]],threshold:-1.7109309555962682e-003,right_val:0.0568658001720905,left_val:-0.2915098071098328},{features:[[12,9,7,4,-1.],[12,11,7,2,2.]],threshold:0.0350501388311386,right_val:-0.5992606878280640,left_val:0.0242599993944168},{features:[[5,9,9,3,-1.],[8,9,3,3,3.]],threshold:0.0251192599534988,right_val:0.3307805955410004,left_val:-0.0464993901550770},{features:[[5,8,6,5,-1.],[8,8,3,5,2.]],threshold:0.0139249796047807,right_val:-0.3243145942687988,left_val:0.0543940998613834},{features:[[7,16,4,3,-1.],[7,17,4,1,3.]],threshold:1.2507860083132982e-003,right_val:0.1608397960662842,left_val:-0.0862751007080078},{features:[[15,4,4,3,-1.],[15,5,4,1,3.]],threshold:3.2347340602427721e-003,right_val:-0.3341436982154846,left_val:0.0402146689593792},{features:[[16,10,2,2,-1.],[16,10,1,1,2.],[17,11,1,1,2.]],threshold:2.3993090726435184e-003,right_val:0.4033296108245850,left_val:-0.0360994488000870},{features:[[5,6,6,9,-1.],[8,6,3,9,2.]],threshold:-0.0644688606262207,right_val:0.0171044394373894,left_val:-0.9235547184944153},{features:[[10,0,10,6,-1.],[10,0,5,3,2.],[15,3,5,3,2.]],threshold:0.0269838795065880,right_val:0.3809542059898377,left_val:-0.0413239710032940},{features:[[13,14,1,2,-1.],[13,15,1,1,2.]],threshold:-1.4244250451156404e-005,right_val:-0.1385474950075150,left_val:0.0984536781907082},{features:[[10,4,3,1,-1.],[11,4,1,1,3.]],threshold:3.6304299719631672e-003,right_val:-0.5774018764495850,left_val:0.0225328207015991},{features:[[6,16,1,3,-1.],[6,17,1,1,3.]],threshold:-2.7509450446814299e-003,right_val:-0.0490126796066761,left_val:0.2865664958953857},{features:[[11,13,4,3,-1.],[11,14,4,1,3.]],threshold:3.4084690269082785e-003,right_val:-0.3518727123737335,left_val:0.0385661609470844},{features:[[14,10,6,6,-1.],[14,10,3,3,2.],[17,13,3,3,2.]],threshold:-2.0442469976842403e-003,right_val:-0.0812809988856316,left_val:0.1549983024597168},{features:[[1,1,1,2,-1.],[1,2,1,1,2.]],threshold:-3.3763761166483164e-004,right_val:0.0734975412487984,left_val:-0.1896982043981552},{features:[[6,15,1,3,-1.],[6,16,1,1,3.]],threshold:-1.9649739842861891e-003,right_val:-0.0536984503269196,left_val:0.2403029948472977},{features:[[7,15,1,3,-1.],[7,16,1,1,3.]],threshold:2.6115038781426847e-004,right_val:0.1455180048942566,left_val:-0.1058589965105057},{features:[[8,16,3,2,-1.],[9,16,1,2,3.]],threshold:-2.4496200494468212e-003,right_val:0.0439496412873268,left_val:-0.3351194858551025},{features:[[5,8,3,9,-1.],[6,8,1,9,3.]],threshold:0.0257911700755358,right_val:-0.6313567757606506,left_val:0.0194439701735973},{features:[[3,3,2,10,-1.],[3,3,1,5,2.],[4,8,1,5,2.]],threshold:-1.7996380338445306e-003,right_val:-0.0896696224808693,left_val:0.1562016010284424},{features:[[3,6,3,1,-1.],[4,6,1,1,3.]],threshold:-5.5190739221870899e-003,right_val:-0.0393082201480865,left_val:0.3842960000038147},{features:[[2,0,2,1,-1.],[3,0,1,1,2.]],threshold:9.3076081248000264e-004,right_val:-0.2748290002346039,left_val:0.0531460605561733},{features:[[7,13,2,3,-1.],[7,14,2,1,3.]],threshold:2.7754770126193762e-003,right_val:0.2487884014844894,left_val:-0.0534882806241512},{features:[[7,9,1,9,-1.],[7,12,1,3,3.]],threshold:1.9387940410524607e-003,right_val:-0.1943241953849793,left_val:0.0751778632402420},{features:[[7,8,1,9,-1.],[7,11,1,3,3.]],threshold:-4.0069930255413055e-003,right_val:0.0620003603398800,left_val:-0.2733064889907837},{features:[[15,7,3,10,-1.],[16,7,1,10,3.]],threshold:7.4540930800139904e-003,right_val:0.2705546915531158,left_val:-0.0509779490530491},{features:[[14,7,6,10,-1.],[16,7,2,10,3.]],threshold:-1.6338729765266180e-003,right_val:-0.1482111066579819,left_val:0.1092085018754005},{features:[[2,12,18,6,-1.],[2,14,18,2,3.]],threshold:-0.1162687018513680,right_val:0.0145114399492741,left_val:-0.9430736899375916},{features:[[0,9,12,1,-1.],[4,9,4,1,3.]],threshold:-0.0120513103902340,right_val:0.0377263091504574,left_val:-0.3096499145030975},{features:[[1,7,3,6,-1.],[2,7,1,6,3.]],threshold:0.0155920004472137,right_val:0.3670614063739777,left_val:-0.0385263487696648},{features:[[5,6,8,1,-1.],[9,6,4,1,2.]],threshold:-1.1198739521205425e-003,right_val:0.0960570424795151,left_val:-0.1464426070451737},{features:[[10,14,2,1,-1.],[11,14,1,1,2.]],threshold:-1.4623399692936800e-005,right_val:-0.1339446008205414,left_val:0.1064181998372078},{features:[[14,8,6,10,-1.],[16,8,2,10,3.]],threshold:-0.1031963974237442,right_val:0.0188917703926563,left_val:-0.7019655704498291}],threshold:-1.5079799890518188},{simpleClassifiers:[{features:[[10,5,8,7,-1.],[14,5,4,7,2.]],threshold:-0.0374694317579269,right_val:-0.3520519137382507,left_val:0.2907924950122833},{features:[[8,5,8,4,-1.],[8,5,4,2,2.],[12,7,4,2,2.]],threshold:4.0861819870769978e-003,right_val:0.1844502985477448,left_val:-0.2909860014915466},{features:[[11,11,1,8,-1.],[11,15,1,4,2.]],threshold:-9.2446897178888321e-004,right_val:-0.4106451869010925,left_val:0.1108753010630608},{features:[[5,6,2,4,-1.],[6,6,1,4,2.]],threshold:8.5803697584196925e-004,right_val:0.1546505987644196,left_val:-0.2212982028722763},{features:[[7,8,2,2,-1.],[7,9,2,1,2.]],threshold:2.3659599537495524e-004,right_val:0.1118369027972221,left_val:-0.3218517899513245},{features:[[0,2,8,11,-1.],[4,2,4,11,2.]],threshold:-0.0350210294127464,right_val:-0.1415652930736542,left_val:0.2272146046161652},{features:[[8,6,8,8,-1.],[8,10,8,4,2.]],threshold:-3.4688229206949472e-003,right_val:0.0437915287911892,left_val:-0.4024738073348999},{features:[[4,4,2,6,-1.],[5,4,1,6,2.]],threshold:5.0372090190649033e-003,right_val:0.2270132005214691,left_val:-0.1238728016614914},{features:[[13,12,1,2,-1.],[13,13,1,1,2.]],threshold:-1.1929610045626760e-003,right_val:0.0525685101747513,left_val:-0.4869248867034912},{features:[[3,8,3,2,-1.],[4,8,1,2,3.]],threshold:9.5561221241950989e-003,right_val:0.5114902853965759,left_val:-0.0462040007114410},{features:[[13,12,1,3,-1.],[13,13,1,1,3.]],threshold:1.1109219631180167e-003,right_val:-0.4527831077575684,left_val:0.0454968810081482},{features:[[9,19,4,1,-1.],[11,19,2,1,2.]],threshold:5.7835641200654209e-005,right_val:0.1327690929174423,left_val:-0.1564171016216278},{features:[[15,4,2,3,-1.],[15,5,2,1,3.]],threshold:-9.4595848349854350e-004,right_val:0.0645495578646660,left_val:-0.2847130894660950},{features:[[5,11,11,4,-1.],[5,13,11,2,2.]],threshold:8.8587577920407057e-004,right_val:-0.3250587880611420,left_val:0.0659902766346931},{features:[[7,12,1,3,-1.],[7,13,1,1,3.]],threshold:2.1180589683353901e-003,right_val:0.3313274085521698,left_val:-0.0718209072947502},{features:[[6,12,4,4,-1.],[6,14,4,2,2.]],threshold:-0.0160044692456722,right_val:0.0357587598264217,left_val:-0.4926666021347046},{features:[[7,11,1,3,-1.],[7,12,1,1,3.]],threshold:1.4956319937482476e-003,right_val:0.2761321067810059,left_val:-0.0830955430865288},{features:[[9,10,3,3,-1.],[10,10,1,3,3.]],threshold:7.5204619206488132e-003,right_val:-0.6550794839859009,left_val:0.0269876793026924},{features:[[10,12,2,1,-1.],[11,12,1,1,2.]],threshold:-1.4567610378435347e-005,right_val:-0.1827971041202545,left_val:0.1118192970752716},{features:[[7,1,12,16,-1.],[7,1,6,8,2.],[13,9,6,8,2.]],threshold:1.5564640052616596e-003,right_val:0.1127140000462532,left_val:-0.1568105965852737},{features:[[10,5,8,7,-1.],[14,5,4,7,2.]],threshold:-0.0365227982401848,right_val:0.1302226930856705,left_val:-0.1425486952066422},{features:[[18,8,2,10,-1.],[18,8,1,5,2.],[19,13,1,5,2.]],threshold:9.4677843153476715e-003,right_val:0.3652131855487824,left_val:-0.0434319004416466},{features:[[12,11,2,2,-1.],[13,11,1,2,2.]],threshold:-1.4508370441035368e-005,right_val:-0.2037386000156403,left_val:0.0840565115213394},{features:[[3,15,3,1,-1.],[4,15,1,1,3.]],threshold:9.7979931160807610e-004,right_val:0.1976581066846848,left_val:-0.0925702825188637},{features:[[5,14,2,1,-1.],[6,14,1,1,2.]],threshold:1.4909260244166944e-005,right_val:0.1254208981990814,left_val:-0.1416793018579483},{features:[[11,9,1,2,-1.],[11,10,1,1,2.]],threshold:-2.1510709484573454e-004,right_val:-0.0809787511825562,left_val:0.2015448063611984},{features:[[10,12,3,1,-1.],[11,12,1,1,3.]],threshold:-1.3552160235121846e-003,right_val:0.0451370999217033,left_val:-0.3964821100234985},{features:[[5,9,7,2,-1.],[5,10,7,1,2.]],threshold:8.4163509309291840e-003,right_val:0.2232768982648850,left_val:-0.0759626403450966},{features:[[11,0,2,1,-1.],[12,0,1,1,2.]],threshold:-3.0116800917312503e-004,right_val:0.0859178826212883,left_val:-0.1983765065670013},{features:[[11,0,2,2,-1.],[12,0,1,2,2.]],threshold:9.7665376961231232e-004,right_val:-0.3131501078605652,left_val:0.0610607191920280},{features:[[5,0,2,2,-1.],[5,0,1,1,2.],[6,1,1,1,2.]],threshold:1.9718110561370850e-003,right_val:0.3293100893497467,left_val:-0.0541248805820942},{features:[[8,3,12,6,-1.],[8,5,12,2,3.]],threshold:0.0642203763127327,right_val:-0.5833930969238281,left_val:0.0310349203646183},{features:[[17,0,3,12,-1.],[18,0,1,12,3.]],threshold:-4.8852190375328064e-003,right_val:-0.0854924321174622,left_val:0.1866690963506699},{features:[[11,1,2,1,-1.],[12,1,1,1,2.]],threshold:-2.5309080956503749e-004,right_val:0.0924723818898201,left_val:-0.1657499969005585},{features:[[5,5,2,1,-1.],[6,5,1,1,2.]],threshold:2.9818940674886107e-005,right_val:0.1015437990427017,left_val:-0.1419505029916763},{features:[[7,14,6,6,-1.],[7,14,3,3,2.],[10,17,3,3,2.]],threshold:-0.0102887600660324,right_val:-0.0592866614460945,left_val:0.2513369917869568},{features:[[11,10,1,2,-1.],[11,11,1,1,2.]],threshold:-2.9165179512347095e-005,right_val:-0.1173385009169579,left_val:0.1295766979455948},{features:[[3,9,12,4,-1.],[3,9,6,2,2.],[9,11,6,2,2.]],threshold:-2.0741471089422703e-003,right_val:0.0667929425835609,left_val:-0.2263393998146057},{features:[[5,10,1,2,-1.],[5,11,1,1,2.]],threshold:1.1343799997121096e-003,right_val:0.2795625030994415,left_val:-0.0639137029647827},{features:[[6,10,2,1,-1.],[7,10,1,1,2.]],threshold:-1.5007710317149758e-005,right_val:-0.1170506030321121,left_val:0.1345475018024445},{features:[[8,16,3,2,-1.],[9,16,1,2,3.]],threshold:4.9826782196760178e-003,right_val:-0.6001067161560059,left_val:0.0265050102025270},{features:[[5,10,1,3,-1.],[5,11,1,1,3.]],threshold:-3.4576859325170517e-003,right_val:-0.0541551709175110,left_val:0.3128620982170105},{features:[[7,15,3,2,-1.],[8,15,1,2,3.]],threshold:5.4344828240573406e-003,right_val:-0.5682408213615418,left_val:0.0287027508020401},{features:[[8,15,2,1,-1.],[9,15,1,1,2.]],threshold:-1.4558049770130310e-005,right_val:-0.1312769949436188,left_val:0.1075678020715714},{features:[[5,10,4,3,-1.],[5,11,4,1,3.]],threshold:1.5321969985961914e-003,right_val:0.1402143985033035,left_val:-0.1191162019968033},{features:[[6,7,4,12,-1.],[8,7,2,12,2.]],threshold:-0.0224494300782681,right_val:0.0493732206523418,left_val:-0.3337636888027191},{features:[[5,6,6,7,-1.],[8,6,3,7,2.]],threshold:0.0119230300188065,right_val:-0.2474693059921265,left_val:0.0635587424039841},{features:[[8,4,6,11,-1.],[11,4,3,11,2.]],threshold:0.0206859502941370,right_val:0.2636730074882507,left_val:-0.0619051195681095},{features:[[7,9,6,3,-1.],[9,9,2,3,3.]],threshold:5.0756777636706829e-004,right_val:0.1450580060482025,left_val:-0.1252831965684891},{features:[[0,5,1,2,-1.],[0,6,1,1,2.]],threshold:9.2508539091795683e-004,right_val:-0.2620438039302826,left_val:0.0590095892548561},{features:[[6,8,3,1,-1.],[7,8,1,1,3.]],threshold:8.6694798665121198e-004,right_val:0.1779575049877167,left_val:-0.0889427214860916},{features:[[12,1,2,2,-1.],[13,1,1,2,2.]],threshold:4.7340960009023547e-004,right_val:-0.2188030034303665,left_val:0.0681376308202744},{features:[[4,4,10,12,-1.],[4,4,5,6,2.],[9,10,5,6,2.]],threshold:0.0903666019439697,right_val:-0.6573687195777893,left_val:0.0185164697468281},{features:[[5,18,2,2,-1.],[5,18,1,1,2.],[6,19,1,1,2.]],threshold:2.0585930906236172e-003,right_val:0.3287942111492157,left_val:-0.0455689989030361},{features:[[6,3,3,3,-1.],[7,3,1,3,3.]],threshold:-4.0761628188192844e-003,right_val:0.0409034900367260,left_val:-0.3589670956134796},{features:[[5,12,2,3,-1.],[5,13,2,1,3.]],threshold:3.2309619709849358e-003,right_val:0.2551850974559784,left_val:-0.0587724708020687},{features:[[11,15,2,3,-1.],[11,16,2,1,3.]],threshold:2.0424150861799717e-003,right_val:-0.3339330852031708,left_val:0.0432094410061836},{features:[[11,15,1,3,-1.],[11,16,1,1,3.]],threshold:-2.8341729193925858e-004,right_val:0.0815553367137909,left_val:-0.1668505966663361},{features:[[6,7,3,2,-1.],[7,7,1,2,3.]],threshold:-1.0859699686989188e-003,right_val:-0.0921712368726730,left_val:0.1780744940042496},{features:[[3,11,14,1,-1.],[10,11,7,1,2.]],threshold:-0.0200895201414824,right_val:0.0446077510714531,left_val:-0.3523639142513275},{features:[[5,7,3,1,-1.],[6,7,1,1,3.]],threshold:-1.8073120154440403e-003,right_val:-0.0520475804805756,left_val:0.3022094070911408},{features:[[14,9,3,3,-1.],[14,10,3,1,3.]],threshold:0.0103371497243643,right_val:-0.6883816123008728,left_val:0.0247871391475201},{features:[[4,17,2,2,-1.],[4,17,1,1,2.],[5,18,1,1,2.]],threshold:-2.4023749865591526e-003,right_val:-0.0461994893848896,left_val:0.3317334055900574},{features:[[15,16,2,2,-1.],[15,17,2,1,2.]],threshold:-5.8347097365185618e-004,right_val:0.0773477926850319,left_val:-0.1885682046413422},{features:[[18,12,2,2,-1.],[18,12,1,1,2.],[19,13,1,1,2.]],threshold:-2.1759211085736752e-003,right_val:-0.0408558696508408,left_val:0.3306734859943390},{features:[[5,11,4,3,-1.],[7,11,2,3,2.]],threshold:-1.1984390439465642e-003,right_val:0.0685345828533173,left_val:-0.2158033996820450},{features:[[9,7,2,3,-1.],[9,8,2,1,3.]],threshold:1.4474330237135291e-003,right_val:0.2336236983537674,left_val:-0.0580749288201332},{features:[[18,6,2,2,-1.],[18,7,2,1,2.]],threshold:5.1625841297209263e-004,right_val:-0.2095647007226944,left_val:0.0756555795669556},{features:[[18,6,2,2,-1.],[18,7,2,1,2.]],threshold:-1.4388939598575234e-003,right_val:0.0581599995493889,left_val:-0.3094814121723175},{features:[[4,5,2,6,-1.],[4,7,2,2,3.]],threshold:-1.7495449865236878e-003,right_val:-0.1571523994207382,left_val:0.1023629009723663},{features:[[3,11,6,4,-1.],[3,11,3,2,2.],[6,13,3,2,2.]],threshold:0.0167749393731356,right_val:-0.5859457254409790,left_val:0.0237116999924183},{features:[[1,10,3,3,-1.],[2,10,1,3,3.]],threshold:-8.3265192806720734e-003,right_val:-0.0488075613975525,left_val:0.3094334900379181},{features:[[15,0,4,4,-1.],[15,0,2,2,2.],[17,2,2,2,2.]],threshold:-4.4853150029666722e-005,right_val:-0.1308971047401428,left_val:0.1061550974845886},{features:[[5,6,4,10,-1.],[5,11,4,5,2.]],threshold:5.9908269904553890e-003,right_val:-0.1681780964136124,left_val:0.0801688730716705},{features:[[7,13,1,3,-1.],[7,14,1,1,3.]],threshold:1.4110070187598467e-003,right_val:0.2204508036375046,left_val:-0.0699415877461433},{features:[[3,10,16,4,-1.],[3,10,8,2,2.],[11,12,8,2,2.]],threshold:0.0412059985101223,right_val:-0.4417685866355896,left_val:0.0317214317619801},{features:[[7,14,1,3,-1.],[7,15,1,1,3.]],threshold:1.5044870087876916e-004,right_val:0.1124142035841942,left_val:-0.1215230002999306},{features:[[5,14,3,3,-1.],[5,15,3,1,3.]],threshold:-4.8399530351161957e-003,right_val:-0.0516066104173660,left_val:0.2824499905109406},{features:[[9,9,3,8,-1.],[10,9,1,8,3.]],threshold:-1.0831269901245832e-003,right_val:0.0837310478091240,left_val:-0.1697801947593689},{features:[[6,0,7,4,-1.],[6,2,7,2,2.]],threshold:-0.0134832002222538,right_val:-0.0522285997867584,left_val:0.2826932072639465},{features:[[8,0,1,4,-1.],[8,2,1,2,2.]],threshold:5.9854640858247876e-004,right_val:0.1228089034557343,left_val:-0.1374914944171906},{features:[[1,4,1,6,-1.],[1,6,1,2,3.]],threshold:-6.4943352481350303e-004,right_val:0.0881716907024384,left_val:-0.1693159937858582},{features:[[0,2,15,3,-1.],[5,2,5,3,3.]],threshold:-6.3191158697009087e-003,right_val:-0.0863000601530075,left_val:0.1624546051025391},{features:[[0,8,2,2,-1.],[0,9,2,1,2.]],threshold:-2.5179239455610514e-003,right_val:0.0526881888508797,left_val:-0.3185339868068695},{features:[[3,10,6,4,-1.],[5,10,2,4,3.]],threshold:-0.0469249710440636,right_val:0.0205050799995661,left_val:-0.6577314138412476},{features:[[8,5,3,1,-1.],[9,5,1,1,3.]],threshold:-9.6446421230211854e-004,right_val:0.0454412996768951,left_val:-0.2725659906864166},{features:[[15,11,2,2,-1.],[15,11,1,1,2.],[16,12,1,1,2.]],threshold:1.5073099639266729e-003,right_val:0.2848648130893707,left_val:-0.0504794605076313},{features:[[4,11,6,2,-1.],[7,11,3,2,2.]],threshold:0.0161499306559563,right_val:-0.3614957034587860,left_val:0.0387690588831902},{features:[[6,8,6,4,-1.],[8,8,2,4,3.]],threshold:0.0191265102475882,right_val:0.4757354855537415,left_val:-0.0362336412072182},{features:[[6,5,6,6,-1.],[8,5,2,6,3.]],threshold:-1.2546279467642307e-003,right_val:-0.1555414050817490,left_val:0.1100990995764732},{features:[[14,12,2,3,-1.],[15,12,1,3,2.]],threshold:-1.4754529729543719e-005,right_val:-0.1394743025302887,left_val:0.0965491533279419},{features:[[11,5,3,7,-1.],[12,5,1,7,3.]],threshold:0.0156801696866751,right_val:-0.5771318078041077,left_val:0.0232145208865404},{features:[[7,16,8,4,-1.],[7,16,4,2,2.],[11,18,4,2,2.]],threshold:0.0122933601960540,right_val:0.2395139038562775,left_val:-0.0578098893165588},{features:[[5,16,12,4,-1.],[5,16,6,2,2.],[11,18,6,2,2.]],threshold:-9.6596255898475647e-003,right_val:-0.0658235326409340,left_val:0.2409874051809311},{features:[[10,17,6,3,-1.],[10,18,6,1,3.]],threshold:4.4940081425011158e-003,right_val:-0.3147468864917755,left_val:0.0545324906706810},{features:[[6,8,2,3,-1.],[6,9,2,1,3.]],threshold:0.0114805800840259,right_val:-0.7472283244132996,left_val:0.0174192991107702},{features:[[0,0,20,18,-1.],[10,0,10,18,2.]],threshold:-0.6549963951110840,right_val:0.0261871200054884,left_val:-0.4548397064208984},{features:[[8,0,6,5,-1.],[11,0,3,5,2.]],threshold:-1.5746919962111861e-004,right_val:-0.1824031025171280,left_val:0.0843414589762688},{features:[[13,5,4,2,-1.],[13,5,2,1,2.],[15,6,2,1,2.]],threshold:-1.0111900046467781e-003,right_val:0.0676762163639069,left_val:-0.2086289972066879},{features:[[10,4,4,11,-1.],[12,4,2,11,2.]],threshold:0.0184888392686844,right_val:0.4134215116500855,left_val:-0.0354996211826801},{features:[[5,10,3,1,-1.],[6,10,1,1,3.]],threshold:-3.8888910785317421e-004,right_val:-0.0862994790077209,left_val:0.1569246053695679},{features:[[17,4,2,3,-1.],[17,5,2,1,3.]],threshold:-4.5315301977097988e-003,right_val:0.0341036207973957,left_val:-0.4391221106052399},{features:[[6,13,8,6,-1.],[6,13,4,3,2.],[10,16,4,3,2.]],threshold:0.0335360206663609,right_val:0.4709657132625580,left_val:-0.0322315283119679},{features:[[17,5,3,10,-1.],[18,5,1,10,3.]],threshold:2.0854349713772535e-003,right_val:0.1737388074398041,left_val:-0.0760010108351707},{features:[[13,11,2,2,-1.],[14,11,1,2,2.]],threshold:-1.4060589819564484e-005,right_val:-0.1634878069162369,left_val:0.0859609991312027},{features:[[5,9,4,9,-1.],[5,12,4,3,3.]],threshold:0.0429956801235676,right_val:-0.5927429199218750,left_val:0.0220331195741892},{features:[[5,11,2,3,-1.],[5,12,2,1,3.]],threshold:2.4928380735218525e-003,right_val:0.2139886021614075,left_val:-0.0630207732319832},{features:[[15,15,2,2,-1.],[15,15,1,1,2.],[16,16,1,1,2.]],threshold:1.4520809600071516e-005,right_val:0.1199731975793839,left_val:-0.1121812984347343},{features:[[6,13,6,5,-1.],[8,13,2,5,3.]],threshold:0.0211523603647947,right_val:-0.4460080862045288,left_val:0.0302707105875015},{features:[[9,7,2,8,-1.],[9,7,1,4,2.],[10,11,1,4,2.]],threshold:2.1028789342381060e-004,right_val:-0.1720902025699616,left_val:0.0803844183683395},{features:[[4,12,2,2,-1.],[4,12,1,1,2.],[5,13,1,1,2.]],threshold:1.0620340472087264e-003,right_val:0.2130492031574249,left_val:-0.0640519708395004},{features:[[7,4,3,1,-1.],[8,4,1,1,3.]],threshold:-2.5768030900508165e-003,right_val:0.0261464696377516,left_val:-0.5230960249900818},{features:[[12,3,3,4,-1.],[13,3,1,4,3.]],threshold:4.7555579803884029e-003,right_val:-0.3440873026847839,left_val:0.0362137295305729},{features:[[2,0,18,20,-1.],[2,10,18,10,2.]],threshold:-0.5906254053115845,right_val:0.0134163796901703,left_val:-0.9170126914978027},{features:[[11,2,7,12,-1.],[11,8,7,6,2.]],threshold:-0.0970318317413330,right_val:-0.0323441810905933,left_val:0.4828839898109436},{features:[[13,5,2,2,-1.],[14,5,1,2,2.]],threshold:1.4890159945935011e-003,right_val:-0.3889848887920380,left_val:0.0405917502939701},{features:[[4,17,4,1,-1.],[6,17,2,1,2.]],threshold:2.4702500086277723e-003,right_val:0.2132260948419571,left_val:-0.0631592199206352},{features:[[3,14,4,4,-1.],[5,14,2,4,2.]],threshold:-2.9705299530178308e-003,right_val:-0.1018164977431297,left_val:0.1496088951826096},{features:[[0,2,8,18,-1.],[0,11,8,9,2.]],threshold:0.1555549949407578,right_val:-0.3598398864269257,left_val:0.0366748794913292},{features:[[5,7,3,3,-1.],[5,8,3,1,3.]],threshold:0.0141136599704623,right_val:-0.8711295723915100,left_val:0.0138346403837204},{features:[[8,2,3,2,-1.],[9,2,1,2,3.]],threshold:-9.5594127196818590e-004,right_val:0.0556467510759830,left_val:-0.2235932946205139}],threshold:-1.4499469995498657},{simpleClassifiers:[{features:[[5,7,15,4,-1.],[5,9,15,2,2.]],threshold:0.0230683200061321,right_val:0.2575811147689819,left_val:-0.3073453903198242},{features:[[10,0,10,8,-1.],[10,0,5,4,2.],[15,4,5,4,2.]],threshold:-0.0116030303761363,right_val:-0.2991755902767181,left_val:0.1734793931245804},{features:[[10,8,4,4,-1.],[10,8,2,2,2.],[12,10,2,2,2.]],threshold:-1.0232869535684586e-003,right_val:-0.2492682933807373,left_val:0.1928901970386505},{features:[[5,6,3,10,-1.],[5,11,3,5,2.]],threshold:0.0121949603781104,right_val:-0.4085389077663422,left_val:0.0875914171338081},{features:[[7,6,3,4,-1.],[8,6,1,4,3.]],threshold:-1.2484550243243575e-003,right_val:-0.1881189942359924,left_val:0.1634556949138641},{features:[[12,13,2,2,-1.],[12,14,2,1,2.]],threshold:3.2145460136234760e-004,right_val:-0.3772250115871429,left_val:0.0791359096765518},{features:[[7,8,4,12,-1.],[7,12,4,4,3.]],threshold:-7.9707789700478315e-004,right_val:0.0969362631440163,left_val:-0.2637738883495331},{features:[[0,0,6,18,-1.],[2,0,2,18,3.]],threshold:0.0709249228239059,right_val:0.2526729106903076,left_val:-0.1253806054592133},{features:[[6,1,10,6,-1.],[6,3,10,2,3.]],threshold:2.5408361107110977e-003,right_val:0.1497431993484497,left_val:-0.1392325013875961},{features:[[13,9,3,2,-1.],[13,10,3,1,2.]],threshold:-6.9253891706466675e-004,right_val:0.0394197404384613,left_val:-0.3136391937732697},{features:[[5,10,1,3,-1.],[5,11,1,1,3.]],threshold:2.5845640338957310e-003,right_val:0.2809658050537109,left_val:-0.0700671225786209},{features:[[6,10,1,10,-1.],[6,15,1,5,2.]],threshold:-0.0168039500713348,right_val:0.0365094691514969,left_val:-0.4625408053398132},{features:[[9,9,3,4,-1.],[9,11,3,2,2.]],threshold:-2.1332600153982639e-003,right_val:-0.0844474807381630,left_val:0.2269130945205689},{features:[[7,4,2,2,-1.],[7,5,2,1,2.]],threshold:-5.5397138930857182e-004,right_val:0.1004170030355454,left_val:-0.2072816044092178},{features:[[12,12,2,1,-1.],[13,12,1,1,2.]],threshold:-1.4573110092896968e-005,right_val:-0.2081342041492462,left_val:0.0885343402624130},{features:[[7,12,1,3,-1.],[7,13,1,1,3.]],threshold:8.0281507689505816e-004,right_val:0.1955396980047226,left_val:-0.0885214433073998},{features:[[5,11,3,3,-1.],[5,12,3,1,3.]],threshold:3.6762449890375137e-003,right_val:0.2423270046710968,left_val:-0.0839662775397301},{features:[[1,0,1,2,-1.],[1,1,1,1,2.]],threshold:-1.6549570136703551e-004,right_val:0.1004450991749764,left_val:-0.1940200030803680},{features:[[10,16,6,3,-1.],[10,17,6,1,3.]],threshold:5.5225789546966553e-003,right_val:-0.4109568893909454,left_val:0.0460141412913799},{features:[[9,4,4,6,-1.],[9,4,2,3,2.],[11,7,2,3,2.]],threshold:1.1023939587175846e-003,right_val:0.0841698274016380,left_val:-0.2105371952056885},{features:[[10,9,10,1,-1.],[15,9,5,1,2.]],threshold:-0.0216103605926037,right_val:0.0511969402432442,left_val:-0.3472487926483154},{features:[[9,11,1,2,-1.],[9,12,1,1,2.]],threshold:-1.4869699953123927e-005,right_val:-0.1624923050403595,left_val:0.1118715032935143},{features:[[7,8,3,6,-1.],[7,10,3,2,3.]],threshold:0.0317270606756210,right_val:-0.4535711109638214,left_val:0.0375460311770439},{features:[[1,18,8,2,-1.],[1,18,4,1,2.],[5,19,4,1,2.]],threshold:-6.5588178113102913e-003,right_val:-0.0615393109619617,left_val:0.2975679039955139},{features:[[5,13,3,3,-1.],[5,14,3,1,3.]],threshold:3.7398359272629023e-003,right_val:0.2288192063570023,left_val:-0.0693628415465355},{features:[[4,6,5,6,-1.],[4,9,5,3,2.]],threshold:-2.1445790771394968e-003,right_val:0.0570855401456356,left_val:-0.3069198131561279},{features:[[6,5,2,1,-1.],[7,5,1,1,2.]],threshold:1.4241340104490519e-003,right_val:-0.3514148890972138,left_val:0.0477477200329304},{features:[[11,6,1,6,-1.],[11,9,1,3,2.]],threshold:1.8902820302173495e-003,right_val:-0.1507499963045120,left_val:0.1125065013766289},{features:[[6,17,4,3,-1.],[6,18,4,1,3.]],threshold:-6.4917900599539280e-003,right_val:-0.0625736787915230,left_val:0.2871277928352356},{features:[[10,4,2,10,-1.],[10,4,1,5,2.],[11,9,1,5,2.]],threshold:-8.7750004604458809e-003,right_val:0.0295595303177834,left_val:-0.5414124131202698},{features:[[8,4,9,13,-1.],[11,4,3,13,3.]],threshold:0.0936476886272430,right_val:0.2963837981224060,left_val:-0.0569437891244888},{features:[[10,11,2,2,-1.],[11,11,1,2,2.]],threshold:-4.4028809497831389e-005,right_val:-0.1516932994127274,left_val:0.1072629019618034},{features:[[13,15,1,2,-1.],[13,16,1,1,2.]],threshold:7.9690842540003359e-005,right_val:-0.1815764009952545,left_val:0.0877043381333351},{features:[[17,0,3,13,-1.],[18,0,1,13,3.]],threshold:-6.6510448232293129e-003,right_val:-0.0787653997540474,left_val:0.2125076949596405},{features:[[0,0,14,10,-1.],[0,5,14,5,2.]],threshold:0.2135832011699677,right_val:-0.4989534914493561,left_val:0.0327049307525158},{features:[[12,5,6,15,-1.],[14,5,2,15,3.]],threshold:-0.0980354100465775,right_val:0.0243007503449917,left_val:-0.6362007260322571},{features:[[11,10,2,3,-1.],[11,11,2,1,3.]],threshold:-3.6894609220325947e-003,right_val:0.0253432206809521,left_val:-0.5787317156791687},{features:[[5,14,3,3,-1.],[5,15,3,1,3.]],threshold:4.7867568209767342e-003,right_val:0.2464102953672409,left_val:-0.0697197988629341},{features:[[5,15,3,2,-1.],[5,16,3,1,2.]],threshold:4.0250780875794590e-004,right_val:0.1716368943452835,left_val:-0.1185259968042374},{features:[[11,14,3,6,-1.],[12,14,1,6,3.]],threshold:-3.8258030544966459e-003,right_val:0.0527966506779194,left_val:-0.3170871138572693},{features:[[12,18,2,1,-1.],[13,18,1,1,2.]],threshold:2.9255099434521981e-005,right_val:0.1244350969791412,left_val:-0.1215787008404732},{features:[[16,5,1,2,-1.],[16,6,1,1,2.]],threshold:-5.5969221284613013e-004,right_val:0.0615640208125114,left_val:-0.2394244968891144},{features:[[17,8,3,4,-1.],[18,8,1,4,3.]],threshold:1.6149280127137899e-003,right_val:0.1939617991447449,left_val:-0.0895366817712784},{features:[[8,15,2,3,-1.],[9,15,1,3,2.]],threshold:-5.9165759012103081e-003,right_val:0.0241075009107590,left_val:-0.6074134707450867},{features:[[6,7,2,4,-1.],[6,7,1,2,2.],[7,9,1,2,2.]],threshold:4.5592039823532104e-003,right_val:0.2872112989425659,left_val:-0.0540901198983192},{features:[[3,7,12,2,-1.],[7,7,4,2,3.]],threshold:-0.0517677888274193,right_val:0.0243290998041630,left_val:-0.6485347151756287},{features:[[4,7,3,3,-1.],[5,7,1,3,3.]],threshold:-0.0106355696916580,right_val:-0.0502317883074284,left_val:0.3235976099967957},{features:[[1,10,2,1,-1.],[2,10,1,1,2.]],threshold:2.5121110957115889e-004,right_val:-0.1485994011163712,left_val:0.0952744483947754},{features:[[4,4,2,5,-1.],[5,4,1,5,2.]],threshold:1.3107099803164601e-003,right_val:0.1264725029468536,left_val:-0.1161269024014473},{features:[[6,7,14,2,-1.],[13,7,7,2,2.]],threshold:-0.0736297219991684,right_val:0.0241974107921124,left_val:-0.6297783255577087},{features:[[14,17,2,3,-1.],[14,18,2,1,3.]],threshold:5.1864539273083210e-004,right_val:-0.1803835034370422,left_val:0.0808439701795578},{features:[[6,11,1,3,-1.],[6,12,1,1,3.]],threshold:-2.0541099365800619e-003,right_val:-0.0715596377849579,left_val:0.2069077044725418},{features:[[11,3,8,16,-1.],[11,11,8,8,2.]],threshold:-7.2738518938422203e-003,right_val:0.0846181586384773,left_val:-0.1804922074079514},{features:[[9,12,5,3,-1.],[9,13,5,1,3.]],threshold:-7.0418710820376873e-003,right_val:0.0242430008947849,left_val:-0.5525584816932678},{features:[[5,9,1,3,-1.],[5,10,1,1,3.]],threshold:2.3678881116211414e-003,right_val:0.2201319932937622,left_val:-0.0743150636553764},{features:[[3,8,8,4,-1.],[3,8,4,2,2.],[7,10,4,2,2.]],threshold:-4.1341409087181091e-003,right_val:0.0576455406844616,left_val:-0.3146111071109772},{features:[[10,15,2,3,-1.],[10,16,2,1,3.]],threshold:5.9597631916403770e-003,right_val:-0.6639922261238098,left_val:0.0215512104332447},{features:[[14,9,1,6,-1.],[14,12,1,3,2.]],threshold:-1.4643320355389733e-005,right_val:-0.1437864005565643,left_val:0.1032539978623390},{features:[[13,11,1,3,-1.],[13,12,1,1,3.]],threshold:-8.0324069131165743e-004,right_val:0.0521755404770374,left_val:-0.2802684903144836},{features:[[8,7,6,6,-1.],[8,9,6,2,3.]],threshold:-0.0178602207452059,right_val:-0.0472954809665680,left_val:0.3154763877391815},{features:[[9,8,4,3,-1.],[9,9,4,1,3.]],threshold:8.5229711839929223e-004,right_val:0.1690572947263718,left_val:-0.1086079031229019},{features:[[8,2,2,5,-1.],[9,2,1,5,2.]],threshold:8.8618341833353043e-003,right_val:-0.7168679833412170,left_val:0.0206294208765030},{features:[[13,6,3,3,-1.],[13,7,3,1,3.]],threshold:4.1418620385229588e-003,right_val:-0.3975364863872528,left_val:0.0313132107257843},{features:[[12,0,5,14,-1.],[12,7,5,7,2.]],threshold:-0.0966165810823441,right_val:-0.0322910994291306,left_val:0.4237889945507050},{features:[[2,2,7,10,-1.],[2,7,7,5,2.]],threshold:-0.0848536491394043,right_val:0.0344205088913441,left_val:-0.4836021065711975},{features:[[5,5,6,11,-1.],[8,5,3,11,2.]],threshold:-0.0273994896560907,right_val:0.0468055084347725,left_val:-0.2898151874542236},{features:[[6,17,3,3,-1.],[6,18,3,1,3.]],threshold:1.9653420895338058e-003,right_val:0.1889424026012421,left_val:-0.0762211307883263},{features:[[9,5,2,8,-1.],[9,5,1,4,2.],[10,9,1,4,2.]],threshold:-9.0222749859094620e-003,right_val:0.0260387808084488,left_val:-0.5825505852699280},{features:[[14,0,4,16,-1.],[14,8,4,8,2.]],threshold:0.1785901039838791,right_val:-0.7587677240371704,left_val:0.0141130797564983},{features:[[10,7,1,3,-1.],[10,8,1,1,3.]],threshold:2.6170860510319471e-003,right_val:0.3458263874053955,left_val:-0.0420114099979401},{features:[[7,16,3,2,-1.],[8,16,1,2,3.]],threshold:-1.8247140105813742e-003,right_val:0.0541134513914585,left_val:-0.2512575089931488},{features:[[10,6,1,3,-1.],[10,7,1,1,3.]],threshold:1.0635840008035302e-003,right_val:0.2111109048128128,left_val:-0.0699880570173264},{features:[[5,11,14,6,-1.],[5,14,14,3,2.]],threshold:-0.0857941210269928,right_val:0.0242343097925186,left_val:-0.5295022130012512},{features:[[9,6,1,3,-1.],[9,7,1,1,3.]],threshold:-2.4844249710440636e-003,right_val:-0.0578949414193630,left_val:0.2279888987541199},{features:[[6,11,5,4,-1.],[6,13,5,2,2.]],threshold:2.4517390411347151e-003,right_val:-0.2993184030056000,left_val:0.0477582700550556},{features:[[6,9,10,8,-1.],[6,9,5,4,2.],[11,13,5,4,2.]],threshold:7.2088139131665230e-003,right_val:-0.1466365009546280,left_val:0.0891904607415199},{features:[[18,9,2,6,-1.],[18,9,1,3,2.],[19,12,1,3,2.]],threshold:-6.0728411190211773e-003,right_val:-0.0441877916455269,left_val:0.2977311015129089},{features:[[5,12,8,2,-1.],[9,12,4,2,2.]],threshold:0.0293797198683023,right_val:-0.7279959917068481,left_val:0.0183849204331636},{features:[[8,8,6,12,-1.],[8,8,3,6,2.],[11,14,3,6,2.]],threshold:0.0352654606103897,right_val:0.3436934947967529,left_val:-0.0403451286256313},{features:[[12,7,3,5,-1.],[13,7,1,5,3.]],threshold:8.0668088048696518e-004,right_val:0.1332406997680664,left_val:-0.1017149016261101},{features:[[10,13,4,3,-1.],[10,14,4,1,3.]],threshold:-1.4964640140533447e-003,right_val:0.0591932795941830,left_val:-0.2329643964767456},{features:[[12,4,3,15,-1.],[13,4,1,15,3.]],threshold:0.0261369794607162,right_val:-0.7309460043907166,left_val:0.0179935190826654},{features:[[4,12,4,2,-1.],[6,12,2,2,2.]],threshold:0.0186632592231035,right_val:-0.7210518121719360,left_val:0.0146938003599644},{features:[[14,1,6,1,-1.],[16,1,2,1,3.]],threshold:-5.0944439863087609e-005,right_val:-0.1348700970411301,left_val:0.0981138125061989},{features:[[15,3,2,8,-1.],[16,3,1,8,2.]],threshold:-5.5268028518185019e-004,right_val:0.1193132027983666,left_val:-0.1131390035152435},{features:[[13,16,6,4,-1.],[13,16,3,2,2.],[16,18,3,2,2.]],threshold:5.4916120134294033e-003,right_val:0.2231263071298599,left_val:-0.0689969286322594},{features:[[9,5,6,7,-1.],[12,5,3,7,2.]],threshold:0.0312431994825602,right_val:0.3925015032291412,left_val:-0.0323944389820099},{features:[[18,3,2,2,-1.],[18,4,2,1,2.]],threshold:2.7375440113246441e-003,right_val:-0.4063234925270081,left_val:0.0367135107517242},{features:[[2,0,18,4,-1.],[11,0,9,4,2.]],threshold:0.0909608900547028,right_val:-0.4161289930343628,left_val:0.0277091991156340},{features:[[0,8,2,2,-1.],[1,8,1,2,2.]],threshold:-4.2210621177218854e-004,right_val:0.0784403532743454,left_val:-0.1599356979131699},{features:[[4,12,3,6,-1.],[5,12,1,6,3.]],threshold:-2.3689800873398781e-003,right_val:-0.0904172435402870,left_val:0.1437219977378845},{features:[[3,13,4,2,-1.],[5,13,2,2,2.]],threshold:4.5116269029676914e-003,right_val:0.2101106941699982,left_val:-0.0680682063102722},{features:[[4,14,11,2,-1.],[4,15,11,1,2.]],threshold:-1.4441140228882432e-003,right_val:0.1181610971689224,left_val:-0.1337653994560242},{features:[[4,13,8,3,-1.],[4,14,8,1,3.]],threshold:2.1477979607880116e-003,right_val:0.1757165044546127,left_val:-0.0980670824646950},{features:[[3,7,6,10,-1.],[3,7,3,5,2.],[6,12,3,5,2.]],threshold:0.0225345995277166,right_val:-0.2808521091938019,left_val:0.0532467402517796},{features:[[5,7,6,4,-1.],[7,7,2,4,3.]],threshold:-0.0161652900278568,right_val:-0.0563493184745312,left_val:0.2605862915515900},{features:[[2,11,10,6,-1.],[2,14,10,3,2.]],threshold:0.0131579097360373,right_val:-0.3108432888984680,left_val:0.0449605993926525},{features:[[5,7,9,12,-1.],[5,13,9,6,2.]],threshold:-0.0252186302095652,right_val:0.1170765012502670,left_val:-0.1224538981914520},{features:[[9,12,7,4,-1.],[9,14,7,2,2.]],threshold:-1.0043029760709032e-004,right_val:-0.2366541028022766,left_val:0.0626686066389084},{features:[[2,0,8,4,-1.],[2,0,4,2,2.],[6,2,4,2,2.]],threshold:0.0228843092918396,right_val:0.2695189118385315,left_val:-0.0563933886587620},{features:[[4,0,4,4,-1.],[4,0,2,2,2.],[6,2,2,2,2.]],threshold:-3.7653960753232241e-003,right_val:-0.0603278391063213,left_val:0.2426504939794540},{features:[[6,2,3,2,-1.],[7,2,1,2,3.]],threshold:-1.2131360126659274e-003,right_val:0.0638662725687027,left_val:-0.2258134037256241},{features:[[2,11,3,4,-1.],[3,11,1,4,3.]],threshold:3.6897920072078705e-003,right_val:0.1712114065885544,left_val:-0.0750563070178032},{features:[[1,17,2,1,-1.],[2,17,1,1,2.]],threshold:3.9484380977228284e-004,right_val:-0.1800608038902283,left_val:0.0729255601763725},{features:[[15,12,4,3,-1.],[15,13,4,1,3.]],threshold:-2.8756330721080303e-003,right_val:-0.0583127997815609,left_val:0.2333267927169800},{features:[[9,15,7,3,-1.],[9,16,7,1,3.]],threshold:-0.0129395499825478,right_val:0.0247462093830109,left_val:-0.5996682047843933},{features:[[6,7,3,2,-1.],[7,7,1,2,3.]],threshold:4.8920139670372009e-003,right_val:0.2714282870292664,left_val:-0.0508085489273071},{features:[[3,5,12,10,-1.],[3,5,6,5,2.],[9,10,6,5,2.]],threshold:-6.3685458153486252e-003,right_val:0.0787207037210464,left_val:-0.1775954961776733},{features:[[4,2,12,5,-1.],[10,2,6,5,2.]],threshold:0.0917000621557236,right_val:0.5661062002182007,left_val:-0.0243162196129560},{features:[[9,5,3,1,-1.],[10,5,1,1,3.]],threshold:-2.9075080528855324e-003,right_val:0.0267383493483067,left_val:-0.5347344279289246},{features:[[2,10,3,4,-1.],[3,10,1,4,3.]],threshold:-3.9782752282917500e-003,right_val:-0.0736341625452042,left_val:0.1789894998073578},{features:[[11,5,2,10,-1.],[11,10,2,5,2.]],threshold:3.8189089391380548e-003,right_val:-0.1261541992425919,left_val:0.0966401472687721},{features:[[8,6,7,8,-1.],[8,10,7,4,2.]],threshold:-6.1400169506669044e-003,right_val:0.0489520691335201,left_val:-0.2802591025829315},{features:[[5,10,1,3,-1.],[5,11,1,1,3.]],threshold:4.6048378571867943e-003,right_val:0.3627172112464905,left_val:-0.0352979190647602},{features:[[2,8,8,4,-1.],[6,8,4,4,2.]],threshold:0.0695981532335281,right_val:-0.4752317965030670,left_val:0.0282364506274462},{features:[[0,9,2,2,-1.],[1,9,1,2,2.]],threshold:8.2954921526834369e-004,right_val:-0.1960850059986115,left_val:0.0650106668472290},{features:[[13,11,4,2,-1.],[15,11,2,2,2.]],threshold:0.0100734503939748,right_val:-0.5270252823829651,left_val:0.0240914300084114},{features:[[8,6,12,5,-1.],[12,6,4,5,3.]],threshold:-0.0499641709029675,right_val:-0.0529397688806057,left_val:0.2706043124198914},{features:[[11,11,9,1,-1.],[14,11,3,1,3.]],threshold:-0.0234257206320763,right_val:0.0203999504446983,left_val:-0.6553804278373718},{features:[[15,10,2,4,-1.],[15,10,1,2,2.],[16,12,1,2,2.]],threshold:4.5370758743956685e-004,right_val:0.1257548928260803,left_val:-0.1014572978019714},{features:[[18,5,1,3,-1.],[18,6,1,1,3.]],threshold:-9.4329239800572395e-004,right_val:0.0521473698318005,left_val:-0.2367783039808273},{features:[[4,10,7,3,-1.],[4,11,7,1,3.]],threshold:-2.5503130163997412e-003,right_val:-0.0643835365772247,left_val:0.1869580000638962},{features:[[8,5,3,1,-1.],[9,5,1,1,3.]],threshold:-2.1031149663031101e-003,right_val:0.0287637803703547,left_val:-0.4038110971450806},{features:[[7,13,2,3,-1.],[7,14,2,1,3.]],threshold:2.3942890111356974e-003,right_val:0.2015120983123779,left_val:-0.0589619092643261},{features:[[7,14,3,3,-1.],[7,15,3,1,3.]],threshold:3.4859919105656445e-004,right_val:0.1155984997749329,left_val:-0.1159474030137062},{features:[[7,15,3,3,-1.],[7,16,3,1,3.]],threshold:6.5279641421511769e-004,right_val:0.1454613059759140,left_val:-0.0965832471847534},{features:[[14,15,1,3,-1.],[14,16,1,1,3.]],threshold:6.6208152566105127e-004,right_val:-0.2340817004442215,left_val:0.0556666404008865},{features:[[2,14,10,6,-1.],[2,17,10,3,2.]],threshold:-0.1124671995639801,right_val:0.0167008098214865,left_val:-0.7212910056114197},{features:[[5,12,5,3,-1.],[5,13,5,1,3.]],threshold:2.4760260712355375e-003,right_val:0.1683201044797897,left_val:-0.0707524418830872},{features:[[7,9,1,6,-1.],[7,11,1,2,3.]],threshold:-8.7723489850759506e-003,right_val:0.0260061193257570,left_val:-0.4866676032543182},{features:[[0,6,5,6,-1.],[0,8,5,2,3.]],threshold:0.0288402792066336,right_val:-0.3454917073249817,left_val:0.0333086997270584},{features:[[6,10,3,4,-1.],[6,12,3,2,2.]],threshold:4.7115320921875536e-004,right_val:-0.2133412063121796,left_val:0.0586104691028595},{features:[[4,9,9,2,-1.],[4,10,9,1,2.]],threshold:-7.5157210230827332e-003,right_val:-0.0363076403737068,left_val:0.3786672055721283},{features:[[7,3,1,2,-1.],[7,4,1,1,2.]],threshold:-1.7479779489804059e-004,right_val:0.0703804418444633,left_val:-0.1868792027235031},{features:[[8,9,4,4,-1.],[8,11,4,2,2.]],threshold:6.9826189428567886e-003,right_val:0.1854144930839539,left_val:-0.0753762125968933},{features:[[11,10,3,1,-1.],[12,10,1,1,3.]],threshold:-2.5053499266505241e-003,right_val:0.0267652906477451,left_val:-0.4734547138214111},{features:[[5,7,3,2,-1.],[5,8,3,1,2.]],threshold:6.5240712137892842e-004,right_val:0.1146010980010033,left_val:-0.1139867976307869}],threshold:-1.4971179962158203},{simpleClassifiers:[{features:[[7,0,6,6,-1.],[7,3,6,3,2.]],threshold:0.0279688294976950,right_val:0.3397671878337860,left_val:-0.2405429035425186},{features:[[5,6,3,4,-1.],[6,6,1,4,3.]],threshold:4.7484100796282291e-003,right_val:0.2652375996112824,left_val:-0.1859841048717499},{features:[[11,1,9,12,-1.],[14,1,3,12,3.]],threshold:-9.6774380654096603e-003,right_val:-0.3173474073410034,left_val:0.1357457935810089},{features:[[6,7,4,9,-1.],[6,10,4,3,3.]],threshold:1.0649940231814981e-003,right_val:0.0703831836581230,left_val:-0.5035613179206848},{features:[[11,7,8,6,-1.],[11,7,4,3,2.],[15,10,4,3,2.]],threshold:3.0151519458740950e-003,right_val:0.1675014048814774,left_val:-0.1758576929569244},{features:[[8,9,7,3,-1.],[8,10,7,1,3.]],threshold:7.6821137918159366e-004,right_val:0.1274846047163010,left_val:-0.2315856069326401},{features:[[3,2,4,18,-1.],[5,2,2,18,2.]],threshold:-0.0566227808594704,right_val:-0.1152542978525162,left_val:0.3010323047637940},{features:[[6,12,2,3,-1.],[6,13,2,1,3.]],threshold:4.7889677807688713e-003,right_val:0.3577465116977692,left_val:-0.0687973499298096},{features:[[6,11,8,6,-1.],[6,11,4,3,2.],[10,14,4,3,2.]],threshold:3.7908130325376987e-003,right_val:-0.2338984012603760,left_val:0.1125058010220528},{features:[[5,9,4,7,-1.],[7,9,2,7,2.]],threshold:-3.6302749067544937e-003,right_val:0.0601800717413425,left_val:-0.2742595076560974},{features:[[5,8,6,5,-1.],[8,8,3,5,2.]],threshold:0.0149861602112651,right_val:-0.3508821129798889,left_val:0.0583701506257057},{features:[[7,11,1,3,-1.],[7,12,1,1,3.]],threshold:6.1338639352470636e-004,right_val:0.1800414025783539,left_val:-0.1004550009965897},{features:[[15,10,3,1,-1.],[16,10,1,1,3.]],threshold:1.7827099654823542e-003,right_val:0.2816573083400726,left_val:-0.0585045702755451},{features:[[10,12,2,2,-1.],[10,13,2,1,2.]],threshold:1.0279649868607521e-003,right_val:-0.4163356125354767,left_val:0.0460491515696049},{features:[[11,13,2,1,-1.],[12,13,1,1,2.]],threshold:-1.4470520000031684e-005,right_val:-0.1700523942708969,left_val:0.0975944772362709},{features:[[6,12,2,2,-1.],[6,13,2,1,2.]],threshold:7.2919862577691674e-004,right_val:0.1968380063772202,left_val:-0.0892776921391487},{features:[[11,2,2,12,-1.],[11,2,1,6,2.],[12,8,1,6,2.]],threshold:-1.2752750189974904e-003,right_val:0.0777813196182251,left_val:-0.2132434993982315},{features:[[7,0,6,6,-1.],[7,3,6,3,2.]],threshold:0.0275105703622103,right_val:-0.1846397966146469,left_val:0.0980590879917145},{features:[[4,8,4,2,-1.],[4,9,4,1,2.]],threshold:3.9082998409867287e-003,right_val:0.1790283024311066,left_val:-0.0982400774955750},{features:[[14,12,1,2,-1.],[14,13,1,1,2.]],threshold:2.8285238659009337e-004,right_val:-0.2590380907058716,left_val:0.0648823827505112},{features:[[4,0,2,4,-1.],[4,0,1,2,2.],[5,2,1,2,2.]],threshold:5.8698928914964199e-003,right_val:0.3558405935764313,left_val:-0.0484365001320839},{features:[[15,2,2,1,-1.],[16,2,1,1,2.]],threshold:5.2106438670307398e-004,right_val:-0.2426872998476028,left_val:0.0642008930444717},{features:[[3,14,3,1,-1.],[4,14,1,1,3.]],threshold:-3.8013618905097246e-003,right_val:-0.0493724904954433,left_val:0.3134953081607819},{features:[[5,11,10,4,-1.],[5,11,5,2,2.],[10,13,5,2,2.]],threshold:-3.5830549895763397e-003,right_val:0.0859288871288300,left_val:-0.1901564002037048},{features:[[4,10,12,3,-1.],[4,11,12,1,3.]],threshold:7.3326388373970985e-003,right_val:0.1859602928161621,left_val:-0.0872440785169601},{features:[[15,2,4,6,-1.],[15,2,2,3,2.],[17,5,2,3,2.]],threshold:6.8118958733975887e-004,right_val:-0.1738087981939316,left_val:0.0903531834483147},{features:[[5,8,1,4,-1.],[5,10,1,2,2.]],threshold:-2.4127468932420015e-003,right_val:-0.0620182603597641,left_val:0.2658387124538422},{features:[[6,15,3,2,-1.],[7,15,1,2,3.]],threshold:4.4389287941157818e-003,right_val:-0.4403919875621796,left_val:0.0386724397540092},{features:[[11,19,2,1,-1.],[12,19,1,1,2.]],threshold:2.9394390367087908e-005,right_val:0.1238996013998985,left_val:-0.1311666071414948},{features:[[6,7,3,2,-1.],[7,7,1,2,3.]],threshold:5.2613918669521809e-003,right_val:0.3143467903137207,left_val:-0.0543261393904686},{features:[[6,4,2,1,-1.],[7,4,1,1,2.]],threshold:2.3712380789220333e-003,right_val:-0.4593602120876312,left_val:0.0352349318563938},{features:[[6,4,3,2,-1.],[7,4,1,2,3.]],threshold:-2.4774149060249329e-003,right_val:0.0416763089597225,left_val:-0.3257965147495270},{features:[[6,8,2,2,-1.],[6,8,1,1,2.],[7,9,1,1,2.]],threshold:5.1308068213984370e-004,right_val:0.1520960032939911,left_val:-0.0980328395962715},{features:[[6,15,3,2,-1.],[7,15,1,2,3.]],threshold:-7.6761870877817273e-004,right_val:0.0695636570453644,left_val:-0.2094428986310959},{features:[[4,8,2,4,-1.],[4,8,1,2,2.],[5,10,1,2,2.]],threshold:4.1551832109689713e-003,right_val:0.2478885948657990,left_val:-0.0591424182057381},{features:[[10,4,7,3,-1.],[10,5,7,1,3.]],threshold:0.0143151497468352,right_val:-0.6266369223594666,left_val:0.0247133504599333},{features:[[4,5,2,6,-1.],[5,5,1,6,2.]],threshold:8.9347898028790951e-004,right_val:0.1062666028738022,left_val:-0.1338738054037094},{features:[[10,13,1,3,-1.],[10,14,1,1,3.]],threshold:-5.8425782481208444e-004,right_val:0.0675528720021248,left_val:-0.2158381044864655},{features:[[6,11,6,3,-1.],[9,11,3,3,2.]],threshold:8.9712149929255247e-004,right_val:0.0968595966696739,left_val:-0.1599808931350708},{features:[[10,14,3,2,-1.],[10,15,3,1,2.]],threshold:-4.4576660729944706e-003,right_val:0.0344811081886292,left_val:-0.4683977961540222},{features:[[8,8,4,2,-1.],[10,8,2,2,2.]],threshold:0.0163166504353285,right_val:-0.7699069976806641,left_val:0.0161764807999134},{features:[[17,12,3,1,-1.],[18,12,1,1,3.]],threshold:-1.9581869710236788e-003,right_val:-0.0636050030589104,left_val:0.2342319041490555},{features:[[9,0,11,16,-1.],[9,8,11,8,2.]],threshold:0.2962863147258759,right_val:-0.3899135887622833,left_val:0.0380072817206383},{features:[[17,0,3,6,-1.],[17,2,3,2,3.]],threshold:-9.1676972806453705e-004,right_val:-0.1091248020529747,left_val:0.1208648979663849},{features:[[0,0,1,2,-1.],[0,1,1,1,2.]],threshold:-2.5543299852870405e-004,right_val:0.0711042210459709,left_val:-0.1875578016042709},{features:[[5,11,3,3,-1.],[5,12,3,1,3.]],threshold:8.2945115864276886e-003,right_val:0.3355168104171753,left_val:-0.0399125702679157},{features:[[4,10,10,9,-1.],[4,13,10,3,3.]],threshold:-0.0583876892924309,right_val:0.0410111397504807,left_val:-0.3347511887550354},{features:[[3,3,3,5,-1.],[4,3,1,5,3.]],threshold:1.0927469702437520e-003,right_val:0.1604676991701126,left_val:-0.0832434892654419},{features:[[6,1,2,6,-1.],[6,3,2,2,3.]],threshold:1.0653319768607616e-003,right_val:0.1056177988648415,left_val:-0.1192004010081291},{features:[[5,0,8,6,-1.],[5,2,8,2,3.]],threshold:-0.0353237204253674,right_val:-0.0476509109139442,left_val:0.2839944958686829},{features:[[0,0,1,2,-1.],[0,1,1,1,2.]],threshold:6.7976478021591902e-004,right_val:-0.2274127006530762,left_val:0.0592235215008259},{features:[[6,3,6,4,-1.],[8,3,2,4,3.]],threshold:-0.0248105190694332,right_val:0.0188289396464825,left_val:-0.6578854918479919},{features:[[8,6,3,3,-1.],[8,7,3,1,3.]],threshold:4.5880349352955818e-003,right_val:0.2688626050949097,left_val:-0.0507998690009117},{features:[[9,6,3,6,-1.],[9,8,3,2,3.]],threshold:3.9034360088407993e-003,right_val:0.2264453023672104,left_val:-0.0591830201447010},{features:[[4,3,12,12,-1.],[4,3,6,6,2.],[10,9,6,6,2.]],threshold:0.1236065998673439,right_val:-0.6784409880638123,left_val:0.0220522992312908},{features:[[13,8,3,2,-1.],[13,9,3,1,2.]],threshold:-3.7856408744119108e-004,right_val:0.0575223006308079,left_val:-0.2171549946069717},{features:[[4,3,10,2,-1.],[9,3,5,2,2.]],threshold:0.0285622291266918,right_val:0.4247479140758514,left_val:-0.0340952686965466},{features:[[18,14,2,2,-1.],[18,14,1,1,2.],[19,15,1,1,2.]],threshold:2.2348840720951557e-003,right_val:0.3505004048347473,left_val:-0.0356555283069611},{features:[[5,6,6,2,-1.],[8,6,3,2,2.]],threshold:0.0192110594362020,right_val:-0.5931491851806641,left_val:0.0250783506780863},{features:[[0,14,20,5,-1.],[10,14,10,5,2.]],threshold:0.1561163961887360,right_val:-0.4874055087566376,left_val:0.0236126407980919},{features:[[9,17,2,1,-1.],[10,17,1,1,2.]],threshold:-1.2261980446055532e-003,right_val:0.0395263917744160,left_val:-0.3042171895503998},{features:[[5,16,5,3,-1.],[5,17,5,1,3.]],threshold:3.6561759188771248e-003,right_val:0.2026260942220688,left_val:-0.0776275396347046},{features:[[9,16,3,2,-1.],[10,16,1,2,3.]],threshold:1.1567790061235428e-003,right_val:-0.2436849027872086,left_val:0.0556823983788490},{features:[[6,5,5,3,-1.],[6,6,5,1,3.]],threshold:6.2764538452029228e-003,right_val:0.2118301987648010,left_val:-0.0644526034593582},{features:[[11,12,3,8,-1.],[12,12,1,8,3.]],threshold:0.0120912399142981,right_val:-0.6223167777061462,left_val:0.0206679794937372},{features:[[4,3,3,9,-1.],[4,6,3,3,3.]],threshold:3.7568950210697949e-004,right_val:-0.1780910938978195,left_val:0.0736704766750336},{features:[[11,0,3,3,-1.],[12,0,1,3,3.]],threshold:3.8157668896019459e-003,right_val:-0.3626295924186707,left_val:0.0338457114994526},{features:[[5,17,10,2,-1.],[5,17,5,1,2.],[10,18,5,1,2.]],threshold:-1.3252210337668657e-003,right_val:-0.0817274227738380,left_val:0.1473249047994614},{features:[[5,15,2,3,-1.],[5,16,2,1,3.]],threshold:2.1575710270553827e-003,right_val:0.1756231933832169,left_val:-0.0686241984367371},{features:[[6,14,2,4,-1.],[6,14,1,2,2.],[7,16,1,2,2.]],threshold:-6.4548188820481300e-003,right_val:0.0230200495570898,left_val:-0.5815926790237427},{features:[[10,17,6,3,-1.],[10,18,6,1,3.]],threshold:-8.1042833626270294e-003,right_val:0.0353723317384720,left_val:-0.3554920852184296},{features:[[19,5,1,3,-1.],[19,6,1,1,3.]],threshold:1.6489460540469736e-004,right_val:-0.1571836024522781,left_val:0.0744726881384850},{features:[[16,13,2,2,-1.],[16,13,1,1,2.],[17,14,1,1,2.]],threshold:-1.9494029693305492e-003,right_val:-0.0362138189375401,left_val:0.3515708148479462},{features:[[0,11,2,1,-1.],[1,11,1,1,2.]],threshold:-1.5267659910023212e-004,right_val:0.0848027616739273,left_val:-0.1411571949720383},{features:[[4,12,6,6,-1.],[4,12,3,3,2.],[7,15,3,3,2.]],threshold:0.0238904207944870,right_val:-0.6318603157997131,left_val:0.0193176697939634},{features:[[5,15,4,3,-1.],[5,16,4,1,3.]],threshold:-4.4950367882847786e-003,right_val:-0.0591430887579918,left_val:0.2125412970781326},{features:[[10,16,3,2,-1.],[11,16,1,2,3.]],threshold:2.8725271113216877e-003,right_val:-0.3950523138046265,left_val:0.0327940396964550},{features:[[1,0,10,2,-1.],[1,0,5,1,2.],[6,1,5,1,2.]],threshold:2.0885460544377565e-003,right_val:0.1434766948223114,left_val:-0.0854437872767448},{features:[[2,0,18,14,-1.],[11,0,9,14,2.]],threshold:-0.4434382915496826,right_val:0.0294280499219894,left_val:-0.4005231857299805},{features:[[15,7,4,7,-1.],[17,7,2,7,2.]],threshold:0.0201991703361273,right_val:-0.3176333904266357,left_val:0.0400005504488945},{features:[[5,10,2,4,-1.],[6,10,1,4,2.]],threshold:0.0145708797499537,right_val:-0.8644195199012756,left_val:0.0136628001928329},{features:[[15,16,3,1,-1.],[16,16,1,1,3.]],threshold:-3.8080150261521339e-003,right_val:-0.0338389687240124,left_val:0.4093072116374970},{features:[[7,15,5,3,-1.],[7,16,5,1,3.]],threshold:1.0009920224547386e-003,right_val:0.1392879039049149,left_val:-0.0826002508401871},{features:[[12,1,6,3,-1.],[14,1,2,3,3.]],threshold:1.1500980472192168e-003,right_val:-0.1743306070566177,left_val:0.0696775466203690},{features:[[16,2,2,1,-1.],[17,2,1,1,2.]],threshold:3.4720861003734171e-004,right_val:-0.1740380972623825,left_val:0.0666593834757805},{features:[[17,0,2,2,-1.],[17,0,1,1,2.],[18,1,1,1,2.]],threshold:2.7565560303628445e-003,right_val:0.4024356901645660,left_val:-0.0292856805026531},{features:[[1,0,4,6,-1.],[1,2,4,2,3.]],threshold:-0.0241242200136185,right_val:0.0373305082321167,left_val:-0.3242420852184296},{features:[[3,1,6,18,-1.],[3,7,6,6,3.]],threshold:-0.1398912072181702,right_val:0.0179296191781759,left_val:-0.6596748828887940},{features:[[5,1,1,12,-1.],[5,7,1,6,2.]],threshold:0.0309976805001497,right_val:-0.6953263878822327,left_val:0.0141005897894502},{features:[[16,9,2,2,-1.],[16,9,1,1,2.],[17,10,1,1,2.]],threshold:4.6191760338842869e-004,right_val:0.1806613951921463,left_val:-0.0679441466927528},{features:[[4,2,2,11,-1.],[5,2,1,11,2.]],threshold:0.0342644900083542,right_val:-0.5863891839981079,left_val:0.0222986396402121},{features:[[4,8,3,1,-1.],[5,8,1,1,3.]],threshold:3.9756381884217262e-003,right_val:0.3166910111904144,left_val:-0.0418037213385105},{features:[[14,18,2,2,-1.],[14,19,2,1,2.]],threshold:-3.4192908788099885e-004,right_val:0.0774840563535690,left_val:-0.1581079065799713},{features:[[10,0,10,10,-1.],[10,0,5,5,2.],[15,5,5,5,2.]],threshold:0.0716729536652565,right_val:0.5246502757072449,left_val:-0.0233027692884207},{features:[[19,6,1,2,-1.],[19,7,1,1,2.]],threshold:7.1812322130426764e-004,right_val:-0.2777172923088074,left_val:0.0482687801122665},{features:[[11,0,6,8,-1.],[11,0,3,4,2.],[14,4,3,4,2.]],threshold:-1.8881190335378051e-003,right_val:-0.1480201035737991,left_val:0.0831849873065948},{features:[[5,0,2,2,-1.],[5,0,1,1,2.],[6,1,1,1,2.]],threshold:-1.2498029973357916e-003,right_val:-0.0497693903744221,left_val:0.2532911896705627},{features:[[3,1,9,11,-1.],[6,1,3,11,3.]],threshold:-0.1275610029697418,right_val:0.0208717007189989,left_val:-0.6797056794166565},{features:[[10,11,3,2,-1.],[10,12,3,1,2.]],threshold:-1.4621549780713394e-005,right_val:-0.1504373997449875,left_val:0.0793385133147240},{features:[[10,9,4,2,-1.],[12,9,2,2,2.]],threshold:3.5788679961115122e-003,right_val:0.2407550960779190,left_val:-0.0554691106081009},{features:[[13,7,1,6,-1.],[13,9,1,2,3.]],threshold:9.4902152195572853e-003,right_val:-0.5368028879165649,left_val:0.0286372397094965},{features:[[8,10,6,2,-1.],[8,10,3,1,2.],[11,11,3,1,2.]],threshold:0.0102830501273274,right_val:-0.7750126719474793,left_val:0.0115505298599601},{features:[[4,11,4,6,-1.],[4,14,4,3,2.]],threshold:-0.0425072908401489,right_val:9.7261751070618629e-003,left_val:-0.8877049088478088},{features:[[17,4,2,3,-1.],[17,5,2,1,3.]],threshold:3.6155930138193071e-004,right_val:-0.1710951030254364,left_val:0.0644070133566856},{features:[[10,2,8,14,-1.],[10,2,4,7,2.],[14,9,4,7,2.]],threshold:-0.0342456288635731,right_val:-0.0471888706088066,left_val:0.2423160970211029},{features:[[12,8,8,7,-1.],[16,8,4,7,2.]],threshold:-0.1280671060085297,right_val:0.0218543000519276,left_val:-0.5486940145492554},{features:[[1,2,18,1,-1.],[7,2,6,1,3.]],threshold:0.0539183393120766,right_val:0.4826321899890900,left_val:-0.0254150591790676},{features:[[0,1,8,19,-1.],[4,1,4,19,2.]],threshold:-0.0377118103206158,right_val:-0.0888717100024223,left_val:0.1417693942785263},{features:[[0,0,8,12,-1.],[4,0,4,12,2.]],threshold:-0.2831090986728668,right_val:0.0205638203769922,left_val:-0.6492571234703064},{features:[[13,5,5,12,-1.],[13,11,5,6,2.]],threshold:-0.0119260195642710,right_val:0.0518516600131989,left_val:-0.2175675928592682},{features:[[7,9,1,4,-1.],[7,11,1,2,2.]],threshold:3.7750680348835886e-004,right_val:-0.1636016964912415,left_val:0.0723406225442886},{features:[[0,13,10,3,-1.],[5,13,5,3,2.]],threshold:0.0158659107983112,right_val:0.1645365953445435,left_val:-0.0799402371048927},{features:[[2,7,12,4,-1.],[6,7,4,4,3.]],threshold:0.0711757093667984,right_val:-0.4198819100856781,left_val:0.0315890200436115},{features:[[9,1,2,6,-1.],[9,1,1,3,2.],[10,4,1,3,2.]],threshold:5.8520520105957985e-003,right_val:-0.4860427081584930,left_val:0.0232790801674128},{features:[[6,8,3,3,-1.],[7,8,1,3,3.]],threshold:-1.3924130471423268e-003,right_val:-0.0737839266657829,left_val:0.1690838038921356},{features:[[4,11,3,1,-1.],[5,11,1,1,3.]],threshold:-1.8412459758110344e-004,right_val:-0.1031398996710777,left_val:0.1223205998539925},{features:[[5,10,1,2,-1.],[5,11,1,1,2.]],threshold:2.2130980505608022e-004,right_val:0.1633287072181702,left_val:-0.0819763764739037},{features:[[0,17,4,1,-1.],[2,17,2,1,2.]],threshold:2.0723740453831851e-004,right_val:-0.1373358070850372,left_val:0.0927302017807961},{features:[[1,16,2,1,-1.],[2,16,1,1,2.]],threshold:-3.8736319402232766e-004,right_val:0.0848383828997612,left_val:-0.2000461965799332},{features:[[7,14,2,3,-1.],[7,15,2,1,3.]],threshold:3.2468559220433235e-003,right_val:0.2236497998237610,left_val:-0.0564392581582069},{features:[[10,13,2,2,-1.],[10,14,2,1,2.]],threshold:9.3086768174543977e-004,right_val:-0.3970127999782562,left_val:0.0319265797734261},{features:[[16,11,3,1,-1.],[17,11,1,1,3.]],threshold:1.0306099429726601e-003,right_val:0.2018976062536240,left_val:-0.0601548887789249},{features:[[16,10,3,2,-1.],[17,10,1,2,3.]],threshold:-7.6027261093258858e-004,right_val:-0.0996653735637665,left_val:0.1490111947059631},{features:[[7,2,3,1,-1.],[8,2,1,1,3.]],threshold:-4.0442569297738373e-004,right_val:0.0741251483559608,left_val:-0.1911340951919556},{features:[[14,4,5,3,-1.],[14,5,5,1,3.]],threshold:-4.7783120535314083e-003,right_val:0.0365316793322563,left_val:-0.3573026955127716},{features:[[7,7,2,3,-1.],[8,7,1,3,2.]],threshold:-7.7672587940469384e-004,right_val:-0.1297499984502792,left_val:0.1024286970496178},{features:[[5,7,6,7,-1.],[8,7,3,7,2.]],threshold:-5.7417969219386578e-003,right_val:0.0701112821698189,left_val:-0.1669895052909851},{features:[[4,2,2,6,-1.],[4,2,1,3,2.],[5,5,1,3,2.]],threshold:-0.0108793200924993,right_val:-0.0292555894702673,left_val:0.4412057101726532},{features:[[4,9,2,3,-1.],[4,10,2,1,3.]],threshold:6.4163492061197758e-004,right_val:0.1068117991089821,left_val:-0.1119527965784073},{features:[[8,6,7,12,-1.],[8,10,7,4,3.]],threshold:0.0183418300002813,right_val:-0.0801891162991524,left_val:0.1638768017292023},{features:[[8,5,2,10,-1.],[8,10,2,5,2.]],threshold:-1.5051739756017923e-003,right_val:0.0615417100489140,left_val:-0.2231325954198837},{features:[[4,3,3,5,-1.],[5,3,1,5,3.]],threshold:4.4345208443701267e-003,right_val:0.2229906022548676,left_val:-0.0666461363434792},{features:[[9,12,2,1,-1.],[10,12,1,1,2.]],threshold:-1.4749550246051513e-005,right_val:-0.1037781015038490,left_val:0.1159788966178894},{features:[[3,8,3,4,-1.],[4,8,1,4,3.]],threshold:-2.6539659593254328e-003,right_val:-0.0864887833595276,left_val:0.1311603039503098},{features:[[13,14,3,3,-1.],[13,15,3,1,3.]],threshold:2.7743550017476082e-003,right_val:-0.3122506141662598,left_val:0.0410640686750412},{features:[[1,14,2,3,-1.],[2,14,1,3,2.]],threshold:1.1590829817578197e-003,right_val:-0.1741307973861694,left_val:0.0643094778060913},{features:[[5,0,2,4,-1.],[5,0,1,2,2.],[6,2,1,2,2.]],threshold:9.2315068468451500e-004,right_val:0.1443908065557480,left_val:-0.0829740017652512},{features:[[5,14,4,3,-1.],[5,15,4,1,3.]],threshold:-8.2323597744107246e-003,right_val:-0.0412291102111340,left_val:0.3038038909435272},{features:[[6,12,2,6,-1.],[6,12,1,3,2.],[7,15,1,3,2.]],threshold:3.5314110573381186e-003,right_val:-0.3309716880321503,left_val:0.0395112596452236},{features:[[6,13,2,2,-1.],[7,13,1,2,2.]],threshold:5.7490761391818523e-003,right_val:-0.5878059267997742,left_val:0.0198216605931520},{features:[[9,10,4,5,-1.],[11,10,2,5,2.]],threshold:7.8584970906376839e-003,right_val:0.2724958956241608,left_val:-0.0499522387981415},{features:[[11,3,2,1,-1.],[12,3,1,1,2.]],threshold:-1.4245980310079176e-005,right_val:-0.1322834938764572,left_val:0.0880103409290314},{features:[[6,7,2,2,-1.],[6,7,1,1,2.],[7,8,1,1,2.]],threshold:6.9364177761599422e-004,right_val:0.1746363043785095,left_val:-0.0673918873071671},{features:[[5,3,6,5,-1.],[7,3,2,5,3.]],threshold:-0.0298377498984337,right_val:0.0248714108020067,left_val:-0.5170981287956238},{features:[[5,6,4,8,-1.],[7,6,2,8,2.]],threshold:7.1383598260581493e-003,right_val:-0.1903724968433380,left_val:0.0674305036664009},{features:[[5,7,6,3,-1.],[7,7,2,3,3.]],threshold:0.0175825692713261,right_val:0.3533546924591065,left_val:-0.0366223715245724},{features:[[9,12,3,4,-1.],[10,12,1,4,3.]],threshold:-1.2527840444818139e-003,right_val:0.0612000189721584,left_val:-0.2173064947128296},{features:[[16,9,3,1,-1.],[17,9,1,1,3.]],threshold:7.4575009057298303e-004,right_val:0.1977504044771195,left_val:-0.0644676610827446},{features:[[13,14,3,3,-1.],[13,15,3,1,3.]],threshold:-7.2683871258050203e-004,right_val:0.0717199519276619,left_val:-0.1723337024450302},{features:[[7,13,4,2,-1.],[7,13,2,1,2.],[9,14,2,1,2.]],threshold:2.6301289908587933e-003,right_val:0.3306629061698914,left_val:-0.0392743386328220},{features:[[10,13,1,2,-1.],[10,14,1,1,2.]],threshold:-1.4553769688063767e-005,right_val:-0.1785241961479187,left_val:0.0796985775232315},{features:[[9,13,2,3,-1.],[9,14,2,1,3.]],threshold:-4.5518940896727145e-004,right_val:0.0756603628396988,left_val:-0.1666225045919418},{features:[[9,14,2,3,-1.],[9,15,2,1,3.]],threshold:-4.0261688991449773e-004,right_val:0.0810172930359840,left_val:-0.1421436965465546}],threshold:-1.5120370388031006},{simpleClassifiers:[{features:[[9,6,8,1,-1.],[13,6,4,1,2.]],threshold:-8.3439666777849197e-003,right_val:-0.2676644921302795,left_val:0.3194215893745422},{features:[[6,8,3,2,-1.],[6,9,3,1,2.]],threshold:7.8073277836665511e-004,right_val:0.1362888067960739,left_val:-0.3485263884067535},{features:[[5,6,2,3,-1.],[6,6,1,3,2.]],threshold:8.6505862418562174e-004,right_val:0.1741763949394226,left_val:-0.2532368004322052},{features:[[12,10,2,6,-1.],[12,13,2,3,2.]],threshold:-2.0879819930996746e-004,right_val:-0.3603850901126862,left_val:0.0885037034749985},{features:[[1,0,18,2,-1.],[7,0,6,2,3.]],threshold:-7.4667241424322128e-003,right_val:-0.1736644953489304,left_val:0.1612063050270081},{features:[[9,7,4,6,-1.],[9,7,2,3,2.],[11,10,2,3,2.]],threshold:-6.9383758818730712e-004,right_val:-0.2679347991943359,left_val:0.0968730077147484},{features:[[12,10,2,4,-1.],[13,10,1,4,2.]],threshold:-4.7926991101121530e-005,right_val:-0.2621222138404846,left_val:0.0917562469840050},{features:[[13,12,1,2,-1.],[13,13,1,1,2.]],threshold:-1.5861799474805593e-003,right_val:-7.4168378487229347e-003,left_val:-0.6140087246894836},{features:[[13,18,2,2,-1.],[14,18,1,2,2.]],threshold:4.4573731429409236e-005,right_val:0.1385574042797089,left_val:-0.1484186053276062},{features:[[15,4,2,1,-1.],[16,4,1,1,2.]],threshold:5.0104141701012850e-004,right_val:-0.2959606945514679,left_val:0.0590889416635036},{features:[[5,7,6,3,-1.],[7,7,2,3,3.]],threshold:-4.7243628650903702e-003,right_val:-0.1062470003962517,left_val:0.1709202975034714},{features:[[5,8,8,3,-1.],[9,8,4,3,2.]],threshold:3.9171050302684307e-003,right_val:-0.2277520000934601,left_val:0.0886052027344704},{features:[[6,12,6,3,-1.],[9,12,3,3,2.]],threshold:8.8675727602094412e-004,right_val:0.1195868030190468,left_val:-0.1683963984251022},{features:[[12,14,3,6,-1.],[13,14,1,6,3.]],threshold:-4.2634559795260429e-003,right_val:0.0472662709653378,left_val:-0.3366324007511139},{features:[[18,9,2,8,-1.],[18,9,1,4,2.],[19,13,1,4,2.]],threshold:6.8006501533091068e-003,right_val:0.3167530000209808,left_val:-0.0592370815575123},{features:[[5,5,7,3,-1.],[5,6,7,1,3.]],threshold:-0.0131689896807075,right_val:-0.0427148900926113,left_val:0.3716256916522980},{features:[[10,13,2,2,-1.],[10,13,1,1,2.],[11,14,1,1,2.]],threshold:7.3881301796063781e-004,right_val:-0.3095371127128601,left_val:0.0591581016778946},{features:[[5,10,1,3,-1.],[5,11,1,1,3.]],threshold:1.7939460230991244e-003,right_val:0.2045253068208695,left_val:-0.0846152827143669},{features:[[6,11,2,3,-1.],[6,12,2,1,3.]],threshold:1.6819390002638102e-003,right_val:0.2058054953813553,left_val:-0.0867037624120712},{features:[[9,13,4,2,-1.],[9,13,2,1,2.],[11,14,2,1,2.]],threshold:-2.5033599231392145e-003,right_val:0.0387078300118446,left_val:-0.4347319006919861},{features:[[7,12,1,3,-1.],[7,13,1,1,3.]],threshold:3.3658559550531209e-004,right_val:0.1523838043212891,left_val:-0.1071731001138687},{features:[[7,10,3,6,-1.],[7,12,3,2,3.]],threshold:0.0130378799512982,right_val:-0.4039565026760101,left_val:0.0446826592087746},{features:[[13,8,4,4,-1.],[13,10,4,2,2.]],threshold:1.3743729505222291e-004,right_val:0.0686434134840965,left_val:-0.2143251001834869},{features:[[8,0,12,18,-1.],[8,9,12,9,2.]],threshold:0.3717888891696930,right_val:-0.4599837958812714,left_val:0.0345029309391975},{features:[[18,9,2,10,-1.],[18,9,1,5,2.],[19,14,1,5,2.]],threshold:-7.1649150922894478e-003,right_val:-0.0545579493045807,left_val:0.2664088010787964},{features:[[14,2,3,6,-1.],[14,5,3,3,2.]],threshold:-7.1985478280112147e-004,right_val:0.0982544869184494,left_val:-0.1441569030284882},{features:[[10,0,3,14,-1.],[11,0,1,14,3.]],threshold:0.0168545395135880,right_val:-0.4522759914398193,left_val:0.0284286793321371},{features:[[6,16,8,4,-1.],[6,16,4,2,2.],[10,18,4,2,2.]],threshold:0.0136247295886278,right_val:0.2271599024534226,left_val:-0.0604742988944054},{features:[[5,3,5,12,-1.],[5,7,5,4,3.]],threshold:0.0136201400309801,right_val:-0.1810465008020401,left_val:0.0791776031255722},{features:[[4,15,6,3,-1.],[4,16,6,1,3.]],threshold:-4.4976719655096531e-003,right_val:-0.0713925734162331,left_val:0.2130009979009628},{features:[[6,15,1,3,-1.],[6,16,1,1,3.]],threshold:7.1611418388783932e-004,right_val:0.1583044975996018,left_val:-0.0942373797297478},{features:[[13,1,2,1,-1.],[14,1,1,1,2.]],threshold:7.0651061832904816e-004,right_val:-0.2915244996547699,left_val:0.0488406717777252},{features:[[2,2,18,9,-1.],[11,2,9,9,2.]],threshold:-0.3100227117538452,right_val:0.0343696512281895,left_val:-0.3851189017295837},{features:[[4,16,2,4,-1.],[4,16,1,2,2.],[5,18,1,2,2.]],threshold:4.3721711263060570e-003,right_val:0.2995291054248810,left_val:-0.0468803010880947},{features:[[15,1,3,8,-1.],[16,1,1,8,3.]],threshold:-0.0143830096349120,right_val:0.0341845192015171,left_val:-0.4546372890472412},{features:[[11,11,2,3,-1.],[11,12,2,1,3.]],threshold:-3.7763800937682390e-003,right_val:0.0216847192496061,left_val:-0.5670902729034424},{features:[[9,9,2,4,-1.],[9,11,2,2,2.]],threshold:-3.4393940586596727e-003,right_val:-0.0526400096714497,left_val:0.2818368971347809},{features:[[5,9,8,4,-1.],[5,9,4,2,2.],[9,11,4,2,2.]],threshold:-3.5846829414367676e-003,right_val:0.0522315204143524,left_val:-0.2922739982604981},{features:[[9,6,2,3,-1.],[9,7,2,1,3.]],threshold:3.6200750619173050e-003,right_val:0.2636413872241974,left_val:-0.0533787682652473},{features:[[7,9,2,3,-1.],[7,10,2,1,3.]],threshold:7.6435408554971218e-003,right_val:-0.3924233913421631,left_val:0.0368976294994354},{features:[[11,15,4,3,-1.],[11,16,4,1,3.]],threshold:3.5417820326983929e-003,right_val:-0.3560107946395874,left_val:0.0356899984180927},{features:[[8,6,2,3,-1.],[8,7,2,1,3.]],threshold:-2.4041049182415009e-003,right_val:-0.0892399623990059,left_val:0.1631305962800980},{features:[[6,8,2,3,-1.],[6,9,2,1,3.]],threshold:6.5479031763970852e-003,right_val:-0.3418768942356110,left_val:0.0367087088525295},{features:[[6,9,6,3,-1.],[8,9,2,3,3.]],threshold:-0.0123500004410744,right_val:-0.0524758212268353,left_val:0.2615779936313629},{features:[[6,9,4,2,-1.],[6,9,2,1,2.],[8,10,2,1,2.]],threshold:1.4726500012329780e-005,right_val:0.0778074637055397,left_val:-0.1786914020776749},{features:[[4,7,9,1,-1.],[7,7,3,1,3.]],threshold:-0.0215636193752289,right_val:0.0190501995384693,left_val:-0.6392611861228943},{features:[[5,7,2,6,-1.],[5,7,1,3,2.],[6,10,1,3,2.]],threshold:5.0762481987476349e-003,right_val:0.2912625074386597,left_val:-0.0516654811799526},{features:[[4,8,4,8,-1.],[4,12,4,4,2.]],threshold:-0.0595319494605064,right_val:0.0202382300049067,left_val:-0.7529155015945435},{features:[[7,0,2,19,-1.],[8,0,1,19,2.]],threshold:-0.0168084893375635,right_val:0.0259977299720049,left_val:-0.4283326864242554},{features:[[5,9,1,3,-1.],[5,10,1,1,3.]],threshold:3.4431689418852329e-003,right_val:0.2423350065946579,left_val:-0.0549125708639622},{features:[[9,5,3,1,-1.],[10,5,1,1,3.]],threshold:-1.0451589478179812e-003,right_val:0.0457485690712929,left_val:-0.2624354064464569},{features:[[16,4,3,6,-1.],[16,6,3,2,3.]],threshold:-4.8333409358747303e-004,right_val:-0.1289211064577103,left_val:0.0897919535636902},{features:[[10,15,5,3,-1.],[10,16,5,1,3.]],threshold:-4.7575961798429489e-003,right_val:0.0360205285251141,left_val:-0.3186874091625214},{features:[[13,1,5,14,-1.],[13,8,5,7,2.]],threshold:-0.1040714979171753,right_val:-0.0235981196165085,left_val:0.5139874219894409},{features:[[3,0,4,4,-1.],[3,0,2,2,2.],[5,2,2,2,2.]],threshold:9.6292654052376747e-003,right_val:0.2179042994976044,left_val:-0.0479655787348747},{features:[[6,5,4,13,-1.],[8,5,2,13,2.]],threshold:5.9226430021226406e-003,right_val:-0.1821085959672928,left_val:0.0642751306295395},{features:[[4,2,2,16,-1.],[4,2,1,8,2.],[5,10,1,8,2.]],threshold:0.0169437993317842,right_val:0.3145883083343506,left_val:-0.0375093482434750},{features:[[4,8,8,3,-1.],[8,8,4,3,2.]],threshold:-6.5468349494040012e-003,right_val:0.0905207470059395,left_val:-0.1581242978572846},{features:[[5,6,2,12,-1.],[5,12,2,6,2.]],threshold:9.4754863530397415e-003,right_val:-0.2785384953022003,left_val:0.0489958785474300},{features:[[8,7,2,4,-1.],[9,7,1,4,2.]],threshold:-4.9254479818046093e-003,right_val:-0.0456094704568386,left_val:0.3190219104290009},{features:[[13,9,5,4,-1.],[13,11,5,2,2.]],threshold:-9.4199541490525007e-004,right_val:0.0739662274718285,left_val:-0.1647298932075501},{features:[[12,0,8,2,-1.],[12,0,4,1,2.],[16,1,4,1,2.]],threshold:7.0046652108430862e-003,right_val:0.3384662866592407,left_val:-0.0363423414528370},{features:[[14,0,6,4,-1.],[14,0,3,2,2.],[17,2,3,2,2.]],threshold:-9.1483298456296325e-004,right_val:-0.1120643988251686,left_val:0.1046098992228508},{features:[[4,9,6,2,-1.],[6,9,2,2,3.]],threshold:-1.8404760339763016e-004,right_val:-0.0876273736357689,left_val:0.1421570926904678},{features:[[13,1,2,1,-1.],[14,1,1,1,2.]],threshold:-3.1692520133219659e-004,right_val:0.0700968429446220,left_val:-0.1606785058975220},{features:[[0,0,12,3,-1.],[6,0,6,3,2.]],threshold:0.0231080092489719,right_val:0.2078001946210861,left_val:-0.0537845008075237},{features:[[5,12,3,3,-1.],[6,12,1,3,3.]],threshold:6.3212551176548004e-003,right_val:-0.3837850093841553,left_val:0.0293422397226095},{features:[[5,11,4,3,-1.],[5,12,4,1,3.]],threshold:7.3698158375918865e-003,right_val:0.2652654945850372,left_val:-0.0416256897151470},{features:[[5,13,2,4,-1.],[5,13,1,2,2.],[6,15,1,2,2.]],threshold:3.3730969298630953e-003,right_val:-0.3013829886913300,left_val:0.0377533212304115},{features:[[4,11,3,3,-1.],[4,12,3,1,3.]],threshold:-6.4016957767307758e-003,right_val:-0.0545513406395912,left_val:0.2183986008167267},{features:[[1,8,6,2,-1.],[1,9,6,1,2.]],threshold:0.0135539202019572,right_val:-0.4360117018222809,left_val:0.0281212609261274},{features:[[6,8,4,12,-1.],[6,12,4,4,3.]],threshold:-6.7636291496455669e-003,right_val:0.0673396587371826,left_val:-0.1632225066423416},{features:[[7,14,6,4,-1.],[7,14,3,2,2.],[10,16,3,2,2.]],threshold:-1.3078070478513837e-003,right_val:-0.1009631976485252,left_val:0.1231539994478226},{features:[[8,16,8,4,-1.],[8,16,4,2,2.],[12,18,4,2,2.]],threshold:-7.6282368972897530e-003,right_val:-0.0504607111215591,left_val:0.2516534924507141},{features:[[5,10,10,6,-1.],[5,12,10,2,3.]],threshold:7.9994397237896919e-003,right_val:-0.1887779980897903,left_val:0.0730206519365311},{features:[[6,13,1,3,-1.],[6,14,1,1,3.]],threshold:-3.1321209389716387e-003,right_val:-0.0432768389582634,left_val:0.2765319943428040},{features:[[3,11,4,6,-1.],[3,13,4,2,3.]],threshold:-0.0409313105046749,right_val:0.0186009202152491,left_val:-0.6551824808120728},{features:[[10,14,6,3,-1.],[10,15,6,1,3.]],threshold:7.0344978012144566e-003,right_val:-0.4859581887722015,left_val:0.0219147708266974},{features:[[3,15,4,2,-1.],[5,15,2,2,2.]],threshold:-2.5299859698861837e-003,right_val:-0.0805664733052254,left_val:0.1403076946735382},{features:[[3,14,4,3,-1.],[5,14,2,3,2.]],threshold:3.8867890834808350e-003,right_val:0.1683240979909897,left_val:-0.0890756994485855},{features:[[1,2,1,2,-1.],[1,3,1,1,2.]],threshold:3.8210590719245374e-004,right_val:-0.1859952956438065,left_val:0.0652008727192879},{features:[[0,12,8,4,-1.],[4,12,4,4,2.]],threshold:0.1095478981733322,right_val:-0.8690835833549500,left_val:0.0150360204279423},{features:[[1,2,1,2,-1.],[1,3,1,1,2.]],threshold:-1.4177490083966404e-004,right_val:0.0790501534938812,left_val:-0.1466926932334900},{features:[[5,11,1,3,-1.],[5,12,1,1,3.]],threshold:2.0990408957004547e-003,right_val:0.2304524928331375,left_val:-0.0464896783232689},{features:[[10,19,2,1,-1.],[11,19,1,1,2.]],threshold:-2.3089480237103999e-004,right_val:0.0697731003165245,left_val:-0.1678400933742523},{features:[[6,6,4,4,-1.],[6,6,2,2,2.],[8,8,2,2,2.]],threshold:-4.3103471398353577e-004,right_val:-0.1293924003839493,left_val:0.0817587599158287},{features:[[6,3,1,2,-1.],[6,4,1,1,2.]],threshold:-2.9572288622148335e-004,right_val:0.0584200806915760,left_val:-0.1906823068857193},{features:[[0,4,10,2,-1.],[5,4,5,2,2.]],threshold:-4.0046018548309803e-003,right_val:-0.0815996229648590,left_val:0.1294852942228317},{features:[[4,5,2,1,-1.],[5,5,1,1,2.]],threshold:1.4935520084691234e-005,right_val:0.0986640229821205,left_val:-0.1336472034454346},{features:[[0,12,2,1,-1.],[1,12,1,1,2.]],threshold:5.7824450777843595e-004,right_val:-0.1831808984279633,left_val:0.0590956397354603},{features:[[1,4,6,11,-1.],[3,4,2,11,3.]],threshold:0.0132513204589486,right_val:0.1563598960638046,left_val:-0.0714886710047722},{features:[[6,4,2,1,-1.],[7,4,1,1,2.]],threshold:7.1273561843554489e-006,right_val:0.0977525115013123,left_val:-0.1228308975696564},{features:[[7,0,1,6,-1.],[7,2,1,2,3.]],threshold:1.4193489914759994e-003,right_val:0.1370157003402710,left_val:-0.0816967487335205},{features:[[7,0,8,4,-1.],[7,2,8,2,2.]],threshold:-8.0165416002273560e-003,right_val:-0.0565270408987999,left_val:0.2469722926616669},{features:[[13,6,2,2,-1.],[13,7,2,1,2.]],threshold:-2.3803471121937037e-003,right_val:0.0345325507223606,left_val:-0.3790158927440643},{features:[[16,15,2,2,-1.],[16,15,1,1,2.],[17,16,1,1,2.]],threshold:-4.8633730039000511e-003,right_val:-0.0192961990833282,left_val:0.6544101238250732},{features:[[11,12,1,2,-1.],[11,13,1,1,2.]],threshold:-1.4388219824468251e-005,right_val:-0.1439446061849594,left_val:0.0751018822193146},{features:[[4,4,5,2,-1.],[4,5,5,1,2.]],threshold:1.4798780284763779e-005,right_val:0.0962138101458550,left_val:-0.1080738976597786},{features:[[4,3,3,9,-1.],[4,6,3,3,3.]],threshold:0.0241761393845081,right_val:-0.4070847928524017,left_val:0.0269836802035570},{features:[[6,7,2,3,-1.],[7,7,1,3,2.]],threshold:-3.9851912297308445e-003,right_val:-0.0541703104972839,left_val:0.2178670018911362},{features:[[4,8,6,1,-1.],[7,8,3,1,2.]],threshold:-2.5377580896019936e-003,right_val:0.0880592390894890,left_val:-0.1531459987163544},{features:[[3,8,12,5,-1.],[9,8,6,5,2.]],threshold:2.1663319785147905e-003,right_val:-0.1203925013542175,left_val:0.1025272011756897},{features:[[9,8,1,3,-1.],[9,9,1,1,3.]],threshold:3.5593929351307452e-004,right_val:0.1322889029979706,left_val:-0.0822677686810493},{features:[[9,9,6,1,-1.],[12,9,3,1,2.]],threshold:1.1394560569897294e-003,right_val:0.1569389998912811,left_val:-0.0863934904336929},{features:[[13,7,7,6,-1.],[13,9,7,2,3.]],threshold:0.0555638186633587,right_val:-0.7047374248504639,left_val:0.0171081107109785},{features:[[0,2,20,18,-1.],[10,2,10,18,2.]],threshold:0.5551459193229675,right_val:-0.6991689205169678,left_val:0.0133453896269202},{features:[[12,5,6,3,-1.],[12,6,6,1,3.]],threshold:-4.6235490590333939e-003,right_val:0.0395153500139713,left_val:-0.2398367971181870},{features:[[8,8,3,2,-1.],[8,9,3,1,2.]],threshold:-4.5803869143128395e-003,right_val:-0.0264305397868156,left_val:0.4290086925029755},{features:[[4,9,11,6,-1.],[4,11,11,2,3.]],threshold:7.0851319469511509e-003,right_val:-0.1071150973439217,left_val:0.1123107969760895},{features:[[7,7,7,6,-1.],[7,10,7,3,2.]],threshold:-4.0524810901843011e-004,right_val:0.0466700196266174,left_val:-0.2574095129966736},{features:[[15,7,2,8,-1.],[15,7,1,4,2.],[16,11,1,4,2.]],threshold:-4.9121538177132607e-003,right_val:-0.0439662411808968,left_val:0.2712928056716919},{features:[[4,10,2,6,-1.],[4,12,2,2,3.]],threshold:-0.0193480998277664,right_val:0.0291767697781324,left_val:-0.4064385890960693},{features:[[7,13,2,2,-1.],[7,13,1,1,2.],[8,14,1,1,2.]],threshold:-1.3842330081388354e-003,right_val:-0.0502275489270687,left_val:0.2353720963001251},{features:[[7,2,3,4,-1.],[8,2,1,4,3.]],threshold:6.2752598896622658e-003,right_val:-0.3991320133209229,left_val:0.0281135700643063},{features:[[7,3,2,3,-1.],[8,3,1,3,2.]],threshold:1.4853129869152326e-005,right_val:0.1020639017224312,left_val:-0.1075062975287437},{features:[[5,9,3,1,-1.],[6,9,1,1,3.]],threshold:-1.1780710192397237e-003,right_val:-0.0589980408549309,left_val:0.1811279058456421},{features:[[14,6,3,8,-1.],[15,6,1,8,3.]],threshold:-0.0321663916110992,right_val:0.0118171395733953,left_val:-0.9813510179519653},{features:[[4,10,2,6,-1.],[4,13,2,3,2.]],threshold:2.8749080374836922e-003,right_val:-0.2065003961324692,left_val:0.0507743693888187},{features:[[0,17,10,3,-1.],[0,18,10,1,3.]],threshold:-3.5098160151392221e-003,right_val:-0.0780067369341850,left_val:0.1435403972864151},{features:[[5,18,7,2,-1.],[5,19,7,1,2.]],threshold:-7.2203627787530422e-003,right_val:-0.0461761802434921,left_val:0.2385395020246506},{features:[[13,12,1,3,-1.],[13,13,1,1,3.]],threshold:2.0837699994444847e-003,right_val:-0.5094562172889710,left_val:0.0228014606982470},{features:[[9,2,4,16,-1.],[9,2,2,8,2.],[11,10,2,8,2.]],threshold:0.0361754000186920,right_val:-0.6134936213493347,left_val:0.0147347403690219},{features:[[6,7,2,3,-1.],[6,8,2,1,3.]],threshold:7.5545758008956909e-003,right_val:-0.5886300802230835,left_val:0.0161661300808191},{features:[[9,8,2,4,-1.],[9,10,2,2,2.]],threshold:-2.6058950461447239e-003,right_val:-0.0346243008971214,left_val:0.3643600940704346},{features:[[18,4,2,3,-1.],[18,5,2,1,3.]],threshold:6.4669351559132338e-004,right_val:-0.1895352005958557,left_val:0.0634447336196899},{features:[[16,10,2,2,-1.],[16,10,1,1,2.],[17,11,1,1,2.]],threshold:-3.1747641041874886e-003,right_val:-0.0269687902182341,left_val:0.4287785887718201},{features:[[14,2,6,6,-1.],[14,4,6,2,3.]],threshold:-0.0238397307693958,right_val:0.0336885005235672,left_val:-0.3687137067317963},{features:[[16,11,3,1,-1.],[17,11,1,1,3.]],threshold:1.1973649961873889e-003,right_val:0.1917916983366013,left_val:-0.0628985092043877},{features:[[17,10,2,1,-1.],[18,10,1,1,2.]],threshold:4.4593929487746209e-005,right_val:0.1215995997190476,left_val:-0.1102266013622284},{features:[[16,8,2,4,-1.],[17,8,1,4,2.]],threshold:9.1575905680656433e-003,right_val:-0.4992873072624207,left_val:0.0253538899123669},{features:[[11,15,6,3,-1.],[11,16,6,1,3.]],threshold:2.3933469783514738e-003,right_val:-0.2268545031547546,left_val:0.0482820905745029},{features:[[3,7,3,4,-1.],[4,7,1,4,3.]],threshold:-1.1994830565527081e-003,right_val:-0.1066953986883164,left_val:0.1088657006621361},{features:[[3,5,3,5,-1.],[4,5,1,5,3.]],threshold:2.1603968925774097e-003,right_val:0.1650795936584473,left_val:-0.0760766267776489},{features:[[2,10,6,1,-1.],[5,10,3,1,2.]],threshold:-0.0165563393384218,right_val:0.0207116492092609,left_val:-0.5416721105575562},{features:[[12,0,4,2,-1.],[14,0,2,2,2.]],threshold:-8.8350269943475723e-003,right_val:0.0288704000413418,left_val:-0.3671090900897980},{features:[[9,14,1,2,-1.],[9,15,1,1,2.]],threshold:-1.4592399566026870e-005,right_val:-0.1362261027097702,left_val:0.0787240713834763},{features:[[15,12,5,6,-1.],[15,14,5,2,3.]],threshold:-1.4897900400683284e-003,right_val:-0.1010489985346794,left_val:0.1143611967563629},{features:[[4,13,10,4,-1.],[4,15,10,2,2.]],threshold:-3.9764028042554855e-003,right_val:0.1046606004238129,left_val:-0.1025056019425392},{features:[[7,16,6,4,-1.],[7,16,3,2,2.],[10,18,3,2,2.]],threshold:-7.2657042182981968e-003,right_val:-0.0451555810868740,left_val:0.2298226952552795},{features:[[9,16,7,3,-1.],[9,17,7,1,3.]],threshold:8.9115025475621223e-003,right_val:-0.4423500895500183,left_val:0.0296811591833830},{features:[[4,8,2,2,-1.],[4,8,1,1,2.],[5,9,1,1,2.]],threshold:-1.8145949579775333e-003,right_val:-0.0468561202287674,left_val:0.2391141951084137},{features:[[0,17,20,2,-1.],[10,17,10,2,2.]],threshold:-0.0375463217496872,right_val:0.0615337491035461,left_val:-0.1856968998908997},{features:[[4,8,3,1,-1.],[5,8,1,1,3.]],threshold:-1.0010029654949903e-003,right_val:-0.0869904831051826,left_val:0.1436135023832321},{features:[[4,7,2,6,-1.],[4,7,1,3,2.],[5,10,1,3,2.]],threshold:-3.7357229739427567e-003,right_val:-0.0611675307154655,left_val:0.2024545967578888},{features:[[11,11,1,2,-1.],[11,12,1,1,2.]],threshold:-1.4672010365757160e-005,right_val:-0.1303700953722000,left_val:0.0881808698177338},{features:[[10,13,5,2,-1.],[10,14,5,1,2.]],threshold:9.4379713118541986e-005,right_val:-0.2002536952495575,left_val:0.0556265302002430},{features:[[8,16,3,3,-1.],[8,17,3,1,3.]],threshold:1.5706509293522686e-004,right_val:0.1151885017752647,left_val:-0.0983358770608902},{features:[[9,18,3,1,-1.],[10,18,1,1,3.]],threshold:-8.1810058327391744e-004,right_val:0.0528804101049900,left_val:-0.2170155048370361},{features:[[8,6,11,12,-1.],[8,10,11,4,3.]],threshold:-0.0516892597079277,right_val:-0.0187611002475023,left_val:0.5771527886390686},{features:[[2,4,13,12,-1.],[2,10,13,6,2.]],threshold:-0.0907194092869759,right_val:0.0367411300539970,left_val:-0.3627884984016419},{features:[[0,15,10,4,-1.],[0,15,5,2,2.],[5,17,5,2,2.]],threshold:-0.0109590403735638,right_val:-0.0697256475687027,left_val:0.1678718030452728},{features:[[4,8,6,2,-1.],[7,8,3,2,2.]],threshold:3.7122920621186495e-003,right_val:-0.2056706994771957,left_val:0.0603603087365627},{features:[[10,1,6,2,-1.],[12,1,2,2,3.]],threshold:-0.0193157307803631,right_val:0.0197053197771311,left_val:-0.5739740133285523},{features:[[7,8,6,7,-1.],[9,8,2,7,3.]],threshold:-0.0270511899143457,right_val:-0.0360842905938625,left_val:0.3498320877552033},{features:[[9,9,6,2,-1.],[11,9,2,2,3.]],threshold:0.0217429101467133,right_val:-0.6531919836997986,left_val:0.0227670799940825},{features:[[3,14,15,4,-1.],[8,14,5,4,3.]],threshold:0.0996085926890373,right_val:0.3827111124992371,left_val:-0.0312595590949059},{features:[[7,3,2,14,-1.],[7,10,2,7,2.]],threshold:4.6517839655280113e-003,right_val:-0.1239601969718933,left_val:0.1008803024888039},{features:[[11,14,1,2,-1.],[11,15,1,1,2.]],threshold:-1.4784580343984999e-005,right_val:-0.1557302027940750,left_val:0.0796834826469421},{features:[[5,11,1,3,-1.],[5,12,1,1,3.]],threshold:-1.6718909610062838e-003,right_val:-0.0677338093519211,left_val:0.1707732975482941},{features:[[11,14,3,3,-1.],[11,15,3,1,3.]],threshold:1.4456630196946207e-005,right_val:0.1111683025956154,left_val:-0.1010603010654450},{features:[[10,7,9,4,-1.],[13,7,3,4,3.]],threshold:-2.7084909379482269e-003,right_val:-0.1088062971830368,left_val:0.1131272017955780}],threshold:-1.4741109609603882},{simpleClassifiers:[{features:[[11,6,6,5,-1.],[14,6,3,5,2.]],threshold:-0.0226868595927954,right_val:-0.2735877931118012,left_val:0.2731691002845764},{features:[[8,9,1,2,-1.],[8,10,1,1,2.]],threshold:4.2952829971909523e-004,right_val:0.1574072986841202,left_val:-0.2510795891284943},{features:[[16,3,1,10,-1.],[16,8,1,5,2.]],threshold:2.5115790776908398e-003,right_val:0.1566022932529450,left_val:-0.2200254946947098},{features:[[6,11,10,4,-1.],[6,13,10,2,2.]],threshold:-6.3958892133086920e-004,right_val:-0.3827897906303406,left_val:0.0726099386811256},{features:[[5,7,2,2,-1.],[6,7,1,2,2.]],threshold:2.6575280353426933e-003,right_val:0.2341423928737640,left_val:-0.1152343973517418},{features:[[1,6,6,11,-1.],[4,6,3,11,2.]],threshold:-0.0759164094924927,right_val:-0.0826222673058510,left_val:0.3251757919788361},{features:[[6,8,3,2,-1.],[6,9,3,1,2.]],threshold:1.4966350136091933e-005,right_val:0.0523535907268524,left_val:-0.3564029037952423},{features:[[10,15,1,2,-1.],[10,16,1,1,2.]],threshold:-1.4678399566037115e-005,right_val:-0.2245268970727921,left_val:0.1019821986556053},{features:[[8,0,12,1,-1.],[14,0,6,1,2.]],threshold:5.2314779168227687e-005,right_val:0.1010707989335060,left_val:-0.1775784939527512},{features:[[5,3,2,2,-1.],[6,3,1,2,2.]],threshold:1.4088390162214637e-004,right_val:0.1387276053428650,left_val:-0.1513977050781250},{features:[[11,6,6,5,-1.],[14,6,3,5,2.]],threshold:-0.0234117899090052,right_val:0.1070213988423348,left_val:-0.1643598973751068},{features:[[6,12,3,3,-1.],[6,13,3,1,3.]],threshold:2.3284659255295992e-003,right_val:0.2233397066593170,left_val:-0.0809507295489311},{features:[[10,10,3,3,-1.],[11,10,1,3,3.]],threshold:-3.3611140679568052e-003,right_val:0.0344890393316746,left_val:-0.4432994127273560},{features:[[6,13,2,2,-1.],[6,14,2,1,2.]],threshold:5.8458978310227394e-004,right_val:0.1721502989530563,left_val:-0.1108347028493881},{features:[[4,2,16,8,-1.],[12,2,8,8,2.]],threshold:-3.3180968603119254e-004,right_val:-0.2632124125957489,left_val:0.0691525936126709},{features:[[10,12,2,2,-1.],[10,12,1,1,2.],[11,13,1,1,2.]],threshold:-8.8515877723693848e-004,right_val:0.0432582013309002,left_val:-0.3476473093032837},{features:[[10,7,2,2,-1.],[11,7,1,2,2.]],threshold:1.4169749920256436e-004,right_val:0.1014982014894486,left_val:-0.1460068970918655},{features:[[13,13,1,3,-1.],[13,14,1,1,3.]],threshold:1.4851680025458336e-003,right_val:-0.4178613126277924,left_val:0.0299831703305244},{features:[[13,13,2,3,-1.],[13,14,2,1,3.]],threshold:-7.5329327955842018e-004,right_val:0.0645342096686363,left_val:-0.2155763953924179},{features:[[1,13,6,4,-1.],[4,13,3,4,2.]],threshold:0.0142605397850275,right_val:0.1951199024915695,left_val:-0.0800133273005486},{features:[[10,13,2,1,-1.],[11,13,1,1,2.]],threshold:-1.4687920156575274e-005,right_val:-0.1350235044956207,left_val:0.0971216633915901},{features:[[10,6,2,10,-1.],[10,6,1,5,2.],[11,11,1,5,2.]],threshold:-9.8925074562430382e-003,right_val:0.0293358005583286,left_val:-0.5103526115417481},{features:[[16,11,2,2,-1.],[16,11,1,1,2.],[17,12,1,1,2.]],threshold:-1.8316040514037013e-003,right_val:-0.0450140200555325,left_val:0.3267607986927033},{features:[[16,12,3,1,-1.],[17,12,1,1,3.]],threshold:8.6495577124878764e-004,right_val:0.1876493990421295,left_val:-0.0778365135192871},{features:[[9,5,7,12,-1.],[9,9,7,4,3.]],threshold:0.1490266025066376,right_val:-0.6245067715644836,left_val:0.0195689909160137},{features:[[4,1,10,18,-1.],[4,1,5,9,2.],[9,10,5,9,2.]],threshold:-0.0171267203986645,right_val:0.0730486810207367,left_val:-0.1814144998788834},{features:[[17,12,2,2,-1.],[17,12,1,1,2.],[18,13,1,1,2.]],threshold:-1.7061959952116013e-003,right_val:-0.0441520288586617,left_val:0.3123683929443359},{features:[[12,5,6,2,-1.],[12,6,6,1,2.]],threshold:3.8261809386312962e-003,right_val:-0.2933003008365631,left_val:0.0515185296535492},{features:[[4,7,5,2,-1.],[4,8,5,1,2.]],threshold:3.8093670736998320e-003,right_val:0.1757443994283676,left_val:-0.0767072066664696},{features:[[7,3,1,2,-1.],[7,4,1,1,2.]],threshold:-3.4228331060148776e-004,right_val:0.0617266409099102,left_val:-0.2345802038908005},{features:[[6,0,7,6,-1.],[6,3,7,3,2.]],threshold:-0.0416978709399700,right_val:-0.0368928201496601,left_val:0.4392912983894348},{features:[[13,11,2,8,-1.],[13,11,1,4,2.],[14,15,1,4,2.]],threshold:1.9080520723946393e-004,right_val:0.0971686616539955,left_val:-0.1348893940448761},{features:[[8,7,4,2,-1.],[10,7,2,2,2.]],threshold:2.6400710339657962e-004,right_val:0.0732702314853668,left_val:-0.1653952002525330},{features:[[4,1,2,4,-1.],[4,1,1,2,2.],[5,3,1,2,2.]],threshold:7.9839164391160011e-003,right_val:0.3653585910797119,left_val:-0.0335273407399654},{features:[[4,0,2,8,-1.],[4,0,1,4,2.],[5,4,1,4,2.]],threshold:-0.0142674101516604,right_val:-0.0271544195711613,left_val:0.4673924148082733},{features:[[6,3,2,1,-1.],[7,3,1,1,2.]],threshold:-9.4726070528849959e-005,right_val:0.0876573026180267,left_val:-0.1501774936914444},{features:[[14,12,1,3,-1.],[14,13,1,1,3.]],threshold:-2.9629279742948711e-004,right_val:0.0738632306456566,left_val:-0.1619454026222229},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:2.3301010951399803e-003,right_val:0.1577855050563812,left_val:-0.0799251571297646},{features:[[5,11,2,2,-1.],[5,12,2,1,2.]],threshold:3.6623800406232476e-004,right_val:0.2049566954374313,left_val:-0.0870193466544151},{features:[[5,1,4,15,-1.],[5,6,4,5,3.]],threshold:-0.0444996692240238,right_val:0.0456480011343956,left_val:-0.2989141047000885},{features:[[11,5,4,14,-1.],[11,5,2,7,2.],[13,12,2,7,2.]],threshold:-6.0768700204789639e-003,right_val:-0.0535807088017464,left_val:0.2374615073204041},{features:[[9,18,3,1,-1.],[10,18,1,1,3.]],threshold:6.6064862767234445e-004,right_val:-0.2356991022825241,left_val:0.0592214390635490},{features:[[4,10,5,6,-1.],[4,12,5,2,3.]],threshold:7.4699260294437408e-003,right_val:-0.2338664978742600,left_val:0.0513040497899055},{features:[[5,13,3,3,-1.],[5,14,3,1,3.]],threshold:-6.7128022201359272e-003,right_val:-0.0500311218202114,left_val:0.2706164121627808},{features:[[8,1,3,5,-1.],[9,1,1,5,3.]],threshold:4.6589970588684082e-003,right_val:-0.3073048889636993,left_val:0.0449322015047073},{features:[[4,7,3,2,-1.],[5,7,1,2,3.]],threshold:4.9815201200544834e-003,right_val:0.2685301005840302,left_val:-0.0482554100453854},{features:[[6,14,3,3,-1.],[7,14,1,3,3.]],threshold:9.9244136363267899e-003,right_val:-0.7035238742828369,left_val:0.0194467697292566},{features:[[7,13,2,3,-1.],[7,14,2,1,3.]],threshold:6.1988402158021927e-003,right_val:0.3546040058135986,left_val:-0.0351072698831558},{features:[[4,3,2,9,-1.],[4,6,2,3,3.]],threshold:8.8433362543582916e-003,right_val:-0.2748593091964722,left_val:0.0453283898532391},{features:[[4,8,3,2,-1.],[4,9,3,1,2.]],threshold:0.0111105600371957,right_val:-0.5017204284667969,left_val:0.0223914198577404},{features:[[10,10,2,2,-1.],[10,11,2,1,2.]],threshold:-6.9408811395987868e-004,right_val:-0.0638494268059731,left_val:0.1707949042320252},{features:[[7,8,12,6,-1.],[7,8,6,3,2.],[13,11,6,3,2.]],threshold:8.0377031117677689e-003,right_val:-0.1641612946987152,left_val:0.0889374613761902},{features:[[14,10,3,2,-1.],[14,11,3,1,2.]],threshold:1.4750069567526225e-005,right_val:0.0969811230897903,left_val:-0.1371303051710129},{features:[[5,16,6,2,-1.],[5,17,6,1,2.]],threshold:1.2381490087136626e-003,right_val:0.1655137985944748,left_val:-0.0694912225008011},{features:[[8,15,4,3,-1.],[8,16,4,1,3.]],threshold:2.6584148872643709e-004,right_val:0.1202037036418915,left_val:-0.0968036130070686},{features:[[14,9,2,2,-1.],[14,10,2,1,2.]],threshold:-5.4076651576906443e-004,right_val:0.0489878505468369,left_val:-0.2318537980318070},{features:[[8,5,2,3,-1.],[8,6,2,1,3.]],threshold:-5.1092808134853840e-003,right_val:-0.0408004708588123,left_val:0.3039175868034363},{features:[[8,5,3,3,-1.],[8,6,3,1,3.]],threshold:1.5575919533148408e-003,right_val:0.1446592956781387,left_val:-0.1015098020434380},{features:[[1,7,17,9,-1.],[1,10,17,3,3.]],threshold:0.0283960197120905,right_val:-0.0883143097162247,left_val:0.1509854048490524},{features:[[5,10,6,8,-1.],[5,14,6,4,2.]],threshold:1.5096530551090837e-003,right_val:-0.2619952857494354,left_val:0.0515897385776043},{features:[[18,1,2,2,-1.],[18,1,1,1,2.],[19,2,1,1,2.]],threshold:1.4308419777080417e-003,right_val:0.2758454084396362,left_val:-0.0454978495836258},{features:[[0,0,11,6,-1.],[0,3,11,3,2.]],threshold:0.1303036957979202,right_val:-0.5749182105064392,left_val:0.0203299894928932},{features:[[3,0,16,3,-1.],[3,1,16,1,3.]],threshold:-3.3548770006746054e-003,right_val:-0.0899374112486839,left_val:0.1228995025157929},{features:[[10,10,10,3,-1.],[10,11,10,1,3.]],threshold:0.0270948391407728,right_val:-0.7895252108573914,left_val:0.0143423900008202},{features:[[0,0,15,18,-1.],[0,9,15,9,2.]],threshold:-0.3621011078357697,right_val:0.0140213295817375,left_val:-0.6256042718887329},{features:[[15,11,2,2,-1.],[15,11,1,1,2.],[16,12,1,1,2.]],threshold:-6.6879601217806339e-004,right_val:-0.0524151995778084,left_val:0.2196612954139710},{features:[[14,12,6,3,-1.],[17,12,3,3,2.]],threshold:-0.0373892411589623,right_val:0.0257044993340969,left_val:-0.4731368124485016},{features:[[8,4,3,4,-1.],[9,4,1,4,3.]],threshold:-7.4386061169207096e-003,right_val:0.0200388804078102,left_val:-0.5291485786437988},{features:[[8,6,12,4,-1.],[12,6,4,4,3.]],threshold:0.1044311970472336,right_val:0.5159202814102173,left_val:-0.0229094605892897},{features:[[9,12,2,2,-1.],[9,13,2,1,2.]],threshold:-6.1161867051851004e-005,right_val:-0.1462540030479431,left_val:0.0770166069269180},{features:[[6,3,1,2,-1.],[6,4,1,1,2.]],threshold:6.5830379026010633e-004,right_val:-0.1556992977857590,left_val:0.0700152814388275},{features:[[4,7,2,8,-1.],[4,7,1,4,2.],[5,11,1,4,2.]],threshold:9.7367232665419579e-003,right_val:0.3275456130504608,left_val:-0.0315822400152683},{features:[[9,17,3,2,-1.],[10,17,1,2,3.]],threshold:-2.9574360232800245e-003,right_val:0.0321847200393677,left_val:-0.3424771130084992},{features:[[9,6,1,3,-1.],[9,7,1,1,3.]],threshold:1.6319820424541831e-003,right_val:0.2265644073486328,left_val:-0.0494004786014557},{features:[[6,4,1,6,-1.],[6,7,1,3,2.]],threshold:0.0138449398800731,right_val:-0.5460066795349121,left_val:0.0204766597598791},{features:[[5,6,13,6,-1.],[5,8,13,2,3.]],threshold:0.0315802991390228,right_val:0.2909148037433624,left_val:-0.0424220487475395},{features:[[6,7,4,12,-1.],[8,7,2,12,2.]],threshold:8.6624026298522949e-003,right_val:-0.2189218997955322,left_val:0.0544328987598419},{features:[[6,12,2,4,-1.],[7,12,1,4,2.]],threshold:-4.6714721247553825e-004,right_val:0.0714919120073318,left_val:-0.1820573061704636},{features:[[5,14,4,3,-1.],[5,15,4,1,3.]],threshold:4.1834521107375622e-003,right_val:0.1728577017784119,left_val:-0.0674912035465240},{features:[[10,5,3,1,-1.],[11,5,1,1,3.]],threshold:-5.3335628472268581e-003,right_val:0.0138048296794295,left_val:-0.8468174934387207},{features:[[4,15,4,3,-1.],[4,16,4,1,3.]],threshold:7.8782793134450912e-003,right_val:0.2424273043870926,left_val:-0.0481667183339596},{features:[[11,12,3,2,-1.],[12,12,1,2,3.]],threshold:3.8775329012423754e-003,right_val:-0.4976325929164887,left_val:0.0243111494928598},{features:[[11,10,8,2,-1.],[15,10,4,2,2.]],threshold:-1.6564880206715316e-004,right_val:-0.1955423057079315,left_val:0.0555463805794716},{features:[[14,18,6,2,-1.],[17,18,3,2,2.]],threshold:0.0189934000372887,right_val:0.2847271859645844,left_val:-0.0364790894091129},{features:[[7,5,3,2,-1.],[8,5,1,2,3.]],threshold:-3.4308759495615959e-003,right_val:0.0365241989493370,left_val:-0.3281300067901611},{features:[[11,8,2,1,-1.],[12,8,1,1,2.]],threshold:1.4614370229537599e-005,right_val:0.1062249019742012,left_val:-0.1010643988847733},{features:[[12,6,3,6,-1.],[12,8,3,2,3.]],threshold:0.0159789193421602,right_val:-0.3931018114089966,left_val:0.0300593990832567},{features:[[11,9,1,2,-1.],[11,10,1,1,2.]],threshold:-2.2245719446800649e-004,right_val:-0.0721516534686089,left_val:0.1858648955821991},{features:[[12,9,3,9,-1.],[13,9,1,9,3.]],threshold:0.0206159092485905,right_val:-0.7839120030403137,left_val:0.0152509901672602},{features:[[0,8,1,3,-1.],[0,9,1,1,3.]],threshold:2.8645060956478119e-004,right_val:-0.1530831009149551,left_val:0.0687455981969833},{features:[[0,8,1,3,-1.],[0,9,1,1,3.]],threshold:-5.9233439969830215e-005,right_val:0.0984484925866127,left_val:-0.1254501938819885},{features:[[3,8,2,2,-1.],[3,8,1,1,2.],[4,9,1,1,2.]],threshold:-7.6257862383499742e-004,right_val:-0.0537602193653584,left_val:0.2154624015092850},{features:[[4,6,2,6,-1.],[4,9,2,3,2.]],threshold:-1.4181639999151230e-003,right_val:0.0519821383059025,left_val:-0.1987688988447189},{features:[[4,9,2,9,-1.],[4,12,2,3,3.]],threshold:-0.0447168685495853,right_val:0.0129064498469234,left_val:-0.7550839781761169},{features:[[7,13,2,2,-1.],[7,13,1,1,2.],[8,14,1,1,2.]],threshold:-1.3735699467360973e-003,right_val:-0.0513946898281574,left_val:0.2200313955545425},{features:[[3,6,10,6,-1.],[3,6,5,3,2.],[8,9,5,3,2.]],threshold:-0.0153527799993753,right_val:0.0537811703979969,left_val:-0.2142284959554672},{features:[[9,9,4,6,-1.],[11,9,2,6,2.]],threshold:0.0138174397870898,right_val:0.2939909100532532,left_val:-0.0351581200957298},{features:[[2,12,14,3,-1.],[9,12,7,3,2.]],threshold:0.0879816263914108,right_val:-0.7205359935760498,left_val:0.0166887491941452},{features:[[0,0,11,18,-1.],[0,9,11,9,2.]],threshold:0.4048612117767334,right_val:-0.8272560834884644,left_val:9.4695771113038063e-003},{features:[[4,18,4,2,-1.],[4,18,2,1,2.],[6,19,2,1,2.]],threshold:1.9231239566579461e-003,right_val:0.1769602000713348,left_val:-0.0580163188278675},{features:[[7,13,4,6,-1.],[7,13,2,3,2.],[9,16,2,3,2.]],threshold:-4.0756969247013330e-004,right_val:-0.1263372004032135,left_val:0.0876009464263916},{features:[[8,17,3,1,-1.],[9,17,1,1,3.]],threshold:-2.3862780071794987e-003,right_val:0.0271830298006535,left_val:-0.4008556902408600},{features:[[5,14,8,6,-1.],[5,14,4,3,2.],[9,17,4,3,2.]],threshold:0.0562350898981094,right_val:0.7381873726844788,left_val:-0.0175413191318512},{features:[[7,12,2,3,-1.],[7,13,2,1,3.]],threshold:4.9810402560979128e-004,right_val:0.1269799023866653,left_val:-0.0764870718121529},{features:[[14,4,4,2,-1.],[14,4,2,1,2.],[16,5,2,1,2.]],threshold:5.3285917965695262e-004,right_val:-0.1760033965110779,left_val:0.0595963001251221},{features:[[7,13,2,3,-1.],[7,14,2,1,3.]],threshold:5.9949647402390838e-004,right_val:0.1300280988216400,left_val:-0.0825090631842613},{features:[[7,14,4,2,-1.],[7,14,2,1,2.],[9,15,2,1,2.]],threshold:-2.0725550712086260e-004,right_val:-0.1172676980495453,left_val:0.0933742225170136},{features:[[10,14,2,6,-1.],[10,16,2,2,3.]],threshold:8.1314949784427881e-004,right_val:0.1470173001289368,left_val:-0.0800631269812584},{features:[[9,6,9,1,-1.],[12,6,3,1,3.]],threshold:-3.4973450237885118e-004,right_val:-0.1088170036673546,left_val:0.1105792969465256},{features:[[2,5,18,7,-1.],[11,5,9,7,2.]],threshold:-0.2144889980554581,right_val:0.0417115315794945,left_val:-0.3170115947723389},{features:[[18,6,1,2,-1.],[18,7,1,1,2.]],threshold:5.9010740369558334e-004,right_val:-0.2351225018501282,left_val:0.0462803281843662},{features:[[4,14,14,6,-1.],[4,17,14,3,2.]],threshold:-0.1209399998188019,right_val:0.0149820400401950,left_val:-0.6895709037780762},{features:[[8,0,6,20,-1.],[10,0,2,20,3.]],threshold:0.1018135026097298,right_val:-0.7119964957237244,left_val:0.0112981395795941},{features:[[12,0,8,18,-1.],[12,9,8,9,2.]],threshold:0.3520832955837250,right_val:-0.6757240891456604,left_val:0.0129445102065802},{features:[[12,5,2,1,-1.],[13,5,1,1,2.]],threshold:-1.4602140254282858e-005,right_val:-0.1428806036710739,left_val:0.0695503130555153},{features:[[0,6,6,13,-1.],[3,6,3,13,2.]],threshold:-0.2321286052465439,right_val:0.0113943303003907,left_val:-0.7528740167617798},{features:[[3,15,3,4,-1.],[4,15,1,4,3.]],threshold:-1.4764709630981088e-003,right_val:-0.0854709073901176,left_val:0.1354779005050659},{features:[[3,13,3,6,-1.],[4,13,1,6,3.]],threshold:9.9324379116296768e-003,right_val:0.2458269000053406,left_val:-0.0487588010728359},{features:[[3,11,9,2,-1.],[6,11,3,2,3.]],threshold:-0.0268572904169559,right_val:0.0250822398811579,left_val:-0.4397571086883545},{features:[[0,11,6,8,-1.],[3,11,3,8,2.]],threshold:-7.3618912138044834e-003,right_val:-0.0972262099385262,left_val:0.1238470003008843},{features:[[16,0,3,7,-1.],[17,0,1,7,3.]],threshold:-0.0197857301682234,right_val:0.0234819799661636,left_val:-0.5093231797218323},{features:[[16,1,2,6,-1.],[16,1,1,3,2.],[17,4,1,3,2.]],threshold:-1.4635100342275109e-005,right_val:-0.1214566975831986,left_val:0.0940439179539680},{features:[[3,7,6,10,-1.],[3,7,3,5,2.],[6,12,3,5,2.]],threshold:-0.0540670305490494,right_val:0.0195001401007175,left_val:-0.5458620786666870},{features:[[2,0,6,7,-1.],[5,0,3,7,2.]],threshold:0.0115321697667241,right_val:0.1376397013664246,left_val:-0.0764091536402702},{features:[[1,2,12,2,-1.],[5,2,4,2,3.]],threshold:-4.4358540326356888e-003,right_val:-0.0917192995548248,left_val:0.1235975995659828},{features:[[6,4,1,2,-1.],[6,5,1,1,2.]],threshold:8.3216017810627818e-004,right_val:-0.2044076025485992,left_val:0.0636590719223022},{features:[[0,14,8,6,-1.],[4,14,4,6,2.]],threshold:-0.1250396966934204,right_val:0.0271991007030010,left_val:-0.4152475893497467},{features:[[3,11,9,3,-1.],[6,11,3,3,3.]],threshold:0.0496183186769485,right_val:-0.6166685223579407,left_val:0.0159551091492176},{features:[[4,14,2,2,-1.],[4,14,1,1,2.],[5,15,1,1,2.]],threshold:-3.0613599810749292e-003,right_val:-0.0334494486451149,left_val:0.3666220903396606},{features:[[11,2,3,2,-1.],[12,2,1,2,3.]],threshold:3.5273379180580378e-003,right_val:-0.3847880959510803,left_val:0.0317579805850983},{features:[[18,5,2,6,-1.],[18,5,1,3,2.],[19,8,1,3,2.]],threshold:-6.6726570948958397e-003,right_val:-0.0344086810946465,left_val:0.3209584057331085},{features:[[0,5,1,2,-1.],[0,6,1,1,2.]],threshold:-2.5795500259846449e-003,right_val:0.0285621304064989,left_val:-0.3787052929401398},{features:[[8,4,6,1,-1.],[11,4,3,1,2.]],threshold:7.8417789191007614e-003,right_val:0.5170410871505737,left_val:-0.0204797703772783},{features:[[4,5,2,3,-1.],[5,5,1,3,2.]],threshold:3.1101319473236799e-004,right_val:0.0972045212984085,left_val:-0.1080913990736008},{features:[[1,3,6,4,-1.],[3,3,2,4,3.]],threshold:2.6113479398190975e-003,right_val:0.1469120979309082,left_val:-0.0817704275250435},{features:[[12,5,6,1,-1.],[14,5,2,1,3.]],threshold:7.3472261428833008e-003,right_val:-0.4302506148815155,left_val:0.0251312591135502},{features:[[6,9,3,3,-1.],[6,10,3,1,3.]],threshold:1.3528259296435863e-004,right_val:0.0675846785306931,left_val:-0.1475106030702591},{features:[[4,3,2,2,-1.],[4,4,2,1,2.]],threshold:-5.1026898290729150e-005,right_val:0.0843330472707748,left_val:-0.1216135993599892},{features:[[8,7,3,3,-1.],[8,8,3,1,3.]],threshold:1.1552199721336365e-003,right_val:0.1977366060018539,left_val:-0.0546638295054436},{features:[[5,5,10,14,-1.],[5,5,5,7,2.],[10,12,5,7,2.]],threshold:-0.0829317122697830,right_val:0.0205823592841625,left_val:-0.5192332863807678},{features:[[16,5,2,6,-1.],[16,7,2,2,3.]],threshold:-4.6260739327408373e-004,right_val:-0.1172529980540276,left_val:0.0855882689356804},{features:[[19,5,1,3,-1.],[19,6,1,1,3.]],threshold:6.7906372714787722e-004,right_val:-0.2262842059135437,left_val:0.0459801182150841},{features:[[3,6,2,2,-1.],[3,6,1,1,2.],[4,7,1,1,2.]],threshold:1.4090019976720214e-003,right_val:0.2272271960973740,left_val:-0.0476289205253124},{features:[[0,1,10,10,-1.],[5,1,5,10,2.]],threshold:0.2895491123199463,right_val:-0.6396701931953430,left_val:0.0167012400925159},{features:[[3,0,8,1,-1.],[7,0,4,1,2.]],threshold:0.0193761307746172,right_val:0.5059049725532532,left_val:-0.0225694105029106},{features:[[14,5,6,1,-1.],[16,5,2,1,3.]],threshold:4.2641081381589174e-004,right_val:-0.1666630059480667,left_val:0.0660417228937149},{features:[[6,16,1,3,-1.],[6,17,1,1,3.]],threshold:1.7502580303698778e-003,right_val:0.1951259970664978,left_val:-0.0580779090523720},{features:[[6,14,2,4,-1.],[6,14,1,2,2.],[7,16,1,2,2.]],threshold:-3.2605750020593405e-003,right_val:0.0383287183940411,left_val:-0.2910188138484955},{features:[[0,7,2,5,-1.],[1,7,1,5,2.]],threshold:1.9519040361046791e-003,right_val:-0.1691060066223145,left_val:0.0595659688115120},{features:[[18,0,2,8,-1.],[18,0,1,4,2.],[19,4,1,4,2.]],threshold:-3.2053990289568901e-003,right_val:-0.0560532584786415,left_val:0.1992776989936829},{features:[[5,8,6,2,-1.],[8,8,3,2,2.]],threshold:1.7617279663681984e-003,right_val:-0.2127664983272553,left_val:0.0506975315511227},{features:[[4,8,8,3,-1.],[8,8,4,3,2.]],threshold:-6.0043102130293846e-003,right_val:0.0822752788662910,left_val:-0.1369926929473877},{features:[[8,0,2,2,-1.],[8,1,2,1,2.]],threshold:2.4830829352140427e-003,right_val:0.2168422043323517,left_val:-0.0515616610646248},{features:[[13,8,6,11,-1.],[15,8,2,11,3.]],threshold:-0.1082193031907082,right_val:0.0144336502999067,left_val:-0.7837529182434082},{features:[[11,15,9,5,-1.],[14,15,3,5,3.]],threshold:-7.5229378417134285e-003,right_val:-0.0905826985836029,left_val:0.1345372945070267},{features:[[5,4,12,15,-1.],[9,4,4,15,3.]],threshold:0.0307509899139404,right_val:-0.0994755998253822,left_val:0.1108169034123421},{features:[[16,12,2,8,-1.],[16,12,1,4,2.],[17,16,1,4,2.]],threshold:-2.8948320541530848e-003,right_val:-0.0526392608880997,left_val:0.1900573968887329},{features:[[7,13,10,6,-1.],[7,16,10,3,2.]],threshold:2.7011099737137556e-003,right_val:-0.1985194981098175,left_val:0.0585735589265823},{features:[[6,15,3,4,-1.],[6,17,3,2,2.]],threshold:1.2562989722937346e-003,right_val:0.1543684005737305,left_val:-0.0735653117299080}],threshold:-1.3943890333175659},{simpleClassifiers:[{features:[[9,5,8,2,-1.],[13,5,4,2,2.]],threshold:-0.0214605797082186,right_val:-0.2089038044214249,left_val:0.3250505030155182},{features:[[5,6,3,4,-1.],[6,6,1,4,3.]],threshold:7.6785432174801826e-003,right_val:0.3052583932876587,left_val:-0.1323131024837494},{features:[[10,8,7,6,-1.],[10,10,7,2,3.]],threshold:3.4118059556931257e-003,right_val:0.1101097986102104,left_val:-0.3079307973384857},{features:[[12,13,1,4,-1.],[12,15,1,2,2.]],threshold:-1.4710490177094471e-005,right_val:-0.2964186072349548,left_val:0.0958588570356369},{features:[[2,10,3,4,-1.],[3,10,1,4,3.]],threshold:0.0105380499735475,right_val:0.3723484873771668,left_val:-0.0792525410652161},{features:[[8,7,6,6,-1.],[8,7,3,3,2.],[11,10,3,3,2.]],threshold:-2.5260078837163746e-004,right_val:-0.3078433871269226,left_val:0.0671211108565331},{features:[[2,0,15,2,-1.],[7,0,5,2,3.]],threshold:-3.5665810573846102e-003,right_val:-0.1708378940820694,left_val:0.1466760933399200},{features:[[13,10,1,3,-1.],[13,11,1,1,3.]],threshold:-1.2677359627559781e-003,right_val:0.0203741192817688,left_val:-0.4906372129917145},{features:[[2,9,3,4,-1.],[3,9,1,4,3.]],threshold:-6.7669381387531757e-003,right_val:-0.0741759017109871,left_val:0.2576732933521271},{features:[[6,4,3,2,-1.],[6,5,3,1,2.]],threshold:-6.0447258874773979e-004,right_val:0.0913498476147652,left_val:-0.1919641047716141},{features:[[10,16,2,3,-1.],[11,16,1,3,2.]],threshold:-2.5375590194016695e-003,right_val:0.0515472516417503,left_val:-0.3566387891769409},{features:[[7,13,2,3,-1.],[7,14,2,1,3.]],threshold:-7.0200557820498943e-003,right_val:-0.0439679883420467,left_val:0.3971908092498779},{features:[[6,12,2,4,-1.],[6,12,1,2,2.],[7,14,1,2,2.]],threshold:-5.7049379684031010e-003,right_val:0.0298259295523167,left_val:-0.5001549124717712},{features:[[9,1,6,1,-1.],[12,1,3,1,2.]],threshold:1.4744909713044763e-003,right_val:-0.2613981068134308,left_val:0.0585462115705013},{features:[[6,6,3,4,-1.],[7,6,1,4,3.]],threshold:9.2834811657667160e-003,right_val:0.3344317078590393,left_val:-0.0428367592394352},{features:[[9,8,3,3,-1.],[9,9,3,1,3.]],threshold:9.9660153500735760e-004,right_val:0.1619178056716919,left_val:-0.1042511016130447},{features:[[8,7,12,3,-1.],[14,7,6,3,2.]],threshold:-0.0759327337145805,right_val:0.0430756881833076,left_val:-0.3735632002353668},{features:[[12,10,4,2,-1.],[12,10,2,1,2.],[14,11,2,1,2.]],threshold:5.5370710470015183e-005,right_val:0.1156015023589134,left_val:-0.1457054018974304},{features:[[16,11,1,2,-1.],[16,12,1,1,2.]],threshold:1.4746849956281949e-005,right_val:0.1174774020910263,left_val:-0.1297267973423004},{features:[[6,2,1,2,-1.],[6,3,1,1,2.]],threshold:-1.4875919441692531e-004,right_val:0.0787826925516129,left_val:-0.1800293028354645},{features:[[5,10,2,3,-1.],[5,11,2,1,3.]],threshold:3.3751460723578930e-003,right_val:0.1859685927629471,left_val:-0.0772420093417168},{features:[[5,9,2,3,-1.],[5,10,2,1,3.]],threshold:3.4271259210072458e-004,right_val:0.1047258004546166,left_val:-0.1539334058761597},{features:[[0,0,2,1,-1.],[1,0,1,1,2.]],threshold:-4.5711229904554784e-004,right_val:0.0618186704814434,left_val:-0.2230052947998047},{features:[[0,0,2,1,-1.],[1,0,1,1,2.]],threshold:3.2788628595881164e-004,right_val:-0.1888982951641083,left_val:0.0794487074017525},{features:[[12,0,8,2,-1.],[12,0,4,1,2.],[16,1,4,1,2.]],threshold:-9.6754019614309072e-004,right_val:-0.1080107018351555,left_val:0.1313713043928146},{features:[[10,11,3,8,-1.],[11,11,1,8,3.]],threshold:0.0105370096862316,right_val:-0.5747975111007690,left_val:0.0221382696181536},{features:[[5,11,3,3,-1.],[5,12,3,1,3.]],threshold:5.6796409189701080e-003,right_val:0.2484958022832871,left_val:-0.0560345798730850},{features:[[5,10,1,6,-1.],[5,13,1,3,2.]],threshold:-8.8083967566490173e-003,right_val:0.0427269488573074,left_val:-0.3716768026351929},{features:[[6,2,6,6,-1.],[6,2,3,3,2.],[9,5,3,3,2.]],threshold:-0.0283197108656168,right_val:0.0208440497517586,left_val:-0.6238784790039063},{features:[[11,4,1,6,-1.],[11,6,1,2,3.]],threshold:0.0136378603056073,right_val:-0.7153713703155518,left_val:0.0144342398270965},{features:[[18,3,2,16,-1.],[18,3,1,8,2.],[19,11,1,8,2.]],threshold:0.0118227703496814,right_val:0.3068254888057709,left_val:-0.0431810915470123},{features:[[10,12,3,2,-1.],[11,12,1,2,3.]],threshold:-6.1035697581246495e-004,right_val:0.0621156208217144,left_val:-0.2041833996772766},{features:[[7,14,2,3,-1.],[7,15,2,1,3.]],threshold:-5.6125568225979805e-003,right_val:-0.0354489609599113,left_val:0.3648501038551331},{features:[[16,12,2,1,-1.],[17,12,1,1,2.]],threshold:1.4603640011046082e-005,right_val:0.1214229017496109,left_val:-0.0960969105362892},{features:[[15,6,4,2,-1.],[15,7,4,1,2.]],threshold:1.9061230123043060e-003,right_val:-0.2297890931367874,left_val:0.0531358681619167},{features:[[4,6,2,3,-1.],[4,7,2,1,3.]],threshold:-3.6644220817834139e-003,right_val:-0.0685569122433662,left_val:0.1961452960968018},{features:[[8,19,6,1,-1.],[11,19,3,1,2.]],threshold:1.2336249928921461e-003,right_val:0.1392022967338562,left_val:-0.0870003476738930},{features:[[9,12,3,3,-1.],[9,13,3,1,3.]],threshold:5.4660569876432419e-003,right_val:-0.4832952916622162,left_val:0.0226608905941248},{features:[[10,12,1,3,-1.],[10,13,1,1,3.]],threshold:-6.1730947345495224e-004,right_val:0.0552585199475288,left_val:-0.2195954024791718},{features:[[8,6,2,3,-1.],[8,7,2,1,3.]],threshold:2.9604700393974781e-003,right_val:0.2747671008110046,left_val:-0.0505482293665409},{features:[[5,7,6,5,-1.],[8,7,3,5,2.]],threshold:0.0280150007456541,right_val:-0.6049836874008179,left_val:0.0188746508210897},{features:[[14,10,1,2,-1.],[14,11,1,1,2.]],threshold:-7.1651988946541678e-006,right_val:-0.1060696989297867,left_val:0.1083621978759766},{features:[[11,7,6,3,-1.],[13,7,2,3,3.]],threshold:-0.0163671504706144,right_val:-0.0371376909315586,left_val:0.2864503860473633},{features:[[14,6,6,1,-1.],[16,6,2,1,3.]],threshold:1.0280719725415111e-003,right_val:-0.2179502993822098,left_val:0.0563181415200233},{features:[[9,7,1,3,-1.],[9,8,1,1,3.]],threshold:1.3662660494446754e-003,right_val:0.2380400002002716,left_val:-0.0468035005033016},{features:[[9,5,2,8,-1.],[9,5,1,4,2.],[10,9,1,4,2.]],threshold:7.6626739464700222e-003,right_val:-0.5684748888015747,left_val:0.0215952601283789},{features:[[6,12,1,4,-1.],[6,14,1,2,2.]],threshold:-4.5117521658539772e-003,right_val:0.0304854903370142,left_val:-0.3579497933387756},{features:[[5,13,4,2,-1.],[5,14,4,1,2.]],threshold:-4.3773967772722244e-003,right_val:-0.0539998188614845,left_val:0.2319266051054001},{features:[[12,9,2,4,-1.],[12,11,2,2,2.]],threshold:-7.2474628686904907e-003,right_val:0.0263741891831160,left_val:-0.4344038069248200},{features:[[12,7,3,6,-1.],[13,7,1,6,3.]],threshold:7.9146260395646095e-004,right_val:0.1108850017189980,left_val:-0.0999245867133141},{features:[[5,0,2,14,-1.],[5,7,2,7,2.]],threshold:0.0641668066382408,right_val:-0.5784941911697388,left_val:0.0189386699348688},{features:[[9,3,1,2,-1.],[9,4,1,1,2.]],threshold:-1.1797840124927461e-004,right_val:0.0687772035598755,left_val:-0.1488956958055496},{features:[[6,1,14,12,-1.],[6,5,14,4,3.]],threshold:0.0128012895584106,right_val:-0.2086596935987473,left_val:0.0561793297529221},{features:[[13,6,7,6,-1.],[13,9,7,3,2.]],threshold:-0.0270187407732010,right_val:-0.0250545796006918,left_val:0.4535689055919647},{features:[[14,9,3,3,-1.],[14,10,3,1,3.]],threshold:-6.9431727752089500e-003,right_val:0.0218001399189234,left_val:-0.5291655063629150},{features:[[17,12,3,1,-1.],[18,12,1,1,3.]],threshold:3.3396780490875244e-003,right_val:0.3119843900203705,left_val:-0.0372959598898888},{features:[[8,2,3,2,-1.],[9,2,1,2,3.]],threshold:-3.8888349081389606e-004,right_val:0.0709818303585052,left_val:-0.1563013046979904},{features:[[7,11,2,1,-1.],[8,11,1,1,2.]],threshold:-7.1400677552446723e-004,right_val:-0.0540692806243896,left_val:0.2179943025112152},{features:[[5,7,3,2,-1.],[5,8,3,1,2.]],threshold:0.0125496303662658,right_val:-0.7832044959068298,left_val:0.0173571798950434},{features:[[11,11,2,1,-1.],[12,11,1,1,2.]],threshold:-1.4623020433646161e-005,right_val:-0.1421297043561935,left_val:0.0786401033401489},{features:[[11,11,3,1,-1.],[12,11,1,1,3.]],threshold:-1.2133170384913683e-003,right_val:0.0342876389622688,left_val:-0.3137122988700867},{features:[[9,5,1,3,-1.],[9,6,1,1,3.]],threshold:3.6882720887660980e-003,right_val:0.3012467920780182,left_val:-0.0383823812007904},{features:[[12,9,1,2,-1.],[12,10,1,1,2.]],threshold:-1.4818239833402913e-005,right_val:-0.0917033776640892,left_val:0.1256116926670075},{features:[[12,7,2,3,-1.],[13,7,1,3,2.]],threshold:3.0302109662443399e-003,right_val:0.3788954019546509,left_val:-0.0295430701225996},{features:[[5,11,6,3,-1.],[8,11,3,3,2.]],threshold:5.9340851294109598e-005,right_val:0.0701024308800697,left_val:-0.1774571985006332},{features:[[6,10,2,2,-1.],[6,10,1,1,2.],[7,11,1,1,2.]],threshold:-2.9449560315697454e-005,right_val:-0.1112897992134094,left_val:0.1205231994390488},{features:[[17,2,1,9,-1.],[17,5,1,3,3.]],threshold:-0.0177711397409439,right_val:0.0256007891148329,left_val:-0.4710831046104431},{features:[[4,7,2,6,-1.],[4,7,1,3,2.],[5,10,1,3,2.]],threshold:7.6775359921157360e-003,right_val:0.2702176868915558,left_val:-0.0407578796148300},{features:[[0,1,11,18,-1.],[0,10,11,9,2.]],threshold:-0.1851301938295364,right_val:0.0387909114360809,left_val:-0.3023875057697296},{features:[[7,6,2,8,-1.],[7,10,2,4,2.]],threshold:0.0276971906423569,right_val:-0.4416660070419312,left_val:0.0267128106206656},{features:[[6,2,4,6,-1.],[6,5,4,3,2.]],threshold:-0.0204276498407125,right_val:-0.0556727014482021,left_val:0.2508660852909088},{features:[[2,12,12,4,-1.],[2,14,12,2,2.]],threshold:9.0200370177626610e-003,right_val:-0.2744598090648651,left_val:0.0473440699279308},{features:[[9,0,6,1,-1.],[12,0,3,1,2.]],threshold:-1.2504979968070984e-003,right_val:0.0796676501631737,left_val:-0.1497119069099426},{features:[[5,0,12,2,-1.],[5,1,12,1,2.]],threshold:-0.0100211603567004,right_val:-0.0492179095745087,left_val:0.2424885928630829},{features:[[10,0,2,1,-1.],[11,0,1,1,2.]],threshold:2.6042328681796789e-004,right_val:-0.1854428052902222,left_val:0.0631924271583557},{features:[[7,14,3,3,-1.],[7,15,3,1,3.]],threshold:1.1920549441128969e-003,right_val:0.1355233937501907,left_val:-0.0865479111671448},{features:[[4,13,5,3,-1.],[4,14,5,1,3.]],threshold:3.0391330365091562e-003,right_val:0.1647980064153671,left_val:-0.0729652196168900},{features:[[9,16,6,2,-1.],[9,17,6,1,2.]],threshold:-2.9615699531859718e-005,right_val:-0.1450296938419342,left_val:0.0820479765534401},{features:[[11,16,5,3,-1.],[11,17,5,1,3.]],threshold:-0.0122263403609395,right_val:0.0204057991504669,left_val:-0.5301417708396912},{features:[[5,0,3,15,-1.],[6,0,1,15,3.]],threshold:-0.0281248893588781,right_val:0.0176881197839975,left_val:-0.5514876246452332},{features:[[9,16,8,4,-1.],[9,18,8,2,2.]],threshold:-0.0483071096241474,right_val:0.0110205402597785,left_val:-0.8257979154586792},{features:[[0,6,3,2,-1.],[0,7,3,1,2.]],threshold:4.6184109523892403e-003,right_val:-0.3011536896228790,left_val:0.0320699699223042},{features:[[5,9,3,1,-1.],[6,9,1,1,3.]],threshold:-8.4275740664452314e-004,right_val:-0.0630094334483147,left_val:0.1703443974256516},{features:[[9,11,4,2,-1.],[9,11,2,1,2.],[11,12,2,1,2.]],threshold:6.3863280229270458e-003,right_val:-0.7134649157524109,left_val:0.0163072999566793},{features:[[4,13,2,2,-1.],[4,13,1,1,2.],[5,14,1,1,2.]],threshold:-7.7203067485243082e-004,right_val:-0.0661927834153175,left_val:0.1671528071165085},{features:[[6,4,1,2,-1.],[6,5,1,1,2.]],threshold:-2.2645338904112577e-003,right_val:0.0281686708331108,left_val:-0.3510709106922150},{features:[[14,18,2,2,-1.],[14,18,1,1,2.],[15,19,1,1,2.]],threshold:-3.7738790269941092e-003,right_val:-0.0202226098626852,left_val:0.5276281833648682},{features:[[7,10,5,6,-1.],[7,12,5,2,3.]],threshold:5.8204168453812599e-003,right_val:-0.1467539072036743,left_val:0.0708640664815903},{features:[[8,7,4,6,-1.],[8,9,4,2,3.]],threshold:-0.0120692504569888,right_val:-0.0443129688501358,left_val:0.2392809987068176},{features:[[7,9,6,2,-1.],[9,9,2,2,3.]],threshold:3.3203759230673313e-003,right_val:0.2027768045663834,left_val:-0.0657495334744453},{features:[[6,6,6,4,-1.],[6,6,3,2,2.],[9,8,3,2,2.]],threshold:2.1621929481625557e-003,right_val:-0.1812534928321838,left_val:0.0674079805612564},{features:[[10,3,1,6,-1.],[10,5,1,2,3.]],threshold:0.0122291501611471,right_val:-0.4918099939823151,left_val:0.0225593093782663},{features:[[5,2,12,14,-1.],[5,2,6,7,2.],[11,9,6,7,2.]],threshold:-6.7253508605062962e-003,right_val:0.0697866529226303,left_val:-0.1529005020856857},{features:[[13,5,6,2,-1.],[13,6,6,1,2.]],threshold:2.3579499684274197e-003,right_val:-0.2083828002214432,left_val:0.0492121018469334},{features:[[16,0,4,8,-1.],[16,0,2,4,2.],[18,4,2,4,2.]],threshold:-2.2950689308345318e-003,right_val:-0.0966249182820320,left_val:0.1240044012665749},{features:[[3,12,3,1,-1.],[4,12,1,1,3.]],threshold:1.0958530474454165e-003,right_val:0.1520861983299255,left_val:-0.0732707530260086},{features:[[3,10,3,4,-1.],[4,10,1,4,3.]],threshold:-1.3427219819277525e-003,right_val:-0.0956898778676987,left_val:0.1223303973674774},{features:[[4,6,1,6,-1.],[4,9,1,3,2.]],threshold:5.4691417608410120e-004,right_val:0.0843817368149757,left_val:-0.1392416059970856},{features:[[3,7,15,1,-1.],[8,7,5,1,3.]],threshold:8.4598818793892860e-003,right_val:-0.1331889927387238,left_val:0.0896898731589317},{features:[[1,15,6,5,-1.],[4,15,3,5,2.]],threshold:-0.0915971174836159,right_val:0.0228678695857525,left_val:-0.6185473203659058},{features:[[11,9,8,4,-1.],[15,9,4,4,2.]],threshold:-1.1090439511463046e-003,right_val:-0.1880645006895065,left_val:0.0585137493908405},{features:[[15,7,2,4,-1.],[16,7,1,4,2.]],threshold:2.2256910597207025e-005,right_val:0.1278091073036194,left_val:-0.0844882801175117},{features:[[19,1,1,2,-1.],[19,2,1,1,2.]],threshold:-1.5437819820363075e-004,right_val:0.0860469788312912,left_val:-0.1222802996635437},{features:[[6,15,3,3,-1.],[7,15,1,3,3.]],threshold:-2.6862788945436478e-003,right_val:0.0442559607326984,left_val:-0.2448700070381165},{features:[[3,16,3,1,-1.],[4,16,1,1,3.]],threshold:-4.0478641167283058e-003,right_val:-0.0422008708119392,left_val:0.2703068852424622},{features:[[3,10,3,10,-1.],[4,10,1,10,3.]],threshold:-0.0533402413129807,right_val:0.0143880397081375,left_val:-0.7623234987258911},{features:[[18,17,2,2,-1.],[18,17,1,1,2.],[19,18,1,1,2.]],threshold:2.8256059158593416e-003,right_val:0.3969297111034393,left_val:-0.0298770703375340},{features:[[3,12,6,4,-1.],[3,12,3,2,2.],[6,14,3,2,2.]],threshold:0.0144437300041318,right_val:-0.3660664856433868,left_val:0.0301867108792067},{features:[[5,17,2,2,-1.],[5,17,1,1,2.],[6,18,1,1,2.]],threshold:1.3111650478094816e-003,right_val:0.2243445962667465,left_val:-0.0481403693556786},{features:[[7,16,2,3,-1.],[7,17,2,1,3.]],threshold:1.6730680363252759e-003,right_val:0.1639419049024582,left_val:-0.0599833987653255},{features:[[5,11,6,3,-1.],[8,11,3,3,2.]],threshold:0.0235171206295490,right_val:-0.4049243927001953,left_val:0.0241097006946802},{features:[[7,16,1,3,-1.],[7,17,1,1,3.]],threshold:-3.5689130891114473e-003,right_val:-0.0342958793044090,left_val:0.3190355896949768},{features:[[0,16,2,1,-1.],[1,16,1,1,2.]],threshold:-2.8193008620291948e-004,right_val:0.0706698969006538,left_val:-0.1487416028976440},{features:[[11,7,9,6,-1.],[11,10,9,3,2.]],threshold:0.1021585986018181,right_val:-0.7784854173660278,left_val:0.0128405001014471},{features:[[9,4,9,16,-1.],[12,4,3,16,3.]],threshold:-0.1917548030614853,right_val:0.0105877602472901,left_val:-0.7570657730102539},{features:[[14,12,5,3,-1.],[14,13,5,1,3.]],threshold:5.3162658587098122e-003,right_val:0.2605018019676209,left_val:-0.0400665700435638},{features:[[8,18,3,2,-1.],[9,18,1,2,3.]],threshold:-1.1487120063975453e-003,right_val:0.0616104304790497,left_val:-0.1801722049713135},{features:[[4,0,11,16,-1.],[4,8,11,8,2.]],threshold:-0.2831673026084900,right_val:0.0116471396759152,left_val:-0.8491340875625610},{features:[[2,4,12,15,-1.],[2,9,12,5,3.]],threshold:0.0337317585945129,right_val:-0.0774822309613228,left_val:0.1235760971903801},{features:[[3,13,11,4,-1.],[3,15,11,2,2.]],threshold:9.8635945469141006e-003,right_val:-0.2554177939891815,left_val:0.0439580306410789},{features:[[7,5,4,3,-1.],[7,6,4,1,3.]],threshold:-3.1564768869429827e-003,right_val:-0.0582210384309292,left_val:0.1894298940896988},{features:[[6,5,4,3,-1.],[6,6,4,1,3.]],threshold:1.5572150005027652e-003,right_val:0.1410734951496124,left_val:-0.1037613973021507},{features:[[5,0,2,9,-1.],[5,3,2,3,3.]],threshold:0.0623604208230972,right_val:-0.8580496907234192,left_val:9.6462322399020195e-003},{features:[[16,8,2,2,-1.],[16,8,1,1,2.],[17,9,1,1,2.]],threshold:1.1480550165288150e-004,right_val:0.1131270006299019,left_val:-0.0844199284911156},{features:[[12,10,8,2,-1.],[12,10,4,1,2.],[16,11,4,1,2.]],threshold:-5.9252730570733547e-003,right_val:0.0320798493921757,left_val:-0.3165077865123749},{features:[[6,2,2,8,-1.],[7,2,1,8,2.]],threshold:-2.4660851340740919e-004,right_val:-0.1108511015772820,left_val:0.0886976793408394},{features:[[6,6,2,3,-1.],[7,6,1,3,2.]],threshold:1.6946049872785807e-003,right_val:0.2090421020984650,left_val:-0.0596571490168571},{features:[[17,4,1,3,-1.],[17,5,1,1,3.]],threshold:9.0623252617660910e-005,right_val:-0.1280633956193924,left_val:0.0774419605731964},{features:[[15,13,3,2,-1.],[16,13,1,2,3.]],threshold:1.1666920036077499e-003,right_val:0.1570245027542114,left_val:-0.0617485791444778},{features:[[11,13,2,3,-1.],[11,14,2,1,3.]],threshold:1.2541549513116479e-003,right_val:-0.2314036041498184,left_val:0.0446083806455135},{features:[[14,5,6,11,-1.],[16,5,2,11,3.]],threshold:-6.0275900177657604e-003,right_val:-0.1028309017419815,left_val:0.0952818468213081},{features:[[6,0,12,8,-1.],[12,0,6,8,2.]],threshold:-0.2047284990549088,right_val:0.0235375501215458,left_val:-0.4111475944519043},{features:[[7,15,8,4,-1.],[7,15,4,2,2.],[11,17,4,2,2.]],threshold:0.0176912806928158,right_val:0.2856444120407105,left_val:-0.0392571501433849},{features:[[4,14,16,6,-1.],[4,16,16,2,3.]],threshold:-0.1287564933300018,right_val:0.0117352902889252,left_val:-0.8203077912330627},{features:[[6,12,2,6,-1.],[6,12,1,3,2.],[7,15,1,3,2.]],threshold:1.2868089834228158e-003,right_val:-0.1784801036119461,left_val:0.0508588701486588},{features:[[7,14,6,4,-1.],[7,14,3,2,2.],[10,16,3,2,2.]],threshold:-4.5859832316637039e-003,right_val:-0.0615825988352299,left_val:0.1680210977792740},{features:[[0,0,2,4,-1.],[0,0,1,2,2.],[1,2,1,2,2.]],threshold:4.6391240903176367e-004,right_val:-0.1423780024051666,left_val:0.0667470470070839},{features:[[15,12,1,3,-1.],[15,13,1,1,3.]],threshold:-4.4439961202442646e-003,right_val:-0.0217468105256557,left_val:0.4571498036384583},{features:[[7,16,3,1,-1.],[8,16,1,1,3.]],threshold:3.8220020942389965e-003,right_val:-0.6024454236030579,left_val:0.0180943291634321},{features:[[1,8,1,2,-1.],[1,9,1,1,2.]],threshold:1.3894500443711877e-003,right_val:-0.2715348005294800,left_val:0.0340078510344028},{features:[[3,14,3,2,-1.],[4,14,1,2,3.]],threshold:-7.2111929766833782e-003,right_val:-0.0368551313877106,left_val:0.2731257081031799},{features:[[3,13,3,5,-1.],[4,13,1,5,3.]],threshold:1.6509749693796039e-003,right_val:0.1313444972038269,left_val:-0.0844070166349411},{features:[[7,2,3,4,-1.],[8,2,1,4,3.]],threshold:-5.0506892148405313e-004,right_val:0.0736280530691147,left_val:-0.1419333964586258},{features:[[10,1,4,4,-1.],[10,3,4,2,2.]],threshold:-0.0112053295597434,right_val:-0.0341713912785053,left_val:0.3009375035762787},{features:[[9,2,1,2,-1.],[9,3,1,1,2.]],threshold:-3.4860160667449236e-004,right_val:0.0598239786922932,left_val:-0.2453830987215042},{features:[[7,12,2,2,-1.],[7,12,1,1,2.],[8,13,1,1,2.]],threshold:7.3347258148714900e-004,right_val:0.1636794954538345,left_val:-0.0617702603340149},{features:[[4,11,4,4,-1.],[4,11,2,2,2.],[6,13,2,2,2.]],threshold:-9.2969406396150589e-003,right_val:0.0392578989267349,left_val:-0.3023664057254791},{features:[[9,10,6,4,-1.],[12,10,3,4,2.]],threshold:0.0239571202546358,right_val:0.4834083020687103,left_val:-0.0239007193595171},{features:[[8,12,3,2,-1.],[9,12,1,2,3.]],threshold:3.6422210541786626e-005,right_val:0.0912589505314827,left_val:-0.1228303983807564},{features:[[13,9,6,6,-1.],[13,9,3,3,2.],[16,12,3,3,2.]],threshold:0.0504582002758980,right_val:-0.7782772779464722,left_val:0.0135291498154402},{features:[[14,0,3,5,-1.],[15,0,1,5,3.]],threshold:-9.8683983087539673e-003,right_val:0.0204043593257666,left_val:-0.4406045973300934},{features:[[9,8,6,4,-1.],[9,8,3,2,2.],[12,10,3,2,2.]],threshold:-0.0108512397855520,right_val:-0.0522485896945000,left_val:0.2016550004482269},{features:[[10,6,3,3,-1.],[11,6,1,3,3.]],threshold:1.7670930537860841e-004,right_val:0.0831705927848816,left_val:-0.1369144022464752},{features:[[13,3,2,1,-1.],[14,3,1,1,2.]],threshold:1.2582179624587297e-004,right_val:-0.1654271036386490,left_val:0.0612753517925739},{features:[[4,5,2,2,-1.],[4,5,1,1,2.],[5,6,1,1,2.]],threshold:-7.0588971721008420e-004,right_val:-0.0661646202206612,left_val:0.1521912962198257},{features:[[4,5,2,2,-1.],[4,5,1,1,2.],[5,6,1,1,2.]],threshold:1.1355109745636582e-003,right_val:0.2131109982728958,left_val:-0.0541153699159622},{features:[[7,9,2,6,-1.],[7,11,2,2,3.]],threshold:-3.7436310667544603e-003,right_val:0.0495910011231899,left_val:-0.2346985042095184},{features:[[6,12,2,3,-1.],[6,13,2,1,3.]],threshold:1.2309269513934851e-003,right_val:0.1464654058218002,left_val:-0.0751960128545761},{features:[[6,13,2,3,-1.],[6,14,2,1,3.]],threshold:3.6228948738425970e-004,right_val:0.1209172978997231,left_val:-0.0977894067764282},{features:[[7,4,3,2,-1.],[8,4,1,2,3.]],threshold:7.5996189843863249e-004,right_val:-0.1627878993749619,left_val:0.0697139203548431},{features:[[13,1,3,4,-1.],[14,1,1,4,3.]],threshold:-1.8509250367060304e-003,right_val:0.0575015209615231,left_val:-0.1838289052248001},{features:[[6,8,11,3,-1.],[6,9,11,1,3.]],threshold:7.9539678990840912e-003,right_val:0.1884644031524658,left_val:-0.0588487088680267},{features:[[13,10,5,2,-1.],[13,11,5,1,2.]],threshold:-3.1013600528240204e-004,right_val:0.0724031999707222,left_val:-0.1457546055316925},{features:[[13,9,3,6,-1.],[13,12,3,3,2.]],threshold:1.6956350300461054e-003,right_val:-0.1674093008041382,left_val:0.0705502629280090},{features:[[3,14,5,2,-1.],[3,15,5,1,2.]],threshold:2.9058079235255718e-005,right_val:0.0953762829303741,left_val:-0.1034158989787102},{features:[[11,0,8,2,-1.],[11,0,4,1,2.],[15,1,4,1,2.]],threshold:0.0144669199362397,right_val:0.5476716756820679,left_val:-0.0175320692360401},{features:[[13,1,7,6,-1.],[13,3,7,2,3.]],threshold:-0.0571564994752407,right_val:0.0163944195955992,left_val:-0.7478930950164795},{features:[[11,0,6,1,-1.],[13,0,2,1,3.]],threshold:3.0681469943374395e-003,right_val:-0.2416436970233917,left_val:0.0387028194963932},{features:[[8,1,5,3,-1.],[8,2,5,1,3.]],threshold:3.7490210961550474e-003,right_val:0.2030832022428513,left_val:-0.0565554313361645},{features:[[12,11,1,3,-1.],[12,12,1,1,3.]],threshold:-1.0643450077623129e-003,right_val:0.0352075099945068,left_val:-0.2821192145347595},{features:[[17,13,3,6,-1.],[17,15,3,2,3.]],threshold:-8.9807435870170593e-003,right_val:-0.0506281815469265,left_val:0.2175476998090744},{features:[[12,11,1,3,-1.],[12,12,1,1,3.]],threshold:2.4643479264341295e-004,right_val:-0.1476881951093674,left_val:0.0727275311946869},{features:[[15,9,3,1,-1.],[16,9,1,1,3.]],threshold:2.2197801154106855e-003,right_val:0.2693927884101868,left_val:-0.0367548614740372}],threshold:-1.4785599708557129},{simpleClassifiers:[{features:[[10,4,6,11,-1.],[13,4,3,11,2.]],threshold:-0.0353284217417240,right_val:-0.2796190083026886,left_val:0.2412399053573608},{features:[[13,9,4,4,-1.],[13,9,2,2,2.],[15,11,2,2,2.]],threshold:2.6829841081053019e-003,right_val:0.2343350052833557,left_val:-0.1636255979537964},{features:[[8,2,1,6,-1.],[8,4,1,2,3.]],threshold:2.1330378949642181e-003,right_val:0.1567952930927277,left_val:-0.2010063976049423},{features:[[5,6,4,6,-1.],[5,9,4,3,2.]],threshold:4.2972870869562030e-004,right_val:0.0740836933255196,left_val:-0.3779098093509674},{features:[[2,6,4,8,-1.],[4,6,2,8,2.]],threshold:-0.0346459187567234,right_val:-0.0835465267300606,left_val:0.3055624067783356},{features:[[11,15,1,2,-1.],[11,16,1,1,2.]],threshold:-1.4237920368032064e-005,right_val:-0.2358395010232925,left_val:0.0826991423964500},{features:[[11,1,7,10,-1.],[11,6,7,5,2.]],threshold:4.9165110103785992e-003,right_val:0.0969653874635696,left_val:-0.1955605000257492},{features:[[7,11,9,6,-1.],[7,13,9,2,3.]],threshold:6.0989488847553730e-003,right_val:-0.2320964038372040,left_val:0.0784705504775047},{features:[[4,9,8,1,-1.],[8,9,4,1,2.]],threshold:7.4874181300401688e-003,right_val:-0.5156626105308533,left_val:7.1725919842720032e-003},{features:[[10,10,3,3,-1.],[11,10,1,3,3.]],threshold:4.2871991172432899e-003,right_val:-0.4108628928661346,left_val:0.0405305102467537},{features:[[8,0,7,6,-1.],[8,2,7,2,3.]],threshold:0.0168561805039644,right_val:0.2365777939558029,left_val:-0.0775062665343285},{features:[[11,13,2,2,-1.],[11,13,1,1,2.],[12,14,1,1,2.]],threshold:-1.0347689967602491e-003,right_val:0.0344685688614845,left_val:-0.4670444130897522},{features:[[7,12,1,3,-1.],[7,13,1,1,3.]],threshold:1.6820980235934258e-003,right_val:0.2367143034934998,left_val:-0.0672067403793335},{features:[[7,10,3,9,-1.],[7,13,3,3,3.]],threshold:-0.0120182400569320,right_val:0.0742819532752037,left_val:-0.2237260043621063},{features:[[5,9,1,3,-1.],[5,10,1,1,3.]],threshold:1.3802549801766872e-003,right_val:0.1527086049318314,left_val:-0.0999901890754700},{features:[[2,8,18,6,-1.],[11,8,9,6,2.]],threshold:-0.1428107023239136,right_val:0.0622993484139442,left_val:-0.2834411859512329},{features:[[11,7,6,4,-1.],[13,7,2,4,3.]],threshold:-0.0154634900391102,right_val:-0.0533956885337830,left_val:0.2908419072628021},{features:[[7,8,4,6,-1.],[7,10,4,2,3.]],threshold:-9.9617196246981621e-004,right_val:0.0419229716062546,left_val:-0.3601182103157044},{features:[[10,4,4,6,-1.],[10,6,4,2,3.]],threshold:-0.0269566792994738,right_val:0.0317311286926270,left_val:-0.4373672902584076},{features:[[11,12,6,1,-1.],[13,12,2,1,3.]],threshold:-8.7780617177486420e-003,right_val:0.0251468494534492,left_val:-0.5037447214126587},{features:[[5,7,2,1,-1.],[6,7,1,1,2.]],threshold:4.2969950300175697e-005,right_val:0.0884783565998077,left_val:-0.1540649980306625},{features:[[5,12,3,3,-1.],[5,13,3,1,3.]],threshold:-6.2619051896035671e-003,right_val:-0.0598498210310936,left_val:0.2243591994047165},{features:[[16,17,1,2,-1.],[16,18,1,1,2.]],threshold:-6.4296770142391324e-004,right_val:0.0593897402286530,left_val:-0.2437708973884583},{features:[[1,0,2,1,-1.],[2,0,1,1,2.]],threshold:-1.5573870041407645e-004,right_val:0.0784763172268867,left_val:-0.1686799973249435},{features:[[5,12,2,2,-1.],[5,13,2,1,2.]],threshold:4.1139780660159886e-004,right_val:0.1401938050985336,left_val:-0.0890175700187683},{features:[[12,13,2,3,-1.],[12,14,2,1,3.]],threshold:1.8635790329426527e-003,right_val:-0.3211897015571594,left_val:0.0386036895215511},{features:[[5,11,3,3,-1.],[5,12,3,1,3.]],threshold:1.6059159534052014e-003,right_val:0.1580146998167038,left_val:-0.0788015201687813},{features:[[1,0,2,1,-1.],[2,0,1,1,2.]],threshold:8.6740078404545784e-004,right_val:-0.2353843003511429,left_val:0.0541344806551933},{features:[[16,0,4,4,-1.],[16,0,2,2,2.],[18,2,2,2,2.]],threshold:-7.9801032552495599e-004,right_val:-0.0957318171858788,left_val:0.1333000957965851},{features:[[4,5,8,10,-1.],[4,5,4,5,2.],[8,10,4,5,2.]],threshold:-4.8548211343586445e-003,right_val:0.0610386207699776,left_val:-0.2073605954647064},{features:[[3,14,4,5,-1.],[5,14,2,5,2.]],threshold:-0.0114267403259873,right_val:-0.0711522772908211,left_val:0.1720180958509445},{features:[[2,16,6,2,-1.],[5,16,3,2,2.]],threshold:8.7062492966651917e-003,right_val:0.1908296942710877,left_val:-0.0721856728196144},{features:[[8,0,8,1,-1.],[12,0,4,1,2.]],threshold:-1.1634400580078363e-003,right_val:0.0918181315064430,left_val:-0.1375169008970261},{features:[[0,4,15,6,-1.],[0,7,15,3,2.]],threshold:6.8914610892534256e-003,right_val:-0.1324615925550461,left_val:0.0962259694933891},{features:[[9,9,3,2,-1.],[9,10,3,1,2.]],threshold:-2.2426620125770569e-003,right_val:-0.0362800508737564,left_val:0.3568324148654938},{features:[[7,9,2,6,-1.],[7,11,2,2,3.]],threshold:0.0123015204444528,right_val:-0.3062332868576050,left_val:0.0469409897923470},{features:[[5,10,4,3,-1.],[5,11,4,1,3.]],threshold:3.9963610470294952e-003,right_val:0.1548645943403244,left_val:-0.0829993933439255},{features:[[12,10,1,2,-1.],[12,11,1,1,2.]],threshold:-2.2026189981261268e-005,right_val:-0.1189965009689331,left_val:0.1177809983491898},{features:[[17,3,1,3,-1.],[17,4,1,1,3.]],threshold:5.8708270080387592e-004,right_val:-0.2250989973545075,left_val:0.0568646602332592},{features:[[11,9,4,4,-1.],[11,9,2,2,2.],[13,11,2,2,2.]],threshold:-5.8760121464729309e-003,right_val:-0.0445701293647289,left_val:0.2662526965141296},{features:[[10,14,6,2,-1.],[10,15,6,1,2.]],threshold:4.3262130930088460e-004,right_val:-0.2117380052804947,left_val:0.0580498389899731},{features:[[11,12,2,8,-1.],[11,16,2,4,2.]],threshold:4.7852578572928905e-003,right_val:0.2950912117958069,left_val:-0.0407105684280396},{features:[[11,7,5,6,-1.],[11,10,5,3,2.]],threshold:4.5480159315047786e-005,right_val:0.0601795390248299,left_val:-0.1820161044597626},{features:[[4,2,2,6,-1.],[5,2,1,6,2.]],threshold:2.5633929762989283e-003,right_val:0.1269284039735794,left_val:-0.0870397612452507},{features:[[6,0,5,2,-1.],[6,1,5,1,2.]],threshold:-4.7383471392095089e-003,right_val:-0.0499149002134800,left_val:0.2396183013916016},{features:[[10,17,4,3,-1.],[10,18,4,1,3.]],threshold:4.4647231698036194e-003,right_val:-0.3246757090091705,left_val:0.0405400209128857},{features:[[12,3,7,3,-1.],[12,4,7,1,3.]],threshold:-6.7061209119856358e-003,right_val:0.0322996489703655,left_val:-0.3278968036174774},{features:[[8,1,12,8,-1.],[8,1,6,4,2.],[14,5,6,4,2.]],threshold:0.0717610493302345,right_val:0.4777205884456635,left_val:-0.0237136706709862},{features:[[11,0,3,20,-1.],[12,0,1,20,3.]],threshold:0.0305848605930805,right_val:-0.7806122899055481,left_val:0.0167939104139805},{features:[[17,1,2,2,-1.],[17,1,1,1,2.],[18,2,1,1,2.]],threshold:3.8672669325023890e-003,right_val:0.5126066207885742,left_val:-0.0248768907040358},{features:[[2,10,7,6,-1.],[2,12,7,2,3.]],threshold:-0.0528022088110447,right_val:0.0238730404525995,left_val:-0.5075966119766235},{features:[[7,3,3,1,-1.],[8,3,1,1,3.]],threshold:-6.5651582553982735e-004,right_val:0.0496728010475636,left_val:-0.2012232989072800},{features:[[4,17,11,3,-1.],[4,18,11,1,3.]],threshold:8.5785267874598503e-003,right_val:0.2351890951395035,left_val:-0.0450070202350616},{features:[[7,15,3,2,-1.],[8,15,1,2,3.]],threshold:-1.2620680499821901e-003,right_val:0.0555642098188400,left_val:-0.1996205002069473},{features:[[3,4,3,13,-1.],[4,4,1,13,3.]],threshold:0.0142152896150947,right_val:0.2078115046024323,left_val:-0.0469839796423912},{features:[[5,2,12,14,-1.],[5,2,6,7,2.],[11,9,6,7,2.]],threshold:0.1639381051063538,right_val:-0.6502568721771240,left_val:0.0149732697755098},{features:[[0,0,10,6,-1.],[0,3,10,3,2.]],threshold:0.1483764052391052,right_val:-0.9429618716239929,left_val:8.1885885447263718e-003},{features:[[5,4,2,1,-1.],[6,4,1,1,2.]],threshold:1.4631190424552187e-005,right_val:0.0824895799160004,left_val:-0.1238375976681709},{features:[[7,7,6,13,-1.],[10,7,3,13,2.]],threshold:-0.0339093916118145,right_val:0.0433024987578392,left_val:-0.2281876057386398},{features:[[7,2,2,8,-1.],[7,2,1,4,2.],[8,6,1,4,2.]],threshold:3.8288589566946030e-003,right_val:0.2761304974555969,left_val:-0.0372769199311733},{features:[[6,1,3,4,-1.],[7,1,1,4,3.]],threshold:8.0947913229465485e-003,right_val:-0.3938880860805512,left_val:0.0284453593194485},{features:[[7,8,2,1,-1.],[8,8,1,1,2.]],threshold:-7.0019601844251156e-004,right_val:-0.0927142575383186,left_val:0.1219938024878502},{features:[[4,0,4,2,-1.],[4,0,2,1,2.],[6,1,2,1,2.]],threshold:3.4412490203976631e-003,right_val:0.2061723023653030,left_val:-0.0489726811647415},{features:[[3,10,16,8,-1.],[3,14,16,4,2.]],threshold:-0.1633749008178711,right_val:0.0164678208529949,left_val:-0.6185023784637451},{features:[[10,5,5,10,-1.],[10,10,5,5,2.]],threshold:6.5640709362924099e-003,right_val:-0.0923400074243546,left_val:0.1100718975067139},{features:[[13,6,3,4,-1.],[13,8,3,2,2.]],threshold:4.4708838686347008e-004,right_val:0.0770396962761879,left_val:-0.1393330991268158},{features:[[13,10,5,3,-1.],[13,11,5,1,3.]],threshold:0.0175687000155449,right_val:-0.8003290295600891,left_val:9.7569692879915237e-003},{features:[[16,12,2,2,-1.],[16,12,1,1,2.],[17,13,1,1,2.]],threshold:-1.9571769516915083e-003,right_val:-0.0364282391965389,left_val:0.2800033092498779},{features:[[16,3,2,1,-1.],[17,3,1,1,2.]],threshold:5.1913037896156311e-004,right_val:-0.1942557990550995,left_val:0.0535153411328793},{features:[[5,1,3,5,-1.],[6,1,1,5,3.]],threshold:9.6273031085729599e-003,right_val:-0.3180254101753235,left_val:0.0313177518546581},{features:[[5,7,8,6,-1.],[5,9,8,2,3.]],threshold:-0.0503328107297421,right_val:-0.0184949804097414,left_val:0.5665906071662903},{features:[[6,10,8,2,-1.],[6,10,4,1,2.],[10,11,4,1,2.]],threshold:-6.4624901860952377e-003,right_val:0.0273508504033089,left_val:-0.4189467132091522},{features:[[6,9,4,8,-1.],[6,9,2,4,2.],[8,13,2,4,2.]],threshold:-5.2857249975204468e-003,right_val:-0.0583777390420437,left_val:0.1775650978088379},{features:[[0,7,8,4,-1.],[4,7,4,4,2.]],threshold:0.0994544625282288,right_val:-0.5852617025375366,left_val:0.0164877194911242},{features:[[14,13,2,6,-1.],[14,13,1,3,2.],[15,16,1,3,2.]],threshold:2.1917840058449656e-004,right_val:0.0918841734528542,left_val:-0.1071425005793572},{features:[[12,13,2,1,-1.],[13,13,1,1,2.]],threshold:-4.3873358663404360e-005,right_val:-0.1272391974925995,left_val:0.0780369266867638},{features:[[6,8,2,2,-1.],[6,9,2,1,2.]],threshold:-6.7227642284706235e-004,right_val:0.0388433784246445,left_val:-0.2570942044258118},{features:[[15,12,2,1,-1.],[16,12,1,1,2.]],threshold:1.1754270235542208e-004,right_val:0.1209397017955780,left_val:-0.0796959623694420},{features:[[0,0,18,14,-1.],[0,7,18,7,2.]],threshold:0.4606119096279144,right_val:-0.6524127125740051,left_val:0.0138860698789358},{features:[[11,5,3,3,-1.],[12,5,1,3,3.]],threshold:0.0111156003549695,right_val:-0.6022251844406128,left_val:0.0138716604560614},{features:[[4,7,3,3,-1.],[5,7,1,3,3.]],threshold:9.0776477009057999e-003,right_val:0.2570241987705231,left_val:-0.0361186601221561},{features:[[4,8,3,1,-1.],[5,8,1,1,3.]],threshold:-4.9597548786550760e-004,right_val:-0.0892495065927505,left_val:0.1101704984903336},{features:[[5,9,1,8,-1.],[5,13,1,4,2.]],threshold:1.5807070303708315e-003,right_val:-0.2021591067314148,left_val:0.0481312796473503},{features:[[4,2,3,15,-1.],[5,2,1,15,3.]],threshold:-0.0690129324793816,right_val:0.0106600103899837,left_val:-0.8153606057167053},{features:[[15,0,4,4,-1.],[17,0,2,4,2.]],threshold:1.9330780196469277e-004,right_val:0.0850464329123497,left_val:-0.1123182997107506},{features:[[10,7,1,3,-1.],[10,8,1,1,3.]],threshold:7.8813207801431417e-004,right_val:0.1765443980693817,left_val:-0.0552008189260960},{features:[[8,17,3,2,-1.],[9,17,1,2,3.]],threshold:9.5367128960788250e-004,right_val:-0.1867419928312302,left_val:0.0544111989438534},{features:[[8,17,3,2,-1.],[9,17,1,2,3.]],threshold:-2.3191540967673063e-003,right_val:0.0385133214294910,left_val:-0.2754440903663635},{features:[[10,6,1,3,-1.],[10,7,1,1,3.]],threshold:9.5087959198281169e-004,right_val:0.1608213931322098,left_val:-0.0682189017534256},{features:[[6,7,4,4,-1.],[6,7,2,2,2.],[8,9,2,2,2.]],threshold:9.5385108143091202e-003,right_val:0.3037083148956299,left_val:-0.0388268791139126},{features:[[8,7,4,4,-1.],[8,7,2,2,2.],[10,9,2,2,2.]],threshold:-0.0144891897216439,right_val:0.0235500205308199,left_val:-0.4698973000049591},{features:[[15,8,2,7,-1.],[16,8,1,7,2.]],threshold:0.0107560502365232,right_val:-0.4724313020706177,left_val:0.0205651000142097},{features:[[8,3,3,2,-1.],[9,3,1,2,3.]],threshold:-2.0074830390512943e-003,right_val:0.0360215492546558,left_val:-0.2794669866561890},{features:[[16,17,3,1,-1.],[17,17,1,1,3.]],threshold:-1.7316909506917000e-003,right_val:-0.0463009811937809,left_val:0.2090279012918472},{features:[[3,2,12,14,-1.],[3,2,6,7,2.],[9,9,6,7,2.]],threshold:0.1523479968309403,right_val:-0.6046112775802612,left_val:0.0149342501536012},{features:[[16,16,1,2,-1.],[16,17,1,1,2.]],threshold:6.3340878114104271e-004,right_val:-0.1827719956636429,left_val:0.0503071509301662},{features:[[7,12,2,3,-1.],[7,13,2,1,3.]],threshold:-8.2793915644288063e-003,right_val:-0.0264742895960808,left_val:0.3646303117275238},{features:[[7,13,2,6,-1.],[8,13,1,6,2.]],threshold:0.0136676700785756,right_val:-0.8902382850646973,left_val:0.0125116202980280},{features:[[8,14,2,6,-1.],[8,16,2,2,3.]],threshold:2.0979309920221567e-003,right_val:0.1298995018005371,left_val:-0.0802471935749054},{features:[[6,14,4,6,-1.],[6,16,4,2,3.]],threshold:-8.9776562526822090e-003,right_val:-0.0617711097002029,left_val:0.1741108000278473},{features:[[11,12,3,6,-1.],[12,12,1,6,3.]],threshold:1.2094390112906694e-003,right_val:-0.1656129062175751,left_val:0.0687117204070091},{features:[[0,6,1,12,-1.],[0,10,1,4,3.]],threshold:6.8200258538126945e-003,right_val:-0.1823161989450455,left_val:0.0577957592904568},{features:[[3,3,2,10,-1.],[3,3,1,5,2.],[4,8,1,5,2.]],threshold:-1.8268059939146042e-003,right_val:-0.0753439664840698,left_val:0.1334033012390137},{features:[[3,3,2,8,-1.],[3,3,1,4,2.],[4,7,1,4,2.]],threshold:7.9908408224582672e-003,right_val:0.2459415942430496,left_val:-0.0450944714248180},{features:[[9,4,1,12,-1.],[9,10,1,6,2.]],threshold:-2.5262041017413139e-003,right_val:0.0523341298103333,left_val:-0.2076396048069000},{features:[[0,5,6,4,-1.],[3,5,3,4,2.]],threshold:-0.0748255103826523,right_val:0.0178033895790577,left_val:-0.5468875765800476},{features:[[9,9,1,4,-1.],[9,11,1,2,2.]],threshold:-3.3099399879574776e-003,right_val:-0.0289664193987846,left_val:0.3345581889152527},{features:[[4,6,6,4,-1.],[4,6,3,2,2.],[7,8,3,2,2.]],threshold:8.2276277244091034e-003,right_val:-0.2665227055549622,left_val:0.0415798611938953},{features:[[6,8,2,2,-1.],[7,8,1,2,2.]],threshold:3.1686299480497837e-003,right_val:0.2976978123188019,left_val:-0.0418171100318432},{features:[[6,4,4,14,-1.],[8,4,2,14,2.]],threshold:0.0151702901348472,right_val:-0.2461796998977661,left_val:0.0433923602104187},{features:[[6,7,3,3,-1.],[7,7,1,3,3.]],threshold:-1.5946379862725735e-003,right_val:-0.0730177387595177,left_val:0.1505718976259232},{features:[[4,7,6,5,-1.],[7,7,3,5,2.]],threshold:-8.5226353257894516e-003,right_val:0.0696560367941856,left_val:-0.1505008041858673},{features:[[0,4,8,10,-1.],[4,4,4,10,2.]],threshold:-0.0114181200042367,right_val:-0.0951223298907280,left_val:0.1297474950551987},{features:[[0,6,18,14,-1.],[9,6,9,14,2.]],threshold:-0.2885639965534210,right_val:0.0474108196794987,left_val:-0.2112454026937485},{features:[[11,15,3,5,-1.],[12,15,1,5,3.]],threshold:-3.9014229550957680e-003,right_val:0.0386986583471298,left_val:-0.2684378027915955},{features:[[3,18,4,2,-1.],[3,18,2,1,2.],[5,19,2,1,2.]],threshold:-3.5567739978432655e-003,right_val:-0.0457238815724850,left_val:0.2338503003120422},{features:[[7,10,2,2,-1.],[7,11,2,1,2.]],threshold:-6.4394129440188408e-003,right_val:0.0161560494452715,left_val:-0.6046388149261475},{features:[[10,1,3,10,-1.],[10,6,3,5,2.]],threshold:-7.4861319735646248e-003,right_val:-0.0559758804738522,left_val:0.1686796993017197},{features:[[9,0,8,10,-1.],[13,0,4,10,2.]],threshold:2.3621210129931569e-004,right_val:-0.2187291979789734,left_val:0.0535967499017715},{features:[[7,2,8,13,-1.],[11,2,4,13,2.]],threshold:0.0260992497205734,right_val:0.2272893041372299,left_val:-0.0539374910295010},{features:[[3,3,12,7,-1.],[9,3,6,7,2.]],threshold:-1.7809759592637420e-003,right_val:-0.1200997978448868,left_val:0.0867595225572586},{features:[[11,8,3,2,-1.],[12,8,1,2,3.]],threshold:-1.1987469770247117e-004,right_val:0.0707077831029892,left_val:-0.1534754931926727},{features:[[11,7,2,8,-1.],[11,7,1,4,2.],[12,11,1,4,2.]],threshold:-6.8248361349105835e-003,right_val:0.0267799608409405,left_val:-0.3734101951122284},{features:[[0,6,3,2,-1.],[0,7,3,1,2.]],threshold:-1.3119089999236166e-004,right_val:0.0872111618518829,left_val:-0.1164086982607842},{features:[[6,17,2,3,-1.],[6,18,2,1,3.]],threshold:-1.8228540429845452e-003,right_val:-0.0680060908198357,left_val:0.1566449999809265},{features:[[4,7,2,2,-1.],[4,7,1,1,2.],[5,8,1,1,2.]],threshold:2.6267999783158302e-003,right_val:0.2639312148094177,left_val:-0.0369872190058231},{features:[[9,2,10,9,-1.],[9,5,10,3,3.]],threshold:-0.0706771835684776,right_val:0.0350355207920074,left_val:-0.2829599976539612},{features:[[9,0,10,4,-1.],[9,0,5,2,2.],[14,2,5,2,2.]],threshold:0.0180613193660975,right_val:0.3531377911567688,left_val:-0.0280416496098042},{features:[[7,5,2,1,-1.],[8,5,1,1,2.]],threshold:9.2649407451972365e-004,right_val:-0.2278853952884674,left_val:0.0446002781391144},{features:[[7,5,2,1,-1.],[8,5,1,1,2.]],threshold:-5.3023721557110548e-004,right_val:0.0627185031771660,left_val:-0.2086668014526367},{features:[[4,9,3,3,-1.],[4,10,3,1,3.]],threshold:3.6058931145817041e-003,right_val:0.1490000933408737,left_val:-0.0677969083189964},{features:[[4,10,4,3,-1.],[4,11,4,1,3.]],threshold:8.5915643721818924e-003,right_val:0.2307848036289215,left_val:-0.0456267595291138},{features:[[6,7,2,3,-1.],[6,8,2,1,3.]],threshold:-8.8329352438449860e-003,right_val:0.0282306894659996,left_val:-0.4111708998680115},{features:[[18,4,1,3,-1.],[18,5,1,1,3.]],threshold:4.0959479520097375e-004,right_val:-0.1824354976415634,left_val:0.0536566302180290},{features:[[17,0,3,5,-1.],[18,0,1,5,3.]],threshold:-2.5011589750647545e-003,right_val:-0.0609547011554241,left_val:0.1631354987621307},{features:[[11,2,8,3,-1.],[11,3,8,1,3.]],threshold:-0.0146221695467830,right_val:0.0185727607458830,left_val:-0.4998840093612671},{features:[[14,9,6,5,-1.],[17,9,3,5,2.]],threshold:-0.0637906789779663,right_val:0.0179033894091845,left_val:-0.4832960069179535},{features:[[0,7,4,6,-1.],[0,9,4,2,3.]],threshold:-0.0166711397469044,right_val:0.0348860099911690,left_val:-0.2666158974170685},{features:[[12,7,4,12,-1.],[12,7,2,6,2.],[14,13,2,6,2.]],threshold:-0.0125260697677732,right_val:-0.0280948001891375,left_val:0.3406133949756622},{features:[[8,7,9,3,-1.],[11,7,3,3,3.]],threshold:0.0483251586556435,right_val:0.2902565896511078,left_val:-0.0331761911511421},{features:[[12,12,2,3,-1.],[12,13,2,1,3.]],threshold:1.3246550224721432e-003,right_val:-0.2685065865516663,left_val:0.0371814407408237},{features:[[11,0,6,20,-1.],[14,0,3,20,2.]],threshold:-0.2222131937742233,right_val:0.0100644398480654,left_val:-0.8989276885986328},{features:[[4,5,2,6,-1.],[5,5,1,6,2.]],threshold:1.2954319827258587e-003,right_val:0.0905886217951775,left_val:-0.1016175970435143},{features:[[1,7,6,11,-1.],[3,7,2,11,3.]],threshold:0.0137946698814631,right_val:0.1431425958871841,left_val:-0.0742446482181549},{features:[[2,15,2,1,-1.],[3,15,1,1,2.]],threshold:8.5643801139667630e-004,right_val:-0.1866019070148468,left_val:0.0597539693117142},{features:[[5,11,2,6,-1.],[5,14,2,3,2.]],threshold:-0.0233175400644541,right_val:0.0136673199012876,left_val:-0.6925991773605347},{features:[[6,17,2,3,-1.],[6,18,2,1,3.]],threshold:1.6281680436804891e-003,right_val:0.1550529003143311,left_val:-0.0610607489943504},{features:[[5,8,11,12,-1.],[5,12,11,4,3.]],threshold:-0.0123803298920393,right_val:0.0617676004767418,left_val:-0.1514685004949570},{features:[[16,10,2,2,-1.],[16,10,1,1,2.],[17,11,1,1,2.]],threshold:1.8393599893897772e-003,right_val:0.2482217997312546,left_val:-0.0371679887175560},{features:[[15,11,3,1,-1.],[16,11,1,1,3.]],threshold:3.5529870074242353e-003,right_val:0.3359228968620300,left_val:-0.0292007904499769},{features:[[13,14,1,3,-1.],[13,15,1,1,3.]],threshold:1.0305979521945119e-003,right_val:-0.2908569872379303,left_val:0.0376940816640854},{features:[[6,14,3,4,-1.],[6,16,3,2,2.]],threshold:2.9916960556874983e-005,right_val:0.1051521003246307,left_val:-0.0880141928792000},{features:[[6,6,2,14,-1.],[6,13,2,7,2.]],threshold:-4.1505339322611690e-004,right_val:-0.1502110064029694,left_val:0.0657262429594994},{features:[[11,14,2,1,-1.],[12,14,1,1,2.]],threshold:-1.4631619706051424e-005,right_val:-0.1196243986487389,left_val:0.0781703516840935},{features:[[9,13,6,6,-1.],[9,13,3,3,2.],[12,16,3,3,2.]],threshold:-4.3779090046882629e-003,right_val:-0.0520893298089504,left_val:0.2075245976448059},{features:[[10,17,3,1,-1.],[11,17,1,1,3.]],threshold:4.7036199248395860e-004,right_val:-0.1876772940158844,left_val:0.0633484795689583},{features:[[9,13,2,6,-1.],[9,13,1,3,2.],[10,16,1,3,2.]],threshold:1.4788640328333713e-005,right_val:0.1121309995651245,left_val:-0.0958288535475731},{features:[[11,18,4,2,-1.],[13,18,2,2,2.]],threshold:3.7048431113362312e-004,right_val:0.0986476764082909,left_val:-0.0987230092287064},{features:[[9,12,3,3,-1.],[10,12,1,3,3.]],threshold:-1.8590339459478855e-003,right_val:0.0383525788784027,left_val:-0.2687363028526306},{features:[[5,6,1,12,-1.],[5,12,1,6,2.]],threshold:-7.0764529518783092e-003,right_val:0.0578413307666779,left_val:-0.1598400026559830},{features:[[2,4,6,6,-1.],[4,4,2,6,3.]],threshold:0.0149200102314353,right_val:0.1924290955066681,left_val:-0.0511781498789787},{features:[[1,4,9,3,-1.],[4,4,3,3,3.]],threshold:-5.0713191740214825e-003,right_val:-0.1112122982740402,left_val:0.1386325955390930},{features:[[5,10,3,3,-1.],[5,11,3,1,3.]],threshold:-0.0150055000558496,right_val:-0.0188117604702711,left_val:0.4858393073081970},{features:[[8,9,1,3,-1.],[8,10,1,1,3.]],threshold:-2.0439480431377888e-003,right_val:0.0278163105249405,left_val:-0.3275485932826996},{features:[[11,19,6,1,-1.],[13,19,2,1,3.]],threshold:-1.3060690253041685e-004,right_val:-0.0849575772881508,left_val:0.0988680422306061},{features:[[18,4,2,8,-1.],[18,4,1,4,2.],[19,8,1,4,2.]],threshold:8.8742617517709732e-003,right_val:0.3238987922668457,left_val:-0.0252356007695198},{features:[[17,5,2,3,-1.],[17,6,2,1,3.]],threshold:7.0397509261965752e-004,right_val:-0.1739207953214645,left_val:0.0563275218009949},{features:[[12,15,8,4,-1.],[16,15,4,4,2.]],threshold:-0.0254024695605040,right_val:-0.0473623014986515,left_val:0.1967539042234421},{features:[[14,8,4,10,-1.],[14,13,4,5,2.]],threshold:-9.3743661418557167e-003,right_val:0.0599326305091381,left_val:-0.1520421952009201}],threshold:-1.3372850418090820},{simpleClassifiers:[{features:[[11,0,3,18,-1.],[11,6,3,6,3.]],threshold:0.0404530204832554,right_val:0.2886553108692169,left_val:-0.2363782972097397},{features:[[8,5,12,6,-1.],[8,7,12,2,3.]],threshold:-0.0110560497269034,right_val:-0.2625974118709564,left_val:0.1606290042400360},{features:[[10,11,4,2,-1.],[12,11,2,2,2.]],threshold:-3.9778949576430023e-004,right_val:-0.2708101868629456,left_val:0.1159109994769096},{features:[[5,7,2,8,-1.],[6,7,1,8,2.]],threshold:1.0191530454903841e-003,right_val:0.1364289969205856,left_val:-0.2096937000751495},{features:[[6,3,12,12,-1.],[6,3,6,6,2.],[12,9,6,6,2.]],threshold:3.6101979203522205e-003,right_val:0.1261779069900513,left_val:-0.2172545939683914},{features:[[6,10,4,2,-1.],[6,10,2,1,2.],[8,11,2,1,2.]],threshold:4.4545531272888184e-004,right_val:0.1259648948907852,left_val:-0.1597453951835632},{features:[[0,2,6,10,-1.],[2,2,2,10,3.]],threshold:5.8226222172379494e-003,right_val:0.0977838113903999,left_val:-0.1548444926738739},{features:[[10,15,3,2,-1.],[11,15,1,2,3.]],threshold:-2.1416260860860348e-003,right_val:0.0401033498346806,left_val:-0.3637767136096954},{features:[[6,8,10,2,-1.],[6,8,5,1,2.],[11,9,5,1,2.]],threshold:-2.6691620587371290e-004,right_val:-0.1749610006809235,left_val:0.0844707563519478},{features:[[6,12,1,6,-1.],[6,15,1,3,2.]],threshold:-5.4352330043911934e-003,right_val:0.0497860386967659,left_val:-0.3183093070983887},{features:[[9,0,4,1,-1.],[11,0,2,1,2.]],threshold:-1.5426309546455741e-003,right_val:0.0648845136165619,left_val:-0.2133370935916901},{features:[[8,5,2,3,-1.],[8,6,2,1,3.]],threshold:-2.7932289522141218e-003,right_val:-0.0651709288358688,left_val:0.2548325061798096},{features:[[7,4,2,1,-1.],[8,4,1,1,2.]],threshold:1.3845940120518208e-003,right_val:-0.3740482926368713,left_val:0.0393045805394650},{features:[[2,11,3,1,-1.],[3,11,1,1,3.]],threshold:-3.2193479128181934e-003,right_val:-0.0563963614404202,left_val:0.2629042863845825},{features:[[1,10,3,3,-1.],[2,10,1,3,3.]],threshold:-9.7977351397275925e-003,right_val:-0.0463822893798351,left_val:0.3204438984394074},{features:[[12,0,8,2,-1.],[12,0,4,1,2.],[16,1,4,1,2.]],threshold:-1.7625789623707533e-003,right_val:-0.0888924375176430,left_val:0.1505081951618195},{features:[[6,6,6,8,-1.],[9,6,3,8,2.]],threshold:-0.0360968895256519,right_val:0.0317858010530472,left_val:-0.4313783943653107},{features:[[6,10,1,3,-1.],[6,11,1,1,3.]],threshold:2.0813369192183018e-003,right_val:0.1927528977394104,left_val:-0.0659579187631607},{features:[[8,12,7,2,-1.],[8,13,7,1,2.]],threshold:-6.0533690266311169e-003,right_val:0.0510074310004711,left_val:-0.3137460947036743},{features:[[6,11,2,3,-1.],[6,12,2,1,3.]],threshold:3.7253410555422306e-003,right_val:0.2563137114048004,left_val:-0.0614025890827179},{features:[[6,6,2,12,-1.],[6,12,2,6,2.]],threshold:5.0668260082602501e-003,right_val:-0.2434016019105911,left_val:0.0579627305269241},{features:[[6,12,2,3,-1.],[6,13,2,1,3.]],threshold:2.8038739692419767e-003,right_val:0.2137586027383804,left_val:-0.0703297033905983},{features:[[12,12,1,3,-1.],[12,13,1,1,3.]],threshold:1.5925259795039892e-003,right_val:-0.5112913846969605,left_val:0.0266377609223127},{features:[[8,9,1,2,-1.],[8,10,1,1,2.]],threshold:2.9422679290291853e-005,right_val:0.0649850517511368,left_val:-0.2171020060777664},{features:[[7,11,4,6,-1.],[7,11,2,3,2.],[9,14,2,3,2.]],threshold:-2.2399190129362978e-005,right_val:-0.1513561010360718,left_val:0.0815825685858727},{features:[[10,10,4,3,-1.],[10,11,4,1,3.]],threshold:6.7072827368974686e-004,right_val:-0.1178736016154289,left_val:0.1050219014286995},{features:[[12,10,2,3,-1.],[12,11,2,1,3.]],threshold:-1.5262300148606300e-003,right_val:0.0392440892755985,left_val:-0.3462037146091461},{features:[[6,13,2,3,-1.],[6,14,2,1,3.]],threshold:1.8151829717680812e-003,right_val:0.1684775948524475,left_val:-0.0746694579720497},{features:[[7,14,1,3,-1.],[7,15,1,1,3.]],threshold:5.8078771689906716e-004,right_val:0.1419274955987930,left_val:-0.0979524105787277},{features:[[6,10,8,6,-1.],[6,12,8,2,3.]],threshold:-8.9623313397169113e-003,right_val:0.0662680417299271,left_val:-0.1960162073373795},{features:[[5,8,6,12,-1.],[5,12,6,4,3.]],threshold:0.1114680990576744,right_val:-0.6491770744323731,left_val:0.0170001406222582},{features:[[1,14,2,1,-1.],[2,14,1,1,2.]],threshold:-1.7872039461508393e-004,right_val:0.0801087021827698,left_val:-0.1405359953641892},{features:[[8,6,2,3,-1.],[8,7,2,1,3.]],threshold:-4.6587768010795116e-003,right_val:-0.0586023405194283,left_val:0.1953022927045822},{features:[[4,6,8,4,-1.],[4,6,4,2,2.],[8,8,4,2,2.]],threshold:3.4576000180095434e-003,right_val:-0.2199078947305679,left_val:0.0598057992756367},{features:[[0,14,3,1,-1.],[1,14,1,1,3.]],threshold:-1.9979270291514695e-004,right_val:0.0834302306175232,left_val:-0.1372614949941635},{features:[[4,1,2,2,-1.],[4,1,1,1,2.],[5,2,1,1,2.]],threshold:-4.8079751431941986e-003,right_val:-0.0207152999937534,left_val:0.5504192113876343},{features:[[14,10,1,6,-1.],[14,13,1,3,2.]],threshold:-7.3389292083447799e-006,right_val:-0.1448659002780914,left_val:0.0753020271658897},{features:[[5,10,1,3,-1.],[5,11,1,1,3.]],threshold:-3.5799799952656031e-003,right_val:-0.0425504595041275,left_val:0.2627722024917603},{features:[[5,10,3,3,-1.],[5,11,3,1,3.]],threshold:1.1689850362017751e-003,right_val:0.1297184973955154,left_val:-0.1098416969180107},{features:[[2,3,12,4,-1.],[2,3,6,2,2.],[8,5,6,2,2.]],threshold:0.0326395481824875,right_val:-0.3947426080703735,left_val:0.0310383792966604},{features:[[10,15,3,2,-1.],[11,15,1,2,3.]],threshold:1.1596709955483675e-003,right_val:-0.2203582972288132,left_val:0.0520218983292580},{features:[[12,14,8,1,-1.],[16,14,4,1,2.]],threshold:-1.4262240147218108e-003,right_val:-0.1006707996129990,left_val:0.1074569970369339},{features:[[11,0,8,13,-1.],[15,0,4,13,2.]],threshold:-0.2366832941770554,right_val:0.0169996097683907,left_val:-0.7317435145378113},{features:[[12,12,2,8,-1.],[12,12,1,4,2.],[13,16,1,4,2.]],threshold:1.9279429398011416e-004,right_val:0.0781860277056694,left_val:-0.1324844062328339},{features:[[4,7,8,12,-1.],[4,13,8,6,2.]],threshold:-0.0172921493649483,right_val:0.1106956005096436,left_val:-0.0971998423337936},{features:[[10,9,2,4,-1.],[10,11,2,2,2.]],threshold:-1.2431619688868523e-003,right_val:-0.0725483372807503,left_val:0.1774147003889084},{features:[[4,4,3,1,-1.],[5,4,1,1,3.]],threshold:2.1754560293629766e-005,right_val:0.1089940965175629,left_val:-0.0969520509243011},{features:[[18,5,1,3,-1.],[18,6,1,1,3.]],threshold:3.0975879053585231e-004,right_val:-0.1738471984863281,left_val:0.0622498914599419},{features:[[6,9,9,1,-1.],[9,9,3,1,3.]],threshold:-0.0115905702114105,right_val:-0.0419940799474716,left_val:0.2616280913352966},{features:[[12,5,4,6,-1.],[12,7,4,2,3.]],threshold:0.0181509200483561,right_val:-0.4468541145324707,left_val:0.0263535492122173},{features:[[16,0,4,4,-1.],[18,0,2,4,2.]],threshold:8.0223509576171637e-004,right_val:0.0870927870273590,left_val:-0.1214386969804764},{features:[[3,10,2,2,-1.],[3,10,1,1,2.],[4,11,1,1,2.]],threshold:-1.4258639421314001e-003,right_val:-0.0529874302446842,left_val:0.1923608034849167},{features:[[0,0,2,1,-1.],[1,0,1,1,2.]],threshold:-2.4536260752938688e-004,right_val:0.0656048208475113,left_val:-0.1668370068073273},{features:[[17,4,2,8,-1.],[17,4,1,4,2.],[18,8,1,4,2.]],threshold:2.2050029656384140e-005,right_val:0.1071171984076500,left_val:-0.0934774726629257},{features:[[7,15,1,3,-1.],[7,16,1,1,3.]],threshold:4.7658861149102449e-004,right_val:0.1251268982887268,left_val:-0.0805966332554817},{features:[[0,15,2,1,-1.],[1,15,1,1,2.]],threshold:4.0533850551582873e-004,right_val:-0.1574075967073441,left_val:0.0689906179904938},{features:[[7,10,2,4,-1.],[7,12,2,2,2.]],threshold:-0.0164717491716146,right_val:0.0188761092722416,left_val:-0.5966786146163940},{features:[[4,19,3,1,-1.],[5,19,1,1,3.]],threshold:2.2267159074544907e-003,right_val:0.2307108938694000,left_val:-0.0458038300275803},{features:[[2,14,4,5,-1.],[4,14,2,5,2.]],threshold:0.0493831895291805,right_val:-0.5930610895156860,left_val:0.0198377296328545},{features:[[4,11,4,4,-1.],[4,11,2,2,2.],[6,13,2,2,2.]],threshold:8.6411498486995697e-003,right_val:-0.3516111969947815,left_val:0.0286973696202040},{features:[[4,13,2,6,-1.],[4,13,1,3,2.],[5,16,1,3,2.]],threshold:-4.8241391777992249e-003,right_val:-0.0484632104635239,left_val:0.2247433960437775},{features:[[7,3,3,4,-1.],[8,3,1,4,3.]],threshold:-8.6174849420785904e-003,right_val:0.0191831905394793,left_val:-0.5708895921707153},{features:[[17,11,3,2,-1.],[18,11,1,2,3.]],threshold:-5.7220697635784745e-004,right_val:-0.0889380574226379,left_val:0.1169726997613907},{features:[[10,4,6,2,-1.],[10,5,6,1,2.]],threshold:1.1997730471193790e-003,right_val:-0.1256549954414368,left_val:0.0841811224818230},{features:[[12,3,6,3,-1.],[12,4,6,1,3.]],threshold:2.6049909647554159e-003,right_val:-0.2063814997673035,left_val:0.0595000311732292},{features:[[17,12,2,2,-1.],[17,12,1,1,2.],[18,13,1,1,2.]],threshold:-1.4789920533075929e-003,right_val:-0.0475350506603718,left_val:0.2511498034000397},{features:[[5,12,15,8,-1.],[10,12,5,8,3.]],threshold:-0.2574672102928162,right_val:0.0154406800866127,left_val:-0.7303876876831055},{features:[[4,18,2,2,-1.],[4,18,1,1,2.],[5,19,1,1,2.]],threshold:-1.2104290071874857e-003,right_val:-0.0557898096740246,left_val:0.1864697039127350},{features:[[0,15,2,2,-1.],[0,15,1,1,2.],[1,16,1,1,2.]],threshold:3.4140399657189846e-004,right_val:-0.1559716016054153,left_val:0.0677076727151871},{features:[[5,9,1,6,-1.],[5,12,1,3,2.]],threshold:3.1749058980494738e-003,right_val:-0.2952930927276611,left_val:0.0350034609436989},{features:[[1,0,18,14,-1.],[1,7,18,7,2.]],threshold:0.4433881938457489,right_val:-0.6103466153144836,left_val:0.0145500199869275},{features:[[6,2,7,6,-1.],[6,5,7,3,2.]],threshold:0.0394582599401474,right_val:0.2292751967906952,left_val:-0.0457793287932873},{features:[[6,16,2,1,-1.],[7,16,1,1,2.]],threshold:3.0410829931497574e-003,right_val:-0.5749111771583557,left_val:0.0163041297346354},{features:[[4,11,16,9,-1.],[4,14,16,3,3.]],threshold:-0.1485302001237869,right_val:0.0157710500061512,left_val:-0.5622090101242065},{features:[[16,9,2,2,-1.],[17,9,1,2,2.]],threshold:4.4339009036775678e-005,right_val:0.1092097982764244,left_val:-0.0912843719124794},{features:[[6,8,2,2,-1.],[7,8,1,2,2.]],threshold:2.2139810025691986e-003,right_val:0.2229178994894028,left_val:-0.0476682893931866},{features:[[0,14,12,3,-1.],[6,14,6,3,2.]],threshold:0.0878319665789604,right_val:-0.4039632976055145,left_val:0.0267180595546961},{features:[[7,6,3,10,-1.],[7,11,3,5,2.]],threshold:-2.2798930294811726e-003,right_val:0.0660711079835892,left_val:-0.1616093069314957},{features:[[10,11,1,2,-1.],[10,12,1,1,2.]],threshold:-1.4653969628852792e-005,right_val:-0.1272401958703995,left_val:0.0852983593940735},{features:[[5,17,2,2,-1.],[6,17,1,2,2.]],threshold:1.2313240440562367e-003,right_val:0.1660642027854919,left_val:-0.0659174770116806},{features:[[2,0,18,18,-1.],[11,0,9,18,2.]],threshold:0.4511098861694336,right_val:-0.7152550220489502,left_val:0.0134579604491591},{features:[[12,11,6,3,-1.],[14,11,2,3,3.]],threshold:-0.0245186407119036,right_val:0.0204007197171450,left_val:-0.4328263998031616},{features:[[12,12,6,1,-1.],[14,12,2,1,3.]],threshold:-1.1901959805982187e-004,right_val:-0.1183476001024246,left_val:0.0894203335046768},{features:[[15,10,2,2,-1.],[15,10,1,1,2.],[16,11,1,1,2.]],threshold:-1.3584910193458200e-003,right_val:-0.0439074002206326,left_val:0.2472229003906250},{features:[[3,11,3,8,-1.],[4,11,1,8,3.]],threshold:6.9289728999137878e-003,right_val:0.1666574031114578,left_val:-0.0568326190114021},{features:[[6,1,4,12,-1.],[8,1,2,12,2.]],threshold:-6.9041848182678223e-003,right_val:0.0793106034398079,left_val:-0.1274220943450928},{features:[[6,3,4,8,-1.],[8,3,2,8,2.]],threshold:1.2964820489287376e-003,right_val:-0.1686387062072754,left_val:0.0724624395370483},{features:[[8,4,6,12,-1.],[11,4,3,12,2.]],threshold:0.0230600591748953,right_val:0.2166478931903839,left_val:-0.0509130805730820},{features:[[16,12,4,5,-1.],[18,12,2,5,2.]],threshold:-0.0409605689346790,right_val:0.0196095500141382,left_val:-0.5647913813591003},{features:[[14,9,2,3,-1.],[15,9,1,3,2.]],threshold:7.4867479270324111e-005,right_val:0.1461513936519623,left_val:-0.0694503337144852},{features:[[9,7,10,6,-1.],[14,7,5,6,2.]],threshold:-6.8458272144198418e-003,right_val:-0.2084072977304459,left_val:0.0660499781370163},{features:[[12,7,3,11,-1.],[13,7,1,11,3.]],threshold:0.0193956494331360,right_val:-0.5639616250991821,left_val:0.0161688998341560},{features:[[19,16,1,2,-1.],[19,17,1,1,2.]],threshold:-1.6121419321279973e-004,right_val:0.0740941166877747,left_val:-0.1319456994533539},{features:[[8,15,12,1,-1.],[14,15,6,1,2.]],threshold:6.6511691547930241e-003,right_val:0.1989438980817795,left_val:-0.0552618205547333},{features:[[10,15,6,3,-1.],[10,16,6,1,3.]],threshold:4.5172171667218208e-003,right_val:-0.3098089098930359,left_val:0.0328636616468430},{features:[[6,8,10,4,-1.],[6,8,5,2,2.],[11,10,5,2,2.]],threshold:-0.0402470417320728,right_val:0.0124387396499515,left_val:-0.6898034811019898},{features:[[10,15,1,3,-1.],[10,16,1,1,3.]],threshold:7.2544030444987584e-006,right_val:0.0979197993874550,left_val:-0.0959498733282089},{features:[[10,1,9,12,-1.],[10,7,9,6,2.]],threshold:-0.1602565050125122,right_val:-0.0186434295028448,left_val:0.4947263896465302},{features:[[10,1,1,4,-1.],[10,3,1,2,2.]],threshold:5.0598900998011231e-004,right_val:0.0866990983486176,left_val:-0.1221657991409302},{features:[[1,5,18,4,-1.],[1,7,18,2,2.]],threshold:-0.1050689965486527,right_val:8.2870386540889740e-003,left_val:-0.8585562705993652},{features:[[6,4,12,6,-1.],[12,4,6,6,2.]],threshold:-0.1821838021278381,right_val:0.0131606003269553,left_val:-0.5847731232643127},{features:[[13,1,7,3,-1.],[13,2,7,1,3.]],threshold:0.0164354108273983,right_val:-0.5513756275177002,left_val:0.0162963606417179},{features:[[14,0,6,4,-1.],[14,0,3,2,2.],[17,2,3,2,2.]],threshold:0.0192825198173523,right_val:0.4364516139030457,left_val:-0.0250274799764156},{features:[[9,12,3,3,-1.],[9,13,3,1,3.]],threshold:3.4772949293255806e-003,right_val:-0.2924675941467285,left_val:0.0316327810287476},{features:[[5,14,8,4,-1.],[5,14,4,2,2.],[9,16,4,2,2.]],threshold:0.0226208698004484,right_val:0.4310530126094818,left_val:-0.0239857397973537},{features:[[1,6,14,14,-1.],[8,6,7,14,2.]],threshold:-0.1817232072353363,right_val:0.0519034899771214,left_val:-0.1803786009550095},{features:[[13,4,6,2,-1.],[13,4,3,1,2.],[16,5,3,1,2.]],threshold:-4.3819830752909184e-003,right_val:0.0330240391194820,left_val:-0.2830285131931305},{features:[[8,7,6,6,-1.],[8,9,6,2,3.]],threshold:-0.0152461202815175,right_val:-0.0412422493100166,left_val:0.2351991981267929},{features:[[8,0,12,20,-1.],[8,10,12,10,2.]],threshold:0.3904328942298889,right_val:-0.3584577143192291,left_val:0.0285306293517351},{features:[[9,8,4,3,-1.],[9,9,4,1,3.]],threshold:3.9103450253605843e-003,right_val:0.1782976984977722,left_val:-0.0515237487852573},{features:[[10,18,8,2,-1.],[10,19,8,1,2.]],threshold:-0.0108475601300597,right_val:0.0187657903879881,left_val:-0.4835528135299683},{features:[[9,12,4,2,-1.],[9,12,2,1,2.],[11,13,2,1,2.]],threshold:5.7015339843928814e-003,right_val:-0.7045748829841614,left_val:0.0122508304193616},{features:[[4,14,2,2,-1.],[4,14,1,1,2.],[5,15,1,1,2.]],threshold:-1.1917110532522202e-003,right_val:-0.0501446202397347,left_val:0.1840443015098572},{features:[[5,14,3,2,-1.],[5,15,3,1,2.]],threshold:4.0988530963659286e-004,right_val:0.1087457984685898,left_val:-0.0973996669054031},{features:[[11,1,6,3,-1.],[13,1,2,3,3.]],threshold:4.5295488089323044e-003,right_val:-0.2106914073228836,left_val:0.0453568398952484},{features:[[6,14,2,3,-1.],[6,15,2,1,3.]],threshold:-5.4893731139600277e-003,right_val:-0.0358708314597607,left_val:0.2964279055595398},{features:[[14,1,2,2,-1.],[15,1,1,2,2.]],threshold:1.9906361121684313e-003,right_val:-0.3150646984577179,left_val:0.0343328714370728},{features:[[0,13,6,7,-1.],[3,13,3,7,2.]],threshold:0.0833584666252136,right_val:-0.4427998065948486,left_val:0.0196845196187496},{features:[[17,11,3,1,-1.],[18,11,1,1,3.]],threshold:3.0363420955836773e-003,right_val:0.2666968107223511,left_val:-0.0336938314139843},{features:[[5,10,8,4,-1.],[9,10,4,4,2.]],threshold:0.0577999688684940,right_val:-0.9896581768989563,left_val:8.5875885561108589e-003},{features:[[7,16,8,4,-1.],[7,16,4,2,2.],[11,18,4,2,2.]],threshold:-7.8585641458630562e-003,right_val:-0.0465836413204670,left_val:0.2008845955133438},{features:[[11,16,4,3,-1.],[11,17,4,1,3.]],threshold:1.9253200152888894e-003,right_val:-0.2264011055231094,left_val:0.0479223690927029},{features:[[3,10,6,2,-1.],[3,10,3,1,2.],[6,11,3,1,2.]],threshold:0.0109969098120928,right_val:-0.5404816865921021,left_val:0.0162586607038975},{features:[[11,7,3,2,-1.],[12,7,1,2,3.]],threshold:1.6405170026700944e-004,right_val:0.0760014131665230,left_val:-0.1154251024127007},{features:[[8,7,9,2,-1.],[11,7,3,2,3.]],threshold:5.3780381567776203e-003,right_val:-0.0841798484325409,left_val:0.1117902994155884},{features:[[13,6,3,10,-1.],[14,6,1,10,3.]],threshold:2.2905960213392973e-003,right_val:0.1689942926168442,left_val:-0.0579694807529449},{features:[[15,10,4,3,-1.],[17,10,2,3,2.]],threshold:6.3102580606937408e-003,right_val:-0.2047820985317230,left_val:0.0414713993668556},{features:[[1,10,6,10,-1.],[3,10,2,10,3.]],threshold:-0.1434257030487061,right_val:0.0116343097761273,left_val:-0.7857347726821899},{features:[[5,0,2,2,-1.],[5,0,1,1,2.],[6,1,1,1,2.]],threshold:1.2364640133455396e-003,right_val:0.1773435026407242,left_val:-0.0518007315695286},{features:[[3,11,3,6,-1.],[3,13,3,2,3.]],threshold:-0.0200465507805347,right_val:0.0288490708917379,left_val:-0.3142091035842896},{features:[[4,6,9,10,-1.],[7,6,3,10,3.]],threshold:0.1086810976266861,right_val:-0.5195630788803101,left_val:0.0161835309118032},{features:[[6,10,9,5,-1.],[9,10,3,5,3.]],threshold:0.0511734895408154,right_val:0.3123018145561218,left_val:-0.0324603095650673},{features:[[10,5,3,9,-1.],[11,5,1,9,3.]],threshold:0.0132510699331760,right_val:-0.4421024918556213,left_val:0.0236550606787205},{features:[[3,7,3,4,-1.],[4,7,1,4,3.]],threshold:-2.0110961049795151e-003,right_val:-0.0939614623785019,left_val:0.1035939976572990},{features:[[4,6,2,2,-1.],[4,6,1,1,2.],[5,7,1,1,2.]],threshold:-3.2843051012605429e-003,right_val:-0.0299212802201509,left_val:0.3319692909717560},{features:[[0,2,2,3,-1.],[0,3,2,1,3.]],threshold:8.8341237278655171e-004,right_val:-0.1619275063276291,left_val:0.0598918199539185},{features:[[12,0,8,4,-1.],[12,0,4,2,2.],[16,2,4,2,2.]],threshold:8.4265992045402527e-003,right_val:0.2369119971990585,left_val:-0.0369287505745888},{features:[[11,1,8,2,-1.],[11,1,4,1,2.],[15,2,4,1,2.]],threshold:-1.4503750207950361e-005,right_val:-0.1329060941934586,left_val:0.0773738473653793},{features:[[12,2,7,3,-1.],[12,3,7,1,3.]],threshold:8.0891689285635948e-003,right_val:-0.3096123039722443,left_val:0.0288175698369741},{features:[[3,6,3,2,-1.],[4,6,1,2,3.]],threshold:0.0103399399667978,right_val:0.3706004917621613,left_val:-0.0248505696654320},{features:[[4,6,4,6,-1.],[4,9,4,3,2.]],threshold:-2.2790539078414440e-003,right_val:0.0418775305151939,left_val:-0.2205137014389038},{features:[[13,12,6,4,-1.],[13,12,3,2,2.],[16,14,3,2,2.]],threshold:-1.7716860165819526e-003,right_val:-0.0652523636817932,left_val:0.1420508027076721},{features:[[13,10,2,4,-1.],[13,12,2,2,2.]],threshold:-6.9317207671701908e-003,right_val:0.0276059694588184,left_val:-0.3355607986450195},{features:[[15,12,3,3,-1.],[15,13,3,1,3.]],threshold:-4.2506060563027859e-003,right_val:-0.0373453199863434,left_val:0.2359198033809662},{features:[[14,14,2,3,-1.],[14,15,2,1,3.]],threshold:1.5317599754780531e-003,right_val:-0.2343820035457611,left_val:0.0396570116281509},{features:[[18,4,2,8,-1.],[18,4,1,4,2.],[19,8,1,4,2.]],threshold:1.4941049739718437e-003,right_val:0.1446844041347504,left_val:-0.0603119991719723},{features:[[7,14,2,4,-1.],[7,14,1,2,2.],[8,16,1,2,2.]],threshold:-5.2249869331717491e-003,right_val:0.0232572704553604,left_val:-0.4066025018692017},{features:[[14,3,6,6,-1.],[14,5,6,2,3.]],threshold:6.4759532688185573e-004,right_val:-0.1298730969429016,left_val:0.0648282393813133},{features:[[19,7,1,2,-1.],[19,8,1,1,2.]],threshold:3.2836120226420462e-004,right_val:-0.1483581066131592,left_val:0.0619176290929317},{features:[[8,8,6,2,-1.],[8,8,3,1,2.],[11,9,3,1,2.]],threshold:-3.4691279288381338e-003,right_val:-0.0572003498673439,left_val:0.1566284000873566},{features:[[19,6,1,3,-1.],[19,7,1,1,3.]],threshold:4.5903379213996232e-004,right_val:-0.1909317970275879,left_val:0.0525178983807564},{features:[[7,8,7,3,-1.],[7,9,7,1,3.]],threshold:-2.6641879230737686e-003,right_val:-0.0681547001004219,left_val:0.1523590981960297},{features:[[18,6,2,6,-1.],[18,6,1,3,2.],[19,9,1,3,2.]],threshold:-8.2513149827718735e-003,right_val:-0.0284806098788977,left_val:0.3668031096458435},{features:[[5,8,8,6,-1.],[5,10,8,2,3.]],threshold:7.1076201274991035e-003,right_val:-0.0679929703474045,left_val:0.1544535011053085},{features:[[1,1,18,15,-1.],[10,1,9,15,2.]],threshold:-0.4380800127983093,right_val:0.0366394892334938,left_val:-0.2887153029441834},{features:[[11,7,5,4,-1.],[11,9,5,2,2.]],threshold:6.3719082390889525e-004,right_val:0.0598603412508965,left_val:-0.1599503010511398},{features:[[10,12,2,3,-1.],[11,12,1,3,2.]],threshold:-1.9303169392514974e-004,right_val:-0.1092481985688210,left_val:0.0867039710283279},{features:[[0,7,2,4,-1.],[0,9,2,2,2.]],threshold:3.0723758973181248e-003,right_val:-0.1770005971193314,left_val:0.0485439598560333},{features:[[6,12,4,2,-1.],[6,12,2,1,2.],[8,13,2,1,2.]],threshold:1.8341860268265009e-003,right_val:0.1823212951421738,left_val:-0.0519012399017811},{features:[[7,7,6,8,-1.],[7,11,6,4,2.]],threshold:0.0631723105907440,right_val:-0.4287061095237732,left_val:0.0233088992536068},{features:[[9,9,2,4,-1.],[9,11,2,2,2.]],threshold:2.4458649568259716e-003,right_val:0.1197450011968613,left_val:-0.0864252895116806},{features:[[9,10,6,6,-1.],[9,12,6,2,3.]],threshold:1.1953969951719046e-003,right_val:-0.1043049022555351,left_val:0.1168588995933533},{features:[[12,13,4,2,-1.],[12,14,4,1,2.]],threshold:3.1024610507301986e-004,right_val:-0.1919602006673813,left_val:0.0622819885611534},{features:[[0,4,8,1,-1.],[4,4,4,1,2.]],threshold:-0.0319701582193375,right_val:0.0130875697359443,left_val:-0.6418489813804627},{features:[[14,13,1,2,-1.],[14,14,1,1,2.]],threshold:-1.0163170518353581e-003,right_val:0.0340962111949921,left_val:-0.2521066069602966},{features:[[8,7,2,6,-1.],[8,7,1,3,2.],[9,10,1,3,2.]],threshold:-5.1776540931314230e-004,right_val:-0.0828137770295143,left_val:0.1187409013509750},{features:[[5,8,10,6,-1.],[5,8,5,3,2.],[10,11,5,3,2.]],threshold:-4.0794219821691513e-003,right_val:0.0657089725136757,left_val:-0.1613530963659287},{features:[[5,12,3,3,-1.],[5,13,3,1,3.]],threshold:9.9409874528646469e-003,right_val:0.3510453104972839,left_val:-0.0301602203398943},{features:[[5,10,2,2,-1.],[5,11,2,1,2.]],threshold:1.9788760691881180e-003,right_val:0.2329564988613129,left_val:-0.0449453592300415},{features:[[6,2,4,15,-1.],[6,7,4,5,3.]],threshold:0.1097524985671043,right_val:-0.6042336225509644,left_val:0.0166202206164598},{features:[[7,6,2,4,-1.],[7,6,1,2,2.],[8,8,1,2,2.]],threshold:-9.2024728655815125e-003,right_val:0.0141229098662734,left_val:-0.5600035786628723},{features:[[5,9,2,3,-1.],[5,10,2,1,3.]],threshold:5.8626191457733512e-004,right_val:0.0841980874538422,left_val:-0.1062211990356445},{features:[[15,16,2,2,-1.],[15,16,1,1,2.],[16,17,1,1,2.]],threshold:3.3601750619709492e-003,right_val:0.4182012975215912,left_val:-0.0215835291892290},{features:[[4,11,4,6,-1.],[4,13,4,2,3.]],threshold:-0.0481436699628830,right_val:0.0149544598534703,left_val:-0.7209215760231018},{features:[[5,0,3,6,-1.],[6,0,1,6,3.]],threshold:0.0122098596766591,right_val:-0.3548215031623840,left_val:0.0215442907065153},{features:[[4,11,12,4,-1.],[4,11,6,2,2.],[10,13,6,2,2.]],threshold:-0.0399614498019218,right_val:9.4328429549932480e-003,left_val:-0.8884826898574829},{features:[[7,13,3,3,-1.],[7,14,3,1,3.]],threshold:1.5312479808926582e-003,right_val:0.1356963068246841,left_val:-0.0640708804130554},{features:[[9,12,6,2,-1.],[9,13,6,1,2.]],threshold:8.9791123173199594e-005,right_val:-0.1839367002248764,left_val:0.0509327687323093}],threshold:-1.3418790102005005},{simpleClassifiers:[{features:[[8,0,12,8,-1.],[8,0,6,4,2.],[14,4,6,4,2.]],threshold:-0.0387413688004017,right_val:-0.2331219017505646,left_val:0.2877883017063141},{features:[[10,8,4,4,-1.],[10,8,2,2,2.],[12,10,2,2,2.]],threshold:-2.5511500425636768e-003,right_val:-0.2111607044935226,left_val:0.2510859966278076},{features:[[12,10,1,6,-1.],[12,13,1,3,2.]],threshold:-2.7973129181191325e-004,right_val:-0.3406926989555359,left_val:0.0899169221520424},{features:[[5,5,3,10,-1.],[6,5,1,10,3.]],threshold:1.1981100542470813e-003,right_val:0.1360266059637070,left_val:-0.2254222929477692},{features:[[4,0,14,6,-1.],[11,0,7,6,2.]],threshold:-5.6686070747673512e-003,right_val:-0.2808071076869965,left_val:0.0828472599387169},{features:[[9,7,2,6,-1.],[9,7,1,3,2.],[10,10,1,3,2.]],threshold:-2.7642669738270342e-004,right_val:-0.1884865015745163,left_val:0.1048547998070717},{features:[[8,4,3,1,-1.],[9,4,1,1,3.]],threshold:2.0516710355877876e-003,right_val:-0.4860847890377045,left_val:3.4714280627667904e-003},{features:[[11,14,2,2,-1.],[11,15,2,1,2.]],threshold:-1.4435249795496929e-005,right_val:-0.1935610026121140,left_val:0.0842758193612099},{features:[[9,18,6,2,-1.],[12,18,3,2,2.]],threshold:7.4418791336938739e-004,right_val:0.1176951974630356,left_val:-0.1252675056457520},{features:[[8,12,8,6,-1.],[8,15,8,3,2.]],threshold:-0.0499232411384583,right_val:0.0279103908687830,left_val:-0.4008029997348785},{features:[[7,0,8,6,-1.],[7,2,8,2,3.]],threshold:9.2694535851478577e-003,right_val:0.1755045056343079,left_val:-0.0910889133810997},{features:[[1,2,12,3,-1.],[5,2,4,3,3.]],threshold:-7.4646030552685261e-003,right_val:-0.1038549989461899,left_val:0.1638046950101852},{features:[[5,4,10,12,-1.],[5,4,5,6,2.],[10,10,5,6,2.]],threshold:-8.1985909491777420e-003,right_val:0.0854150205850601,left_val:-0.1916898041963577},{features:[[5,8,3,2,-1.],[5,9,3,1,2.]],threshold:-8.1690691877156496e-004,right_val:0.0408335812389851,left_val:-0.3079330921173096},{features:[[7,12,1,3,-1.],[7,13,1,1,3.]],threshold:2.8902110643684864e-003,right_val:0.2925941944122315,left_val:-0.0503242015838623},{features:[[5,11,3,3,-1.],[5,12,3,1,3.]],threshold:8.0008199438452721e-003,right_val:0.3196487128734589,left_val:-0.0468635782599449},{features:[[8,10,6,9,-1.],[8,13,6,3,3.]],threshold:-5.8349180035293102e-003,right_val:0.0881372615695000,left_val:-0.1548918038606644},{features:[[7,8,3,6,-1.],[7,10,3,2,3.]],threshold:-1.2492289533838630e-003,right_val:0.0361209884285927,left_val:-0.3629462122917175},{features:[[3,4,3,14,-1.],[4,4,1,14,3.]],threshold:0.0229504797607660,right_val:0.2853271961212158,left_val:-0.0471197701990604},{features:[[3,10,3,6,-1.],[4,10,1,6,3.]],threshold:-6.9193239323794842e-003,right_val:-0.0735475569963455,left_val:0.1787364929914475},{features:[[4,8,2,2,-1.],[4,8,1,1,2.],[5,9,1,1,2.]],threshold:-1.9392240210436285e-004,right_val:-0.0924891009926796,left_val:0.1391142010688782},{features:[[10,13,2,3,-1.],[10,14,2,1,3.]],threshold:1.9811228848993778e-003,right_val:-0.3094269037246704,left_val:0.0434480085968971},{features:[[6,14,8,4,-1.],[6,14,4,2,2.],[10,16,4,2,2.]],threshold:0.0160184893757105,right_val:0.3424893915653229,left_val:-0.0397189185023308},{features:[[5,12,3,4,-1.],[6,12,1,4,3.]],threshold:9.3541406095027924e-003,right_val:-0.4450210034847260,left_val:0.0324826501309872},{features:[[17,11,2,2,-1.],[17,11,1,1,2.],[18,12,1,1,2.]],threshold:-1.3822780456393957e-003,right_val:-0.0564102008938789,left_val:0.2162707000970841},{features:[[15,6,1,10,-1.],[15,11,1,5,2.]],threshold:0.0250658206641674,right_val:-0.5395401120185852,left_val:0.0231232307851315},{features:[[7,1,12,6,-1.],[7,3,12,2,3.]],threshold:0.0597985796630383,right_val:-0.3657259047031403,left_val:0.0287475790828466},{features:[[4,9,2,4,-1.],[4,9,1,2,2.],[5,11,1,2,2.]],threshold:-2.7519159484654665e-003,right_val:-0.0639909729361534,left_val:0.1749134957790375},{features:[[6,7,6,12,-1.],[9,7,3,12,2.]],threshold:-0.0320936404168606,right_val:0.0409451089799404,left_val:-0.2569555044174194},{features:[[7,6,2,3,-1.],[8,6,1,3,2.]],threshold:-2.3349749390035868e-003,right_val:-0.0728366896510124,left_val:0.1543388068675995},{features:[[0,1,1,3,-1.],[0,2,1,1,3.]],threshold:2.6897678617388010e-004,right_val:-0.1551322042942047,left_val:0.0727212429046631},{features:[[0,1,1,3,-1.],[0,2,1,1,3.]],threshold:-8.9813407976180315e-004,right_val:0.0537382215261459,left_val:-0.2069962024688721},{features:[[11,15,3,5,-1.],[12,15,1,5,3.]],threshold:3.8521869573742151e-003,right_val:-0.2807596921920776,left_val:0.0365620106458664},{features:[[8,6,4,6,-1.],[8,8,4,2,3.]],threshold:0.0134400902315974,right_val:0.3187696039676666,left_val:-0.0360464788973331},{features:[[5,3,3,12,-1.],[5,7,3,4,3.]],threshold:7.7129118144512177e-003,right_val:-0.1178748980164528,left_val:0.0959600135684013},{features:[[7,9,2,2,-1.],[7,9,1,1,2.],[8,10,1,1,2.]],threshold:2.1991880203131586e-004,right_val:0.0849395766854286,left_val:-0.1324986964464188},{features:[[4,4,2,12,-1.],[4,8,2,4,3.]],threshold:-7.4781170114874840e-003,right_val:0.0503109283745289,left_val:-0.2307303994894028},{features:[[4,5,7,3,-1.],[4,6,7,1,3.]],threshold:8.9175272732973099e-003,right_val:0.2032064050436020,left_val:-0.0539247691631317},{features:[[13,5,2,3,-1.],[13,6,2,1,3.]],threshold:2.2819850128144026e-003,right_val:-0.3084133863449097,left_val:0.0352649092674255},{features:[[4,0,2,2,-1.],[4,0,1,1,2.],[5,1,1,1,2.]],threshold:2.6413009036332369e-003,right_val:0.3172146081924439,left_val:-0.0329392291605473},{features:[[11,8,3,11,-1.],[12,8,1,11,3.]],threshold:-1.4605689793825150e-003,right_val:0.0633745566010475,left_val:-0.1715427935123444},{features:[[4,0,2,2,-1.],[4,0,1,1,2.],[5,1,1,1,2.]],threshold:-3.1993410084396601e-003,right_val:-0.0307174902409315,left_val:0.3450168073177338},{features:[[9,3,2,2,-1.],[9,3,1,1,2.],[10,4,1,1,2.]],threshold:2.3919229861348867e-003,right_val:-0.4856416881084442,left_val:0.0208875201642513},{features:[[7,11,3,2,-1.],[8,11,1,2,3.]],threshold:-3.5997610539197922e-003,right_val:-0.0356058217585087,left_val:0.2890053093433380},{features:[[11,12,2,1,-1.],[12,12,1,1,2.]],threshold:-1.4754279618500732e-005,right_val:-0.1458061933517456,left_val:0.0727446228265762},{features:[[8,8,4,2,-1.],[10,8,2,2,2.]],threshold:0.0159683600068092,right_val:-0.6744545102119446,left_val:0.0125485500320792},{features:[[17,15,3,1,-1.],[18,15,1,1,3.]],threshold:-4.0752082131803036e-003,right_val:-0.0321554504334927,left_val:0.3144747018814087},{features:[[12,6,2,4,-1.],[12,6,1,2,2.],[13,8,1,2,2.]],threshold:7.5432872108649462e-005,right_val:0.0896650925278664,left_val:-0.0997386574745178},{features:[[8,3,9,11,-1.],[11,3,3,11,3.]],threshold:-0.0396322496235371,right_val:-0.0348007306456566,left_val:0.2761740088462830},{features:[[10,8,2,2,-1.],[11,8,1,2,2.]],threshold:2.9354610887821764e-005,right_val:0.0885196104645729,left_val:-0.1402300000190735},{features:[[12,5,3,9,-1.],[12,8,3,3,3.]],threshold:0.0318189896643162,right_val:-0.3395833969116211,left_val:0.0299256499856710},{features:[[13,0,6,17,-1.],[15,0,2,17,3.]],threshold:0.1269010007381439,right_val:-0.8993232846260071,left_val:0.0112633900716901},{features:[[6,6,3,4,-1.],[7,6,1,4,3.]],threshold:-3.5952320322394371e-003,right_val:-0.0581134893000126,left_val:0.1775175929069519},{features:[[5,6,4,7,-1.],[7,6,2,7,2.]],threshold:-0.0192312598228455,right_val:0.0405871011316776,left_val:-0.3317398130893707},{features:[[7,5,3,2,-1.],[8,5,1,2,3.]],threshold:2.2836721036583185e-003,right_val:-0.2837064862251282,left_val:0.0372060090303421},{features:[[7,15,6,2,-1.],[7,15,3,1,2.],[10,16,3,1,2.]],threshold:-1.6381660243496299e-003,right_val:-0.0677815228700638,left_val:0.1462917029857636},{features:[[11,14,1,3,-1.],[11,15,1,1,3.]],threshold:2.1173330023884773e-003,right_val:-0.4392867982387543,left_val:0.0207739695906639},{features:[[2,12,6,7,-1.],[4,12,2,7,3.]],threshold:6.4710620790719986e-003,right_val:0.1398161053657532,left_val:-0.0721339285373688},{features:[[11,17,5,3,-1.],[11,18,5,1,3.]],threshold:-3.1431620009243488e-003,right_val:0.0475446693599224,left_val:-0.1990344971418381},{features:[[17,11,2,2,-1.],[17,11,1,1,2.],[18,12,1,1,2.]],threshold:1.6056640306487679e-003,right_val:0.2593173980712891,left_val:-0.0397518984973431},{features:[[10,17,6,3,-1.],[10,18,6,1,3.]],threshold:4.8740832135081291e-003,right_val:-0.2761198878288269,left_val:0.0340823791921139},{features:[[2,15,1,2,-1.],[2,16,1,1,2.]],threshold:-9.6354109700769186e-005,right_val:0.0835031867027283,left_val:-0.1070960983633995},{features:[[8,6,3,3,-1.],[8,7,3,1,3.]],threshold:7.7706458978354931e-003,right_val:0.2949387133121491,left_val:-0.0300953499972820},{features:[[7,7,1,2,-1.],[7,8,1,1,2.]],threshold:1.3028859393671155e-004,right_val:0.0945786833763123,left_val:-0.1123289018869400},{features:[[2,15,2,2,-1.],[2,16,2,1,2.]],threshold:1.2239719508215785e-003,right_val:-0.1810626983642578,left_val:0.0519996210932732},{features:[[3,16,3,1,-1.],[4,16,1,1,3.]],threshold:-8.7549741147086024e-004,right_val:-0.0750989466905594,left_val:0.1427669972181320},{features:[[3,0,3,20,-1.],[4,0,1,20,3.]],threshold:-0.0880819931626320,right_val:0.0143536403775215,left_val:-0.7084882855415344},{features:[[8,2,12,12,-1.],[14,2,6,12,2.]],threshold:-0.3285416066646576,right_val:0.0166046004742384,left_val:-0.4968742132186890},{features:[[5,3,2,3,-1.],[5,4,2,1,3.]],threshold:9.8696127533912659e-003,right_val:-0.4997830092906952,left_val:0.0193643700331450},{features:[[3,4,2,2,-1.],[3,4,1,1,2.],[4,5,1,1,2.]],threshold:-2.7273639570921659e-003,right_val:-0.0328314006328583,left_val:0.2961252033710480},{features:[[0,15,20,3,-1.],[10,15,10,3,2.]],threshold:0.0991001427173615,right_val:-0.4734495878219605,left_val:0.0197990797460079},{features:[[6,13,2,4,-1.],[6,13,1,2,2.],[7,15,1,2,2.]],threshold:-6.3501899130642414e-003,right_val:0.0169860105961561,left_val:-0.5150471925735474},{features:[[12,8,3,7,-1.],[13,8,1,7,3.]],threshold:2.9596920285257511e-005,right_val:0.0896561071276665,left_val:-0.1092301979660988},{features:[[8,9,6,10,-1.],[8,9,3,5,2.],[11,14,3,5,2.]],threshold:0.0212476700544357,right_val:0.2268427014350891,left_val:-0.0414621904492378},{features:[[2,10,16,2,-1.],[10,10,8,2,2.]],threshold:-0.0729779899120331,right_val:0.0166788697242737,left_val:-0.6322783827781677},{features:[[5,3,15,6,-1.],[10,3,5,6,3.]],threshold:0.1623091995716095,right_val:0.3753314018249512,left_val:-0.0256619099527597},{features:[[10,14,2,1,-1.],[11,14,1,1,2.]],threshold:-1.4590819773729891e-005,right_val:-0.1190098971128464,left_val:0.0856136009097099},{features:[[9,11,4,4,-1.],[11,11,2,4,2.]],threshold:2.7719149366021156e-003,right_val:0.2031137943267822,left_val:-0.0546492487192154},{features:[[12,8,2,4,-1.],[12,10,2,2,2.]],threshold:-8.7484354153275490e-003,right_val:0.0155718903988600,left_val:-0.7367451786994934},{features:[[1,3,10,14,-1.],[1,3,5,7,2.],[6,10,5,7,2.]],threshold:0.0136791998520494,right_val:-0.1159050017595291,left_val:0.0789029300212860},{features:[[8,0,3,4,-1.],[8,2,3,2,2.]],threshold:-0.0110011501237750,right_val:-0.0323849916458130,left_val:0.3169082105159760},{features:[[10,2,2,1,-1.],[11,2,1,1,2.]],threshold:3.2964799902401865e-004,right_val:-0.2045145034790039,left_val:0.0500165298581123},{features:[[5,12,5,3,-1.],[5,13,5,1,3.]],threshold:2.7753270696848631e-003,right_val:0.1593590974807739,left_val:-0.0674074292182922},{features:[[7,12,1,3,-1.],[7,13,1,1,3.]],threshold:-2.8740249108523130e-003,right_val:-0.0510314889252186,left_val:0.2245596051216126},{features:[[10,12,6,3,-1.],[10,13,6,1,3.]],threshold:8.1631669308990240e-004,right_val:-0.1479161977767944,left_val:0.0698495507240295},{features:[[6,4,1,3,-1.],[6,5,1,1,3.]],threshold:3.7573580630123615e-003,right_val:-0.3138797879219055,left_val:0.0315946005284786},{features:[[2,0,18,3,-1.],[2,1,18,1,3.]],threshold:-3.4902389161288738e-003,right_val:-0.0859479308128357,left_val:0.1163842976093292},{features:[[8,8,11,6,-1.],[8,10,11,2,3.]],threshold:-0.0294153206050396,right_val:-0.0161406099796295,left_val:0.6840342879295349},{features:[[2,6,10,8,-1.],[2,6,5,4,2.],[7,10,5,4,2.]],threshold:-8.8095385581254959e-003,right_val:0.0499508902430534,left_val:-0.2077531963586807},{features:[[9,2,6,2,-1.],[11,2,2,2,3.]],threshold:-0.0154599398374558,right_val:0.0200655590742826,left_val:-0.4874846041202545},{features:[[13,9,6,3,-1.],[15,9,2,3,3.]],threshold:-0.0364813692867756,right_val:0.0158509891480207,left_val:-0.5239514112472534},{features:[[5,3,1,2,-1.],[5,4,1,1,2.]],threshold:-8.8937362306751311e-005,right_val:0.0669268071651459,left_val:-0.1329932063817978},{features:[[1,7,3,1,-1.],[2,7,1,1,3.]],threshold:1.4536709932144731e-004,right_val:-0.1043582037091255,left_val:0.0871703699231148},{features:[[0,6,8,6,-1.],[4,6,4,6,2.]],threshold:0.1521687954664230,right_val:-0.6497017145156860,left_val:0.0161405801773071},{features:[[11,9,1,2,-1.],[11,10,1,1,2.]],threshold:-4.2344830580987036e-004,right_val:-0.0529745407402515,left_val:0.1804583966732025},{features:[[12,13,1,2,-1.],[12,14,1,1,2.]],threshold:1.0672640055418015e-003,right_val:-0.4824204146862030,left_val:0.0205483809113503},{features:[[10,15,10,4,-1.],[10,15,5,2,2.],[15,17,5,2,2.]],threshold:0.0154916802421212,right_val:0.1836396008729935,left_val:-0.0515408515930176},{features:[[12,11,1,2,-1.],[12,12,1,1,2.]],threshold:6.1393307987600565e-004,right_val:-0.3103170096874237,left_val:0.0299837291240692},{features:[[6,11,2,1,-1.],[7,11,1,1,2.]],threshold:-1.4619939975091256e-005,right_val:-0.0916341319680214,left_val:0.1036849990487099},{features:[[11,3,3,2,-1.],[12,3,1,2,3.]],threshold:6.9900648668408394e-003,right_val:-0.5948538184165955,left_val:0.0146839097142220},{features:[[4,7,6,5,-1.],[7,7,3,5,2.]],threshold:-5.3000110201537609e-003,right_val:0.0705427825450897,left_val:-0.1245777010917664},{features:[[3,16,3,1,-1.],[4,16,1,1,3.]],threshold:5.0289987120777369e-004,right_val:0.1222871020436287,left_val:-0.0771356895565987},{features:[[4,7,6,5,-1.],[7,7,3,5,2.]],threshold:0.0111909797415137,right_val:-0.1809180974960327,left_val:0.0503080599009991},{features:[[5,7,6,3,-1.],[7,7,2,3,3.]],threshold:0.0170198194682598,right_val:0.3085198104381561,left_val:-0.0388167686760426},{features:[[7,8,4,8,-1.],[7,8,2,4,2.],[9,12,2,4,2.]],threshold:-5.8241572696715593e-004,right_val:-0.0761154815554619,left_val:0.1253779977560043},{features:[[4,2,14,12,-1.],[4,6,14,4,3.]],threshold:0.0200366694480181,right_val:-0.1808298975229263,left_val:0.0498994812369347},{features:[[4,14,2,6,-1.],[4,14,1,3,2.],[5,17,1,3,2.]],threshold:-5.4328818805515766e-003,right_val:-0.0423854105174541,left_val:0.2340977042913437},{features:[[7,11,2,4,-1.],[7,13,2,2,2.]],threshold:-2.9535360226873308e-005,right_val:-0.1575352996587753,left_val:0.0576302409172058},{features:[[6,4,10,15,-1.],[6,9,10,5,3.]],threshold:-0.1035237014293671,right_val:-0.0129899298772216,left_val:0.7158774137496948},{features:[[6,11,12,6,-1.],[6,13,12,2,3.]],threshold:-0.0121222697198391,right_val:0.0665664374828339,left_val:-0.1478897035121918},{features:[[6,17,4,3,-1.],[6,18,4,1,3.]],threshold:3.0254870653152466e-003,right_val:0.1714082956314087,left_val:-0.0543786287307739},{features:[[6,17,4,3,-1.],[6,18,4,1,3.]],threshold:-5.8111078105866909e-003,right_val:-0.0576526410877705,left_val:0.2442214936017990},{features:[[9,13,3,7,-1.],[10,13,1,7,3.]],threshold:8.2830740138888359e-003,right_val:-0.4296199977397919,left_val:0.0227204002439976},{features:[[2,8,5,2,-1.],[2,9,5,1,2.]],threshold:0.0123751200735569,right_val:-0.3750562965869904,left_val:0.0228102896362543},{features:[[14,1,3,8,-1.],[15,1,1,8,3.]],threshold:0.0192112103104591,right_val:-0.6552945971488953,left_val:0.0117910597473383},{features:[[2,12,1,2,-1.],[2,13,1,1,2.]],threshold:3.1843129545450211e-004,right_val:-0.1399556994438171,left_val:0.0641300603747368},{features:[[8,6,2,2,-1.],[8,6,1,1,2.],[9,7,1,1,2.]],threshold:8.4224628517404199e-004,right_val:0.1752558052539825,left_val:-0.0541342794895172},{features:[[4,3,10,12,-1.],[4,9,10,6,2.]],threshold:-0.1608504951000214,right_val:7.8549478203058243e-003,left_val:-0.9457141757011414},{features:[[5,9,8,4,-1.],[5,9,4,2,2.],[9,11,4,2,2.]],threshold:-1.6774870455265045e-003,right_val:0.0457870289683342,left_val:-0.1916612982749939},{features:[[9,9,4,4,-1.],[9,11,4,2,2.]],threshold:-1.8989649834111333e-003,right_val:-0.0658969134092331,left_val:0.1578315049409866},{features:[[5,10,4,2,-1.],[5,11,4,1,2.]],threshold:4.0205760160461068e-004,right_val:0.1311838030815125,left_val:-0.0735990926623344},{features:[[6,17,2,1,-1.],[7,17,1,1,2.]],threshold:2.4369959719479084e-003,right_val:-0.4274596869945526,left_val:0.0235228706151247},{features:[[12,12,2,1,-1.],[13,12,1,1,2.]],threshold:-2.8488409952842630e-005,right_val:-0.1359900981187820,left_val:0.0632806196808815},{features:[[11,6,4,8,-1.],[13,6,2,8,2.]],threshold:0.0195386391133070,right_val:0.4753474891185761,left_val:-0.0214582700282335},{features:[[9,4,3,10,-1.],[10,4,1,10,3.]],threshold:-1.6530340071767569e-003,right_val:0.0594559796154499,left_val:-0.1532326042652130},{features:[[0,18,9,2,-1.],[3,18,3,2,3.]],threshold:-2.1052840165793896e-003,right_val:-0.0831181034445763,left_val:0.1101763993501663},{features:[[15,13,3,3,-1.],[15,14,3,1,3.]],threshold:-4.5266482047736645e-003,right_val:-0.0357439406216145,left_val:0.2581537961959839},{features:[[9,12,2,2,-1.],[9,12,1,1,2.],[10,13,1,1,2.]],threshold:-1.6275560483336449e-004,right_val:0.0692957267165184,left_val:-0.1354829072952271},{features:[[13,12,7,3,-1.],[13,13,7,1,3.]],threshold:-3.3048219047486782e-003,right_val:-0.0521564409136772,left_val:0.1780602931976318},{features:[[14,10,6,2,-1.],[14,11,6,1,2.]],threshold:-5.1905210129916668e-003,right_val:0.0259909909218550,left_val:-0.3489732146263123},{features:[[14,5,5,14,-1.],[14,12,5,7,2.]],threshold:0.1119081005454063,right_val:-0.2959755063056946,left_val:0.0299620293080807},{features:[[4,16,5,3,-1.],[4,17,5,1,3.]],threshold:-5.2873138338327408e-003,right_val:-0.0502162985503674,left_val:0.1856449991464615},{features:[[5,16,5,3,-1.],[5,17,5,1,3.]],threshold:2.6098049711436033e-003,right_val:0.1436513066291809,left_val:-0.0735592767596245},{features:[[8,14,4,5,-1.],[10,14,2,5,2.]],threshold:-2.8581928927451372e-003,right_val:0.0754330828785896,left_val:-0.1260513961315155},{features:[[9,14,2,1,-1.],[10,14,1,1,2.]],threshold:-2.9555680157500319e-005,right_val:-0.1038620024919510,left_val:0.1073331013321877},{features:[[6,10,6,2,-1.],[6,10,3,1,2.],[9,11,3,1,2.]],threshold:5.9023561334470287e-005,right_val:0.0764783918857574,left_val:-0.1302911937236786},{features:[[5,8,6,6,-1.],[8,8,3,6,2.]],threshold:-0.0433447211980820,right_val:0.0141733000054955,left_val:-0.6929922103881836},{features:[[10,13,7,6,-1.],[10,15,7,2,3.]],threshold:-0.0469469986855984,right_val:0.0124229202046990,left_val:-0.5580375194549561},{features:[[4,1,2,8,-1.],[4,1,1,4,2.],[5,5,1,4,2.]],threshold:-0.0151890600100160,right_val:-0.0255641192197800,left_val:0.3704977035522461},{features:[[3,6,6,4,-1.],[3,6,3,2,2.],[6,8,3,2,2.]],threshold:0.0163618791848421,right_val:-0.3427892029285431,left_val:0.0270499791949987},{features:[[15,2,3,13,-1.],[16,2,1,13,3.]],threshold:0.0407528392970562,right_val:-0.8868371248245239,left_val:9.3995258212089539e-003},{features:[[16,10,2,6,-1.],[16,10,1,3,2.],[17,13,1,3,2.]],threshold:-0.0108798695728183,right_val:-0.0194508600980043,left_val:0.5326058268547058},{features:[[13,19,2,1,-1.],[14,19,1,1,2.]],threshold:-7.7538257755804807e-005,right_val:0.0772882327437401,left_val:-0.1169624999165535},{features:[[7,11,2,1,-1.],[8,11,1,1,2.]],threshold:-4.0953079587779939e-004,right_val:-0.0537114888429642,left_val:0.1621436029672623},{features:[[4,10,3,4,-1.],[5,10,1,4,3.]],threshold:-0.0184642393141985,right_val:0.0198381897062063,left_val:-0.5084478855133057},{features:[[4,7,2,4,-1.],[4,7,1,2,2.],[5,9,1,2,2.]],threshold:-5.6788129732012749e-003,right_val:-0.0302039906382561,left_val:0.3020392060279846},{features:[[10,7,5,4,-1.],[10,9,5,2,2.]],threshold:3.8324110209941864e-004,right_val:0.0549020282924175,left_val:-0.1684108972549439},{features:[[7,4,8,16,-1.],[7,4,4,8,2.],[11,12,4,8,2.]],threshold:6.4761550165712833e-003,right_val:-0.1074616014957428,left_val:0.0951402634382248},{features:[[5,9,10,6,-1.],[5,9,5,3,2.],[10,12,5,3,2.]],threshold:-2.4377859663218260e-003,right_val:0.0634076073765755,left_val:-0.1564771980047226},{features:[[5,11,3,2,-1.],[5,12,3,1,2.]],threshold:5.4156291298568249e-004,right_val:0.1844162940979004,left_val:-0.0659622997045517},{features:[[12,12,4,8,-1.],[12,16,4,4,2.]],threshold:0.0279170293360949,right_val:0.3503274023532867,left_val:-0.0275902301073074},{features:[[8,13,6,2,-1.],[8,14,6,1,2.]],threshold:4.6622849185951054e-004,right_val:-0.2262417972087860,left_val:0.0496288202702999},{features:[[3,12,5,6,-1.],[3,14,5,2,3.]],threshold:-0.0373167991638184,right_val:0.0213376805186272,left_val:-0.4297817051410675},{features:[[16,0,2,2,-1.],[16,0,1,1,2.],[17,1,1,1,2.]],threshold:-2.6047111023217440e-003,right_val:-0.0254050493240356,left_val:0.3665099143981934},{features:[[13,3,3,4,-1.],[14,3,1,4,3.]],threshold:5.1927138119935989e-003,right_val:-0.3347857892513275,left_val:0.0268779303878546},{features:[[15,11,3,1,-1.],[16,11,1,1,3.]],threshold:3.0462879221886396e-003,right_val:0.2978835999965668,left_val:-0.0308482907712460},{features:[[14,0,6,5,-1.],[16,0,2,5,3.]],threshold:-4.1325599886476994e-004,right_val:-0.1214753016829491,left_val:0.0729867890477180},{features:[[10,1,8,18,-1.],[10,10,8,9,2.]],threshold:-0.1145612001419067,right_val:-0.0333798006176949,left_val:0.3195546865463257},{features:[[11,5,3,2,-1.],[11,6,3,1,2.]],threshold:-1.3044059742242098e-003,right_val:0.0546343699097633,left_val:-0.2062529027462006},{features:[[5,5,2,1,-1.],[6,5,1,1,2.]],threshold:4.5045089791528881e-005,right_val:0.0781233832240105,left_val:-0.1137655004858971},{features:[[3,4,3,3,-1.],[4,4,1,3,3.]],threshold:1.8890319624915719e-003,right_val:0.1700129956007004,left_val:-0.0655787289142609},{features:[[11,14,1,3,-1.],[11,15,1,1,3.]],threshold:-5.4107961477711797e-004,right_val:0.0516118109226227,left_val:-0.1818414032459259},{features:[[16,13,3,3,-1.],[16,14,3,1,3.]],threshold:4.4150161556899548e-003,right_val:0.2493844926357269,left_val:-0.0363247804343700},{features:[[15,8,5,12,-1.],[15,14,5,6,2.]],threshold:-0.0218780506402254,right_val:0.0548111088573933,left_val:-0.1764367967844009},{features:[[3,0,3,10,-1.],[4,0,1,10,3.]],threshold:-2.0328219980001450e-003,right_val:-0.0971294119954109,left_val:0.0942661836743355},{features:[[15,15,1,2,-1.],[15,16,1,1,2.]],threshold:2.6754371356219053e-004,right_val:-0.1544201970100403,left_val:0.0574879311025143},{features:[[15,0,4,2,-1.],[15,0,2,1,2.],[17,1,2,1,2.]],threshold:1.4061420224606991e-003,right_val:0.1881417036056519,left_val:-0.0502689592540264},{features:[[17,2,2,1,-1.],[18,2,1,1,2.]],threshold:2.0725419744849205e-004,right_val:-0.1253813058137894,left_val:0.0776591897010803},{features:[[8,13,1,3,-1.],[8,14,1,1,3.]],threshold:1.8001600401476026e-003,right_val:0.2243064939975739,left_val:-0.0426756404340267},{features:[[9,1,2,6,-1.],[9,1,1,3,2.],[10,4,1,3,2.]],threshold:-4.6744230203330517e-003,right_val:0.0293644201010466,left_val:-0.3348047137260437},{features:[[1,12,9,3,-1.],[1,13,9,1,3.]],threshold:7.2110369801521301e-003,right_val:0.1889156997203827,left_val:-0.0524413287639618},{features:[[12,14,3,3,-1.],[12,15,3,1,3.]],threshold:2.3627521004527807e-003,right_val:-0.2720044851303101,left_val:0.0344000607728958},{features:[[15,10,3,1,-1.],[16,10,1,1,3.]],threshold:-1.3181479880586267e-003,right_val:-0.0563636310398579,left_val:0.1776771992444992},{features:[[9,6,9,1,-1.],[12,6,3,1,3.]],threshold:-1.7586319881957024e-004,right_val:-0.1041231006383896,left_val:0.0915342420339584},{features:[[12,5,3,7,-1.],[13,5,1,7,3.]],threshold:-2.5801590527407825e-004,right_val:0.0813818126916885,left_val:-0.1122677996754646},{features:[[8,2,2,2,-1.],[8,3,2,1,2.]],threshold:9.6790950919967145e-005,right_val:0.0718831866979599,left_val:-0.1188192963600159},{features:[[7,0,9,2,-1.],[7,1,9,1,2.]],threshold:8.2001117989420891e-003,right_val:0.2279089987277985,left_val:-0.0402545295655727},{features:[[13,5,2,5,-1.],[14,5,1,5,2.]],threshold:-6.7277951166033745e-004,right_val:0.1277576982975006,left_val:-0.0709791034460068},{features:[[14,2,3,6,-1.],[15,2,1,6,3.]],threshold:3.7424470065161586e-004,right_val:-0.1364576071500778,left_val:0.0670964494347572},{features:[[8,6,4,3,-1.],[8,7,4,1,3.]],threshold:2.5741120334714651e-003,right_val:0.1672026067972183,left_val:-0.0543198287487030},{features:[[6,8,1,9,-1.],[6,11,1,3,3.]],threshold:4.3884690967388451e-004,right_val:-0.1102467998862267,left_val:0.0821140334010124},{features:[[3,9,7,6,-1.],[3,11,7,2,3.]],threshold:-0.0481806285679340,right_val:0.0122232101857662,left_val:-0.7221773266792297},{features:[[6,6,2,3,-1.],[6,7,2,1,3.]],threshold:9.9836904555559158e-003,right_val:-0.6744806170463562,left_val:0.0121956402435899},{features:[[5,9,3,1,-1.],[6,9,1,1,3.]],threshold:-1.2344559654593468e-003,right_val:-0.0553813390433788,left_val:0.1714538037776947},{features:[[4,5,4,4,-1.],[4,5,2,2,2.],[6,7,2,2,2.]],threshold:-2.7302911039441824e-003,right_val:0.0742667093873024,left_val:-0.1304433941841126},{features:[[8,5,2,3,-1.],[8,6,2,1,3.]],threshold:5.5562541820108891e-004,right_val:0.1045415997505188,left_val:-0.1018731966614723},{features:[[5,6,4,7,-1.],[7,6,2,7,2.]],threshold:1.5140359755605459e-003,right_val:-0.1189856007695198,left_val:0.0828438401222229},{features:[[10,8,3,5,-1.],[11,8,1,5,3.]],threshold:-7.2555973019916564e-005,right_val:0.0711324065923691,left_val:-0.1251229941844940},{features:[[11,4,3,13,-1.],[12,4,1,13,3.]],threshold:-2.4981278693303466e-004,right_val:0.0689631029963493,left_val:-0.1312561035156250},{features:[[2,13,3,3,-1.],[3,13,1,3,3.]],threshold:-6.0206428170204163e-003,right_val:-0.0476031117141247,left_val:0.2128445059061050},{features:[[4,8,3,2,-1.],[5,8,1,2,3.]],threshold:-7.2469102451577783e-004,right_val:-0.0855496302247047,left_val:0.1049965992569923},{features:[[0,4,1,3,-1.],[0,5,1,1,3.]],threshold:6.3740357290953398e-004,right_val:-0.1735329031944275,left_val:0.0546554811298847},{features:[[7,6,6,6,-1.],[9,6,2,6,3.]],threshold:0.0109011903405190,right_val:0.1875264942646027,left_val:-0.0528322793543339},{features:[[7,7,4,12,-1.],[9,7,2,12,2.]],threshold:7.0734010078012943e-003,right_val:-0.1646843999624252,left_val:0.0629588067531586},{features:[[6,12,6,3,-1.],[9,12,3,3,2.]],threshold:1.3333789538592100e-003,right_val:0.0947168096899986,left_val:-0.1259087026119232}],threshold:-1.3934370279312134},{simpleClassifiers:[{features:[[8,6,9,12,-1.],[8,10,9,4,3.]],threshold:0.0620539896190166,right_val:0.2359109967947006,left_val:-0.2542702853679657},{features:[[11,0,3,15,-1.],[11,5,3,5,3.]],threshold:5.9534627944231033e-003,right_val:0.1775193959474564,left_val:-0.2254436016082764},{features:[[8,16,6,4,-1.],[8,16,3,2,2.],[11,18,3,2,2.]],threshold:7.2477371431887150e-003,right_val:0.2755671143531799,left_val:-0.1139805018901825},{features:[[6,5,10,6,-1.],[6,7,10,2,3.]],threshold:-2.2824530024081469e-003,right_val:-0.3141239881515503,left_val:0.0862776786088943},{features:[[2,12,3,4,-1.],[3,12,1,4,3.]],threshold:0.0117760198190808,right_val:0.3444347977638245,left_val:-0.0623603388667107},{features:[[9,13,4,3,-1.],[9,14,4,1,3.]],threshold:4.3855342082679272e-003,right_val:-0.5012872815132141,left_val:0.0181057695299387},{features:[[3,0,4,6,-1.],[3,0,2,3,2.],[5,3,2,3,2.]],threshold:0.0158590693026781,right_val:0.2640259861946106,left_val:-0.0787651464343071},{features:[[5,9,6,1,-1.],[8,9,3,1,2.]],threshold:3.0654110014438629e-003,right_val:-0.4342781901359558,left_val:0.0332502387464046},{features:[[11,14,2,3,-1.],[11,15,2,1,3.]],threshold:2.5912460405379534e-003,right_val:-0.4965820014476776,left_val:0.0405785702168942},{features:[[5,8,2,1,-1.],[6,8,1,1,2.]],threshold:3.0834769131615758e-004,right_val:0.1233901977539063,left_val:-0.1461576968431473},{features:[[17,0,3,12,-1.],[17,4,3,4,3.]],threshold:-2.4314899928867817e-003,right_val:-0.1999931037425995,left_val:0.0727393329143524},{features:[[10,13,3,6,-1.],[11,13,1,6,3.]],threshold:-1.8934230320155621e-003,right_val:0.0564643703401089,left_val:-0.2337359935045242},{features:[[10,13,3,7,-1.],[11,13,1,7,3.]],threshold:4.4724289327859879e-003,right_val:-0.3125874102115631,left_val:0.0470428802073002},{features:[[6,5,6,1,-1.],[8,5,2,1,3.]],threshold:1.5810050535947084e-004,right_val:0.1013709008693695,left_val:-0.1309830993413925},{features:[[18,2,2,8,-1.],[19,2,1,8,2.]],threshold:0.0187559891492128,right_val:0.3714911043643951,left_val:-0.0381837897002697},{features:[[5,8,3,1,-1.],[6,8,1,1,3.]],threshold:-7.4876967119053006e-004,right_val:-0.0602783896028996,left_val:0.1998195946216583},{features:[[8,7,4,6,-1.],[8,7,2,3,2.],[10,10,2,3,2.]],threshold:-9.3861011555418372e-004,right_val:-0.1600127071142197,left_val:0.0874677076935768},{features:[[8,3,2,2,-1.],[8,3,1,1,2.],[9,4,1,1,2.]],threshold:-1.3442989438772202e-003,right_val:0.0365641117095947,left_val:-0.3307205140590668},{features:[[18,5,2,3,-1.],[18,6,2,1,3.]],threshold:-1.1384190293028951e-003,right_val:0.0566144809126854,left_val:-0.2063006013631821},{features:[[17,7,3,4,-1.],[18,7,1,4,3.]],threshold:2.5966269895434380e-003,right_val:0.1919585019350052,left_val:-0.0626760199666023},{features:[[8,2,2,4,-1.],[8,2,1,2,2.],[9,4,1,2,2.]],threshold:1.2499650474637747e-003,right_val:-0.1960525959730148,left_val:0.0573902800679207},{features:[[4,6,2,2,-1.],[5,6,1,2,2.]],threshold:1.1832700110971928e-003,right_val:0.1368297934532166,left_val:-0.0857887566089630},{features:[[4,8,3,1,-1.],[5,8,1,1,3.]],threshold:-5.1836138591170311e-003,right_val:-0.0467364601790905,left_val:0.3163569867610931},{features:[[10,9,9,10,-1.],[10,14,9,5,2.]],threshold:-0.1318579018115997,right_val:0.0187980905175209,left_val:-0.6227962970733643},{features:[[6,4,3,1,-1.],[7,4,1,1,3.]],threshold:1.8653980223461986e-003,right_val:-0.3010432124137878,left_val:0.0388372689485550},{features:[[8,14,1,3,-1.],[8,15,1,1,3.]],threshold:7.3482480365782976e-004,right_val:0.1500207930803299,left_val:-0.0766120478510857},{features:[[6,4,2,1,-1.],[7,4,1,1,2.]],threshold:-1.5738410002086312e-004,right_val:0.0700204521417618,left_val:-0.1658836007118225},{features:[[5,9,3,9,-1.],[5,12,3,3,3.]],threshold:5.1779212662950158e-004,right_val:-0.1635819971561432,left_val:0.0748010799288750},{features:[[5,13,7,3,-1.],[5,14,7,1,3.]],threshold:7.5904270634055138e-003,right_val:0.2448772042989731,left_val:-0.0510509908199310},{features:[[9,6,2,10,-1.],[9,6,1,5,2.],[10,11,1,5,2.]],threshold:-0.0110102500766516,right_val:0.0206220094114542,left_val:-0.5838040113449097},{features:[[13,1,3,18,-1.],[13,10,3,9,2.]],threshold:0.1162184998393059,right_val:-0.4126267135143280,left_val:0.0251750592142344},{features:[[5,13,2,3,-1.],[5,14,2,1,3.]],threshold:-7.4468040838837624e-004,right_val:-0.0896755009889603,left_val:0.1272978931665421},{features:[[9,10,3,7,-1.],[10,10,1,7,3.]],threshold:0.0117653096094728,right_val:-0.5317276120185852,left_val:0.0209066793322563},{features:[[17,0,3,13,-1.],[18,0,1,13,3.]],threshold:-4.4441698119044304e-003,right_val:-0.0787624120712280,left_val:0.1428263932466507},{features:[[13,6,1,2,-1.],[13,7,1,1,2.]],threshold:-4.3369788909330964e-004,right_val:0.0545549504458904,left_val:-0.2213145941495895},{features:[[6,15,3,2,-1.],[7,15,1,2,3.]],threshold:-1.9204010022804141e-003,right_val:0.0406009182333946,left_val:-0.2561072111129761},{features:[[5,14,2,3,-1.],[5,15,2,1,3.]],threshold:-2.9081690590828657e-003,right_val:-0.0562228299677372,left_val:0.2020632028579712},{features:[[16,6,1,6,-1.],[16,8,1,2,3.]],threshold:-1.4549949810316321e-005,right_val:-0.1177052035927773,left_val:0.0900005027651787},{features:[[0,6,2,2,-1.],[1,6,1,2,2.]],threshold:-5.3217669483274221e-004,right_val:0.0689254924654961,left_val:-0.1529943048954010},{features:[[3,12,4,8,-1.],[3,12,2,4,2.],[5,16,2,4,2.]],threshold:-0.0145901795476675,right_val:-0.0518504306674004,left_val:0.2177651971578598},{features:[[6,2,2,8,-1.],[7,2,1,8,2.]],threshold:-4.0213059401139617e-004,right_val:-0.1102764010429382,left_val:0.0940178930759430},{features:[[6,7,2,6,-1.],[6,7,1,3,2.],[7,10,1,3,2.]],threshold:-2.3089889436960220e-003,right_val:-0.0578570403158665,left_val:0.2479234933853149},{features:[[5,12,4,2,-1.],[7,12,2,2,2.]],threshold:3.1196139752864838e-004,right_val:0.0772474929690361,left_val:-0.1402194052934647},{features:[[4,9,13,2,-1.],[4,10,13,1,2.]],threshold:-9.1317007318139076e-003,right_val:-0.0289535094052553,left_val:0.4024280905723572},{features:[[19,5,1,2,-1.],[19,6,1,1,2.]],threshold:4.2655199649743736e-004,right_val:-0.2135533988475800,left_val:0.0531143881380558},{features:[[4,8,9,1,-1.],[7,8,3,1,3.]],threshold:3.9956220425665379e-003,right_val:-0.2299441993236542,left_val:0.0440669208765030},{features:[[8,8,2,1,-1.],[9,8,1,1,2.]],threshold:-1.4012040337547660e-003,right_val:-0.0451718308031559,left_val:0.2710689902305603},{features:[[3,0,2,10,-1.],[3,5,2,5,2.]],threshold:0.0360647700726986,right_val:-0.3283013105392456,left_val:0.0336280800402164},{features:[[6,2,2,1,-1.],[7,2,1,1,2.]],threshold:-1.3408949598670006e-004,right_val:0.0800780504941940,left_val:-0.1388804018497467},{features:[[14,5,3,3,-1.],[15,5,1,3,3.]],threshold:-6.9480319507420063e-003,right_val:0.0273029301315546,left_val:-0.3931545019149780},{features:[[4,8,2,2,-1.],[4,8,1,1,2.],[5,9,1,1,2.]],threshold:-1.4855440240353346e-003,right_val:-0.0515620708465576,left_val:0.1976166963577271},{features:[[8,16,9,2,-1.],[8,17,9,1,2.]],threshold:-0.0137575399130583,right_val:0.0183015707880259,left_val:-0.5562098026275635},{features:[[6,7,2,3,-1.],[6,8,2,1,3.]],threshold:8.4021147340536118e-003,right_val:-0.6317132115364075,left_val:0.0136904800310731},{features:[[12,11,2,2,-1.],[12,11,1,1,2.],[13,12,1,1,2.]],threshold:-1.7845979891717434e-004,right_val:0.0639211311936378,left_val:-0.1453599035739899},{features:[[15,9,2,4,-1.],[15,11,2,2,2.]],threshold:-0.0113268503919244,right_val:-0.0164606291800737,left_val:0.6587061285972595},{features:[[5,11,2,3,-1.],[5,12,2,1,3.]],threshold:1.5268150018528104e-003,right_val:0.1545401066541672,left_val:-0.0603895410895348},{features:[[6,11,2,3,-1.],[6,12,2,1,3.]],threshold:-6.0069989413022995e-003,right_val:-0.0494669713079929,left_val:0.2585973143577576},{features:[[6,12,1,6,-1.],[6,15,1,3,2.]],threshold:-7.4241221882402897e-003,right_val:0.0293931905180216,left_val:-0.3880611062049866},{features:[[6,9,5,9,-1.],[6,12,5,3,3.]],threshold:-3.9992430247366428e-003,right_val:0.0779918804764748,left_val:-0.1378819942474365},{features:[[8,11,2,2,-1.],[8,12,2,1,2.]],threshold:1.0202969860984012e-004,right_val:-0.1703258007764816,left_val:0.0727107375860214},{features:[[8,10,4,2,-1.],[10,10,2,2,2.]],threshold:4.0135599556379020e-004,right_val:0.1230544000864029,left_val:-0.0927880182862282},{features:[[8,10,4,6,-1.],[8,10,2,3,2.],[10,13,2,3,2.]],threshold:-9.7611807286739349e-003,right_val:0.0297488998621702,left_val:-0.3663052022457123},{features:[[2,0,9,20,-1.],[5,0,3,20,3.]],threshold:-0.3074553906917572,right_val:0.0130586903542280,left_val:-0.7865182161331177},{features:[[12,3,2,4,-1.],[12,3,1,2,2.],[13,5,1,2,2.]],threshold:-6.0231718234717846e-003,right_val:0.0181716196238995,left_val:-0.5090023875236511},{features:[[15,0,2,10,-1.],[16,0,1,10,2.]],threshold:-2.3784159566275775e-004,right_val:0.1053086966276169,left_val:-0.0998225212097168},{features:[[13,7,3,4,-1.],[14,7,1,4,3.]],threshold:1.3516229810193181e-003,right_val:0.1542510986328125,left_val:-0.0664440169930458},{features:[[14,10,1,2,-1.],[14,11,1,1,2.]],threshold:-1.6924949595704675e-003,right_val:0.0251007005572319,left_val:-0.4413385093212128},{features:[[16,11,3,1,-1.],[17,11,1,1,3.]],threshold:1.0610929457470775e-003,right_val:0.1721791028976440,left_val:-0.0605778992176056},{features:[[16,11,2,2,-1.],[16,11,1,1,2.],[17,12,1,1,2.]],threshold:5.6644581491127610e-004,right_val:0.1678466945886612,left_val:-0.0786877796053886},{features:[[13,12,6,1,-1.],[15,12,2,1,3.]],threshold:-0.0139553900808096,right_val:0.0190871395170689,left_val:-0.5784109830856323},{features:[[3,2,14,9,-1.],[10,2,7,9,2.]],threshold:-1.8862909637391567e-003,right_val:-0.1652339994907379,left_val:0.0621181502938271},{features:[[5,4,12,2,-1.],[11,4,6,2,2.]],threshold:0.0167841706424952,right_val:0.3610531985759735,left_val:-0.0303809195756912},{features:[[13,6,2,1,-1.],[14,6,1,1,2.]],threshold:-1.4158519661577884e-005,right_val:-0.1440749019384384,left_val:0.0721826329827309},{features:[[7,10,3,3,-1.],[7,11,3,1,3.]],threshold:7.3750452138483524e-003,right_val:-0.2927787005901337,left_val:0.0297915805131197},{features:[[16,17,4,2,-1.],[18,17,2,2,2.]],threshold:8.0517530441284180e-003,right_val:0.2176039963960648,left_val:-0.0446812994778156},{features:[[4,12,8,8,-1.],[4,12,4,4,2.],[8,16,4,4,2.]],threshold:-0.0795196965336800,right_val:0.0146189099177718,left_val:-0.6520869135856628},{features:[[14,8,4,5,-1.],[16,8,2,5,2.]],threshold:0.0120657002553344,right_val:-0.2945412099361420,left_val:0.0292028803378344},{features:[[11,8,6,2,-1.],[13,8,2,2,3.]],threshold:-0.0101226996630430,right_val:-0.0437135696411133,left_val:0.2774623930454254},{features:[[4,5,16,5,-1.],[12,5,8,5,2.]],threshold:-0.1851581037044525,right_val:0.0240932404994965,left_val:-0.4613685905933380},{features:[[14,9,6,10,-1.],[16,9,2,10,3.]],threshold:-0.0807261317968369,right_val:0.0208454597741365,left_val:-0.4467343091964722},{features:[[4,18,3,1,-1.],[5,18,1,1,3.]],threshold:1.5173270367085934e-003,right_val:0.1806337982416153,left_val:-0.0515759699046612},{features:[[4,13,4,4,-1.],[4,13,2,2,2.],[6,15,2,2,2.]],threshold:-0.0111848199740052,right_val:0.0270595401525497,left_val:-0.3537395894527435},{features:[[6,15,2,3,-1.],[6,16,2,1,3.]],threshold:-3.5008399281650782e-003,right_val:-0.0460320599377155,left_val:0.2054871022701263},{features:[[6,15,1,3,-1.],[6,16,1,1,3.]],threshold:1.4720410108566284e-003,right_val:0.1816830039024353,left_val:-0.0638717114925385},{features:[[7,17,3,1,-1.],[8,17,1,1,3.]],threshold:-4.5021830010227859e-004,right_val:0.0593277402222157,left_val:-0.1635392010211945},{features:[[7,17,3,1,-1.],[8,17,1,1,3.]],threshold:6.1653478769585490e-004,right_val:-0.1915604025125504,left_val:0.0690893232822418},{features:[[9,10,4,1,-1.],[11,10,2,1,2.]],threshold:1.4797239564359188e-003,right_val:0.1863134056329727,left_val:-0.0522419996559620},{features:[[11,12,2,1,-1.],[12,12,1,1,2.]],threshold:-1.4754989933862817e-005,right_val:-0.1509232074022293,left_val:0.0735861435532570},{features:[[7,8,1,6,-1.],[7,11,1,3,2.]],threshold:8.6423632455989718e-004,right_val:-0.1397610008716583,left_val:0.0669300779700279},{features:[[6,7,3,3,-1.],[7,7,1,3,3.]],threshold:-4.1005611419677734e-003,right_val:-0.0471750088036060,left_val:0.2094669938087463},{features:[[13,10,1,3,-1.],[13,11,1,1,3.]],threshold:-2.1505339536815882e-003,right_val:0.0176652502268553,left_val:-0.5275384187698364},{features:[[5,8,2,4,-1.],[5,10,2,2,2.]],threshold:7.8334724530577660e-003,right_val:0.2037491947412491,left_val:-0.0451250113546848},{features:[[5,8,6,6,-1.],[8,8,3,6,2.]],threshold:-3.2690390944480896e-003,right_val:0.0706531628966331,left_val:-0.1383669972419739},{features:[[6,5,4,13,-1.],[8,5,2,13,2.]],threshold:3.9274748414754868e-003,right_val:-0.1621017009019852,left_val:0.0684285983443260},{features:[[8,4,10,8,-1.],[8,4,5,4,2.],[13,8,5,4,2.]],threshold:7.6534547843039036e-003,right_val:0.0999126806855202,left_val:-0.0931621566414833},{features:[[8,3,9,6,-1.],[11,3,3,6,3.]],threshold:-0.0326201505959034,right_val:-0.0307653397321701,left_val:0.3545354902744293},{features:[[11,0,6,3,-1.],[13,0,2,3,3.]],threshold:-0.0182472094893456,right_val:0.0277641806751490,left_val:-0.3817118108272553},{features:[[11,1,3,15,-1.],[12,1,1,15,3.]],threshold:-8.0104079097509384e-004,right_val:0.0649366304278374,left_val:-0.1432909965515137},{features:[[4,8,14,9,-1.],[4,11,14,3,3.]],threshold:-0.1099310964345932,right_val:-0.0112426700070500,left_val:0.8731942772865295},{features:[[11,2,1,16,-1.],[11,10,1,8,2.]],threshold:-0.0305081997066736,right_val:0.0193726997822523,left_val:-0.6126984953880310},{features:[[12,1,2,14,-1.],[12,8,2,7,2.]],threshold:-0.0191878192126751,right_val:-0.0368323288857937,left_val:0.2853302061557770},{features:[[11,1,3,4,-1.],[12,1,1,4,3.]],threshold:2.3266570642590523e-003,right_val:-0.2125295996665955,left_val:0.0472893603146076},{features:[[9,8,4,2,-1.],[9,8,2,1,2.],[11,9,2,1,2.]],threshold:-1.4535760274156928e-003,right_val:-0.0745014920830727,left_val:0.1377892047166824},{features:[[17,3,2,2,-1.],[18,3,1,2,2.]],threshold:-1.0573640465736389e-003,right_val:0.0420391708612442,left_val:-0.2218683063983917},{features:[[2,6,3,2,-1.],[3,6,1,2,3.]],threshold:1.7203199677169323e-003,right_val:0.1379489004611969,left_val:-0.0692997500300407},{features:[[9,8,2,2,-1.],[9,9,2,1,2.]],threshold:-1.4716150471940637e-003,right_val:-0.0407950095832348,left_val:0.2429670989513397},{features:[[6,15,6,1,-1.],[8,15,2,1,3.]],threshold:-5.2822660654783249e-003,right_val:0.0342152602970600,left_val:-0.3195948004722595},{features:[[16,10,2,4,-1.],[16,10,1,2,2.],[17,12,1,2,2.]],threshold:-4.7165742143988609e-003,right_val:-0.0317729189991951,left_val:0.3058119118213654},{features:[[6,6,10,6,-1.],[6,6,5,3,2.],[11,9,5,3,2.]],threshold:7.3668370023369789e-003,right_val:-0.1639001965522766,left_val:0.0610850788652897},{features:[[13,8,3,3,-1.],[13,9,3,1,3.]],threshold:-7.6594999991357327e-003,right_val:0.0188697502017021,left_val:-0.4647234976291657},{features:[[13,0,4,2,-1.],[13,0,2,1,2.],[15,1,2,1,2.]],threshold:7.6969028450548649e-003,right_val:0.5539581179618835,left_val:-0.0181915909051895},{features:[[10,0,10,2,-1.],[10,0,5,1,2.],[15,1,5,1,2.]],threshold:-5.6195858633145690e-004,right_val:-0.1084408983588219,left_val:0.0976184830069542},{features:[[13,13,2,1,-1.],[14,13,1,1,2.]],threshold:-1.4587530131393578e-005,right_val:-0.1235361024737358,left_val:0.0745851323008537},{features:[[4,9,2,2,-1.],[4,9,1,1,2.],[5,10,1,1,2.]],threshold:-9.5779378898441792e-004,right_val:-0.0586100816726685,left_val:0.1637014001607895},{features:[[6,8,2,3,-1.],[6,9,2,1,3.]],threshold:8.0253500491380692e-003,right_val:-0.4150776863098145,left_val:0.0268576703965664},{features:[[2,12,2,3,-1.],[2,13,2,1,3.]],threshold:1.6938529442995787e-003,right_val:-0.1788846999406815,left_val:0.0485362708568573},{features:[[2,0,10,2,-1.],[2,0,5,1,2.],[7,1,5,1,2.]],threshold:-4.3334178626537323e-003,right_val:-0.0480850599706173,left_val:0.1979822069406509},{features:[[6,2,2,2,-1.],[6,3,2,1,2.]],threshold:-2.2440029715653509e-004,right_val:0.0604286491870880,left_val:-0.1511324942111969},{features:[[5,10,8,2,-1.],[5,11,8,1,2.]],threshold:-0.0113925095647573,right_val:-0.0297512598335743,left_val:0.3273792862892151},{features:[[11,7,5,10,-1.],[11,12,5,5,2.]],threshold:-9.3984175473451614e-003,right_val:0.0763022825121880,left_val:-0.1291299015283585},{features:[[5,10,4,3,-1.],[5,11,4,1,3.]],threshold:8.7430170970037580e-004,right_val:0.0978080108761787,left_val:-0.0975561663508415},{features:[[9,6,6,12,-1.],[9,12,6,6,2.]],threshold:7.5171617791056633e-003,right_val:-0.1541941016912460,left_val:0.0650843530893326},{features:[[16,10,3,5,-1.],[17,10,1,5,3.]],threshold:-2.7937069535255432e-003,right_val:-0.0633553937077522,left_val:0.1500952988862991},{features:[[15,12,2,4,-1.],[15,12,1,2,2.],[16,14,1,2,2.]],threshold:-3.4385098842903972e-004,right_val:-0.0757806301116943,left_val:0.1240428984165192},{features:[[8,0,12,8,-1.],[8,0,6,4,2.],[14,4,6,4,2.]],threshold:0.0875579267740250,right_val:0.5660734772682190,left_val:-0.0159059409052134},{features:[[14,1,5,3,-1.],[14,2,5,1,3.]],threshold:-9.3594435602426529e-003,right_val:0.0308747105300426,left_val:-0.3303920030593872},{features:[[2,2,3,6,-1.],[3,2,1,6,3.]],threshold:-6.7703737877309322e-003,right_val:-0.0513103194534779,left_val:0.1796087026596069},{features:[[6,5,2,2,-1.],[7,5,1,2,2.]],threshold:-6.2513751909136772e-003,right_val:0.0154257696121931,left_val:-0.5795233845710754},{features:[[7,12,12,1,-1.],[11,12,4,1,3.]],threshold:-0.0252064093947411,right_val:0.0130511196330190,left_val:-0.6377707123756409},{features:[[13,9,7,2,-1.],[13,10,7,1,2.]],threshold:-1.1819769861176610e-003,right_val:0.0404945313930511,left_val:-0.2047811001539230},{features:[[5,10,1,3,-1.],[5,11,1,1,3.]],threshold:-1.0458839824423194e-003,right_val:-0.0626315921545029,left_val:0.1481287926435471},{features:[[0,4,15,2,-1.],[5,4,5,2,3.]],threshold:-2.5445020291954279e-003,right_val:-0.0694300234317780,left_val:0.1302101016044617},{features:[[3,0,9,13,-1.],[6,0,3,13,3.]],threshold:-0.0806736275553703,right_val:0.0389562807977200,left_val:-0.2805421948432922},{features:[[5,10,6,2,-1.],[7,10,2,2,3.]],threshold:-1.4390920114237815e-004,right_val:-0.0965507626533508,left_val:0.1078051999211311},{features:[[8,3,4,2,-1.],[8,3,2,1,2.],[10,4,2,1,2.]],threshold:7.6481432188302279e-004,right_val:-0.1574261039495468,left_val:0.0606672391295433},{features:[[8,7,2,6,-1.],[8,7,1,3,2.],[9,10,1,3,2.]],threshold:-3.4516688901931047e-004,right_val:-0.0888323709368706,left_val:0.1141576990485191},{features:[[8,7,2,3,-1.],[9,7,1,3,2.]],threshold:-2.2118249908089638e-003,right_val:-0.0504987388849258,left_val:0.2298803925514221},{features:[[5,11,3,3,-1.],[6,11,1,3,3.]],threshold:9.4616543501615524e-003,right_val:-0.5063353180885315,left_val:0.0198270604014397},{features:[[0,1,1,2,-1.],[0,2,1,1,2.]],threshold:1.0567939607426524e-003,right_val:-0.2350935935974121,left_val:0.0387446396052837},{features:[[7,0,1,6,-1.],[7,2,1,2,3.]],threshold:2.9194469098001719e-003,right_val:0.1531331986188889,left_val:-0.0618954785168171},{features:[[14,0,2,5,-1.],[15,0,1,5,2.]],threshold:-0.0107680102810264,right_val:0.0178472399711609,left_val:-0.5529810190200806},{features:[[3,2,12,1,-1.],[7,2,4,1,3.]],threshold:-1.0197740048170090e-003,right_val:-0.0801858529448509,left_val:0.1155930012464523},{features:[[11,13,5,2,-1.],[11,14,5,1,2.]],threshold:1.8127029761672020e-004,right_val:-0.1654936969280243,left_val:0.0566528700292110},{features:[[13,14,1,3,-1.],[13,15,1,1,3.]],threshold:7.1620188464294188e-006,right_val:0.0979150906205177,left_val:-0.0914800912141800},{features:[[7,17,12,2,-1.],[11,17,4,2,3.]],threshold:0.0529100708663464,right_val:0.6609022021293640,left_val:-0.0135912001132965},{features:[[0,0,13,20,-1.],[0,10,13,10,2.]],threshold:0.4018537104129791,right_val:-0.4901585876941681,left_val:0.0195744894444942},{features:[[4,7,10,12,-1.],[4,13,10,6,2.]],threshold:-0.0179147701710463,right_val:0.1053296029567719,left_val:-0.0883170366287231},{features:[[10,12,2,2,-1.],[11,12,1,2,2.]],threshold:-1.4578569789591711e-005,right_val:-0.1230034977197647,left_val:0.0785131528973579},{features:[[9,11,4,4,-1.],[11,11,2,4,2.]],threshold:6.4994548447430134e-003,right_val:0.2933715879917145,left_val:-0.0408434681594372},{features:[[4,9,16,5,-1.],[12,9,8,5,2.]],threshold:0.0957629829645157,right_val:-0.5344405770301819,left_val:0.0193324796855450},{features:[[16,9,2,4,-1.],[17,9,1,4,2.]],threshold:1.4263469893194269e-005,right_val:0.1063278988003731,left_val:-0.0888975337147713},{features:[[15,9,3,1,-1.],[16,9,1,1,3.]],threshold:2.2215039934962988e-003,right_val:0.2640512883663178,left_val:-0.0407779514789581},{features:[[14,3,4,11,-1.],[16,3,2,11,2.]],threshold:3.1875250861048698e-003,right_val:-0.1620295941829681,left_val:0.0597250387072563},{features:[[4,3,10,10,-1.],[4,3,5,5,2.],[9,8,5,5,2.]],threshold:0.0960695892572403,right_val:-0.7911068797111511,left_val:0.0113184601068497},{features:[[16,9,3,1,-1.],[17,9,1,1,3.]],threshold:1.9584870897233486e-003,right_val:0.2363992929458618,left_val:-0.0392520204186440},{features:[[6,4,14,9,-1.],[6,7,14,3,3.]],threshold:-0.1846846938133240,right_val:0.0157584100961685,left_val:-0.5897439718246460},{features:[[8,11,2,4,-1.],[8,13,2,2,2.]],threshold:2.1685050160158426e-004,right_val:-0.1827467978000641,left_val:0.0463204495608807},{features:[[5,9,6,8,-1.],[5,9,3,4,2.],[8,13,3,4,2.]],threshold:0.0188097096979618,right_val:0.2783260047435761,left_val:-0.0433571189641953},{features:[[5,11,4,4,-1.],[5,13,4,2,2.]],threshold:-6.2639699317514896e-003,right_val:0.0771159008145332,left_val:-0.1389119029045105},{features:[[7,14,1,3,-1.],[7,15,1,1,3.]],threshold:3.2622940489090979e-004,right_val:0.1058828979730606,left_val:-0.0918030217289925},{features:[[9,10,3,1,-1.],[10,10,1,1,3.]],threshold:5.3745559416711330e-003,right_val:-0.7671645879745483,left_val:0.0108034899458289},{features:[[4,8,2,4,-1.],[4,8,1,2,2.],[5,10,1,2,2.]],threshold:2.8126770630478859e-003,right_val:0.1613305062055588,left_val:-0.0596188604831696},{features:[[14,6,2,5,-1.],[15,6,1,5,2.]],threshold:-6.5314618404954672e-004,right_val:0.1154076978564262,left_val:-0.0856908112764359},{features:[[13,7,6,7,-1.],[15,7,2,7,3.]],threshold:-1.7845110269263387e-003,right_val:-0.1270080059766769,left_val:0.0818319916725159},{features:[[15,6,4,7,-1.],[17,6,2,7,2.]],threshold:3.0969830695539713e-003,right_val:-0.1447543948888779,left_val:0.0683666393160820},{features:[[9,11,6,5,-1.],[11,11,2,5,3.]],threshold:-4.1442047804594040e-003,right_val:-0.0540303103625774,left_val:0.1863203048706055},{features:[[0,8,20,4,-1.],[10,8,10,4,2.]],threshold:-0.0499725192785263,right_val:0.0850491598248482,left_val:-0.1280035972595215},{features:[[1,2,8,14,-1.],[1,2,4,7,2.],[5,9,4,7,2.]],threshold:-0.0107439104467630,right_val:-0.0773664563894272,left_val:0.1370172947645187},{features:[[10,13,3,1,-1.],[11,13,1,1,3.]],threshold:-3.0474149389192462e-004,right_val:0.0579711683094502,left_val:-0.1693834066390991},{features:[[7,0,6,4,-1.],[9,0,2,4,3.]],threshold:0.0360233187675476,right_val:-0.6327974796295166,left_val:0.0135613000020385},{features:[[7,14,6,2,-1.],[7,14,3,1,2.],[10,15,3,1,2.]],threshold:2.5479190517216921e-003,right_val:0.2215041965246201,left_val:-0.0438243597745895}],threshold:-1.2739679813385010}],size:[20,20],tilted:false}; +})(jsfeat.haar); \ No newline at end of file diff --git a/cascades/upperbody.js b/cascades/upperbody.js new file mode 100755 index 0000000..8e88c8f --- /dev/null +++ b/cascades/upperbody.js @@ -0,0 +1,7 @@ +/** + * this cascade is derived from https://github.com/mtschirs/js-objectdetect implementation + * @author Martin Tschirsich / http://www.tu-darmstadt.de/~m_t + */ +(function(global) { + global.upperbody = {complexClassifiers:[{simpleClassifiers:[{features:[[5,5,12,6,-1.],[9,5,4,6,3.]],tilted:0,threshold:-0.0136960297822952,right_val:-0.4217903017997742,left_val:0.4507646858692169},{features:[[7,13,10,4,-1.],[7,15,10,2,2.]],tilted:0,threshold:0.0124414497986436,right_val:-0.7479348778724670,left_val:0.1649325042963028},{features:[[3,14,9,4,-1.],[6,14,3,4,3.]],tilted:0,threshold:-2.7094660326838493e-003,right_val:-0.3761714100837708,left_val:0.3100470006465912},{features:[[15,6,5,6,-1.],[15,6,5,3,2.]],tilted:1,threshold:-0.1000801026821137,right_val:-0.0745569765567780,left_val:0.7618219852447510},{features:[[0,1,22,14,-1.],[11,1,11,14,2.]],tilted:0,threshold:-0.2511411905288696,right_val:0.1513922065496445,left_val:-0.6415402889251709},{features:[[1,11,20,4,-1.],[6,11,10,4,2.]],tilted:0,threshold:-0.1051065027713776,right_val:-0.1449857950210571,left_val:0.7145937085151672},{features:[[7,6,6,5,-1.],[7,6,3,5,2.]],tilted:1,threshold:-0.0884480178356171,right_val:-0.0685868933796883,left_val:0.7577317953109741},{features:[[5,13,12,4,-1.],[11,13,6,2,2.],[5,15,6,2,2.]],tilted:0,threshold:0.0108749102801085,right_val:-0.5426371097564697,left_val:0.1461060941219330},{features:[[7,12,8,6,-1.],[7,12,4,3,2.],[11,15,4,3,2.]],tilted:0,threshold:0.0126905702054501,right_val:-0.4964945912361145,left_val:0.1167458966374397},{features:[[20,0,2,18,-1.],[20,9,2,9,2.]],tilted:0,threshold:-0.0321983993053436,right_val:0.0984379723668098,left_val:-0.3852939009666443},{features:[[8,6,6,12,-1.],[10,6,2,12,3.]],tilted:0,threshold:-3.4077179152518511e-003,right_val:-0.2238254994153976,left_val:0.2520087063312531},{features:[[8,5,6,6,-1.],[10,5,2,6,3.]],tilted:0,threshold:0.0303243901580572,right_val:0.6573541760444641,left_val:-0.1053444966673851},{features:[[5,15,12,2,-1.],[5,16,12,1,2.]],tilted:0,threshold:4.1930507868528366e-003,right_val:-0.5316066145896912,left_val:0.1287239938974381},{features:[[20,0,2,18,-1.],[20,9,2,9,2.]],tilted:0,threshold:0.0805014073848724,right_val:-0.7212303280830383,left_val:0.0416966602206230},{features:[[0,0,2,18,-1.],[0,9,2,9,2.]],tilted:0,threshold:-0.0348220802843571,right_val:0.1395993977785111,left_val:-0.4975110888481140},{features:[[13,7,6,4,-1.],[13,7,6,2,2.]],tilted:1,threshold:7.5519368983805180e-003,right_val:0.1129434034228325,left_val:-0.0921476781368256},{features:[[2,14,7,4,-1.],[2,16,7,2,2.]],tilted:0,threshold:-0.0175721403211355,right_val:0.0935728102922440,left_val:-0.5678442716598511},{features:[[13,7,7,4,-1.],[13,7,7,2,2.]],tilted:1,threshold:5.2012042142450809e-003,right_val:0.0618789605796337,left_val:-0.0792380794882774},{features:[[4,6,4,12,-1.],[4,10,4,4,3.]],tilted:0,threshold:-0.0307989194989204,right_val:0.0952714905142784,left_val:-0.5665851235389710},{features:[[8,4,6,10,-1.],[11,4,3,5,2.],[8,9,3,5,2.]],tilted:0,threshold:-1.3465429656207561e-003,right_val:-0.2602663934230804,left_val:0.2401147037744522}],threshold:-1.1264339685440063},{simpleClassifiers:[{features:[[6,8,6,10,-1.],[6,8,3,5,2.],[9,13,3,5,2.]],tilted:0,threshold:1.9108939450234175e-003,right_val:0.3061217069625855,left_val:-0.4624095857143402},{features:[[11,12,6,6,-1.],[11,15,6,3,2.]],tilted:0,threshold:9.5464065670967102e-003,right_val:-0.5350117087364197,left_val:0.0919561386108398},{features:[[1,15,8,3,-1.],[5,15,4,3,2.]],tilted:0,threshold:-0.0434028096497059,right_val:-0.1128493025898933,left_val:0.5681784152984619},{features:[[6,9,10,4,-1.],[6,11,10,2,2.]],tilted:0,threshold:0.0503860302269459,right_val:0.7352185845375061,left_val:-0.0803169310092926},{features:[[11,5,8,3,-1.],[10,6,8,1,3.]],tilted:1,threshold:-6.8480317713692784e-004,right_val:-0.2804940938949585,left_val:0.2579864859580994},{features:[[0,13,22,5,-1.],[0,13,11,5,2.]],tilted:0,threshold:0.1154804974794388,right_val:-0.7555689215660095,left_val:0.0920655727386475},{features:[[2,13,14,3,-1.],[9,13,7,3,2.]],tilted:0,threshold:-1.9348369678482413e-003,right_val:-0.2410271018743515,left_val:0.2944079041481018},{features:[[11,5,2,10,-1.],[11,5,1,10,2.]],tilted:1,threshold:-0.0435288101434708,right_val:-0.0396501012146473,left_val:0.4920296967029572},{features:[[11,5,10,2,-1.],[11,5,10,1,2.]],tilted:1,threshold:-0.0302181504666805,right_val:-0.0867865234613419,left_val:0.7722792029380798},{features:[[14,0,8,8,-1.],[18,0,4,4,2.],[14,4,4,4,2.]],tilted:0,threshold:0.0245365891605616,right_val:-0.4864296913146973,left_val:0.0959448218345642},{features:[[5,0,3,10,-1.],[5,5,3,5,2.]],tilted:0,threshold:0.0239589903503656,right_val:-0.5121983885765076,left_val:0.1043784022331238},{features:[[16,0,3,12,-1.],[16,6,3,6,2.]],tilted:0,threshold:-0.0253708306699991,right_val:0.0914865732192993,left_val:-0.3198154866695404},{features:[[3,3,12,4,-1.],[3,3,6,2,2.],[9,5,6,2,2.]],tilted:0,threshold:-1.8606419907882810e-003,right_val:-0.2430797070264816,left_val:0.2278396934270859},{features:[[2,2,20,3,-1.],[7,2,10,3,2.]],tilted:0,threshold:0.0225508008152246,right_val:-0.3005428016185761,left_val:0.0692075565457344},{features:[[11,7,3,8,-1.],[11,7,3,4,2.]],tilted:1,threshold:-0.0497520901262760,right_val:0.0944727733731270,left_val:-0.6107804775238037},{features:[[4,9,18,3,-1.],[4,10,18,1,3.]],tilted:0,threshold:-0.0266023892909288,right_val:-0.0920460522174835,left_val:0.5958176851272583},{features:[[3,3,16,14,-1.],[3,3,8,7,2.],[11,10,8,7,2.]],tilted:0,threshold:0.1076000034809113,right_val:-0.5430337190628052,left_val:0.1027851998806000},{features:[[7,14,8,4,-1.],[7,14,4,4,2.]],tilted:0,threshold:0.0176906995475292,right_val:-0.6321390867233276,left_val:0.0660571381449699},{features:[[10,7,4,7,-1.],[10,7,2,7,2.]],tilted:1,threshold:-0.0624099187552929,right_val:-0.0670705586671829,left_val:0.6872419714927673},{features:[[11,9,6,5,-1.],[11,9,3,5,2.]],tilted:0,threshold:-1.9801619928330183e-003,right_val:-0.0878194868564606,left_val:0.0944115519523621},{features:[[0,6,22,4,-1.],[11,6,11,4,2.]],tilted:0,threshold:0.0636684298515320,right_val:-0.4812976121902466,left_val:0.1153173968195915},{features:[[14,6,6,12,-1.],[17,6,3,6,2.],[14,12,3,6,2.]],tilted:0,threshold:-0.0307978298515081,right_val:-0.1259379982948303,left_val:0.3585476875305176},{features:[[4,14,6,4,-1.],[4,16,6,2,2.]],tilted:0,threshold:-1.8353419727645814e-004,right_val:-0.2854681015014648,left_val:0.1478839963674545},{features:[[12,14,6,4,-1.],[12,16,6,2,2.]],tilted:0,threshold:1.7074620118364692e-003,right_val:-0.2523337006568909,left_val:0.0799296572804451},{features:[[4,14,6,4,-1.],[4,16,6,2,2.]],tilted:0,threshold:-0.0153251998126507,right_val:0.0989083275198936,left_val:-0.5771185755729675},{features:[[10,6,6,6,-1.],[12,6,2,6,3.]],tilted:0,threshold:0.0413891896605492,right_val:0.5736380219459534,left_val:-0.0655507966876030},{features:[[9,0,11,3,-1.],[8,1,11,1,3.]],tilted:1,threshold:-4.5577771379612386e-004,right_val:-0.1910558044910431,left_val:0.2259308993816376},{features:[[7,0,12,4,-1.],[13,0,6,2,2.],[7,2,6,2,2.]],tilted:0,threshold:-0.0134556898847222,right_val:0.0864776223897934,left_val:-0.4023393094539642},{features:[[6,6,6,6,-1.],[8,6,2,6,3.]],tilted:0,threshold:-0.0379783995449543,right_val:-0.0815410166978836,left_val:0.5525758862495422},{features:[[15,5,3,8,-1.],[15,9,3,4,2.]],tilted:0,threshold:-0.0171975009143353,right_val:0.0519998706877232,left_val:-0.1836300939321518},{features:[[5,2,12,7,-1.],[9,2,4,7,3.]],tilted:0,threshold:-1.2581580085679889e-003,right_val:-0.2572666108608246,left_val:0.1883004009723663},{features:[[5,5,12,4,-1.],[9,5,4,4,3.]],tilted:0,threshold:0.0677251070737839,right_val:0.7180324196815491,left_val:-0.0809564515948296},{features:[[7,3,4,7,-1.],[7,3,2,7,2.]],tilted:1,threshold:0.0354894287884235,right_val:-0.5377414226531982,left_val:0.1006807014346123}],threshold:-1.1226719617843628},{simpleClassifiers:[{features:[[2,14,6,4,-1.],[5,14,3,4,2.]],tilted:0,threshold:-5.3695798851549625e-003,right_val:-0.3417896032333374,left_val:0.2747949957847595},{features:[[11,4,6,6,-1.],[13,4,2,6,3.]],tilted:0,threshold:6.2695867381989956e-004,right_val:0.1072842031717300,left_val:-0.0986466333270073},{features:[[5,14,12,4,-1.],[5,14,6,2,2.],[11,16,6,2,2.]],tilted:0,threshold:-0.0164842698723078,right_val:0.0960377529263496,left_val:-0.6497290730476379},{features:[[3,12,16,6,-1.],[11,12,8,3,2.],[3,15,8,3,2.]],tilted:0,threshold:-0.0221040993928909,right_val:0.1630463004112244,left_val:-0.4598448872566223},{features:[[1,11,20,4,-1.],[6,11,10,4,2.]],tilted:0,threshold:0.1190413981676102,right_val:0.7372975945472717,left_val:-0.0996003970503807},{features:[[9,0,10,10,-1.],[14,0,5,5,2.],[9,5,5,5,2.]],tilted:0,threshold:-2.0222070161253214e-003,right_val:-0.2457713037729263,left_val:0.2102926969528198},{features:[[8,8,4,6,-1.],[8,8,2,6,2.]],tilted:1,threshold:0.0675003528594971,right_val:0.5765423178672791,left_val:-0.1246778964996338},{features:[[1,7,20,11,-1.],[1,7,10,11,2.]],tilted:0,threshold:-0.1965593993663788,right_val:0.0996720567345619,left_val:-0.6089174747467041},{features:[[9,0,12,3,-1.],[9,0,6,3,2.]],tilted:1,threshold:0.0494311712682247,right_val:-0.4558086991310120,left_val:0.1375274956226349},{features:[[13,0,6,6,-1.],[13,0,3,6,2.]],tilted:0,threshold:0.0233800895512104,right_val:-0.3502770960330963,left_val:0.0471418909728527},{features:[[5,0,12,8,-1.],[5,2,12,4,2.]],tilted:0,threshold:1.3998650247231126e-003,right_val:0.2432229965925217,left_val:-0.2064304947853088},{features:[[14,0,8,6,-1.],[18,0,4,3,2.],[14,3,4,3,2.]],tilted:0,threshold:0.0114326896145940,right_val:-0.3261989951133728,left_val:0.0551873706281185},{features:[[7,6,8,6,-1.],[9,6,4,6,2.]],tilted:0,threshold:0.0487750694155693,right_val:0.7117180824279785,left_val:-0.0689925104379654},{features:[[11,3,6,6,-1.],[13,3,2,6,3.]],tilted:0,threshold:0.0652840211987495,right_val:0.5931897163391113,left_val:3.7155740428715944e-003},{features:[[5,3,6,6,-1.],[7,3,2,6,3.]],tilted:0,threshold:6.1603228095918894e-004,right_val:0.2044153064489365,left_val:-0.2327252030372620},{features:[[13,0,8,6,-1.],[17,0,4,3,2.],[13,3,4,3,2.]],tilted:0,threshold:-0.0105274999514222,right_val:0.1017130985856056,left_val:-0.3177379071712494},{features:[[0,0,8,6,-1.],[0,0,4,3,2.],[4,3,4,3,2.]],tilted:0,threshold:0.0162313394248486,right_val:-0.4714300930500031,left_val:0.0917341932654381},{features:[[7,0,10,6,-1.],[12,0,5,3,2.],[7,3,5,3,2.]],tilted:0,threshold:3.8958500954322517e-004,right_val:0.1347548961639404,left_val:-0.1299754977226257},{features:[[0,15,22,2,-1.],[11,15,11,2,2.]],tilted:0,threshold:-0.0441656894981861,right_val:0.0647668763995171,left_val:-0.6033102869987488},{features:[[5,14,12,4,-1.],[5,15,12,2,2.]],tilted:0,threshold:-0.0136632099747658,right_val:0.0634857416152954,left_val:-0.5276284217834473},{features:[[5,13,6,4,-1.],[5,15,6,2,2.]],tilted:0,threshold:-8.8231859263032675e-004,right_val:-0.2784520089626312,left_val:0.1451025009155273},{features:[[3,9,17,3,-1.],[3,10,17,1,3.]],tilted:0,threshold:-0.0278191901743412,right_val:-0.0851918607950211,left_val:0.4364086985588074},{features:[[3,8,16,10,-1.],[3,8,8,5,2.],[11,13,8,5,2.]],tilted:0,threshold:0.0625609904527664,right_val:-0.4223591983318329,left_val:0.1002788990736008},{features:[[9,0,10,6,-1.],[14,0,5,3,2.],[9,3,5,3,2.]],tilted:0,threshold:-4.4808178790844977e-004,right_val:-0.1773128956556320,left_val:0.1485148966312408},{features:[[3,0,12,4,-1.],[3,0,6,2,2.],[9,2,6,2,2.]],tilted:0,threshold:-0.0213631801307201,right_val:0.0605393983423710,left_val:-0.6133446097373962},{features:[[4,10,14,3,-1.],[4,10,7,3,2.]],tilted:0,threshold:-0.0691223293542862,right_val:0.0393477492034435,left_val:-0.8684576153755188},{features:[[1,14,11,4,-1.],[1,16,11,2,2.]],tilted:0,threshold:-0.0305428393185139,right_val:0.0495938211679459,left_val:-0.6402171850204468},{features:[[7,0,12,6,-1.],[13,0,6,3,2.],[7,3,6,3,2.]],tilted:0,threshold:-0.0101011600345373,right_val:0.0572568997740746,left_val:-0.1619915068149567},{features:[[3,0,10,6,-1.],[3,0,5,3,2.],[8,3,5,3,2.]],tilted:0,threshold:-2.2010109387338161e-004,right_val:-0.2019899934530258,left_val:0.2135093063116074}],threshold:-1.0127470493316650},{simpleClassifiers:[{features:[[6,0,10,3,-1.],[6,0,5,3,2.]],tilted:1,threshold:5.7967850007116795e-003,right_val:0.2506627142429352,left_val:-0.3384417891502380},{features:[[14,8,6,4,-1.],[14,8,6,2,2.]],tilted:1,threshold:0.0637951791286469,right_val:0.3574657142162323,left_val:-0.0421116203069687},{features:[[0,2,5,16,-1.],[0,10,5,8,2.]],tilted:0,threshold:-0.0643320381641388,right_val:0.1171773970127106,left_val:-0.5066078901290894},{features:[[0,3,22,5,-1.],[0,3,11,5,2.]],tilted:0,threshold:-0.1157428994774818,right_val:0.0958809033036232,left_val:-0.5667849779129028},{features:[[6,15,8,3,-1.],[10,15,4,3,2.]],tilted:0,threshold:-3.9005130529403687e-003,right_val:0.1485832035541534,left_val:-0.4149822890758514},{features:[[15,0,2,14,-1.],[15,0,1,14,2.]],tilted:1,threshold:0.0125129297375679,right_val:-0.1416396051645279,left_val:0.0536966696381569},{features:[[7,0,14,2,-1.],[7,0,14,1,2.]],tilted:1,threshold:1.5871099894866347e-003,right_val:0.1941833049058914,left_val:-0.2596234083175659},{features:[[1,11,20,5,-1.],[6,11,10,5,2.]],tilted:0,threshold:0.1629112064838409,right_val:0.7856721282005310,left_val:-0.0612437687814236},{features:[[5,3,12,9,-1.],[9,6,4,3,9.]],tilted:0,threshold:-0.3325822055339813,right_val:-0.0440364591777325,left_val:0.7802013158798218},{features:[[10,1,12,3,-1.],[14,1,4,3,3.]],tilted:0,threshold:-0.0102888997644186,right_val:0.0620962306857109,left_val:-0.1528968065977097},{features:[[0,1,12,3,-1.],[4,1,4,3,3.]],tilted:0,threshold:0.0289560295641422,right_val:-0.4782071113586426,left_val:0.0847077965736389},{features:[[14,12,4,6,-1.],[14,12,2,6,2.]],tilted:0,threshold:-3.2221511355601251e-004,right_val:-0.1881939023733139,left_val:0.1395125985145569},{features:[[0,10,22,7,-1.],[11,10,11,7,2.]],tilted:0,threshold:0.1583528965711594,right_val:-0.5457236170768738,left_val:0.0666678100824356},{features:[[11,2,4,11,-1.],[11,2,2,11,2.]],tilted:1,threshold:-0.0425843112170696,right_val:-0.0566545091569424,left_val:0.2704033851623535},{features:[[3,14,16,4,-1.],[3,14,8,2,2.],[11,16,8,2,2.]],tilted:0,threshold:0.0275051407516003,right_val:-0.7315763831138611,left_val:0.0492711588740349},{features:[[12,12,6,6,-1.],[14,12,2,6,3.]],tilted:0,threshold:0.0868797004222870,right_val:0.8678265213966370,left_val:-0.0175324007868767},{features:[[4,12,6,6,-1.],[6,12,2,6,3.]],tilted:0,threshold:-2.0130439661443233e-003,right_val:-0.2526623010635376,left_val:0.1659394055604935},{features:[[11,14,6,4,-1.],[11,16,6,2,2.]],tilted:0,threshold:4.2330170981585979e-004,right_val:-0.2462970018386841,left_val:0.0942235514521599},{features:[[0,0,12,4,-1.],[0,0,6,2,2.],[6,2,6,2,2.]],tilted:0,threshold:0.0151944998651743,right_val:-0.5006862282752991,left_val:0.0736956372857094},{features:[[15,11,4,6,-1.],[15,11,2,6,2.]],tilted:0,threshold:-6.1203669756650925e-003,right_val:-0.1673810034990311,left_val:0.2138189971446991},{features:[[3,11,4,6,-1.],[5,11,2,6,2.]],tilted:0,threshold:0.0206602402031422,right_val:0.5782834887504578,left_val:-0.0806361585855484},{features:[[18,5,4,7,-1.],[18,5,2,7,2.]],tilted:1,threshold:-0.0603982508182526,right_val:0.0508990101516247,left_val:-0.6341177225112915},{features:[[4,5,7,4,-1.],[4,5,7,2,2.]],tilted:1,threshold:0.0353864803910255,right_val:-0.5642666220664978,left_val:0.0731911510229111},{features:[[9,6,12,3,-1.],[13,6,4,3,3.]],tilted:0,threshold:-0.0659978389739990,right_val:-0.0263102594763041,left_val:0.3283380866050720},{features:[[1,6,12,3,-1.],[5,6,4,3,3.]],tilted:0,threshold:1.1004590196534991e-003,right_val:0.2020651996135712,left_val:-0.2311460971832275},{features:[[0,0,22,10,-1.],[11,0,11,5,2.],[0,5,11,5,2.]],tilted:0,threshold:0.0844881534576416,right_val:-0.4371033906936646,left_val:0.0745898410677910},{features:[[2,4,14,3,-1.],[2,5,14,1,3.]],tilted:0,threshold:-0.0292359907180071,right_val:-0.0545318387448788,left_val:0.6506476998329163},{features:[[13,3,8,6,-1.],[17,3,4,3,2.],[13,6,4,3,2.]],tilted:0,threshold:-0.0339169502258301,right_val:0.0321728810667992,left_val:-0.2880434989929199},{features:[[4,14,14,4,-1.],[4,14,7,2,2.],[11,16,7,2,2.]],tilted:0,threshold:-7.9108700156211853e-003,right_val:0.1010069027543068,left_val:-0.3366037905216217},{features:[[11,2,4,11,-1.],[11,2,2,11,2.]],tilted:1,threshold:0.0519304312765598,right_val:-0.1317653059959412,left_val:0.0329209603369236},{features:[[11,2,11,4,-1.],[11,2,11,2,2.]],tilted:1,threshold:-0.0685861036181450,right_val:-0.0667185783386230,left_val:0.5215355753898621},{features:[[10,7,12,3,-1.],[10,7,6,3,2.]],tilted:0,threshold:-1.9451669650152326e-003,right_val:-0.1989576071500778,left_val:0.1539679020643234},{features:[[9,7,4,6,-1.],[9,7,2,6,2.]],tilted:1,threshold:0.0713662281632423,right_val:0.4529233872890472,left_val:-0.0829271599650383},{features:[[3,11,16,6,-1.],[11,11,8,3,2.],[3,14,8,3,2.]],tilted:0,threshold:-0.0266242399811745,right_val:0.1026711985468864,left_val:-0.4400973916053772},{features:[[1,3,8,6,-1.],[1,3,4,3,2.],[5,6,4,3,2.]],tilted:0,threshold:0.0252660606056452,right_val:-0.5556933879852295,left_val:0.0557992011308670},{features:[[5,4,12,3,-1.],[5,5,12,1,3.]],tilted:0,threshold:5.5255689658224583e-003,right_val:0.2825520038604736,left_val:-0.1364029943943024},{features:[[7,14,8,4,-1.],[11,14,4,4,2.]],tilted:0,threshold:-2.9929999727755785e-003,right_val:0.1212206035852432,left_val:-0.3242157101631165},{features:[[7,3,15,3,-1.],[7,4,15,1,3.]],tilted:0,threshold:0.0221921093761921,right_val:0.4347316026687622,left_val:-0.0607410185039043},{features:[[6,8,6,4,-1.],[6,8,6,2,2.]],tilted:1,threshold:-9.4268741086125374e-003,right_val:0.1002969965338707,left_val:-0.3345840871334076},{features:[[10,7,12,3,-1.],[10,7,6,3,2.]],tilted:0,threshold:3.4395330585539341e-003,right_val:0.1792594045400620,left_val:-0.0838299095630646},{features:[[0,7,12,3,-1.],[6,7,6,3,2.]],tilted:0,threshold:-3.2996390946209431e-003,right_val:-0.2106847018003464,left_val:0.1999042928218842},{features:[[7,7,9,4,-1.],[10,7,3,4,3.]],tilted:0,threshold:0.0261521507054567,right_val:0.3558126986026764,left_val:-0.0806674063205719}],threshold:-1.0684469938278198},{simpleClassifiers:[{features:[[6,2,4,16,-1.],[6,10,4,8,2.]],tilted:0,threshold:-0.0227926503866911,right_val:-0.3360992074012756,left_val:0.4072526097297669},{features:[[8,4,6,6,-1.],[10,4,2,6,3.]],tilted:0,threshold:-5.7334620505571365e-003,right_val:-0.2277535051107407,left_val:0.2688218951225281},{features:[[1,11,20,3,-1.],[6,11,10,3,2.]],tilted:0,threshold:0.0969412028789520,right_val:0.7432873845100403,left_val:-0.0809050127863884},{features:[[14,9,6,8,-1.],[17,9,3,4,2.],[14,13,3,4,2.]],tilted:0,threshold:-0.0282889995723963,right_val:-0.0610963404178619,left_val:0.4561010897159576},{features:[[11,0,9,4,-1.],[11,0,9,2,2.]],tilted:1,threshold:3.8522849790751934e-003,right_val:0.2090710997581482,left_val:-0.2524180114269257},{features:[[11,10,6,8,-1.],[14,10,3,4,2.],[11,14,3,4,2.]],tilted:0,threshold:2.3100129328668118e-003,right_val:0.1546038985252380,left_val:-0.1471340060234070},{features:[[5,16,12,2,-1.],[5,17,12,1,2.]],tilted:0,threshold:1.1361920041963458e-003,right_val:-0.3053728938102722,left_val:0.1768047958612442},{features:[[5,9,14,4,-1.],[5,11,14,2,2.]],tilted:0,threshold:0.0249628908932209,right_val:0.3744265139102936,left_val:-0.1265290975570679},{features:[[2,9,6,8,-1.],[2,9,3,4,2.],[5,13,3,4,2.]],tilted:0,threshold:-5.8984099887311459e-003,right_val:-0.1776257008314133,left_val:0.2673898935317993},{features:[[15,8,6,4,-1.],[15,8,3,4,2.]],tilted:0,threshold:0.0118049001321197,right_val:-0.3348213136196137,left_val:0.0660779774188995},{features:[[1,8,6,4,-1.],[4,8,3,4,2.]],tilted:0,threshold:6.4400159753859043e-003,right_val:-0.3630348145961762,left_val:0.1099480018019676},{features:[[13,5,8,5,-1.],[13,5,4,5,2.]],tilted:1,threshold:-0.0894073694944382,right_val:0.0149443103000522,left_val:-0.4358046054840088},{features:[[11,5,9,2,-1.],[11,5,9,1,2.]],tilted:1,threshold:-0.0314042307436466,right_val:-0.0548542886972427,left_val:0.6952344775199890},{features:[[12,6,9,12,-1.],[15,10,3,4,9.]],tilted:0,threshold:-0.1460794955492020,right_val:0.0569565407931805,left_val:-0.2565006017684937},{features:[[5,10,6,8,-1.],[5,10,3,4,2.],[8,14,3,4,2.]],tilted:0,threshold:2.1142649929970503e-003,right_val:0.1679255962371826,left_val:-0.2498755007982254},{features:[[9,5,5,12,-1.],[9,8,5,6,2.]],tilted:0,threshold:-0.0151193598285317,right_val:0.1039358973503113,left_val:-0.3017987012863159},{features:[[11,5,9,2,-1.],[11,5,9,1,2.]],tilted:1,threshold:0.0256209596991539,right_val:0.5360078215599060,left_val:-0.0748213008046150},{features:[[5,0,15,12,-1.],[10,4,5,4,9.]],tilted:0,threshold:-0.1441780030727387,right_val:0.0744577869772911,left_val:-0.2049089968204498},{features:[[1,13,8,5,-1.],[5,13,4,5,2.]],tilted:0,threshold:0.0259547792375088,right_val:0.4844220876693726,left_val:-0.0905748680233955},{features:[[14,8,6,4,-1.],[14,8,3,4,2.]],tilted:1,threshold:-0.0211307201534510,right_val:0.0648760572075844,left_val:-0.2268981039524078},{features:[[8,8,4,6,-1.],[8,8,4,3,2.]],tilted:1,threshold:0.0164744593203068,right_val:-0.3657059967517853,left_val:0.1076800003647804},{features:[[7,0,12,9,-1.],[11,3,4,3,9.]],tilted:0,threshold:0.1092215031385422,right_val:-0.3472855985164642,left_val:0.0568273514509201},{features:[[7,13,6,4,-1.],[7,15,6,2,2.]],tilted:0,threshold:-7.4581061198841780e-005,right_val:-0.2594260871410370,left_val:0.1390427052974701},{features:[[10,7,6,10,-1.],[13,7,3,5,2.],[10,12,3,5,2.]],tilted:0,threshold:-0.0277536008507013,right_val:-0.0428961291909218,left_val:0.3811129927635193},{features:[[6,7,6,10,-1.],[6,7,3,5,2.],[9,12,3,5,2.]],tilted:0,threshold:0.0327214300632477,right_val:0.3928917944431305,left_val:-0.0908721536397934},{features:[[7,0,12,2,-1.],[7,0,6,2,2.]],tilted:0,threshold:5.5606258101761341e-003,right_val:-0.1939603984355927,left_val:0.0840022489428520},{features:[[2,0,18,9,-1.],[2,3,18,3,3.]],tilted:0,threshold:-0.1071029007434845,right_val:0.0568627603352070,left_val:-0.5898147225379944},{features:[[12,2,6,15,-1.],[12,2,3,15,2.]],tilted:0,threshold:-8.0517623573541641e-003,right_val:-0.1159565970301628,left_val:0.1179059967398644},{features:[[4,2,6,15,-1.],[7,2,3,15,2.]],tilted:0,threshold:-0.1385001987218857,right_val:0.0414113588631153,left_val:-0.9080532193183899},{features:[[7,12,12,4,-1.],[7,13,12,2,2.]],tilted:0,threshold:0.0286209192126989,right_val:-0.7369766235351563,left_val:0.0199285894632339},{features:[[4,4,4,14,-1.],[4,4,2,7,2.],[6,11,2,7,2.]],tilted:0,threshold:0.0262089706957340,right_val:0.6089993119239807,left_val:-0.0615775510668755},{features:[[12,6,9,12,-1.],[15,10,3,4,9.]],tilted:0,threshold:0.0265270397067070,right_val:-0.0629923269152641,left_val:0.0571938604116440},{features:[[1,6,9,12,-1.],[4,10,3,4,9.]],tilted:0,threshold:-0.0446224883198738,right_val:0.0932145714759827,left_val:-0.3331815004348755},{features:[[13,6,8,12,-1.],[17,6,4,6,2.],[13,12,4,6,2.]],tilted:0,threshold:-0.0142831197008491,right_val:-0.1153056994080544,left_val:0.1912523061037064},{features:[[7,14,8,3,-1.],[11,14,4,3,2.]],tilted:0,threshold:-1.9681209232658148e-003,right_val:0.0996828079223633,left_val:-0.3129512071609497},{features:[[5,5,12,3,-1.],[9,5,4,3,3.]],tilted:0,threshold:0.0528510808944702,right_val:0.5788791179656982,left_val:-0.0589195489883423},{features:[[10,0,2,18,-1.],[10,6,2,6,3.]],tilted:0,threshold:-6.3711861148476601e-003,right_val:-0.1909454017877579,left_val:0.1918219029903412},{features:[[4,14,14,2,-1.],[4,14,7,2,2.]],tilted:0,threshold:-6.4727910794317722e-003,right_val:0.1225292980670929,left_val:-0.2472103983163834},{features:[[3,0,6,4,-1.],[6,0,3,4,2.]],tilted:0,threshold:-0.0166909899562597,right_val:0.0503151006996632,left_val:-0.4917466044425964},{features:[[13,12,6,4,-1.],[13,12,3,4,2.]],tilted:0,threshold:-0.0148824099451303,right_val:-0.0582503899931908,left_val:0.1964661031961441},{features:[[1,0,8,4,-1.],[5,0,4,4,2.]],tilted:0,threshold:0.0175297092646360,right_val:-0.3655926883220673,left_val:0.0763574987649918},{features:[[7,9,14,4,-1.],[14,9,7,2,2.],[7,11,7,2,2.]],tilted:0,threshold:0.0422213897109032,right_val:0.3601126968860626,left_val:-0.0315604917705059},{features:[[1,0,8,18,-1.],[1,0,4,9,2.],[5,9,4,9,2.]],tilted:0,threshold:-0.0655817463994026,right_val:-0.0885569602251053,left_val:0.3433471024036408},{features:[[13,8,6,4,-1.],[13,8,3,4,2.]],tilted:1,threshold:0.0167032107710838,right_val:-0.1527362018823624,left_val:0.0482100397348404},{features:[[9,8,4,6,-1.],[9,8,4,3,2.]],tilted:1,threshold:-6.9328742101788521e-003,right_val:0.1182114034891129,left_val:-0.3057363927364349}],threshold:-1.1520069837570190},{simpleClassifiers:[{features:[[3,13,6,4,-1.],[6,13,3,4,2.]],tilted:0,threshold:-6.3434438779950142e-003,right_val:-0.3347485065460205,left_val:0.3384028077125549},{features:[[11,4,6,7,-1.],[13,4,2,7,3.]],tilted:0,threshold:5.2472548559308052e-003,right_val:0.1679117977619171,left_val:-0.0935965329408646},{features:[[6,8,6,4,-1.],[6,8,3,4,2.]],tilted:1,threshold:-0.0365850888192654,right_val:-0.0854335278272629,left_val:0.5367609858512878},{features:[[10,7,12,5,-1.],[13,7,6,5,2.]],tilted:0,threshold:5.3153699263930321e-003,right_val:0.1444391012191773,left_val:-0.1280411928892136},{features:[[3,5,12,3,-1.],[9,5,6,3,2.]],tilted:0,threshold:-3.9569609798491001e-003,right_val:-0.2231141030788422,left_val:0.1860544979572296},{features:[[13,5,4,6,-1.],[13,8,4,3,2.]],tilted:0,threshold:0.0339654199779034,right_val:-0.5120338797569275,left_val:0.0278357099741697},{features:[[5,5,4,6,-1.],[5,8,4,3,2.]],tilted:0,threshold:-0.0148528795689344,right_val:0.1135156005620956,left_val:-0.4681495130062103},{features:[[13,12,6,6,-1.],[15,12,2,6,3.]],tilted:0,threshold:-2.9641329310834408e-003,right_val:-0.2818377017974854,left_val:0.2659179866313934},{features:[[10,2,4,10,-1.],[10,2,4,5,2.]],tilted:1,threshold:-0.1079559028148651,right_val:0.1099163964390755,left_val:-0.5752769708633423},{features:[[13,12,6,6,-1.],[15,12,2,6,3.]],tilted:0,threshold:0.0212376005947590,right_val:0.4661377072334290,left_val:-0.1045159026980400},{features:[[3,12,6,6,-1.],[5,12,2,6,3.]],tilted:0,threshold:-0.0261896401643753,right_val:-0.0922789126634598,left_val:0.4254482090473175},{features:[[11,12,6,6,-1.],[11,14,6,2,3.]],tilted:0,threshold:-0.0350105613470078,right_val:0.0728772506117821,left_val:-0.7180119752883911},{features:[[5,12,8,6,-1.],[5,12,4,3,2.],[9,15,4,3,2.]],tilted:0,threshold:1.5026619621494319e-005,right_val:0.1068215966224670,left_val:-0.2719976007938385},{features:[[5,11,12,6,-1.],[11,11,6,3,2.],[5,14,6,3,2.]],tilted:0,threshold:-0.0277602504938841,right_val:0.1011821031570435,left_val:-0.5018569231033325},{features:[[0,9,22,8,-1.],[0,9,11,4,2.],[11,13,11,4,2.]],tilted:0,threshold:-0.0374391786754131,right_val:0.0837090387940407,left_val:-0.3714151978492737},{features:[[6,9,13,3,-1.],[6,10,13,1,3.]],tilted:0,threshold:-0.0141522595658898,right_val:-0.0737676620483398,left_val:0.3098280131816864},{features:[[0,2,8,6,-1.],[0,2,4,3,2.],[4,5,4,3,2.]],tilted:0,threshold:-0.0123310796916485,right_val:0.0832151770591736,left_val:-0.3950768113136292},{features:[[4,9,16,3,-1.],[4,10,16,1,3.]],tilted:0,threshold:2.6666349731385708e-003,right_val:0.2424568980932236,left_val:-0.1377612948417664},{features:[[4,9,12,3,-1.],[4,10,12,1,3.]],tilted:0,threshold:-2.9443199746310711e-003,right_val:-0.1393789052963257,left_val:0.2446078062057495},{features:[[16,2,5,16,-1.],[16,10,5,8,2.]],tilted:0,threshold:-0.1578892022371292,right_val:0.0361407212913036,left_val:-0.5683224201202393},{features:[[6,13,7,4,-1.],[6,15,7,2,2.]],tilted:0,threshold:2.1553030237555504e-003,right_val:-0.4138025939464569,left_val:0.0836605578660965},{features:[[1,7,20,8,-1.],[11,7,10,4,2.],[1,11,10,4,2.]],tilted:0,threshold:-0.0853670910000801,right_val:0.0529956594109535,left_val:-0.5705329179763794},{features:[[5,2,12,3,-1.],[5,3,12,1,3.]],tilted:0,threshold:3.4761740826070309e-003,right_val:0.2655329108238220,left_val:-0.1218981966376305},{features:[[13,13,6,4,-1.],[13,15,6,2,2.]],tilted:0,threshold:-0.0241042207926512,right_val:0.0255056601017714,left_val:-0.5231543779373169},{features:[[1,0,5,8,-1.],[1,4,5,4,2.]],tilted:0,threshold:-0.0307291503995657,right_val:0.0708444267511368,left_val:-0.4673540890216827},{features:[[5,0,13,8,-1.],[5,4,13,4,2.]],tilted:0,threshold:-1.1937420349568129e-003,right_val:-0.2308627068996429,left_val:0.1459686011075974},{features:[[9,1,4,8,-1.],[9,5,4,4,2.]],tilted:0,threshold:0.0323041006922722,right_val:0.5509138107299805,left_val:-0.0653509274125099},{features:[[11,2,8,8,-1.],[9,4,8,4,2.]],tilted:1,threshold:0.1495549976825714,right_val:-0.8940045237541199,left_val:0.0150020895525813},{features:[[11,2,8,8,-1.],[13,4,4,8,2.]],tilted:1,threshold:-4.7254669480025768e-003,right_val:-0.2101994007825851,left_val:0.1485746055841446},{features:[[8,0,14,4,-1.],[15,0,7,2,2.],[8,2,7,2,2.]],tilted:0,threshold:0.0363607183098793,right_val:-0.6366893053054810,left_val:0.0285479500889778},{features:[[0,10,12,4,-1.],[0,10,6,2,2.],[6,12,6,2,2.]],tilted:0,threshold:-0.0271099992096424,right_val:-0.0736615732312202,left_val:0.4966191053390503},{features:[[8,0,14,4,-1.],[15,0,7,2,2.],[8,2,7,2,2.]],tilted:0,threshold:-9.5398407429456711e-003,right_val:0.0585070811212063,left_val:-0.1938468068838120},{features:[[3,4,16,14,-1.],[7,4,8,14,2.]],tilted:0,threshold:0.1054198965430260,right_val:0.4378111064434052,left_val:-0.0747857317328453},{features:[[13,13,6,4,-1.],[13,15,6,2,2.]],tilted:0,threshold:6.3801761716604233e-003,right_val:-0.3382979035377502,left_val:0.0539715290069580},{features:[[3,13,6,4,-1.],[3,15,6,2,2.]],tilted:0,threshold:-0.0227598492056131,right_val:0.0480465292930603,left_val:-0.5937489867210388},{features:[[11,5,2,10,-1.],[11,5,1,10,2.]],tilted:1,threshold:-0.0173237491399050,right_val:0.0151871601119637,left_val:-0.1603469997644424},{features:[[11,5,10,2,-1.],[11,5,10,1,2.]],tilted:1,threshold:0.0298544093966484,right_val:0.4505734145641327,left_val:-0.0656982436776161},{features:[[4,0,18,4,-1.],[13,0,9,2,2.],[4,2,9,2,2.]],tilted:0,threshold:0.0232698395848274,right_val:-0.3535487949848175,left_val:0.0388054996728897},{features:[[6,5,4,6,-1.],[6,5,2,6,2.]],tilted:1,threshold:0.0408338718116283,right_val:-0.5622245073318481,left_val:0.0494048409163952},{features:[[16,6,6,6,-1.],[14,8,6,2,3.]],tilted:1,threshold:-0.1249888986349106,right_val:-0.0154849402606487,left_val:0.6776366829872131},{features:[[6,6,6,6,-1.],[8,8,2,6,3.]],tilted:1,threshold:-0.0655793771147728,right_val:-0.0452696904540062,left_val:0.6736323237419128},{features:[[4,0,18,12,-1.],[4,0,9,12,2.]],tilted:0,threshold:-0.3790175914764404,right_val:0.0239552296698093,left_val:-0.4985372126102448},{features:[[0,12,8,6,-1.],[2,12,4,6,2.]],tilted:0,threshold:2.9792459681630135e-003,right_val:0.1626583039760590,left_val:-0.1843641996383667},{features:[[7,12,8,6,-1.],[7,12,4,6,2.]],tilted:0,threshold:0.0138036599382758,right_val:-0.4338980019092560,left_val:0.0636982172727585},{features:[[7,6,3,12,-1.],[8,6,1,12,3.]],tilted:0,threshold:3.5606899764388800e-003,right_val:0.2361861020326614,left_val:-0.1145507022738457},{features:[[15,5,6,6,-1.],[15,5,3,6,2.]],tilted:1,threshold:8.8772783055901527e-003,right_val:-0.1759098023176193,left_val:0.0864168405532837}],threshold:-1.0648390054702759},{simpleClassifiers:[{features:[[2,12,8,3,-1.],[6,12,4,3,2.]],tilted:0,threshold:-6.7344820126891136e-003,right_val:-0.2976179122924805,left_val:0.3075858950614929},{features:[[2,6,18,3,-1.],[8,6,6,3,3.]],tilted:0,threshold:-0.0139028802514076,right_val:-0.2296725064516068,left_val:0.2040069997310638},{features:[[0,11,22,2,-1.],[11,11,11,2,2.]],tilted:0,threshold:-0.0419635511934757,right_val:0.0867454931139946,left_val:-0.5657541155815125},{features:[[10,14,6,4,-1.],[10,16,6,2,2.]],tilted:0,threshold:-5.9794791013700888e-005,right_val:-0.2310905009508133,left_val:0.1583261042833328},{features:[[3,12,6,4,-1.],[6,12,3,4,2.]],tilted:0,threshold:8.4739532321691513e-003,right_val:0.3975858986377716,left_val:-0.1150123029947281},{features:[[14,0,4,12,-1.],[14,0,4,6,2.]],tilted:1,threshold:-0.0653170570731163,right_val:0.1139170974493027,left_val:-0.2388727962970734},{features:[[5,10,6,4,-1.],[8,10,3,4,2.]],tilted:0,threshold:-4.2358501814305782e-003,right_val:-0.2421883940696716,left_val:0.2233722060918808},{features:[[1,12,20,6,-1.],[11,12,10,3,2.],[1,15,10,3,2.]],tilted:0,threshold:0.0462292991578579,right_val:-0.5342770218849182,left_val:0.0968374013900757},{features:[[5,15,12,3,-1.],[9,15,4,3,3.]],tilted:0,threshold:5.2246701670810580e-005,right_val:0.1593236029148102,left_val:-0.2418936043977737},{features:[[13,1,3,10,-1.],[13,6,3,5,2.]],tilted:0,threshold:-0.0414200909435749,right_val:0.0437124818563461,left_val:-0.3404498100280762},{features:[[9,0,10,4,-1.],[9,0,5,4,2.]],tilted:1,threshold:-0.0102242799475789,right_val:0.1551253050565720,left_val:-0.2475239038467407},{features:[[13,1,3,10,-1.],[13,6,3,5,2.]],tilted:0,threshold:0.0685812085866928,right_val:-0.6182122230529785,left_val:9.7173796966671944e-003},{features:[[6,1,3,10,-1.],[6,6,3,5,2.]],tilted:0,threshold:-0.0407003015279770,right_val:0.0709630697965622,left_val:-0.6028478741645813},{features:[[11,4,10,4,-1.],[11,4,10,2,2.]],tilted:1,threshold:-0.0899986997246742,right_val:-0.0485498905181885,left_val:0.4666472077369690},{features:[[0,10,20,8,-1.],[0,10,10,4,2.],[10,14,10,4,2.]],tilted:0,threshold:0.0153073603287339,right_val:-0.2711460888385773,left_val:0.1478367000818253},{features:[[15,11,6,7,-1.],[17,11,2,7,3.]],tilted:0,threshold:3.7016849964857101e-003,right_val:0.2093140929937363,left_val:-0.1515340954065323},{features:[[4,14,9,4,-1.],[4,16,9,2,2.]],tilted:0,threshold:-0.0319370999932289,right_val:0.0374201610684395,left_val:-0.7233225703239441},{features:[[15,0,6,8,-1.],[15,4,6,4,2.]],tilted:0,threshold:0.0474939085543156,right_val:-0.4830318987369537,left_val:0.0490000918507576},{features:[[1,11,6,7,-1.],[3,11,2,7,3.]],tilted:0,threshold:4.4620381668210030e-003,right_val:0.1982091069221497,left_val:-0.1769831925630570},{features:[[12,6,8,4,-1.],[12,6,8,2,2.]],tilted:1,threshold:-8.1284176558256149e-003,right_val:-0.0508055202662945,left_val:0.1122218966484070},{features:[[11,2,6,2,-1.],[11,2,6,1,2.]],tilted:1,threshold:-0.0125960195437074,right_val:-0.0828989520668983,left_val:0.4388906061649323},{features:[[11,0,11,8,-1.],[11,4,11,4,2.]],tilted:0,threshold:-1.0689930059015751e-003,right_val:-0.0826670080423355,left_val:0.0687660872936249},{features:[[0,1,22,6,-1.],[0,1,11,3,2.],[11,4,11,3,2.]],tilted:0,threshold:-0.0482130907475948,right_val:0.0743107125163078,left_val:-0.4667134881019592},{features:[[11,6,3,12,-1.],[12,6,1,12,3.]],tilted:0,threshold:-2.3418650380335748e-004,right_val:-0.1091964021325111,left_val:0.0887251421809196},{features:[[0,1,14,7,-1.],[7,1,7,7,2.]],tilted:0,threshold:0.1009500026702881,right_val:-0.5520536899566650,left_val:0.0554442703723907},{features:[[16,8,4,6,-1.],[16,8,2,6,2.]],tilted:1,threshold:0.0323404110968113,right_val:-0.3663640022277832,left_val:0.0497627407312393},{features:[[1,11,20,7,-1.],[6,11,10,7,2.]],tilted:0,threshold:0.1769921034574509,right_val:0.5430079102516174,left_val:-0.0737656429409981},{features:[[13,12,4,6,-1.],[13,15,4,3,2.]],tilted:0,threshold:-1.8634319712873548e-004,right_val:-0.1821410953998566,left_val:0.0957186669111252},{features:[[0,3,13,3,-1.],[0,4,13,1,3.]],tilted:0,threshold:6.6473139449954033e-003,right_val:0.3033103942871094,left_val:-0.1217313036322594},{features:[[6,3,12,3,-1.],[6,4,12,1,3.]],tilted:0,threshold:-9.9276658147573471e-003,right_val:-0.0885337069630623,left_val:0.3263852000236511},{features:[[0,4,22,10,-1.],[0,4,11,5,2.],[11,9,11,5,2.]],tilted:0,threshold:0.0525870993733406,right_val:-0.3343687057495117,left_val:0.1130395010113716},{features:[[14,3,8,4,-1.],[14,3,8,2,2.]],tilted:1,threshold:4.9553681164979935e-003,right_val:0.0976148098707199,left_val:-0.1318328976631165},{features:[[5,5,12,6,-1.],[5,5,6,3,2.],[11,8,6,3,2.]],tilted:0,threshold:-0.0238176602870226,right_val:0.0848498120903969,left_val:-0.4102765023708344},{features:[[11,6,6,6,-1.],[13,6,2,6,3.]],tilted:0,threshold:-0.0113637801259756,right_val:-0.0835364162921906,left_val:0.1887442022562027},{features:[[9,4,4,13,-1.],[10,4,2,13,2.]],tilted:0,threshold:-1.9515539752319455e-003,right_val:-0.1777677983045578,left_val:0.1898508965969086},{features:[[11,3,3,13,-1.],[12,3,1,13,3.]],tilted:0,threshold:-0.0135766696184874,right_val:-0.0371154509484768,left_val:0.2097575962543488},{features:[[9,5,4,6,-1.],[11,5,2,6,2.]],tilted:0,threshold:0.0164668206125498,right_val:0.3804722130298615,left_val:-0.0823494121432304},{features:[[7,2,12,15,-1.],[11,7,4,5,9.]],tilted:0,threshold:-0.1013626009225845,right_val:0.0678049102425575,left_val:-0.1163323000073433},{features:[[3,2,12,15,-1.],[7,7,4,5,9.]],tilted:0,threshold:-0.1024843007326126,right_val:0.1213968023657799,left_val:-0.2885020971298218},{features:[[5,2,12,12,-1.],[9,6,4,4,9.]],tilted:0,threshold:-0.2871756851673126,right_val:-0.0829543098807335,left_val:0.4693514108657837},{features:[[8,5,4,12,-1.],[8,8,4,6,2.]],tilted:0,threshold:0.0508129782974720,right_val:-0.6238328218460083,left_val:0.0553938783705235},{features:[[8,9,8,7,-1.],[10,9,4,7,2.]],tilted:0,threshold:0.0910634174942970,right_val:0.4715529978275299,left_val:-0.0233795605599880},{features:[[6,9,8,7,-1.],[8,9,4,7,2.]],tilted:0,threshold:-0.0518453381955624,right_val:0.0454541184008121,left_val:-0.6903154253959656},{features:[[0,4,22,14,-1.],[11,4,11,7,2.],[0,11,11,7,2.]],tilted:0,threshold:0.1503123939037323,right_val:-0.5206773877143860,left_val:0.0459067113697529},{features:[[2,12,18,6,-1.],[2,14,18,2,3.]],tilted:0,threshold:0.0415963195264339,right_val:-0.4878216981887817,left_val:0.0537062995135784}],threshold:-0.9506993293762207},{simpleClassifiers:[{features:[[6,5,6,5,-1.],[9,5,3,5,2.]],tilted:0,threshold:-5.9847710654139519e-003,right_val:-0.3092339038848877,left_val:0.2785896062850952},{features:[[11,14,9,4,-1.],[14,14,3,4,3.]],tilted:0,threshold:-3.9032639469951391e-003,right_val:-0.2892822921276093,left_val:0.2225704938173294},{features:[[6,14,6,4,-1.],[6,16,6,2,2.]],tilted:0,threshold:-2.2362179151969030e-005,right_val:-0.3014316856861115,left_val:0.1408437043428421},{features:[[15,6,6,5,-1.],[15,6,3,5,2.]],tilted:1,threshold:-0.0911670029163361,right_val:0.0560408197343349,left_val:-0.6760801076889038},{features:[[7,6,5,6,-1.],[7,6,5,3,2.]],tilted:1,threshold:0.0527556389570236,right_val:-0.6325625777244568,left_val:0.0746887475252151},{features:[[13,12,8,6,-1.],[13,12,4,6,2.]],tilted:0,threshold:0.0694585368037224,right_val:0.6386364102363586,left_val:-0.1175492033362389},{features:[[6,10,10,8,-1.],[6,12,10,4,2.]],tilted:0,threshold:-4.8209438100457191e-003,right_val:-0.1387241035699844,left_val:0.2922593057155609},{features:[[2,13,18,2,-1.],[2,13,9,2,2.]],tilted:0,threshold:0.0321567505598068,right_val:-0.5792791247367859,left_val:0.0755752399563789},{features:[[1,15,8,3,-1.],[5,15,4,3,2.]],tilted:0,threshold:-0.0442984700202942,right_val:-0.1026460975408554,left_val:0.4022681117057800},{features:[[14,7,6,4,-1.],[14,7,6,2,2.]],tilted:1,threshold:-7.0452108047902584e-003,right_val:-0.0567258708178997,left_val:0.1512849926948547},{features:[[10,0,7,2,-1.],[10,0,7,1,2.]],tilted:1,threshold:5.1606830675154924e-004,right_val:0.1634387969970703,left_val:-0.2302210032939911},{features:[[17,8,4,6,-1.],[17,8,4,3,2.]],tilted:1,threshold:-0.0615283586084843,right_val:-0.0467515103518963,left_val:0.2555904090404511},{features:[[2,0,15,9,-1.],[7,3,5,3,9.]],tilted:0,threshold:-0.0513678118586540,right_val:0.1430545002222061,left_val:-0.2475582957267761},{features:[[9,3,4,6,-1.],[9,6,4,3,2.]],tilted:0,threshold:9.0107098221778870e-003,right_val:0.3127186000347138,left_val:-0.1064876988530159},{features:[[3,0,16,12,-1.],[3,6,16,6,2.]],tilted:0,threshold:0.0223522596061230,right_val:-0.3173629045486450,left_val:0.1549421995878220},{features:[[11,0,3,10,-1.],[11,0,3,5,2.]],tilted:1,threshold:0.0314938910305500,right_val:-0.2894667088985443,left_val:0.0720375329256058},{features:[[0,3,22,14,-1.],[11,3,11,14,2.]],tilted:0,threshold:-0.0520644597709179,right_val:0.1226018965244293,left_val:-0.2708202004432678},{features:[[10,3,6,7,-1.],[12,3,2,7,3.]],tilted:0,threshold:-6.1549381352961063e-003,right_val:-0.1065777987241745,left_val:0.1644295006990433},{features:[[11,1,11,4,-1.],[10,2,11,2,2.]],tilted:1,threshold:3.0305041000247002e-003,right_val:0.2044637948274612,left_val:-0.1523413956165314},{features:[[14,7,6,4,-1.],[14,7,6,2,2.]],tilted:1,threshold:-6.8027540110051632e-003,right_val:-0.0414583012461662,left_val:0.0714481472969055},{features:[[5,5,4,12,-1.],[5,11,4,6,2.]],tilted:0,threshold:0.0686475336551666,right_val:0.5763890147209168,left_val:-0.0528335385024548},{features:[[2,6,20,9,-1.],[2,6,10,9,2.]],tilted:0,threshold:-0.0928830802440643,right_val:0.0824258103966713,left_val:-0.2623670995235443},{features:[[1,9,18,3,-1.],[7,9,6,3,3.]],tilted:0,threshold:-5.2907038480043411e-003,right_val:-0.2205065041780472,left_val:0.1409045010805130},{features:[[11,6,6,6,-1.],[13,6,2,6,3.]],tilted:0,threshold:1.5640209894627333e-003,right_val:0.1302697062492371,left_val:-0.1014354974031448},{features:[[8,13,6,4,-1.],[11,13,3,4,2.]],tilted:0,threshold:0.0107526201754808,right_val:-0.3213397860527039,left_val:0.0915153622627258},{features:[[10,14,6,4,-1.],[10,14,3,4,2.]],tilted:0,threshold:-0.0211063604801893,right_val:9.1773197054862976e-003,left_val:-0.2741023004055023},{features:[[5,6,6,6,-1.],[7,6,2,6,3.]],tilted:0,threshold:4.8663117922842503e-003,right_val:0.1971106976270676,left_val:-0.1525872051715851},{features:[[15,0,3,8,-1.],[16,1,1,8,3.]],tilted:1,threshold:0.0653964728116989,right_val:-0.6434308886528015,left_val:6.5921088680624962e-003},{features:[[5,8,12,3,-1.],[9,8,4,3,3.]],tilted:0,threshold:4.4902609661221504e-003,right_val:0.2800520956516266,left_val:-0.1037724986672401},{features:[[2,7,18,4,-1.],[2,9,18,2,2.]],tilted:0,threshold:0.0466148406267166,right_val:-0.5217915177345276,left_val:0.0547158494591713},{features:[[11,1,10,4,-1.],[11,1,5,4,2.]],tilted:1,threshold:0.1159745007753372,right_val:-0.6478490233421326,left_val:0.0396139994263649},{features:[[15,0,3,8,-1.],[16,1,1,8,3.]],tilted:1,threshold:5.7222661562263966e-003,right_val:0.1282801926136017,left_val:-0.0548381693661213},{features:[[7,0,8,3,-1.],[6,1,8,1,3.]],tilted:1,threshold:-0.0416332595050335,right_val:0.0359422899782658,left_val:-0.8066583871841431},{features:[[10,0,12,4,-1.],[16,0,6,2,2.],[10,2,6,2,2.]],tilted:0,threshold:-0.0472523905336857,right_val:0.0127373700961471,left_val:-0.7919319272041321},{features:[[5,2,12,3,-1.],[5,3,12,1,3.]],tilted:0,threshold:-1.6451090341433883e-003,right_val:-0.1323063969612122,left_val:0.2037672996520996},{features:[[8,2,14,3,-1.],[8,3,14,1,3.]],tilted:0,threshold:2.5758889969438314e-003,right_val:0.1353008002042770,left_val:-0.0635034069418907},{features:[[0,0,12,4,-1.],[0,0,6,2,2.],[6,2,6,2,2.]],tilted:0,threshold:0.0207585897296667,right_val:-0.5821200013160706,left_val:0.0472869798541069},{features:[[8,0,14,4,-1.],[15,0,7,2,2.],[8,2,7,2,2.]],tilted:0,threshold:-0.0286014806479216,right_val:0.0242109801620245,left_val:-0.4122197031974793},{features:[[0,5,8,6,-1.],[0,5,4,3,2.],[4,8,4,3,2.]],tilted:0,threshold:-0.0286915805190802,right_val:0.0450686290860176,left_val:-0.5540468096733093},{features:[[14,14,6,4,-1.],[14,14,3,4,2.]],tilted:0,threshold:-2.6637869887053967e-003,right_val:-0.1631949990987778,left_val:0.1257023066282272},{features:[[6,12,10,4,-1.],[11,12,5,4,2.]],tilted:0,threshold:-4.4750720262527466e-003,right_val:0.1029310002923012,left_val:-0.2713806927204132},{features:[[14,6,6,6,-1.],[12,8,6,2,3.]],tilted:1,threshold:0.0409370996057987,right_val:0.1309264004230499,left_val:-0.0320654697716236},{features:[[8,6,6,6,-1.],[10,8,2,6,3.]],tilted:1,threshold:0.0758271813392639,right_val:0.5659629702568054,left_val:-0.0512215197086334}],threshold:-0.8504595160484314},{simpleClassifiers:[{features:[[2,8,6,10,-1.],[2,8,3,5,2.],[5,13,3,5,2.]],tilted:0,threshold:-4.2669968679547310e-003,right_val:-0.2826541960239410,left_val:0.1770441979169846},{features:[[11,3,4,9,-1.],[12,4,2,9,2.]],tilted:1,threshold:-0.0225779395550489,right_val:-0.0423263683915138,left_val:0.2365795969963074},{features:[[2,0,12,4,-1.],[2,0,6,2,2.],[8,2,6,2,2.]],tilted:0,threshold:-9.8107997328042984e-003,right_val:0.0909823030233383,left_val:-0.3856830894947052},{features:[[11,5,3,9,-1.],[12,6,1,9,3.]],tilted:1,threshold:3.8510379381477833e-003,right_val:0.1926759034395218,left_val:-0.1027040034532547},{features:[[11,3,9,4,-1.],[10,4,9,2,2.]],tilted:1,threshold:-2.0688450895249844e-003,right_val:-0.2139438986778259,left_val:0.1665657013654709},{features:[[13,13,8,5,-1.],[13,13,4,5,2.]],tilted:0,threshold:-0.0583685003221035,right_val:-0.0806054621934891,left_val:0.3483357131481171},{features:[[1,13,8,5,-1.],[5,13,4,5,2.]],tilted:0,threshold:0.0562909208238125,right_val:0.6942182779312134,left_val:-0.0616179890930653},{features:[[7,13,8,3,-1.],[7,13,4,3,2.]],tilted:0,threshold:5.5776340886950493e-003,right_val:-0.4076493084430695,left_val:0.0783748626708984},{features:[[8,13,6,4,-1.],[11,13,3,4,2.]],tilted:0,threshold:5.0974669866263866e-003,right_val:-0.2762084901332855,left_val:0.1500179022550583},{features:[[11,7,3,8,-1.],[12,8,1,8,3.]],tilted:1,threshold:0.0241340193897486,right_val:0.4011130928993225,left_val:-0.0376859717071056},{features:[[5,1,6,8,-1.],[7,1,2,8,3.]],tilted:0,threshold:2.6251180097460747e-003,right_val:0.1666657030582428,left_val:-0.1898688971996307},{features:[[14,14,6,4,-1.],[14,16,6,2,2.]],tilted:0,threshold:-0.0231797192245722,right_val:0.0330169312655926,left_val:-0.6080746054649353},{features:[[11,7,8,3,-1.],[10,8,8,1,3.]],tilted:1,threshold:-1.7960369586944580e-003,right_val:-0.1630056053400040,left_val:0.1832838952541351},{features:[[12,3,3,12,-1.],[8,7,3,4,3.]],tilted:1,threshold:0.1132725030183792,right_val:-0.3852145075798035,left_val:0.0163923595100641},{features:[[8,5,5,6,-1.],[8,8,5,3,2.]],tilted:0,threshold:-0.0111209303140640,right_val:0.1203088015317917,left_val:-0.2678939104080200},{features:[[11,3,8,4,-1.],[11,3,8,2,2.]],tilted:1,threshold:8.9298561215400696e-003,right_val:0.0524467006325722,left_val:-0.0647662431001663},{features:[[7,5,8,6,-1.],[9,5,4,6,2.]],tilted:0,threshold:0.0302645191550255,right_val:0.4917060136795044,left_val:-0.0533437095582485},{features:[[11,4,6,6,-1.],[9,6,6,2,3.]],tilted:1,threshold:0.1303624063730240,right_val:-0.8077524900436401,left_val:9.9123492836952209e-003},{features:[[11,4,6,6,-1.],[13,6,2,6,3.]],tilted:1,threshold:-4.8941900022327900e-003,right_val:-0.2422267943620682,left_val:0.1415328979492188},{features:[[12,8,6,4,-1.],[12,8,3,4,2.]],tilted:1,threshold:-0.0180093497037888,right_val:0.0537842698395252,left_val:-0.1835270971059799},{features:[[5,15,8,3,-1.],[9,15,4,3,2.]],tilted:0,threshold:6.3028637669049203e-005,right_val:0.1386117935180664,left_val:-0.2083622068166733},{features:[[0,5,22,13,-1.],[0,5,11,13,2.]],tilted:0,threshold:-0.3812729120254517,right_val:0.0345780998468399,left_val:-0.7652782201766968},{features:[[2,12,9,6,-1.],[5,12,3,6,3.]],tilted:0,threshold:0.0161685701459646,right_val:0.3608635067939758,left_val:-0.0785770490765572},{features:[[19,1,3,10,-1.],[19,6,3,5,2.]],tilted:0,threshold:-0.0207253806293011,right_val:0.0816933363676071,left_val:-0.3290519118309021},{features:[[5,14,12,4,-1.],[5,16,12,2,2.]],tilted:0,threshold:-1.4763489889446646e-004,right_val:-0.2762413918972015,left_val:0.1044917032122612},{features:[[10,14,10,4,-1.],[10,16,10,2,2.]],tilted:0,threshold:-0.0169591698795557,right_val:0.0545696802437305,left_val:-0.2415079027414322},{features:[[1,3,14,3,-1.],[1,4,14,1,3.]],tilted:0,threshold:-0.0152211003005505,right_val:-0.0683332532644272,left_val:0.4103314876556397},{features:[[3,14,16,4,-1.],[11,14,8,2,2.],[3,16,8,2,2.]],tilted:0,threshold:-9.6041243523359299e-003,right_val:0.0862504914402962,left_val:-0.3356964886188507},{features:[[0,14,6,4,-1.],[3,14,3,4,2.]],tilted:0,threshold:-1.6476860037073493e-003,right_val:-0.1904449015855789,left_val:0.1623633056879044},{features:[[10,1,11,4,-1.],[10,3,11,2,2.]],tilted:0,threshold:-0.1070583984255791,right_val:7.3941340669989586e-003,left_val:-0.8676710724830627},{features:[[1,1,11,4,-1.],[1,3,11,2,2.]],tilted:0,threshold:-0.0188181605190039,right_val:0.0688466429710388,left_val:-0.3687911033630371},{features:[[9,3,6,6,-1.],[9,5,6,2,3.]],tilted:0,threshold:-5.6142187677323818e-003,right_val:-0.1251447051763535,left_val:0.1732203960418701},{features:[[4,5,12,3,-1.],[4,6,12,1,3.]],tilted:0,threshold:7.3969298973679543e-003,right_val:0.3202716112136841,left_val:-0.0854673683643341},{features:[[12,0,7,6,-1.],[12,3,7,3,2.]],tilted:0,threshold:9.4870915636420250e-003,right_val:-0.2091891020536423,left_val:0.0631684064865112},{features:[[1,3,16,4,-1.],[1,4,16,2,2.]],tilted:0,threshold:1.8458140548318624e-003,right_val:0.1851702034473419,left_val:-0.1543627977371216},{features:[[4,9,15,3,-1.],[4,10,15,1,3.]],tilted:0,threshold:-0.0197473596781492,right_val:-0.0767758488655090,left_val:0.3307111859321594},{features:[[2,4,18,6,-1.],[2,4,9,3,2.],[11,7,9,3,2.]],tilted:0,threshold:0.0324211604893208,right_val:-0.4014750123023987,left_val:0.0820211321115494},{features:[[13,5,4,13,-1.],[14,5,2,13,2.]],tilted:0,threshold:2.9075390193611383e-003,right_val:0.1062069982290268,left_val:-0.0771740376949310},{features:[[4,6,6,4,-1.],[4,8,6,2,2.]],tilted:0,threshold:0.0151893598958850,right_val:-0.4136523902416229,left_val:0.0603638999164104},{features:[[8,7,6,5,-1.],[8,7,3,5,2.]],tilted:0,threshold:-0.0306837391108274,right_val:-0.0593813210725784,left_val:0.4347062110900879},{features:[[10,8,4,6,-1.],[10,8,4,3,2.]],tilted:1,threshold:-0.0109734497964382,right_val:0.0855164676904678,left_val:-0.2953523099422455},{features:[[6,12,12,4,-1.],[6,12,6,4,2.]],tilted:0,threshold:-0.0395403616130352,right_val:0.0344729684293270,left_val:-0.2876588106155396},{features:[[3,11,10,3,-1.],[8,11,5,3,2.]],tilted:0,threshold:-0.0379358716309071,right_val:-0.0853647664189339,left_val:0.3819986879825592},{features:[[12,2,3,12,-1.],[12,2,3,6,2.]],tilted:1,threshold:0.0306698102504015,right_val:-0.1770364046096802,left_val:0.0447380989789963},{features:[[0,2,14,16,-1.],[7,2,7,16,2.]],tilted:0,threshold:0.1719450950622559,right_val:0.4929103851318359,left_val:-0.0592141784727573},{features:[[1,5,20,4,-1.],[6,5,10,4,2.]],tilted:0,threshold:-6.7055500112473965e-003,right_val:-0.2182646989822388,left_val:0.1641025990247726},{features:[[0,1,18,15,-1.],[9,1,9,15,2.]],tilted:0,threshold:-0.3857786953449249,right_val:0.0423495918512344,left_val:-0.6717677116394043},{features:[[15,2,6,8,-1.],[15,4,6,4,2.]],tilted:0,threshold:0.0272130407392979,right_val:-0.2295421063899994,left_val:0.0122661497443914},{features:[[4,14,13,4,-1.],[4,15,13,2,2.]],tilted:0,threshold:-0.0192949809134007,right_val:0.0383809991180897,left_val:-0.5837343931198120},{features:[[11,2,3,12,-1.],[12,2,1,12,3.]],tilted:0,threshold:7.6792249456048012e-003,right_val:0.1596446037292481,left_val:-0.0474903509020805},{features:[[0,16,15,2,-1.],[0,17,15,1,2.]],tilted:0,threshold:6.0242269682930782e-005,right_val:0.1823665052652359,left_val:-0.1173423975706101},{features:[[12,14,6,4,-1.],[12,16,6,2,2.]],tilted:0,threshold:-6.6498141677584499e-005,right_val:-0.1698943972587585,left_val:0.0747451409697533},{features:[[5,13,12,4,-1.],[5,14,12,2,2.]],tilted:0,threshold:4.3275849893689156e-003,right_val:-0.2844434976577759,left_val:0.0737897977232933},{features:[[12,12,6,6,-1.],[12,14,6,2,3.]],tilted:0,threshold:-0.0331404693424702,right_val:0.0100287301465869,left_val:-0.4060660898685455},{features:[[0,9,15,3,-1.],[0,10,15,1,3.]],tilted:0,threshold:9.9181402474641800e-003,right_val:0.2819001078605652,left_val:-0.0793397873640060},{features:[[6,9,14,3,-1.],[6,10,14,1,3.]],tilted:0,threshold:-2.3577339015901089e-003,right_val:-0.1047597974538803,left_val:0.1530122011899948},{features:[[4,12,7,6,-1.],[4,14,7,2,3.]],tilted:0,threshold:-0.0262008197605610,right_val:0.0443692505359650,left_val:-0.5418503284454346},{features:[[6,6,10,6,-1.],[11,6,5,3,2.],[6,9,5,3,2.]],tilted:0,threshold:0.0473286584019661,right_val:-0.8266593217849731,left_val:0.0188977494835854}],threshold:-0.9125220179557800},{simpleClassifiers:[{features:[[3,0,16,2,-1.],[3,0,8,2,2.]],tilted:1,threshold:0.0299217198044062,right_val:0.5109282135963440,left_val:-0.3231500089168549},{features:[[5,9,12,9,-1.],[5,12,12,3,3.]],tilted:0,threshold:0.0561476089060307,right_val:0.6674917936325073,left_val:-0.1257440000772476},{features:[[6,9,10,6,-1.],[6,12,10,3,2.]],tilted:0,threshold:-0.0137598495930433,right_val:-0.2107529938220978,left_val:0.4069119095802307},{features:[[7,4,8,6,-1.],[7,6,8,2,3.]],tilted:0,threshold:-4.3788701295852661e-003,right_val:-0.2095545977354050,left_val:0.2794013917446137},{features:[[6,5,3,12,-1.],[6,11,3,6,2.]],tilted:0,threshold:0.0192088894546032,right_val:0.5093656182289124,left_val:-0.0898006930947304},{features:[[12,12,6,6,-1.],[14,12,2,6,3.]],tilted:0,threshold:-8.9393591042608023e-004,right_val:-0.1229420006275177,left_val:0.1070362031459808},{features:[[6,15,8,3,-1.],[10,15,4,3,2.]],tilted:0,threshold:-6.2918022740632296e-004,right_val:0.1300881952047348,left_val:-0.3784793019294739},{features:[[4,13,14,4,-1.],[4,15,14,2,2.]],tilted:0,threshold:-1.6248769825324416e-003,right_val:-0.2781121134757996,left_val:0.1775002032518387},{features:[[10,4,11,3,-1.],[9,5,11,1,3.]],tilted:1,threshold:-4.6151960268616676e-003,right_val:-0.1426901072263718,left_val:0.2407151013612747},{features:[[11,4,4,9,-1.],[12,5,2,9,2.]],tilted:1,threshold:0.0571628287434578,right_val:0.4508605897426605,left_val:-0.0184748694300652},{features:[[0,8,13,3,-1.],[0,9,13,1,3.]],tilted:0,threshold:-3.8265369366854429e-003,right_val:-0.1145515963435173,left_val:0.2595176100730896},{features:[[13,2,6,10,-1.],[16,2,3,5,2.],[13,7,3,5,2.]],tilted:0,threshold:-0.0452351905405521,right_val:0.0345389507710934,left_val:-0.3384900987148285},{features:[[3,2,6,10,-1.],[3,2,3,5,2.],[6,7,3,5,2.]],tilted:0,threshold:3.8135750219225883e-003,right_val:-0.2762039005756378,left_val:0.1133399978280067},{features:[[11,2,4,11,-1.],[11,2,2,11,2.]],tilted:1,threshold:0.0451082587242126,right_val:-0.1583766937255859,left_val:0.0286020506173372},{features:[[4,2,12,3,-1.],[4,3,12,1,3.]],tilted:0,threshold:-2.7794970665127039e-003,right_val:-0.1082272008061409,left_val:0.2889742851257324},{features:[[12,1,4,12,-1.],[12,1,2,12,2.]],tilted:1,threshold:5.6366869248449802e-003,right_val:0.0787871032953262,left_val:-0.1018479019403458},{features:[[11,2,11,4,-1.],[11,2,11,2,2.]],tilted:1,threshold:-0.0529868192970753,right_val:-0.0655433535575867,left_val:0.5296499729156494},{features:[[11,0,4,9,-1.],[11,0,2,9,2.]],tilted:1,threshold:0.0747378915548325,right_val:-0.3048720955848694,left_val:0.0263206604868174},{features:[[11,0,9,4,-1.],[11,0,9,2,2.]],tilted:1,threshold:4.1559520177543163e-003,right_val:0.1566217988729477,left_val:-0.2297717034816742},{features:[[16,2,6,10,-1.],[19,2,3,5,2.],[16,7,3,5,2.]],tilted:0,threshold:-2.9388200491666794e-003,right_val:0.0969966724514961,left_val:-0.1691641062498093},{features:[[11,0,6,3,-1.],[10,1,6,1,3.]],tilted:1,threshold:-0.0130655104294419,right_val:-0.0716143697500229,left_val:0.4025856852531433},{features:[[11,0,3,8,-1.],[12,1,1,8,3.]],tilted:1,threshold:-0.0349282510578632,right_val:0.0225478205829859,left_val:-0.4944998919963837},{features:[[11,0,8,3,-1.],[10,1,8,1,3.]],tilted:1,threshold:2.1728971041738987e-003,right_val:0.2013621926307678,left_val:-0.1555256992578507},{features:[[17,1,4,12,-1.],[19,1,2,6,2.],[17,7,2,6,2.]],tilted:0,threshold:0.0143873495981097,right_val:-0.2946861982345581,left_val:0.0363481007516384},{features:[[8,4,6,4,-1.],[8,6,6,2,2.]],tilted:0,threshold:6.7830132320523262e-003,right_val:0.3385750055313110,left_val:-0.0822483524680138},{features:[[8,5,8,5,-1.],[8,5,4,5,2.]],tilted:0,threshold:-0.0728838369250298,right_val:0.0196013208478689,left_val:-0.3457767069339752},{features:[[8,4,6,13,-1.],[10,4,2,13,3.]],tilted:0,threshold:-4.5158518478274345e-003,right_val:-0.1974281966686249,left_val:0.1705949008464813},{features:[[16,3,6,8,-1.],[19,3,3,4,2.],[16,7,3,4,2.]],tilted:0,threshold:-0.0137420799583197,right_val:0.0339536890387535,left_val:-0.2121434956789017},{features:[[0,3,6,8,-1.],[0,3,3,4,2.],[3,7,3,4,2.]],tilted:0,threshold:7.8056701458990574e-003,right_val:-0.3422398865222931,left_val:0.0714266970753670},{features:[[10,9,12,4,-1.],[16,9,6,2,2.],[10,11,6,2,2.]],tilted:0,threshold:0.0216499902307987,right_val:0.3726766109466553,left_val:-0.0619250498712063},{features:[[1,2,9,12,-1.],[4,6,3,4,9.]],tilted:0,threshold:-0.0677066370844841,right_val:0.0943575873970985,left_val:-0.3030416071414948},{features:[[15,12,4,6,-1.],[15,12,2,6,2.]],tilted:0,threshold:-2.1855749655514956e-003,right_val:-0.1553054004907608,left_val:0.1083177030086517},{features:[[5,15,12,3,-1.],[11,15,6,3,2.]],tilted:0,threshold:-2.5483060162514448e-003,right_val:0.0929162874817848,left_val:-0.2410344034433365},{features:[[2,16,20,2,-1.],[2,16,10,2,2.]],tilted:0,threshold:-0.0672078132629395,right_val:0.0160746499896050,left_val:-0.6625934839248657},{features:[[1,8,10,6,-1.],[1,8,5,3,2.],[6,11,5,3,2.]],tilted:0,threshold:0.0477993711829185,right_val:0.6056978702545166,left_val:-0.0444126389920712},{features:[[6,3,16,14,-1.],[14,3,8,7,2.],[6,10,8,7,2.]],tilted:0,threshold:-0.0911784172058105,right_val:-0.0347624011337757,left_val:0.2476149052381516},{features:[[1,4,6,8,-1.],[1,4,3,4,2.],[4,8,3,4,2.]],tilted:0,threshold:-3.8592480123043060e-003,right_val:0.1019499972462654,left_val:-0.2536674141883850},{features:[[7,2,12,4,-1.],[7,3,12,2,2.]],tilted:0,threshold:2.4100970476865768e-003,right_val:0.1976791024208069,left_val:-0.1213397011160851},{features:[[1,9,6,9,-1.],[4,9,3,9,2.]],tilted:0,threshold:-5.3831469267606735e-003,right_val:-0.1618983000516892,left_val:0.1710394024848938},{features:[[12,14,10,4,-1.],[12,14,5,4,2.]],tilted:0,threshold:9.1004222631454468e-003,right_val:0.1769524961709976,left_val:-0.0609215497970581},{features:[[2,12,12,5,-1.],[5,12,6,5,2.]],tilted:0,threshold:2.2724110167473555e-003,right_val:0.2744063138961792,left_val:-0.0904769673943520},{features:[[15,12,6,6,-1.],[17,12,2,6,3.]],tilted:0,threshold:-0.0806215628981590,right_val:0.0171932391822338,left_val:-0.8804556727409363},{features:[[1,12,6,6,-1.],[3,12,2,6,3.]],tilted:0,threshold:3.8965709973126650e-003,right_val:0.1797958016395569,left_val:-0.1703792065382004},{features:[[8,12,6,6,-1.],[10,12,2,6,3.]],tilted:0,threshold:-4.3093641288578510e-003,right_val:0.0863174721598625,left_val:-0.2938205003738403}],threshold:-1.1653599739074707},{simpleClassifiers:[{features:[[5,2,12,16,-1.],[5,10,12,8,2.]],tilted:0,threshold:-0.0631161928176880,right_val:-0.3599770963191986,left_val:0.5551251769065857},{features:[[4,2,18,14,-1.],[4,9,18,7,2.]],tilted:0,threshold:0.0843502879142761,right_val:0.5356768965721130,left_val:-0.1253127008676529},{features:[[5,4,12,14,-1.],[5,11,12,7,2.]],tilted:0,threshold:-0.2139073014259338,right_val:-0.0882708728313446,left_val:0.7515686154365540},{features:[[2,5,20,8,-1.],[7,5,10,8,2.]],tilted:0,threshold:-0.0297449808567762,right_val:-0.1210668981075287,left_val:0.2010620981454849},{features:[[8,0,10,7,-1.],[8,0,5,7,2.]],tilted:1,threshold:-0.1198768019676209,right_val:-0.0777476131916046,left_val:0.6469219923019409},{features:[[12,0,5,8,-1.],[12,0,5,4,2.]],tilted:1,threshold:3.0843529384583235e-003,right_val:0.0778890773653984,left_val:-0.0630676373839378},{features:[[7,4,6,13,-1.],[10,4,3,13,2.]],tilted:0,threshold:-4.5560211874544621e-003,right_val:-0.1992907971143723,left_val:0.1897227019071579},{features:[[7,14,8,4,-1.],[7,16,8,2,2.]],tilted:0,threshold:4.4629329931922257e-004,right_val:-0.3029241859912872,left_val:0.1405158936977387},{features:[[8,0,3,12,-1.],[9,0,1,12,3.]],tilted:0,threshold:-6.4954371191561222e-003,right_val:-0.1107200011610985,left_val:0.3194229006767273},{features:[[11,6,3,12,-1.],[12,6,1,12,3.]],tilted:0,threshold:-2.1751760505139828e-003,right_val:-0.0804247781634331,left_val:0.1647725999355316},{features:[[4,0,3,12,-1.],[4,4,3,4,3.]],tilted:0,threshold:6.5875840373337269e-003,right_val:-0.3019815087318420,left_val:0.1471655070781708},{features:[[11,3,3,15,-1.],[12,3,1,15,3.]],tilted:0,threshold:0.0207012090831995,right_val:0.4012382030487061,left_val:-0.0429966896772385},{features:[[5,12,7,6,-1.],[5,14,7,2,3.]],tilted:0,threshold:2.5877119041979313e-003,right_val:-0.2751812040805817,left_val:0.1263054013252258},{features:[[11,6,3,12,-1.],[12,6,1,12,3.]],tilted:0,threshold:-0.0105450795963407,right_val:-0.0397727787494659,left_val:0.1963762938976288},{features:[[8,6,3,12,-1.],[9,6,1,12,3.]],tilted:0,threshold:6.2396968714892864e-003,right_val:0.3665548861026764,left_val:-0.0835634097456932},{features:[[5,16,12,2,-1.],[5,16,6,2,2.]],tilted:0,threshold:0.0144586702808738,right_val:-0.5849890708923340,left_val:0.0633016973733902},{features:[[1,12,20,6,-1.],[6,12,10,6,2.]],tilted:0,threshold:0.0312634408473969,right_val:0.3485285937786102,left_val:-0.1067527011036873},{features:[[8,11,9,4,-1.],[11,11,3,4,3.]],tilted:0,threshold:1.4865349512547255e-003,right_val:-0.1373165994882584,left_val:0.1370967030525208},{features:[[5,11,9,4,-1.],[8,11,3,4,3.]],tilted:0,threshold:-1.7898039368446916e-004,right_val:-0.2575171887874603,left_val:0.1783964931964874},{features:[[11,6,9,12,-1.],[14,10,3,4,9.]],tilted:0,threshold:0.0777144730091095,right_val:-0.2427340000867844,left_val:0.0570818483829498},{features:[[2,6,9,12,-1.],[5,10,3,4,9.]],tilted:0,threshold:0.0222282707691193,right_val:-0.2099460959434509,left_val:0.1459379047155380},{features:[[5,9,12,2,-1.],[5,10,12,1,2.]],tilted:0,threshold:1.6969949938356876e-003,right_val:0.2737540900707245,left_val:-0.1441888958215714},{features:[[0,3,16,3,-1.],[4,3,8,3,2.]],tilted:0,threshold:-0.0200234707444906,right_val:0.0816276967525482,left_val:-0.3755624890327454},{features:[[11,6,3,12,-1.],[12,6,1,12,3.]],tilted:0,threshold:3.8644319865852594e-003,right_val:0.1592168956995010,left_val:-0.0644904300570488},{features:[[0,2,14,3,-1.],[0,3,14,1,3.]],tilted:0,threshold:-3.0527650378644466e-003,right_val:-0.1053185015916824,left_val:0.2675152122974396},{features:[[10,2,12,3,-1.],[10,3,12,1,3.]],tilted:0,threshold:5.6112320162355900e-003,right_val:0.2123499065637589,left_val:-0.0685677304863930},{features:[[5,14,12,3,-1.],[11,14,6,3,2.]],tilted:0,threshold:4.6622268855571747e-003,right_val:-0.2089271992444992,left_val:0.1425414979457855},{features:[[8,13,8,3,-1.],[8,13,4,3,2.]],tilted:0,threshold:2.4710448924452066e-003,right_val:-0.1883390992879868,left_val:0.0726143866777420},{features:[[9,2,4,8,-1.],[9,6,4,4,2.]],tilted:0,threshold:0.0126550002023578,right_val:0.4326224029064179,left_val:-0.0836052596569061},{features:[[15,1,3,11,-1.],[16,2,1,11,3.]],tilted:1,threshold:-0.0177245195955038,right_val:-0.0284798201173544,left_val:0.1743223071098328},{features:[[8,1,10,4,-1.],[7,2,10,2,2.]],tilted:1,threshold:-7.2321272455155849e-004,right_val:-0.2401217967271805,left_val:0.1534397006034851},{features:[[5,5,15,3,-1.],[5,6,15,1,3.]],tilted:0,threshold:-6.2155709601938725e-003,right_val:-0.0855198875069618,left_val:0.2516668140888214},{features:[[5,1,9,5,-1.],[8,1,3,5,3.]],tilted:0,threshold:0.0416327714920044,right_val:-0.6096544265747070,left_val:0.0505938008427620},{features:[[14,0,4,18,-1.],[15,0,2,18,2.]],tilted:0,threshold:0.0239183008670807,right_val:0.3905547857284546,left_val:-0.0368096604943275},{features:[[6,0,5,16,-1.],[6,8,5,8,2.]],tilted:0,threshold:-7.4353138916194439e-003,right_val:-0.1862781941890717,left_val:0.1501857936382294},{features:[[12,4,4,8,-1.],[12,8,4,4,2.]],tilted:0,threshold:-0.0205714497715235,right_val:0.0483023785054684,left_val:-0.2857455909252167},{features:[[11,4,10,2,-1.],[11,4,10,1,2.]],tilted:1,threshold:-7.3831980116665363e-003,right_val:-0.0960677564144135,left_val:0.3668056130409241},{features:[[10,0,12,3,-1.],[14,0,4,3,3.]],tilted:0,threshold:9.7222924232482910e-003,right_val:-0.1726257950067520,left_val:0.0638980194926262},{features:[[0,2,20,13,-1.],[5,2,10,13,2.]],tilted:0,threshold:-0.0218076296150684,right_val:-0.1910911947488785,left_val:0.1802726984024048},{features:[[12,4,4,8,-1.],[12,8,4,4,2.]],tilted:0,threshold:0.0581476688385010,right_val:-0.4625082910060883,left_val:8.5709961131215096e-003},{features:[[6,4,4,8,-1.],[6,8,4,4,2.]],tilted:0,threshold:-9.4539504498243332e-003,right_val:0.1142157018184662,left_val:-0.2890872955322266},{features:[[11,6,3,12,-1.],[12,6,1,12,3.]],tilted:0,threshold:-0.0210807099938393,right_val:-0.0255910307168961,left_val:0.3757005035877228},{features:[[8,6,3,12,-1.],[9,6,1,12,3.]],tilted:0,threshold:-4.0629571303725243e-003,right_val:-0.1084538027644157,left_val:0.2714667022228241},{features:[[7,1,14,2,-1.],[7,1,7,2,2.]],tilted:0,threshold:-0.1282662004232407,right_val:-1.0962430387735367e-003,left_val:1.}],threshold:-0.9428492784500122},{simpleClassifiers:[{features:[[4,8,14,10,-1.],[4,13,14,5,2.]],tilted:0,threshold:-0.1266229003667831,right_val:-0.1481045931577683,left_val:0.6226822137832642},{features:[[11,14,9,4,-1.],[14,14,3,4,3.]],tilted:0,threshold:-7.0846290327608585e-003,right_val:-0.1772895008325577,left_val:0.2013377994298935},{features:[[1,7,17,8,-1.],[1,11,17,4,2.]],tilted:0,threshold:0.1145920008420944,right_val:0.5739554166793823,left_val:-0.0889758467674255},{features:[[10,12,7,6,-1.],[10,15,7,3,2.]],tilted:0,threshold:3.3472150098532438e-003,right_val:-0.2822217941284180,left_val:0.0757082030177116},{features:[[10,1,8,9,-1.],[10,1,4,9,2.]],tilted:1,threshold:0.0519242286682129,right_val:0.2568109035491943,left_val:-0.1394848972558975},{features:[[11,2,4,11,-1.],[11,2,2,11,2.]],tilted:1,threshold:-0.0413439087569714,right_val:-0.0436536706984043,left_val:0.2241418063640595},{features:[[6,9,4,9,-1.],[8,9,2,9,2.]],tilted:0,threshold:-0.0320564694702625,right_val:0.0518911592662334,left_val:-0.5940976142883301},{features:[[8,3,12,4,-1.],[14,3,6,2,2.],[8,5,6,2,2.]],tilted:0,threshold:-4.0590870194137096e-003,right_val:-0.1552838981151581,left_val:0.1640208065509796},{features:[[5,14,7,4,-1.],[5,16,7,2,2.]],tilted:0,threshold:-9.1876718215644360e-005,right_val:-0.2826159894466400,left_val:0.1058787032961845},{features:[[13,0,4,13,-1.],[13,0,2,13,2.]],tilted:1,threshold:0.0283582191914320,right_val:-0.0670941472053528,left_val:0.0573840290307999},{features:[[9,0,13,4,-1.],[9,0,13,2,2.]],tilted:1,threshold:-0.0746625214815140,right_val:-0.0487856417894363,left_val:0.5691670775413513},{features:[[12,9,4,9,-1.],[12,12,4,3,3.]],tilted:0,threshold:-3.6556490231305361e-003,right_val:-0.1220214962959290,left_val:0.2236949056386948},{features:[[7,4,12,2,-1.],[7,4,12,1,2.]],tilted:1,threshold:3.1778779812157154e-003,right_val:-0.2768172919750214,left_val:0.1224031969904900},{features:[[12,5,10,6,-1.],[17,5,5,3,2.],[12,8,5,3,2.]],tilted:0,threshold:0.0380443409085274,right_val:-0.5373290181159973,left_val:0.0232164002954960},{features:[[1,0,17,3,-1.],[1,1,17,1,3.]],tilted:0,threshold:8.7831392884254456e-003,right_val:0.3285123109817505,left_val:-0.0743375569581985},{features:[[15,4,6,8,-1.],[18,4,3,4,2.],[15,8,3,4,2.]],tilted:0,threshold:-5.9818099252879620e-003,right_val:0.0669768527150154,left_val:-0.1950477957725525},{features:[[3,2,4,14,-1.],[3,2,2,7,2.],[5,9,2,7,2.]],tilted:0,threshold:-1.6369449440389872e-003,right_val:-0.1802414953708649,left_val:0.1467480063438416},{features:[[14,8,6,4,-1.],[14,8,6,2,2.]],tilted:1,threshold:-0.0991931334137917,right_val:-0.0296527203172445,left_val:0.6836351752281189},{features:[[8,8,4,6,-1.],[8,8,2,6,2.]],tilted:1,threshold:-0.0103520099073648,right_val:-0.0811415389180183,left_val:0.3422530889511108},{features:[[12,1,4,16,-1.],[14,1,2,8,2.],[12,9,2,8,2.]],tilted:0,threshold:0.0256379097700119,right_val:-0.1669799983501434,left_val:0.0514169000089169},{features:[[7,0,6,8,-1.],[7,0,3,4,2.],[10,4,3,4,2.]],tilted:0,threshold:-1.2416959507390857e-003,right_val:-0.2134622037410736,left_val:0.1248890012502670},{features:[[8,12,6,5,-1.],[8,12,3,5,2.]],tilted:0,threshold:1.5018839621916413e-003,right_val:-0.2638502120971680,left_val:0.0979343876242638},{features:[[7,5,6,12,-1.],[7,5,3,6,2.],[10,11,3,6,2.]],tilted:0,threshold:-0.0327036790549755,right_val:-0.0458754003047943,left_val:0.5750488042831421},{features:[[15,5,6,6,-1.],[15,5,3,6,2.]],tilted:1,threshold:0.0212971698492765,right_val:-0.2248021960258484,left_val:0.0610693804919720},{features:[[6,10,3,8,-1.],[6,14,3,4,2.]],tilted:0,threshold:-8.8358018547296524e-004,right_val:-0.2756459116935730,left_val:0.0956257879734039},{features:[[4,0,14,3,-1.],[4,1,14,1,3.]],tilted:0,threshold:-3.6556860432028770e-003,right_val:-0.1035951972007752,left_val:0.2410708963871002},{features:[[0,9,8,3,-1.],[4,9,4,3,2.]],tilted:0,threshold:0.0343004614114761,right_val:-0.6244534850120544,left_val:0.0390627011656761},{features:[[9,3,4,6,-1.],[9,6,4,3,2.]],tilted:0,threshold:0.0114923501387239,right_val:0.3825817108154297,left_val:-0.0692460536956787},{features:[[3,0,10,10,-1.],[3,0,5,5,2.],[8,5,5,5,2.]],tilted:0,threshold:-3.1294790096580982e-003,right_val:-0.2312251031398773,left_val:0.1127336993813515},{features:[[5,13,12,4,-1.],[5,13,6,4,2.]],tilted:0,threshold:-4.0945871733129025e-003,right_val:0.1311265975236893,left_val:-0.1719598025083542},{features:[[6,12,10,3,-1.],[11,12,5,3,2.]],tilted:0,threshold:-3.0921408906579018e-003,right_val:0.0966591611504555,left_val:-0.2546038925647736},{features:[[12,15,10,3,-1.],[12,15,5,3,2.]],tilted:0,threshold:-0.0416721291840076,right_val:-0.0630946233868599,left_val:0.2732776999473572},{features:[[0,15,10,3,-1.],[5,15,5,3,2.]],tilted:0,threshold:0.0113844601437449,right_val:0.4116039872169495,left_val:-0.0718725174665451},{features:[[3,0,17,14,-1.],[3,7,17,7,2.]],tilted:0,threshold:-0.0239341501146555,right_val:-0.1795483976602554,left_val:0.1319234073162079},{features:[[9,0,4,16,-1.],[9,0,2,8,2.],[11,8,2,8,2.]],tilted:0,threshold:-0.0315541699528694,right_val:0.0417828895151615,left_val:-0.5879213213920593},{features:[[11,4,6,8,-1.],[11,8,6,4,2.]],tilted:0,threshold:-0.0240338593721390,right_val:0.0277002602815628,left_val:-0.1553476005792618},{features:[[0,9,12,3,-1.],[0,10,12,1,3.]],tilted:0,threshold:0.0315894708037376,right_val:0.6095172166824341,left_val:-0.0391502790153027},{features:[[1,5,20,8,-1.],[11,5,10,4,2.],[1,9,10,4,2.]],tilted:0,threshold:-0.0242148600518703,right_val:0.0911332964897156,left_val:-0.2458761930465698},{features:[[1,8,13,3,-1.],[1,9,13,1,3.]],tilted:0,threshold:1.9322870066389441e-003,right_val:0.1881929039955139,left_val:-0.1164783984422684},{features:[[8,8,14,3,-1.],[8,9,14,1,3.]],tilted:0,threshold:-3.6017759703099728e-003,right_val:-0.0489180907607079,left_val:0.0976005122065544},{features:[[4,16,14,2,-1.],[4,17,14,1,2.]],tilted:0,threshold:3.1516118906438351e-003,right_val:-0.3157765865325928,left_val:0.0658088698983192},{features:[[11,1,3,6,-1.],[12,2,1,6,3.]],tilted:1,threshold:-0.0636770725250244,right_val:-9.9097320344299078e-004,left_val:-0.8641548156738281},{features:[[11,1,6,3,-1.],[10,2,6,1,3.]],tilted:1,threshold:-3.9085028693079948e-003,right_val:-0.1056023016571999,left_val:0.2082621008157730},{features:[[13,1,6,10,-1.],[16,1,3,5,2.],[13,6,3,5,2.]],tilted:0,threshold:-0.0268377196043730,right_val:0.0295453295111656,left_val:-0.1837512999773026},{features:[[11,0,10,3,-1.],[10,1,10,1,3.]],tilted:1,threshold:3.1312298960983753e-003,right_val:0.1688859015703201,left_val:-0.1262668967247009},{features:[[12,1,3,12,-1.],[13,2,1,12,3.]],tilted:1,threshold:-0.0734918713569641,right_val:5.6774187833070755e-003,left_val:-1.},{features:[[10,1,12,3,-1.],[9,2,12,1,3.]],tilted:1,threshold:0.0180348195135593,right_val:0.3343813121318817,left_val:-0.0686174109578133},{features:[[13,1,6,10,-1.],[16,1,3,5,2.],[13,6,3,5,2.]],tilted:0,threshold:0.0686559975147247,right_val:-0.8066462874412537,left_val:4.6462309546768665e-003},{features:[[3,1,6,10,-1.],[3,1,3,5,2.],[6,6,3,5,2.]],tilted:0,threshold:-4.6970890834927559e-003,right_val:0.1158004030585289,left_val:-0.2012176960706711},{features:[[14,7,6,10,-1.],[17,7,3,5,2.],[14,12,3,5,2.]],tilted:0,threshold:0.0467838905751705,right_val:0.4162563979625702,left_val:-0.0358026996254921},{features:[[3,2,6,8,-1.],[3,2,3,4,2.],[6,6,3,4,2.]],tilted:0,threshold:4.5946058817207813e-003,right_val:-0.2689448893070221,left_val:0.0884575769305229},{features:[[11,14,9,4,-1.],[14,14,3,4,3.]],tilted:0,threshold:-1.3852829579263926e-003,right_val:-0.1488042026758194,left_val:0.0813912227749825},{features:[[1,8,15,8,-1.],[1,12,15,4,2.]],tilted:0,threshold:0.0217887591570616,right_val:0.2126124948263168,left_val:-0.0916404575109482},{features:[[9,12,8,4,-1.],[9,14,8,2,2.]],tilted:0,threshold:-1.3380090240389109e-004,right_val:-0.1471737027168274,left_val:0.0964247435331345},{features:[[6,5,7,6,-1.],[6,7,7,2,3.]],tilted:0,threshold:-0.0479904115200043,right_val:0.0387607105076313,left_val:-0.6198713183403015},{features:[[9,5,6,5,-1.],[9,5,3,5,2.]],tilted:0,threshold:0.0200260095298290,right_val:0.1939342021942139,left_val:-0.0359724201261997},{features:[[0,12,8,6,-1.],[2,12,4,6,2.]],tilted:0,threshold:1.0723130544647574e-003,right_val:0.1206495016813278,left_val:-0.1944749951362610},{features:[[14,8,6,4,-1.],[14,8,3,4,2.]],tilted:1,threshold:0.0226650908589363,right_val:-0.2364079952239990,left_val:0.0487194396555424},{features:[[8,8,4,6,-1.],[8,8,4,3,2.]],tilted:1,threshold:-0.0110421096906066,right_val:0.1007549017667770,left_val:-0.2610734105110169},{features:[[9,4,6,8,-1.],[11,4,2,8,3.]],tilted:0,threshold:-0.0128110498189926,right_val:-0.0885529592633247,left_val:0.1519962996244431},{features:[[7,4,6,8,-1.],[9,4,2,8,3.]],tilted:0,threshold:-0.0366286486387253,right_val:-0.0773045495152473,left_val:0.3885886073112488}],threshold:-0.9562031030654907},{simpleClassifiers:[{features:[[0,15,10,3,-1.],[5,15,5,3,2.]],tilted:0,threshold:-0.0546066388487816,right_val:-0.1416888982057571,left_val:0.5580134987831116},{features:[[11,5,3,9,-1.],[12,6,1,9,3.]],tilted:1,threshold:0.0335337407886982,right_val:0.4438177049160004,left_val:-0.0273862797766924},{features:[[11,5,9,3,-1.],[10,6,9,1,3.]],tilted:1,threshold:-9.9635301157832146e-003,right_val:-0.1464754045009613,left_val:0.2519390881061554},{features:[[12,6,8,4,-1.],[12,6,8,2,2.]],tilted:1,threshold:1.8188880058005452e-003,right_val:0.1152326017618179,left_val:-0.1126412004232407},{features:[[10,6,4,8,-1.],[10,6,2,8,2.]],tilted:1,threshold:-0.0487938299775124,right_val:-0.0786650180816650,left_val:0.5131710767745972},{features:[[13,0,5,12,-1.],[13,0,5,6,2.]],tilted:1,threshold:-0.0133577696979046,right_val:0.1186259984970093,left_val:-0.1419797986745834},{features:[[1,3,12,4,-1.],[4,3,6,4,2.]],tilted:0,threshold:1.1562240542843938e-003,right_val:0.1569304019212723,left_val:-0.2094922065734863},{features:[[15,7,6,5,-1.],[15,7,3,5,2.]],tilted:0,threshold:-6.2384512275457382e-003,right_val:0.1130355000495911,left_val:-0.1433645039796829},{features:[[1,7,12,3,-1.],[1,8,12,1,3.]],tilted:0,threshold:4.4234818778932095e-003,right_val:0.2458948940038681,left_val:-0.1035858020186424},{features:[[15,7,6,5,-1.],[15,7,3,5,2.]],tilted:0,threshold:0.0529644489288330,right_val:-0.6255180835723877,left_val:0.0125615503638983},{features:[[1,7,6,5,-1.],[4,7,3,5,2.]],tilted:0,threshold:5.5844681337475777e-003,right_val:-0.2465379983186722,left_val:0.0839678868651390},{features:[[12,13,6,4,-1.],[12,15,6,2,2.]],tilted:0,threshold:-4.1809541289694607e-004,right_val:-0.1355881989002228,left_val:0.0695880725979805},{features:[[5,12,12,6,-1.],[5,12,6,3,2.],[11,15,6,3,2.]],tilted:0,threshold:-8.9637134224176407e-003,right_val:0.0698947235941887,left_val:-0.3044273853302002},{features:[[11,5,2,9,-1.],[11,5,1,9,2.]],tilted:1,threshold:0.0244790501892567,right_val:0.2030878961086273,left_val:-0.0316518284380436},{features:[[11,5,9,2,-1.],[11,5,9,1,2.]],tilted:1,threshold:-0.0258423294872046,right_val:-0.0639220625162125,left_val:0.5040106177330017},{features:[[10,12,9,4,-1.],[13,12,3,4,3.]],tilted:0,threshold:-2.0785620436072350e-003,right_val:-0.1183955967426300,left_val:0.1098022013902664},{features:[[8,6,6,6,-1.],[8,6,6,3,2.]],tilted:1,threshold:0.0680303424596787,right_val:-0.5185551047325134,left_val:0.0422907397150993},{features:[[10,14,6,4,-1.],[10,14,3,4,2.]],tilted:0,threshold:-7.0639760233461857e-003,right_val:0.0249556098133326,left_val:-0.2003110051155090},{features:[[0,2,14,3,-1.],[0,3,14,1,3.]],tilted:0,threshold:-3.4848200157284737e-003,right_val:-0.0969895571470261,left_val:0.2313532978296280},{features:[[8,2,12,3,-1.],[8,3,12,1,3.]],tilted:0,threshold:0.0131471604108810,right_val:0.2584278881549835,left_val:-0.0374509505927563},{features:[[8,7,5,6,-1.],[8,7,5,3,2.]],tilted:1,threshold:-0.0142716597765684,right_val:0.0796723365783691,left_val:-0.3011017143726349},{features:[[12,6,8,3,-1.],[12,6,4,3,2.]],tilted:1,threshold:0.0126534802839160,right_val:-0.1498810946941376,left_val:0.0490391403436661},{features:[[4,10,4,6,-1.],[6,10,2,6,2.]],tilted:0,threshold:-4.4893440790474415e-003,right_val:-0.1535564959049225,left_val:0.1720885932445526},{features:[[1,11,20,4,-1.],[6,11,10,4,2.]],tilted:0,threshold:0.0323654003441334,right_val:0.3577916026115418,left_val:-0.0904931128025055},{features:[[6,10,8,7,-1.],[8,10,4,7,2.]],tilted:0,threshold:4.6125808730721474e-003,right_val:-0.2651948928833008,left_val:0.1144519001245499},{features:[[11,3,3,9,-1.],[12,4,1,9,3.]],tilted:1,threshold:0.0286459308117628,right_val:0.3002552092075348,left_val:-0.0359885394573212},{features:[[0,8,22,4,-1.],[11,8,11,4,2.]],tilted:0,threshold:-0.0235719792544842,right_val:0.0919671207666397,left_val:-0.2487282007932663},{features:[[3,10,16,3,-1.],[3,10,8,3,2.]],tilted:0,threshold:-0.0107397995889187,right_val:0.0964774116873741,left_val:-0.2136776000261307},{features:[[11,3,9,3,-1.],[10,4,9,1,3.]],tilted:1,threshold:0.0237286593765020,right_val:0.4382875859737396,left_val:-0.0709161981940269},{features:[[5,3,12,9,-1.],[9,6,4,3,9.]],tilted:0,threshold:-0.3280070126056671,right_val:-0.0317567884922028,left_val:0.5884003043174744},{features:[[7,12,4,6,-1.],[9,12,2,6,2.]],tilted:0,threshold:7.5008560997957829e-006,right_val:0.1202294006943703,left_val:-0.1828856021165848},{features:[[9,12,6,6,-1.],[9,12,3,6,2.]],tilted:0,threshold:0.0300714094191790,right_val:-0.4322428107261658,left_val:0.0278020203113556},{features:[[2,13,16,5,-1.],[10,13,8,5,2.]],tilted:0,threshold:-2.1936609409749508e-003,right_val:-0.1403862982988358,left_val:0.1359242051839829},{features:[[12,12,8,3,-1.],[12,12,4,3,2.]],tilted:0,threshold:0.0201743394136429,right_val:0.3157976865768433,left_val:-0.0616289190948009},{features:[[10,4,12,2,-1.],[10,4,6,2,2.]],tilted:1,threshold:9.7460206598043442e-003,right_val:-0.2259400933980942,left_val:0.0889580324292183},{features:[[11,3,8,4,-1.],[11,3,4,4,2.]],tilted:1,threshold:-0.0129583403468132,right_val:0.0865180864930153,left_val:-0.1220085024833679},{features:[[4,6,10,3,-1.],[9,6,5,3,2.]],tilted:0,threshold:0.0114454999566078,right_val:0.3027974963188171,left_val:-0.0641823336482048},{features:[[10,1,6,8,-1.],[13,1,3,4,2.],[10,5,3,4,2.]],tilted:0,threshold:-3.3802569378167391e-003,right_val:-0.1292237937450409,left_val:0.1117767021059990},{features:[[11,1,6,6,-1.],[11,1,6,3,2.]],tilted:1,threshold:0.0203662104904652,right_val:-0.2599115967750549,left_val:0.1010453999042511},{features:[[11,6,6,4,-1.],[11,8,6,2,2.]],tilted:0,threshold:0.0380586497485638,right_val:-0.7558063268661499,left_val:0.0131683498620987},{features:[[2,2,12,3,-1.],[2,3,12,1,3.]],tilted:0,threshold:2.3050000891089439e-003,right_val:0.1875766962766647,left_val:-0.1076664999127388},{features:[[11,3,8,4,-1.],[11,3,4,4,2.]],tilted:1,threshold:0.0518471188843250,right_val:0.1879583001136780,left_val:-0.0223205294460058},{features:[[1,0,8,6,-1.],[1,0,4,3,2.],[5,3,4,3,2.]],tilted:0,threshold:0.0113830296322703,right_val:-0.3596178889274597,left_val:0.0602261610329151},{features:[[8,3,14,3,-1.],[8,4,14,1,3.]],tilted:0,threshold:8.2553178071975708e-003,right_val:0.2349344044923782,left_val:-0.0851313918828964},{features:[[11,3,4,8,-1.],[11,3,4,4,2.]],tilted:1,threshold:-0.0269843395799398,right_val:0.0936567336320877,left_val:-0.2147939950227737},{features:[[6,0,12,10,-1.],[9,0,6,10,2.]],tilted:0,threshold:-0.0102899800986052,right_val:-0.0839509293437004,left_val:0.0582548901438713},{features:[[4,16,14,2,-1.],[4,17,14,1,2.]],tilted:0,threshold:-1.4419780200114474e-005,right_val:-0.1731729954481125,left_val:0.1039287000894547},{features:[[10,11,12,3,-1.],[10,12,12,1,3.]],tilted:0,threshold:0.0100651402026415,right_val:0.1761602014303207,left_val:-0.0413111187517643},{features:[[3,0,4,6,-1.],[5,0,2,6,2.]],tilted:0,threshold:-1.4870229642838240e-004,right_val:-0.1203005984425545,left_val:0.1565753966569901},{features:[[16,12,6,4,-1.],[16,12,3,4,2.]],tilted:0,threshold:-3.1059589236974716e-003,right_val:-0.0913724601268768,left_val:0.1167488023638725},{features:[[0,13,10,4,-1.],[5,13,5,4,2.]],tilted:0,threshold:0.0107080303132534,right_val:0.2791610062122345,left_val:-0.0776082277297974},{features:[[3,1,16,4,-1.],[11,1,8,2,2.],[3,3,8,2,2.]],tilted:0,threshold:-9.7792129963636398e-003,right_val:0.0715626403689384,left_val:-0.2906092107295990},{features:[[0,1,11,4,-1.],[0,3,11,2,2.]],tilted:0,threshold:0.0201219804584980,right_val:-0.4253950119018555,left_val:0.0439949594438076},{features:[[6,8,11,6,-1.],[6,11,11,3,2.]],tilted:0,threshold:-0.0632951632142067,right_val:-0.0525498092174530,left_val:0.3703423142433167},{features:[[8,5,5,10,-1.],[8,10,5,5,2.]],tilted:0,threshold:-0.0872895568609238,right_val:0.0319528691470623,left_val:-0.6429927945137024},{features:[[9,2,4,6,-1.],[9,5,4,3,2.]],tilted:0,threshold:0.0203985404223204,right_val:0.4626615941524506,left_val:-0.0459555983543396},{features:[[2,3,12,6,-1.],[2,3,6,3,2.],[8,6,6,3,2.]],tilted:0,threshold:-4.0313000790774822e-003,right_val:-0.1798083931207657,left_val:0.1384084969758987},{features:[[13,3,7,9,-1.],[13,6,7,3,3.]],tilted:0,threshold:-0.0157345198094845,right_val:0.0699830800294876,left_val:-0.1847718060016632},{features:[[2,3,7,9,-1.],[2,6,7,3,3.]],tilted:0,threshold:3.3332880120724440e-003,right_val:-0.1951379030942917,left_val:0.1127765029668808},{features:[[11,0,3,6,-1.],[12,1,1,6,3.]],tilted:1,threshold:0.0436891615390778,right_val:-0.5542343854904175,left_val:5.9510939754545689e-003},{features:[[3,3,13,3,-1.],[3,4,13,1,3.]],tilted:0,threshold:-2.0920610986649990e-003,right_val:-0.0971361100673676,left_val:0.1916346997022629},{features:[[8,3,14,3,-1.],[8,4,14,1,3.]],tilted:0,threshold:2.0574270747601986e-003,right_val:0.1408381015062332,left_val:-0.1019743010401726},{features:[[3,6,7,12,-1.],[3,9,7,6,2.]],tilted:0,threshold:8.8018123060464859e-003,right_val:-0.1563854962587357,left_val:0.1198780983686447},{features:[[12,13,6,4,-1.],[12,15,6,2,2.]],tilted:0,threshold:-0.0168825294822454,right_val:0.0194928701967001,left_val:-0.1843809932470322},{features:[[4,13,6,4,-1.],[4,15,6,2,2.]],tilted:0,threshold:-6.1647890834137797e-004,right_val:-0.2216400951147080,left_val:0.1066510975360870},{features:[[6,1,15,2,-1.],[6,2,15,1,2.]],tilted:0,threshold:1.0317339911125600e-004,right_val:0.1385865062475205,left_val:-0.1122889965772629},{features:[[4,3,3,12,-1.],[5,3,1,12,3.]],tilted:0,threshold:0.0153163298964500,right_val:0.4111982882022858,left_val:-0.0506394095718861},{features:[[14,4,2,12,-1.],[14,4,2,6,2.]],tilted:1,threshold:0.0106606902554631,right_val:-0.1645466983318329,left_val:0.0588208101689816},{features:[[11,0,6,3,-1.],[10,1,6,1,3.]],tilted:1,threshold:-0.0192968696355820,right_val:-0.0527611896395683,left_val:0.3926095962524414},{features:[[4,9,14,5,-1.],[4,9,7,5,2.]],tilted:0,threshold:0.0100181102752686,right_val:-0.1975626945495606,left_val:0.1006847023963928},{features:[[11,2,10,3,-1.],[10,3,10,1,3.]],tilted:1,threshold:-0.0272637903690338,right_val:-0.0553055517375469,left_val:0.3533208966255188},{features:[[9,12,7,6,-1.],[9,14,7,2,3.]],tilted:0,threshold:5.4494310170412064e-003,right_val:-0.1838447004556656,left_val:0.0672537684440613}],threshold:-0.8770840764045715},{simpleClassifiers:[{features:[[1,8,8,10,-1.],[1,8,4,5,2.],[5,13,4,5,2.]],tilted:0,threshold:-0.0574348606169224,right_val:-0.1227457001805306,left_val:0.5058255195617676},{features:[[5,5,12,5,-1.],[9,5,4,5,3.]],tilted:0,threshold:-0.1275065988302231,right_val:-0.0437109284102917,left_val:0.5760596990585327},{features:[[8,8,4,6,-1.],[8,8,2,6,2.]],tilted:1,threshold:-0.0636756420135498,right_val:-0.0499683208763599,left_val:0.5712252259254456},{features:[[7,6,8,10,-1.],[7,11,8,5,2.]],tilted:0,threshold:-0.0119284801185131,right_val:-0.1848026961088181,left_val:0.2164193987846375},{features:[[6,14,6,4,-1.],[9,14,3,4,2.]],tilted:0,threshold:1.3247699826024473e-004,right_val:0.1064827963709831,left_val:-0.2268567979335785},{features:[[5,15,12,2,-1.],[5,16,12,1,2.]],tilted:0,threshold:6.4140267204493284e-004,right_val:-0.2689200937747955,left_val:0.0947516784071922},{features:[[6,4,10,6,-1.],[6,6,10,2,3.]],tilted:0,threshold:-2.9463530518114567e-003,right_val:-0.1709107011556625,left_val:0.1391091048717499},{features:[[9,12,8,6,-1.],[9,14,8,2,3.]],tilted:0,threshold:5.3384741768240929e-003,right_val:-0.0954419896006584,left_val:0.0839692428708076},{features:[[1,11,20,5,-1.],[6,11,10,5,2.]],tilted:0,threshold:0.0587031506001949,right_val:0.3362944126129150,left_val:-0.0696475207805634},{features:[[10,8,8,4,-1.],[10,8,4,4,2.]],tilted:0,threshold:-2.5406300555914640e-003,right_val:-0.1575814038515091,left_val:0.0961760133504868},{features:[[2,4,18,6,-1.],[2,6,18,2,3.]],tilted:0,threshold:-0.0318995192646980,right_val:0.0703595131635666,left_val:-0.2795648872852325},{features:[[8,4,12,11,-1.],[8,4,6,11,2.]],tilted:0,threshold:-0.3202270865440369,right_val:7.5922380201518536e-003,left_val:-0.9080504775047302},{features:[[11,5,11,2,-1.],[11,5,11,1,2.]],tilted:1,threshold:0.0357962511479855,right_val:0.4210157990455627,left_val:-0.0500707700848579},{features:[[3,6,18,9,-1.],[9,9,6,3,9.]],tilted:0,threshold:-0.1907916069030762,right_val:0.0651847869157791,left_val:-0.2206103056669235},{features:[[3,2,10,9,-1.],[8,2,5,9,2.]],tilted:0,threshold:-0.0121818296611309,right_val:-0.1666775047779083,left_val:0.1347943991422653},{features:[[14,5,6,6,-1.],[16,5,2,6,3.]],tilted:0,threshold:-0.0321657992899418,right_val:0.0193445608019829,left_val:-0.2510541081428528},{features:[[5,5,12,6,-1.],[8,5,6,6,2.]],tilted:0,threshold:0.0362996309995651,right_val:0.4000773131847382,left_val:-0.0594907812774181},{features:[[11,3,10,4,-1.],[11,3,5,4,2.]],tilted:1,threshold:0.0202245805412531,right_val:-0.1341823935508728,left_val:0.0564897991716862},{features:[[6,3,8,6,-1.],[6,3,4,3,2.],[10,6,4,3,2.]],tilted:0,threshold:-0.0253931302577257,right_val:-0.0660021826624870,left_val:0.3650783896446228},{features:[[16,0,3,15,-1.],[16,5,3,5,3.]],tilted:0,threshold:-0.0120223695412278,right_val:0.0739976391196251,left_val:-0.1765505969524384},{features:[[3,0,3,15,-1.],[3,5,3,5,3.]],tilted:0,threshold:0.0479651391506195,right_val:-0.4458498060703278,left_val:0.0446685589849949},{features:[[5,2,12,16,-1.],[8,2,6,16,2.]],tilted:0,threshold:-0.2056401968002319,right_val:0.0199552308768034,left_val:-0.7325450181961060},{features:[[6,8,4,6,-1.],[8,8,2,6,2.]],tilted:0,threshold:-1.6601709648966789e-003,right_val:-0.1548850983381271,left_val:0.1163327023386955},{features:[[5,9,13,9,-1.],[5,12,13,3,3.]],tilted:0,threshold:0.0868996232748032,right_val:0.2695240080356598,left_val:-0.0541075505316257},{features:[[11,7,8,3,-1.],[11,7,4,3,2.]],tilted:1,threshold:-1.1374129680916667e-003,right_val:0.1244433000683785,left_val:-0.1431442946195602},{features:[[7,0,9,4,-1.],[10,0,3,4,3.]],tilted:0,threshold:0.0309763401746750,right_val:-0.3260793089866638,left_val:0.0298648606985807},{features:[[7,6,6,5,-1.],[10,6,3,5,2.]],tilted:0,threshold:0.0269780103117228,right_val:0.3612884879112244,left_val:-0.0450982488691807},{features:[[2,7,18,6,-1.],[8,9,6,2,9.]],tilted:0,threshold:0.1942182034254074,right_val:-0.6898170113563538,left_val:0.0322551913559437},{features:[[11,4,10,3,-1.],[10,5,10,1,3.]],tilted:1,threshold:-0.0204433593899012,right_val:-0.0644832178950310,left_val:0.2930010855197907},{features:[[13,14,8,4,-1.],[13,16,8,2,2.]],tilted:0,threshold:-0.0404204502701759,right_val:0.0122819803655148,left_val:-0.7682335972785950},{features:[[1,14,8,4,-1.],[1,16,8,2,2.]],tilted:0,threshold:-0.0126414299011230,right_val:0.0619011186063290,left_val:-0.2757379114627838},{features:[[11,4,3,10,-1.],[12,5,1,10,3.]],tilted:1,threshold:-0.0396702997386456,right_val:-0.0203649997711182,left_val:0.3282839059829712},{features:[[11,4,10,3,-1.],[10,5,10,1,3.]],tilted:1,threshold:0.0202467292547226,right_val:0.3306053876876831,left_val:-0.0583936013281345},{features:[[2,12,18,6,-1.],[11,12,9,3,2.],[2,15,9,3,2.]],tilted:0,threshold:8.9611168950796127e-003,right_val:-0.2234300971031189,left_val:0.0900963172316551},{features:[[5,2,8,6,-1.],[5,2,4,3,2.],[9,5,4,3,2.]],tilted:0,threshold:-8.3055719733238220e-003,right_val:-0.1260726004838944,left_val:0.1417534947395325},{features:[[8,14,6,4,-1.],[8,16,6,2,2.]],tilted:0,threshold:-2.8248139642528258e-005,right_val:-0.2181037068367004,left_val:0.0945169627666473},{features:[[1,10,6,8,-1.],[1,10,3,4,2.],[4,14,3,4,2.]],tilted:0,threshold:-5.1939398981630802e-003,right_val:-0.1334158033132553,left_val:0.1330431997776032},{features:[[7,2,15,9,-1.],[12,5,5,3,9.]],tilted:0,threshold:0.1177311018109322,right_val:-0.2402082979679108,left_val:0.0295861996710300},{features:[[0,2,15,9,-1.],[5,5,5,3,9.]],tilted:0,threshold:0.0678967013955116,right_val:-0.2345446050167084,left_val:0.0809137076139450},{features:[[10,5,6,7,-1.],[12,5,2,7,3.]],tilted:0,threshold:-0.0266836993396282,right_val:-0.0641520470380783,left_val:0.3059098124504089},{features:[[5,14,12,4,-1.],[5,14,6,2,2.],[11,16,6,2,2.]],tilted:0,threshold:3.5058211069554090e-003,right_val:-0.2277368009090424,left_val:0.0893419682979584},{features:[[10,1,12,3,-1.],[10,2,12,1,3.]],tilted:0,threshold:-6.5844372147694230e-004,right_val:-0.0913524404168129,left_val:0.1245813965797424},{features:[[8,1,3,12,-1.],[9,1,1,12,3.]],tilted:0,threshold:7.2530400939285755e-003,right_val:0.2548288106918335,left_val:-0.0692851766943932},{features:[[14,2,6,7,-1.],[14,2,3,7,2.]],tilted:0,threshold:-0.0280561298131943,right_val:0.0335395783185959,left_val:-0.2086703926324844},{features:[[1,0,12,9,-1.],[5,3,4,3,9.]],tilted:0,threshold:-0.0512051805853844,right_val:0.0644394084811211,left_val:-0.2410742938518524},{features:[[8,3,7,6,-1.],[8,6,7,3,2.]],tilted:0,threshold:0.0292346496134996,right_val:0.3648504912853241,left_val:-0.0508038401603699},{features:[[1,12,20,3,-1.],[6,12,10,3,2.]],tilted:0,threshold:-0.1021952033042908,right_val:-0.0429021194577217,left_val:0.4012348055839539},{features:[[5,2,12,16,-1.],[5,6,12,8,2.]],tilted:0,threshold:0.0151049699634314,right_val:-0.1847243010997772,left_val:0.1048149019479752},{features:[[4,3,7,6,-1.],[4,6,7,3,2.]],tilted:0,threshold:-0.0125706503167748,right_val:0.0930131971836090,left_val:-0.2054093927145004},{features:[[9,5,6,6,-1.],[11,5,2,6,3.]],tilted:0,threshold:0.0122530702501535,right_val:0.2392731010913849,left_val:-0.0592851005494595},{features:[[7,0,8,2,-1.],[7,0,8,1,2.]],tilted:1,threshold:-0.0261669903993607,right_val:0.0249067097902298,left_val:-0.6996678709983826},{features:[[5,14,12,2,-1.],[5,15,12,1,2.]],tilted:0,threshold:7.0817661471664906e-003,right_val:-0.5514479279518127,left_val:0.0241731200367212},{features:[[3,11,16,6,-1.],[3,13,16,2,3.]],tilted:0,threshold:0.0214268509298563,right_val:-0.2599790096282959,left_val:0.0641688406467438},{features:[[11,5,3,8,-1.],[11,5,3,4,2.]],tilted:1,threshold:0.0181897096335888,right_val:-0.1802058070898056,left_val:0.0358382500708103},{features:[[2,15,12,3,-1.],[8,15,6,3,2.]],tilted:0,threshold:0.0174157992005348,right_val:0.3333852887153626,left_val:-0.0838620364665985},{features:[[4,13,15,3,-1.],[9,13,5,3,3.]],tilted:0,threshold:-1.4878029469400644e-003,right_val:-0.1276932060718536,left_val:0.1207885965704918},{features:[[2,3,12,4,-1.],[2,3,6,2,2.],[8,5,6,2,2.]],tilted:0,threshold:7.5296638533473015e-003,right_val:0.3218109011650085,left_val:-0.0700147077441216},{features:[[17,5,4,7,-1.],[17,5,2,7,2.]],tilted:1,threshold:-0.0614990182220936,right_val:-0.0100737102329731,left_val:0.4646979868412018},{features:[[5,4,7,4,-1.],[5,4,7,2,2.]],tilted:1,threshold:-1.9133290334139019e-004,right_val:0.1383011043071747,left_val:-0.1409429013729096},{features:[[2,2,18,3,-1.],[8,2,6,3,3.]],tilted:0,threshold:-0.0244222898036242,right_val:0.0676841735839844,left_val:-0.2529231011867523},{features:[[2,2,18,9,-1.],[8,5,6,3,9.]],tilted:0,threshold:-0.2613632082939148,right_val:-0.0584625490009785,left_val:0.3400354087352753},{features:[[15,6,6,4,-1.],[15,6,3,4,2.]],tilted:0,threshold:-0.0760467797517776,right_val:5.2708541043102741e-003,left_val:-0.7851415872573853},{features:[[0,1,12,3,-1.],[0,2,12,1,3.]],tilted:0,threshold:-3.0279329512268305e-003,right_val:-0.0906919613480568,left_val:0.1852705925703049},{features:[[16,2,6,4,-1.],[16,2,6,2,2.]],tilted:1,threshold:-8.0219199880957603e-003,right_val:0.0305948890745640,left_val:-0.1254058033227921},{features:[[0,9,14,6,-1.],[7,9,7,6,2.]],tilted:0,threshold:-0.2070596069097519,right_val:0.0212011300027370,left_val:-0.7541192173957825},{features:[[13,5,8,4,-1.],[13,5,4,4,2.]],tilted:1,threshold:-0.0953228175640106,right_val:0.0131387095898390,left_val:-0.2962307035923004},{features:[[9,5,4,8,-1.],[9,5,4,4,2.]],tilted:1,threshold:9.5921624451875687e-003,right_val:-0.2174658030271530,left_val:0.0843243226408958},{features:[[12,4,3,14,-1.],[12,11,3,7,2.]],tilted:0,threshold:-0.0130894696339965,right_val:-0.0657541304826736,left_val:0.0936075001955032},{features:[[1,13,20,5,-1.],[6,13,10,5,2.]],tilted:0,threshold:0.0117328800261021,right_val:0.2329193949699402,left_val:-0.0800390467047691},{features:[[12,4,3,14,-1.],[12,11,3,7,2.]],tilted:0,threshold:0.1523904949426651,right_val:-0.6519606709480286,left_val:9.9299130961298943e-003},{features:[[7,4,3,14,-1.],[7,11,3,7,2.]],tilted:0,threshold:-0.0645915120840073,right_val:-0.0600588284432888,left_val:0.2837221920490265},{features:[[16,2,6,4,-1.],[16,2,6,2,2.]],tilted:1,threshold:-0.0554930306971073,right_val:-0.0103364195674658,left_val:0.2665910124778748},{features:[[6,2,4,6,-1.],[6,2,2,6,2.]],tilted:1,threshold:-0.0502874106168747,right_val:0.0278498791158199,left_val:-0.6950147151947022},{features:[[7,4,15,14,-1.],[7,11,15,7,2.]],tilted:0,threshold:-0.4779424965381622,right_val:5.9050112031400204e-003,left_val:-0.9287195205688477},{features:[[1,16,16,2,-1.],[1,17,16,1,2.]],tilted:0,threshold:-0.0143985198810697,right_val:0.0364099815487862,left_val:-0.4554106891155243}],threshold:-0.8526716828346252},{simpleClassifiers:[{features:[[0,6,12,4,-1.],[3,6,6,4,2.]],tilted:0,threshold:1.9511899445205927e-003,right_val:0.1411163955926895,left_val:-0.2493699043989182},{features:[[6,9,10,9,-1.],[6,12,10,3,3.]],tilted:0,threshold:-0.0466346703469753,right_val:-0.0784017369151115,left_val:0.3784058988094330},{features:[[0,6,6,5,-1.],[3,6,3,5,2.]],tilted:0,threshold:0.0161937493830919,right_val:-0.4199146926403046,left_val:0.0752133131027222},{features:[[11,14,7,4,-1.],[11,16,7,2,2.]],tilted:0,threshold:-1.2459639401640743e-004,right_val:-0.1793542057275772,left_val:0.0685761868953705},{features:[[7,8,8,2,-1.],[7,8,8,1,2.]],tilted:1,threshold:7.3257791809737682e-003,right_val:-0.2609927952289581,left_val:0.1032209992408752},{features:[[10,13,7,4,-1.],[10,15,7,2,2.]],tilted:0,threshold:-1.5020779756014235e-005,right_val:-0.1671888977289200,left_val:0.0731225982308388},{features:[[1,16,20,2,-1.],[11,16,10,2,2.]],tilted:0,threshold:-0.0345220081508160,right_val:0.0767271667718887,left_val:-0.3932698965072632},{features:[[5,12,14,4,-1.],[5,12,7,4,2.]],tilted:0,threshold:-0.0826795101165771,right_val:0.0155306002125144,left_val:-0.7467781901359558},{features:[[8,8,4,6,-1.],[8,8,2,6,2.]],tilted:1,threshold:0.0821624025702477,right_val:0.3791460096836090,left_val:-0.0692495033144951},{features:[[17,2,2,14,-1.],[17,2,2,7,2.]],tilted:1,threshold:0.0341878309845924,right_val:-0.1542989015579224,left_val:0.0426086597144604},{features:[[7,1,8,4,-1.],[11,1,4,4,2.]],tilted:0,threshold:-0.0178913697600365,right_val:0.0781183987855911,left_val:-0.3063957095146179},{features:[[5,7,12,3,-1.],[9,7,4,3,3.]],tilted:0,threshold:0.0331309996545315,right_val:0.3740524053573608,left_val:-0.0561838001012802},{features:[[2,14,6,4,-1.],[5,14,3,4,2.]],tilted:0,threshold:-5.7486710138618946e-003,right_val:-0.2052786052227020,left_val:0.1249035000801086},{features:[[10,9,12,4,-1.],[16,9,6,2,2.],[10,11,6,2,2.]],tilted:0,threshold:0.0335368290543556,right_val:0.2672440111637116,left_val:-0.0483442209661007},{features:[[6,14,9,4,-1.],[9,14,3,4,3.]],tilted:0,threshold:0.0247238297015429,right_val:-0.3373064994812012,left_val:0.0836789682507515},{features:[[11,9,2,6,-1.],[11,9,1,6,2.]],tilted:1,threshold:2.2355809342116117e-003,right_val:-0.1307191997766495,left_val:0.1037459000945091},{features:[[3,9,14,9,-1.],[3,12,14,3,3.]],tilted:0,threshold:-2.4322168901562691e-003,right_val:-0.1328445971012116,left_val:0.1564508974552155},{features:[[5,10,16,6,-1.],[5,12,16,2,3.]],tilted:0,threshold:0.0259991195052862,right_val:0.2161011993885040,left_val:-0.0803431272506714},{features:[[5,12,10,6,-1.],[5,12,5,3,2.],[10,15,5,3,2.]],tilted:0,threshold:3.6965688195778057e-005,right_val:0.1056312024593353,left_val:-0.1787101030349731},{features:[[4,13,18,5,-1.],[4,13,9,5,2.]],tilted:0,threshold:-0.1629150062799454,right_val:0.0223747305572033,left_val:-0.6914169788360596},{features:[[0,13,18,5,-1.],[9,13,9,5,2.]],tilted:0,threshold:0.1300814002752304,right_val:0.4637356996536255,left_val:-0.0427690409123898},{features:[[4,9,16,3,-1.],[4,10,16,1,3.]],tilted:0,threshold:0.0276585407555103,right_val:0.3838658034801483,left_val:-0.0371086001396179},{features:[[5,1,15,2,-1.],[5,1,15,1,2.]],tilted:1,threshold:-0.0100204199552536,right_val:0.0748586803674698,left_val:-0.2632805109024048},{features:[[13,5,2,9,-1.],[13,5,1,9,2.]],tilted:1,threshold:-0.0304599404335022,right_val:-0.0258583705872297,left_val:0.3230090141296387},{features:[[9,5,9,2,-1.],[9,5,9,1,2.]],tilted:1,threshold:1.3251040363684297e-003,right_val:-0.2108217030763626,left_val:0.1444766968488693},{features:[[1,11,20,5,-1.],[6,11,10,5,2.]],tilted:0,threshold:-0.0279310103505850,right_val:-0.1616230010986328,left_val:0.1437451988458633},{features:[[3,9,13,3,-1.],[3,10,13,1,3.]],tilted:0,threshold:-8.8642723858356476e-003,right_val:-0.0950950980186462,left_val:0.2300062030553818},{features:[[18,5,4,12,-1.],[20,5,2,6,2.],[18,11,2,6,2.]],tilted:0,threshold:-0.0122139696031809,right_val:0.0655220225453377,left_val:-0.2464639991521835},{features:[[4,12,5,6,-1.],[4,15,5,3,2.]],tilted:0,threshold:-0.0487375296652317,right_val:0.0254164095968008,left_val:-0.7912771105766296},{features:[[15,1,2,8,-1.],[15,1,1,8,2.]],tilted:1,threshold:0.0611852891743183,right_val:-0.9054586887359619,left_val:-1.2226430408190936e-004},{features:[[7,1,8,2,-1.],[7,1,8,1,2.]],tilted:1,threshold:0.0264536794275045,right_val:-0.6395434141159058,left_val:0.0265628006309271},{features:[[18,5,4,12,-1.],[20,5,2,6,2.],[18,11,2,6,2.]],tilted:0,threshold:8.8589917868375778e-003,right_val:-0.2160128057003021,left_val:0.0541458502411842},{features:[[10,4,10,2,-1.],[10,4,10,1,2.]],tilted:1,threshold:0.0348479412496090,right_val:0.4393540024757385,left_val:-0.0457493588328362},{features:[[2,4,20,4,-1.],[7,4,10,4,2.]],tilted:0,threshold:-0.1459821015596390,right_val:9.5249973237514496e-003,left_val:-0.5556176900863648},{features:[[1,9,8,3,-1.],[5,9,4,3,2.]],tilted:0,threshold:-0.0504565685987473,right_val:0.0202147103846073,left_val:-0.7528784871101379},{features:[[18,5,4,12,-1.],[20,5,2,6,2.],[18,11,2,6,2.]],tilted:0,threshold:-0.0854437798261642,right_val:-1.3681349810212851e-003,left_val:-1.},{features:[[0,5,4,12,-1.],[0,5,2,6,2.],[2,11,2,6,2.]],tilted:0,threshold:0.0132489800453186,right_val:-0.2541181147098541,left_val:0.0634007006883621},{features:[[6,0,14,18,-1.],[6,9,14,9,2.]],tilted:0,threshold:-0.6593561172485352,right_val:7.7378489077091217e-003,left_val:-1.},{features:[[4,4,12,3,-1.],[4,5,12,1,3.]],tilted:0,threshold:5.0879311747848988e-003,right_val:0.1887629032135010,left_val:-0.0832077413797379},{features:[[8,4,14,3,-1.],[8,5,14,1,3.]],tilted:0,threshold:-3.4071630798280239e-003,right_val:-0.0919603332877159,left_val:0.1457829028367996},{features:[[4,13,14,3,-1.],[4,14,14,1,3.]],tilted:0,threshold:-0.0216562692075968,right_val:0.0271297506988049,left_val:-0.6536489129066467},{features:[[8,2,6,14,-1.],[11,2,3,7,2.],[8,9,3,7,2.]],tilted:0,threshold:9.4357347115874290e-003,right_val:-0.2388547956943512,left_val:0.0643601119518280},{features:[[0,13,15,4,-1.],[0,14,15,2,2.]],tilted:0,threshold:-7.5177568942308426e-003,right_val:-0.0682218372821808,left_val:0.2451906055212021},{features:[[11,14,7,4,-1.],[11,16,7,2,2.]],tilted:0,threshold:0.0160676296800375,right_val:-0.3166871964931488,left_val:7.6069780625402927e-003},{features:[[11,7,7,3,-1.],[10,8,7,1,3.]],tilted:1,threshold:-1.8057749839499593e-003,right_val:-0.1214571967720985,left_val:0.1271037012338638},{features:[[10,6,6,6,-1.],[10,9,6,3,2.]],tilted:0,threshold:-0.0441549010574818,right_val:0.0234448593109846,left_val:-0.4857960939407349},{features:[[2,0,4,14,-1.],[2,0,2,7,2.],[4,7,2,7,2.]],tilted:0,threshold:7.5462698005139828e-003,right_val:-0.2331652045249939,left_val:0.0684307664632797},{features:[[2,6,18,5,-1.],[8,6,6,5,3.]],tilted:0,threshold:0.1086826026439667,right_val:0.3945221900939941,left_val:-0.0416639111936092},{features:[[2,0,18,18,-1.],[8,0,6,18,3.]],tilted:0,threshold:0.6124870181083679,right_val:-0.9849479198455811,left_val:0.0207021702080965},{features:[[13,1,4,8,-1.],[14,2,2,8,2.]],tilted:1,threshold:0.0498282909393311,right_val:-0.4018169939517975,left_val:2.7304550167173147e-003},{features:[[4,0,12,18,-1.],[4,0,6,9,2.],[10,9,6,9,2.]],tilted:0,threshold:-0.0727687180042267,right_val:-0.0491443388164043,left_val:0.3267647922039032},{features:[[12,14,6,4,-1.],[12,16,6,2,2.]],tilted:0,threshold:0.0243143104016781,right_val:0.5822330117225647,left_val:-7.8135710209608078e-003},{features:[[4,14,6,4,-1.],[4,16,6,2,2.]],tilted:0,threshold:-1.7177179688587785e-004,right_val:-0.2037622034549713,left_val:0.0816699117422104},{features:[[11,8,2,6,-1.],[11,8,1,6,2.]],tilted:1,threshold:-0.0400952696800232,right_val:-0.0171795394271612,left_val:0.5468152165412903},{features:[[1,10,20,6,-1.],[1,10,10,3,2.],[11,13,10,3,2.]],tilted:0,threshold:-0.0896345674991608,right_val:0.0212838891893625,left_val:-0.8161401152610779},{features:[[13,1,7,9,-1.],[10,4,7,3,3.]],tilted:1,threshold:0.1869214028120041,right_val:-0.6018530130386353,left_val:8.3980746567249298e-003},{features:[[5,3,4,6,-1.],[5,6,4,3,2.]],tilted:0,threshold:-0.0430383794009686,right_val:0.0149307297542691,left_val:-0.8789898753166199},{features:[[13,0,2,12,-1.],[13,6,2,6,2.]],tilted:0,threshold:-1.8602630007080734e-004,right_val:-0.0826044380664825,left_val:0.0401562415063381},{features:[[7,11,8,3,-1.],[11,11,4,3,2.]],tilted:0,threshold:-1.4392189914360642e-003,right_val:0.0912035405635834,left_val:-0.1710239946842194},{features:[[9,6,12,11,-1.],[12,6,6,11,2.]],tilted:0,threshold:0.0421606190502644,right_val:0.1517430990934372,left_val:-0.0358610190451145},{features:[[6,8,10,9,-1.],[11,8,5,9,2.]],tilted:0,threshold:7.5991409830749035e-003,right_val:-0.1614716053009033,left_val:0.1087452992796898},{features:[[11,14,6,4,-1.],[11,14,3,4,2.]],tilted:0,threshold:-5.7539329864084721e-003,right_val:0.0584571510553360,left_val:-0.2567706108093262},{features:[[3,6,12,4,-1.],[7,6,4,4,3.]],tilted:0,threshold:-0.0277367495000362,right_val:-0.0740715116262436,left_val:0.2232517004013062},{features:[[10,5,6,7,-1.],[12,5,2,7,3.]],tilted:0,threshold:-0.0256761107593775,right_val:-0.0538603812456131,left_val:0.1883108019828796},{features:[[8,0,6,4,-1.],[11,0,3,4,2.]],tilted:0,threshold:0.0158907305449247,right_val:-0.3847657144069672,left_val:0.0517095401883125},{features:[[10,6,6,12,-1.],[12,6,2,12,3.]],tilted:0,threshold:-0.0863742679357529,right_val:9.4922119751572609e-003,left_val:-0.5568069815635681},{features:[[6,6,6,12,-1.],[8,6,2,12,3.]],tilted:0,threshold:1.9480630289763212e-003,right_val:0.1477168053388596,left_val:-0.1080721989274025}],threshold:-0.7418665885925293},{simpleClassifiers:[{features:[[6,9,9,6,-1.],[6,12,9,3,2.]],tilted:0,threshold:-6.8531660363078117e-003,right_val:-0.2768914103507996,left_val:0.2893550992012024},{features:[[14,6,6,6,-1.],[14,6,6,3,2.]],tilted:1,threshold:-0.0692176371812820,right_val:-0.0497410893440247,left_val:0.3490979075431824},{features:[[1,13,20,5,-1.],[6,13,10,5,2.]],tilted:0,threshold:-0.1309297978878021,right_val:-0.0961560085415840,left_val:0.4279156029224396},{features:[[8,14,6,4,-1.],[8,16,6,2,2.]],tilted:0,threshold:-2.9759139579255134e-005,right_val:-0.2467838972806931,left_val:0.1167578026652336},{features:[[4,7,8,3,-1.],[4,7,4,3,2.]],tilted:1,threshold:-0.0471007898449898,right_val:-0.0590729191899300,left_val:0.3725911080837250},{features:[[16,0,2,15,-1.],[16,0,1,15,2.]],tilted:1,threshold:0.0441245101392269,right_val:-0.2552854120731354,left_val:0.0789040997624397},{features:[[9,3,12,2,-1.],[9,3,12,1,2.]],tilted:1,threshold:4.2540309950709343e-003,right_val:0.1285677999258041,left_val:-0.2361238002777100},{features:[[7,1,8,6,-1.],[9,1,4,6,2.]],tilted:0,threshold:-1.0833570268005133e-003,right_val:-0.1420363038778305,left_val:0.1434731036424637},{features:[[6,15,8,3,-1.],[10,15,4,3,2.]],tilted:0,threshold:5.9925230743829161e-005,right_val:0.0885029137134552,left_val:-0.1992727071046829},{features:[[8,3,6,6,-1.],[10,3,2,6,3.]],tilted:0,threshold:-0.0730214864015579,right_val:0.0320418588817120,left_val:-0.8066626191139221},{features:[[1,1,16,3,-1.],[1,2,16,1,3.]],tilted:0,threshold:7.9495050013065338e-003,right_val:0.2707126140594482,left_val:-0.0658784434199333},{features:[[9,1,12,3,-1.],[9,2,12,1,3.]],tilted:0,threshold:-3.3911041100509465e-004,right_val:-0.1335476040840149,left_val:0.1349073946475983},{features:[[0,0,22,6,-1.],[0,0,11,3,2.],[11,3,11,3,2.]],tilted:0,threshold:-0.0260101798921824,right_val:0.0779026597738266,left_val:-0.2807458043098450},{features:[[10,5,4,6,-1.],[10,5,2,6,2.]],tilted:0,threshold:-0.0311530902981758,right_val:-0.0269943401217461,left_val:0.2702265977859497},{features:[[10,0,8,5,-1.],[10,0,4,5,2.]],tilted:1,threshold:0.0109462495893240,right_val:0.1035069972276688,left_val:-0.1599372029304504},{features:[[12,4,4,10,-1.],[13,5,2,10,2.]],tilted:1,threshold:0.0731012076139450,right_val:0.5233982801437378,left_val:-4.1365791112184525e-003},{features:[[10,4,10,4,-1.],[9,5,10,2,2.]],tilted:1,threshold:0.0302071496844292,right_val:0.4284898936748505,left_val:-0.0492294207215309},{features:[[15,1,2,8,-1.],[15,1,1,8,2.]],tilted:1,threshold:0.0649852603673935,right_val:-1.0003379583358765,left_val:3.9118612185120583e-003},{features:[[7,1,8,2,-1.],[7,1,8,1,2.]],tilted:1,threshold:-0.0291192494332790,right_val:0.0239308103919029,left_val:-0.7702599167823792},{features:[[17,0,3,11,-1.],[18,1,1,11,3.]],tilted:1,threshold:0.0504583083093166,right_val:-0.5185477733612061,left_val:6.9283558987081051e-003},{features:[[9,8,4,6,-1.],[9,8,4,3,2.]],tilted:1,threshold:-0.0388901792466640,right_val:0.0302702896296978,left_val:-0.4817684888839722},{features:[[14,6,6,12,-1.],[17,6,3,6,2.],[14,12,3,6,2.]],tilted:0,threshold:0.0583193711936474,right_val:0.2839350104331970,left_val:-0.0221013892441988},{features:[[2,12,18,6,-1.],[8,14,6,2,9.]],tilted:0,threshold:-0.0108036901801825,right_val:-0.1384977996349335,left_val:0.1284206062555313},{features:[[14,7,3,10,-1.],[14,12,3,5,2.]],tilted:0,threshold:9.4525264576077461e-003,right_val:0.1775905042886734,left_val:-0.0571944192051888},{features:[[3,8,16,10,-1.],[3,8,8,5,2.],[11,13,8,5,2.]],tilted:0,threshold:0.0152291702106595,right_val:-0.2051838934421539,left_val:0.1050117015838623},{features:[[15,12,4,6,-1.],[15,15,4,3,2.]],tilted:0,threshold:-8.9435698464512825e-004,right_val:-0.1466601043939591,left_val:0.0686682537198067},{features:[[2,8,18,10,-1.],[2,8,9,5,2.],[11,13,9,5,2.]],tilted:0,threshold:-0.0183224994689226,right_val:0.0835383310914040,left_val:-0.2361371964216232},{features:[[10,1,12,3,-1.],[10,2,12,1,3.]],tilted:0,threshold:2.5474189314991236e-003,right_val:0.1721152067184448,left_val:-0.0847315266728401},{features:[[1,1,12,3,-1.],[1,2,12,1,3.]],tilted:0,threshold:-1.4951790217310190e-003,right_val:-0.1275333017110825,left_val:0.1864299029111862},{features:[[8,0,14,4,-1.],[15,0,7,2,2.],[8,2,7,2,2.]],tilted:0,threshold:0.0247961506247520,right_val:-0.4095472991466522,left_val:0.0329235605895519},{features:[[2,4,14,4,-1.],[2,5,14,2,2.]],tilted:0,threshold:-2.8976860921829939e-003,right_val:-0.1040467992424965,left_val:0.1448003947734833},{features:[[8,4,12,3,-1.],[8,5,12,1,3.]],tilted:0,threshold:7.0361169055104256e-003,right_val:0.2154435068368912,left_val:-0.0679165571928024},{features:[[1,0,8,8,-1.],[1,0,4,4,2.],[5,4,4,4,2.]],tilted:0,threshold:-0.0118703898042440,right_val:0.0744434073567390,left_val:-0.2553744912147522},{features:[[13,0,8,6,-1.],[17,0,4,3,2.],[13,3,4,3,2.]],tilted:0,threshold:2.4765899870544672e-003,right_val:-0.1611132025718689,left_val:0.0683133676648140},{features:[[1,0,8,6,-1.],[1,0,4,3,2.],[5,3,4,3,2.]],tilted:0,threshold:0.0212845504283905,right_val:-0.4691652059555054,left_val:0.0370908714830875},{features:[[9,6,6,5,-1.],[9,6,3,5,2.]],tilted:0,threshold:-0.0103694796562195,right_val:-0.0604898706078529,left_val:0.1080783978104591},{features:[[5,6,8,3,-1.],[9,6,4,3,2.]],tilted:0,threshold:0.0107324803248048,right_val:0.3195860981941223,left_val:-0.0585823804140091},{features:[[13,3,6,9,-1.],[10,6,6,3,3.]],tilted:1,threshold:-0.2323516011238098,right_val:8.2511743530631065e-003,left_val:-1.},{features:[[9,3,9,6,-1.],[12,6,3,6,3.]],tilted:1,threshold:-6.0572529037017375e-005,right_val:-0.2358305007219315,left_val:0.0802017673850060},{features:[[4,11,18,3,-1.],[4,12,18,1,3.]],tilted:0,threshold:-2.7367009315639734e-003,right_val:-0.0788008794188499,left_val:0.1536909043788910},{features:[[0,13,15,4,-1.],[5,13,5,4,3.]],tilted:0,threshold:0.0311680100858212,right_val:0.3737446963787079,left_val:-0.0418529510498047},{features:[[15,12,4,6,-1.],[15,15,4,3,2.]],tilted:0,threshold:0.0454151295125484,right_val:-0.9997528791427612,left_val:6.6594500094652176e-003},{features:[[3,12,4,6,-1.],[3,15,4,3,2.]],tilted:0,threshold:-1.3742819428443909e-003,right_val:-0.1923477947711945,left_val:0.1058785021305084},{features:[[9,12,6,6,-1.],[11,12,2,6,3.]],tilted:0,threshold:3.0089360661804676e-003,right_val:-0.1544273048639298,left_val:0.0940386429429054},{features:[[6,9,9,7,-1.],[9,9,3,7,3.]],tilted:0,threshold:-0.0710713863372803,right_val:0.0255231298506260,left_val:-0.5495526790618897},{features:[[13,10,6,8,-1.],[16,10,3,4,2.],[13,14,3,4,2.]],tilted:0,threshold:1.0958979837596416e-003,right_val:0.0576776191592216,left_val:-0.0613276585936546},{features:[[3,10,6,8,-1.],[3,10,3,4,2.],[6,14,3,4,2.]],tilted:0,threshold:-0.0237067993730307,right_val:-0.0665534734725952,left_val:0.2948609888553619},{features:[[7,10,8,4,-1.],[7,10,4,4,2.]],tilted:0,threshold:6.8882037885487080e-003,right_val:-0.2572773098945618,left_val:0.0738617032766342},{features:[[7,5,6,11,-1.],[10,5,3,11,2.]],tilted:0,threshold:-0.0491580404341221,right_val:-0.0527858398854733,left_val:0.3240630924701691},{features:[[10,6,6,6,-1.],[10,9,6,3,2.]],tilted:0,threshold:0.0713694170117378,right_val:-0.7482113242149353,left_val:0.0132099203765392},{features:[[6,6,6,6,-1.],[6,9,6,3,2.]],tilted:0,threshold:-8.4517486393451691e-003,right_val:0.0931395962834358,left_val:-0.2065279930830002},{features:[[8,6,12,8,-1.],[12,6,4,8,3.]],tilted:0,threshold:-0.1555441021919251,right_val:0.0115754203870893,left_val:-0.5073614120483398},{features:[[2,11,12,3,-1.],[6,11,4,3,3.]],tilted:0,threshold:-0.0459768213331699,right_val:-0.0565582811832428,left_val:0.3343332111835480},{features:[[14,3,6,8,-1.],[17,3,3,4,2.],[14,7,3,4,2.]],tilted:0,threshold:0.0179002191871405,right_val:-0.2856503129005432,left_val:0.0340919904410839},{features:[[0,5,13,3,-1.],[0,6,13,1,3.]],tilted:0,threshold:6.7351139150559902e-003,right_val:0.2332212030887604,left_val:-0.0665388181805611},{features:[[14,0,6,6,-1.],[14,2,6,2,3.]],tilted:0,threshold:6.4544100314378738e-003,right_val:-0.1442237049341202,left_val:0.0472244992852211},{features:[[3,0,6,6,-1.],[3,2,6,2,3.]],tilted:0,threshold:-0.0110290497541428,right_val:0.0625426918268204,left_val:-0.2644239962100983},{features:[[8,8,14,3,-1.],[8,9,14,1,3.]],tilted:0,threshold:-3.3727919217199087e-003,right_val:-0.0683576464653015,left_val:0.1257591992616653},{features:[[7,2,2,15,-1.],[8,2,1,15,2.]],tilted:0,threshold:-2.2960419300943613e-003,right_val:0.0946819707751274,left_val:-0.1557330936193466},{features:[[4,14,16,4,-1.],[4,14,8,4,2.]],tilted:0,threshold:-0.0795031636953354,right_val:0.0172012597322464,left_val:-0.3824613988399506},{features:[[1,6,20,12,-1.],[6,6,10,12,2.]],tilted:0,threshold:-0.2524088025093079,right_val:-0.0589428097009659,left_val:0.3013980984687805},{features:[[5,10,16,6,-1.],[13,10,8,3,2.],[5,13,8,3,2.]],tilted:0,threshold:0.0363130792975426,right_val:-0.2081169039011002,left_val:0.0211058706045151},{features:[[1,10,16,6,-1.],[1,10,8,3,2.],[9,13,8,3,2.]],tilted:0,threshold:0.0687375217676163,right_val:0.5134530067443848,left_val:-0.0324002988636494},{features:[[8,8,14,6,-1.],[8,8,7,6,2.]],tilted:0,threshold:-0.2181455045938492,right_val:0.0162609796971083,left_val:-0.7009329199790955},{features:[[0,8,14,6,-1.],[7,8,7,6,2.]],tilted:0,threshold:-0.1977089941501617,right_val:0.0179375503212214,left_val:-0.6781736016273499},{features:[[5,6,12,11,-1.],[8,6,6,11,2.]],tilted:0,threshold:-0.1013111993670464,right_val:-0.0499694384634495,left_val:0.3647063076496124},{features:[[1,3,8,6,-1.],[1,3,4,3,2.],[5,6,4,3,2.]],tilted:0,threshold:5.4146698676049709e-003,right_val:-0.2332739979028702,left_val:0.0660865902900696},{features:[[13,1,7,6,-1.],[13,1,7,3,2.]],tilted:1,threshold:-0.0405901782214642,right_val:-0.0430333092808723,left_val:0.2146472036838532},{features:[[1,4,5,10,-1.],[1,9,5,5,2.]],tilted:0,threshold:-1.3324919855222106e-003,right_val:-0.1279428005218506,left_val:0.1297567933797836},{features:[[18,6,3,8,-1.],[18,10,3,4,2.]],tilted:0,threshold:5.7570589706301689e-003,right_val:-0.1197730004787445,left_val:0.0434699989855289},{features:[[1,6,3,8,-1.],[1,10,3,4,2.]],tilted:0,threshold:-4.0872758254408836e-003,right_val:0.0926248729228973,left_val:-0.2018010020256043},{features:[[8,5,13,3,-1.],[8,6,13,1,3.]],tilted:0,threshold:0.0213452801108360,right_val:0.2914252877235413,left_val:-0.0263108704239130},{features:[[1,5,13,3,-1.],[1,6,13,1,3.]],tilted:0,threshold:-2.4241849314421415e-003,right_val:-0.1172301024198532,left_val:0.1713156998157501},{features:[[18,0,3,12,-1.],[19,0,1,12,3.]],tilted:0,threshold:0.0606775507330894,right_val:0.5657712221145630,left_val:-4.8347217962145805e-003},{features:[[1,0,3,12,-1.],[2,0,1,12,3.]],tilted:0,threshold:3.1573011074215174e-004,right_val:0.1309486031532288,left_val:-0.1149955019354820},{features:[[4,2,18,2,-1.],[4,2,9,2,2.]],tilted:0,threshold:-1.4639530563727021e-003,right_val:-0.0821887478232384,left_val:0.1070842966437340},{features:[[6,3,6,6,-1.],[9,3,3,6,2.]],tilted:0,threshold:-0.0816292762756348,right_val:0.0213186405599117,left_val:-0.7009016275405884},{features:[[9,5,12,11,-1.],[12,5,6,11,2.]],tilted:0,threshold:-2.2923630604054779e-004,right_val:-0.0572733990848064,left_val:0.0524490103125572},{features:[[1,5,12,11,-1.],[4,5,6,11,2.]],tilted:0,threshold:8.6732655763626099e-003,right_val:0.1453080028295517,left_val:-0.1094440966844559},{features:[[8,4,8,8,-1.],[8,4,4,8,2.]],tilted:0,threshold:-9.5603411318734288e-004,right_val:-0.0766770094633102,left_val:0.0547286607325077},{features:[[0,8,22,4,-1.],[0,8,11,2,2.],[11,10,11,2,2.]],tilted:0,threshold:-0.0568146891891956,right_val:0.0177913308143616,left_val:-0.7249373793601990},{features:[[8,6,8,4,-1.],[8,6,4,4,2.]],tilted:0,threshold:6.4268838614225388e-003,right_val:0.0834547504782677,left_val:-0.0377686992287636},{features:[[6,3,8,8,-1.],[10,3,4,8,2.]],tilted:0,threshold:5.2451258525252342e-003,right_val:0.2154906988143921,left_val:-0.0758067518472672},{features:[[3,6,16,4,-1.],[11,6,8,2,2.],[3,8,8,2,2.]],tilted:0,threshold:6.7577441222965717e-003,right_val:-0.2495719939470291,left_val:0.0771638676524162},{features:[[2,14,16,4,-1.],[10,14,8,4,2.]],tilted:0,threshold:-5.7494179345667362e-003,right_val:-0.1274092048406601,left_val:0.1424555927515030},{features:[[11,13,6,5,-1.],[11,13,3,5,2.]],tilted:0,threshold:-6.7760650999844074e-003,right_val:0.0399752110242844,left_val:-0.2331600934267044},{features:[[5,13,6,5,-1.],[8,13,3,5,2.]],tilted:0,threshold:3.5247279447503388e-004,right_val:0.1157741025090218,left_val:-0.1308315992355347},{features:[[12,2,2,7,-1.],[12,2,1,7,2.]],tilted:1,threshold:1.4523849822580814e-003,right_val:0.0654869601130486,left_val:-0.0927244573831558}],threshold:-0.8364096879959106},{simpleClassifiers:[{features:[[0,9,21,9,-1.],[7,12,7,3,9.]],tilted:0,threshold:-0.3116379976272583,right_val:-0.1111584007740021,left_val:0.3806200027465820},{features:[[5,3,12,9,-1.],[9,6,4,3,9.]],tilted:0,threshold:-0.3033824861049652,right_val:-0.0504597313702106,left_val:0.5123680830001831},{features:[[3,9,16,8,-1.],[3,9,8,4,2.],[11,13,8,4,2.]],tilted:0,threshold:-0.0109451701864600,right_val:0.1054809987545013,left_val:-0.2229202985763550},{features:[[7,0,14,18,-1.],[7,0,7,18,2.]],tilted:0,threshold:-0.0280110798776150,right_val:-0.0864785090088844,left_val:0.0706877931952477},{features:[[5,8,6,4,-1.],[5,8,3,4,2.]],tilted:1,threshold:-0.0522561594843864,right_val:-8.7944902479648590e-003,left_val:0.5785626769065857},{features:[[3,11,16,4,-1.],[11,11,8,2,2.],[3,13,8,2,2.]],tilted:0,threshold:-5.9455442242324352e-003,right_val:0.0945845320820808,left_val:-0.2564198076725006},{features:[[6,9,6,8,-1.],[6,9,3,4,2.],[9,13,3,4,2.]],tilted:0,threshold:2.5594399776309729e-003,right_val:0.1288242936134338,left_val:-0.2571848034858704},{features:[[7,0,14,18,-1.],[7,0,7,18,2.]],tilted:0,threshold:-0.1209926009178162,right_val:0.0258294306695461,left_val:-0.1229322031140328},{features:[[1,0,14,18,-1.],[8,0,7,18,2.]],tilted:0,threshold:-0.4420821964740753,right_val:0.0425867103040218,left_val:-0.7454655170440674},{features:[[13,14,8,3,-1.],[13,14,4,3,2.]],tilted:0,threshold:-6.6842641681432724e-003,right_val:-0.1640930026769638,left_val:0.1351564973592758},{features:[[8,4,6,4,-1.],[8,6,6,2,2.]],tilted:0,threshold:9.8270708695054054e-003,right_val:0.2985329926013947,left_val:-0.0803053528070450},{features:[[6,6,14,4,-1.],[13,6,7,2,2.],[6,8,7,2,2.]],tilted:0,threshold:0.0586385987699032,right_val:-0.8224250078201294,left_val:0.0275564193725586},{features:[[7,3,11,4,-1.],[6,4,11,2,2.]],tilted:1,threshold:-3.0546959023922682e-003,right_val:0.1108272969722748,left_val:-0.1929274946451187},{features:[[7,0,12,4,-1.],[13,0,6,2,2.],[7,2,6,2,2.]],tilted:0,threshold:-7.3340102098882198e-003,right_val:0.0667446032166481,left_val:-0.2430793941020966},{features:[[4,0,14,4,-1.],[4,0,7,2,2.],[11,2,7,2,2.]],tilted:0,threshold:-0.0105262296274304,right_val:0.0628508478403091,left_val:-0.3113602101802826},{features:[[15,8,6,9,-1.],[17,8,2,9,3.]],tilted:0,threshold:0.1048116013407707,right_val:-0.6737608909606934,left_val:0.0126217203214765},{features:[[1,8,6,9,-1.],[3,8,2,9,3.]],tilted:0,threshold:9.4269379042088985e-004,right_val:0.1028065010905266,left_val:-0.1707167029380798},{features:[[12,5,5,9,-1.],[12,8,5,3,3.]],tilted:0,threshold:8.4397383034229279e-003,right_val:0.0885990783572197,left_val:-0.0530145689845085},{features:[[5,5,5,9,-1.],[5,8,5,3,3.]],tilted:0,threshold:-0.0305516701191664,right_val:-0.0691484734416008,left_val:0.3526489138603210},{features:[[17,9,4,6,-1.],[17,9,2,6,2.]],tilted:0,threshold:-0.0491123795509338,right_val:0.0140432203188539,left_val:-0.5821937918663025},{features:[[1,9,4,6,-1.],[3,9,2,6,2.]],tilted:0,threshold:5.8098030276596546e-003,right_val:-0.2536281943321228,left_val:0.0708724334836006},{features:[[4,3,14,3,-1.],[4,4,14,1,3.]],tilted:0,threshold:0.0255410708487034,right_val:0.4067445099353790,left_val:-0.0451369397342205},{features:[[6,0,10,3,-1.],[5,1,10,1,3.]],tilted:1,threshold:-0.0487112887203693,right_val:0.0243178699165583,left_val:-0.7024015784263611},{features:[[10,4,11,14,-1.],[10,11,11,7,2.]],tilted:0,threshold:-0.3262439072132111,right_val:5.5445302277803421e-003,left_val:-0.5061904788017273},{features:[[2,5,6,6,-1.],[2,7,6,2,3.]],tilted:0,threshold:-1.8120040476787835e-004,right_val:-0.1213954985141754,left_val:0.1313259005546570},{features:[[12,2,5,12,-1.],[12,6,5,4,3.]],tilted:0,threshold:-0.1298076957464218,right_val:0.0164145492017269,left_val:-0.6820899248123169},{features:[[5,16,12,2,-1.],[5,17,12,1,2.]],tilted:0,threshold:8.3528067916631699e-003,right_val:-0.5090913772583008,left_val:0.0300403907895088},{features:[[3,4,18,3,-1.],[3,5,18,1,3.]],tilted:0,threshold:5.4547088220715523e-003,right_val:0.1800798028707504,left_val:-0.0824020728468895},{features:[[1,4,11,14,-1.],[1,11,11,7,2.]],tilted:0,threshold:-0.3169954121112824,right_val:0.0182291399687529,left_val:-0.8661301136016846},{features:[[8,12,11,4,-1.],[8,14,11,2,2.]],tilted:0,threshold:5.8424862800166011e-004,right_val:-0.1311808973550797,left_val:0.0424097292125225},{features:[[7,11,8,7,-1.],[11,11,4,7,2.]],tilted:0,threshold:-9.7046848386526108e-003,right_val:0.0559204295277596,left_val:-0.2743268907070160},{features:[[12,2,4,11,-1.],[12,2,2,11,2.]],tilted:1,threshold:0.0168343205004931,right_val:0.0677927583456039,left_val:-0.0833064168691635},{features:[[10,4,11,2,-1.],[10,4,11,1,2.]],tilted:1,threshold:-0.0306853801012039,right_val:-0.0453393310308456,left_val:0.4212690889835358},{features:[[16,0,2,14,-1.],[16,0,1,14,2.]],tilted:1,threshold:0.0413949191570282,right_val:-0.1972219049930573,left_val:0.0199717506766319},{features:[[6,0,14,2,-1.],[6,0,14,1,2.]],tilted:1,threshold:0.0349101498723030,right_val:0.3504027128219605,left_val:-0.0538268797099590},{features:[[19,4,2,12,-1.],[19,4,1,12,2.]],tilted:1,threshold:-5.2495039999485016e-003,right_val:0.0550805702805519,left_val:-0.1136389002203941},{features:[[8,2,6,10,-1.],[8,7,6,5,2.]],tilted:0,threshold:0.1204561963677406,right_val:-0.9395803213119507,left_val:0.0174515992403030},{features:[[19,4,2,12,-1.],[19,4,1,12,2.]],tilted:1,threshold:0.0421304218471050,right_val:0.6005985140800476,left_val:-0.0143432803452015},{features:[[11,3,6,8,-1.],[11,3,6,4,2.]],tilted:1,threshold:0.0191208496689796,right_val:-0.1858649998903275,left_val:0.0858645066618919},{features:[[11,2,10,6,-1.],[11,2,5,6,2.]],tilted:1,threshold:8.4470612928271294e-003,right_val:0.0734614208340645,left_val:-0.0694521814584732},{features:[[3,5,13,2,-1.],[3,6,13,1,2.]],tilted:0,threshold:1.7696130089461803e-003,right_val:0.1947980970144272,left_val:-0.0799966603517532},{features:[[5,4,12,6,-1.],[5,6,12,2,3.]],tilted:0,threshold:0.0579959489405155,right_val:-0.5409700870513916,left_val:0.0276330001652241},{features:[[6,9,9,9,-1.],[9,9,3,9,3.]],tilted:0,threshold:-0.0798840224742889,right_val:0.0232198294252157,left_val:-0.5430768132209778},{features:[[19,1,3,12,-1.],[20,2,1,12,3.]],tilted:1,threshold:0.0665762424468994,right_val:-0.8122456073760986,left_val:6.8416809663176537e-003},{features:[[2,13,9,5,-1.],[5,13,3,5,3.]],tilted:0,threshold:0.0641699433326721,right_val:0.6079813241958618,left_val:-0.0248466897755861},{features:[[11,2,10,6,-1.],[11,2,5,6,2.]],tilted:1,threshold:-0.2940478026866913,right_val:4.6440181322395802e-003,left_val:-1.},{features:[[11,2,6,10,-1.],[11,2,6,5,2.]],tilted:1,threshold:-9.5727723091840744e-003,right_val:0.1012165024876595,left_val:-0.1415735930204392},{features:[[1,6,21,3,-1.],[8,6,7,3,3.]],tilted:0,threshold:-0.0235744491219521,right_val:-0.1318469047546387,left_val:0.1171545013785362},{features:[[5,5,3,8,-1.],[5,9,3,4,2.]],tilted:0,threshold:-5.1256217993795872e-003,right_val:0.1017735973000526,left_val:-0.1762325018644333},{features:[[10,5,7,6,-1.],[10,7,7,2,3.]],tilted:0,threshold:0.0976630598306656,right_val:-0.8041555285453796,left_val:4.4896239414811134e-003},{features:[[10,0,7,6,-1.],[8,2,7,2,3.]],tilted:1,threshold:0.0320886895060539,right_val:0.3019489049911499,left_val:-0.0580484308302403},{features:[[13,5,6,6,-1.],[13,7,6,2,3.]],tilted:0,threshold:-0.0865172073245049,right_val:2.8089359402656555e-003,left_val:-0.7552989125251770},{features:[[5,5,7,6,-1.],[5,7,7,2,3.]],tilted:0,threshold:-0.0285409707576036,right_val:0.0440815910696983,left_val:-0.3508501946926117},{features:[[9,1,6,8,-1.],[12,1,3,4,2.],[9,5,3,4,2.]],tilted:0,threshold:-5.3844689391553402e-003,right_val:-0.0700338482856750,left_val:0.0923489034175873},{features:[[7,1,6,8,-1.],[7,1,3,4,2.],[10,5,3,4,2.]],tilted:0,threshold:-0.0222804397344589,right_val:-0.0706586763262749,left_val:0.2494941949844360},{features:[[7,0,9,4,-1.],[10,0,3,4,3.]],tilted:0,threshold:5.1025422289967537e-003,right_val:-0.1547394990921021,left_val:0.0608996897935867},{features:[[1,9,14,3,-1.],[1,10,14,1,3.]],tilted:0,threshold:3.7133800797164440e-003,right_val:0.1719526052474976,left_val:-0.0871243029832840},{features:[[5,9,15,3,-1.],[5,10,15,1,3.]],tilted:0,threshold:-4.0405280888080597e-003,right_val:-0.0996850505471230,left_val:0.1505451947450638},{features:[[3,1,12,3,-1.],[2,2,12,1,3.]],tilted:1,threshold:0.0489449016749859,right_val:-0.7111399769783020,left_val:0.0206377804279327},{features:[[5,12,12,6,-1.],[11,12,6,3,2.],[5,15,6,3,2.]],tilted:0,threshold:-4.0832208469510078e-003,right_val:0.0886750072240829,left_val:-0.1610490977764130},{features:[[5,12,12,4,-1.],[5,12,6,2,2.],[11,14,6,2,2.]],tilted:0,threshold:-2.2145630791783333e-003,right_val:0.1004524007439613,left_val:-0.2190154045820236},{features:[[15,4,3,9,-1.],[16,5,1,9,3.]],tilted:1,threshold:-0.0642574504017830,right_val:0.0102538801729679,left_val:-0.5769470930099487},{features:[[7,4,9,3,-1.],[6,5,9,1,3.]],tilted:1,threshold:0.0118954200297594,right_val:0.2614729106426239,left_val:-0.0705605968832970},{features:[[13,3,7,4,-1.],[13,5,7,2,2.]],tilted:0,threshold:-0.0449882596731186,right_val:9.9674779921770096e-003,left_val:-0.6844028234481812},{features:[[4,0,9,5,-1.],[7,0,3,5,3.]],tilted:0,threshold:6.3484339043498039e-003,right_val:-0.1629998981952667,left_val:0.0847386568784714},{features:[[10,6,6,6,-1.],[12,6,2,6,3.]],tilted:0,threshold:-0.0565874390304089,right_val:-0.0196411404758692,left_val:0.4896005094051361},{features:[[0,6,12,4,-1.],[0,6,6,2,2.],[6,8,6,2,2.]],tilted:0,threshold:0.0358534008264542,right_val:-0.6810833811759949,left_val:0.0196954403072596},{features:[[10,11,9,6,-1.],[13,11,3,6,3.]],tilted:0,threshold:-4.5450981706380844e-003,right_val:-0.0912766382098198,left_val:0.0690726563334465},{features:[[2,6,16,8,-1.],[2,10,16,4,2.]],tilted:0,threshold:0.1060857027769089,right_val:0.3213947117328644,left_val:-0.0499939918518066},{features:[[17,0,2,10,-1.],[17,0,1,10,2.]],tilted:1,threshold:-0.0459244102239609,right_val:0.0121494196355343,left_val:-0.8274418115615845},{features:[[5,0,10,2,-1.],[5,0,10,1,2.]],tilted:1,threshold:-0.0122732399031520,right_val:0.0516933985054493,left_val:-0.3066928982734680},{features:[[9,11,13,3,-1.],[9,12,13,1,3.]],tilted:0,threshold:0.0806673914194107,right_val:-1.0002529621124268,left_val:2.1730009466409683e-003},{features:[[0,11,13,3,-1.],[0,12,13,1,3.]],tilted:0,threshold:-0.0230448599904776,right_val:-0.0362739786505699,left_val:0.4508534967899323},{features:[[18,6,4,12,-1.],[18,9,4,6,2.]],tilted:0,threshold:0.0187029093503952,right_val:-0.2179626971483231,left_val:0.0469454601407051},{features:[[6,4,9,7,-1.],[9,4,3,7,3.]],tilted:0,threshold:-0.0968200266361237,right_val:-0.0378190912306309,left_val:0.4039891064167023},{features:[[11,9,6,7,-1.],[13,9,2,7,3.]],tilted:0,threshold:0.0605257898569107,right_val:-0.4566167891025543,left_val:0.0157271604984999},{features:[[5,9,6,7,-1.],[7,9,2,7,3.]],tilted:0,threshold:0.0104185696691275,right_val:-0.2444117963314056,left_val:0.0627266466617584},{features:[[1,13,20,5,-1.],[6,13,10,5,2.]],tilted:0,threshold:0.0107262097299099,right_val:0.2209997028112412,left_val:-0.0719688534736633},{features:[[7,9,8,6,-1.],[9,9,4,6,2.]],tilted:0,threshold:-2.7160700410604477e-003,right_val:-0.1462963074445725,left_val:0.1288274973630905},{features:[[5,5,12,4,-1.],[8,5,6,4,2.]],tilted:0,threshold:8.5867568850517273e-003,right_val:0.2584058940410614,left_val:-0.0686456635594368}],threshold:-0.7232239842414856},{simpleClassifiers:[{features:[[1,11,20,6,-1.],[6,11,10,6,2.]],tilted:0,threshold:-0.0258516706526279,right_val:-0.2474593073129654,left_val:0.1801179945468903},{features:[[1,8,20,7,-1.],[6,8,10,7,2.]],tilted:0,threshold:0.1405462026596069,right_val:0.4076690971851349,left_val:-0.0513192899525166},{features:[[2,9,18,6,-1.],[8,11,6,2,9.]],tilted:0,threshold:-0.2725507915019989,right_val:-0.0450339317321777,left_val:0.4994125962257385},{features:[[8,13,9,4,-1.],[8,15,9,2,2.]],tilted:0,threshold:1.3978329952806234e-003,right_val:-0.2179338932037354,left_val:0.0536005087196827},{features:[[1,12,9,6,-1.],[1,15,9,3,2.]],tilted:0,threshold:-0.0350598804652691,right_val:0.0899913236498833,left_val:-0.2994329035282135},{features:[[9,2,8,6,-1.],[13,2,4,3,2.],[9,5,4,3,2.]],tilted:0,threshold:-3.2894399482756853e-003,right_val:-0.0947112515568733,left_val:0.1026419997215271},{features:[[0,5,22,5,-1.],[11,5,11,5,2.]],tilted:0,threshold:0.1824229061603546,right_val:-0.6876572966575623,left_val:0.0256266705691814},{features:[[2,0,18,18,-1.],[2,9,18,9,2.]],tilted:0,threshold:-0.0787410810589790,right_val:-0.1449752002954483,left_val:0.1081041991710663},{features:[[6,7,3,8,-1.],[6,11,3,4,2.]],tilted:0,threshold:0.0139451297000051,right_val:0.3131574988365173,left_val:-0.0713719129562378},{features:[[11,12,8,6,-1.],[13,12,4,6,2.]],tilted:0,threshold:0.0446802787482738,right_val:0.3926362991333008,left_val:-0.0304461494088173},{features:[[3,8,6,8,-1.],[3,8,3,4,2.],[6,12,3,4,2.]],tilted:0,threshold:-2.6441770605742931e-003,right_val:-0.1780045032501221,left_val:0.1159669980406761},{features:[[11,6,7,4,-1.],[11,8,7,2,2.]],tilted:0,threshold:-5.1071979105472565e-003,right_val:0.0678234472870827,left_val:-0.1173994019627571},{features:[[9,2,4,6,-1.],[11,2,2,6,2.]],tilted:0,threshold:-0.0325821787118912,right_val:0.0333520211279392,left_val:-0.5912901759147644},{features:[[3,14,16,4,-1.],[11,14,8,2,2.],[3,16,8,2,2.]],tilted:0,threshold:-0.0277558397501707,right_val:0.0167614892125130,left_val:-0.7064936161041260},{features:[[5,14,6,4,-1.],[5,16,6,2,2.]],tilted:0,threshold:-6.0038521041860804e-005,right_val:-0.2293335944414139,left_val:0.0738326683640480},{features:[[9,5,4,6,-1.],[9,5,2,6,2.]],tilted:0,threshold:0.0305061805993319,right_val:0.4411535859107971,left_val:-0.0380560606718063},{features:[[5,12,12,6,-1.],[8,12,6,6,2.]],tilted:0,threshold:-6.2056961469352245e-003,right_val:0.0937074720859528,left_val:-0.1775723993778229},{features:[[7,14,8,4,-1.],[7,16,8,2,2.]],tilted:0,threshold:-8.0766230821609497e-003,right_val:0.0740596428513527,left_val:-0.2025669962167740},{features:[[1,3,18,3,-1.],[1,4,18,1,3.]],tilted:0,threshold:-0.0332099087536335,right_val:-0.0349030084908009,left_val:0.4637222886085510},{features:[[8,3,14,3,-1.],[8,4,14,1,3.]],tilted:0,threshold:0.0355306081473827,right_val:0.4520249962806702,left_val:-0.0316795185208321},{features:[[1,0,14,4,-1.],[1,0,7,2,2.],[8,2,7,2,2.]],tilted:0,threshold:0.0162976402789354,right_val:-0.3484537005424500,left_val:0.0441890396177769},{features:[[10,10,12,3,-1.],[10,11,12,1,3.]],tilted:0,threshold:9.9985357373952866e-003,right_val:0.1607805043458939,left_val:-0.0482553206384182},{features:[[1,10,12,3,-1.],[1,11,12,1,3.]],tilted:0,threshold:-5.2390778437256813e-003,right_val:-0.0760327428579330,left_val:0.2323659956455231},{features:[[10,7,8,3,-1.],[10,7,4,3,2.]],tilted:0,threshold:-3.2508899457752705e-003,right_val:-0.0910402536392212,left_val:0.0543693900108337},{features:[[11,0,6,6,-1.],[9,2,6,2,3.]],tilted:1,threshold:0.0556407906115055,right_val:0.4203402101993561,left_val:-0.0388111285865307},{features:[[17,0,2,10,-1.],[17,0,1,10,2.]],tilted:1,threshold:0.0339989811182022,right_val:-0.3561536073684692,left_val:0.0222513303160667},{features:[[4,7,8,3,-1.],[8,7,4,3,2.]],tilted:0,threshold:-4.3103890493512154e-003,right_val:-0.1763073056936264,left_val:0.1128742992877960},{features:[[13,0,8,6,-1.],[13,2,8,2,3.]],tilted:0,threshold:-7.9246461391448975e-003,right_val:0.0350996293127537,left_val:-0.1099233999848366},{features:[[1,0,8,6,-1.],[1,2,8,2,3.]],tilted:0,threshold:0.0442733801901340,right_val:-0.6092141866683960,left_val:0.0280945692211390},{features:[[17,0,2,10,-1.],[17,0,1,10,2.]],tilted:1,threshold:0.0599073283374310,right_val:-0.9052320718765259,left_val:9.7544339951127768e-004},{features:[[5,0,10,2,-1.],[5,0,10,1,2.]],tilted:1,threshold:0.0333788692951202,right_val:-0.8525460958480835,left_val:0.0177232790738344},{features:[[10,6,6,4,-1.],[10,6,3,4,2.]],tilted:0,threshold:0.0146941700950265,right_val:0.2799833118915558,left_val:-0.0490315109491348},{features:[[0,4,14,3,-1.],[0,5,14,1,3.]],tilted:0,threshold:-5.3877499885857105e-003,right_val:-0.0823825225234032,left_val:0.1821904927492142},{features:[[3,3,16,10,-1.],[11,3,8,5,2.],[3,8,8,5,2.]],tilted:0,threshold:-0.0179768893867731,right_val:0.0849847570061684,left_val:-0.1938468962907791},{features:[[1,5,12,3,-1.],[1,6,12,1,3.]],tilted:0,threshold:-4.4651641510426998e-003,right_val:-0.0950757712125778,left_val:0.1763291060924530},{features:[[9,6,13,4,-1.],[9,8,13,2,2.]],tilted:0,threshold:0.0693722963333130,right_val:-0.6755440235137940,left_val:3.1770321074873209e-003},{features:[[7,5,8,6,-1.],[7,5,4,3,2.],[11,8,4,3,2.]],tilted:0,threshold:-0.0170022696256638,right_val:0.0447317287325859,left_val:-0.3382794857025147},{features:[[13,3,4,11,-1.],[14,4,2,11,2.]],tilted:1,threshold:0.0172742400318384,right_val:0.1185202971100807,left_val:-0.0247697103768587},{features:[[9,2,11,2,-1.],[9,2,11,1,2.]],tilted:1,threshold:0.0403887294232845,right_val:0.4732314050197601,left_val:-0.0329676792025566},{features:[[5,13,12,4,-1.],[5,14,12,2,2.]],tilted:0,threshold:0.0142154004424810,right_val:-0.4415706098079681,left_val:0.0298468600958586},{features:[[0,9,16,4,-1.],[0,9,8,2,2.],[8,11,8,2,2.]],tilted:0,threshold:0.0416277199983597,right_val:0.3297838866710663,left_val:-0.0459539182484150},{features:[[7,10,9,7,-1.],[10,10,3,7,3.]],tilted:0,threshold:-1.7416840419173241e-003,right_val:-0.0888622030615807,left_val:0.0872863084077835},{features:[[10,7,5,6,-1.],[10,7,5,3,2.]],tilted:1,threshold:-9.8077040165662766e-003,right_val:0.0774018764495850,left_val:-0.2102667987346649},{features:[[11,5,10,3,-1.],[11,5,5,3,2.]],tilted:1,threshold:0.0218366496264935,right_val:-0.1533042043447495,left_val:0.0432117693126202},{features:[[2,13,12,5,-1.],[5,13,6,5,2.]],tilted:0,threshold:-0.0707430988550186,right_val:-0.0527479499578476,left_val:0.3301903903484345},{features:[[17,9,4,7,-1.],[17,9,2,7,2.]],tilted:0,threshold:-0.0111810201779008,right_val:0.0278584603220224,left_val:-0.1149393990635872},{features:[[0,6,12,3,-1.],[0,7,12,1,3.]],tilted:0,threshold:-0.0146235600113869,right_val:-0.0441660583019257,left_val:0.3232707083225250},{features:[[18,6,2,10,-1.],[18,6,1,10,2.]],tilted:1,threshold:-9.6702557057142258e-003,right_val:0.0361545309424400,left_val:-0.1815731972455978},{features:[[1,14,8,3,-1.],[5,14,4,3,2.]],tilted:0,threshold:8.3439601585268974e-003,right_val:0.2744483947753906,left_val:-0.0524739101529121},{features:[[6,11,12,3,-1.],[10,11,4,3,3.]],tilted:0,threshold:0.0229705590754747,right_val:-0.1577367037534714,left_val:0.0349300503730774},{features:[[0,14,8,3,-1.],[4,14,4,3,2.]],tilted:0,threshold:-8.2734245806932449e-003,right_val:-0.1196577027440071,left_val:0.1161279007792473},{features:[[5,11,16,3,-1.],[9,11,8,3,2.]],tilted:0,threshold:8.7074404582381248e-003,right_val:0.1048133000731468,left_val:-0.0408297888934612},{features:[[1,9,4,7,-1.],[3,9,2,7,2.]],tilted:0,threshold:-0.0188258197158575,right_val:0.0473507009446621,left_val:-0.3879455029964447},{features:[[6,12,10,6,-1.],[6,14,10,2,3.]],tilted:0,threshold:-7.2092940099537373e-003,right_val:0.0759528502821922,left_val:-0.1988696008920670},{features:[[0,16,12,2,-1.],[0,17,12,1,2.]],tilted:0,threshold:1.6543369565624744e-004,right_val:0.1551059931516647,left_val:-0.1067482978105545},{features:[[12,5,4,12,-1.],[14,5,2,6,2.],[12,11,2,6,2.]],tilted:0,threshold:8.9294537901878357e-003,right_val:0.0902067869901657,left_val:-0.0670596435666084},{features:[[6,11,6,6,-1.],[8,11,2,6,3.]],tilted:0,threshold:3.1991640571504831e-003,right_val:-0.1968283951282501,left_val:0.0744457468390465},{features:[[4,16,15,2,-1.],[4,17,15,1,2.]],tilted:0,threshold:-1.1280879698460922e-004,right_val:-0.1366118937730789,left_val:0.0797033905982971},{features:[[5,0,12,9,-1.],[9,3,4,3,9.]],tilted:0,threshold:-0.0696137994527817,right_val:0.0657716169953346,left_val:-0.2101052999496460},{features:[[8,0,6,9,-1.],[8,3,6,3,3.]],tilted:0,threshold:-0.0260666795074940,right_val:-0.0574957914650440,left_val:0.2869651019573212},{features:[[1,0,3,13,-1.],[2,0,1,13,3.]],tilted:0,threshold:0.0120507404208183,right_val:0.2799476981163025,left_val:-0.0468205101788044},{features:[[10,1,6,4,-1.],[10,1,3,4,2.]],tilted:0,threshold:-0.0396258495748043,right_val:0.0114761395379901,left_val:-0.3705450892448425},{features:[[8,1,6,9,-1.],[10,1,2,9,3.]],tilted:0,threshold:-2.7379901148378849e-003,right_val:-0.1620323061943054,left_val:0.0943711325526237},{features:[[8,3,6,6,-1.],[10,3,2,6,3.]],tilted:0,threshold:-0.0652625635266304,right_val:0.0194304697215557,left_val:-0.6780838966369629},{features:[[3,5,11,2,-1.],[3,5,11,1,2.]],tilted:1,threshold:0.0231916196644306,right_val:-0.4666424989700317,left_val:0.0261343102902174},{features:[[9,5,6,6,-1.],[11,5,2,6,3.]],tilted:0,threshold:0.0477419309318066,right_val:0.2909249067306519,left_val:-0.0252911895513535},{features:[[6,4,6,10,-1.],[6,9,6,5,2.]],tilted:0,threshold:-0.1283002048730850,right_val:0.0138835404068232,left_val:-0.8718711733818054},{features:[[11,2,3,12,-1.],[12,2,1,12,3.]],tilted:0,threshold:-0.0426892600953579,right_val:6.8771280348300934e-003,left_val:-0.6764482259750366},{features:[[8,2,3,12,-1.],[9,2,1,12,3.]],tilted:0,threshold:6.2811248935759068e-003,right_val:0.2099442034959793,left_val:-0.0648037493228912},{features:[[18,9,4,9,-1.],[18,9,2,9,2.]],tilted:0,threshold:0.0275320801883936,right_val:-0.2145736962556839,left_val:0.0153665402904153},{features:[[1,5,6,6,-1.],[1,8,6,3,2.]],tilted:0,threshold:-3.4494648571126163e-004,right_val:-0.1064111962914467,left_val:0.1182949990034103},{features:[[10,6,6,6,-1.],[12,6,2,6,3.]],tilted:0,threshold:-0.0321870110929012,right_val:-0.0278047490864992,left_val:0.2067631930112839},{features:[[10,2,2,12,-1.],[11,2,1,12,2.]],tilted:0,threshold:-2.4451729841530323e-003,right_val:0.0766128376126289,left_val:-0.1897021979093552},{features:[[11,0,5,6,-1.],[11,3,5,3,2.]],tilted:0,threshold:0.0396311208605766,right_val:-0.4411228001117706,left_val:0.0114572802558541},{features:[[6,0,5,6,-1.],[6,3,5,3,2.]],tilted:0,threshold:-9.0082110837101936e-003,right_val:0.0719978883862495,left_val:-0.2032909989356995},{features:[[13,9,5,8,-1.],[13,13,5,4,2.]],tilted:0,threshold:-0.0605949088931084,right_val:-0.0322740003466606,left_val:0.2583183050155640},{features:[[0,9,20,2,-1.],[10,9,10,2,2.]],tilted:0,threshold:0.0336786396801472,right_val:-0.3323315083980560,left_val:0.0365656390786171},{features:[[14,7,3,10,-1.],[14,12,3,5,2.]],tilted:0,threshold:0.0145654100924730,right_val:0.1828067004680634,left_val:-0.0492692105472088},{features:[[11,5,11,2,-1.],[11,5,11,1,2.]],tilted:1,threshold:4.0103439241647720e-003,right_val:0.1124764010310173,left_val:-0.1243560016155243},{features:[[14,7,3,10,-1.],[14,12,3,5,2.]],tilted:0,threshold:1.7989509506151080e-003,right_val:0.1070184037089348,left_val:-0.0546759888529778},{features:[[5,13,12,2,-1.],[5,14,12,1,2.]],tilted:0,threshold:-1.6359580331481993e-004,right_val:-0.1623550057411194,left_val:0.0817552283406258},{features:[[11,8,4,9,-1.],[11,11,4,3,3.]],tilted:0,threshold:-0.0319938994944096,right_val:-0.0173506308346987,left_val:0.1863123029470444},{features:[[1,8,12,6,-1.],[1,10,12,2,3.]],tilted:0,threshold:-0.0817376673221588,right_val:0.0144199002534151,left_val:-0.7596148252487183},{features:[[16,8,3,8,-1.],[16,12,3,4,2.]],tilted:0,threshold:-0.0882625505328178,right_val:5.3146481513977051e-004,left_val:-1.},{features:[[3,8,3,8,-1.],[3,12,3,4,2.]],tilted:0,threshold:-0.0579979009926319,right_val:0.0124950995668769,left_val:-0.8939151167869568},{features:[[11,8,4,9,-1.],[11,11,4,3,3.]],tilted:0,threshold:0.0206914097070694,right_val:0.0972085520625114,left_val:-0.0371675081551075},{features:[[7,8,4,9,-1.],[7,11,4,3,3.]],tilted:0,threshold:-6.0336058959364891e-003,right_val:-0.0869168564677238,left_val:0.1754779070615768},{features:[[7,3,15,12,-1.],[12,7,5,4,9.]],tilted:0,threshold:0.1578976064920425,right_val:-0.2219929993152618,left_val:0.0306049603968859},{features:[[4,10,14,4,-1.],[4,10,7,2,2.],[11,12,7,2,2.]],tilted:0,threshold:3.3271119464188814e-003,right_val:-0.1638471037149429,left_val:0.1120152026414871},{features:[[9,10,10,6,-1.],[14,10,5,3,2.],[9,13,5,3,2.]],tilted:0,threshold:0.1138323992490768,right_val:-0.9998143911361694,left_val:1.8078039865940809e-003},{features:[[3,10,10,6,-1.],[3,10,5,3,2.],[8,13,5,3,2.]],tilted:0,threshold:0.0391889698803425,right_val:0.3413948118686676,left_val:-0.0394944287836552},{features:[[16,7,6,6,-1.],[18,7,2,6,3.]],tilted:0,threshold:-4.7382968477904797e-003,right_val:0.0354984514415264,left_val:-0.0816014036536217},{features:[[3,5,14,2,-1.],[10,5,7,2,2.]],tilted:0,threshold:0.0234581604599953,right_val:0.3479276895523071,left_val:-0.0407674796879292},{features:[[18,2,4,12,-1.],[20,2,2,6,2.],[18,8,2,6,2.]],tilted:0,threshold:0.0165052209049463,right_val:-0.1553200930356979,left_val:0.0201702807098627},{features:[[3,14,12,4,-1.],[3,15,12,2,2.]],tilted:0,threshold:0.0202629491686821,right_val:-0.6261150240898132,left_val:0.0212923791259527},{features:[[7,6,9,6,-1.],[7,9,9,3,2.]],tilted:0,threshold:-9.1393236070871353e-003,right_val:0.0638918429613113,left_val:-0.1363748013973236},{features:[[1,14,6,4,-1.],[4,14,3,4,2.]],tilted:0,threshold:-0.0562079809606075,right_val:-0.0332582183182240,left_val:0.4067111909389496},{features:[[12,5,5,12,-1.],[12,8,5,6,2.]],tilted:0,threshold:6.6868839785456657e-003,right_val:-0.0939662382006645,left_val:0.0641743093729019},{features:[[5,0,3,17,-1.],[6,0,1,17,3.]],tilted:0,threshold:5.8862278237938881e-003,right_val:0.2018133997917175,left_val:-0.0657899603247643},{features:[[16,7,6,6,-1.],[18,7,2,6,3.]],tilted:0,threshold:-0.1151738017797470,right_val:2.5347759947180748e-003,left_val:-1.},{features:[[0,7,6,6,-1.],[2,7,2,6,3.]],tilted:0,threshold:5.5793710052967072e-003,right_val:-0.1963742971420288,left_val:0.0706422030925751},{features:[[14,0,3,18,-1.],[15,0,1,18,3.]],tilted:0,threshold:0.0321800000965595,right_val:0.2242016047239304,left_val:-0.0147377196699381},{features:[[0,5,5,10,-1.],[0,10,5,5,2.]],tilted:0,threshold:-9.1598782455548644e-004,right_val:-0.1176707968115807,left_val:0.1147874966263771}],threshold:-0.7688630819320679},{simpleClassifiers:[{features:[[5,12,12,4,-1.],[5,13,12,2,2.]],tilted:0,threshold:9.1346232220530510e-003,right_val:-0.3859564960002899,left_val:0.0886986628174782},{features:[[7,9,8,6,-1.],[7,11,8,2,3.]],tilted:0,threshold:-2.4696369655430317e-003,right_val:-0.1464917063713074,left_val:0.1677206009626389},{features:[[2,10,15,4,-1.],[2,12,15,2,2.]],tilted:0,threshold:0.0589350201189518,right_val:0.6183267235755920,left_val:-0.0133940000087023},{features:[[5,15,12,3,-1.],[5,15,6,3,2.]],tilted:0,threshold:-8.9100059121847153e-003,right_val:0.0729398131370544,left_val:-0.2695023119449616},{features:[[7,4,3,14,-1.],[8,4,1,14,3.]],tilted:0,threshold:0.0177438799291849,right_val:0.4316602051258087,left_val:-0.0502171888947487},{features:[[7,15,8,3,-1.],[7,15,4,3,2.]],tilted:0,threshold:0.0110566504299641,right_val:-0.5286077260971069,left_val:0.0391558595001698},{features:[[1,2,8,6,-1.],[1,2,4,3,2.],[5,5,4,3,2.]],tilted:0,threshold:0.0161613207310438,right_val:-0.3761014044284821,left_val:0.0695810392498970},{features:[[14,9,6,8,-1.],[17,9,3,4,2.],[14,13,3,4,2.]],tilted:0,threshold:-0.0278790891170502,right_val:-0.0559795796871185,left_val:0.2322065979242325},{features:[[0,0,6,8,-1.],[0,0,3,4,2.],[3,4,3,4,2.]],tilted:0,threshold:-0.0115568395704031,right_val:0.0743399634957314,left_val:-0.3123108148574829},{features:[[14,9,6,8,-1.],[17,9,3,4,2.],[14,13,3,4,2.]],tilted:0,threshold:-0.0696514770388603,right_val:6.9694789126515388e-003,left_val:-0.4190568923950195},{features:[[2,9,6,8,-1.],[2,9,3,4,2.],[5,13,3,4,2.]],tilted:0,threshold:-5.0344727933406830e-003,right_val:-0.1970203071832657,left_val:0.1318362057209015},{features:[[14,10,6,8,-1.],[17,10,3,4,2.],[14,14,3,4,2.]],tilted:0,threshold:-0.0860981196165085,right_val:-9.5664570108056068e-003,left_val:0.6572775244712830},{features:[[2,10,6,8,-1.],[2,10,3,4,2.],[5,14,3,4,2.]],tilted:0,threshold:0.0255463197827339,right_val:0.5484703779220581,left_val:-0.0401363410055637},{features:[[13,1,6,8,-1.],[16,1,3,4,2.],[13,5,3,4,2.]],tilted:0,threshold:-0.0268708802759647,right_val:0.0441817194223404,left_val:-0.2530665099620819},{features:[[3,3,12,3,-1.],[3,4,12,1,3.]],tilted:0,threshold:9.5859682187438011e-003,right_val:0.2689467072486877,left_val:-0.0818824619054794},{features:[[13,1,6,8,-1.],[16,1,3,4,2.],[13,5,3,4,2.]],tilted:0,threshold:0.0266838092356920,right_val:-0.4412704110145569,left_val:0.0265933498740196},{features:[[3,1,6,8,-1.],[3,1,3,4,2.],[6,5,3,4,2.]],tilted:0,threshold:-0.0144908400252461,right_val:0.0700729414820671,left_val:-0.3569746911525726},{features:[[3,3,16,3,-1.],[3,4,16,1,3.]],tilted:0,threshold:-2.2448399104177952e-003,right_val:-0.1222817003726959,left_val:0.2008823007345200},{features:[[7,13,6,4,-1.],[7,15,6,2,2.]],tilted:0,threshold:4.8795710317790508e-003,right_val:-0.3949818909168243,left_val:0.0458209812641144},{features:[[10,14,6,4,-1.],[10,16,6,2,2.]],tilted:0,threshold:-6.1262990348041058e-003,right_val:0.0788120776414871,left_val:-0.1882608979940414},{features:[[2,10,15,3,-1.],[2,11,15,1,3.]],tilted:0,threshold:0.0169529691338539,right_val:0.3360370099544525,left_val:-0.0616842210292816},{features:[[8,12,8,6,-1.],[10,12,4,6,2.]],tilted:0,threshold:-4.5547191984951496e-003,right_val:0.0531471893191338,left_val:-0.1947139054536820},{features:[[2,4,13,4,-1.],[2,5,13,2,2.]],tilted:0,threshold:-1.2753040064126253e-003,right_val:-0.1424434930086136,left_val:0.1480087935924530},{features:[[9,9,12,3,-1.],[9,10,12,1,3.]],tilted:0,threshold:0.0220602806657553,right_val:0.3377530872821808,left_val:-0.0354067385196686},{features:[[3,13,16,4,-1.],[3,13,8,2,2.],[11,15,8,2,2.]],tilted:0,threshold:0.0210503898561001,right_val:-0.4588645100593567,left_val:0.0422891303896904},{features:[[8,12,8,6,-1.],[10,12,4,6,2.]],tilted:0,threshold:0.0956372097134590,right_val:0.5553498268127441,left_val:-0.0131716495379806},{features:[[6,12,8,6,-1.],[8,12,4,6,2.]],tilted:0,threshold:-3.6728319246321917e-003,right_val:0.0954581424593925,left_val:-0.1884289979934692},{features:[[9,4,13,2,-1.],[9,5,13,1,2.]],tilted:0,threshold:1.6345079347956926e-004,right_val:0.1053673028945923,left_val:-0.0604448094964027},{features:[[7,3,8,12,-1.],[7,9,8,6,2.]],tilted:0,threshold:0.2533828914165497,right_val:-0.9999446868896484,left_val:0.0160262603312731},{features:[[3,6,17,3,-1.],[3,7,17,1,3.]],tilted:0,threshold:-0.0461133308708668,right_val:-0.0278902091085911,left_val:0.5424798727035523},{features:[[3,0,14,4,-1.],[3,0,7,2,2.],[10,2,7,2,2.]],tilted:0,threshold:5.2588270045816898e-003,right_val:-0.2070070952177048,left_val:0.0798673033714294},{features:[[11,4,6,5,-1.],[11,4,3,5,2.]],tilted:1,threshold:-0.1344957053661346,right_val:8.1500215455889702e-003,left_val:-0.4127010107040405},{features:[[11,4,5,6,-1.],[11,4,5,3,2.]],tilted:1,threshold:1.6953679732978344e-003,right_val:-0.1680212020874023,left_val:0.1103534996509552},{features:[[10,5,4,6,-1.],[10,5,2,6,2.]],tilted:0,threshold:0.0394921414554119,right_val:0.3844763934612274,left_val:-0.0134100103750825},{features:[[4,12,12,3,-1.],[8,12,4,3,3.]],tilted:0,threshold:-9.3634781660512090e-004,right_val:-0.1731048971414566,left_val:0.1098681986331940},{features:[[8,6,8,7,-1.],[8,6,4,7,2.]],tilted:0,threshold:-0.0444957092404366,right_val:-0.0407688990235329,left_val:0.1947119981050491},{features:[[5,0,8,12,-1.],[5,0,4,6,2.],[9,6,4,6,2.]],tilted:0,threshold:0.0606301091611385,right_val:0.5141298770904541,left_val:-0.0422523692250252},{features:[[7,0,12,4,-1.],[13,0,6,2,2.],[7,2,6,2,2.]],tilted:0,threshold:7.5067640282213688e-003,right_val:-0.1608040034770966,left_val:0.0420869700610638},{features:[[1,4,6,5,-1.],[4,4,3,5,2.]],tilted:0,threshold:9.9260415881872177e-003,right_val:-0.2621530890464783,left_val:0.0641195327043533},{features:[[15,0,7,4,-1.],[15,0,7,2,2.]],tilted:1,threshold:0.0605285204946995,right_val:-0.3660838901996613,left_val:0.0241899695247412},{features:[[5,2,8,6,-1.],[5,2,4,3,2.],[9,5,4,3,2.]],tilted:0,threshold:-6.8054231815040112e-003,right_val:-0.1388971060514450,left_val:0.1250838935375214},{features:[[4,2,15,3,-1.],[4,3,15,1,3.]],tilted:0,threshold:-2.0940289832651615e-003,right_val:-0.0827063992619514,left_val:0.1399659961462021},{features:[[4,1,14,3,-1.],[4,2,14,1,3.]],tilted:0,threshold:-9.6904346719384193e-003,right_val:-0.0715769901871681,left_val:0.2668136060237885},{features:[[15,5,4,6,-1.],[15,8,4,3,2.]],tilted:0,threshold:0.0183203499764204,right_val:-0.2346061021089554,left_val:0.0313219800591469},{features:[[0,1,17,2,-1.],[0,2,17,1,2.]],tilted:0,threshold:5.0429959082975984e-004,right_val:0.1651464998722076,left_val:-0.1166971996426582},{features:[[15,5,4,6,-1.],[15,8,4,3,2.]],tilted:0,threshold:-4.7016288153827190e-003,right_val:0.0592004284262657,left_val:-0.1200615018606186},{features:[[3,5,4,6,-1.],[3,8,4,3,2.]],tilted:0,threshold:-0.0199268702417612,right_val:0.0411430187523365,left_val:-0.3948509991168976},{features:[[3,0,18,3,-1.],[3,1,18,1,3.]],tilted:0,threshold:7.4013080447912216e-003,right_val:0.2106536030769348,left_val:-0.0763312578201294},{features:[[7,1,6,4,-1.],[10,1,3,4,2.]],tilted:0,threshold:0.0148796299472451,right_val:-0.3401476144790649,left_val:0.0479790717363358},{features:[[0,11,22,7,-1.],[0,11,11,7,2.]],tilted:0,threshold:0.1552755981683731,right_val:-0.4693807959556580,left_val:0.0322258807718754},{features:[[3,5,4,12,-1.],[3,5,2,6,2.],[5,11,2,6,2.]],tilted:0,threshold:-7.0786331780254841e-003,right_val:-0.1200494021177292,left_val:0.1219948008656502},{features:[[14,7,3,10,-1.],[14,12,3,5,2.]],tilted:0,threshold:0.0298721697181463,right_val:0.2352982014417648,left_val:-0.0436775088310242},{features:[[4,11,14,4,-1.],[4,11,7,2,2.],[11,13,7,2,2.]],tilted:0,threshold:0.0305551700294018,right_val:-0.5782545208930969,left_val:0.0317758806049824},{features:[[7,11,8,6,-1.],[11,11,4,3,2.],[7,14,4,3,2.]],tilted:0,threshold:0.0102845700457692,right_val:-0.2956649959087372,left_val:0.0472028106451035},{features:[[3,5,3,13,-1.],[4,5,1,13,3.]],tilted:0,threshold:0.0198087096214294,right_val:0.3323101997375488,left_val:-0.0457759387791157},{features:[[17,1,4,12,-1.],[19,1,2,6,2.],[17,7,2,6,2.]],tilted:0,threshold:0.0272188801318407,right_val:-0.3318088054656982,left_val:0.0255772192031145},{features:[[1,1,4,12,-1.],[1,1,2,6,2.],[3,7,2,6,2.]],tilted:0,threshold:0.0140976803377271,right_val:-0.2935838103294373,left_val:0.0521574206650257},{features:[[7,0,13,16,-1.],[7,4,13,8,2.]],tilted:0,threshold:0.2428656965494156,right_val:-0.6985487937927246,left_val:0.0146924601867795},{features:[[1,4,13,2,-1.],[1,5,13,1,2.]],tilted:0,threshold:0.0124195702373981,right_val:0.3669505119323731,left_val:-0.0471058785915375},{features:[[9,14,6,4,-1.],[9,16,6,2,2.]],tilted:0,threshold:1.3503880472853780e-003,right_val:-0.2095365971326828,left_val:0.0537913590669632},{features:[[2,4,17,3,-1.],[2,5,17,1,3.]],tilted:0,threshold:-0.0156262908130884,right_val:-0.0600537508726120,left_val:0.2788845896720886},{features:[[14,0,3,10,-1.],[15,1,1,10,3.]],tilted:1,threshold:0.0158501397818327,right_val:0.1028752028942108,left_val:-0.0303249098360538},{features:[[7,0,8,3,-1.],[6,1,8,1,3.]],tilted:1,threshold:-0.0408689193427563,right_val:0.0176014993339777,left_val:-0.8040220737457275},{features:[[14,0,3,10,-1.],[15,1,1,10,3.]],tilted:1,threshold:0.0641086399555206,right_val:-0.5385494232177734,left_val:2.5845379568636417e-003},{features:[[8,0,10,3,-1.],[7,1,10,1,3.]],tilted:1,threshold:0.0499271005392075,right_val:-0.6178072094917297,left_val:0.0218633003532887},{features:[[11,1,2,7,-1.],[11,1,1,7,2.]],tilted:1,threshold:0.0146554196253419,right_val:-0.2042617052793503,left_val:0.0196633692830801},{features:[[8,0,3,14,-1.],[9,0,1,14,3.]],tilted:0,threshold:-0.0240948107093573,right_val:-0.0409541018307209,left_val:0.3760913014411926},{features:[[11,1,2,7,-1.],[11,1,1,7,2.]],tilted:1,threshold:0.0294177699834108,right_val:0.4044741988182068,left_val:-8.6903842166066170e-003},{features:[[11,1,7,2,-1.],[11,1,7,1,2.]],tilted:1,threshold:-0.0141586400568485,right_val:-0.0403216406702995,left_val:0.3781171143054962},{features:[[7,9,9,8,-1.],[10,9,3,8,3.]],tilted:0,threshold:-0.0467549897730350,right_val:-0.0289961099624634,left_val:0.2210430949926376},{features:[[1,7,4,8,-1.],[3,7,2,8,2.]],tilted:0,threshold:-0.0114379497244954,right_val:0.0582142882049084,left_val:-0.2503308951854706},{features:[[17,11,4,6,-1.],[17,11,2,6,2.]],tilted:0,threshold:-0.0425987802445889,right_val:-0.0163490902632475,left_val:0.3756220042705536},{features:[[8,12,6,6,-1.],[10,12,2,6,3.]],tilted:0,threshold:-0.0152011597529054,right_val:0.0386903695762157,left_val:-0.3563781976699829},{features:[[11,0,3,6,-1.],[12,1,1,6,3.]],tilted:1,threshold:0.0433788485825062,right_val:-0.4672946929931641,left_val:3.3045639283955097e-003},{features:[[11,0,6,3,-1.],[10,1,6,1,3.]],tilted:1,threshold:5.5153011344373226e-003,right_val:0.1879317015409470,left_val:-0.0835836082696915},{features:[[9,14,9,4,-1.],[12,14,3,4,3.]],tilted:0,threshold:-7.8126927837729454e-003,right_val:0.0438011288642883,left_val:-0.1658685952425003},{features:[[8,2,6,4,-1.],[8,2,6,2,2.]],tilted:1,threshold:0.0416526012122631,right_val:0.4351752102375031,left_val:-0.0318045206367970},{features:[[10,10,4,6,-1.],[10,10,2,6,2.]],tilted:0,threshold:3.4417589195072651e-003,right_val:-0.1308895945549011,left_val:0.0422822795808315},{features:[[1,8,18,2,-1.],[1,9,18,1,2.]],tilted:0,threshold:1.3004569336771965e-004,right_val:0.1396459937095642,left_val:-0.1126001030206680},{features:[[8,8,14,3,-1.],[8,9,14,1,3.]],tilted:0,threshold:-0.0773477330803871,right_val:-5.4134069941937923e-003,left_val:0.7075064778327942},{features:[[3,15,14,3,-1.],[10,15,7,3,2.]],tilted:0,threshold:-1.6143550164997578e-003,right_val:-0.1188426986336708,left_val:0.1192042008042336},{features:[[8,8,14,3,-1.],[8,9,14,1,3.]],tilted:0,threshold:-9.8279246594756842e-004,right_val:-0.0527811013162136,left_val:0.0631562769412994},{features:[[4,14,9,4,-1.],[7,14,3,4,3.]],tilted:0,threshold:-0.0456674695014954,right_val:0.0446007288992405,left_val:-0.3450087010860443}],threshold:-0.7757309079170227},{simpleClassifiers:[{features:[[10,6,4,8,-1.],[10,6,2,8,2.]],tilted:1,threshold:0.0733159780502319,right_val:0.4003581106662750,left_val:-0.1141010969877243},{features:[[2,11,18,3,-1.],[8,11,6,3,3.]],tilted:0,threshold:0.0252756699919701,right_val:0.3609578013420105,left_val:-0.0720138773322105},{features:[[10,0,12,4,-1.],[10,0,12,2,2.]],tilted:1,threshold:0.0188738591969013,right_val:0.1822322010993958,left_val:-0.1723437011241913},{features:[[6,6,16,4,-1.],[14,6,8,2,2.],[6,8,8,2,2.]],tilted:0,threshold:7.4607720307540148e-005,right_val:0.0888885036110878,left_val:-0.0816272869706154},{features:[[6,3,4,14,-1.],[7,3,2,14,2.]],tilted:0,threshold:4.2250280966982245e-004,right_val:0.1179141998291016,left_val:-0.1284023970365524},{features:[[12,12,6,6,-1.],[14,12,2,6,3.]],tilted:0,threshold:0.0144024603068829,right_val:0.1902469992637634,left_val:0.0209603402763605},{features:[[4,12,6,6,-1.],[6,12,2,6,3.]],tilted:0,threshold:-2.0460959058254957e-003,right_val:-0.2151706069707871,left_val:0.0957124978303909},{features:[[14,8,3,8,-1.],[14,12,3,4,2.]],tilted:0,threshold:7.1128448471426964e-003,right_val:0.2098432034254074,left_val:-0.0561004802584648},{features:[[0,6,16,4,-1.],[0,6,8,2,2.],[8,8,8,2,2.]],tilted:0,threshold:-6.5832170657813549e-003,right_val:0.0760941505432129,left_val:-0.2113818973302841},{features:[[9,10,5,6,-1.],[9,13,5,3,2.]],tilted:0,threshold:-4.1252959636040032e-004,right_val:-0.1567085981369019,left_val:0.1310734003782272},{features:[[7,5,6,12,-1.],[7,5,3,6,2.],[10,11,3,6,2.]],tilted:0,threshold:-0.0443308316171169,right_val:-0.0190594792366028,left_val:0.5404803752899170},{features:[[1,5,21,9,-1.],[8,8,7,3,9.]],tilted:0,threshold:0.0117001300677657,right_val:-0.1721616983413696,left_val:0.0517124012112617},{features:[[8,6,3,12,-1.],[9,6,1,12,3.]],tilted:0,threshold:3.5091140307486057e-003,right_val:0.1777625977993012,left_val:-0.0767679512500763},{features:[[11,3,3,11,-1.],[12,4,1,11,3.]],tilted:1,threshold:0.0155975697562099,right_val:-0.1473001986742020,left_val:0.0383078902959824},{features:[[11,5,9,3,-1.],[10,6,9,1,3.]],tilted:1,threshold:-0.0362853705883026,right_val:-0.0450184904038906,left_val:0.3534766137599945},{features:[[12,11,6,6,-1.],[12,13,6,2,3.]],tilted:0,threshold:-0.0451182983815670,right_val:0.0106467101722956,left_val:-0.5707414150238037},{features:[[0,1,9,9,-1.],[3,1,3,9,3.]],tilted:0,threshold:0.0137345800176263,right_val:-0.2048089057207108,left_val:0.0660183578729630},{features:[[6,0,12,12,-1.],[9,0,6,12,2.]],tilted:0,threshold:-0.0271209795027971,right_val:-0.0513949617743492,left_val:0.0480942092835903},{features:[[7,14,6,4,-1.],[10,14,3,4,2.]],tilted:0,threshold:-1.5354059869423509e-003,right_val:0.0530746094882488,left_val:-0.2354800999164581},{features:[[8,7,13,3,-1.],[8,8,13,1,3.]],tilted:0,threshold:3.6000818945467472e-003,right_val:0.1182541027665138,left_val:-0.0589443407952785},{features:[[2,13,12,4,-1.],[5,13,6,4,2.]],tilted:0,threshold:6.8916529417037964e-003,right_val:0.2690939903259277,left_val:-0.0500144883990288},{features:[[15,3,2,13,-1.],[15,3,1,13,2.]],tilted:1,threshold:3.5373449791222811e-003,right_val:0.0886970385909081,left_val:-0.1294703930616379},{features:[[9,5,11,2,-1.],[9,5,11,1,2.]],tilted:1,threshold:-4.1431561112403870e-003,right_val:0.0690981075167656,left_val:-0.1788363009691238},{features:[[13,2,2,16,-1.],[13,10,2,8,2.]],tilted:0,threshold:-0.1076257973909378,right_val:4.7263409942388535e-003,left_val:-1.},{features:[[7,2,2,16,-1.],[7,10,2,8,2.]],tilted:0,threshold:9.7946207970380783e-003,right_val:0.2411547005176544,left_val:-0.0540387704968452},{features:[[14,0,7,6,-1.],[12,2,7,2,3.]],tilted:1,threshold:0.0100542800500989,right_val:0.1162756010890007,left_val:-0.0806248933076859},{features:[[7,3,6,12,-1.],[7,3,3,6,2.],[10,9,3,6,2.]],tilted:0,threshold:-8.7350717512890697e-004,right_val:0.0774685069918633,left_val:-0.1819397956132889},{features:[[9,14,8,4,-1.],[9,16,8,2,2.]],tilted:0,threshold:9.4283261569216847e-004,right_val:-0.2273202985525131,left_val:0.0462650507688522},{features:[[11,3,11,3,-1.],[10,4,11,1,3.]],tilted:1,threshold:3.5424059024080634e-004,right_val:0.1109569966793060,left_val:-0.1182428970932961},{features:[[11,1,4,6,-1.],[12,2,2,6,2.]],tilted:1,threshold:-0.0385877899825573,right_val:3.1856179703027010e-003,left_val:-0.3028686940670013},{features:[[11,1,6,4,-1.],[10,2,6,2,2.]],tilted:1,threshold:-4.9504679627716541e-003,right_val:-0.0916903465986252,left_val:0.1375810056924820},{features:[[10,10,6,8,-1.],[12,10,2,8,3.]],tilted:0,threshold:-0.0254536308348179,right_val:0.0197479296475649,left_val:-0.2301352024078369},{features:[[2,4,12,4,-1.],[2,4,6,2,2.],[8,6,6,2,2.]],tilted:0,threshold:0.0158367007970810,right_val:0.2933708131313324,left_val:-0.0452521592378616},{features:[[14,1,3,10,-1.],[15,2,1,10,3.]],tilted:1,threshold:0.0103798797354102,right_val:-0.1641553044319153,left_val:0.0597066916525364},{features:[[0,7,22,7,-1.],[11,7,11,7,2.]],tilted:0,threshold:0.0431784503161907,right_val:-0.2136048972606659,left_val:0.0634605363011360},{features:[[8,2,14,3,-1.],[8,3,14,1,3.]],tilted:0,threshold:-2.2508678957819939e-003,right_val:-0.0595391802489758,left_val:0.1064511016011238},{features:[[0,2,14,3,-1.],[0,3,14,1,3.]],tilted:0,threshold:5.0743711180984974e-003,right_val:0.2299972027540207,left_val:-0.0943770334124565},{features:[[14,1,3,10,-1.],[15,2,1,10,3.]],tilted:1,threshold:-0.0306706503033638,right_val:-0.0231882091611624,left_val:0.2597576081752777},{features:[[8,1,10,3,-1.],[7,2,10,1,3.]],tilted:1,threshold:2.4162670597434044e-003,right_val:-0.1928738057613373,left_val:0.0879190564155579},{features:[[12,3,3,10,-1.],[13,4,1,10,3.]],tilted:1,threshold:-9.3405842781066895e-003,right_val:0.0293585006147623,left_val:-0.1093555986881256},{features:[[11,4,10,3,-1.],[10,5,10,1,3.]],tilted:1,threshold:0.0205137301236391,right_val:0.3054544925689697,left_val:-0.0525113493204117},{features:[[12,1,7,6,-1.],[12,3,7,2,3.]],tilted:0,threshold:-0.0436303801834583,right_val:0.0182615704834461,left_val:-0.4531044960021973},{features:[[0,3,14,3,-1.],[0,4,14,1,3.]],tilted:0,threshold:3.4857920836657286e-003,right_val:0.1487710028886795,left_val:-0.0970931202173233},{features:[[8,0,12,4,-1.],[14,0,6,2,2.],[8,2,6,2,2.]],tilted:0,threshold:0.0104116098955274,right_val:-0.2484963983297348,left_val:0.0429157316684723},{features:[[2,0,12,4,-1.],[2,0,6,2,2.],[8,2,6,2,2.]],tilted:0,threshold:-7.5155291706323624e-003,right_val:0.0516023188829422,left_val:-0.2662334144115448},{features:[[8,4,12,3,-1.],[8,5,12,1,3.]],tilted:0,threshold:7.2157550603151321e-003,right_val:0.1831496953964233,left_val:-0.0618781596422195},{features:[[0,1,14,2,-1.],[7,1,7,2,2.]],tilted:0,threshold:9.1090862406417727e-004,right_val:0.1222369968891144,left_val:-0.0974202826619148},{features:[[5,0,15,11,-1.],[10,0,5,11,3.]],tilted:0,threshold:-0.4006991088390350,right_val:4.7453590668737888e-003,left_val:-0.8183109164237976},{features:[[2,0,15,11,-1.],[7,0,5,11,3.]],tilted:0,threshold:-4.8033627681434155e-003,right_val:-0.1443651020526886,left_val:0.0941939875483513},{features:[[11,6,6,12,-1.],[14,6,3,6,2.],[11,12,3,6,2.]],tilted:0,threshold:-0.0211474299430847,right_val:-0.0447512716054916,left_val:0.2953240871429443},{features:[[7,5,6,6,-1.],[9,5,2,6,3.]],tilted:0,threshold:0.0186022594571114,right_val:0.2970671951770783,left_val:-0.0429937802255154},{features:[[14,13,6,5,-1.],[14,13,3,5,2.]],tilted:0,threshold:-8.1051718443632126e-003,right_val:-0.1324644982814789,left_val:0.1236922964453697},{features:[[6,10,6,8,-1.],[8,10,2,8,3.]],tilted:0,threshold:-8.3215925842523575e-003,right_val:0.0891510173678398,left_val:-0.1902258992195129},{features:[[10,10,6,6,-1.],[12,10,2,6,3.]],tilted:0,threshold:3.1376329716295004e-003,right_val:-0.0795528963208199,left_val:0.0415848195552826},{features:[[6,10,6,6,-1.],[8,10,2,6,3.]],tilted:0,threshold:0.0165560692548752,right_val:-0.3694730103015900,left_val:0.0449088588356972},{features:[[6,11,14,3,-1.],[6,11,7,3,2.]],tilted:0,threshold:0.0299197304993868,right_val:0.2428061962127686,left_val:-0.0377202592790127},{features:[[3,1,7,6,-1.],[3,3,7,2,3.]],tilted:0,threshold:-0.0519882887601852,right_val:0.0189267806708813,left_val:-0.6937226057052612},{features:[[11,8,6,10,-1.],[14,8,3,5,2.],[11,13,3,5,2.]],tilted:0,threshold:0.0755281075835228,right_val:0.2573269009590149,left_val:-0.0126113500446081},{features:[[8,5,3,13,-1.],[9,5,1,13,3.]],tilted:0,threshold:-2.5031189434230328e-003,right_val:-0.0916624665260315,left_val:0.1380728036165237},{features:[[11,0,6,4,-1.],[11,0,3,4,2.]],tilted:1,threshold:-5.9646938461810350e-004,right_val:0.0259372703731060,left_val:-0.0636546164751053},{features:[[11,0,4,6,-1.],[11,0,4,3,2.]],tilted:1,threshold:0.0103193400427699,right_val:-0.1740830987691879,left_val:0.0837918370962143},{features:[[14,3,2,12,-1.],[14,3,2,6,2.]],tilted:1,threshold:9.3816686421632767e-003,right_val:-0.1114158034324646,left_val:0.0278715305030346},{features:[[5,4,10,7,-1.],[10,4,5,7,2.]],tilted:0,threshold:0.0100234104320407,right_val:0.2190064042806625,left_val:-0.0699662491679192},{features:[[8,9,6,6,-1.],[10,9,2,6,3.]],tilted:0,threshold:-8.3700200775638223e-004,right_val:-0.1426136046648026,left_val:0.1009768992662430},{features:[[0,8,12,9,-1.],[4,11,4,3,9.]],tilted:0,threshold:0.0224687103182077,right_val:-0.1380742043256760,left_val:0.0940282121300697},{features:[[13,12,4,6,-1.],[13,15,4,3,2.]],tilted:0,threshold:0.0391152091324329,right_val:0.6518750786781311,left_val:-5.3969398140907288e-003},{features:[[5,12,5,6,-1.],[5,15,5,3,2.]],tilted:0,threshold:-1.5670569846406579e-003,right_val:-0.2001060992479324,left_val:0.0708860307931900},{features:[[12,4,2,11,-1.],[12,4,1,11,2.]],tilted:1,threshold:6.0749892145395279e-003,right_val:-0.0439185909926891,left_val:0.0353959389030933},{features:[[9,4,11,2,-1.],[9,4,11,1,2.]],tilted:1,threshold:-0.0431668907403946,right_val:-0.0234801806509495,left_val:0.5988184809684753},{features:[[11,8,6,10,-1.],[14,8,3,5,2.],[11,13,3,5,2.]],tilted:0,threshold:2.3302088957279921e-003,right_val:0.0439402088522911,left_val:-0.0728186890482903},{features:[[5,8,6,10,-1.],[5,8,3,5,2.],[8,13,3,5,2.]],tilted:0,threshold:0.0552365891635418,right_val:0.3635514974594116,left_val:-0.0351179204881191},{features:[[11,7,6,10,-1.],[14,7,3,5,2.],[11,12,3,5,2.]],tilted:0,threshold:0.0277743991464376,right_val:-0.1002677008509636,left_val:0.0300742909312248},{features:[[2,1,18,3,-1.],[2,2,18,1,3.]],tilted:0,threshold:8.4784086793661118e-003,right_val:0.2171134948730469,left_val:-0.0562433004379272},{features:[[16,4,6,7,-1.],[16,4,3,7,2.]],tilted:0,threshold:0.0132693601772189,right_val:-0.1642978042364121,left_val:0.0431383699178696},{features:[[5,7,6,10,-1.],[5,7,3,5,2.],[8,12,3,5,2.]],tilted:0,threshold:-0.0340722799301147,right_val:-0.0329146385192871,left_val:0.3941879868507385},{features:[[12,0,3,14,-1.],[12,7,3,7,2.]],tilted:0,threshold:-5.9365970082581043e-003,right_val:-0.0869715884327888,left_val:0.0648541226983070},{features:[[7,10,8,7,-1.],[11,10,4,7,2.]],tilted:0,threshold:-5.1997308619320393e-003,right_val:0.0654410123825073,left_val:-0.2171074002981186},{features:[[8,0,12,3,-1.],[8,1,12,1,3.]],tilted:0,threshold:3.0441130511462688e-003,right_val:0.0946628674864769,left_val:-0.0471716411411762},{features:[[3,0,13,4,-1.],[3,1,13,2,2.]],tilted:0,threshold:-2.2375459957402200e-004,right_val:-0.1045159026980400,left_val:0.1173989996314049},{features:[[7,11,12,4,-1.],[7,12,12,2,2.]],tilted:0,threshold:0.0494941398501396,right_val:-0.8820502161979675,left_val:9.9552040919661522e-003},{features:[[0,0,8,18,-1.],[4,0,4,18,2.]],tilted:0,threshold:0.0771270319819450,right_val:0.3715699911117554,left_val:-0.0366387590765953},{features:[[14,13,6,5,-1.],[14,13,3,5,2.]],tilted:0,threshold:-3.7054829299449921e-003,right_val:-0.0794984996318817,left_val:0.0462130792438984},{features:[[0,5,22,4,-1.],[11,5,11,4,2.]],tilted:0,threshold:0.1365543007850647,right_val:-0.6469228267669678,left_val:0.0208025798201561},{features:[[11,2,10,9,-1.],[11,5,10,3,3.]],tilted:0,threshold:-0.1691939979791641,right_val:4.3158119660802186e-004,left_val:-0.9014499187469482},{features:[[1,2,10,9,-1.],[1,5,10,3,3.]],tilted:0,threshold:5.2525149658322334e-003,right_val:-0.1575164049863815,left_val:0.0866862162947655},{features:[[18,6,2,12,-1.],[18,6,1,12,2.]],tilted:0,threshold:0.0579522587358952,right_val:-1.0001620054244995,left_val:1.3485850067809224e-003},{features:[[2,6,2,12,-1.],[3,6,1,12,2.]],tilted:0,threshold:-0.0306814592331648,right_val:0.0177308097481728,left_val:-0.6734688878059387},{features:[[15,6,4,12,-1.],[15,9,4,6,2.]],tilted:0,threshold:-0.0285564009100199,right_val:-0.0218073595315218,left_val:0.2491353005170822},{features:[[3,6,4,12,-1.],[3,9,4,6,2.]],tilted:0,threshold:5.8311191387474537e-003,right_val:-0.1258653998374939,left_val:0.1010965034365654},{features:[[14,13,6,5,-1.],[14,13,3,5,2.]],tilted:0,threshold:2.8870739042758942e-003,right_val:0.1479419022798538,left_val:-0.0454622805118561},{features:[[2,13,6,5,-1.],[5,13,3,5,2.]],tilted:0,threshold:-5.3575891070067883e-003,right_val:-0.2063605934381485,left_val:0.1084545999765396},{features:[[8,12,12,5,-1.],[11,12,6,5,2.]],tilted:0,threshold:0.0208518300205469,right_val:0.1200079992413521,left_val:-0.0256414301693439},{features:[[2,12,12,5,-1.],[5,12,6,5,2.]],tilted:0,threshold:2.9372319113463163e-003,right_val:0.2396713942289352,left_val:-0.0588329806923866},{features:[[12,12,6,6,-1.],[12,14,6,2,3.]],tilted:0,threshold:0.0101090697571635,right_val:-0.2502495944499970,left_val:0.0447247400879860},{features:[[0,10,16,8,-1.],[4,10,8,8,2.]],tilted:0,threshold:0.0620026402175426,right_val:-0.3877547979354858,left_val:0.0312366802245378},{features:[[13,1,8,8,-1.],[15,1,4,8,2.]],tilted:0,threshold:1.7331680282950401e-003,right_val:0.0587383098900318,left_val:-0.0766425207257271},{features:[[1,1,8,8,-1.],[3,1,4,8,2.]],tilted:0,threshold:-0.0466489009559155,right_val:-0.0282232593744993,left_val:0.4780037105083466},{features:[[14,8,3,8,-1.],[14,12,3,4,2.]],tilted:0,threshold:-0.0405850112438202,right_val:-0.0296085495501757,left_val:0.1959132999181747},{features:[[10,4,7,6,-1.],[10,4,7,3,2.]],tilted:1,threshold:0.0142973596230149,right_val:-0.2002439945936203,left_val:0.0804227814078331},{features:[[9,10,4,8,-1.],[9,14,4,4,2.]],tilted:0,threshold:-1.4215649571269751e-003,right_val:-0.1309012025594711,left_val:0.0976939424872398},{features:[[5,8,3,8,-1.],[5,12,3,4,2.]],tilted:0,threshold:5.2683628164231777e-003,right_val:0.2437804043292999,left_val:-0.0583763718605042}],threshold:-0.6976336836814880},{simpleClassifiers:[{features:[[6,9,4,9,-1.],[6,12,4,3,3.]],tilted:0,threshold:-2.6198190171271563e-003,right_val:-0.1912652999162674,left_val:0.1867370009422302},{features:[[6,3,16,4,-1.],[14,3,8,2,2.],[6,5,8,2,2.]],tilted:0,threshold:-0.0286290999501944,right_val:-0.0261868499219418,left_val:0.1288710981607437},{features:[[1,3,20,4,-1.],[1,3,10,2,2.],[11,5,10,2,2.]],tilted:0,threshold:7.1718869730830193e-003,right_val:-0.2032734006643295,left_val:0.0881585925817490},{features:[[9,5,6,12,-1.],[12,5,3,6,2.],[9,11,3,6,2.]],tilted:0,threshold:0.0116410404443741,right_val:0.1759178936481476,left_val:-0.0210582502186298},{features:[[1,6,2,12,-1.],[2,6,1,12,2.]],tilted:0,threshold:5.6764329783618450e-003,right_val:-0.2732929885387421,left_val:0.0499411597847939},{features:[[19,0,2,16,-1.],[19,0,1,16,2.]],tilted:0,threshold:-0.0443926900625229,right_val:-0.0186747796833515,left_val:0.5676612854003906},{features:[[1,0,2,16,-1.],[2,0,1,16,2.]],tilted:0,threshold:1.3367610517889261e-004,right_val:0.1354229003190994,left_val:-0.1299030929803848},{features:[[13,5,5,9,-1.],[13,8,5,3,3.]],tilted:0,threshold:-0.0441119484603405,right_val:-0.0133183998987079,left_val:0.2268483042716980},{features:[[5,16,12,2,-1.],[5,17,12,1,2.]],tilted:0,threshold:2.9443150851875544e-003,right_val:-0.2931117117404938,left_val:0.0431614592671394},{features:[[5,14,12,4,-1.],[5,15,12,2,2.]],tilted:0,threshold:3.5300010349601507e-003,right_val:-0.2632498145103455,left_val:0.0771937221288681},{features:[[5,3,12,9,-1.],[9,6,4,3,9.]],tilted:0,threshold:0.1011921018362045,right_val:0.3243021965026856,left_val:-0.0549242608249187},{features:[[7,5,13,2,-1.],[7,6,13,1,2.]],tilted:0,threshold:-0.0223485697060823,right_val:-0.0225184895098209,left_val:0.3080311119556427},{features:[[8,1,12,2,-1.],[8,1,12,1,2.]],tilted:1,threshold:6.4755380153656006e-003,right_val:0.1318611055612564,left_val:-0.1204577013850212},{features:[[0,4,22,8,-1.],[11,4,11,4,2.],[0,8,11,4,2.]],tilted:0,threshold:0.0109043195843697,right_val:-0.1830884963274002,left_val:0.1021798998117447},{features:[[2,3,6,4,-1.],[5,3,3,4,2.]],tilted:0,threshold:-0.0112566296011209,right_val:0.0554912202060223,left_val:-0.2918663918972015},{features:[[7,11,15,3,-1.],[7,12,15,1,3.]],tilted:0,threshold:3.6791800521314144e-003,right_val:0.0826633125543594,left_val:-0.0506146885454655},{features:[[5,7,6,7,-1.],[8,7,3,7,2.]],tilted:0,threshold:-0.0917212888598442,right_val:0.0193129591643810,left_val:-0.7712755203247070},{features:[[7,12,12,4,-1.],[13,12,6,2,2.],[7,14,6,2,2.]],tilted:0,threshold:0.0400998890399933,right_val:-0.8130282759666443,left_val:7.8663527965545654e-003},{features:[[0,11,16,2,-1.],[8,11,8,2,2.]],tilted:0,threshold:-0.0549564287066460,right_val:-0.0598255805671215,left_val:0.2905952036380768},{features:[[18,3,4,10,-1.],[18,3,4,5,2.]],tilted:1,threshold:0.2480465024709702,right_val:-0.6912195086479187,left_val:0.0116651896387339},{features:[[2,2,17,3,-1.],[2,3,17,1,3.]],tilted:0,threshold:-0.0342848002910614,right_val:-0.0320712514221668,left_val:0.4535839855670929},{features:[[10,14,12,4,-1.],[16,14,6,2,2.],[10,16,6,2,2.]],tilted:0,threshold:0.0254392307251692,right_val:-0.3792799115180969,left_val:0.0194671507924795},{features:[[1,9,11,6,-1.],[1,11,11,2,3.]],tilted:0,threshold:-0.0127206603065133,right_val:0.0615338310599327,left_val:-0.2121143043041229},{features:[[4,9,18,3,-1.],[4,10,18,1,3.]],tilted:0,threshold:0.0108310002833605,right_val:0.1694768965244293,left_val:-0.0514436811208725},{features:[[0,9,18,3,-1.],[0,10,18,1,3.]],tilted:0,threshold:-0.0219315700232983,right_val:-0.0566363595426083,left_val:0.2483938932418823},{features:[[11,5,11,12,-1.],[11,11,11,6,2.]],tilted:0,threshold:0.2939789891242981,right_val:-0.9369606971740723,left_val:0.0114115299656987},{features:[[5,12,6,6,-1.],[5,14,6,2,3.]],tilted:0,threshold:-0.0163422599434853,right_val:0.0443719811737537,left_val:-0.3158954977989197},{features:[[14,10,6,8,-1.],[17,10,3,4,2.],[14,14,3,4,2.]],tilted:0,threshold:-0.0442804992198944,right_val:-0.0214623194187880,left_val:0.2033734023571014},{features:[[0,5,11,12,-1.],[0,11,11,6,2.]],tilted:0,threshold:0.2650330960750580,right_val:-0.9122017025947571,left_val:0.0116331502795219},{features:[[15,3,2,12,-1.],[15,3,2,6,2.]],tilted:1,threshold:-0.0763784795999527,right_val:-0.0196720808744431,left_val:0.1868827044963837},{features:[[3,0,12,4,-1.],[3,0,6,2,2.],[9,2,6,2,2.]],tilted:0,threshold:-0.0100615704432130,right_val:0.0466202609241009,left_val:-0.2646203935146332},{features:[[14,10,6,8,-1.],[17,10,3,4,2.],[14,14,3,4,2.]],tilted:0,threshold:0.0249217301607132,right_val:0.2015450000762940,left_val:-0.0191313903778791},{features:[[5,12,8,6,-1.],[5,12,4,3,2.],[9,15,4,3,2.]],tilted:0,threshold:1.5098409676284064e-005,right_val:0.0761839672923088,left_val:-0.1624169051647186},{features:[[8,11,10,5,-1.],[8,11,5,5,2.]],tilted:0,threshold:-0.1008191034197807,right_val:7.4751500505954027e-004,left_val:-1.},{features:[[4,11,10,5,-1.],[9,11,5,5,2.]],tilted:0,threshold:0.0650585964322090,right_val:0.3516007959842682,left_val:-0.0404686406254768},{features:[[6,6,12,12,-1.],[12,6,6,6,2.],[6,12,6,6,2.]],tilted:0,threshold:-0.1219023987650871,right_val:0.0186370201408863,left_val:-0.5362455844879150},{features:[[7,10,6,8,-1.],[7,12,6,4,2.]],tilted:0,threshold:-9.8520738538354635e-004,right_val:-0.1129883006215096,left_val:0.1139819994568825},{features:[[7,8,15,10,-1.],[7,13,15,5,2.]],tilted:0,threshold:-0.2530061900615692,right_val:0.0123674003407359,left_val:-0.4337590932846069},{features:[[0,0,22,4,-1.],[0,0,11,2,2.],[11,2,11,2,2.]],tilted:0,threshold:7.5246659107506275e-003,right_val:-0.1858396977186203,left_val:0.0673554763197899},{features:[[10,3,12,3,-1.],[10,4,12,1,3.]],tilted:0,threshold:4.8102210275828838e-003,right_val:0.1284891068935394,left_val:-0.0658700615167618},{features:[[0,3,13,3,-1.],[0,4,13,1,3.]],tilted:0,threshold:-1.4562129508703947e-003,right_val:-0.1124845966696739,left_val:0.1811068952083588},{features:[[9,3,4,12,-1.],[9,6,4,6,2.]],tilted:0,threshold:-5.6546321138739586e-003,right_val:-0.1411557048559189,left_val:0.1036984026432037},{features:[[4,5,9,6,-1.],[4,8,9,3,2.]],tilted:0,threshold:-0.0319512896239758,right_val:0.0482818111777306,left_val:-0.3297160863876343},{features:[[11,6,2,9,-1.],[11,6,1,9,2.]],tilted:1,threshold:0.0421903803944588,right_val:0.1370130032300949,left_val:-0.0116448104381561},{features:[[9,2,4,8,-1.],[9,6,4,4,2.]],tilted:0,threshold:0.0126066599041224,right_val:0.2421005964279175,left_val:-0.0603958815336227},{features:[[7,0,8,10,-1.],[7,5,8,5,2.]],tilted:0,threshold:-6.0083861462771893e-003,right_val:-0.2024825960397720,left_val:0.0956776067614555},{features:[[11,5,9,2,-1.],[11,5,9,1,2.]],tilted:1,threshold:0.0406763888895512,right_val:0.3982402980327606,left_val:-0.0385064296424389},{features:[[17,0,3,11,-1.],[18,1,1,11,3.]],tilted:1,threshold:-0.0130102196708322,right_val:0.0325333103537560,left_val:-0.0778704434633255},{features:[[5,0,11,3,-1.],[4,1,11,1,3.]],tilted:1,threshold:-0.0566469691693783,right_val:0.0173756591975689,left_val:-0.9529355168342590},{features:[[9,6,4,7,-1.],[9,6,2,7,2.]],tilted:0,threshold:0.0373079702258110,right_val:0.4685631990432739,left_val:-0.0332614406943321},{features:[[3,11,6,6,-1.],[3,13,6,2,3.]],tilted:0,threshold:-0.0279863793402910,right_val:0.0285240299999714,left_val:-0.4635669887065888},{features:[[6,10,16,8,-1.],[6,12,16,4,2.]],tilted:0,threshold:-0.0750148966908455,right_val:-0.0158301591873169,left_val:0.2451989948749542},{features:[[11,6,9,3,-1.],[10,7,9,1,3.]],tilted:1,threshold:0.0276730805635452,right_val:0.3721557855606079,left_val:-0.0364583581686020},{features:[[12,11,8,6,-1.],[12,13,8,2,3.]],tilted:0,threshold:-0.0173129606992006,right_val:0.0432326197624207,left_val:-0.2211765944957733},{features:[[0,10,16,8,-1.],[0,12,16,4,2.]],tilted:0,threshold:-0.0588939487934113,right_val:-0.0376325286924839,left_val:0.3972674906253815},{features:[[10,14,12,4,-1.],[16,14,6,2,2.],[10,16,6,2,2.]],tilted:0,threshold:0.0131936799734831,right_val:-0.1751435995101929,left_val:0.0248577296733856},{features:[[2,11,8,6,-1.],[2,13,8,2,3.]],tilted:0,threshold:0.0382306799292564,right_val:-0.4345274865627289,left_val:0.0296351108700037},{features:[[6,11,16,4,-1.],[14,11,8,2,2.],[6,13,8,2,2.]],tilted:0,threshold:0.0168453995138407,right_val:-0.2376572042703629,left_val:0.0393387489020824},{features:[[0,11,22,6,-1.],[11,11,11,6,2.]],tilted:0,threshold:-0.1155946031212807,right_val:0.0323905386030674,left_val:-0.4000687897205353},{features:[[14,10,6,8,-1.],[17,10,3,4,2.],[14,14,3,4,2.]],tilted:0,threshold:-1.7385910032317042e-003,right_val:-0.0614746809005737,left_val:0.0485458187758923},{features:[[2,10,6,8,-1.],[2,10,3,4,2.],[5,14,3,4,2.]],tilted:0,threshold:-0.0336976684629917,right_val:-0.0655046030879021,left_val:0.2434500008821487},{features:[[6,4,15,12,-1.],[11,8,5,4,9.]],tilted:0,threshold:-0.3472279906272888,right_val:0.0155012002214789,left_val:-0.3361206054687500},{features:[[0,4,18,12,-1.],[6,8,6,4,9.]],tilted:0,threshold:0.0586680397391319,right_val:-0.2210492938756943,left_val:0.0680680572986603},{features:[[15,7,2,8,-1.],[15,7,1,8,2.]],tilted:1,threshold:0.0237181894481182,right_val:0.4732834100723267,left_val:-0.0147795695811510},{features:[[3,3,10,3,-1.],[2,4,10,1,3.]],tilted:1,threshold:0.0288127008825541,right_val:-0.4679769873619080,left_val:0.0333098806440830},{features:[[4,2,14,3,-1.],[4,3,14,1,3.]],tilted:0,threshold:0.0410237498581409,right_val:0.4942755103111267,left_val:-0.0282930005341768},{features:[[10,8,8,2,-1.],[10,8,8,1,2.]],tilted:1,threshold:-1.2017590051982552e-004,right_val:-0.1210749000310898,left_val:0.1036365032196045},{features:[[15,5,4,7,-1.],[15,5,2,7,2.]],tilted:1,threshold:-0.1090807020664215,right_val:3.2971999607980251e-003,left_val:-1.},{features:[[3,6,5,6,-1.],[3,9,5,3,2.]],tilted:0,threshold:-0.0459673590958118,right_val:-0.0192335192114115,left_val:0.6481946110725403},{features:[[14,1,8,6,-1.],[18,1,4,3,2.],[14,4,4,3,2.]],tilted:0,threshold:-0.0193457193672657,right_val:0.0390085391700268,left_val:-0.3314554989337921},{features:[[0,1,8,6,-1.],[0,1,4,3,2.],[4,4,4,3,2.]],tilted:0,threshold:0.0123127903789282,right_val:-0.2794392108917236,left_val:0.0410296283662319},{features:[[17,0,4,12,-1.],[18,0,2,12,2.]],tilted:0,threshold:2.1535221021622419e-003,right_val:0.1164774000644684,left_val:-0.0675450563430786},{features:[[1,0,4,12,-1.],[2,0,2,12,2.]],tilted:0,threshold:-0.0321587882936001,right_val:-0.0237302295863628,left_val:0.5474163889884949},{features:[[9,16,12,2,-1.],[9,17,12,1,2.]],tilted:0,threshold:-0.0275923591107130,right_val:8.4066214039921761e-003,left_val:-0.7531942129135132},{features:[[1,16,12,2,-1.],[1,17,12,1,2.]],tilted:0,threshold:0.0222645103931427,right_val:-0.9029129743576050,left_val:0.0121467402204871},{features:[[10,15,12,3,-1.],[10,16,12,1,3.]],tilted:0,threshold:0.0153613798320293,right_val:0.3213280141353607,left_val:-0.0316411890089512},{features:[[0,15,12,3,-1.],[0,16,12,1,3.]],tilted:0,threshold:-0.0123606603592634,right_val:-0.0453037582337856,left_val:0.2924863100051880},{features:[[10,14,12,4,-1.],[16,14,6,2,2.],[10,16,6,2,2.]],tilted:0,threshold:0.0229787491261959,right_val:0.1906094998121262,left_val:-0.0120544796809554},{features:[[0,14,12,4,-1.],[0,14,6,2,2.],[6,16,6,2,2.]],tilted:0,threshold:0.0232963804155588,right_val:-0.5185608267784119,left_val:0.0314090512692928},{features:[[9,11,12,4,-1.],[15,11,6,2,2.],[9,13,6,2,2.]],tilted:0,threshold:5.7384249521419406e-004,right_val:0.0815484523773193,left_val:-0.1029348969459534},{features:[[0,11,16,4,-1.],[0,11,8,2,2.],[8,13,8,2,2.]],tilted:0,threshold:-0.0330204702913761,right_val:-0.0447946786880493,left_val:0.4247055947780609},{features:[[8,12,9,6,-1.],[8,14,9,2,3.]],tilted:0,threshold:-0.0217130295932293,right_val:0.0129598798230290,left_val:-0.1482526063919067},{features:[[5,12,9,6,-1.],[5,14,9,2,3.]],tilted:0,threshold:-9.7430922323837876e-005,right_val:-0.1475397050380707,left_val:0.1189963966608048},{features:[[4,5,16,2,-1.],[4,5,8,2,2.]],tilted:0,threshold:-9.2907734215259552e-003,right_val:0.0541046410799026,left_val:-0.1163543015718460},{features:[[1,10,10,8,-1.],[1,10,5,4,2.],[6,14,5,4,2.]],tilted:0,threshold:0.0372448489069939,right_val:0.3794392943382263,left_val:-0.0344212017953396},{features:[[16,2,5,9,-1.],[13,5,5,3,3.]],tilted:1,threshold:0.1527702957391739,right_val:-0.3415508866310120,left_val:7.2725401259958744e-003},{features:[[4,4,4,6,-1.],[6,4,2,6,2.]],tilted:0,threshold:-0.0126634500920773,right_val:0.0382312610745430,left_val:-0.3059667050838471},{features:[[9,2,9,7,-1.],[12,2,3,7,3.]],tilted:0,threshold:-0.0748884230852127,right_val:0.0155016500502825,left_val:-0.3465895056724548},{features:[[4,2,9,7,-1.],[7,2,3,7,3.]],tilted:0,threshold:-0.0401145890355110,right_val:-0.0413136705756187,left_val:0.3262982070446014},{features:[[16,2,5,9,-1.],[13,5,5,3,3.]],tilted:1,threshold:-0.0964921116828918,right_val:-0.0171560104936361,left_val:0.1017284989356995},{features:[[6,2,9,5,-1.],[9,5,3,5,3.]],tilted:1,threshold:-0.1671283990144730,right_val:0.0180295594036579,left_val:-0.7765511870384216},{features:[[5,12,14,6,-1.],[5,14,14,2,3.]],tilted:0,threshold:-8.2981940358877182e-003,right_val:0.0589481405913830,left_val:-0.1439713984727860},{features:[[6,4,4,12,-1.],[6,4,2,6,2.],[8,10,2,6,2.]],tilted:0,threshold:-3.7844169419258833e-003,right_val:-0.0782564431428909,left_val:0.1709517985582352},{features:[[9,4,10,8,-1.],[9,4,5,8,2.]],tilted:0,threshold:-0.1607642024755478,right_val:-0.0134280500933528,left_val:0.2313822954893112},{features:[[7,5,6,8,-1.],[7,5,3,4,2.],[10,9,3,4,2.]],tilted:0,threshold:6.4544437918812037e-004,right_val:0.0832878202199936,left_val:-0.1442440003156662},{features:[[8,7,6,8,-1.],[11,7,3,4,2.],[8,11,3,4,2.]],tilted:0,threshold:0.0227373093366623,right_val:0.3551980853080750,left_val:-0.0341558195650578},{features:[[2,4,11,2,-1.],[2,4,11,1,2.]],tilted:1,threshold:-3.9030050393193960e-003,right_val:0.0646280124783516,left_val:-0.1873676925897598},{features:[[16,0,3,13,-1.],[17,0,1,13,3.]],tilted:0,threshold:-0.0511454306542873,right_val:-0.0111800497397780,left_val:0.6689270734786987},{features:[[2,0,18,3,-1.],[2,1,18,1,3.]],tilted:0,threshold:-6.0482369735836983e-003,right_val:-0.0630187019705772,left_val:0.1862275004386902},{features:[[15,8,6,4,-1.],[15,8,3,4,2.]],tilted:0,threshold:0.0117435697466135,right_val:-0.1333124935626984,left_val:0.0254492796957493},{features:[[2,0,13,3,-1.],[2,1,13,1,3.]],tilted:0,threshold:8.4120890824124217e-004,right_val:0.1331588029861450,left_val:-0.0933334678411484},{features:[[4,4,18,4,-1.],[4,6,18,2,2.]],tilted:0,threshold:-0.0377561710774899,right_val:0.0405697897076607,left_val:-0.2313880026340485},{features:[[3,3,10,9,-1.],[8,3,5,9,2.]],tilted:0,threshold:-0.0208675600588322,right_val:-0.1174419000744820,left_val:0.1005609035491943},{features:[[2,7,18,6,-1.],[8,9,6,2,9.]],tilted:0,threshold:-0.0398021787405014,right_val:0.1266818940639496,left_val:-0.1158571988344193}],threshold:-0.6897674202919006},{simpleClassifiers:[{features:[[10,4,11,2,-1.],[10,4,11,1,2.]],tilted:1,threshold:8.4546189755201340e-003,right_val:0.1983439028263092,left_val:-0.1628966033458710},{features:[[14,6,6,12,-1.],[17,6,3,6,2.],[14,12,3,6,2.]],tilted:0,threshold:0.0516104511916637,right_val:0.3374255001544952,left_val:-0.0308270901441574},{features:[[2,6,6,12,-1.],[2,6,3,6,2.],[5,12,3,6,2.]],tilted:0,threshold:-0.0649094432592392,right_val:-0.0598486512899399,left_val:0.2860228121280670},{features:[[3,4,16,6,-1.],[3,6,16,2,3.]],tilted:0,threshold:-4.3951408006250858e-003,right_val:-0.1263208985328674,left_val:0.1130265966057777},{features:[[1,11,16,3,-1.],[5,11,8,3,2.]],tilted:0,threshold:-0.0827568024396896,right_val:0.0219671800732613,left_val:-0.6079095005989075},{features:[[12,10,8,3,-1.],[12,10,4,3,2.]],tilted:0,threshold:-4.8698862083256245e-003,right_val:-0.0890095233917236,left_val:0.0858661904931068},{features:[[0,9,17,9,-1.],[0,12,17,3,3.]],tilted:0,threshold:0.0915124416351318,right_val:0.2673287093639374,left_val:-0.0533453486859798},{features:[[8,4,6,10,-1.],[11,4,3,5,2.],[8,9,3,5,2.]],tilted:0,threshold:3.6815661005675793e-003,right_val:-0.1794120967388153,left_val:0.0709156990051270},{features:[[2,4,16,8,-1.],[2,4,8,4,2.],[10,8,8,4,2.]],tilted:0,threshold:6.3032708130776882e-003,right_val:-0.1239148005843163,left_val:0.1237815022468567},{features:[[9,6,12,4,-1.],[15,6,6,2,2.],[9,8,6,2,2.]],tilted:0,threshold:5.8764131972566247e-004,right_val:0.0955457687377930,left_val:-0.0638136565685272},{features:[[9,3,4,6,-1.],[9,6,4,3,2.]],tilted:0,threshold:0.0146803203970194,right_val:0.2904059886932373,left_val:-0.0491835288703442},{features:[[15,5,7,4,-1.],[15,5,7,2,2.]],tilted:1,threshold:3.5624930169433355e-003,right_val:0.0489328317344189,left_val:-0.0975631475448608},{features:[[0,6,18,6,-1.],[0,6,9,3,2.],[9,9,9,3,2.]],tilted:0,threshold:-7.4473340064287186e-003,right_val:0.0847726464271545,left_val:-0.1595246046781540},{features:[[4,2,15,3,-1.],[4,3,15,1,3.]],tilted:0,threshold:0.0540109910070896,right_val:0.5734071731567383,left_val:-0.0205651503056288},{features:[[2,0,6,6,-1.],[5,0,3,6,2.]],tilted:0,threshold:-2.3613919038325548e-003,right_val:-0.0751481130719185,left_val:0.1495765000581741},{features:[[13,4,8,6,-1.],[17,4,4,3,2.],[13,7,4,3,2.]],tilted:0,threshold:0.0406654588878155,right_val:-0.5968567132949829,left_val:0.0147623997181654},{features:[[4,2,13,6,-1.],[4,4,13,2,3.]],tilted:0,threshold:0.0932583808898926,right_val:-0.6864386200904846,left_val:0.0130362100899220},{features:[[9,8,12,3,-1.],[9,9,12,1,3.]],tilted:0,threshold:2.8593749739229679e-003,right_val:0.0980746671557426,left_val:-0.0549046397209167},{features:[[1,8,16,3,-1.],[1,9,16,1,3.]],tilted:0,threshold:-4.9756402149796486e-003,right_val:-0.0825638324022293,left_val:0.1675197035074234},{features:[[11,4,5,8,-1.],[11,8,5,4,2.]],tilted:0,threshold:-2.2061138879507780e-003,right_val:-0.0846847966313362,left_val:0.0714861825108528},{features:[[3,4,11,2,-1.],[3,4,11,1,2.]],tilted:1,threshold:4.3787518516182899e-003,right_val:-0.1698897033929825,left_val:0.0752964392304420},{features:[[10,7,12,3,-1.],[10,8,12,1,3.]],tilted:0,threshold:-4.9143321812152863e-003,right_val:-0.0575791895389557,left_val:0.1627433001995087},{features:[[9,3,7,8,-1.],[9,3,7,4,2.]],tilted:1,threshold:-3.0191219411790371e-003,right_val:0.1152698025107384,left_val:-0.1245009973645210},{features:[[13,2,2,12,-1.],[13,2,2,6,2.]],tilted:1,threshold:6.8227178417146206e-003,right_val:-0.1009344980120659,left_val:0.0371669717133045},{features:[[0,9,12,4,-1.],[0,9,6,2,2.],[6,11,6,2,2.]],tilted:0,threshold:0.0351169817149639,right_val:0.3295919895172119,left_val:-0.0429974310100079},{features:[[11,7,8,6,-1.],[13,7,4,6,2.]],tilted:0,threshold:-1.4400649815797806e-003,right_val:0.0671088919043541,left_val:-0.0989222601056099},{features:[[0,8,6,6,-1.],[2,8,2,6,3.]],tilted:0,threshold:-4.6699359081685543e-003,right_val:0.0680383965373039,left_val:-0.1800343990325928},{features:[[11,7,8,6,-1.],[13,7,4,6,2.]],tilted:0,threshold:0.0376477204263210,right_val:0.1662711948156357,left_val:-0.0210317503660917},{features:[[3,7,8,6,-1.],[5,7,4,6,2.]],tilted:0,threshold:5.1745469681918621e-003,right_val:0.1091919019818306,left_val:-0.1184609010815620},{features:[[10,6,6,4,-1.],[10,6,3,4,2.]],tilted:0,threshold:7.7274879440665245e-003,right_val:0.2275228053331375,left_val:-0.0550973303616047},{features:[[4,8,12,10,-1.],[4,8,6,5,2.],[10,13,6,5,2.]],tilted:0,threshold:0.0291588492691517,right_val:-0.1777552068233490,left_val:0.0778855830430985},{features:[[15,7,6,10,-1.],[17,7,2,10,3.]],tilted:0,threshold:2.9885378899052739e-004,right_val:0.0511631108820438,left_val:-0.0788752809166908},{features:[[6,14,6,4,-1.],[9,14,3,4,2.]],tilted:0,threshold:1.4456070493906736e-004,right_val:0.0815740302205086,left_val:-0.1609764993190765},{features:[[8,13,10,4,-1.],[8,13,5,4,2.]],tilted:0,threshold:0.0478407405316830,right_val:-0.3131667971611023,left_val:0.0142105501145124},{features:[[2,0,4,18,-1.],[4,0,2,18,2.]],tilted:0,threshold:0.0439434684813023,right_val:0.4245035052299500,left_val:-0.0310024805366993},{features:[[11,0,8,10,-1.],[11,0,8,5,2.]],tilted:1,threshold:-0.1760338991880417,right_val:0.0137106403708458,left_val:-0.2162521928548813},{features:[[0,7,12,3,-1.],[0,8,12,1,3.]],tilted:0,threshold:-0.0270105507224798,right_val:-0.0285076200962067,left_val:0.4544829130172730},{features:[[17,0,2,10,-1.],[17,0,1,10,2.]],tilted:1,threshold:6.4534661360085011e-003,right_val:0.0830717235803604,left_val:-0.0496607087552547},{features:[[5,6,6,4,-1.],[5,8,6,2,2.]],tilted:0,threshold:-7.1115070022642612e-003,right_val:0.0650333613157272,left_val:-0.2250981032848358},{features:[[15,10,7,6,-1.],[15,12,7,2,3.]],tilted:0,threshold:-0.0251848492771387,right_val:0.0187510997056961,left_val:-0.1748033016920090},{features:[[0,10,7,6,-1.],[0,12,7,2,3.]],tilted:0,threshold:-8.8047432655002922e-005,right_val:-0.1070457994937897,left_val:0.1267789006233215},{features:[[13,12,6,6,-1.],[15,12,2,6,3.]],tilted:0,threshold:-0.0360202193260193,right_val:-0.0497720800340176,left_val:0.2464960068464279},{features:[[1,11,20,7,-1.],[11,11,10,7,2.]],tilted:0,threshold:7.6084570027887821e-003,right_val:-0.1367384046316147,left_val:0.1004144027829170},{features:[[13,5,4,9,-1.],[13,8,4,3,3.]],tilted:0,threshold:-8.2404967397451401e-003,right_val:-0.0527819618582726,left_val:0.1170326024293900},{features:[[2,12,8,6,-1.],[2,12,4,3,2.],[6,15,4,3,2.]],tilted:0,threshold:-7.2474818443879485e-004,right_val:0.1133349016308785,left_val:-0.1165003031492233},{features:[[9,14,6,4,-1.],[9,16,6,2,2.]],tilted:0,threshold:-7.8272278187796474e-005,right_val:-0.1589460968971252,left_val:0.0644256770610809},{features:[[7,12,8,6,-1.],[7,12,4,3,2.],[11,15,4,3,2.]],tilted:0,threshold:-2.0254699047654867e-003,right_val:0.0712168663740158,left_val:-0.1702708005905151},{features:[[6,1,12,14,-1.],[12,1,6,7,2.],[6,8,6,7,2.]],tilted:0,threshold:-0.1188203021883965,right_val:-0.0153252100571990,left_val:0.3287855088710785},{features:[[5,5,4,9,-1.],[5,8,4,3,3.]],tilted:0,threshold:-0.0162584297358990,right_val:-0.0562531985342503,left_val:0.2184889018535614},{features:[[5,13,12,4,-1.],[11,13,6,2,2.],[5,15,6,2,2.]],tilted:0,threshold:-6.8429792299866676e-003,right_val:0.0571078211069107,left_val:-0.2331349998712540},{features:[[9,7,8,3,-1.],[8,8,8,1,3.]],tilted:1,threshold:0.0349397100508213,right_val:0.4565196931362152,left_val:-0.0273338295519352},{features:[[7,5,8,10,-1.],[7,10,8,5,2.]],tilted:0,threshold:0.2297977954149246,right_val:-0.8716508746147156,left_val:0.0145089896395803},{features:[[7,1,8,3,-1.],[6,2,8,1,3.]],tilted:1,threshold:0.0433605983853340,right_val:-0.8750032782554627,left_val:8.4467595443129539e-003},{features:[[10,14,12,3,-1.],[10,15,12,1,3.]],tilted:0,threshold:-1.1806190013885498e-003,right_val:-0.0528342090547085,left_val:0.0781866982579231},{features:[[0,6,18,12,-1.],[0,12,18,6,2.]],tilted:0,threshold:-0.4177268147468567,right_val:0.0130481300875545,left_val:-0.8072922229766846},{features:[[9,8,6,6,-1.],[9,11,6,3,2.]],tilted:0,threshold:-0.0463152304291725,right_val:-0.0351923890411854,left_val:0.2937507927417755},{features:[[3,2,4,12,-1.],[3,2,2,6,2.],[5,8,2,6,2.]],tilted:0,threshold:-0.0402713008224964,right_val:0.0197685007005930,left_val:-0.5817453265190125},{features:[[13,2,2,12,-1.],[13,2,2,6,2.]],tilted:1,threshold:-0.0430124402046204,right_val:-0.0269776098430157,left_val:0.1088251024484634},{features:[[2,4,6,8,-1.],[2,4,3,4,2.],[5,8,3,4,2.]],tilted:0,threshold:2.8285770677030087e-003,right_val:-0.1572055071592331,left_val:0.0768370479345322},{features:[[14,10,4,6,-1.],[14,10,2,6,2.]],tilted:0,threshold:-0.0332046113908291,right_val:0.0159325394779444,left_val:-0.2315258979797363},{features:[[0,0,2,12,-1.],[0,6,2,6,2.]],tilted:0,threshold:-4.8097351100295782e-004,right_val:-0.1158946007490158,left_val:0.1104374006390572},{features:[[13,2,2,12,-1.],[13,2,2,6,2.]],tilted:1,threshold:2.9704240150749683e-003,right_val:0.0691073983907700,left_val:-0.0342437401413918},{features:[[9,2,12,2,-1.],[9,2,6,2,2.]],tilted:1,threshold:0.0118931904435158,right_val:-0.2050309032201767,left_val:0.0801228806376457},{features:[[10,9,12,4,-1.],[16,9,6,2,2.],[10,11,6,2,2.]],tilted:0,threshold:-0.0639636069536209,right_val:6.4783529378473759e-003,left_val:-0.8553075194358826},{features:[[0,9,12,4,-1.],[0,9,6,2,2.],[6,11,6,2,2.]],tilted:0,threshold:-5.6093540042638779e-003,right_val:-0.1007907018065453,left_val:0.1627894937992096},{features:[[17,9,4,9,-1.],[17,12,4,3,3.]],tilted:0,threshold:7.5979339890182018e-003,right_val:-0.1243126988410950,left_val:0.0541234090924263},{features:[[1,9,10,6,-1.],[1,9,5,3,2.],[6,12,5,3,2.]],tilted:0,threshold:0.0134808197617531,right_val:0.2525062859058380,left_val:-0.0637513026595116},{features:[[8,12,9,4,-1.],[8,14,9,2,2.]],tilted:0,threshold:-9.4613758847117424e-004,right_val:-0.0768371000885963,left_val:0.0428358688950539},{features:[[2,8,6,10,-1.],[2,8,3,5,2.],[5,13,3,5,2.]],tilted:0,threshold:-0.0380624905228615,right_val:-0.0639471337199211,left_val:0.1925217956304550},{features:[[7,10,12,6,-1.],[10,10,6,6,2.]],tilted:0,threshold:0.1241089999675751,right_val:-0.4265302121639252,left_val:7.9416595399379730e-003},{features:[[3,10,12,6,-1.],[6,10,6,6,2.]],tilted:0,threshold:-0.0922284424304962,right_val:0.0289649106562138,left_val:-0.5521062016487122},{features:[[20,0,2,12,-1.],[20,6,2,6,2.]],tilted:0,threshold:0.0151067702099681,right_val:-0.1668844968080521,left_val:0.0276093408465385},{features:[[0,0,2,12,-1.],[0,6,2,6,2.]],tilted:0,threshold:-0.0236542504280806,right_val:0.0395133309066296,left_val:-0.3437967896461487},{features:[[14,3,4,15,-1.],[14,3,2,15,2.]],tilted:0,threshold:0.0478813908994198,right_val:-0.1818519979715347,left_val:8.0661084502935410e-003},{features:[[0,1,16,14,-1.],[0,1,8,7,2.],[8,8,8,7,2.]],tilted:0,threshold:0.0854152888059616,right_val:0.2716900110244751,left_val:-0.0467524081468582},{features:[[11,0,8,10,-1.],[11,0,8,5,2.]],tilted:1,threshold:3.1524940859526396e-003,right_val:0.0683360025286675,left_val:-0.0864214003086090},{features:[[0,3,16,4,-1.],[0,3,8,2,2.],[8,5,8,2,2.]],tilted:0,threshold:-3.0099870637059212e-003,right_val:-0.1362684965133667,left_val:0.0893362089991570},{features:[[13,0,7,12,-1.],[13,4,7,4,3.]],tilted:0,threshold:-0.0581125207245350,right_val:0.0265364404767752,left_val:-0.1974812000989914},{features:[[5,3,11,15,-1.],[5,8,11,5,3.]],tilted:0,threshold:0.1277566999197006,right_val:0.3489640057086945,left_val:-0.0498380400240421},{features:[[13,0,7,12,-1.],[13,4,7,4,3.]],tilted:0,threshold:0.1201129034161568,right_val:0.3793754875659943,left_val:-6.3313432037830353e-003},{features:[[2,0,7,12,-1.],[2,4,7,4,3.]],tilted:0,threshold:4.7567482106387615e-003,right_val:-0.1354257017374039,left_val:0.1049041971564293},{features:[[4,5,18,12,-1.],[10,9,6,4,9.]],tilted:0,threshold:-0.0159023497253656,right_val:-0.0983760803937912,left_val:0.0617863014340401},{features:[[4,7,14,6,-1.],[4,7,7,3,2.],[11,10,7,3,2.]],tilted:0,threshold:-0.0564237087965012,right_val:0.0202245991677046,left_val:-0.6337103247642517},{features:[[7,9,13,3,-1.],[7,10,13,1,3.]],tilted:0,threshold:-0.0796413272619247,right_val:8.7428308324888349e-004,left_val:-1.},{features:[[2,9,13,3,-1.],[2,10,13,1,3.]],tilted:0,threshold:-2.0731301046907902e-003,right_val:-0.0958653017878532,left_val:0.1384645998477936},{features:[[5,9,17,3,-1.],[5,10,17,1,3.]],tilted:0,threshold:5.8470368385314941e-003,right_val:0.1169179975986481,left_val:-0.0570338405668736},{features:[[1,1,10,9,-1.],[1,4,10,3,3.]],tilted:0,threshold:-0.0261389501392841,right_val:0.0555466301739216,left_val:-0.2236243933439255},{features:[[4,1,16,8,-1.],[4,3,16,4,2.]],tilted:0,threshold:-6.5781630109995604e-004,right_val:-0.0841521173715591,left_val:0.0929992273449898},{features:[[6,5,6,12,-1.],[8,5,2,12,3.]],tilted:0,threshold:-0.0560413897037506,right_val:-0.0314722806215286,left_val:0.3507285118103027},{features:[[11,7,6,5,-1.],[11,7,3,5,2.]],tilted:1,threshold:0.0977998003363609,right_val:-0.3771406114101410,left_val:0.0101244300603867},{features:[[5,4,9,5,-1.],[8,4,3,5,3.]],tilted:0,threshold:4.5515140518546104e-003,right_val:0.1416697055101395,left_val:-0.0783113613724709},{features:[[2,12,18,4,-1.],[11,12,9,2,2.],[2,14,9,2,2.]],tilted:0,threshold:0.0101683801040053,right_val:-0.2442279011011124,left_val:0.0521139912307262},{features:[[11,4,9,3,-1.],[10,5,9,1,3.]],tilted:1,threshold:0.0628854036331177,right_val:0.6284729242324829,left_val:-0.0182555094361305},{features:[[15,0,2,10,-1.],[15,0,1,10,2.]],tilted:1,threshold:-0.0480641312897205,right_val:6.6064838320016861e-003,left_val:-0.8681743144989014},{features:[[0,5,18,12,-1.],[6,9,6,4,9.]],tilted:0,threshold:0.0184799004346132,right_val:-0.1592939943075180,left_val:0.0699778124690056},{features:[[14,9,4,6,-1.],[14,9,2,6,2.]],tilted:0,threshold:0.0245498400181532,right_val:0.1796191930770874,left_val:-0.0175191201269627},{features:[[5,6,3,12,-1.],[5,10,3,4,3.]],tilted:0,threshold:0.0392274707555771,right_val:0.2794578969478607,left_val:-0.0474179908633232},{features:[[11,0,3,9,-1.],[12,1,1,9,3.]],tilted:1,threshold:0.0412481985986233,right_val:-0.4347747862339020,left_val:0.0114593701437116},{features:[[1,9,4,9,-1.],[1,12,4,3,3.]],tilted:0,threshold:-8.4321142639964819e-004,right_val:-0.0970105603337288,left_val:0.1275885999202728},{features:[[18,9,4,9,-1.],[18,12,4,3,3.]],tilted:0,threshold:-0.0136887403205037,right_val:0.0432909503579140,left_val:-0.1623619049787521},{features:[[6,9,6,4,-1.],[9,9,3,4,2.]],tilted:0,threshold:-0.0559825114905834,right_val:0.0157977100461721,left_val:-0.7543113827705383},{features:[[11,0,3,9,-1.],[12,1,1,9,3.]],tilted:1,threshold:0.0735782682895660,right_val:-1.0000350475311279,left_val:-1.4777439646422863e-003},{features:[[11,0,9,3,-1.],[10,1,9,1,3.]],tilted:1,threshold:3.7084969226270914e-003,right_val:0.1243532970547676,left_val:-0.0971846431493759},{features:[[5,15,12,2,-1.],[5,16,12,1,2.]],tilted:0,threshold:-1.4889879821566865e-005,right_val:-0.1684084981679916,left_val:0.0714653432369232},{features:[[0,0,22,2,-1.],[11,0,11,2,2.]],tilted:0,threshold:0.1048756018280983,right_val:-0.7115948200225830,left_val:0.0150766503065825},{features:[[20,0,2,13,-1.],[20,0,1,13,2.]],tilted:0,threshold:0.0125874895602465,right_val:0.1746868044137955,left_val:-0.0207713004201651},{features:[[0,0,2,13,-1.],[1,0,1,13,2.]],tilted:0,threshold:-2.2228389570955187e-004,right_val:-0.0926274582743645,left_val:0.1178164035081863},{features:[[10,1,6,6,-1.],[12,1,2,6,3.]],tilted:0,threshold:-0.0777604132890701,right_val:3.6328181158751249e-003,left_val:-0.7460541129112244},{features:[[6,1,6,6,-1.],[8,1,2,6,3.]],tilted:0,threshold:0.0450434200465679,right_val:-0.5005291104316711,left_val:0.0222178697586060},{features:[[10,7,12,3,-1.],[10,8,12,1,3.]],tilted:0,threshold:3.5614410880953074e-003,right_val:0.0899865031242371,left_val:-0.0512132197618485},{features:[[0,7,12,3,-1.],[0,8,12,1,3.]],tilted:0,threshold:-7.4102368671447039e-004,right_val:-0.1027221977710724,left_val:0.1393804997205734}],threshold:-0.6816900968551636},{simpleClassifiers:[{features:[[1,9,8,6,-1.],[1,9,4,3,2.],[5,12,4,3,2.]],tilted:0,threshold:-8.5600130259990692e-003,right_val:-0.1641291975975037,left_val:0.1657890975475311},{features:[[10,10,7,4,-1.],[10,12,7,2,2.]],tilted:0,threshold:0.0307988096028566,right_val:0.2857865095138550,left_val:-0.0334956496953964},{features:[[8,10,4,6,-1.],[10,10,2,6,2.]],tilted:0,threshold:-3.7319411057978868e-004,right_val:-0.1211517006158829,left_val:0.1252344995737076},{features:[[13,6,8,4,-1.],[13,6,4,4,2.]],tilted:1,threshold:-0.0192538499832153,right_val:0.0390665717422962,left_val:-0.0877408832311630},{features:[[10,1,8,7,-1.],[12,3,4,7,2.]],tilted:1,threshold:-8.5401646792888641e-003,right_val:-0.1300774067640305,left_val:0.1315227001905441},{features:[[8,5,8,7,-1.],[8,5,4,7,2.]],tilted:0,threshold:0.1242434978485107,right_val:-0.7824705243110657,left_val:0.0190199799835682},{features:[[6,5,8,7,-1.],[10,5,4,7,2.]],tilted:0,threshold:0.0400934182107449,right_val:0.3885174989700317,left_val:-0.0407437682151794},{features:[[6,3,16,12,-1.],[14,3,8,6,2.],[6,9,8,6,2.]],tilted:0,threshold:-4.4169559259898961e-005,right_val:-0.0880638062953949,left_val:0.0455269701778889},{features:[[4,11,6,6,-1.],[4,13,6,2,3.]],tilted:0,threshold:-0.0176628492772579,right_val:0.0517943389713764,left_val:-0.3137181103229523},{features:[[4,2,18,14,-1.],[13,2,9,7,2.],[4,9,9,7,2.]],tilted:0,threshold:0.0523685105144978,right_val:0.1500973999500275,left_val:-0.0358459986746311},{features:[[5,0,11,12,-1.],[5,3,11,6,2.]],tilted:0,threshold:-0.0287192799150944,right_val:0.0780990719795227,left_val:-0.1984937936067581},{features:[[4,7,16,9,-1.],[4,10,16,3,3.]],tilted:0,threshold:0.0694357901811600,right_val:0.2178084999322891,left_val:-0.0550737306475639},{features:[[0,1,18,3,-1.],[0,2,18,1,3.]],tilted:0,threshold:0.0547944381833076,right_val:0.6299396753311157,left_val:-0.0302236899733543},{features:[[12,13,6,4,-1.],[12,15,6,2,2.]],tilted:0,threshold:-0.0153155000880361,right_val:0.0201943702995777,left_val:-0.1505279988050461},{features:[[1,10,6,8,-1.],[1,10,3,4,2.],[4,14,3,4,2.]],tilted:0,threshold:0.0290019698441029,right_val:0.4564509987831116,left_val:-0.0207389891147614},{features:[[14,12,8,6,-1.],[18,12,4,3,2.],[14,15,4,3,2.]],tilted:0,threshold:-0.0232647694647312,right_val:-0.0380813516676426,left_val:0.1467252969741821},{features:[[9,3,12,3,-1.],[13,7,4,3,3.]],tilted:1,threshold:0.0190631095319986,right_val:-0.2272370010614395,left_val:0.0729212388396263},{features:[[8,12,6,6,-1.],[8,12,3,6,2.]],tilted:0,threshold:1.2208239641040564e-003,right_val:-0.1912292987108231,left_val:0.0734713226556778},{features:[[4,8,14,10,-1.],[4,13,14,5,2.]],tilted:0,threshold:-0.1756591051816940,right_val:-0.0560151189565659,left_val:0.2592468857765198},{features:[[11,2,8,8,-1.],[11,2,4,8,2.]],tilted:1,threshold:-0.0380421318113804,right_val:-0.0437588207423687,left_val:0.1611361056566238},{features:[[9,6,4,8,-1.],[9,6,4,4,2.]],tilted:1,threshold:0.0301302596926689,right_val:-0.2977417111396790,left_val:0.0578308291733265},{features:[[18,3,4,10,-1.],[18,3,4,5,2.]],tilted:1,threshold:0.0200892202556133,right_val:0.0334416814148426,left_val:-0.0605096295475960},{features:[[5,15,12,3,-1.],[9,15,4,3,3.]],tilted:0,threshold:2.6193389203399420e-004,right_val:0.1109410971403122,left_val:-0.1517544984817505},{features:[[11,8,4,6,-1.],[11,8,4,3,2.]],tilted:1,threshold:0.0403106287121773,right_val:-0.1418537944555283,left_val:0.0174771193414927},{features:[[11,8,6,4,-1.],[11,8,3,4,2.]],tilted:1,threshold:-2.9343019705265760e-003,right_val:0.0935302525758743,left_val:-0.1696013957262039},{features:[[3,13,16,5,-1.],[7,13,8,5,2.]],tilted:0,threshold:0.0145545201376081,right_val:0.2777166068553925,left_val:-0.0758445262908936},{features:[[6,2,4,12,-1.],[6,2,2,6,2.],[8,8,2,6,2.]],tilted:0,threshold:3.4086001105606556e-003,right_val:-0.1962659060955048,left_val:0.0739333108067513},{features:[[2,14,18,4,-1.],[11,14,9,2,2.],[2,16,9,2,2.]],tilted:0,threshold:-6.7988429218530655e-003,right_val:0.0582760386168957,left_val:-0.2013248056173325},{features:[[3,1,12,3,-1.],[3,2,12,1,3.]],tilted:0,threshold:-5.0457930192351341e-003,right_val:-0.0716915801167488,left_val:0.1944606006145477},{features:[[6,1,16,3,-1.],[6,2,16,1,3.]],tilted:0,threshold:0.0104650100693107,right_val:0.1931611001491547,left_val:-0.0473145917057991},{features:[[5,3,8,3,-1.],[9,3,4,3,2.]],tilted:0,threshold:-1.6713530058041215e-003,right_val:-0.1189012974500656,left_val:0.0929151475429535},{features:[[16,3,4,6,-1.],[16,3,4,3,2.]],tilted:1,threshold:-0.0427043586969376,right_val:-0.0206326507031918,left_val:0.1696103960275650},{features:[[4,3,10,4,-1.],[4,3,5,4,2.]],tilted:1,threshold:0.2036782950162888,right_val:-0.4942026138305664,left_val:0.0232468992471695},{features:[[14,5,6,8,-1.],[17,5,3,4,2.],[14,9,3,4,2.]],tilted:0,threshold:-8.3379482384771109e-004,right_val:-0.0737798064947128,left_val:0.0500010699033737},{features:[[1,2,14,12,-1.],[1,5,14,6,2.]],tilted:0,threshold:0.1785476952791214,right_val:-0.7765008211135864,left_val:0.0155882900580764},{features:[[11,2,6,12,-1.],[11,5,6,6,2.]],tilted:0,threshold:-0.1353528946638107,right_val:3.1595760956406593e-003,left_val:-0.5229911208152771},{features:[[5,2,6,12,-1.],[5,5,6,6,2.]],tilted:0,threshold:0.0465552695095539,right_val:0.3032479882240295,left_val:-0.0418910607695580},{features:[[11,5,8,5,-1.],[11,5,4,5,2.]],tilted:1,threshold:0.0226636491715908,right_val:-0.0851962268352509,left_val:0.0388511605560780},{features:[[4,0,9,18,-1.],[7,0,3,18,3.]],tilted:0,threshold:-0.2302772998809815,right_val:0.0139423497021198,left_val:-0.9350309967994690},{features:[[11,14,6,4,-1.],[11,16,6,2,2.]],tilted:0,threshold:0.0257141403853893,right_val:0.7806320190429688,left_val:-9.1460775583982468e-003},{features:[[5,14,6,4,-1.],[5,16,6,2,2.]],tilted:0,threshold:-7.3728510869841557e-006,right_val:-0.2004217058420181,left_val:0.0627309232950211},{features:[[12,13,6,4,-1.],[12,15,6,2,2.]],tilted:0,threshold:-0.0197578892111778,right_val:0.0146009000018239,left_val:-0.2343472987413406},{features:[[1,6,13,3,-1.],[1,7,13,1,3.]],tilted:0,threshold:-4.1893101297318935e-003,right_val:-0.0693688690662384,left_val:0.1497139930725098},{features:[[10,6,12,3,-1.],[10,7,12,1,3.]],tilted:0,threshold:1.1314969742670655e-003,right_val:0.1044744029641151,left_val:-0.0692035928368568},{features:[[1,8,6,4,-1.],[4,8,3,4,2.]],tilted:0,threshold:6.3914088532328606e-003,right_val:-0.1986276954412460,left_val:0.0561340302228928},{features:[[14,12,6,6,-1.],[16,12,2,6,3.]],tilted:0,threshold:-3.7047569639980793e-003,right_val:-0.0952822864055634,left_val:0.0968172922730446},{features:[[2,12,6,6,-1.],[4,12,2,6,3.]],tilted:0,threshold:0.0306274592876434,right_val:0.2602388858795166,left_val:-0.0500796400010586},{features:[[7,15,12,3,-1.],[11,15,4,3,3.]],tilted:0,threshold:0.0324444398283958,right_val:-0.2078860998153687,left_val:0.0310999397188425},{features:[[1,12,8,5,-1.],[5,12,4,5,2.]],tilted:0,threshold:0.0116515597328544,right_val:0.2537410855293274,left_val:-0.0583119504153728},{features:[[14,5,6,8,-1.],[17,5,3,4,2.],[14,9,3,4,2.]],tilted:0,threshold:-0.0365152209997177,right_val:0.0205362495034933,left_val:-0.2674919068813324},{features:[[2,5,6,8,-1.],[2,5,3,4,2.],[5,9,3,4,2.]],tilted:0,threshold:0.0174746308475733,right_val:-0.3371900916099548,left_val:0.0474169813096523},{features:[[14,11,8,6,-1.],[18,11,4,3,2.],[14,14,4,3,2.]],tilted:0,threshold:-1.5204170485958457e-003,right_val:-0.0958449468016624,left_val:0.0589338093996048},{features:[[4,0,8,6,-1.],[4,0,4,3,2.],[8,3,4,3,2.]],tilted:0,threshold:0.0477611795067787,right_val:-0.8663501739501953,left_val:0.0108497003093362},{features:[[14,3,7,4,-1.],[14,3,7,2,2.]],tilted:1,threshold:-0.0635691136121750,right_val:-0.0181565806269646,left_val:0.2585859894752502},{features:[[0,11,8,6,-1.],[0,11,4,3,2.],[4,14,4,3,2.]],tilted:0,threshold:-1.7476839711889625e-003,right_val:-0.1429527997970581,left_val:0.0757502466440201},{features:[[4,13,14,4,-1.],[4,15,14,2,2.]],tilted:0,threshold:-4.6762558631598949e-003,right_val:0.1313527971506119,left_val:-0.0912233963608742},{features:[[5,3,9,8,-1.],[8,3,3,8,3.]],tilted:0,threshold:0.0222021006047726,right_val:0.2074397951364517,left_val:-0.0533974505960941},{features:[[5,0,15,8,-1.],[10,0,5,8,3.]],tilted:0,threshold:-0.2464735954999924,right_val:3.5777890589088202e-003,left_val:-0.4561021924018860},{features:[[2,0,15,8,-1.],[7,0,5,8,3.]],tilted:0,threshold:5.0148782320320606e-003,right_val:-0.1623649001121521,left_val:0.0888718292117119},{features:[[14,0,6,11,-1.],[16,0,2,11,3.]],tilted:0,threshold:-0.0420239716768265,right_val:-0.0119267599657178,left_val:0.1280557960271835},{features:[[0,16,18,2,-1.],[6,16,6,2,3.]],tilted:0,threshold:-0.1089551970362663,right_val:0.0159055497497320,left_val:-0.6646612286567688},{features:[[5,3,12,9,-1.],[9,6,4,3,9.]],tilted:0,threshold:-0.3667292892932892,right_val:-0.0312062297016382,left_val:0.3637480139732361},{features:[[8,3,4,7,-1.],[8,3,2,7,2.]],tilted:1,threshold:9.5884501934051514e-003,right_val:-0.1249236017465591,left_val:0.0910735502839088},{features:[[10,3,6,8,-1.],[12,3,2,8,3.]],tilted:0,threshold:1.6124530229717493e-003,right_val:-0.0587492398917675,left_val:0.0337519794702530},{features:[[6,3,6,8,-1.],[8,3,2,8,3.]],tilted:0,threshold:-0.0178824309259653,right_val:-0.0632152333855629,left_val:0.2099276930093765},{features:[[7,13,12,4,-1.],[7,15,12,2,2.]],tilted:0,threshold:-6.6655018599703908e-005,right_val:-0.1790881007909775,left_val:0.0550200305879116},{features:[[3,9,16,8,-1.],[3,9,8,4,2.],[11,13,8,4,2.]],tilted:0,threshold:-0.0109126102179289,right_val:0.0640889033675194,left_val:-0.1787886023521423},{features:[[9,0,13,3,-1.],[9,1,13,1,3.]],tilted:0,threshold:-1.9031569827347994e-003,right_val:-0.0625764429569244,left_val:0.1101256012916565},{features:[[4,0,4,12,-1.],[4,0,2,6,2.],[6,6,2,6,2.]],tilted:0,threshold:4.7322059981524944e-003,right_val:-0.1752125024795532,left_val:0.0606118105351925},{features:[[1,11,20,4,-1.],[6,11,10,4,2.]],tilted:0,threshold:0.1795500069856644,right_val:0.5146319866180420,left_val:-0.0264137107878923},{features:[[3,14,6,4,-1.],[6,14,3,4,2.]],tilted:0,threshold:-1.8869279883801937e-003,right_val:-0.1897756010293961,left_val:0.0707328692078590},{features:[[10,6,12,3,-1.],[10,7,12,1,3.]],tilted:0,threshold:-3.5322420299053192e-003,right_val:-0.0492516607046127,left_val:0.0958002880215645},{features:[[0,6,12,3,-1.],[0,7,12,1,3.]],tilted:0,threshold:1.0818409500643611e-003,right_val:0.1409244984388351,left_val:-0.0970824882388115},{features:[[6,2,14,6,-1.],[6,4,14,2,3.]],tilted:0,threshold:-0.0954552590847015,right_val:8.8187018409371376e-003,left_val:-0.6837651729583740},{features:[[4,1,6,4,-1.],[4,1,6,2,2.]],tilted:1,threshold:1.6179149970412254e-003,right_val:0.1135148033499718,left_val:-0.0951295793056488},{features:[[1,0,21,18,-1.],[8,0,7,18,3.]],tilted:0,threshold:0.6554787755012512,right_val:-0.5658118724822998,left_val:9.7635984420776367e-003},{features:[[5,0,14,2,-1.],[5,0,7,2,2.]],tilted:1,threshold:-0.0779737234115601,right_val:-0.0331261307001114,left_val:0.3557372987270355},{features:[[14,8,4,9,-1.],[14,11,4,3,3.]],tilted:0,threshold:0.0202090293169022,right_val:-0.1358025074005127,left_val:0.0393016114830971},{features:[[2,0,6,10,-1.],[4,0,2,10,3.]],tilted:0,threshold:0.0903235897421837,right_val:0.6940913200378418,left_val:-0.0159329306334257},{features:[[5,11,12,4,-1.],[11,11,6,2,2.],[5,13,6,2,2.]],tilted:0,threshold:-6.2048831023275852e-003,right_val:0.0680906772613525,left_val:-0.1703765988349915},{features:[[8,5,4,6,-1.],[10,5,2,6,2.]],tilted:0,threshold:-0.0157372504472733,right_val:-0.0665289387106895,left_val:0.1625010967254639},{features:[[7,1,15,9,-1.],[12,4,5,3,9.]],tilted:0,threshold:-0.0353970415890217,right_val:0.0491357408463955,left_val:-0.0897665470838547},{features:[[0,1,15,9,-1.],[5,4,5,3,9.]],tilted:0,threshold:0.0328508615493774,right_val:-0.1300231963396072,left_val:0.0851581394672394},{features:[[5,0,12,16,-1.],[11,0,6,8,2.],[5,8,6,8,2.]],tilted:0,threshold:-0.0840240567922592,right_val:-0.0393136218190193,left_val:0.3065848946571350},{features:[[8,10,6,5,-1.],[11,10,3,5,2.]],tilted:0,threshold:2.1347659640014172e-003,right_val:-0.1223948001861572,left_val:0.0833869501948357},{features:[[10,4,8,9,-1.],[10,7,8,3,3.]],tilted:0,threshold:0.1792261004447937,right_val:-0.9998909235000610,left_val:2.6004109531641006e-003},{features:[[4,4,8,9,-1.],[4,7,8,3,3.]],tilted:0,threshold:0.1185439005494118,right_val:-0.8962950706481934,left_val:0.0110983699560165},{features:[[8,3,12,3,-1.],[8,4,12,1,3.]],tilted:0,threshold:-2.7351840399205685e-003,right_val:-0.0635892078280449,left_val:0.1158913001418114},{features:[[0,3,13,3,-1.],[0,4,13,1,3.]],tilted:0,threshold:6.6092880442738533e-003,right_val:0.1850122958421707,left_val:-0.0794914290308952},{features:[[10,1,12,3,-1.],[14,1,4,3,3.]],tilted:0,threshold:-0.0210720095783472,right_val:0.0260712802410126,left_val:-0.1470849961042404},{features:[[0,1,12,3,-1.],[4,1,4,3,3.]],tilted:0,threshold:0.0134116197004914,right_val:-0.2204180061817169,left_val:0.0486455895006657},{features:[[8,3,12,3,-1.],[8,4,12,1,3.]],tilted:0,threshold:-0.0206615403294563,right_val:-0.0222432296723127,left_val:0.2137404978275299},{features:[[8,4,6,4,-1.],[8,4,3,4,2.]],tilted:1,threshold:-0.1093925014138222,right_val:0.0119324997067451,left_val:-0.7923508882522583},{features:[[13,2,2,11,-1.],[13,2,1,11,2.]],tilted:1,threshold:0.0545732714235783,right_val:0.3822610974311829,left_val:-8.7064085528254509e-003},{features:[[9,2,11,2,-1.],[9,2,11,1,2.]],tilted:1,threshold:-0.0278459899127483,right_val:-0.0343008190393448,left_val:0.4209634065628052},{features:[[11,1,3,16,-1.],[11,9,3,8,2.]],tilted:0,threshold:0.1497317999601364,right_val:-0.7102707028388977,left_val:5.5857440456748009e-003},{features:[[7,1,4,9,-1.],[7,4,4,3,3.]],tilted:0,threshold:0.0545480214059353,right_val:-0.5506185293197632,left_val:0.0192897692322731},{features:[[12,4,4,8,-1.],[12,8,4,4,2.]],tilted:0,threshold:5.4990737698972225e-003,right_val:-0.1223369985818863,left_val:0.0436438918113709},{features:[[1,7,6,4,-1.],[1,9,6,2,2.]],tilted:0,threshold:3.5988059244118631e-004,right_val:0.1250164061784744,left_val:-0.0950050204992294},{features:[[12,4,4,8,-1.],[12,8,4,4,2.]],tilted:0,threshold:-0.0510030686855316,right_val:0.0141243999823928,left_val:-0.3464818894863129},{features:[[6,4,4,8,-1.],[6,8,4,4,2.]],tilted:0,threshold:-0.0593791306018829,right_val:-0.0207809992134571,left_val:0.6884043216705322},{features:[[19,3,3,12,-1.],[20,4,1,12,3.]],tilted:1,threshold:0.0689760372042656,right_val:-0.6909855008125305,left_val:8.5678137838840485e-003},{features:[[3,3,12,3,-1.],[2,4,12,1,3.]],tilted:1,threshold:-4.3954830616712570e-003,right_val:0.0691059902310371,left_val:-0.1738288998603821},{features:[[13,6,3,7,-1.],[14,7,1,7,3.]],tilted:1,threshold:0.0138380303978920,right_val:0.1968578994274139,left_val:-0.0293981190770864},{features:[[8,12,6,4,-1.],[11,12,3,4,2.]],tilted:0,threshold:-7.5316978618502617e-003,right_val:0.0396854504942894,left_val:-0.3579084873199463},{features:[[10,8,10,10,-1.],[15,8,5,5,2.],[10,13,5,5,2.]],tilted:0,threshold:-0.0882997065782547,right_val:3.0232321005314589e-003,left_val:-0.2377042025327683},{features:[[2,8,10,10,-1.],[2,8,5,5,2.],[7,13,5,5,2.]],tilted:0,threshold:-0.0441387593746185,right_val:-0.0518651790916920,left_val:0.2654140889644623}],threshold:-0.6068928837776184},{simpleClassifiers:[{features:[[1,11,20,3,-1.],[6,11,10,3,2.]],tilted:0,threshold:-0.0925825834274292,right_val:-0.0782759636640549,left_val:0.3618328869342804},{features:[[13,8,6,4,-1.],[13,8,3,4,2.]],tilted:1,threshold:-4.8143980093300343e-003,right_val:0.0677237883210182,left_val:-0.1268171966075897},{features:[[4,11,8,4,-1.],[8,11,4,4,2.]],tilted:0,threshold:0.0323651283979416,right_val:0.3269202113151550,left_val:-0.0460871085524559},{features:[[9,5,10,6,-1.],[9,5,5,6,2.]],tilted:0,threshold:-0.0170285701751709,right_val:-0.1166059002280235,left_val:0.0913064032793045},{features:[[4,8,6,9,-1.],[7,8,3,9,2.]],tilted:0,threshold:-0.1130862012505531,right_val:0.0584269911050797,left_val:-0.7963135838508606},{features:[[4,5,16,4,-1.],[4,5,8,4,2.]],tilted:0,threshold:-3.5633759107440710e-003,right_val:0.1016670018434525,left_val:-0.0826106220483780},{features:[[2,4,18,6,-1.],[8,6,6,2,9.]],tilted:0,threshold:-0.2410956025123596,right_val:-0.0807449668645859,left_val:0.2792722880840302},{features:[[11,1,2,11,-1.],[11,1,1,11,2.]],tilted:1,threshold:0.0225992891937494,right_val:-0.2886540889739990,left_val:0.0517445988953114},{features:[[7,1,6,8,-1.],[7,1,3,4,2.],[10,5,3,4,2.]],tilted:0,threshold:0.0200022701174021,right_val:0.2904478907585144,left_val:-0.0579623617231846},{features:[[7,10,8,6,-1.],[9,10,4,6,2.]],tilted:0,threshold:-1.9348099594935775e-003,right_val:-0.1236845999956131,left_val:0.0988086834549904},{features:[[6,12,9,4,-1.],[9,12,3,4,3.]],tilted:0,threshold:-7.5757717713713646e-003,right_val:0.0927412882447243,left_val:-0.2007191032171249},{features:[[10,12,9,4,-1.],[13,12,3,4,3.]],tilted:0,threshold:0.0333818197250366,right_val:0.3087649941444397,left_val:-0.0345307588577271},{features:[[8,0,10,8,-1.],[8,0,5,8,2.]],tilted:1,threshold:0.0474189817905426,right_val:0.1101675033569336,left_val:-0.1356326937675476},{features:[[9,6,12,4,-1.],[15,6,6,2,2.],[9,8,6,2,2.]],tilted:0,threshold:-5.4173129610717297e-003,right_val:0.0726122930645943,left_val:-0.1605008989572525},{features:[[4,9,14,5,-1.],[11,9,7,5,2.]],tilted:0,threshold:-9.6942558884620667e-003,right_val:0.0844264701008797,left_val:-0.1637648940086365},{features:[[14,6,6,6,-1.],[12,8,6,2,3.]],tilted:1,threshold:-0.0606321692466736,right_val:-0.0269814003258944,left_val:0.1647441983222961},{features:[[6,4,6,7,-1.],[8,4,2,7,3.]],tilted:0,threshold:5.0302860327064991e-003,right_val:0.1348073035478592,left_val:-0.1099682971835136},{features:[[14,9,6,6,-1.],[14,12,6,3,2.]],tilted:0,threshold:-0.0877922028303146,right_val:0.0108346100896597,left_val:-0.6831796765327454},{features:[[2,9,6,6,-1.],[2,12,6,3,2.]],tilted:0,threshold:0.0303904097527266,right_val:0.3077059984207153,left_val:-0.0424505695700645},{features:[[13,8,4,8,-1.],[13,8,2,8,2.]],tilted:0,threshold:-0.0515663400292397,right_val:9.7069833427667618e-003,left_val:-0.6284000873565674},{features:[[5,8,4,9,-1.],[7,8,2,9,2.]],tilted:0,threshold:-4.2446999577805400e-004,right_val:-0.1807512938976288,left_val:0.0845956131815910},{features:[[2,4,18,12,-1.],[8,8,6,4,9.]],tilted:0,threshold:-0.1213535964488983,right_val:0.0965750589966774,left_val:-0.1271748989820480},{features:[[3,5,10,6,-1.],[8,5,5,6,2.]],tilted:0,threshold:-0.0151505600661039,right_val:-0.1312790066003799,left_val:0.0930375531315804},{features:[[6,0,12,8,-1.],[6,0,6,8,2.]],tilted:0,threshold:0.0394464097917080,right_val:-0.1146064028143883,left_val:0.0255436394363642},{features:[[0,11,8,7,-1.],[2,11,4,7,2.]],tilted:0,threshold:-8.2465475425124168e-003,right_val:-0.0516802482306957,left_val:0.2400871068239212},{features:[[15,11,6,7,-1.],[17,11,2,7,3.]],tilted:0,threshold:0.0352623611688614,right_val:0.2057549953460693,left_val:-0.0335550494492054},{features:[[3,16,14,2,-1.],[3,17,14,1,2.]],tilted:0,threshold:0.0117030600085855,right_val:-0.4998390078544617,left_val:0.0235292501747608},{features:[[9,15,13,3,-1.],[9,16,13,1,3.]],tilted:0,threshold:0.0429699681699276,right_val:0.5404338836669922,left_val:-0.0126833301037550},{features:[[0,15,13,3,-1.],[0,16,13,1,3.]],tilted:0,threshold:-0.0158117990940809,right_val:-0.0355683900415897,left_val:0.3956415057182312},{features:[[5,13,12,3,-1.],[5,14,12,1,3.]],tilted:0,threshold:4.6253358013927937e-003,right_val:-0.2298993021249771,left_val:0.0523705407977104},{features:[[0,14,14,3,-1.],[0,15,14,1,3.]],tilted:0,threshold:-1.5898230485618114e-003,right_val:-0.0867831930518150,left_val:0.1379200965166092},{features:[[13,5,6,6,-1.],[15,5,2,6,3.]],tilted:0,threshold:6.2329089269042015e-004,right_val:0.0577100291848183,left_val:-0.0866438299417496},{features:[[3,5,6,6,-1.],[5,5,2,6,3.]],tilted:0,threshold:7.0994929410517216e-003,right_val:-0.1689887046813965,left_val:0.0757976174354553},{features:[[2,3,20,4,-1.],[7,3,10,4,2.]],tilted:0,threshold:0.0696087777614594,right_val:0.2084520012140274,left_val:-0.0124546997249126},{features:[[4,13,12,2,-1.],[4,14,12,1,2.]],tilted:0,threshold:-0.0187595207244158,right_val:0.0210402794182301,left_val:-0.5500862002372742},{features:[[9,6,9,6,-1.],[12,6,3,6,3.]],tilted:0,threshold:0.0465137884020805,right_val:0.1832201927900314,left_val:-0.0259040091186762},{features:[[8,5,6,7,-1.],[10,5,2,7,3.]],tilted:0,threshold:0.0216385796666145,right_val:0.2991969883441925,left_val:-0.0388739109039307},{features:[[15,0,3,10,-1.],[16,1,1,10,3.]],tilted:1,threshold:-0.0767725706100464,right_val:3.9020550902932882e-003,left_val:-1.},{features:[[7,0,10,3,-1.],[6,1,10,1,3.]],tilted:1,threshold:0.0405355282127857,right_val:-0.6603388786315918,left_val:0.0188806802034378},{features:[[11,4,8,6,-1.],[15,4,4,3,2.],[11,7,4,3,2.]],tilted:0,threshold:0.0403387583792210,right_val:-0.3442203104496002,left_val:9.2877401039004326e-003},{features:[[7,0,12,3,-1.],[6,1,12,1,3.]],tilted:1,threshold:0.0434042401611805,right_val:0.5122771263122559,left_val:-0.0221117790788412},{features:[[19,4,3,11,-1.],[20,5,1,11,3.]],tilted:1,threshold:0.0168951302766800,right_val:-0.1864860057830811,left_val:0.0300584807991982},{features:[[1,11,6,7,-1.],[3,11,2,7,3.]],tilted:0,threshold:3.0269259586930275e-003,right_val:0.0875445604324341,left_val:-0.1397909969091415},{features:[[7,4,15,14,-1.],[7,11,15,7,2.]],tilted:0,threshold:-0.3717184066772461,right_val:0.0162415504455566,left_val:-0.2967667877674103},{features:[[3,4,11,3,-1.],[2,5,11,1,3.]],tilted:1,threshold:-0.0257987398654222,right_val:0.0267681498080492,left_val:-0.4371350109577179},{features:[[14,6,3,8,-1.],[15,7,1,8,3.]],tilted:1,threshold:-9.0826600790023804e-003,right_val:-0.0385005399584770,left_val:0.0995484963059425},{features:[[3,0,3,18,-1.],[4,0,1,18,3.]],tilted:0,threshold:-1.7977179959416389e-003,right_val:-0.0753872320055962,left_val:0.1381019949913025},{features:[[14,3,8,4,-1.],[14,3,8,2,2.]],tilted:1,threshold:0.1243569999933243,right_val:-0.3690980076789856,left_val:4.6064029447734356e-003},{features:[[8,3,4,8,-1.],[8,3,2,8,2.]],tilted:1,threshold:-0.0129014896228909,right_val:0.0531336106359959,left_val:-0.2043330073356628},{features:[[18,2,4,12,-1.],[15,5,4,6,2.]],tilted:1,threshold:-0.0133520998060703,right_val:0.0597462393343449,left_val:-0.1051217019557953},{features:[[2,9,17,3,-1.],[2,10,17,1,3.]],tilted:0,threshold:-0.0306505206972361,right_val:-0.0396178103983402,left_val:0.3436650037765503},{features:[[7,9,14,3,-1.],[7,10,14,1,3.]],tilted:0,threshold:2.0778391044586897e-003,right_val:0.0729307532310486,left_val:-0.0507552884519100},{features:[[8,2,6,8,-1.],[8,2,3,4,2.],[11,6,3,4,2.]],tilted:0,threshold:-0.0611611790955067,right_val:-0.0139401303604245,left_val:0.7837166786193848},{features:[[11,4,8,6,-1.],[15,4,4,3,2.],[11,7,4,3,2.]],tilted:0,threshold:-0.0666819736361504,right_val:4.2770858854055405e-003,left_val:-0.6701030731201172},{features:[[3,4,8,6,-1.],[3,4,4,3,2.],[7,7,4,3,2.]],tilted:0,threshold:0.0273598507046700,right_val:-0.4267185926437378,left_val:0.0242531802505255},{features:[[3,1,18,3,-1.],[3,2,18,1,3.]],tilted:0,threshold:-2.4731201119720936e-003,right_val:-0.0574338398873806,left_val:0.0964932367205620},{features:[[0,9,8,3,-1.],[4,9,4,3,2.]],tilted:0,threshold:-0.0107214897871017,right_val:0.0442569702863693,left_val:-0.2157561033964157},{features:[[13,2,9,10,-1.],[13,7,9,5,2.]],tilted:0,threshold:-0.1393698006868362,right_val:0.0100051397457719,left_val:-0.3637753129005432},{features:[[1,2,8,12,-1.],[1,2,4,6,2.],[5,8,4,6,2.]],tilted:0,threshold:-0.0568677112460136,right_val:-0.0372307896614075,left_val:0.3032726943492889},{features:[[12,5,8,6,-1.],[16,5,4,3,2.],[12,8,4,3,2.]],tilted:0,threshold:-0.0657765120267868,right_val:1.2443619780242443e-003,left_val:-1.},{features:[[1,0,17,3,-1.],[1,1,17,1,3.]],tilted:0,threshold:-1.5500129666179419e-003,right_val:-0.0855282470583916,left_val:0.1289858072996140},{features:[[4,0,15,2,-1.],[4,1,15,1,2.]],tilted:0,threshold:8.7909551803022623e-004,right_val:0.1284713000059128,left_val:-0.0799063816666603},{features:[[5,0,12,4,-1.],[5,2,12,2,2.]],tilted:0,threshold:2.9614660888910294e-003,right_val:-0.1704798042774200,left_val:0.0894338414072990},{features:[[7,4,15,14,-1.],[7,11,15,7,2.]],tilted:0,threshold:-0.5073503851890564,right_val:2.3592109791934490e-003,left_val:-0.8419762849807739},{features:[[8,2,9,2,-1.],[8,2,9,1,2.]],tilted:1,threshold:0.0354092009365559,right_val:-0.5905207991600037,left_val:0.0171374902129173},{features:[[16,0,2,13,-1.],[16,0,1,13,2.]],tilted:1,threshold:-0.0462202392518520,right_val:-0.0114230895414948,left_val:0.4738368988037109},{features:[[6,0,13,2,-1.],[6,0,13,1,2.]],tilted:1,threshold:0.0408750995993614,right_val:0.4213987886905670,left_val:-0.0267140790820122},{features:[[12,7,2,9,-1.],[12,7,1,9,2.]],tilted:1,threshold:-0.0576518103480339,right_val:-9.5757292583584785e-003,left_val:0.5602129101753235},{features:[[10,7,9,2,-1.],[10,7,9,1,2.]],tilted:1,threshold:3.3733060117810965e-003,right_val:-0.1551048010587692,left_val:0.0723236203193665},{features:[[9,0,11,10,-1.],[9,5,11,5,2.]],tilted:0,threshold:-0.3409616053104401,right_val:-3.1605950789526105e-004,left_val:-1.},{features:[[8,5,9,2,-1.],[8,5,9,1,2.]],tilted:1,threshold:-5.5850511416792870e-003,right_val:0.0736257433891296,left_val:-0.1576807051897049},{features:[[13,2,9,10,-1.],[13,7,9,5,2.]],tilted:0,threshold:-0.1106723994016647,right_val:-0.0126707796007395,left_val:0.2364044040441513},{features:[[0,2,9,10,-1.],[0,7,9,5,2.]],tilted:0,threshold:0.0432464107871056,right_val:0.3011310100555420,left_val:-0.0493464209139347},{features:[[17,2,3,8,-1.],[17,6,3,4,2.]],tilted:0,threshold:-5.8916499838232994e-003,right_val:0.0613457001745701,left_val:-0.1472765058279038},{features:[[2,2,3,8,-1.],[2,6,3,4,2.]],tilted:0,threshold:-2.8674090572167188e-005,right_val:-0.1469265073537827,left_val:0.1153924018144608},{features:[[4,4,18,4,-1.],[13,4,9,2,2.],[4,6,9,2,2.]],tilted:0,threshold:0.0261749103665352,right_val:0.2100441008806229,left_val:-0.0229605808854103},{features:[[0,4,18,4,-1.],[0,4,9,2,2.],[9,6,9,2,2.]],tilted:0,threshold:-1.9902619533240795e-003,right_val:-0.1324492990970612,left_val:0.0972506329417229},{features:[[4,1,14,4,-1.],[11,1,7,2,2.],[4,3,7,2,2.]],tilted:0,threshold:-0.0169608406722546,right_val:0.0361882895231247,left_val:-0.3194906115531921},{features:[[0,0,21,8,-1.],[7,0,7,8,3.]],tilted:0,threshold:-0.1563473939895630,right_val:-0.0419170707464218,left_val:0.3193452954292297},{features:[[5,0,14,18,-1.],[12,0,7,9,2.],[5,9,7,9,2.]],tilted:0,threshold:-0.2386395037174225,right_val:-8.6567532271146774e-003,left_val:0.3818357884883881},{features:[[1,11,16,4,-1.],[5,11,8,4,2.]],tilted:0,threshold:-0.0776415020227432,right_val:0.0334911495447159,left_val:-0.3315665125846863},{features:[[6,9,10,6,-1.],[6,11,10,2,3.]],tilted:0,threshold:-0.0452578999102116,right_val:-0.0313548594713211,left_val:0.4605852961540222},{features:[[5,10,12,4,-1.],[5,11,12,2,2.]],tilted:0,threshold:-0.0333907902240753,right_val:0.0162069909274578,left_val:-0.7297474741935730},{features:[[15,4,6,6,-1.],[15,4,3,6,2.]],tilted:1,threshold:0.0730794668197632,right_val:0.3401190936565399,left_val:-0.0192014500498772},{features:[[7,4,6,6,-1.],[7,4,6,3,2.]],tilted:1,threshold:-0.0545362308621407,right_val:-0.0331634283065796,left_val:0.3322716057300568},{features:[[12,5,8,6,-1.],[16,5,4,3,2.],[12,8,4,3,2.]],tilted:0,threshold:0.0395526885986328,right_val:-0.3213171958923340,left_val:0.0118175595998764},{features:[[5,5,8,4,-1.],[5,5,8,2,2.]],tilted:1,threshold:5.9160130331292748e-004,right_val:0.0880023613572121,left_val:-0.1176635026931763},{features:[[17,6,3,12,-1.],[17,10,3,4,3.]],tilted:0,threshold:0.0353797301650047,right_val:-0.1620689034461975,left_val:0.0182861909270287},{features:[[5,7,9,2,-1.],[5,7,9,1,2.]],tilted:1,threshold:0.0201524905860424,right_val:-0.4303478896617889,left_val:0.0228259395807981},{features:[[14,6,3,8,-1.],[15,7,1,8,3.]],tilted:1,threshold:-0.0291852895170450,right_val:-0.0163763090968132,left_val:0.1825695931911469},{features:[[5,7,12,2,-1.],[5,8,12,1,2.]],tilted:0,threshold:-0.0217057801783085,right_val:0.0167823601514101,left_val:-0.6697772145271301},{features:[[4,5,18,3,-1.],[4,6,18,1,3.]],tilted:0,threshold:0.0425842702388763,right_val:0.3436039984226227,left_val:-0.0168524999171495},{features:[[1,6,15,9,-1.],[6,6,5,9,3.]],tilted:0,threshold:-0.1266373991966248,right_val:-0.0361077897250652,left_val:0.2674858868122101},{features:[[19,4,3,10,-1.],[19,4,3,5,2.]],tilted:1,threshold:0.1426007002592087,right_val:-0.1972950994968414,left_val:0.0144452704116702},{features:[[0,12,18,6,-1.],[0,15,18,3,2.]],tilted:0,threshold:0.0535609312355518,right_val:-0.5960922241210938,left_val:0.0173247996717691},{features:[[6,13,13,4,-1.],[6,15,13,2,2.]],tilted:0,threshold:-5.9380959719419479e-003,right_val:0.0596456006169319,left_val:-0.0651562735438347},{features:[[3,5,8,9,-1.],[3,8,8,3,3.]],tilted:0,threshold:-6.6497321240603924e-003,right_val:-0.0796698182821274,left_val:0.1427001953125000},{features:[[6,8,10,8,-1.],[6,10,10,4,2.]],tilted:0,threshold:-3.0137640424072742e-003,right_val:-0.0948317572474480,left_val:0.1399628967046738},{features:[[4,6,13,6,-1.],[4,9,13,3,2.]],tilted:0,threshold:-0.0172130502760410,right_val:0.0694516524672508,left_val:-0.1726574003696442},{features:[[14,3,2,12,-1.],[14,3,2,6,2.]],tilted:1,threshold:0.1077570989727974,right_val:0.9216187000274658,left_val:-4.6757548116147518e-003},{features:[[8,3,12,2,-1.],[8,3,6,2,2.]],tilted:1,threshold:0.0587385408580303,right_val:0.2883234918117523,left_val:-0.0424589812755585},{features:[[13,1,5,12,-1.],[13,1,5,6,2.]],tilted:1,threshold:-0.3047547936439514,right_val:2.6918480216409080e-005,left_val:-1.},{features:[[9,1,12,5,-1.],[9,1,6,5,2.]],tilted:1,threshold:0.2039577960968018,right_val:-0.5027515888214111,left_val:0.0253179892897606},{features:[[8,12,8,3,-1.],[8,12,4,3,2.]],tilted:0,threshold:-9.7794281318783760e-003,right_val:0.0305771399289370,left_val:-0.1906087994575501},{features:[[5,12,12,4,-1.],[8,12,6,4,2.]],tilted:0,threshold:-0.0227754991501570,right_val:-0.0510012097656727,left_val:0.2704837024211884},{features:[[13,8,6,4,-1.],[13,8,3,4,2.]],tilted:1,threshold:9.8080374300479889e-003,right_val:-0.0750008374452591,left_val:0.0241802502423525},{features:[[9,8,4,6,-1.],[9,8,4,3,2.]],tilted:1,threshold:-0.0111309699714184,right_val:0.0643887221813202,left_val:-0.2382574975490570}],threshold:-0.5688105821609497},{simpleClassifiers:[{features:[[1,7,20,11,-1.],[6,7,10,11,2.]],tilted:0,threshold:-0.2138068974018097,right_val:-0.0927778184413910,left_val:0.2768664062023163},{features:[[10,13,12,3,-1.],[10,14,12,1,3.]],tilted:0,threshold:-3.3374479971826077e-003,right_val:-0.0519071593880653,left_val:0.1411923021078110},{features:[[1,10,6,4,-1.],[4,10,3,4,2.]],tilted:0,threshold:-0.0287385508418083,right_val:0.0319380201399326,left_val:-0.3624325096607208},{features:[[15,10,6,4,-1.],[15,10,3,4,2.]],tilted:0,threshold:-3.5554158966988325e-003,right_val:-0.0523067489266396,left_val:0.1196912005543709},{features:[[0,13,12,3,-1.],[0,14,12,1,3.]],tilted:0,threshold:-0.0107324598357081,right_val:-0.0605550594627857,left_val:0.2860266864299774},{features:[[4,10,14,8,-1.],[4,14,14,4,2.]],tilted:0,threshold:0.0873102396726608,right_val:0.4778678119182587,left_val:-0.0336133912205696},{features:[[5,14,12,4,-1.],[5,15,12,2,2.]],tilted:0,threshold:2.1971999667584896e-003,right_val:-0.2154375016689301,left_val:0.0602079704403877},{features:[[5,16,12,2,-1.],[5,17,12,1,2.]],tilted:0,threshold:-7.4302748544141650e-005,right_val:-0.1271156072616577,left_val:0.1414128988981247},{features:[[1,0,20,12,-1.],[6,0,10,12,2.]],tilted:0,threshold:-0.2931401133537293,right_val:7.8105749562382698e-003,left_val:-0.5559828877449036},{features:[[7,12,15,5,-1.],[12,12,5,5,3.]],tilted:0,threshold:0.0779965370893478,right_val:0.2223376929759979,left_val:-0.0202381405979395},{features:[[6,0,15,2,-1.],[6,0,15,1,2.]],tilted:1,threshold:4.9733570776879787e-003,right_val:0.0988745167851448,left_val:-0.1541032940149307},{features:[[6,5,12,8,-1.],[12,5,6,4,2.],[6,9,6,4,2.]],tilted:0,threshold:-0.0622326508164406,right_val:0.0258643291890621,left_val:-0.2525390982627869},{features:[[4,5,12,8,-1.],[4,5,6,4,2.],[10,9,6,4,2.]],tilted:0,threshold:-7.4750548228621483e-003,right_val:0.0845282003283501,left_val:-0.1907179057598114},{features:[[6,2,16,6,-1.],[14,2,8,3,2.],[6,5,8,3,2.]],tilted:0,threshold:0.0222460106015205,right_val:0.1528923958539963,left_val:-0.0310246292501688},{features:[[1,2,16,14,-1.],[1,2,8,7,2.],[9,9,8,7,2.]],tilted:0,threshold:-0.0123052597045898,right_val:-0.1109255999326706,left_val:0.1169324964284897},{features:[[11,14,6,4,-1.],[11,14,3,4,2.]],tilted:0,threshold:-1.3985290424898267e-003,right_val:0.0875922590494156,left_val:-0.2043567001819611},{features:[[3,8,12,9,-1.],[7,11,4,3,9.]],tilted:0,threshold:0.3636125028133392,right_val:0.8505452871322632,left_val:-0.0187503192573786},{features:[[8,3,14,4,-1.],[15,3,7,2,2.],[8,5,7,2,2.]],tilted:0,threshold:-3.8815739098936319e-003,right_val:-0.1052099987864494,left_val:0.0806438773870468},{features:[[9,0,6,8,-1.],[11,2,2,8,3.]],tilted:1,threshold:-0.0525006316602230,right_val:-0.0360490791499615,left_val:0.3800252079963684},{features:[[12,13,6,4,-1.],[12,15,6,2,2.]],tilted:0,threshold:-7.9602311598137021e-004,right_val:-0.0756038799881935,left_val:0.0337949693202972},{features:[[4,13,6,4,-1.],[4,15,6,2,2.]],tilted:0,threshold:-0.0200660899281502,right_val:0.0333891995251179,left_val:-0.4384298920631409},{features:[[6,16,16,2,-1.],[6,17,16,1,2.]],tilted:0,threshold:-2.4233239237219095e-003,right_val:0.0497728288173676,left_val:-0.0930052474141121},{features:[[0,3,12,3,-1.],[0,4,12,1,3.]],tilted:0,threshold:-6.8737422116100788e-003,right_val:-0.0581658482551575,left_val:0.2037483006715775},{features:[[8,3,14,3,-1.],[8,4,14,1,3.]],tilted:0,threshold:6.5535600297152996e-003,right_val:0.1440014988183975,left_val:-0.0702933967113495},{features:[[6,2,3,16,-1.],[6,6,3,8,2.]],tilted:0,threshold:-0.0167806800454855,right_val:0.0437172502279282,left_val:-0.3222652077674866},{features:[[5,2,14,14,-1.],[12,2,7,7,2.],[5,9,7,7,2.]],tilted:0,threshold:0.0254480708390474,right_val:-0.1537698954343796,left_val:0.0434619188308716},{features:[[5,8,3,8,-1.],[5,12,3,4,2.]],tilted:0,threshold:3.4656568896025419e-003,right_val:0.2139452993869782,left_val:-0.0631199926137924},{features:[[14,7,7,4,-1.],[14,7,7,2,2.]],tilted:1,threshold:0.1013225018978119,right_val:0.1885329931974411,left_val:-0.0170958302915096},{features:[[4,6,12,9,-1.],[8,9,4,3,9.]],tilted:0,threshold:0.1071430966258049,right_val:-0.3486903905868530,left_val:0.0354068912565708},{features:[[7,11,15,6,-1.],[12,11,5,6,3.]],tilted:0,threshold:-0.0145009998232126,right_val:-0.0491692088544369,left_val:0.0379035808146000},{features:[[0,11,15,6,-1.],[5,11,5,6,3.]],tilted:0,threshold:-0.1535475999116898,right_val:-0.0327740088105202,left_val:0.3504832088947296},{features:[[15,7,6,8,-1.],[18,7,3,4,2.],[15,11,3,4,2.]],tilted:0,threshold:-0.0651375874876976,right_val:7.3137627914547920e-003,left_val:-0.4138002097606659},{features:[[0,7,22,10,-1.],[0,7,11,5,2.],[11,12,11,5,2.]],tilted:0,threshold:-2.9204839374870062e-003,right_val:0.0907953903079033,left_val:-0.1375668048858643},{features:[[1,8,20,8,-1.],[6,8,10,8,2.]],tilted:0,threshold:-0.3410457074642181,right_val:0.0152002302929759,left_val:-0.6725202798843384},{features:[[2,5,7,6,-1.],[2,7,7,2,3.]],tilted:0,threshold:-4.4478259951574728e-005,right_val:-0.1040342003107071,left_val:0.0965799465775490},{features:[[7,2,15,8,-1.],[7,4,15,4,2.]],tilted:0,threshold:-0.1117222979664803,right_val:4.9457307904958725e-003,left_val:-0.4223442077636719},{features:[[3,1,14,8,-1.],[3,3,14,4,2.]],tilted:0,threshold:2.0429869182407856e-003,right_val:-0.1038454025983810,left_val:0.0994746983051300},{features:[[9,2,13,2,-1.],[9,3,13,1,2.]],tilted:0,threshold:-7.2571309283375740e-003,right_val:0.0297248400747776,left_val:-0.1504963040351868},{features:[[8,3,6,8,-1.],[10,3,2,8,3.]],tilted:0,threshold:-8.4451176226139069e-003,right_val:-0.1180536970496178,left_val:0.0956485792994499},{features:[[7,1,15,2,-1.],[7,2,15,1,2.]],tilted:0,threshold:-0.0301949698477983,right_val:-0.0143868997693062,left_val:0.4657062888145447},{features:[[0,1,15,2,-1.],[0,2,15,1,2.]],tilted:0,threshold:5.7423918042331934e-004,right_val:0.1505282968282700,left_val:-0.1038231030106545},{features:[[6,0,12,3,-1.],[6,1,12,1,3.]],tilted:0,threshold:8.2014611689373851e-004,right_val:0.1036375984549522,left_val:-0.0751325264573097},{features:[[4,0,9,4,-1.],[7,0,3,4,3.]],tilted:0,threshold:7.0748180150985718e-003,right_val:-0.1763841956853867,left_val:0.0660621672868729},{features:[[12,3,8,3,-1.],[12,3,4,3,2.]],tilted:1,threshold:0.0483046695590019,right_val:0.2682015895843506,left_val:-0.0177676603198051},{features:[[8,12,6,4,-1.],[11,12,3,4,2.]],tilted:0,threshold:7.9041812568902969e-003,right_val:-0.2063236981630325,left_val:0.0515227392315865},{features:[[12,1,10,4,-1.],[12,1,5,4,2.]],tilted:0,threshold:0.0847054868936539,right_val:-0.5951473712921143,left_val:7.2250380180776119e-003},{features:[[0,1,10,4,-1.],[5,1,5,4,2.]],tilted:0,threshold:3.9120440487749875e-004,right_val:0.1110381036996841,left_val:-0.1066353023052216},{features:[[16,13,6,5,-1.],[16,13,3,5,2.]],tilted:0,threshold:0.0159593205899000,right_val:0.2583200931549072,left_val:-0.0485736913979054},{features:[[0,13,6,5,-1.],[3,13,3,5,2.]],tilted:0,threshold:-1.8649259582161903e-003,right_val:-0.1504859030246735,left_val:0.1155126988887787},{features:[[18,11,4,7,-1.],[18,11,2,7,2.]],tilted:0,threshold:0.0127279795706272,right_val:-0.3031023144721985,left_val:0.0479302406311035},{features:[[0,11,4,7,-1.],[2,11,2,7,2.]],tilted:0,threshold:-1.5954229747876525e-003,right_val:0.0832148864865303,left_val:-0.1553757041692734},{features:[[15,0,6,14,-1.],[17,0,2,14,3.]],tilted:0,threshold:0.2023489028215408,right_val:-1.0000209808349609,left_val:1.1625860352069139e-003},{features:[[1,0,6,14,-1.],[3,0,2,14,3.]],tilted:0,threshold:-0.0391968712210655,right_val:-0.0445240214467049,left_val:0.3088454902172089},{features:[[13,0,4,14,-1.],[15,0,2,7,2.],[13,7,2,7,2.]],tilted:0,threshold:0.0158106405287981,right_val:0.1014444977045059,left_val:-0.0159273296594620},{features:[[5,0,4,14,-1.],[5,0,2,7,2.],[7,7,2,7,2.]],tilted:0,threshold:-2.1568681113421917e-003,right_val:-0.1291096061468124,left_val:0.0952053815126419},{features:[[13,2,6,4,-1.],[13,2,3,4,2.]],tilted:0,threshold:-0.0346043594181538,right_val:-0.0107750603929162,left_val:0.2784355878829956},{features:[[1,7,12,4,-1.],[1,7,6,2,2.],[7,9,6,2,2.]],tilted:0,threshold:-2.6206790935248137e-003,right_val:0.0929454565048218,left_val:-0.1374453008174896},{features:[[4,13,18,3,-1.],[4,14,18,1,3.]],tilted:0,threshold:4.6692821197211742e-003,right_val:0.1573383957147598,left_val:-0.0583318211138248},{features:[[2,6,2,12,-1.],[2,12,2,6,2.]],tilted:0,threshold:0.0786235332489014,right_val:-0.9713814854621887,left_val:0.0111308302730322},{features:[[4,11,16,4,-1.],[12,11,8,2,2.],[4,13,8,2,2.]],tilted:0,threshold:0.0395567305386066,right_val:-0.4342544972896576,left_val:2.1708509884774685e-003},{features:[[2,11,16,4,-1.],[2,11,8,2,2.],[10,13,8,2,2.]],tilted:0,threshold:4.0571438148617744e-003,right_val:-0.1557939946651459,left_val:0.0861207172274590},{features:[[10,12,12,4,-1.],[16,12,6,2,2.],[10,14,6,2,2.]],tilted:0,threshold:-0.0150146698579192,right_val:-0.0257240198552608,left_val:0.1352397948503494},{features:[[0,12,12,4,-1.],[0,12,6,2,2.],[6,14,6,2,2.]],tilted:0,threshold:4.6183250378817320e-004,right_val:0.1363386958837509,left_val:-0.1076688989996910},{features:[[12,12,10,6,-1.],[17,12,5,3,2.],[12,15,5,3,2.]],tilted:0,threshold:0.0528752095997334,right_val:-0.3938291072845459,left_val:5.4555749520659447e-003},{features:[[0,10,10,8,-1.],[0,10,5,4,2.],[5,14,5,4,2.]],tilted:0,threshold:-0.0595108605921268,right_val:-0.0428760796785355,left_val:0.2869082093238831},{features:[[8,0,7,4,-1.],[8,2,7,2,2.]],tilted:0,threshold:0.0166503600776196,right_val:-0.3034949004650116,left_val:0.0286052990704775},{features:[[0,3,14,3,-1.],[0,4,14,1,3.]],tilted:0,threshold:0.0149596296250820,right_val:0.2182525992393494,left_val:-0.0526990294456482},{features:[[15,1,6,8,-1.],[18,1,3,4,2.],[15,5,3,4,2.]],tilted:0,threshold:-9.6224267035722733e-003,right_val:0.0483506284654140,left_val:-0.2143145054578781},{features:[[2,3,7,4,-1.],[2,5,7,2,2.]],tilted:0,threshold:-0.0453042611479759,right_val:0.0124497702345252,left_val:-0.8730847835540772},{features:[[13,2,6,4,-1.],[13,2,3,4,2.]],tilted:0,threshold:-7.4465242214500904e-003,right_val:0.0330873206257820,left_val:-0.1358620971441269},{features:[[3,2,6,4,-1.],[6,2,3,4,2.]],tilted:0,threshold:-1.1953880311921239e-003,right_val:-0.0852916464209557,left_val:0.1484857052564621},{features:[[5,1,16,4,-1.],[5,2,16,2,2.]],tilted:0,threshold:5.6622507981956005e-003,right_val:0.1296795010566711,left_val:-0.0532124489545822},{features:[[4,15,13,3,-1.],[4,16,13,1,3.]],tilted:0,threshold:0.0139713604003191,right_val:-0.4209741055965424,left_val:0.0253388304263353},{features:[[12,6,3,12,-1.],[13,6,1,12,3.]],tilted:0,threshold:-4.5216218568384647e-003,right_val:-0.0631354302167892,left_val:0.1262152940034866},{features:[[0,16,16,2,-1.],[8,16,8,2,2.]],tilted:0,threshold:4.7776158899068832e-003,right_val:0.1772444993257523,left_val:-0.0628999173641205},{features:[[3,2,16,10,-1.],[3,7,16,5,2.]],tilted:0,threshold:-5.8305878192186356e-003,right_val:-0.1555338054895401,left_val:0.0879060029983521},{features:[[7,1,12,4,-1.],[10,4,6,4,2.]],tilted:1,threshold:-0.0158792808651924,right_val:0.1028029993176460,left_val:-0.1269443035125732},{features:[[14,1,2,9,-1.],[14,1,1,9,2.]],tilted:1,threshold:1.9526369869709015e-003,right_val:0.0472977496683598,left_val:-0.0768034532666206},{features:[[4,10,3,8,-1.],[4,14,3,4,2.]],tilted:0,threshold:0.0245216507464647,right_val:0.4035046994686127,left_val:-0.0277146808803082},{features:[[11,12,6,6,-1.],[11,14,6,2,3.]],tilted:0,threshold:-0.0845293998718262,right_val:-2.1367999725043774e-003,left_val:1.},{features:[[5,12,6,6,-1.],[5,14,6,2,3.]],tilted:0,threshold:1.6844070050865412e-003,right_val:-0.1633481979370117,left_val:0.0740434005856514},{features:[[12,6,3,12,-1.],[13,6,1,12,3.]],tilted:0,threshold:0.0133990598842502,right_val:0.2416412979364395,left_val:-0.0424531809985638},{features:[[10,6,8,3,-1.],[9,7,8,1,3.]],tilted:1,threshold:0.0441826395690441,right_val:-0.6439684033393860,left_val:0.0180395692586899},{features:[[12,6,3,12,-1.],[13,6,1,12,3.]],tilted:0,threshold:0.0383272394537926,right_val:-0.3653421103954315,left_val:7.5849238783121109e-003},{features:[[7,6,3,12,-1.],[8,6,1,12,3.]],tilted:0,threshold:2.5997089687734842e-003,right_val:0.1376366019248962,left_val:-0.0885534808039665},{features:[[14,1,2,9,-1.],[14,1,1,9,2.]],tilted:1,threshold:0.0107754804193974,right_val:-0.1195600032806397,left_val:0.0457531698048115},{features:[[11,4,10,3,-1.],[10,5,10,1,3.]],tilted:1,threshold:-0.0204336494207382,right_val:-0.0519258417189121,left_val:0.2202017009258270},{features:[[8,11,9,4,-1.],[11,11,3,4,3.]],tilted:0,threshold:-0.1240272969007492,right_val:-5.1234480924904346e-003,left_val:0.8884658217430115},{features:[[7,5,2,12,-1.],[8,5,1,12,2.]],tilted:0,threshold:4.7838478349149227e-003,right_val:-0.2108590006828308,left_val:0.0530470311641693},{features:[[13,1,3,16,-1.],[14,1,1,16,3.]],tilted:0,threshold:-0.0458953492343426,right_val:-0.0151171199977398,left_val:0.4448269009590149},{features:[[7,4,6,6,-1.],[9,4,2,6,3.]],tilted:0,threshold:0.0144737903028727,right_val:0.2355625033378601,left_val:-0.0452014096081257},{features:[[10,4,2,12,-1.],[10,4,1,12,2.]],tilted:0,threshold:1.8887920305132866e-003,right_val:-0.1638537049293518,left_val:0.0764433816075325},{features:[[0,0,18,5,-1.],[9,0,9,5,2.]],tilted:0,threshold:-0.1908206939697266,right_val:-0.0182426199316978,left_val:0.6466202139854431},{features:[[16,3,2,12,-1.],[16,3,1,12,2.]],tilted:1,threshold:0.0721584632992744,right_val:-0.7482234835624695,left_val:6.2836478464305401e-003},{features:[[6,3,12,2,-1.],[6,3,12,1,2.]],tilted:1,threshold:9.7802944947034121e-004,right_val:-0.1316365003585815,left_val:0.0790631026029587},{features:[[13,6,4,7,-1.],[14,7,2,7,2.]],tilted:1,threshold:4.8602250171825290e-004,right_val:0.0694627612829208,left_val:-0.0425949096679688},{features:[[7,3,13,2,-1.],[7,3,13,1,2.]],tilted:1,threshold:-0.0108828004449606,right_val:0.0523261614143848,left_val:-0.2450307011604309},{features:[[5,14,17,4,-1.],[5,15,17,2,2.]],tilted:0,threshold:1.1573769734241068e-004,right_val:0.0870889127254486,left_val:-0.0667293071746826},{features:[[0,13,18,3,-1.],[0,14,18,1,3.]],tilted:0,threshold:2.0960739348083735e-003,right_val:0.1359816938638687,left_val:-0.0761545673012733},{features:[[6,13,14,3,-1.],[6,14,14,1,3.]],tilted:0,threshold:0.0436643511056900,right_val:-0.8109716773033142,left_val:8.4812156856060028e-003},{features:[[2,13,14,3,-1.],[2,14,14,1,3.]],tilted:0,threshold:-1.1464370181784034e-003,right_val:-0.0847834199666977,left_val:0.1272123008966446},{features:[[5,13,12,2,-1.],[5,14,12,1,2.]],tilted:0,threshold:-5.5613541044294834e-003,right_val:0.0544110685586929,left_val:-0.1972253024578095},{features:[[0,5,4,8,-1.],[0,9,4,4,2.]],tilted:0,threshold:0.0340838506817818,right_val:0.3406228125095367,left_val:-0.0323385484516621},{features:[[15,7,6,8,-1.],[18,7,3,4,2.],[15,11,3,4,2.]],tilted:0,threshold:0.0512270815670490,right_val:0.2395363003015518,left_val:-0.0132620399817824},{features:[[9,2,4,7,-1.],[11,2,2,7,2.]],tilted:0,threshold:0.0335317291319370,right_val:-0.4833905100822449,left_val:0.0202799197286367},{features:[[8,4,14,3,-1.],[8,5,14,1,3.]],tilted:0,threshold:0.0153962196782231,right_val:0.1586609929800034,left_val:-0.0293201897293329},{features:[[0,4,12,3,-1.],[0,5,12,1,3.]],tilted:0,threshold:-0.0175507701933384,right_val:-0.0377983190119267,left_val:0.2748897075653076},{features:[[13,2,4,9,-1.],[13,5,4,3,3.]],tilted:0,threshold:-0.0757056474685669,right_val:3.8814740255475044e-003,left_val:-0.8221439719200134},{features:[[5,2,4,9,-1.],[5,5,4,3,3.]],tilted:0,threshold:-5.3475350141525269e-003,right_val:0.0771806165575981,left_val:-0.1671075969934464},{features:[[12,6,6,4,-1.],[12,8,6,2,2.]],tilted:0,threshold:-3.3435279037803411e-003,right_val:0.0475754700601101,left_val:-0.1067349016666412},{features:[[5,5,12,3,-1.],[11,5,6,3,2.]],tilted:0,threshold:0.0193282701075077,right_val:0.2471656054258347,left_val:-0.0465632900595665},{features:[[7,1,8,12,-1.],[7,4,8,6,2.]],tilted:0,threshold:0.0853689834475517,right_val:-0.5000224709510803,left_val:0.0232969205826521},{features:[[9,3,6,7,-1.],[11,5,2,7,3.]],tilted:1,threshold:2.5927850510925055e-003,right_val:0.1104608997702599,left_val:-0.1118225008249283},{features:[[12,1,9,6,-1.],[10,3,9,2,3.]],tilted:1,threshold:-9.1061238199472427e-003,right_val:-0.0558076612651348,left_val:0.0471070110797882},{features:[[11,7,8,3,-1.],[11,7,4,3,2.]],tilted:1,threshold:0.1017069965600967,right_val:0.6985731720924377,left_val:-0.0159666091203690},{features:[[14,1,2,9,-1.],[14,1,1,9,2.]],tilted:1,threshold:0.0228549800813198,right_val:0.1222568973898888,left_val:-0.0172262191772461},{features:[[1,7,6,8,-1.],[1,7,3,4,2.],[4,11,3,4,2.]],tilted:0,threshold:-0.0165770798921585,right_val:0.0565783008933067,left_val:-0.2222582995891571},{features:[[11,0,4,6,-1.],[11,0,2,6,2.]],tilted:0,threshold:-0.0236414205282927,right_val:0.0160768907517195,left_val:-0.2773405015468597},{features:[[7,0,4,6,-1.],[9,0,2,6,2.]],tilted:0,threshold:5.6385230273008347e-003,right_val:-0.2254963070154190,left_val:0.0454392805695534},{features:[[0,7,22,4,-1.],[11,7,11,2,2.],[0,9,11,2,2.]],tilted:0,threshold:5.7422029785811901e-003,right_val:0.1523496061563492,left_val:-0.0785687789320946},{features:[[3,5,4,8,-1.],[3,9,4,4,2.]],tilted:0,threshold:-4.3363519944250584e-004,right_val:-0.1127424016594887,left_val:0.0959209501743317},{features:[[5,4,12,3,-1.],[9,4,4,3,3.]],tilted:0,threshold:0.0102679198607802,right_val:0.2481082975864410,left_val:-0.0493329912424088},{features:[[10,2,12,3,-1.],[10,2,6,3,2.]],tilted:1,threshold:0.0138657195493579,right_val:-0.1859433054924011,left_val:0.0705479383468628}],threshold:-0.6582424044609070},{simpleClassifiers:[{features:[[5,2,6,16,-1.],[5,10,6,8,2.]],tilted:0,threshold:-0.0469806306064129,right_val:-0.1568731069564819,left_val:0.1707855015993118},{features:[[12,6,8,4,-1.],[12,6,8,2,2.]],tilted:1,threshold:-0.1196796000003815,right_val:-0.0117475902661681,left_val:0.5173841714859009},{features:[[3,12,6,6,-1.],[5,12,2,6,3.]],tilted:0,threshold:-0.0284771807491779,right_val:-0.0574244111776352,left_val:0.2350520044565201},{features:[[12,1,3,12,-1.],[12,1,3,6,2.]],tilted:1,threshold:0.1969747990369797,right_val:1.0037239789962769,left_val:-9.3123828992247581e-004},{features:[[10,1,12,3,-1.],[10,1,6,3,2.]],tilted:1,threshold:7.9039083793759346e-003,right_val:-0.1652749925851822,left_val:0.0833574980497360},{features:[[4,8,16,4,-1.],[8,8,8,4,2.]],tilted:0,threshold:0.0393389798700809,right_val:0.3236146867275238,left_val:-6.5605872077867389e-004},{features:[[6,10,4,6,-1.],[8,10,2,6,2.]],tilted:0,threshold:-1.5762429684400558e-003,right_val:-0.1416433006525040,left_val:0.0911294668912888},{features:[[7,14,9,4,-1.],[10,14,3,4,3.]],tilted:0,threshold:2.0851049339398742e-004,right_val:0.0772129893302917,left_val:-0.1380268037319183},{features:[[8,10,4,7,-1.],[10,10,2,7,2.]],tilted:0,threshold:-2.6843539671972394e-004,right_val:-0.0942557528614998,left_val:0.1364672034978867},{features:[[12,12,4,6,-1.],[12,12,2,6,2.]],tilted:0,threshold:8.8506387546658516e-003,right_val:-0.1688468009233475,left_val:0.0246034208685160},{features:[[6,12,4,6,-1.],[8,12,2,6,2.]],tilted:0,threshold:-8.4813922876492143e-004,right_val:0.1156672984361649,left_val:-0.1397240012884140},{features:[[9,12,4,6,-1.],[9,15,4,3,2.]],tilted:0,threshold:-3.7090150726726279e-005,right_val:-0.1770814955234528,left_val:0.0752842724323273},{features:[[5,12,6,6,-1.],[7,12,2,6,3.]],tilted:0,threshold:-0.0215339101850986,right_val:-0.0669784769415855,left_val:0.2023303061723709},{features:[[6,2,11,16,-1.],[6,6,11,8,2.]],tilted:0,threshold:0.0117136603221297,right_val:-0.1125181019306183,left_val:0.0868534892797470},{features:[[11,2,6,2,-1.],[11,2,6,1,2.]],tilted:1,threshold:-9.8365638405084610e-003,right_val:-0.0501796603202820,left_val:0.3016479015350342},{features:[[10,1,6,8,-1.],[13,1,3,4,2.],[10,5,3,4,2.]],tilted:0,threshold:-6.2104999087750912e-003,right_val:-0.0944418236613274,left_val:0.0682242289185524},{features:[[5,2,12,2,-1.],[11,2,6,2,2.]],tilted:0,threshold:-0.0200343001633883,right_val:0.0457285009324551,left_val:-0.2865754961967468},{features:[[10,13,8,3,-1.],[10,13,4,3,2.]],tilted:0,threshold:-2.2154829639475793e-004,right_val:-0.0871150493621826,left_val:0.0716037601232529},{features:[[5,0,12,6,-1.],[11,0,6,6,2.]],tilted:0,threshold:-5.2436119876801968e-003,right_val:-0.0902889072895050,left_val:0.1343950033187866},{features:[[10,7,12,3,-1.],[10,8,12,1,3.]],tilted:0,threshold:-0.0117112295702100,right_val:-0.0259517803788185,left_val:0.1487469971179962},{features:[[0,7,12,3,-1.],[0,8,12,1,3.]],tilted:0,threshold:5.8587929233908653e-003,right_val:0.1809632927179337,left_val:-0.0669820234179497},{features:[[20,0,2,18,-1.],[20,9,2,9,2.]],tilted:0,threshold:0.1043256968259811,right_val:-0.7954081296920776,left_val:0.0102093303576112},{features:[[0,0,2,18,-1.],[0,9,2,9,2.]],tilted:0,threshold:-0.0170491300523281,right_val:0.0644709914922714,left_val:-0.2051631063222885},{features:[[14,6,6,12,-1.],[17,6,3,6,2.],[14,12,3,6,2.]],tilted:0,threshold:0.0258776992559433,right_val:0.1604197025299072,left_val:-0.0300797205418348},{features:[[1,5,6,10,-1.],[1,10,6,5,2.]],tilted:0,threshold:-4.0637338533997536e-003,right_val:-0.1166540011763573,left_val:0.1087096035480499},{features:[[16,1,4,12,-1.],[16,5,4,4,3.]],tilted:0,threshold:-0.0192867200821638,right_val:0.0280551891773939,left_val:-0.1250395029783249},{features:[[2,1,4,12,-1.],[2,5,4,4,3.]],tilted:0,threshold:-7.2130301305151079e-006,right_val:-0.1236701980233192,left_val:0.1184526011347771},{features:[[3,12,16,4,-1.],[11,12,8,2,2.],[3,14,8,2,2.]],tilted:0,threshold:-2.6098350062966347e-003,right_val:0.0823187604546547,left_val:-0.1449867039918900},{features:[[0,2,12,2,-1.],[0,3,12,1,2.]],tilted:0,threshold:3.2303779153153300e-004,right_val:0.1199266016483307,left_val:-0.0958554968237877},{features:[[6,2,13,3,-1.],[6,3,13,1,3.]],tilted:0,threshold:-1.1308960383757949e-003,right_val:-0.0826974734663963,left_val:0.1288295984268189},{features:[[1,0,10,6,-1.],[1,0,5,3,2.],[6,3,5,3,2.]],tilted:0,threshold:0.0171764697879553,right_val:-0.3087381124496460,left_val:0.0360246598720551},{features:[[9,11,12,5,-1.],[13,11,4,5,3.]],tilted:0,threshold:-0.0105153303593397,right_val:-0.1078578010201454,left_val:0.0963303372263908},{features:[[2,6,6,12,-1.],[2,6,3,6,2.],[5,12,3,6,2.]],tilted:0,threshold:0.0505835004150867,right_val:0.4513450860977173,left_val:-0.0347158014774323},{features:[[9,12,8,6,-1.],[13,12,4,3,2.],[9,15,4,3,2.]],tilted:0,threshold:8.7582931155338883e-004,right_val:0.0736316889524460,left_val:-0.0956771522760391},{features:[[1,7,6,8,-1.],[1,7,3,4,2.],[4,11,3,4,2.]],tilted:0,threshold:-0.0319572202861309,right_val:0.0363292805850506,left_val:-0.3147349059581757},{features:[[14,6,3,8,-1.],[15,7,1,8,3.]],tilted:1,threshold:5.9863331262022257e-004,right_val:0.0543428994715214,left_val:-0.0426766909658909},{features:[[2,14,12,4,-1.],[6,14,4,4,3.]],tilted:0,threshold:-6.6270949319005013e-003,right_val:-0.1730908006429672,left_val:0.0735109224915504},{features:[[14,4,2,11,-1.],[14,4,1,11,2.]],tilted:1,threshold:-0.0731865167617798,right_val:-5.6781149469316006e-003,left_val:0.6877769231796265},{features:[[8,6,8,3,-1.],[7,7,8,1,3.]],tilted:1,threshold:0.0202908404171467,right_val:0.3045086860656738,left_val:-0.0407205410301685},{features:[[6,12,12,3,-1.],[6,13,12,1,3.]],tilted:0,threshold:-3.0989840161055326e-003,right_val:0.0543296895921230,left_val:-0.1278737038373947},{features:[[2,3,18,3,-1.],[2,4,18,1,3.]],tilted:0,threshold:-1.1258859885856509e-003,right_val:-0.0834772363305092,left_val:0.1198007985949516},{features:[[11,6,9,9,-1.],[14,6,3,9,3.]],tilted:0,threshold:3.9993048994801939e-004,right_val:0.0769529119133949,left_val:-0.0954270735383034},{features:[[3,13,11,4,-1.],[3,15,11,2,2.]],tilted:0,threshold:0.0112025402486324,right_val:-0.4031470119953156,left_val:0.0251253098249435},{features:[[17,5,4,6,-1.],[17,5,2,6,2.]],tilted:0,threshold:-0.0217539705336094,right_val:0.0153385195881128,left_val:-0.2304240018129349},{features:[[1,5,4,6,-1.],[3,5,2,6,2.]],tilted:0,threshold:7.6912459917366505e-005,right_val:0.1038817018270493,left_val:-0.0955814868211746},{features:[[6,0,16,3,-1.],[10,0,8,3,2.]],tilted:0,threshold:0.0910115391016006,right_val:0.7559375166893005,left_val:-8.7168300524353981e-003},{features:[[8,6,3,12,-1.],[9,6,1,12,3.]],tilted:0,threshold:-4.3160789646208286e-003,right_val:-0.0701520964503288,left_val:0.1349443942308426},{features:[[14,2,2,8,-1.],[14,2,1,8,2.]],tilted:1,threshold:-0.0505811907351017,right_val:2.2676400840282440e-003,left_val:-0.6611269116401672},{features:[[9,0,12,3,-1.],[9,0,6,3,2.]],tilted:1,threshold:-8.3926003426313400e-003,right_val:0.0779204815626144,left_val:-0.1288360953330994},{features:[[6,0,16,3,-1.],[10,0,8,3,2.]],tilted:0,threshold:0.0550406612455845,right_val:-0.2782005071640015,left_val:7.7853789553046227e-003},{features:[[0,0,16,3,-1.],[4,0,8,3,2.]],tilted:0,threshold:-0.0418625511229038,right_val:-0.0291946399956942,left_val:0.4333544969558716},{features:[[8,12,14,3,-1.],[8,13,14,1,3.]],tilted:0,threshold:-7.4230520986020565e-003,right_val:-0.0320475101470947,left_val:0.1315450072288513},{features:[[8,4,11,2,-1.],[8,4,11,1,2.]],tilted:1,threshold:1.9948489498347044e-003,right_val:-0.1166255995631218,left_val:0.0832996889948845},{features:[[2,5,20,13,-1.],[2,5,10,13,2.]],tilted:0,threshold:0.0418514311313629,right_val:-0.1281515955924988,left_val:0.0414611697196960},{features:[[0,2,18,9,-1.],[6,5,6,3,9.]],tilted:0,threshold:0.2784438133239746,right_val:0.5223631858825684,left_val:-0.0226128101348877},{features:[[10,13,12,3,-1.],[10,14,12,1,3.]],tilted:0,threshold:-7.1095931343734264e-003,right_val:-0.0279447995126247,left_val:0.1290251016616821},{features:[[8,11,6,7,-1.],[10,11,2,7,3.]],tilted:0,threshold:0.0111756101250649,right_val:-0.1955953985452652,left_val:0.0513666607439518},{features:[[5,6,12,11,-1.],[9,6,4,11,3.]],tilted:0,threshold:-0.0103642102330923,right_val:0.1519950926303864,left_val:-0.0726313814520836},{features:[[3,6,6,6,-1.],[5,6,2,6,3.]],tilted:0,threshold:-9.4094304367899895e-003,right_val:0.0533468611538410,left_val:-0.2099336981773377},{features:[[13,4,6,13,-1.],[15,4,2,13,3.]],tilted:0,threshold:-0.1037501022219658,right_val:3.9442018605768681e-003,left_val:-0.3369319140911102},{features:[[3,4,6,13,-1.],[5,4,2,13,3.]],tilted:0,threshold:-9.5977628370746970e-004,right_val:-0.1057410016655922,left_val:0.1030761003494263},{features:[[5,10,12,3,-1.],[9,10,4,3,3.]],tilted:0,threshold:-0.0558168105781078,right_val:-0.0448851808905602,left_val:0.2607400119304657},{features:[[5,8,12,6,-1.],[8,8,6,6,2.]],tilted:0,threshold:-0.1343093961477280,right_val:0.0154108600690961,left_val:-0.8166074752807617},{features:[[14,2,2,8,-1.],[14,2,1,8,2.]],tilted:1,threshold:0.0604569502174854,right_val:-0.9999178051948547,left_val:-3.0265029054135084e-003},{features:[[8,2,8,2,-1.],[8,2,8,1,2.]],tilted:1,threshold:0.0243590790778399,right_val:-0.4663215875625610,left_val:0.0241913106292486},{features:[[8,6,9,5,-1.],[11,6,3,5,3.]],tilted:0,threshold:0.0527357794344425,right_val:0.2146047949790955,left_val:-0.0242667607963085},{features:[[0,3,14,4,-1.],[0,3,7,2,2.],[7,5,7,2,2.]],tilted:0,threshold:-5.5626039393246174e-003,right_val:-0.1212090998888016,left_val:0.1087993979454041},{features:[[12,1,3,8,-1.],[13,2,1,8,3.]],tilted:1,threshold:0.0908552631735802,right_val:-0.9997577071189880,left_val:1.0956900223391131e-004},{features:[[10,1,8,3,-1.],[9,2,8,1,3.]],tilted:1,threshold:-0.0346811898052692,right_val:0.0236911494284868,left_val:-0.4540998041629791},{features:[[14,3,6,6,-1.],[14,5,6,2,3.]],tilted:0,threshold:-2.9579090551123954e-005,right_val:-0.0498729683458805,left_val:0.0480313189327717},{features:[[4,1,6,10,-1.],[4,1,3,5,2.],[7,6,3,5,2.]],tilted:0,threshold:0.0262771304696798,right_val:0.3397437036037445,left_val:-0.0294567607343197},{features:[[18,1,3,13,-1.],[19,1,1,13,3.]],tilted:0,threshold:-0.0462760217487812,right_val:-0.0103595796972513,left_val:0.4549660980701447},{features:[[1,1,3,13,-1.],[2,1,1,13,3.]],tilted:0,threshold:1.2048200005665421e-004,right_val:0.1009673029184341,left_val:-0.1057519987225533},{features:[[11,1,2,8,-1.],[11,1,1,8,2.]],tilted:1,threshold:6.8154390901327133e-003,right_val:-0.0997650697827339,left_val:0.0284956097602844},{features:[[11,1,8,2,-1.],[11,1,8,1,2.]],tilted:1,threshold:1.6169620212167501e-003,right_val:0.0878289788961411,left_val:-0.1325616985559464},{features:[[8,4,6,6,-1.],[8,6,6,2,3.]],tilted:0,threshold:0.0145633798092604,right_val:0.2511326074600220,left_val:-0.0430799014866352},{features:[[5,4,7,6,-1.],[5,6,7,2,3.]],tilted:0,threshold:0.0203529093414545,right_val:-0.3251897096633911,left_val:0.0394636392593384},{features:[[9,11,13,3,-1.],[9,12,13,1,3.]],tilted:0,threshold:-0.0207892693579197,right_val:-0.0212719999253750,left_val:0.1899335980415344},{features:[[0,11,13,3,-1.],[0,12,13,1,3.]],tilted:0,threshold:0.0317801013588905,right_val:0.4395782947540283,left_val:-0.0237682200968266},{features:[[12,10,9,8,-1.],[12,14,9,4,2.]],tilted:0,threshold:0.1245922967791557,right_val:-0.9999179840087891,left_val:6.5275398083031178e-003},{features:[[1,10,9,8,-1.],[1,14,9,4,2.]],tilted:0,threshold:-0.0840070396661758,right_val:0.0289165601134300,left_val:-0.3562028110027313},{features:[[4,10,18,8,-1.],[13,10,9,4,2.],[4,14,9,4,2.]],tilted:0,threshold:9.6772145479917526e-003,right_val:-0.1548271030187607,left_val:0.0640739426016808},{features:[[0,10,18,8,-1.],[0,10,9,4,2.],[9,14,9,4,2.]],tilted:0,threshold:0.1040503978729248,right_val:0.5762320756912231,left_val:-0.0226520504802465},{features:[[12,2,4,12,-1.],[12,2,2,12,2.]],tilted:1,threshold:0.0408144108951092,right_val:0.0772985070943832,left_val:-0.0373685695230961},{features:[[0,5,20,13,-1.],[10,5,10,13,2.]],tilted:0,threshold:-0.4691618978977203,right_val:0.0136070800945163,left_val:-0.7730463147163391},{features:[[10,6,9,6,-1.],[10,8,9,2,3.]],tilted:0,threshold:-0.1372341960668564,right_val:-1.7328710528090596e-003,left_val:-1.},{features:[[3,6,9,6,-1.],[3,8,9,2,3.]],tilted:0,threshold:0.0375694483518600,right_val:-0.3551242947578430,left_val:0.0314127095043659},{features:[[7,4,15,8,-1.],[7,6,15,4,2.]],tilted:0,threshold:-0.0126453796401620,right_val:0.0418895483016968,left_val:-0.0713228806853294},{features:[[9,2,12,2,-1.],[9,2,12,1,2.]],tilted:1,threshold:0.0399338603019714,right_val:0.3593294024467468,left_val:-0.0334470011293888},{features:[[12,6,6,4,-1.],[12,6,6,2,2.]],tilted:1,threshold:0.0172074399888515,right_val:-0.0776343792676926,left_val:0.0261265300214291},{features:[[7,0,13,3,-1.],[6,1,13,1,3.]],tilted:1,threshold:0.0597022287547588,right_val:0.5732179880142212,left_val:-0.0237179808318615},{features:[[3,0,18,2,-1.],[3,0,9,2,2.]],tilted:0,threshold:0.0799178034067154,right_val:0.4346744120121002,left_val:-9.7547564655542374e-003},{features:[[4,5,13,12,-1.],[4,9,13,4,3.]],tilted:0,threshold:0.1135172024369240,right_val:0.2612080872058868,left_val:-0.0389219708740711},{features:[[4,6,18,9,-1.],[10,9,6,3,9.]],tilted:0,threshold:0.4837945103645325,right_val:-0.6502416133880615,left_val:7.8452667221426964e-003},{features:[[8,5,6,11,-1.],[10,5,2,11,3.]],tilted:0,threshold:-0.1004507020115852,right_val:0.0122501999139786,left_val:-0.8007202148437500},{features:[[6,2,16,16,-1.],[6,6,16,8,2.]],tilted:0,threshold:0.2717601954936981,right_val:-0.6939312219619751,left_val:4.4636582024395466e-003},{features:[[0,2,16,16,-1.],[0,6,16,8,2.]],tilted:0,threshold:-0.1230124980211258,right_val:-0.0338415503501892,left_val:0.3248383998870850},{features:[[18,1,2,12,-1.],[18,7,2,6,2.]],tilted:0,threshold:0.0611887499690056,right_val:-0.7781751751899719,left_val:7.1536018513143063e-003},{features:[[2,1,2,12,-1.],[2,7,2,6,2.]],tilted:0,threshold:-7.8828241676092148e-003,right_val:0.0677954331040382,left_val:-0.1975423991680145},{features:[[8,3,14,9,-1.],[8,6,14,3,3.]],tilted:0,threshold:-0.2558487951755524,right_val:1.4300020411610603e-003,left_val:-1.},{features:[[0,3,14,9,-1.],[0,6,14,3,3.]],tilted:0,threshold:0.1309846937656403,right_val:0.7454720735549927,left_val:-0.0166683103889227},{features:[[10,6,4,9,-1.],[10,9,4,3,3.]],tilted:0,threshold:-0.0845530778169632,right_val:8.3142798393964767e-003,left_val:-0.6342390179634094},{features:[[0,6,3,12,-1.],[0,12,3,6,2.]],tilted:0,threshold:-0.0882977172732353,right_val:0.0105499401688576,left_val:-0.8570597171783447},{features:[[16,2,6,9,-1.],[13,5,6,3,3.]],tilted:1,threshold:-0.1037487983703613,right_val:-0.0224885791540146,left_val:0.1207318007946014},{features:[[10,0,12,4,-1.],[9,1,12,2,2.]],tilted:1,threshold:1.4872249448671937e-003,right_val:0.1040541008114815,left_val:-0.1109644025564194},{features:[[11,0,10,18,-1.],[16,0,5,9,2.],[11,9,5,9,2.]],tilted:0,threshold:0.2136403024196625,right_val:-0.4976033866405487,left_val:7.3841079138219357e-003},{features:[[1,0,10,18,-1.],[1,0,5,9,2.],[6,9,5,9,2.]],tilted:0,threshold:0.0262943096458912,right_val:0.2628476023674011,left_val:-0.0632127001881599},{features:[[7,12,14,3,-1.],[7,12,7,3,2.]],tilted:0,threshold:-2.6777000166475773e-003,right_val:-0.1017431020736694,left_val:0.0564883500337601},{features:[[7,11,8,3,-1.],[11,11,4,3,2.]],tilted:0,threshold:-2.1261540241539478e-003,right_val:0.0661599636077881,left_val:-0.1644288003444672},{features:[[2,13,18,4,-1.],[2,13,9,4,2.]],tilted:0,threshold:-8.2200914621353149e-003,right_val:0.0835154727101326,left_val:-0.1613277941942215},{features:[[10,6,4,6,-1.],[10,6,2,6,2.]],tilted:1,threshold:-0.0117018800228834,right_val:-0.0591160506010056,left_val:0.2151619940996170},{features:[[8,9,6,9,-1.],[10,9,2,9,3.]],tilted:0,threshold:-7.0460740244016051e-004,right_val:-0.1300875991582871,left_val:0.0961422994732857},{features:[[3,11,13,3,-1.],[3,12,13,1,3.]],tilted:0,threshold:-1.9671309273689985e-003,right_val:-0.0885426402091980,left_val:0.1260503977537155},{features:[[18,10,4,6,-1.],[18,10,2,6,2.]],tilted:0,threshold:-9.5004076138138771e-003,right_val:0.0459226295351982,left_val:-0.2360457926988602},{features:[[5,5,9,5,-1.],[8,5,3,5,3.]],tilted:0,threshold:0.0268023703247309,right_val:0.2388713061809540,left_val:-0.0489667691290379},{features:[[13,0,2,14,-1.],[13,0,1,14,2.]],tilted:0,threshold:0.0221774205565453,right_val:0.2708427011966705,left_val:-0.0125605901703238},{features:[[2,0,18,7,-1.],[8,0,6,7,3.]],tilted:0,threshold:0.0933828800916672,right_val:-0.3970789015293121,left_val:0.0338358506560326},{features:[[13,4,6,8,-1.],[16,4,3,4,2.],[13,8,3,4,2.]],tilted:0,threshold:-0.0131510803475976,right_val:0.0259307399392128,left_val:-0.1136426031589508},{features:[[3,4,6,8,-1.],[3,4,3,4,2.],[6,8,3,4,2.]],tilted:0,threshold:2.6929581072181463e-003,right_val:-0.1629091054201126,left_val:0.0682023465633392},{features:[[8,5,12,2,-1.],[8,6,12,1,2.]],tilted:0,threshold:-5.7519129477441311e-003,right_val:-0.0577118992805481,left_val:0.1319772005081177},{features:[[7,0,3,12,-1.],[8,0,1,12,3.]],tilted:0,threshold:-1.1071159970015287e-003,right_val:-0.0773000419139862,left_val:0.1455008983612061},{features:[[15,0,3,10,-1.],[16,1,1,10,3.]],tilted:1,threshold:0.0318051800131798,right_val:-0.2180342972278595,left_val:0.0141812795773149},{features:[[2,4,12,12,-1.],[6,8,4,4,9.]],tilted:0,threshold:0.4072949886322022,right_val:0.7485334873199463,left_val:-0.0137729402631521},{features:[[5,10,13,3,-1.],[5,11,13,1,3.]],tilted:0,threshold:0.0701730772852898,right_val:-0.8609462976455689,left_val:0.0115358103066683},{features:[[5,15,12,2,-1.],[5,16,12,1,2.]],tilted:0,threshold:-1.9437450100667775e-004,right_val:-0.1511144042015076,left_val:0.0630099922418594},{features:[[17,8,5,6,-1.],[17,11,5,3,2.]],tilted:0,threshold:0.0394255593419075,right_val:-0.4725382030010223,left_val:0.0241153296083212},{features:[[5,12,6,6,-1.],[5,14,6,2,3.]],tilted:0,threshold:2.6128459721803665e-003,right_val:-0.1742976009845734,left_val:0.0539631508290768}],threshold:-30.6205997467041020},{simpleClassifiers:[{features:[[10,6,4,7,-1.],[10,6,2,7,2.]],tilted:1,threshold:0.1046843007206917,right_val:0.4245404899120331,left_val:-0.0475701093673706},{features:[[12,3,4,10,-1.],[13,4,2,10,2.]],tilted:1,threshold:-0.0429464206099510,right_val:-0.0126551697030663,left_val:0.1632889062166214},{features:[[10,3,10,4,-1.],[9,4,10,2,2.]],tilted:1,threshold:-8.1577729433774948e-003,right_val:-0.1087663024663925,left_val:0.1023579984903336},{features:[[12,4,2,12,-1.],[12,4,1,12,2.]],tilted:1,threshold:2.1813691128045321e-003,right_val:-0.0558997616171837,left_val:0.0879852473735809},{features:[[1,11,15,3,-1.],[6,11,5,3,3.]],tilted:0,threshold:-6.5157511271536350e-003,right_val:-0.1373631954193115,left_val:0.0828638523817062},{features:[[11,6,6,9,-1.],[13,6,2,9,3.]],tilted:0,threshold:0.0247165001928806,right_val:0.1337125003337860,left_val:0.0167552102357149},{features:[[5,6,6,9,-1.],[7,6,2,9,3.]],tilted:0,threshold:-5.9396267170086503e-004,right_val:0.1050129011273384,left_val:-0.1377137005329132},{features:[[8,5,6,6,-1.],[10,5,2,6,3.]],tilted:0,threshold:0.0293738208711147,right_val:0.4273186028003693,left_val:-0.0445813983678818},{features:[[1,2,6,8,-1.],[1,2,3,4,2.],[4,6,3,4,2.]],tilted:0,threshold:-0.0165769197046757,right_val:0.0297183692455292,left_val:-0.2982746064662933},{features:[[14,0,4,9,-1.],[14,3,4,3,3.]],tilted:0,threshold:9.4569493085145950e-003,right_val:-0.0766755267977715,left_val:0.0536169484257698},{features:[[0,0,18,9,-1.],[0,3,18,3,3.]],tilted:0,threshold:0.0745819136500359,right_val:0.3017961084842682,left_val:-0.0465544089674950},{features:[[9,5,5,12,-1.],[9,8,5,6,2.]],tilted:0,threshold:-0.0380556210875511,right_val:0.0203556902706623,left_val:-0.2825511991977692},{features:[[3,5,16,3,-1.],[3,6,16,1,3.]],tilted:0,threshold:0.0110655399039388,right_val:0.2313262969255447,left_val:-0.0539425984025002},{features:[[16,2,6,8,-1.],[19,2,3,4,2.],[16,6,3,4,2.]],tilted:0,threshold:0.0135382199659944,right_val:-0.2180289030075073,left_val:0.0281029809266329},{features:[[0,2,6,8,-1.],[0,2,3,4,2.],[3,6,3,4,2.]],tilted:0,threshold:4.6914750710129738e-003,right_val:-0.1746082007884979,left_val:0.0636170208454132},{features:[[5,2,12,16,-1.],[5,10,12,8,2.]],tilted:0,threshold:0.4305444061756134,right_val:0.5719779729843140,left_val:-0.0210623797029257},{features:[[5,11,8,6,-1.],[5,11,4,3,2.],[9,14,4,3,2.]],tilted:0,threshold:1.4298999449238181e-003,right_val:0.0768510624766350,left_val:-0.1678003966808319},{features:[[8,2,6,8,-1.],[11,2,3,4,2.],[8,6,3,4,2.]],tilted:0,threshold:0.0278552304953337,right_val:0.2895691096782684,left_val:-0.0356479696929455},{features:[[0,6,7,12,-1.],[0,10,7,4,3.]],tilted:0,threshold:0.0143916700035334,right_val:-0.1295132040977478,left_val:0.0833004266023636},{features:[[16,8,6,8,-1.],[16,10,6,4,2.]],tilted:0,threshold:-0.0776373818516731,right_val:8.1426621181890368e-004,left_val:-1.},{features:[[0,8,6,8,-1.],[0,10,6,4,2.]],tilted:0,threshold:0.0160511992871761,right_val:0.2196779996156693,left_val:-0.0540085881948471},{features:[[4,0,17,3,-1.],[4,1,17,1,3.]],tilted:0,threshold:-0.0709887295961380,right_val:-0.0164764001965523,left_val:0.6160213947296143},{features:[[7,4,4,14,-1.],[8,4,2,14,2.]],tilted:0,threshold:-0.0583109892904758,right_val:0.0125171002000570,left_val:-0.9595535993576050},{features:[[9,5,5,12,-1.],[9,8,5,6,2.]],tilted:0,threshold:-7.9547446221113205e-003,right_val:0.0338969603180885,left_val:-0.0936840027570724},{features:[[10,4,10,4,-1.],[9,5,10,2,2.]],tilted:1,threshold:-0.0496857985854149,right_val:-0.0297160502523184,left_val:0.3146679997444153},{features:[[13,1,3,13,-1.],[14,2,1,13,3.]],tilted:1,threshold:0.0977515280246735,right_val:-0.6700987219810486,left_val:7.5905729318037629e-004},{features:[[9,1,13,3,-1.],[8,2,13,1,3.]],tilted:1,threshold:0.0759088024497032,right_val:-0.6625136137008667,left_val:0.0160733293741941},{features:[[4,16,14,2,-1.],[4,17,14,1,2.]],tilted:0,threshold:1.3333460083231330e-003,right_val:-0.1880871057510376,left_val:0.0522413998842239},{features:[[0,16,15,2,-1.],[0,17,15,1,2.]],tilted:0,threshold:6.9728610105812550e-004,right_val:0.1664233952760696,left_val:-0.0890448018908501},{features:[[11,4,2,6,-1.],[11,4,1,6,2.]],tilted:1,threshold:0.0208895094692707,right_val:-0.1608344018459320,left_val:0.0213687196373940},{features:[[0,6,4,9,-1.],[0,9,4,3,3.]],tilted:0,threshold:-1.7649700166657567e-003,right_val:-0.0859223976731300,left_val:0.1239852979779244},{features:[[14,0,7,6,-1.],[12,2,7,2,3.]],tilted:1,threshold:2.7779850643128157e-003,right_val:0.0293225497007370,left_val:-0.0443661510944366},{features:[[8,4,6,10,-1.],[8,4,3,5,2.],[11,9,3,5,2.]],tilted:0,threshold:7.9974532127380371e-004,right_val:0.0888182967901230,left_val:-0.1235152035951614},{features:[[7,7,8,10,-1.],[11,7,4,5,2.],[7,12,4,5,2.]],tilted:0,threshold:7.0215959567576647e-004,right_val:0.1454429030418396,left_val:-0.0801541805267334},{features:[[5,6,12,8,-1.],[5,6,6,4,2.],[11,10,6,4,2.]],tilted:0,threshold:-0.0406044200062752,right_val:0.0343148596584797,left_val:-0.3604758083820343},{features:[[8,6,8,8,-1.],[12,6,4,4,2.],[8,10,4,4,2.]],tilted:0,threshold:-0.0416868515312672,right_val:8.5808392614126205e-003,left_val:-0.2092776000499725},{features:[[6,6,8,8,-1.],[6,6,4,4,2.],[10,10,4,4,2.]],tilted:0,threshold:-0.0463901981711388,right_val:-0.0226325001567602,left_val:0.5376852750778198},{features:[[12,4,6,6,-1.],[10,6,6,2,3.]],tilted:1,threshold:-0.1582203060388565,right_val:1.4312319690361619e-003,left_val:-1.},{features:[[5,7,10,8,-1.],[5,7,5,4,2.],[10,11,5,4,2.]],tilted:0,threshold:-0.0756833702325821,right_val:0.0128438398241997,left_val:-0.8050302863121033},{features:[[4,5,18,3,-1.],[4,6,18,1,3.]],tilted:0,threshold:-0.0578083284199238,right_val:-0.0126303201541305,left_val:0.3867568075656891},{features:[[3,16,15,2,-1.],[3,17,15,1,2.]],tilted:0,threshold:-4.5112581574358046e-005,right_val:-0.1343374997377396,left_val:0.0749589875340462},{features:[[3,10,16,2,-1.],[3,11,16,1,2.]],tilted:0,threshold:0.0392054803669453,right_val:-0.4574862122535706,left_val:0.0219805799424648},{features:[[3,12,6,6,-1.],[5,12,2,6,3.]],tilted:0,threshold:0.0449452400207520,right_val:0.4871528148651123,left_val:-0.0237634591758251},{features:[[18,2,3,13,-1.],[19,2,1,13,3.]],tilted:0,threshold:-0.0578491911292076,right_val:-6.2380530871450901e-003,left_val:0.3556363880634308},{features:[[4,10,12,4,-1.],[8,10,4,4,3.]],tilted:0,threshold:-0.1039723977446556,right_val:0.0150228803977370,left_val:-0.6226279139518738},{features:[[7,7,14,7,-1.],[7,7,7,7,2.]],tilted:0,threshold:-0.2523828148841858,right_val:-1.9238379900343716e-004,left_val:-0.5905948281288147},{features:[[1,7,14,7,-1.],[8,7,7,7,2.]],tilted:0,threshold:0.1967588067054749,right_val:-0.7275320887565613,left_val:0.0126251596957445},{features:[[11,0,8,13,-1.],[11,0,4,13,2.]],tilted:0,threshold:0.0374124199151993,right_val:0.1214763969182968,left_val:-0.0234783403575420},{features:[[0,6,4,12,-1.],[0,6,2,6,2.],[2,12,2,6,2.]],tilted:0,threshold:-8.0470675602555275e-003,right_val:0.0497434996068478,left_val:-0.1816778928041458},{features:[[14,2,2,12,-1.],[14,2,1,12,2.]],tilted:1,threshold:0.0412974916398525,right_val:-0.1467950046062470,left_val:0.0102590499445796},{features:[[2,2,8,12,-1.],[2,2,4,6,2.],[6,8,4,6,2.]],tilted:0,threshold:-0.0507357306778431,right_val:-0.0498070493340492,left_val:0.2267964035272598},{features:[[17,0,4,16,-1.],[17,8,4,8,2.]],tilted:0,threshold:-3.6145109334029257e-004,right_val:-0.0704108327627182,left_val:0.0417982786893845},{features:[[1,0,4,16,-1.],[1,8,4,8,2.]],tilted:0,threshold:-0.1235945001244545,right_val:-0.0168224293738604,left_val:0.5828350186347961},{features:[[6,1,16,16,-1.],[6,9,16,8,2.]],tilted:0,threshold:0.0570716187357903,right_val:0.1707827001810074,left_val:-0.0405320711433887},{features:[[8,0,6,7,-1.],[10,2,2,7,3.]],tilted:1,threshold:5.8561540208756924e-003,right_val:0.0825652331113815,left_val:-0.1382790058851242},{features:[[15,1,6,6,-1.],[13,3,6,2,3.]],tilted:1,threshold:-0.1147285029292107,right_val:3.4348990302532911e-003,left_val:-0.4675404131412506},{features:[[7,1,6,6,-1.],[9,3,2,6,3.]],tilted:1,threshold:0.0205186996608973,right_val:-0.1689410954713821,left_val:0.0815079435706139},{features:[[14,2,2,12,-1.],[14,2,1,12,2.]],tilted:1,threshold:0.0546297691762447,right_val:0.2364037930965424,left_val:-7.4763749726116657e-003},{features:[[5,11,12,6,-1.],[5,14,12,3,2.]],tilted:0,threshold:-0.0693129673600197,right_val:-0.0347853004932404,left_val:0.3007157146930695},{features:[[5,13,12,4,-1.],[5,14,12,2,2.]],tilted:0,threshold:-7.4176848866045475e-003,right_val:0.0475318208336830,left_val:-0.2876656055450440},{features:[[2,15,18,2,-1.],[2,16,18,1,2.]],tilted:0,threshold:0.0102232601493597,right_val:0.3924953937530518,left_val:-0.0308347996324301},{features:[[18,4,4,14,-1.],[20,4,2,7,2.],[18,11,2,7,2.]],tilted:0,threshold:-0.0273466594517231,right_val:0.0139675298705697,left_val:-0.1569548994302750},{features:[[0,4,4,14,-1.],[0,4,2,7,2.],[2,11,2,7,2.]],tilted:0,threshold:0.0338751003146172,right_val:-0.3900640904903412,left_val:0.0260633099824190},{features:[[11,0,3,12,-1.],[12,0,1,12,3.]],tilted:0,threshold:0.0451747216284275,right_val:-0.5676915049552918,left_val:8.9199207723140717e-003},{features:[[9,3,4,6,-1.],[9,6,4,3,2.]],tilted:0,threshold:0.0114882299676538,right_val:0.2510992884635925,left_val:-0.0454914197325706},{features:[[7,4,15,10,-1.],[7,9,15,5,2.]],tilted:0,threshold:-0.0104961497709155,right_val:-0.1062353998422623,left_val:0.0648954436182976},{features:[[4,2,9,12,-1.],[4,6,9,4,3.]],tilted:0,threshold:6.0881208628416061e-003,right_val:-0.1477614939212799,left_val:0.0809291824698448},{features:[[3,1,17,3,-1.],[3,2,17,1,3.]],tilted:0,threshold:-2.6524660643190145e-003,right_val:-0.0726748630404472,left_val:0.1206251978874207},{features:[[0,1,16,3,-1.],[0,2,16,1,3.]],tilted:0,threshold:2.3559860419481993e-003,right_val:0.1412654072046280,left_val:-0.0818112716078758},{features:[[7,4,15,10,-1.],[7,9,15,5,2.]],tilted:0,threshold:-0.2677721977233887,right_val:4.4526048004627228e-003,left_val:-0.7808383107185364},{features:[[0,4,15,10,-1.],[0,9,15,5,2.]],tilted:0,threshold:0.1596579998731613,right_val:-0.3896783888339996,left_val:0.0283816494047642},{features:[[15,0,6,18,-1.],[15,9,6,9,2.]],tilted:0,threshold:0.0518993698060513,right_val:0.1592101007699966,left_val:-0.0343053191900253},{features:[[3,14,12,4,-1.],[3,14,6,2,2.],[9,16,6,2,2.]],tilted:0,threshold:-1.3652780326083302e-003,right_val:0.0727199986577034,left_val:-0.1375547945499420},{features:[[13,0,9,5,-1.],[16,3,3,5,3.]],tilted:1,threshold:0.2249729931354523,right_val:0.9999485015869141,left_val:-4.8017292283475399e-003},{features:[[9,7,9,2,-1.],[9,7,9,1,2.]],tilted:1,threshold:3.1434150878340006e-003,right_val:-0.1664316058158875,left_val:0.0551515705883503},{features:[[12,6,3,7,-1.],[13,7,1,7,3.]],tilted:1,threshold:-6.2940339557826519e-003,right_val:-0.0604363791644573,left_val:0.0628960281610489},{features:[[3,4,8,8,-1.],[7,4,4,8,2.]],tilted:0,threshold:0.0513019114732742,right_val:0.3853493928909302,left_val:-0.0316718108952045},{features:[[7,8,12,3,-1.],[11,8,4,3,3.]],tilted:0,threshold:-0.0669808089733124,right_val:8.9958757162094116e-003,left_val:-0.1092590019106865},{features:[[8,6,5,6,-1.],[8,6,5,3,2.]],tilted:1,threshold:0.0514647588133812,right_val:-0.4215933978557587,left_val:0.0262100193649530},{features:[[10,7,10,6,-1.],[10,10,10,3,2.]],tilted:0,threshold:-0.0909821391105652,right_val:-7.8134387731552124e-003,left_val:0.3276037871837616},{features:[[0,9,16,3,-1.],[0,10,16,1,3.]],tilted:0,threshold:5.2848970517516136e-003,right_val:0.1499817967414856,left_val:-0.0793995708227158},{features:[[7,9,12,3,-1.],[7,10,12,1,3.]],tilted:0,threshold:-1.5017699915915728e-003,right_val:-0.0735320374369621,left_val:0.0977031067013741},{features:[[2,10,8,6,-1.],[2,13,8,3,2.]],tilted:0,threshold:-2.5415199343115091e-003,right_val:-0.1488324999809265,left_val:0.0678011327981949},{features:[[16,6,4,12,-1.],[16,9,4,6,2.]],tilted:0,threshold:0.0442528203129768,right_val:-0.2288018018007278,left_val:0.0164758302271366},{features:[[3,11,8,6,-1.],[3,11,4,3,2.],[7,14,4,3,2.]],tilted:0,threshold:-0.0334571599960327,right_val:-0.0325535312294960,left_val:0.4196678996086121},{features:[[4,5,16,10,-1.],[12,5,8,5,2.],[4,10,8,5,2.]],tilted:0,threshold:0.1352989971637726,right_val:-0.7383912205696106,left_val:9.0894084423780441e-003},{features:[[7,10,3,8,-1.],[7,14,3,4,2.]],tilted:0,threshold:-0.0374409705400467,right_val:0.0239723902195692,left_val:-0.4261302053928375},{features:[[9,14,6,4,-1.],[9,16,6,2,2.]],tilted:0,threshold:-1.4479730452876538e-005,right_val:-0.1588882952928543,left_val:0.0567837804555893},{features:[[2,9,15,9,-1.],[2,12,15,3,3.]],tilted:0,threshold:-0.1183928027749062,right_val:-0.0218596495687962,left_val:0.5050063133239746},{features:[[11,2,8,6,-1.],[15,2,4,3,2.],[11,5,4,3,2.]],tilted:0,threshold:-8.5000684484839439e-003,right_val:-0.0459250211715698,left_val:0.0523399300873280},{features:[[4,11,8,6,-1.],[4,13,8,2,3.]],tilted:0,threshold:-0.0141895096749067,right_val:0.0403583496809006,left_val:-0.2359706014394760},{features:[[16,0,2,14,-1.],[16,0,1,14,2.]],tilted:1,threshold:0.0735994204878807,right_val:-0.5885360240936279,left_val:3.2680039294064045e-003},{features:[[6,0,14,2,-1.],[6,0,14,1,2.]],tilted:1,threshold:0.0549712702631950,right_val:0.5548272728919983,left_val:-0.0201965197920799},{features:[[13,9,7,6,-1.],[13,11,7,2,3.]],tilted:0,threshold:-0.0228161606937647,right_val:0.0178517401218414,left_val:-0.1758957952260971},{features:[[10,6,7,3,-1.],[9,7,7,1,3.]],tilted:1,threshold:2.3204670287668705e-003,right_val:0.1283307969570160,left_val:-0.0817499235272408},{features:[[18,2,3,13,-1.],[19,2,1,13,3.]],tilted:0,threshold:-0.1079790964722633,right_val:1.7423679819330573e-003,left_val:-1.},{features:[[1,2,3,13,-1.],[2,2,1,13,3.]],tilted:0,threshold:-0.0411119312047958,right_val:-0.0188788697123528,left_val:0.5843269824981690},{features:[[5,1,12,4,-1.],[11,1,6,2,2.],[5,3,6,2,2.]],tilted:0,threshold:-3.5695650149136782e-003,right_val:0.0647314265370369,left_val:-0.1755847036838532},{features:[[7,8,6,6,-1.],[7,10,6,2,3.]],tilted:0,threshold:-0.0663586705923080,right_val:9.2067662626504898e-003,left_val:-1.},{features:[[8,13,14,3,-1.],[8,14,14,1,3.]],tilted:0,threshold:-0.0189445801079273,right_val:-0.0189449395984411,left_val:0.2578308880329132},{features:[[10,5,6,6,-1.],[12,7,2,6,3.]],tilted:1,threshold:-0.1287126988172531,right_val:0.0144664896652102,left_val:-0.5847725868225098},{features:[[15,6,4,8,-1.],[16,7,2,8,2.]],tilted:1,threshold:2.4218629114329815e-003,right_val:0.0703321024775505,left_val:-0.0735908970236778},{features:[[0,13,14,4,-1.],[0,13,7,2,2.],[7,15,7,2,2.]],tilted:0,threshold:0.0297184605151415,right_val:0.4054276943206787,left_val:-0.0230119694024324},{features:[[1,7,21,6,-1.],[8,9,7,2,9.]],tilted:0,threshold:0.1755502969026566,right_val:-0.3728564977645874,left_val:0.0208087302744389},{features:[[7,4,6,8,-1.],[7,4,3,4,2.],[10,8,3,4,2.]],tilted:0,threshold:0.0371224507689476,right_val:0.3590877950191498,left_val:-0.0279596298933029},{features:[[7,4,8,8,-1.],[11,4,4,4,2.],[7,8,4,4,2.]],tilted:0,threshold:-3.8044541142880917e-003,right_val:0.0920613482594490,left_val:-0.1333799064159393},{features:[[10,6,7,4,-1.],[9,7,7,2,2.]],tilted:1,threshold:-0.0109307002276182,right_val:-0.0445358790457249,left_val:0.2319630980491638},{features:[[11,2,6,7,-1.],[11,2,3,7,2.]],tilted:1,threshold:0.1610362976789475,right_val:0.2204516977071762,left_val:-8.7691349908709526e-003},{features:[[11,2,7,6,-1.],[11,2,7,3,2.]],tilted:1,threshold:0.0259712301194668,right_val:-0.1891908049583435,left_val:0.0644210129976273},{features:[[11,4,8,6,-1.],[11,4,4,6,2.]],tilted:1,threshold:0.1263820976018906,right_val:0.1705718934535980,left_val:-0.0103621799498796},{features:[[11,4,6,8,-1.],[11,4,6,4,2.]],tilted:1,threshold:-9.1393403708934784e-003,right_val:0.0867900624871254,left_val:-0.1382824927568436},{features:[[12,3,8,5,-1.],[12,3,4,5,2.]],tilted:1,threshold:0.0177220907062292,right_val:-0.1229425966739655,left_val:0.0397198908030987},{features:[[10,3,5,8,-1.],[10,3,5,4,2.]],tilted:1,threshold:-0.0824257507920265,right_val:-0.0331659205257893,left_val:0.3002310097217560},{features:[[13,0,9,5,-1.],[16,3,3,5,3.]],tilted:1,threshold:0.0438925288617611,right_val:0.0987286865711212,left_val:-0.0130563396960497},{features:[[2,6,10,12,-1.],[2,9,10,6,2.]],tilted:0,threshold:3.5575369838625193e-003,right_val:-0.0927978232502937,left_val:0.1118628010153770},{features:[[15,6,5,12,-1.],[15,9,5,6,2.]],tilted:0,threshold:-0.0152988201007247,right_val:0.0231590103358030,left_val:-0.1300787925720215},{features:[[3,7,13,3,-1.],[3,8,13,1,3.]],tilted:0,threshold:-2.6504450943320990e-003,right_val:-0.0733554586768150,left_val:0.1352628022432327},{features:[[4,7,17,3,-1.],[4,8,17,1,3.]],tilted:0,threshold:0.0416368618607521,right_val:0.3585799932479858,left_val:-0.0190689805895090},{features:[[2,9,7,6,-1.],[2,11,7,2,3.]],tilted:0,threshold:-7.5290258973836899e-003,right_val:0.0582484491169453,left_val:-0.1867236047983170},{features:[[13,9,9,4,-1.],[13,11,9,2,2.]],tilted:0,threshold:-0.0400314889848232,right_val:-0.0146082304418087,left_val:0.2296977937221527},{features:[[9,0,5,9,-1.],[6,3,5,3,3.]],tilted:1,threshold:-0.1362470984458923,right_val:0.0112111996859312,left_val:-0.8708646297454834},{features:[[9,3,8,3,-1.],[9,3,4,3,2.]],tilted:0,threshold:4.5124008320271969e-003,right_val:0.1010309979319572,left_val:-0.0356449596583843},{features:[[3,0,4,13,-1.],[4,0,2,13,2.]],tilted:0,threshold:0.0541180707514286,right_val:0.6765226721763611,left_val:-0.0146894101053476},{features:[[13,0,8,6,-1.],[15,0,4,6,2.]],tilted:0,threshold:-0.0345539599657059,right_val:-9.7846649587154388e-003,left_val:0.2185456007719040},{features:[[3,0,6,5,-1.],[6,0,3,5,2.]],tilted:0,threshold:-0.0255208406597376,right_val:0.0240603704005480,left_val:-0.4689800143241882},{features:[[9,0,12,5,-1.],[9,0,6,5,2.]],tilted:0,threshold:-0.0354737006127834,right_val:-0.0214386992156506,left_val:0.1342754960060120},{features:[[1,2,6,8,-1.],[3,2,2,8,3.]],tilted:0,threshold:2.8683411073870957e-004,right_val:0.1076093986630440,left_val:-0.0973002836108208},{features:[[18,2,4,6,-1.],[18,2,2,6,2.]],tilted:0,threshold:-0.0787175893783569,right_val:2.7187850791960955e-003,left_val:-1.},{features:[[0,2,4,6,-1.],[2,2,2,6,2.]],tilted:0,threshold:-1.5701749362051487e-004,right_val:-0.0994413793087006,left_val:0.1119965985417366},{features:[[16,9,6,6,-1.],[16,11,6,2,3.]],tilted:0,threshold:0.0160265695303679,right_val:-0.1910049021244049,left_val:0.0341982617974281},{features:[[10,0,12,6,-1.],[13,3,6,6,2.]],tilted:1,threshold:-0.0191647298634052,right_val:-0.1191970035433769,left_val:0.0890248268842697},{features:[[14,2,3,12,-1.],[10,6,3,4,3.]],tilted:1,threshold:-0.0394451506435871,right_val:0.0376152098178864,left_val:-0.1071799024939537},{features:[[8,3,6,7,-1.],[11,3,3,7,2.]],tilted:0,threshold:2.2417430300265551e-003,right_val:0.1754747033119202,left_val:-0.0905810073018074},{features:[[16,1,3,15,-1.],[17,1,1,15,3.]],tilted:0,threshold:-3.8842540234327316e-003,right_val:-0.0424313694238663,left_val:0.0926973298192024},{features:[[0,1,6,8,-1.],[2,1,2,8,3.]],tilted:0,threshold:-0.0219146292656660,right_val:0.0375376716256142,left_val:-0.2801750898361206},{features:[[13,0,3,14,-1.],[14,0,1,14,3.]],tilted:0,threshold:-0.0375121198594570,right_val:-0.0175074506551027,left_val:0.3621852099895477},{features:[[6,0,3,14,-1.],[7,0,1,14,3.]],tilted:0,threshold:-8.4374047582969069e-004,right_val:-0.0802458673715591,left_val:0.1234840005636215},{features:[[4,13,18,2,-1.],[4,13,9,2,2.]],tilted:0,threshold:-2.6424999814480543e-003,right_val:-0.0833354368805885,left_val:0.0525657385587692},{features:[[2,9,15,3,-1.],[7,9,5,3,3.]],tilted:0,threshold:-0.0928368121385574,right_val:0.0233604293316603,left_val:-0.4206038117408752},{features:[[9,5,10,6,-1.],[14,5,5,3,2.],[9,8,5,3,2.]],tilted:0,threshold:0.0824630707502365,right_val:0.7899919748306274,left_val:-2.9815400484949350e-003},{features:[[3,5,10,6,-1.],[3,5,5,3,2.],[8,8,5,3,2.]],tilted:0,threshold:-0.0698649510741234,right_val:-0.0140212997794151,left_val:0.7380297183990479},{features:[[14,3,2,12,-1.],[14,3,1,12,2.]],tilted:1,threshold:0.0454393401741982,right_val:0.1997369974851608,left_val:-0.0113211600109935},{features:[[8,3,12,2,-1.],[8,3,12,1,2.]],tilted:1,threshold:-0.0502977892756462,right_val:-0.0176328904926777,left_val:0.6076467037200928},{features:[[12,7,6,6,-1.],[14,7,2,6,3.]],tilted:0,threshold:0.0604561492800713,right_val:0.3162288963794708,left_val:-5.9354598633944988e-003},{features:[[4,7,6,6,-1.],[6,7,2,6,3.]],tilted:0,threshold:-4.6769347973167896e-003,right_val:0.0596601888537407,left_val:-0.1809061020612717},{features:[[7,0,8,3,-1.],[7,0,4,3,2.]],tilted:0,threshold:3.6530068609863520e-004,right_val:0.1109272986650467,left_val:-0.0912200435996056},{features:[[9,0,4,6,-1.],[11,0,2,6,2.]],tilted:0,threshold:-0.0194912608712912,right_val:0.0284163095057011,left_val:-0.3707557022571564},{features:[[10,0,12,12,-1.],[13,0,6,12,2.]],tilted:0,threshold:0.0200564507395029,right_val:0.0781052336096764,left_val:-0.0581596791744232},{features:[[0,0,12,12,-1.],[3,0,6,12,2.]],tilted:0,threshold:-0.0393711812794209,right_val:-0.0418756604194641,left_val:0.2901248931884766},{features:[[16,5,6,4,-1.],[16,5,3,4,2.]],tilted:0,threshold:0.0215236507356167,right_val:-0.2361485064029694,left_val:0.0165730807930231},{features:[[0,5,6,4,-1.],[3,5,3,4,2.]],tilted:0,threshold:-3.1294699292629957e-003,right_val:0.0622338093817234,left_val:-0.1646640002727509},{features:[[9,0,12,5,-1.],[9,0,6,5,2.]],tilted:0,threshold:2.8589619323611259e-003,right_val:0.0557516291737556,left_val:-0.0380984097719193}],threshold:-30.6916007995605470},{simpleClassifiers:[{features:[[1,8,8,10,-1.],[1,8,4,5,2.],[5,13,4,5,2.]],tilted:0,threshold:-0.0205761305987835,right_val:-0.1505803018808365,left_val:0.1735112965106964},{features:[[8,16,14,2,-1.],[8,16,7,2,2.]],tilted:0,threshold:0.0161259490996599,right_val:0.2398445010185242,left_val:-0.0416123718023300},{features:[[0,11,16,3,-1.],[8,11,8,3,2.]],tilted:0,threshold:-0.0123525802046061,right_val:-0.1239183023571968,left_val:0.0977808535099030},{features:[[10,16,12,2,-1.],[10,16,6,2,2.]],tilted:0,threshold:-5.7473899796605110e-003,right_val:-0.0962367281317711,left_val:0.0776152089238167},{features:[[0,16,12,2,-1.],[6,16,6,2,2.]],tilted:0,threshold:2.9579061083495617e-003,right_val:0.2659420967102051,left_val:-0.0676837190985680},{features:[[3,11,18,6,-1.],[12,11,9,3,2.],[3,14,9,3,2.]],tilted:0,threshold:-8.3472225815057755e-003,right_val:0.1373637020587921,left_val:-0.1118817999958992},{features:[[7,13,6,4,-1.],[7,15,6,2,2.]],tilted:0,threshold:-5.8408780023455620e-004,right_val:-0.1648653000593185,left_val:0.0459431111812592},{features:[[10,11,6,6,-1.],[10,13,6,2,3.]],tilted:0,threshold:-3.5136839142069221e-004,right_val:-0.0643578618764877,left_val:0.0977910086512566},{features:[[6,14,9,4,-1.],[9,14,3,4,3.]],tilted:0,threshold:8.4126877482049167e-005,right_val:0.0887277424335480,left_val:-0.1384762972593308},{features:[[5,4,16,10,-1.],[5,9,16,5,2.]],tilted:0,threshold:-0.2659249007701874,right_val:0.0161886699497700,left_val:-0.6752539873123169},{features:[[11,7,3,8,-1.],[11,7,3,4,2.]],tilted:1,threshold:4.3727741576731205e-003,right_val:-0.1256036013364792,left_val:0.0728847980499268},{features:[[13,10,6,6,-1.],[13,12,6,2,3.]],tilted:0,threshold:-2.2660531103610992e-003,right_val:-0.0683554336428642,left_val:0.0872692465782166},{features:[[0,6,22,12,-1.],[0,6,11,6,2.],[11,12,11,6,2.]],tilted:0,threshold:-6.5290732309222221e-003,right_val:0.0809279307723045,left_val:-0.1219756007194519},{features:[[9,5,6,12,-1.],[12,5,3,6,2.],[9,11,3,6,2.]],tilted:0,threshold:0.0964362472295761,right_val:0.4912739992141724,left_val:-8.2637304440140724e-003},{features:[[7,5,6,12,-1.],[7,5,3,6,2.],[10,11,3,6,2.]],tilted:0,threshold:-0.0435948185622692,right_val:-0.0256003905087709,left_val:0.4557530879974365},{features:[[14,1,6,9,-1.],[14,4,6,3,3.]],tilted:0,threshold:-0.0210983194410801,right_val:0.0235395897179842,left_val:-0.1189275011420250},{features:[[2,1,6,9,-1.],[2,4,6,3,3.]],tilted:0,threshold:-2.5200019590556622e-003,right_val:-0.0907517224550247,left_val:0.1272446960210800},{features:[[13,4,4,6,-1.],[13,7,4,3,2.]],tilted:0,threshold:-8.9241685345768929e-003,right_val:0.0434970296919346,left_val:-0.1151432022452354},{features:[[5,4,4,6,-1.],[5,7,4,3,2.]],tilted:0,threshold:3.4590170253068209e-003,right_val:-0.1826142966747284,left_val:0.0635371729731560},{features:[[10,13,12,3,-1.],[10,14,12,1,3.]],tilted:0,threshold:-3.6076800897717476e-003,right_val:-0.0524491108953953,left_val:0.1200591027736664},{features:[[3,3,15,3,-1.],[3,4,15,1,3.]],tilted:0,threshold:0.0537788905203342,right_val:0.5231301784515381,left_val:-0.0186757892370224},{features:[[13,5,2,9,-1.],[13,5,1,9,2.]],tilted:1,threshold:0.0452451892197132,right_val:0.2187184989452362,left_val:-0.0175049193203449},{features:[[9,5,9,2,-1.],[9,5,9,1,2.]],tilted:1,threshold:1.3272929936647415e-003,right_val:-0.1355167031288147,left_val:0.0786599591374397},{features:[[6,2,14,10,-1.],[6,2,7,10,2.]],tilted:0,threshold:0.0123936403542757,right_val:-0.0721495375037193,left_val:0.0289523005485535},{features:[[8,2,12,2,-1.],[8,2,12,1,2.]],tilted:1,threshold:-0.0377027802169323,right_val:-0.0303553491830826,left_val:0.4185005128383637},{features:[[17,0,2,13,-1.],[17,0,1,13,2.]],tilted:1,threshold:-0.0489104092121124,right_val:-5.6771109811961651e-003,left_val:0.3736500144004822},{features:[[5,0,13,2,-1.],[5,0,13,1,2.]],tilted:1,threshold:-5.9961699880659580e-003,right_val:0.0704388469457626,left_val:-0.2075642049312592},{features:[[12,4,3,10,-1.],[12,4,3,5,2.]],tilted:1,threshold:0.0566319301724434,right_val:0.2549839913845062,left_val:-0.0172929391264915},{features:[[0,6,12,3,-1.],[0,7,12,1,3.]],tilted:0,threshold:0.0316502302885056,right_val:0.4839827120304108,left_val:-0.0206582508981228},{features:[[6,6,15,3,-1.],[6,7,15,1,3.]],tilted:0,threshold:-0.0211529899388552,right_val:-0.0248726103454828,left_val:0.2002878934144974},{features:[[8,8,5,9,-1.],[8,11,5,3,3.]],tilted:0,threshold:0.0876765325665474,right_val:0.4112659990787506,left_val:-0.0249997004866600},{features:[[10,11,7,6,-1.],[10,13,7,2,3.]],tilted:0,threshold:0.0532998815178871,right_val:0.3744659125804901,left_val:-8.6766229942440987e-003},{features:[[5,11,7,6,-1.],[5,13,7,2,3.]],tilted:0,threshold:-2.6251509552821517e-004,right_val:-0.1198920011520386,left_val:0.0992318466305733},{features:[[5,12,13,4,-1.],[5,13,13,2,2.]],tilted:0,threshold:-8.5897604003548622e-003,right_val:0.0343707799911499,left_val:-0.1859301030635834},{features:[[9,4,4,6,-1.],[9,7,4,3,2.]],tilted:0,threshold:0.0169404707849026,right_val:0.2728826105594635,left_val:-0.0347682610154152},{features:[[13,1,2,9,-1.],[13,1,1,9,2.]],tilted:1,threshold:0.0505961105227470,right_val:-0.3946076035499573,left_val:3.6170349922031164e-003},{features:[[5,2,8,6,-1.],[5,2,4,3,2.],[9,5,4,3,2.]],tilted:0,threshold:-8.3048436790704727e-003,right_val:-0.1166628003120422,left_val:0.0985777974128723},{features:[[11,0,4,8,-1.],[12,1,2,8,2.]],tilted:1,threshold:0.0105862701311708,right_val:-0.0858436673879623,left_val:0.0391171500086784},{features:[[11,0,8,4,-1.],[10,1,8,2,2.]],tilted:1,threshold:-0.0325586013495922,right_val:0.0254101008176804,left_val:-0.3735215067863464},{features:[[7,9,15,3,-1.],[7,10,15,1,3.]],tilted:0,threshold:-0.0323521308600903,right_val:-0.0286310408264399,left_val:0.2612997889518738},{features:[[5,10,12,3,-1.],[5,11,12,1,3.]],tilted:0,threshold:0.0255470499396324,right_val:-0.3045232892036438,left_val:0.0338848903775215},{features:[[15,2,7,6,-1.],[15,4,7,2,3.]],tilted:0,threshold:0.0422524400055408,right_val:-0.2409126013517380,left_val:8.9510334655642509e-003},{features:[[0,2,7,6,-1.],[0,4,7,2,3.]],tilted:0,threshold:3.8109479937702417e-003,right_val:0.1463439017534256,left_val:-0.0726389363408089},{features:[[12,3,2,7,-1.],[12,3,1,7,2.]],tilted:1,threshold:0.0208217091858387,right_val:0.1832471936941147,left_val:-0.0362719409167767},{features:[[10,3,7,2,-1.],[10,3,7,1,2.]],tilted:1,threshold:0.0264977905899286,right_val:-0.3951719999313355,left_val:0.0281601101160049},{features:[[2,3,20,14,-1.],[12,3,10,7,2.],[2,10,10,7,2.]],tilted:0,threshold:0.2028353065252304,right_val:0.4486894905567169,left_val:-9.3782292678952217e-003},{features:[[5,2,12,8,-1.],[11,2,6,8,2.]],tilted:0,threshold:-0.1799661070108414,right_val:0.0120278401300311,left_val:-0.7959595918655396},{features:[[18,4,4,8,-1.],[18,8,4,4,2.]],tilted:0,threshold:-0.0709680914878845,right_val:1.0918079642578959e-003,left_val:-0.7695127725601196},{features:[[6,4,6,8,-1.],[6,4,3,4,2.],[9,8,3,4,2.]],tilted:0,threshold:2.7555041015148163e-003,right_val:-0.1291518062353134,left_val:0.0701502636075020},{features:[[12,2,4,6,-1.],[12,2,2,6,2.]],tilted:1,threshold:-0.0770044028759003,right_val:2.8067480307072401e-003,left_val:-0.4915507137775421},{features:[[10,2,6,4,-1.],[10,2,6,2,2.]],tilted:1,threshold:-0.0202579107135534,right_val:-0.0434327982366085,left_val:0.2356823980808258},{features:[[9,3,8,15,-1.],[11,3,4,15,2.]],tilted:0,threshold:-0.0864218175411224,right_val:0.0112488502636552,left_val:-0.3454168140888214},{features:[[1,11,8,7,-1.],[3,11,4,7,2.]],tilted:0,threshold:-0.0672459527850151,right_val:0.0118686696514487,left_val:-0.6875290274620056},{features:[[13,7,6,10,-1.],[15,7,2,10,3.]],tilted:0,threshold:-0.1299038976430893,right_val:2.5537670589983463e-003,left_val:-0.7906926870346069},{features:[[2,3,10,14,-1.],[7,3,5,14,2.]],tilted:0,threshold:-0.3039467036724091,right_val:8.1501724198460579e-003,left_val:-0.8998935222625732},{features:[[6,5,15,12,-1.],[11,5,5,12,3.]],tilted:0,threshold:-0.4198854863643646,right_val:1.3665149454027414e-003,left_val:-0.7730332016944885},{features:[[1,5,15,12,-1.],[6,5,5,12,3.]],tilted:0,threshold:-0.1685128957033157,right_val:-0.0412807390093803,left_val:0.2431939989328384},{features:[[9,14,8,4,-1.],[9,16,8,2,2.]],tilted:0,threshold:2.8788880445063114e-003,right_val:-0.1859090030193329,left_val:0.0205771699547768},{features:[[9,6,4,10,-1.],[11,6,2,10,2.]],tilted:0,threshold:-0.0402238406240940,right_val:-0.0231047105044127,left_val:0.4309926927089691},{features:[[8,6,10,4,-1.],[8,8,10,2,2.]],tilted:0,threshold:3.9687040261924267e-003,right_val:-0.0922335684299469,left_val:0.0436015203595161},{features:[[2,14,7,4,-1.],[2,16,7,2,2.]],tilted:0,threshold:-0.0276507195085287,right_val:0.0146805699914694,left_val:-0.6170787215232849},{features:[[7,9,15,3,-1.],[7,10,15,1,3.]],tilted:0,threshold:-2.3034301120787859e-003,right_val:-0.0616645514965057,left_val:0.0903495922684669},{features:[[0,10,16,4,-1.],[0,10,8,2,2.],[8,12,8,2,2.]],tilted:0,threshold:-0.0290407892316580,right_val:-0.0392188690602779,left_val:0.2773793935775757},{features:[[10,11,6,7,-1.],[12,11,2,7,3.]],tilted:0,threshold:0.0132882604375482,right_val:-0.1355874985456467,left_val:0.0311382599174976},{features:[[8,13,6,5,-1.],[11,13,3,5,2.]],tilted:0,threshold:3.3968928619287908e-005,right_val:0.0764675810933113,left_val:-0.1356292963027954},{features:[[10,11,6,7,-1.],[12,11,2,7,3.]],tilted:0,threshold:-6.8583860993385315e-003,right_val:0.0259391590952873,left_val:-0.1036581024527550},{features:[[6,11,6,7,-1.],[8,11,2,7,3.]],tilted:0,threshold:-0.0143609195947647,right_val:0.0529731400310993,left_val:-0.2113649994134903},{features:[[18,4,4,8,-1.],[18,8,4,4,2.]],tilted:0,threshold:-0.0174686796963215,right_val:0.0177150797098875,left_val:-0.1051810979843140},{features:[[4,6,8,11,-1.],[8,6,4,11,2.]],tilted:0,threshold:-0.0985445678234100,right_val:-0.0442296415567398,left_val:0.2564946115016937},{features:[[7,5,8,12,-1.],[9,5,4,12,2.]],tilted:0,threshold:-2.8123459778726101e-003,right_val:0.1540094017982483,left_val:-0.0738003626465797},{features:[[5,3,6,6,-1.],[7,3,2,6,3.]],tilted:0,threshold:2.1941340528428555e-003,right_val:0.0891392230987549,left_val:-0.1421629935503006},{features:[[11,2,10,6,-1.],[11,2,10,3,2.]],tilted:1,threshold:0.0468207597732544,right_val:-0.0627548918128014,left_val:0.0293640904128551},{features:[[11,1,8,9,-1.],[11,1,4,9,2.]],tilted:1,threshold:0.3289175927639008,right_val:-0.7834712862968445,left_val:0.0130156902596354},{features:[[12,4,3,10,-1.],[12,4,3,5,2.]],tilted:1,threshold:-0.0204705204814672,right_val:0.0398004688322544,left_val:-0.0768143534660339},{features:[[11,1,11,4,-1.],[11,1,11,2,2.]],tilted:1,threshold:0.0886770263314247,right_val:0.2845386862754822,left_val:-0.0403123684227467},{features:[[18,4,4,8,-1.],[18,8,4,4,2.]],tilted:0,threshold:-1.1557979742065072e-003,right_val:-0.0414462089538574,left_val:0.0421993210911751},{features:[[0,4,4,8,-1.],[0,8,4,4,2.]],tilted:0,threshold:0.0605245381593704,right_val:0.6723713874816895,left_val:-0.0169187001883984},{features:[[12,2,2,12,-1.],[12,2,1,12,2.]],tilted:1,threshold:0.0408304594457150,right_val:-0.3111329972743988,left_val:0.0133648402988911},{features:[[4,12,12,3,-1.],[4,13,12,1,3.]],tilted:0,threshold:-3.1132870353758335e-003,right_val:0.0593822188675404,left_val:-0.1726278066635132},{features:[[2,12,18,3,-1.],[2,13,18,1,3.]],tilted:0,threshold:-4.3638627976179123e-003,right_val:-0.0624239705502987,left_val:0.1726533025503159},{features:[[0,0,16,3,-1.],[0,1,16,1,3.]],tilted:0,threshold:-0.0328340902924538,right_val:-0.0257990397512913,left_val:0.4027537107467651},{features:[[12,2,2,12,-1.],[12,2,1,12,2.]],tilted:1,threshold:0.0643770024180412,right_val:0.7522106766700745,left_val:-4.7380630858242512e-003},{features:[[10,2,12,2,-1.],[10,2,12,1,2.]],tilted:1,threshold:0.0276427306234837,right_val:-0.2922027111053467,left_val:0.0376444794237614},{features:[[13,10,6,7,-1.],[15,10,2,7,3.]],tilted:0,threshold:0.0221711993217468,right_val:0.2053381055593491,left_val:-0.0246540699154139},{features:[[5,13,12,2,-1.],[11,13,6,2,2.]],tilted:0,threshold:1.5859310515224934e-003,right_val:-0.1261173039674759,left_val:0.0894637927412987},{features:[[16,8,6,8,-1.],[19,8,3,4,2.],[16,12,3,4,2.]],tilted:0,threshold:-0.0188720505684614,right_val:-0.0369537100195885,left_val:0.1307265013456345},{features:[[4,1,8,6,-1.],[4,3,8,2,3.]],tilted:0,threshold:-0.0133061697706580,right_val:0.0426871888339520,left_val:-0.2296320945024490},{features:[[18,0,4,9,-1.],[18,3,4,3,3.]],tilted:0,threshold:-0.0704071223735809,right_val:6.6957580856978893e-003,left_val:-0.7111750841140747},{features:[[8,2,6,8,-1.],[8,6,6,4,2.]],tilted:0,threshold:0.0417489297688007,right_val:0.3003528118133545,left_val:-0.0329278707504272},{features:[[8,1,6,4,-1.],[8,3,6,2,2.]],tilted:0,threshold:5.3282231092453003e-003,right_val:-0.1906909048557282,left_val:0.0518117509782314},{features:[[1,2,12,3,-1.],[1,3,12,1,3.]],tilted:0,threshold:2.4094989057630301e-003,right_val:0.1251012980937958,left_val:-0.0806879699230194},{features:[[7,2,12,3,-1.],[7,3,12,1,3.]],tilted:0,threshold:-6.2405979260802269e-003,right_val:-0.0399790108203888,left_val:0.1074063032865524},{features:[[1,0,16,18,-1.],[1,9,16,9,2.]],tilted:0,threshold:-0.6731246709823608,right_val:0.0100708100944757,left_val:-1.},{features:[[16,8,6,8,-1.],[19,8,3,4,2.],[16,12,3,4,2.]],tilted:0,threshold:-0.0929835587739944,right_val:-2.4261360522359610e-003,left_val:-1.},{features:[[0,8,6,8,-1.],[0,8,3,4,2.],[3,12,3,4,2.]],tilted:0,threshold:0.0336297601461411,right_val:-0.4138790071010590,left_val:0.0241228695958853},{features:[[18,4,4,6,-1.],[18,7,4,3,2.]],tilted:0,threshold:0.0238806195557117,right_val:-0.2197377979755402,left_val:9.6614202484488487e-003},{features:[[0,12,14,3,-1.],[0,13,14,1,3.]],tilted:0,threshold:1.2738780351355672e-003,right_val:0.1226968988776207,left_val:-0.0835551172494888},{features:[[3,12,16,3,-1.],[3,13,16,1,3.]],tilted:0,threshold:0.0184141397476196,right_val:-0.3560917079448700,left_val:0.0307981409132481},{features:[[0,4,4,6,-1.],[0,7,4,3,2.]],tilted:0,threshold:-0.0564695782959461,right_val:-0.0126983001828194,left_val:0.8863177895545960},{features:[[9,14,8,4,-1.],[9,16,8,2,2.]],tilted:0,threshold:-4.6219761134125292e-004,right_val:-0.0828508287668228,left_val:0.0346819013357162},{features:[[0,13,14,3,-1.],[0,14,14,1,3.]],tilted:0,threshold:-0.0190608594566584,right_val:-0.0276117604225874,left_val:0.3536941111087799},{features:[[4,14,14,2,-1.],[4,15,14,1,2.]],tilted:0,threshold:1.5762279508635402e-003,right_val:-0.2251740992069244,left_val:0.0409399084746838},{features:[[3,12,15,6,-1.],[3,15,15,3,2.]],tilted:0,threshold:0.0201018806546927,right_val:0.4109125137329102,left_val:-0.0239955503493547},{features:[[7,12,14,6,-1.],[7,15,14,3,2.]],tilted:0,threshold:2.7211669366806746e-003,right_val:-0.1420011967420578,left_val:0.0281224492937326},{features:[[0,0,14,4,-1.],[0,2,14,2,2.]],tilted:0,threshold:-0.1094442978501320,right_val:-9.4355372712016106e-003,left_val:0.9508574008941650},{features:[[13,10,6,7,-1.],[15,10,2,7,3.]],tilted:0,threshold:-1.2755279894918203e-003,right_val:-0.0834297835826874,left_val:0.0569029003381729},{features:[[3,10,6,7,-1.],[5,10,2,7,3.]],tilted:0,threshold:-0.0805784016847610,right_val:8.2268668338656425e-003,left_val:-0.9513928890228272},{features:[[2,4,18,4,-1.],[8,4,6,4,3.]],tilted:0,threshold:-0.1204798966646195,right_val:0.0284893400967121,left_val:-0.3027386963367462},{features:[[5,3,12,9,-1.],[9,6,4,3,9.]],tilted:0,threshold:-0.1829497069120407,right_val:-0.0627739429473877,left_val:0.2386613041162491},{features:[[10,8,10,7,-1.],[10,8,5,7,2.]],tilted:0,threshold:-0.1710640937089920,right_val:3.1515269074589014e-003,left_val:-0.5939468145370483},{features:[[5,2,4,16,-1.],[5,6,4,8,2.]],tilted:0,threshold:-0.0734148770570755,right_val:0.0100843897089362,left_val:-0.8693308234214783},{features:[[16,8,6,8,-1.],[19,8,3,4,2.],[16,12,3,4,2.]],tilted:0,threshold:0.0242382995784283,right_val:0.1621855944395065,left_val:-0.0217561107128859},{features:[[0,12,17,4,-1.],[0,14,17,2,2.]],tilted:0,threshold:-7.1713668294250965e-003,right_val:0.0921484977006912,left_val:-0.0973455905914307},{features:[[7,12,14,6,-1.],[7,15,14,3,2.]],tilted:0,threshold:-0.0333443991839886,right_val:-0.0221606791019440,left_val:0.0746453925967216},{features:[[0,13,12,4,-1.],[0,13,6,2,2.],[6,15,6,2,2.]],tilted:0,threshold:7.2907900903373957e-004,right_val:0.1182674020528793,left_val:-0.0949718132615089},{features:[[10,13,12,3,-1.],[10,14,12,1,3.]],tilted:0,threshold:-1.0217289673164487e-003,right_val:-0.0375738292932510,left_val:0.0564262308180332},{features:[[7,11,8,6,-1.],[7,11,4,3,2.],[11,14,4,3,2.]],tilted:0,threshold:-8.4900937508791685e-004,right_val:0.0700473263859749,left_val:-0.1388314962387085},{features:[[9,6,12,9,-1.],[12,6,6,9,2.]],tilted:0,threshold:0.0998505130410194,right_val:0.2611567974090576,left_val:-0.0140115898102522},{features:[[1,6,12,8,-1.],[4,6,6,8,2.]],tilted:0,threshold:-0.1309006959199905,right_val:-0.0116437999531627,left_val:0.7137935161590576},{features:[[8,12,6,6,-1.],[8,14,6,2,3.]],tilted:0,threshold:9.1210529208183289e-003,right_val:-0.2183001041412354,left_val:0.0454028099775314},{features:[[1,4,20,14,-1.],[1,4,10,7,2.],[11,11,10,7,2.]],tilted:0,threshold:0.2010647952556610,right_val:0.5123022198677063,left_val:-0.0207532700151205},{features:[[18,0,4,10,-1.],[19,1,2,10,2.]],tilted:1,threshold:0.0473893098533154,right_val:-0.4794239103794098,left_val:9.4779124483466148e-003},{features:[[2,2,6,12,-1.],[2,5,6,6,2.]],tilted:0,threshold:-0.0571185387670994,right_val:-0.0267039109021425,left_val:0.3916605114936829},{features:[[16,5,4,9,-1.],[16,8,4,3,3.]],tilted:0,threshold:-8.3700623363256454e-003,right_val:0.0484609007835388,left_val:-0.1339945942163467},{features:[[6,9,8,4,-1.],[10,9,4,4,2.]],tilted:0,threshold:4.0913890115916729e-003,right_val:0.1743853986263275,left_val:-0.0594897791743279},{features:[[7,8,14,3,-1.],[7,8,7,3,2.]],tilted:0,threshold:0.0718994885683060,right_val:-0.3627477884292603,left_val:0.0117231803014874},{features:[[0,8,18,3,-1.],[9,8,9,3,2.]],tilted:0,threshold:-3.6888250615447760e-003,right_val:-0.1503359973430634,left_val:0.0757636278867722},{features:[[14,6,8,4,-1.],[14,6,8,2,2.]],tilted:1,threshold:-7.4795219115912914e-003,right_val:-0.0458704903721809,left_val:0.1502785980701447},{features:[[0,3,18,2,-1.],[9,3,9,2,2.]],tilted:0,threshold:-0.0125825898721814,right_val:0.0639174506068230,left_val:-0.1991554945707321},{features:[[6,6,10,8,-1.],[6,8,10,4,2.]],tilted:0,threshold:3.5687079653143883e-003,right_val:0.1095608025789261,left_val:-0.1211723983287811},{features:[[1,5,10,12,-1.],[1,8,10,6,2.]],tilted:0,threshold:1.7363800434395671e-003,right_val:-0.0935562625527382,left_val:0.1225852966308594},{features:[[11,6,3,12,-1.],[12,6,1,12,3.]],tilted:0,threshold:-1.4523629797622561e-003,right_val:-0.0807396993041039,left_val:0.0967225283384323},{features:[[8,6,3,12,-1.],[9,6,1,12,3.]],tilted:0,threshold:3.1017749570310116e-003,right_val:0.1539645940065384,left_val:-0.0690764710307121},{features:[[11,1,3,13,-1.],[12,1,1,13,3.]],tilted:0,threshold:-8.5509587079286575e-003,right_val:0.0403469204902649,left_val:-0.1518629044294357},{features:[[8,2,3,13,-1.],[9,2,1,13,3.]],tilted:0,threshold:-1.8966189818456769e-003,right_val:-0.0985434427857399,left_val:0.1217254996299744}],threshold:-30.6093006134033200},{simpleClassifiers:[{features:[[6,6,2,12,-1.],[6,12,2,6,2.]],tilted:0,threshold:-0.0237547401338816,right_val:-0.1153428032994270,left_val:0.1709530055522919},{features:[[17,4,2,9,-1.],[17,4,1,9,2.]],tilted:1,threshold:-7.3806629516184330e-003,right_val:-0.0403177700936794,left_val:0.0880671963095665},{features:[[0,0,12,4,-1.],[0,1,12,2,2.]],tilted:0,threshold:1.1198900174349546e-003,right_val:0.1344889998435974,left_val:-0.0798953026533127},{features:[[8,4,12,4,-1.],[14,4,6,2,2.],[8,6,6,2,2.]],tilted:0,threshold:0.0337187312543392,right_val:0.2991417050361633,left_val:-0.0152200302109122},{features:[[6,13,6,4,-1.],[6,15,6,2,2.]],tilted:0,threshold:-2.8022660990245640e-004,right_val:-0.1561919003725052,left_val:0.0635997280478477},{features:[[7,13,12,4,-1.],[7,15,12,2,2.]],tilted:0,threshold:-3.9523928426206112e-003,right_val:0.1057164967060089,left_val:-9.7961323335766792e-003},{features:[[1,8,6,4,-1.],[4,8,3,4,2.]],tilted:0,threshold:2.1397129166871309e-003,right_val:-0.1448377966880798,left_val:0.0899535864591599},{features:[[15,8,6,10,-1.],[15,8,3,10,2.]],tilted:0,threshold:-0.0675212964415550,right_val:-0.0539238117635250,left_val:0.2093243002891541},{features:[[1,8,6,10,-1.],[4,8,3,10,2.]],tilted:0,threshold:0.0103789502754807,right_val:0.2781462967395783,left_val:-0.0641771629452705},{features:[[16,12,6,4,-1.],[16,12,3,4,2.]],tilted:0,threshold:6.2903137877583504e-003,right_val:0.0821684226393700,left_val:-0.0492537207901478},{features:[[1,6,6,8,-1.],[1,6,3,4,2.],[4,10,3,4,2.]],tilted:0,threshold:9.3974275514483452e-003,right_val:-0.2288530021905899,left_val:0.0845377370715141},{features:[[11,1,4,11,-1.],[12,2,2,11,2.]],tilted:1,threshold:0.0101209301501513,right_val:-0.0816642567515373,left_val:0.0333371199667454},{features:[[11,1,11,4,-1.],[10,2,11,2,2.]],tilted:1,threshold:3.1531939748674631e-003,right_val:0.1183736026287079,left_val:-0.1022099032998085},{features:[[12,0,4,7,-1.],[13,1,2,7,2.]],tilted:1,threshold:0.0751372873783112,right_val:-1.0000959634780884,left_val:2.7504051104187965e-003},{features:[[10,0,7,4,-1.],[9,1,7,2,2.]],tilted:1,threshold:-2.3692219983786345e-003,right_val:-0.1142518967390060,left_val:0.0990924835205078},{features:[[13,5,2,12,-1.],[13,5,1,12,2.]],tilted:0,threshold:-0.0245103798806667,right_val:-0.0161488000303507,left_val:0.2870832085609436},{features:[[7,5,2,12,-1.],[8,5,1,12,2.]],tilted:0,threshold:-1.9670750480145216e-003,right_val:0.0868165567517281,left_val:-0.1153137013316155},{features:[[8,5,9,4,-1.],[11,5,3,4,3.]],tilted:0,threshold:0.0308453794568777,right_val:0.1960754990577698,left_val:-0.0240906104445457},{features:[[7,0,10,3,-1.],[6,1,10,1,3.]],tilted:1,threshold:0.0238163098692894,right_val:-0.3571043908596039,left_val:0.0328240394592285},{features:[[17,4,2,9,-1.],[17,4,1,9,2.]],tilted:1,threshold:-0.0401991307735443,right_val:6.0749719850718975e-003,left_val:-0.5285078883171082},{features:[[5,4,9,2,-1.],[5,4,9,1,2.]],tilted:1,threshold:-6.8876100704073906e-003,right_val:-0.0591514892876148,left_val:0.2205885052680969},{features:[[12,10,4,8,-1.],[12,10,2,8,2.]],tilted:0,threshold:-2.5466730585321784e-004,right_val:-0.0849620327353477,left_val:0.0718978792428970},{features:[[2,0,12,4,-1.],[2,0,6,2,2.],[8,2,6,2,2.]],tilted:0,threshold:9.8468195647001266e-003,right_val:-0.2398452013731003,left_val:0.0413667596876621},{features:[[7,7,15,3,-1.],[7,8,15,1,3.]],tilted:0,threshold:0.0279344003647566,right_val:0.2473800927400589,left_val:-0.0236471593379974},{features:[[2,0,12,4,-1.],[2,0,6,2,2.],[8,2,6,2,2.]],tilted:0,threshold:-0.0229603908956051,right_val:0.0223057791590691,left_val:-0.4518792927265167},{features:[[10,14,6,4,-1.],[10,14,3,4,2.]],tilted:0,threshold:3.2323438790626824e-004,right_val:0.0784909576177597,left_val:-0.0875360071659088},{features:[[0,8,17,3,-1.],[0,9,17,1,3.]],tilted:0,threshold:0.0319548994302750,right_val:0.3920490145683289,left_val:-0.0262023899704218},{features:[[6,13,10,5,-1.],[6,13,5,5,2.]],tilted:0,threshold:1.9027979578822851e-003,right_val:-0.1610735058784485,left_val:0.0627627819776535},{features:[[5,11,8,5,-1.],[9,11,4,5,2.]],tilted:0,threshold:-3.2691629603505135e-003,right_val:-0.1043248027563095,left_val:0.1016800031065941},{features:[[14,8,4,6,-1.],[14,8,2,6,2.]],tilted:0,threshold:0.0100402003154159,right_val:0.1211789995431900,left_val:-0.0280465800315142},{features:[[0,10,5,8,-1.],[0,14,5,4,2.]],tilted:0,threshold:-0.0341586805880070,right_val:0.0352826602756977,left_val:-0.2897444963455200},{features:[[7,7,15,3,-1.],[7,8,15,1,3.]],tilted:0,threshold:1.7615250544622540e-003,right_val:0.0741584524512291,left_val:-0.0555830709636211},{features:[[2,11,7,4,-1.],[2,13,7,2,2.]],tilted:0,threshold:-0.0211346503347158,right_val:-0.0403546392917633,left_val:0.2513059079647064},{features:[[8,3,11,12,-1.],[8,6,11,6,2.]],tilted:0,threshold:0.0297593697905540,right_val:-0.1422636955976486,left_val:0.0380295403301716},{features:[[2,4,12,4,-1.],[2,4,6,2,2.],[8,6,6,2,2.]],tilted:0,threshold:0.0148660801351070,right_val:0.2752254009246826,left_val:-0.0397216901183128},{features:[[19,2,3,12,-1.],[20,3,1,12,3.]],tilted:1,threshold:-0.0358294285833836,right_val:9.6839247271418571e-003,left_val:-0.3345197141170502},{features:[[1,6,12,4,-1.],[1,6,6,2,2.],[7,8,6,2,2.]],tilted:0,threshold:-3.2887340057641268e-003,right_val:0.0685762092471123,left_val:-0.1425821930170059},{features:[[9,9,13,3,-1.],[9,10,13,1,3.]],tilted:0,threshold:0.0427148789167404,right_val:0.3876529932022095,left_val:-0.0142404399812222},{features:[[0,5,12,6,-1.],[0,5,6,3,2.],[6,8,6,3,2.]],tilted:0,threshold:1.2328879674896598e-003,right_val:-0.1186942011117935,left_val:0.0786238536238670},{features:[[11,0,3,13,-1.],[12,0,1,13,3.]],tilted:0,threshold:-0.0104476204141974,right_val:0.0315711684525013,left_val:-0.1488299071788788},{features:[[8,0,3,13,-1.],[9,0,1,13,3.]],tilted:0,threshold:0.0126563599333167,right_val:0.2621260881423950,left_val:-0.0465724617242813},{features:[[14,6,8,8,-1.],[14,10,8,4,2.]],tilted:0,threshold:0.0498497188091278,right_val:-0.1426873058080673,left_val:0.0170153398066759},{features:[[0,8,8,6,-1.],[0,10,8,2,3.]],tilted:0,threshold:-0.0186072401702404,right_val:-0.0470949411392212,left_val:0.2333865016698837},{features:[[9,9,13,3,-1.],[9,10,13,1,3.]],tilted:0,threshold:-0.0543973706662655,right_val:8.1606470048427582e-003,left_val:-0.4051130115985870},{features:[[0,9,13,3,-1.],[0,10,13,1,3.]],tilted:0,threshold:2.9153900686651468e-003,right_val:0.1333537995815277,left_val:-0.0893139466643333},{features:[[4,14,14,4,-1.],[11,14,7,2,2.],[4,16,7,2,2.]],tilted:0,threshold:-5.9154080227017403e-003,right_val:0.0484757013618946,left_val:-0.2041452974081039},{features:[[0,3,6,6,-1.],[2,3,2,6,3.]],tilted:0,threshold:-1.9841329194605350e-003,right_val:-0.0758927911520004,left_val:0.1342810988426209},{features:[[2,6,20,4,-1.],[7,6,10,4,2.]],tilted:0,threshold:-4.4047520495951176e-003,right_val:-0.1011909022927284,left_val:0.0418521389365196},{features:[[2,7,6,6,-1.],[4,7,2,6,3.]],tilted:0,threshold:0.0179828796535730,right_val:-0.2505401968955994,left_val:0.0439786799252033},{features:[[15,8,6,10,-1.],[17,8,2,10,3.]],tilted:0,threshold:-0.0780595019459724,right_val:6.3089421018958092e-003,left_val:-0.3302507102489471},{features:[[1,8,6,10,-1.],[3,8,2,10,3.]],tilted:0,threshold:7.2548650205135345e-003,right_val:0.0994110181927681,left_val:-0.1087217032909393},{features:[[9,9,13,3,-1.],[9,10,13,1,3.]],tilted:0,threshold:-2.7871869970113039e-003,right_val:-0.0847996398806572,left_val:0.1365929991006851},{features:[[6,8,4,6,-1.],[6,8,4,3,2.]],tilted:1,threshold:-9.3798413872718811e-003,right_val:0.0791080594062805,left_val:-0.1187245026230812},{features:[[16,5,6,13,-1.],[16,5,3,13,2.]],tilted:0,threshold:-0.0549264103174210,right_val:-0.0300722699612379,left_val:0.1438207030296326},{features:[[0,5,6,13,-1.],[3,5,3,13,2.]],tilted:0,threshold:-4.4219079427421093e-003,right_val:-0.1083810031414032,left_val:0.1066642999649048},{features:[[4,10,18,2,-1.],[4,10,9,2,2.]],tilted:0,threshold:1.0763059835880995e-003,right_val:-0.0554460510611534,left_val:0.0273809898644686},{features:[[0,7,21,7,-1.],[7,7,7,7,3.]],tilted:0,threshold:-0.0725140124559402,right_val:0.1009754016995430,left_val:-0.1089344993233681},{features:[[5,6,12,12,-1.],[9,6,4,12,3.]],tilted:0,threshold:-0.1647219061851502,right_val:-0.0436662100255489,left_val:0.3036536872386932},{features:[[10,4,10,3,-1.],[9,5,10,1,3.]],tilted:1,threshold:0.0798378065228462,right_val:0.8997743725776672,left_val:-0.0108286803588271},{features:[[9,9,9,7,-1.],[12,9,3,7,3.]],tilted:0,threshold:-5.2413612138479948e-004,right_val:-0.1205397993326187,left_val:0.0852306336164474},{features:[[11,5,9,4,-1.],[14,8,3,4,3.]],tilted:1,threshold:-0.0216322708874941,right_val:0.0655825436115265,left_val:-0.2109203934669495},{features:[[12,3,3,10,-1.],[12,3,3,5,2.]],tilted:1,threshold:0.1269153058528900,right_val:0.4508964121341705,left_val:-4.5935749076306820e-003},{features:[[8,3,12,2,-1.],[8,3,6,2,2.]],tilted:1,threshold:0.0954723507165909,right_val:0.5247465968132019,left_val:-0.0207988992333412},{features:[[14,6,4,8,-1.],[14,10,4,4,2.]],tilted:0,threshold:-0.0829360783100128,right_val:-5.0510508008301258e-003,left_val:0.8497673869132996},{features:[[4,6,4,8,-1.],[4,10,4,4,2.]],tilted:0,threshold:7.7482969500124454e-003,right_val:0.1714583039283752,left_val:-0.0553182885050774},{features:[[6,0,11,12,-1.],[6,3,11,6,2.]],tilted:0,threshold:-0.0217684395611286,right_val:0.0608737990260124,left_val:-0.1594793051481247},{features:[[8,0,6,6,-1.],[8,3,6,3,2.]],tilted:0,threshold:-1.1072609777329490e-004,right_val:-0.1317763030529022,left_val:0.0788772925734520},{features:[[10,0,10,4,-1.],[10,0,5,4,2.]],tilted:0,threshold:3.1122909858822823e-003,right_val:0.0623925812542439,left_val:-0.0430468395352364},{features:[[2,0,10,4,-1.],[7,0,5,4,2.]],tilted:0,threshold:-2.8692940250039101e-003,right_val:-0.0804942175745964,left_val:0.1374697983264923},{features:[[10,3,8,8,-1.],[14,3,4,4,2.],[10,7,4,4,2.]],tilted:0,threshold:0.1057576015591621,right_val:-0.9999381899833679,left_val:1.0569440200924873e-003},{features:[[4,3,8,8,-1.],[4,3,4,4,2.],[8,7,4,4,2.]],tilted:0,threshold:0.0461926795542240,right_val:-0.5260491967201233,left_val:0.0172280203551054},{features:[[2,9,18,5,-1.],[8,9,6,5,3.]],tilted:0,threshold:-0.2547619044780731,right_val:0.0136986197903752,left_val:-0.6292729973793030},{features:[[0,15,16,3,-1.],[0,16,16,1,3.]],tilted:0,threshold:-2.7374029159545898e-003,right_val:-0.0695915222167969,left_val:0.1274753957986832},{features:[[6,16,12,2,-1.],[6,17,12,1,2.]],tilted:0,threshold:2.1854760125279427e-003,right_val:-0.2648145854473114,left_val:0.0418547615408897},{features:[[3,0,4,8,-1.],[3,4,4,4,2.]],tilted:0,threshold:-0.0240507107228041,right_val:0.0344899408519268,left_val:-0.2619110941886902},{features:[[15,6,6,6,-1.],[13,8,6,2,3.]],tilted:1,threshold:0.1021142974495888,right_val:0.3999275863170624,left_val:-0.0153028601780534},{features:[[7,6,6,6,-1.],[9,8,2,6,3.]],tilted:1,threshold:0.1028165966272354,right_val:0.3688715994358063,left_val:-0.0290206708014011},{features:[[13,12,6,6,-1.],[13,14,6,2,3.]],tilted:0,threshold:0.0392064899206162,right_val:-0.4324299991130829,left_val:8.9045017957687378e-003},{features:[[3,12,6,6,-1.],[3,14,6,2,3.]],tilted:0,threshold:-0.0378308594226837,right_val:0.0148828299716115,left_val:-0.6273121237754822},{features:[[8,13,14,4,-1.],[8,14,14,2,2.]],tilted:0,threshold:0.0125078903511167,right_val:0.1415614038705826,left_val:-0.0178650598973036},{features:[[0,13,14,4,-1.],[0,14,14,2,2.]],tilted:0,threshold:-0.0154775902628899,right_val:-0.0335108302533627,left_val:0.3167665004730225},{features:[[3,13,17,2,-1.],[3,14,17,1,2.]],tilted:0,threshold:-4.5885699801146984e-003,right_val:0.0732118636369705,left_val:-0.1522215008735657},{features:[[4,6,12,4,-1.],[8,6,4,4,3.]],tilted:0,threshold:-0.0205059703439474,right_val:-0.0974579229950905,left_val:0.1172538027167320},{features:[[8,7,9,4,-1.],[11,7,3,4,3.]],tilted:0,threshold:-0.1309832036495209,right_val:-5.8803129941225052e-003,left_val:0.5433806777000427},{features:[[10,0,6,8,-1.],[8,2,6,4,2.]],tilted:1,threshold:0.0478882789611816,right_val:0.3572363853454590,left_val:-0.0271208100020885},{features:[[9,2,12,12,-1.],[9,6,12,4,3.]],tilted:0,threshold:0.2544153034687042,right_val:-0.9998825788497925,left_val:2.5680949911475182e-003},{features:[[11,0,6,3,-1.],[10,1,6,1,3.]],tilted:1,threshold:2.0652529783546925e-003,right_val:0.1006835997104645,left_val:-0.0942550003528595},{features:[[13,1,3,7,-1.],[14,2,1,7,3.]],tilted:1,threshold:0.0301417801529169,right_val:0.2420950978994370,left_val:-0.0159845203161240},{features:[[2,3,12,9,-1.],[6,6,4,3,9.]],tilted:0,threshold:0.1230550035834312,right_val:-0.2904686033725739,left_val:0.0439024604856968},{features:[[19,2,3,12,-1.],[20,3,1,12,3.]],tilted:1,threshold:0.0114368898794055,right_val:-0.1056960970163345,left_val:0.0318267010152340},{features:[[3,5,12,5,-1.],[7,5,4,5,3.]],tilted:0,threshold:0.0142296599224210,right_val:0.1617898941040039,left_val:-0.0645187273621559},{features:[[13,1,3,7,-1.],[14,2,1,7,3.]],tilted:1,threshold:-0.0198080390691757,right_val:-0.0272454600781202,left_val:0.2090989947319031},{features:[[9,1,7,3,-1.],[8,2,7,1,3.]],tilted:1,threshold:-0.0326347090303898,right_val:0.0238779895007610,left_val:-0.4626514911651611},{features:[[9,7,8,6,-1.],[13,7,4,3,2.],[9,10,4,3,2.]],tilted:0,threshold:0.0815682113170624,right_val:0.7451753020286560,left_val:-0.0109838200733066},{features:[[4,14,14,4,-1.],[4,15,14,2,2.]],tilted:0,threshold:1.7331159906461835e-003,right_val:-0.1580016016960144,left_val:0.0628325790166855},{features:[[10,14,6,4,-1.],[10,14,3,4,2.]],tilted:0,threshold:4.1524558328092098e-003,right_val:-0.0839238166809082,left_val:0.0285209491848946},{features:[[6,14,6,4,-1.],[9,14,3,4,2.]],tilted:0,threshold:2.0917340589221567e-004,right_val:0.0831703767180443,left_val:-0.1653665006160736},{features:[[14,0,4,16,-1.],[16,0,2,8,2.],[14,8,2,8,2.]],tilted:0,threshold:-6.9550168700516224e-004,right_val:-0.0986681282520294,left_val:0.0572988986968994},{features:[[0,15,20,3,-1.],[5,15,10,3,2.]],tilted:0,threshold:0.1011473014950752,right_val:0.5093728899955750,left_val:-0.0270318593829870},{features:[[16,5,3,13,-1.],[17,5,1,13,3.]],tilted:0,threshold:0.0203715302050114,right_val:0.2111019045114517,left_val:-0.0159913394600153},{features:[[2,6,13,8,-1.],[2,10,13,4,2.]],tilted:0,threshold:0.1949035972356796,right_val:-0.8062657713890076,left_val:0.0111691495403647},{features:[[16,5,3,13,-1.],[17,5,1,13,3.]],tilted:0,threshold:-1.5187750104814768e-003,right_val:-0.0657796934247017,left_val:0.0886704325675964},{features:[[7,12,7,4,-1.],[7,14,7,2,2.]],tilted:0,threshold:-2.2300280761555769e-005,right_val:-0.1365679949522018,left_val:0.0702371001243591},{features:[[15,1,4,9,-1.],[15,4,4,3,3.]],tilted:0,threshold:7.0241810753941536e-003,right_val:-0.1224663034081459,left_val:0.0452642701566219},{features:[[0,4,16,2,-1.],[0,5,16,1,2.]],tilted:0,threshold:-5.8513730764389038e-003,right_val:-0.0775128677487373,left_val:0.1454869955778122},{features:[[8,4,12,2,-1.],[8,5,12,1,2.]],tilted:0,threshold:-0.0122288698330522,right_val:0.0330916009843349,left_val:-0.1576232016086578},{features:[[6,3,9,15,-1.],[9,8,3,5,9.]],tilted:0,threshold:-0.2747533917427063,right_val:-0.0233061797916889,left_val:0.4141589999198914},{features:[[12,3,3,8,-1.],[12,7,3,4,2.]],tilted:0,threshold:-8.3073312416672707e-003,right_val:0.0454233698546886,left_val:-0.0661589726805687},{features:[[5,6,12,4,-1.],[5,6,6,2,2.],[11,8,6,2,2.]],tilted:0,threshold:0.0149670997634530,right_val:-0.2447497993707657,left_val:0.0395800210535526},{features:[[16,3,3,14,-1.],[17,3,1,14,3.]],tilted:0,threshold:3.5121920518577099e-003,right_val:0.0720805525779724,left_val:-0.0326085910201073},{features:[[3,3,3,14,-1.],[4,3,1,14,3.]],tilted:0,threshold:6.0676191933453083e-003,right_val:0.1645577996969223,left_val:-0.0662842467427254},{features:[[0,4,22,4,-1.],[11,4,11,2,2.],[0,6,11,2,2.]],tilted:0,threshold:-6.0948841273784637e-003,right_val:0.0680977478623390,left_val:-0.1678411960601807},{features:[[1,4,4,9,-1.],[1,7,4,3,3.]],tilted:0,threshold:-4.4710501097142696e-003,right_val:-0.0752860531210899,left_val:0.1434886008501053},{features:[[7,13,12,4,-1.],[7,15,12,2,2.]],tilted:0,threshold:0.0276299994438887,right_val:0.4623529911041260,left_val:-6.0715568251907825e-003},{features:[[3,13,12,4,-1.],[3,15,12,2,2.]],tilted:0,threshold:-4.1778348386287689e-003,right_val:0.1026868969202042,left_val:-0.0944801867008209},{features:[[11,14,6,4,-1.],[11,16,6,2,2.]],tilted:0,threshold:-1.4997010293882340e-004,right_val:-0.1268998980522156,left_val:0.0459039695560932},{features:[[1,0,13,3,-1.],[1,1,13,1,3.]],tilted:0,threshold:9.3421656638383865e-003,right_val:0.2377692013978958,left_val:-0.0478513501584530},{features:[[11,0,6,4,-1.],[11,2,6,2,2.]],tilted:0,threshold:-9.0454798191785812e-003,right_val:0.0257176607847214,left_val:-0.1488175988197327},{features:[[4,14,14,4,-1.],[4,14,7,2,2.],[11,16,7,2,2.]],tilted:0,threshold:-1.0563050163909793e-003,right_val:0.0821189433336258,left_val:-0.1246521994471550},{features:[[6,0,12,2,-1.],[6,1,12,1,2.]],tilted:0,threshold:-0.0156021695584059,right_val:-0.0245032906532288,left_val:0.3047155141830444},{features:[[5,0,6,4,-1.],[5,2,6,2,2.]],tilted:0,threshold:-8.9588612318038940e-003,right_val:0.0462901405990124,left_val:-0.2362405955791473},{features:[[11,0,3,6,-1.],[12,1,1,6,3.]],tilted:1,threshold:-7.6452922075986862e-003,right_val:-0.0265730600804091,left_val:0.1139314025640488},{features:[[11,0,6,3,-1.],[10,1,6,1,3.]],tilted:1,threshold:-0.0192949008196592,right_val:-0.0359068810939789,left_val:0.2882001996040344},{features:[[7,12,8,6,-1.],[9,12,4,6,2.]],tilted:0,threshold:8.6250286549329758e-003,right_val:-0.1683263033628464,left_val:0.0610060207545757},{features:[[1,1,5,10,-1.],[1,6,5,5,2.]],tilted:0,threshold:0.0258834902197123,right_val:0.2326312065124512,left_val:-0.0401428490877151},{features:[[13,0,2,12,-1.],[13,6,2,6,2.]],tilted:0,threshold:-0.0749461129307747,right_val:-6.0237408615648746e-003,left_val:0.7116879820823669},{features:[[7,0,2,12,-1.],[7,6,2,6,2.]],tilted:0,threshold:-2.6808120310306549e-004,right_val:-0.1535875052213669,left_val:0.0777179002761841},{features:[[12,1,8,14,-1.],[16,1,4,7,2.],[12,8,4,7,2.]],tilted:0,threshold:0.0610414408147335,right_val:0.2583329081535339,left_val:-0.0340701602399349},{features:[[1,0,8,10,-1.],[1,0,4,5,2.],[5,5,4,5,2.]],tilted:0,threshold:-4.7920648939907551e-003,right_val:0.0845772400498390,left_val:-0.1507782936096191},{features:[[6,6,16,4,-1.],[10,6,8,4,2.]],tilted:0,threshold:-0.1261063069105148,right_val:8.6965439841151237e-003,left_val:-0.4840453863143921},{features:[[1,14,13,2,-1.],[1,15,13,1,2.]],tilted:0,threshold:-0.0228792708367109,right_val:-0.0148561000823975,left_val:0.6773418784141541},{features:[[2,7,20,3,-1.],[7,7,10,3,2.]],tilted:0,threshold:-6.2760512810200453e-004,right_val:-0.1407644003629684,left_val:0.0509103499352932},{features:[[11,2,9,4,-1.],[14,5,3,4,3.]],tilted:1,threshold:-0.0105431796982884,right_val:0.1128190010786057,left_val:-0.0907072499394417},{features:[[6,5,13,2,-1.],[6,6,13,1,2.]],tilted:0,threshold:-2.4953829124569893e-003,right_val:-0.0755412876605988,left_val:0.0895237624645233},{features:[[3,0,6,15,-1.],[6,0,3,15,2.]],tilted:0,threshold:0.0609861500561237,right_val:0.3300091028213501,left_val:-0.0320069789886475}],threshold:-30.6014995574951170},{simpleClassifiers:[{features:[[3,12,8,6,-1.],[5,12,4,6,2.]],tilted:0,threshold:-0.0412418097257614,right_val:-0.0698791295289993,left_val:0.2484184056520462},{features:[[13,1,4,7,-1.],[14,2,2,7,2.]],tilted:1,threshold:-0.0746634975075722,right_val:4.0493709966540337e-003,left_val:-0.7543368935585022},{features:[[9,1,7,4,-1.],[8,2,7,2,2.]],tilted:1,threshold:-0.0238036792725325,right_val:-0.0452839285135269,left_val:0.2431309968233109},{features:[[11,11,6,4,-1.],[11,13,6,2,2.]],tilted:0,threshold:0.0320286191999912,right_val:0.3981122076511383,left_val:-0.0122305396944284},{features:[[0,12,8,6,-1.],[0,12,4,3,2.],[4,15,4,3,2.]],tilted:0,threshold:3.8454410969279706e-004,right_val:-0.1728879958391190,left_val:0.0692448392510414},{features:[[11,11,6,4,-1.],[11,13,6,2,2.]],tilted:0,threshold:-2.0599530544131994e-003,right_val:-0.0638244822621346,left_val:0.0450832508504391},{features:[[2,6,6,12,-1.],[2,6,3,6,2.],[5,12,3,6,2.]],tilted:0,threshold:0.0591745004057884,right_val:0.5806397795677185,left_val:0.0137560898438096},{features:[[11,11,6,4,-1.],[11,13,6,2,2.]],tilted:0,threshold:-8.1204501911997795e-003,right_val:0.0320978797972202,left_val:-0.0790601968765259},{features:[[5,11,9,4,-1.],[8,11,3,4,3.]],tilted:0,threshold:-5.4362448863685131e-003,right_val:-0.1388078927993774,left_val:0.0802850127220154},{features:[[8,13,9,5,-1.],[11,13,3,5,3.]],tilted:0,threshold:0.0407687798142433,right_val:-0.1682104021310806,left_val:0.0352651290595531},{features:[[3,15,8,3,-1.],[7,15,4,3,2.]],tilted:0,threshold:-0.0107057699933648,right_val:0.0971477031707764,left_val:-0.1322779953479767},{features:[[4,12,14,6,-1.],[11,12,7,3,2.],[4,15,7,3,2.]],tilted:0,threshold:-2.1374409552663565e-003,right_val:0.1050119996070862,left_val:-0.1113512963056564},{features:[[2,15,8,3,-1.],[6,15,4,3,2.]],tilted:0,threshold:-6.0069030150771141e-003,right_val:-0.1450355052947998,left_val:0.0797014236450195},{features:[[11,11,6,4,-1.],[11,13,6,2,2.]],tilted:0,threshold:6.8584359250962734e-003,right_val:0.1549434959888458,left_val:-0.0286291707307100},{features:[[6,5,6,7,-1.],[8,5,2,7,3.]],tilted:0,threshold:8.4308702498674393e-003,right_val:0.1357143968343735,left_val:-0.0687258765101433},{features:[[8,4,9,12,-1.],[11,8,3,4,9.]],tilted:0,threshold:-0.0319182090461254,right_val:0.0701727569103241,left_val:-0.0900216475129128},{features:[[5,4,9,12,-1.],[8,8,3,4,9.]],tilted:0,threshold:0.1434696018695831,right_val:-0.3384973108768463,left_val:0.0379361994564533},{features:[[14,12,6,4,-1.],[14,14,6,2,2.]],tilted:0,threshold:-0.0535015314817429,right_val:-1.3069049455225468e-003,left_val:-1.},{features:[[2,12,6,4,-1.],[2,14,6,2,2.]],tilted:0,threshold:-4.3198501225560904e-004,right_val:-0.1489108055830002,left_val:0.0631404593586922},{features:[[9,6,6,8,-1.],[11,6,2,8,3.]],tilted:0,threshold:-0.0368255116045475,right_val:-0.0365471988916397,left_val:0.1641896069049835},{features:[[7,4,8,6,-1.],[7,6,8,2,3.]],tilted:0,threshold:-0.0932306125760078,right_val:0.0104887299239635,left_val:-0.8185548186302185},{features:[[13,7,6,4,-1.],[13,7,6,2,2.]],tilted:1,threshold:-7.5886500999331474e-003,right_val:-0.0323927290737629,left_val:0.0961899235844612},{features:[[10,2,12,3,-1.],[9,3,12,1,3.]],tilted:1,threshold:1.9316580146551132e-003,right_val:0.0968365371227264,left_val:-0.0971334576606750},{features:[[12,4,6,6,-1.],[14,6,2,6,3.]],tilted:1,threshold:-0.1761084944009781,right_val:3.9064860902726650e-004,left_val:-1.},{features:[[10,4,6,6,-1.],[8,6,6,2,3.]],tilted:1,threshold:-4.5753358863294125e-003,right_val:0.0726295337080956,left_val:-0.1424594074487686},{features:[[11,5,3,9,-1.],[12,6,1,9,3.]],tilted:1,threshold:-0.0715556964278221,right_val:-8.1192785874009132e-003,left_val:0.7012476921081543},{features:[[4,0,16,2,-1.],[4,0,16,1,2.]],tilted:1,threshold:-5.1939189434051514e-003,right_val:0.0669202581048012,left_val:-0.1759340018033981},{features:[[12,12,8,3,-1.],[12,12,4,3,2.]],tilted:0,threshold:9.7410175949335098e-003,right_val:0.1536626964807510,left_val:-0.0406328588724136},{features:[[10,0,12,6,-1.],[13,3,6,6,2.]],tilted:1,threshold:-0.0191977303475142,right_val:-0.1111958995461464,left_val:0.0884047225117683},{features:[[9,2,4,6,-1.],[9,5,4,3,2.]],tilted:0,threshold:7.7713979408144951e-003,right_val:0.2334187030792236,left_val:-0.0515310801565647},{features:[[0,2,18,9,-1.],[6,5,6,3,9.]],tilted:0,threshold:0.0467417798936367,right_val:-0.2182534039020538,left_val:0.0586589500308037},{features:[[16,2,3,9,-1.],[17,3,1,9,3.]],tilted:1,threshold:-0.0670518204569817,right_val:2.2733330260962248e-003,left_val:-0.7696895003318787},{features:[[6,2,9,3,-1.],[5,3,9,1,3.]],tilted:1,threshold:0.0104036098346114,right_val:0.1987476944923401,left_val:-0.0572082698345184},{features:[[10,1,12,4,-1.],[14,1,4,4,3.]],tilted:0,threshold:0.0681366175413132,right_val:-0.2351476997137070,left_val:0.0109247500076890},{features:[[0,1,12,4,-1.],[4,1,4,4,3.]],tilted:0,threshold:5.5462731979787350e-003,right_val:-0.1504815071821213,left_val:0.0764302089810371},{features:[[6,14,12,4,-1.],[12,14,6,2,2.],[6,16,6,2,2.]],tilted:0,threshold:0.0358278900384903,right_val:-0.9050955772399902,left_val:5.2330200560390949e-003},{features:[[4,2,13,3,-1.],[4,3,13,1,3.]],tilted:0,threshold:0.0100990803912282,right_val:0.1923664957284927,left_val:-0.0494383499026299},{features:[[7,2,13,3,-1.],[7,3,13,1,3.]],tilted:0,threshold:-7.3000352131202817e-004,right_val:-0.0598758608102798,left_val:0.0800386890769005},{features:[[1,12,20,2,-1.],[11,12,10,2,2.]],tilted:0,threshold:-0.0626273080706596,right_val:0.0144093399867415,left_val:-0.6877195239067078},{features:[[5,2,12,3,-1.],[9,2,4,3,3.]],tilted:0,threshold:4.1463607922196388e-003,right_val:-0.1413860023021698,left_val:0.0620688796043396},{features:[[4,8,14,9,-1.],[11,8,7,9,2.]],tilted:0,threshold:-0.1413605958223343,right_val:-0.0169105306267738,left_val:0.5943986773490906},{features:[[10,2,4,8,-1.],[10,2,2,8,2.]],tilted:0,threshold:0.0701470673084259,right_val:-0.8454138040542603,left_val:3.5781029146164656e-003},{features:[[8,2,4,8,-1.],[10,2,2,8,2.]],tilted:0,threshold:1.8181180348619819e-003,right_val:0.1770997941493988,left_val:-0.0590311288833618},{features:[[16,1,2,16,-1.],[16,9,2,8,2.]],tilted:0,threshold:0.0631495416164398,right_val:0.2457547038793564,left_val:-7.9691512510180473e-003},{features:[[2,8,9,4,-1.],[5,8,3,4,3.]],tilted:0,threshold:1.7065559513866901e-003,right_val:0.0722865983843803,left_val:-0.1377667933702469},{features:[[16,1,2,16,-1.],[16,9,2,8,2.]],tilted:0,threshold:-0.0418441593647003,right_val:0.0194128807634115,left_val:-0.1020454987883568},{features:[[4,1,2,16,-1.],[4,9,2,8,2.]],tilted:0,threshold:0.0618760287761688,right_val:-0.5961120128631592,left_val:0.0175725705921650},{features:[[10,7,8,6,-1.],[14,7,4,3,2.],[10,10,4,3,2.]],tilted:0,threshold:0.0862066075205803,right_val:0.5927473902702332,left_val:-8.3246696740388870e-003},{features:[[4,7,8,6,-1.],[4,7,4,3,2.],[8,10,4,3,2.]],tilted:0,threshold:0.0155612500384450,right_val:-0.2017468065023422,left_val:0.0559087917208672},{features:[[12,8,2,7,-1.],[12,8,1,7,2.]],tilted:1,threshold:1.9683360587805510e-003,right_val:-0.0951142832636833,left_val:0.0841097831726074},{features:[[5,8,6,8,-1.],[5,8,3,4,2.],[8,12,3,4,2.]],tilted:0,threshold:-3.2295130658894777e-003,right_val:-0.0603710412979126,left_val:0.1985978931188583},{features:[[12,8,2,7,-1.],[12,8,1,7,2.]],tilted:1,threshold:0.0438614599406719,right_val:0.2778531014919281,left_val:-7.5495638884603977e-003},{features:[[10,8,7,2,-1.],[10,8,7,1,2.]],tilted:1,threshold:-7.1588042192161083e-004,right_val:-0.1160534024238586,left_val:0.1067167967557907},{features:[[5,9,13,8,-1.],[5,11,13,4,2.]],tilted:0,threshold:-0.0115850800648332,right_val:-0.0726817175745964,left_val:0.1392320990562439},{features:[[7,9,4,9,-1.],[9,9,2,9,2.]],tilted:0,threshold:-0.0241320300847292,right_val:0.0285876393318176,left_val:-0.3434329926967621},{features:[[9,6,6,10,-1.],[11,6,2,10,3.]],tilted:0,threshold:-5.9670167975127697e-003,right_val:-0.0632379129528999,left_val:0.0628549680113792},{features:[[7,6,6,10,-1.],[9,6,2,10,3.]],tilted:0,threshold:-0.0572982616722584,right_val:-0.0344256795942783,left_val:0.3351210057735443},{features:[[6,0,14,6,-1.],[13,0,7,3,2.],[6,3,7,3,2.]],tilted:0,threshold:-0.1444053053855896,right_val:-2.0486500579863787e-004,left_val:-1.},{features:[[2,0,14,6,-1.],[2,0,7,3,2.],[9,3,7,3,2.]],tilted:0,threshold:-0.0161520093679428,right_val:0.0606980808079243,left_val:-0.1801726073026657},{features:[[3,6,16,3,-1.],[3,7,16,1,3.]],tilted:0,threshold:3.1132341246120632e-004,right_val:0.1081447973847389,left_val:-0.0873939692974091},{features:[[1,6,15,3,-1.],[1,7,15,1,3.]],tilted:0,threshold:-3.4905138891190290e-003,right_val:-0.0825025066733360,left_val:0.1308909952640533},{features:[[8,5,8,4,-1.],[8,7,8,2,2.]],tilted:0,threshold:-0.0510782003402710,right_val:9.7670806571841240e-003,left_val:-0.6674498915672302},{features:[[2,4,12,10,-1.],[8,4,6,10,2.]],tilted:0,threshold:0.2302789986133575,right_val:-0.8889254927635193,left_val:8.9318687096238136e-003},{features:[[7,0,14,16,-1.],[7,0,7,16,2.]],tilted:0,threshold:0.0332602895796299,right_val:0.1187155023217201,left_val:-0.0388468205928802},{features:[[1,1,18,3,-1.],[10,1,9,3,2.]],tilted:0,threshold:3.6332090385258198e-003,right_val:0.1200636997818947,left_val:-0.0818652883172035},{features:[[8,8,12,2,-1.],[8,8,6,2,2.]],tilted:0,threshold:-1.3659459364134818e-004,right_val:-0.0864127129316330,left_val:0.0290940403938293},{features:[[8,1,6,4,-1.],[11,1,3,4,2.]],tilted:0,threshold:4.2663831263780594e-003,right_val:-0.1677787005901337,left_val:0.0596425905823708},{features:[[11,0,4,10,-1.],[12,1,2,10,2.]],tilted:1,threshold:-0.0377263687551022,right_val:-0.0114804599434137,left_val:0.2520141899585724},{features:[[11,0,10,4,-1.],[10,1,10,2,2.]],tilted:1,threshold:-0.0377239510416985,right_val:-0.0251649804413319,left_val:0.3615080118179321},{features:[[13,7,9,4,-1.],[16,7,3,4,3.]],tilted:0,threshold:-0.0352175310254097,right_val:0.0156594999134541,left_val:-0.2076825946569443},{features:[[11,1,6,2,-1.],[11,1,6,1,2.]],tilted:1,threshold:-0.0262501500546932,right_val:-0.0139710800722241,left_val:0.6436303853988648},{features:[[8,8,12,2,-1.],[8,8,6,2,2.]],tilted:0,threshold:0.0711328312754631,right_val:-0.8105366826057434,left_val:5.0701410509645939e-003},{features:[[7,12,6,5,-1.],[10,12,3,5,2.]],tilted:0,threshold:2.8358760755509138e-003,right_val:-0.1176605001091957,left_val:0.0800347328186035},{features:[[10,7,9,11,-1.],[13,7,3,11,3.]],tilted:0,threshold:3.4837881103157997e-003,right_val:-0.1213672012090683,left_val:0.0697094574570656},{features:[[6,15,8,3,-1.],[10,15,4,3,2.]],tilted:0,threshold:2.9538539820350707e-005,right_val:0.0700920671224594,left_val:-0.1709052026271820},{features:[[19,3,2,12,-1.],[19,3,1,12,2.]],tilted:0,threshold:0.0263452306389809,right_val:0.3546783924102783,left_val:-0.0110464496538043},{features:[[1,3,2,12,-1.],[2,3,1,12,2.]],tilted:0,threshold:3.3180779428221285e-004,right_val:0.1040273979306221,left_val:-0.0897638499736786},{features:[[11,1,9,10,-1.],[14,1,3,10,3.]],tilted:0,threshold:9.9607985466718674e-003,right_val:0.0874811634421349,left_val:-0.1057467013597488},{features:[[1,3,16,6,-1.],[5,3,8,6,2.]],tilted:0,threshold:0.0690684765577316,right_val:0.3776597976684570,left_val:-0.0231357607990503},{features:[[7,1,12,12,-1.],[11,1,4,12,3.]],tilted:0,threshold:-0.0338048711419106,right_val:0.0661719888448715,left_val:-0.0800529271364212},{features:[[2,8,12,2,-1.],[8,8,6,2,2.]],tilted:0,threshold:-2.1103899925947189e-003,right_val:-0.1698666960000992,left_val:0.0729132369160652},{features:[[14,7,3,10,-1.],[14,12,3,5,2.]],tilted:0,threshold:0.0716755837202072,right_val:0.4375745952129364,left_val:-0.0226680207997561},{features:[[1,15,18,3,-1.],[10,15,9,3,2.]],tilted:0,threshold:-0.0176371298730373,right_val:-0.0776481479406357,left_val:0.1471055001020432},{features:[[9,0,13,3,-1.],[9,1,13,1,3.]],tilted:0,threshold:2.1559430751949549e-003,right_val:0.0806162506341934,left_val:-0.0445614792406559},{features:[[5,0,12,3,-1.],[5,1,12,1,3.]],tilted:0,threshold:-2.9923371039330959e-003,right_val:-0.0726281702518463,left_val:0.1601323038339615},{features:[[12,1,2,15,-1.],[12,1,1,15,2.]],tilted:0,threshold:-0.0283516198396683,right_val:7.8493626788258553e-003,left_val:-0.2483552992343903},{features:[[8,1,2,15,-1.],[9,1,1,15,2.]],tilted:0,threshold:-5.3842412307858467e-003,right_val:0.0786153525114059,left_val:-0.1329039037227631},{features:[[12,2,3,13,-1.],[13,2,1,13,3.]],tilted:0,threshold:0.0165137201547623,right_val:0.2291049957275391,left_val:-0.0308675803244114},{features:[[1,6,4,8,-1.],[3,6,2,8,2.]],tilted:0,threshold:-0.0234800595790148,right_val:0.0284779109060764,left_val:-0.3465690016746521},{features:[[17,1,4,12,-1.],[19,1,2,6,2.],[17,7,2,6,2.]],tilted:0,threshold:0.0648044571280479,right_val:-0.8184831738471985,left_val:3.2681180164217949e-003},{features:[[1,1,4,12,-1.],[1,1,2,6,2.],[3,7,2,6,2.]],tilted:0,threshold:2.9363438952714205e-003,right_val:-0.1603825986385346,left_val:0.0683719962835312},{features:[[17,0,4,7,-1.],[17,0,2,7,2.]],tilted:0,threshold:0.0193526390939951,right_val:-0.1775151044130325,left_val:0.0123308096081018},{features:[[1,0,4,7,-1.],[3,0,2,7,2.]],tilted:0,threshold:-1.4157049590721726e-003,right_val:-0.0848219692707062,left_val:0.1624874025583267},{features:[[12,2,3,13,-1.],[13,2,1,13,3.]],tilted:0,threshold:-0.0321656800806522,right_val:-0.0153878200799227,left_val:0.2549557983875275},{features:[[7,4,5,9,-1.],[7,7,5,3,3.]],tilted:0,threshold:0.0998839288949966,right_val:-0.8693922162055969,left_val:0.0116309802979231},{features:[[12,2,3,13,-1.],[13,2,1,13,3.]],tilted:0,threshold:-8.5509859491139650e-004,right_val:-0.0413151308894157,left_val:0.0375091396272182},{features:[[7,2,3,13,-1.],[8,2,1,13,3.]],tilted:0,threshold:0.0199486799538136,right_val:0.2654669880867004,left_val:-0.0332114398479462},{features:[[3,5,17,4,-1.],[3,6,17,2,2.]],tilted:0,threshold:-0.0168213602155447,right_val:0.0455782711505890,left_val:-0.1950453072786331},{features:[[2,3,18,3,-1.],[2,4,18,1,3.]],tilted:0,threshold:-0.0816850811243057,right_val:-0.0100283799692988,left_val:0.8082371950149536},{features:[[11,11,6,4,-1.],[11,13,6,2,2.]],tilted:0,threshold:-3.9467110764235258e-004,right_val:-0.0743217021226883,left_val:0.0378688685595989},{features:[[5,11,6,4,-1.],[5,13,6,2,2.]],tilted:0,threshold:-0.0419395789504051,right_val:0.0124947801232338,left_val:-0.7531027197837830},{features:[[15,5,6,4,-1.],[15,5,6,2,2.]],tilted:1,threshold:0.1231978014111519,right_val:-0.8745682835578919,left_val:1.5212129801511765e-003},{features:[[7,5,4,6,-1.],[7,5,2,6,2.]],tilted:1,threshold:4.3162349611520767e-003,right_val:-0.0982868820428848,left_val:0.0959173664450645},{features:[[13,1,8,8,-1.],[15,1,4,8,2.]],tilted:0,threshold:1.7064419807866216e-003,right_val:0.0583726689219475,left_val:-0.0672838464379311},{features:[[3,1,12,12,-1.],[7,1,4,12,3.]],tilted:0,threshold:0.0688534975051880,right_val:-0.2701404094696045,left_val:0.0398532710969448},{features:[[14,2,4,12,-1.],[14,2,2,12,2.]],tilted:0,threshold:1.5133110573515296e-003,right_val:-0.0786387771368027,left_val:0.0368038304150105},{features:[[4,2,4,12,-1.],[6,2,2,12,2.]],tilted:0,threshold:0.0166717004030943,right_val:0.2547613978385925,left_val:-0.0522084794938564},{features:[[15,0,2,14,-1.],[15,0,1,14,2.]],tilted:0,threshold:-2.4927379563450813e-003,right_val:0.0391825288534164,left_val:-0.0683529227972031},{features:[[5,0,2,14,-1.],[6,0,1,14,2.]],tilted:0,threshold:1.7946650041267276e-003,right_val:-0.1844301968812943,left_val:0.0756416171789169},{features:[[15,1,7,15,-1.],[15,6,7,5,3.]],tilted:0,threshold:0.0657645165920258,right_val:0.1377072930335999,left_val:-0.0279573798179626},{features:[[6,1,7,6,-1.],[4,3,7,2,3.]],tilted:1,threshold:-0.0324156284332275,right_val:-0.0384017415344715,left_val:0.2495771944522858},{features:[[1,4,20,14,-1.],[11,4,10,7,2.],[1,11,10,7,2.]],tilted:0,threshold:0.1598522067070007,right_val:-0.4587697982788086,left_val:0.0231395307928324},{features:[[1,2,6,8,-1.],[3,2,2,8,3.]],tilted:0,threshold:0.0330030508339405,right_val:0.3648226857185364,left_val:-0.0285496506839991},{features:[[15,0,2,13,-1.],[15,0,1,13,2.]],tilted:0,threshold:8.3292415365576744e-003,right_val:-0.1299273967742920,left_val:0.0234221108257771},{features:[[2,1,9,10,-1.],[5,1,3,10,3.]],tilted:0,threshold:-0.1470738053321838,right_val:0.0103427702561021,left_val:-1.},{features:[[9,9,6,6,-1.],[11,9,2,6,3.]],tilted:0,threshold:0.1062593013048172,right_val:-0.6210510134696960,left_val:2.8901589103043079e-003},{features:[[5,5,8,4,-1.],[5,5,8,2,2.]],tilted:1,threshold:0.0479050017893314,right_val:0.3859503865242004,left_val:-0.0254373103380203},{features:[[5,8,14,4,-1.],[5,9,14,2,2.]],tilted:0,threshold:0.0435629487037659,right_val:-0.3157450854778290,left_val:0.0129636703059077},{features:[[0,7,20,2,-1.],[10,7,10,2,2.]],tilted:0,threshold:-0.0664015114307404,right_val:-0.0242482293397188,left_val:0.3718433976173401},{features:[[8,0,10,10,-1.],[8,0,5,10,2.]],tilted:0,threshold:1.0357169667258859e-003,right_val:0.0728181377053261,left_val:-0.0338571593165398},{features:[[4,0,10,10,-1.],[9,0,5,10,2.]],tilted:0,threshold:-0.1001026034355164,right_val:0.0405613481998444,left_val:-0.2616243064403534},{features:[[5,1,15,10,-1.],[10,1,5,10,3.]],tilted:0,threshold:-0.1402942985296249,right_val:-0.0374638698995113,left_val:0.1618638038635254},{features:[[0,9,18,4,-1.],[0,10,18,2,2.]],tilted:0,threshold:-0.0366291813552380,right_val:0.0224937591701746,left_val:-0.3798868954181671},{features:[[8,8,10,6,-1.],[8,10,10,2,3.]],tilted:0,threshold:0.1852793991565704,right_val:0.9997292160987854,left_val:-3.4648380242288113e-003},{features:[[4,8,10,6,-1.],[4,10,10,2,3.]],tilted:0,threshold:0.0134529303759336,right_val:-0.1520805060863495,left_val:0.0661910176277161},{features:[[11,6,10,12,-1.],[11,10,10,4,3.]],tilted:0,threshold:0.0846280604600906,right_val:0.2287780046463013,left_val:-0.0321342609822750},{features:[[8,5,4,8,-1.],[8,5,4,4,2.]],tilted:1,threshold:-0.0875683724880219,right_val:-0.0247350297868252,left_val:0.4322968125343323},{features:[[17,8,5,6,-1.],[17,11,5,3,2.]],tilted:0,threshold:0.0265023391693830,right_val:-0.2984949946403503,left_val:0.0235266294330359},{features:[[8,11,4,7,-1.],[10,11,2,7,2.]],tilted:0,threshold:-0.0182730592787266,right_val:-0.0197359491139650,left_val:0.5087803006172180},{features:[[9,5,12,3,-1.],[9,6,12,1,3.]],tilted:0,threshold:-1.1995369568467140e-003,right_val:-0.0738613903522491,left_val:0.0748677626252174},{features:[[2,9,13,3,-1.],[2,10,13,1,3.]],tilted:0,threshold:0.0313812308013439,right_val:0.3658395111560822,left_val:-0.0262804795056582},{features:[[3,13,16,3,-1.],[3,13,8,3,2.]],tilted:0,threshold:0.0231786705553532,right_val:-0.2546856999397278,left_val:0.0371552594006062},{features:[[5,12,8,4,-1.],[9,12,4,4,2.]],tilted:0,threshold:-0.0136446999385953,right_val:-0.0427927710115910,left_val:0.2071769982576370},{features:[[14,8,6,9,-1.],[14,11,6,3,3.]],tilted:0,threshold:7.8315278515219688e-003,right_val:-0.0803370401263237,left_val:0.0360285192728043},{features:[[4,10,12,3,-1.],[4,11,12,1,3.]],tilted:0,threshold:-0.0100357802584767,right_val:0.0429500304162502,left_val:-0.2225376963615418},{features:[[6,7,11,9,-1.],[6,10,11,3,3.]],tilted:0,threshold:-0.0511321313679218,right_val:-0.0270545892417431,left_val:0.3058665096759796},{features:[[4,1,9,4,-1.],[7,4,3,4,3.]],tilted:1,threshold:-0.0695447027683258,right_val:-0.0317362211644650,left_val:0.3468846082687378},{features:[[12,1,9,9,-1.],[15,1,3,9,3.]],tilted:0,threshold:-0.0240793600678444,right_val:-0.0302777793258429,left_val:0.1329156011343002},{features:[[1,1,9,9,-1.],[4,1,3,9,3.]],tilted:0,threshold:-6.6630518995225430e-003,right_val:0.0787502527236938,left_val:-0.1847348064184189},{features:[[14,1,6,6,-1.],[16,1,2,6,3.]],tilted:0,threshold:0.0431476905941963,right_val:0.2948581874370575,left_val:-9.1566536575555801e-003},{features:[[4,6,4,6,-1.],[6,6,2,6,2.]],tilted:0,threshold:-0.0138083398342133,right_val:0.0326221883296967,left_val:-0.2847915887832642},{features:[[7,5,12,7,-1.],[10,5,6,7,2.]],tilted:0,threshold:0.1635189950466156,right_val:0.5604218244552612,left_val:-3.7377059925347567e-003},{features:[[3,5,12,7,-1.],[6,5,6,7,2.]],tilted:0,threshold:-0.0240861494094133,right_val:-0.0662945136427879,left_val:0.1584143042564392}],threshold:-30.5550003051757810}],size:[22,18],tilted:true}; +})(jsfeat.haar); \ No newline at end of file diff --git a/compile/build.xml b/compile/build.xml old mode 100644 new mode 100755 index df3665f..37ea670 --- a/compile/build.xml +++ b/compile/build.xml @@ -4,10 +4,14 @@ + + + + diff --git a/src/jsfeat.js b/src/jsfeat.js old mode 100644 new mode 100755 index 308f164..c4c09b8 --- a/src/jsfeat.js +++ b/src/jsfeat.js @@ -9,4 +9,4 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; self.Int32Array = self.Int32Array || Array; self.Uint32Array = self.Uint32Array || Array; self.Uint8Array = self.Uint8Array || Array; -self.Float32Array = self.Float32Array || Array; \ No newline at end of file +self.Float32Array = self.Float32Array || Array; diff --git a/src/jsfeat_bbf.js b/src/jsfeat_bbf.js new file mode 100755 index 0000000..016dc2b --- /dev/null +++ b/src/jsfeat_bbf.js @@ -0,0 +1,394 @@ +/** + * BBF: Brightness Binary Feature + * + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + * this code is a rewrite from https://github.com/liuliu/ccv implementation + * @author Liu Liu / http://liuliu.me/ + * + * The original paper refers to: YEF∗ Real-Time Object Detection, Yotam Abramson and Bruno Steux + */ + +(function(global) { + "use strict"; + // + var bbf = (function() { + + var _group_func = function(r1, r2) { + var distance = (r1.width * 0.25 + 0.5)|0; + + return r2.x <= r1.x + distance && + r2.x >= r1.x - distance && + r2.y <= r1.y + distance && + r2.y >= r1.y - distance && + r2.width <= (r1.width * 1.5 + 0.5)|0 && + (r2.width * 1.5 + 0.5)|0 >= r1.width; + } + + return { + + interval: 4, + scale: 1.1486, + next: 5, + scale_to: 1, + + // make features local copy + // to avoid array allocation with each scale + // this is strange but array works faster than Int32 version??? + prepare_cascade: function(cascade) { + var sn = cascade.stage_classifier.length; + for (var j = 0; j < sn; j++) { + var orig_feature = cascade.stage_classifier[j].feature; + var f_cnt = cascade.stage_classifier[j].count; + var feature = cascade.stage_classifier[j]._feature = new Array(f_cnt); + for (var k = 0; k < f_cnt; k++) { + feature[k] = {"size" : orig_feature[k].size, + "px" : new Array(orig_feature[k].size), + "pz" : new Array(orig_feature[k].size), + "nx" : new Array(orig_feature[k].size), + "nz" : new Array(orig_feature[k].size)}; + } + } + }, + + build_pyramid: function(canvas, min_width, min_height, interval, do_grayscale) { + if (typeof interval === "undefined") { interval = 4; } + if (typeof do_grayscale === "undefined") { do_grayscale = true; } + + // need to convert to grayscale + if(do_grayscale) { + var ctx_input = canvas.getContext('2d'); + var in_size = canvas.width * canvas.height; + var img_data_input = ctx_input.getImageData(0, 0, canvas.width, canvas.height); + var data_input = img_data_input.data; + var data_u32 = new Uint32Array(data_input.buffer); + var gray_n = jsfeat.cache.get_buffer(in_size); + var gray_data = gray_n.u8; + jsfeat.imgproc.grayscale(data_input, gray_data); + var alpha = (0xff << 24); + var i = in_size,pix=0; + while (--i >= 0) { + pix = gray_data[i]; + data_u32[i] = alpha | (pix << 16) | (pix << 8) | pix; + } + ctx_input.putImageData(img_data_input, 0, 0); + jsfeat.cache.put_buffer(gray_n); + } + // + + this.interval = interval; + this.scale = Math.pow(2, 1 / (this.interval + 1)); + this.next = (this.interval + 1)|0; + this.scale_to = (Math.log(Math.min(canvas.width / min_width, canvas.height / min_height)) / Math.log(this.scale))|0; + + var _canvas = document.createElement('canvas'); + _canvas.width = canvas.width; + _canvas.height = canvas.height; + var _ctx = _canvas.getContext('2d'); + + var ret = new Array((this.scale_to + this.next * 2) * 4); + ret[0] = { "width" : canvas.width, + "height" : canvas.height, + "data" : canvas.getContext("2d").getImageData(0, 0, canvas.width, canvas.height).data }; + var nw, nh; + for (i = 1; i <= this.interval; ++i) { + nw = (canvas.width / Math.pow(this.scale, i))|0; + nh = (canvas.height / Math.pow(this.scale, i))|0; + _ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, nw, nh); + ret[i * 4] = { "width" : nw, + "height" : nh, + "data" : _ctx.getImageData(0, 0, nw, nh).data }; + } + for (i = this.next; i < this.scale_to + this.next * 2; ++i) { + nw = ret[i * 4 - this.next * 4].width >> 1; + nh = ret[i * 4 - this.next * 4].height >> 1; + _ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, nw, nh); + ret[i * 4] = { "width" : nw, + "height" : nh, + "data" : _ctx.getImageData(0, 0, nw, nh).data }; + } + for (i = this.next * 2; i < this.scale_to + this.next * 2; ++i) { + nw = ret[i * 4 - this.next * 4].width >> 1; + nh = ret[i * 4 - this.next * 4].height >> 1; + + _ctx.drawImage(canvas, 1, 0, canvas.width-1, canvas.height, 0, 0, nw-2, nh); + + ret[i * 4 + 1] = { "width" : nw, + "height" : nh, + "data" : _ctx.getImageData(0, 0, nw, nh).data }; + + _ctx.drawImage(canvas, 0, 1, canvas.width, canvas.height-1, 0, 0, nw, nh-2); + + ret[i * 4 + 2] = { "width" : nw, + "height" : nh, + "data" : _ctx.getImageData(0, 0, nw, nh).data }; + + _ctx.drawImage(canvas, 1, 1, canvas.width-1, canvas.height-1, 0, 0, nw-2, nh-2); + + ret[i * 4 + 3] = { "width" : nw, + "height" : nh, + "data" : _ctx.getImageData(0, 0, nw, nh).data }; + } + + return ret; + }, + + detect: function(pyr, cascade) { + var interval = this.interval; + var scale = this.scale; + var next = this.next; + var scale_upto = this.scale_to; + var i=0,j=0,k=0,n=0,x=0,y=0,q=0,sn=0,f_cnt=0,q_cnt=0,p=0,pmin=0,nmax=0,f=0,i4=0,qw=0,qh=0; + var sum=0.0, alpha, feature, orig_feature, feature_k, feature_o, flag = true, shortcut=true; + var scale_x = 1.0, scale_y = 1.0; + var dx = [0, 1, 0, 1]; + var dy = [0, 0, 1, 1]; + var seq = []; + + var u8 = [], u8o = [0,0,0]; + var step = [0,0,0]; + var paddings = [0,0,0]; + + for (i = 0; i < scale_upto; i++) { + i4 = (i<<2); + qw = pyr[i4 + (next << 3)].width - (cascade.width >> 2); + qh = pyr[i4 + (next << 3)].height - (cascade.height >> 2); + step[0] = pyr[i4].width << 2; step[1] = pyr[i4 + (next << 2)].width << 2; step[2] = pyr[i4 + (next << 3)].width << 2; + paddings[0] = (pyr[i4].width << 4) - (qw << 4); + paddings[1] = (pyr[i4 + (next << 2)].width << 3) - (qw << 3); + paddings[2] = (pyr[i4 + (next << 3)].width << 2) - (qw << 2); + sn = cascade.stage_classifier.length; + for (j = 0; j < sn; j++) { + orig_feature = cascade.stage_classifier[j].feature; + feature = cascade.stage_classifier[j]._feature; + f_cnt = cascade.stage_classifier[j].count; + for (k = 0; k < f_cnt; k++) { + feature_k = feature[k]; + feature_o = orig_feature[k]; + q_cnt = feature_o.size|0; + for (q = 0; q < q_cnt; q++) { + feature_k.px[q] = (feature_o.px[q] << 2) + feature_o.py[q] * step[feature_o.pz[q]]; + feature_k.pz[q] = feature_o.pz[q]; + feature_k.nx[q] = (feature_o.nx[q] << 2) + feature_o.ny[q] * step[feature_o.nz[q]]; + feature_k.nz[q] = feature_o.nz[q]; + } + } + } + u8[0] = pyr[i4].data; u8[1] = pyr[i4 + (next<<2)].data; + for (q = 0; q < 4; q++) { + u8[2] = pyr[i4 + (next<<3) + q].data; + u8o[0] = (dx[q]<<3) + dy[q] * (pyr[i4].width<<3); u8o[1] = (dx[q]<<2) + dy[q] * (pyr[i4 + (next<<2)].width<<2); u8o[2]=0; + for (y = 0; y < qh; y++) { + for (x = 0; x < qw; x++) { + sum = 0; + flag = true; + sn = cascade.stage_classifier.length; + for (j = 0; j < sn; j++) { + sum = 0; + alpha = cascade.stage_classifier[j].alpha; + feature = cascade.stage_classifier[j]._feature; + f_cnt = cascade.stage_classifier[j].count; + for (k = 0; k < f_cnt; k++) { + feature_k = feature[k]; + pmin = u8[feature_k.pz[0]][u8o[feature_k.pz[0]] + feature_k.px[0]]; + nmax = u8[feature_k.nz[0]][u8o[feature_k.nz[0]] + feature_k.nx[0]]; + if (pmin <= nmax) { + sum += alpha[k << 1]; + } else { + shortcut = true; + q_cnt = feature_k.size; + for (f = 0; f < q_cnt; f++) { + if (feature_k.pz[f] >= 0) { + p = u8[feature_k.pz[f]][u8o[feature_k.pz[f]] + feature_k.px[f]]; + if (p < pmin) { + if (p <= nmax) { + shortcut = false; + break; + } + pmin = p; + } + } + if (feature_k.nz[f] >= 0) { + n = u8[feature_k.nz[f]][u8o[feature_k.nz[f]] + feature_k.nx[f]]; + if (n > nmax) { + if (pmin <= n) { + shortcut = false; + break; + } + nmax = n; + } + } + } + sum += (shortcut) ? alpha[(k << 1) + 1] : alpha[k << 1]; + } + } + if (sum < cascade.stage_classifier[j].threshold) { + flag = false; + break; + } + } + if (flag) { + seq.push({"x" : (x * 4 + dx[q] * 2) * scale_x, + "y" : (y * 4 + dy[q] * 2) * scale_y, + "width" : cascade.width * scale_x, + "height" : cascade.height * scale_y, + "neighbor" : 1, + "confidence" : sum}); + } + u8o[0] += 16; + u8o[1] += 8; + u8o[2] += 4; + } + u8o[0] += paddings[0]; + u8o[1] += paddings[1]; + u8o[2] += paddings[2]; + } + } + scale_x *= scale; + scale_y *= scale; + } + + return seq; + }, + + // OpenCV method to group detected rectangles + group_rectangles: function(rects, min_neighbors) { + if (typeof min_neighbors === "undefined") { min_neighbors = 1; } + var i, j, n = rects.length; + var node = []; + for (i = 0; i < n; ++i) { + node[i] = {"parent" : -1, + "element" : rects[i], + "rank" : 0}; + } + for (i = 0; i < n; ++i) { + if (!node[i].element) + continue; + var root = i; + while (node[root].parent != -1) + root = node[root].parent; + for (j = 0; j < n; ++j) { + if( i != j && node[j].element && _group_func(node[i].element, node[j].element)) { + var root2 = j; + + while (node[root2].parent != -1) + root2 = node[root2].parent; + + if(root2 != root) { + if(node[root].rank > node[root2].rank) + node[root2].parent = root; + else { + node[root].parent = root2; + if (node[root].rank == node[root2].rank) + node[root2].rank++; + root = root2; + } + + /* compress path from node2 to the root: */ + var temp, node2 = j; + while (node[node2].parent != -1) { + temp = node2; + node2 = node[node2].parent; + node[temp].parent = root; + } + + /* compress path from node to the root: */ + node2 = i; + while (node[node2].parent != -1) { + temp = node2; + node2 = node[node2].parent; + node[temp].parent = root; + } + } + } + } + } + var idx_seq = []; + var class_idx = 0; + for(i = 0; i < n; i++) { + j = -1; + var node1 = i; + if(node[node1].element) { + while (node[node1].parent != -1) + node1 = node[node1].parent; + if(node[node1].rank >= 0) + node[node1].rank = ~class_idx++; + j = ~node[node1].rank; + } + idx_seq[i] = j; + } + + var comps = []; + for (i = 0; i < class_idx+1; ++i) { + comps[i] = {"neighbors" : 0, + "x" : 0, + "y" : 0, + "width" : 0, + "height" : 0, + "confidence" : 0}; + } + + // count number of neighbors + for(i = 0; i < n; ++i) { + var r1 = rects[i]; + var idx = idx_seq[i]; + + if (comps[idx].neighbors == 0) + comps[idx].confidence = r1.confidence; + + ++comps[idx].neighbors; + + comps[idx].x += r1.x; + comps[idx].y += r1.y; + comps[idx].width += r1.width; + comps[idx].height += r1.height; + comps[idx].confidence = Math.max(comps[idx].confidence, r1.confidence); + } + + var seq2 = []; + // calculate average bounding box + for(i = 0; i < class_idx; ++i) { + n = comps[i].neighbors; + if (n >= min_neighbors) + seq2.push({"x" : (comps[i].x * 2 + n) / (2 * n), + "y" : (comps[i].y * 2 + n) / (2 * n), + "width" : (comps[i].width * 2 + n) / (2 * n), + "height" : (comps[i].height * 2 + n) / (2 * n), + "neighbors" : comps[i].neighbors, + "confidence" : comps[i].confidence}); + } + + var result_seq = []; + n = seq2.length; + // filter out small face rectangles inside large face rectangles + for(i = 0; i < n; ++i) { + var r1 = seq2[i]; + var flag = true; + for(j = 0; j < n; ++j) { + var r2 = seq2[j]; + var distance = (r2.width * 0.25 + 0.5)|0; + + if(i != j && + r1.x >= r2.x - distance && + r1.y >= r2.y - distance && + r1.x + r1.width <= r2.x + r2.width + distance && + r1.y + r1.height <= r2.y + r2.height + distance && + (r2.neighbors > Math.max(3, r1.neighbors) || r1.neighbors < 3)) { + flag = false; + break; + } + } + + if(flag) + result_seq.push(r1); + } + return result_seq; + } + + }; + + })(); + + global.bbf = bbf; + +})(jsfeat); diff --git a/src/jsfeat_cache.js b/src/jsfeat_cache.js new file mode 100755 index 0000000..ac06a8a --- /dev/null +++ b/src/jsfeat_cache.js @@ -0,0 +1,71 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + */ + +(function(global) { + "use strict"; + // + + var cache = (function() { + + // very primitive array cache, still need testing if it helps + // of course V8 has its own powerful cache sys but i'm not sure + // it caches several multichannel 640x480 buffer creations each frame + + var _pool_node_t = (function () { + function _pool_node_t(size_in_bytes) { + this.next = null; + this.size = size_in_bytes|0; + this.buffer = new ArrayBuffer(size_in_bytes); + this.u8 = new Uint8Array(this.buffer); + this.i32 = new Int32Array(this.buffer); + this.f32 = new Float32Array(this.buffer); + } + return _pool_node_t; + })(); + + var _pool_head, _pool_tail; + var _pool_size = 0; + + return { + + allocate: function(capacity, data_size) { + _pool_head = _pool_tail = new _pool_node_t(data_size); + for (var i = 0; i < capacity; ++i) { + var node = new _pool_node_t(data_size); + _pool_tail = _pool_tail.next = node; + + _pool_size++; + } + }, + + get_buffer: function(size_in_bytes) { + // assume we have enough free nodes + var node = _pool_head; + _pool_head = _pool_head.next; + _pool_size--; + + if(size_in_bytes > node.size) { + node.buffer = new ArrayBuffer(size_in_bytes); + node.u8 = new Uint8Array(node.buffer); + node.i32 = new Int32Array(node.buffer); + node.f32 = new Float32Array(node.buffer); + node.size = size_in_bytes; + } + + return node; + }, + + put_buffer: function(node) { + _pool_tail = _pool_tail.next = node; + _pool_size++; + } + }; + })(); + + global.cache = cache; + // for now we dont need more than 30 buffers + // if having cache sys really helps we can add auto extending sys + cache.allocate(30, 640*4); + +})(jsfeat); diff --git a/src/jsfeat_fast_corners.js b/src/jsfeat_fast_corners.js old mode 100644 new mode 100755 index 14d2dd0..0d2982e --- a/src/jsfeat_fast_corners.js +++ b/src/jsfeat_fast_corners.js @@ -38,7 +38,7 @@ The references are: }, _cmp_score_8 = function(src, off, pixel, d, threshold) { - var N = 15, k = 0, v = src[off]; + var N = 13, k = 0, v = src[off]; var a0 = threshold,a=0,b0=0,b=0; for( ; k < N; ++k ) { @@ -161,21 +161,28 @@ The references are: return _threshold; }, - detect: function(img, w, h, corners, border, pattern_size) { - if (typeof pattern_size === "undefined") { pattern_size = 16; } + detect: function(src, corners, border, pattern_size) { + if (typeof pattern_size === "undefined") { + pattern_size = 16; + } else if(pattern_size != 16 && pattern_size!=12 && pattern_size!=8) { + pattern_size = 16; + } if (typeof border === "undefined") { border = 3; } - var K = (pattern_size/2)|0, N = (pattern_size + K + 1)|0; + var K = (pattern_size>>1), N = (pattern_size + K + 1)|0; + var img = src.data, w = src.cols, h = src.rows; var i=0, j=0, k=0, vt=0, x=0, m3=0; - var buf = new Uint8Array(w*3); - var cpbuf = new Int32Array((w+1)*3); + var buf_node = jsfeat.cache.get_buffer(3 * w); + var cpbuf_node = jsfeat.cache.get_buffer(((w+1)*3)<<2); + var buf = buf_node.u8;//new Uint8Array(w*3); + var cpbuf = cpbuf_node.i32;//new Int32Array((w+1)*3); var pixel = pixel_off; var sd = score_diff; var sy = Math.max(3, border); var ey = Math.min((h-2), (h-border)); var sx = Math.max(3, border); var ex = Math.min((w - 3), (w - border)); - var _count = 0, corners_cnt = 0; + var _count = 0, corners_cnt = 0, pt; var score_func = pattern_size == 16 ? _cmp_score_16 : (pattern_size == 12 ? _cmp_score_12 : _cmp_score_8); var thresh_tab = threshold_tab; var threshold = _threshold; @@ -307,13 +314,14 @@ The references are: score > buf[pprev+jm1] && score > buf[pprev+j] && score > buf[pprev+jp1] && score > buf[curr+jm1] && score > buf[curr+j] && score > buf[curr+jp1]) ) { // save corner - corners[corners_cnt*3] = j; - corners[corners_cnt*3+1] = (i-1); - corners[corners_cnt*3+2] = score; + pt = corners[corners_cnt]; + pt.x = j, pt.y = (i-1), pt.score = score; corners_cnt++; } } } // y loop + jsfeat.cache.put_buffer(buf_node); + jsfeat.cache.put_buffer(cpbuf_node); return corners_cnt; } }; @@ -322,4 +330,4 @@ The references are: global.fast_corners = fast_corners; fast_corners.set_threshold(20); // set default -})(jsfeat); \ No newline at end of file +})(jsfeat); diff --git a/src/jsfeat_haar.js b/src/jsfeat_haar.js new file mode 100755 index 0000000..7d29544 --- /dev/null +++ b/src/jsfeat_haar.js @@ -0,0 +1,290 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + * this code is a rewrite from https://github.com/mtschirs/js-objectdetect implementation + * @author Martin Tschirsich / http://www.tu-darmstadt.de/~m_t + */ + +(function(global) { + "use strict"; + // + var haar = (function() { + + var _group_func = function(r1, r2) { + var distance = (r1.width * 0.25 + 0.5)|0; + + return r2.x <= r1.x + distance && + r2.x >= r1.x - distance && + r2.y <= r1.y + distance && + r2.y >= r1.y - distance && + r2.width <= (r1.width * 1.5 + 0.5)|0 && + (r2.width * 1.5 + 0.5)|0 >= r1.width; + } + + return { + + edges_density: 0.07, + + detect_single_scale: function(int_sum, int_sqsum, int_tilted, int_canny_sum, width, height, scale, classifier) { + var win_w = (classifier.size[0] * scale)|0, + win_h = (classifier.size[1] * scale)|0, + step_x = (0.5 * scale + 1.5)|0, + step_y = step_x; + var i,j,k,x,y,ex=(width-win_w)|0,ey=(height-win_h)|0; + var w1=(width+1)|0,edge_dens,mean,variance,std; + var inv_area = 1.0 / (win_w * win_h); + var stages,stage,trees,tree,sn,tn,fn,found=true,stage_thresh,stage_sum,tree_sum,feature,features; + var fi_a,fi_b,fi_c,fi_d,fw,fh; + + var ii_a=0,ii_b=win_w,ii_c=win_h*w1,ii_d=ii_c+win_w; + var edges_thresh = ((win_w*win_h) * 0xff * this.edges_density)|0; + // if too much gradient we also can skip + //var edges_thresh_high = ((win_w*win_h) * 0xff * 0.3)|0; + + var rects = []; + for(y = 0; y < ey; y += step_y) { + ii_a = y * w1; + for(x = 0; x < ex; x += step_x, ii_a += step_x) { + + mean = int_sum[ii_a] + - int_sum[ii_a+ii_b] + - int_sum[ii_a+ii_c] + + int_sum[ii_a+ii_d]; + + // canny prune + if(int_canny_sum) { + edge_dens = (int_canny_sum[ii_a] + - int_canny_sum[ii_a+ii_b] + - int_canny_sum[ii_a+ii_c] + + int_canny_sum[ii_a+ii_d]); + if(edge_dens < edges_thresh || mean < 20) { + x += step_x, ii_a += step_x; + continue; + } + } + + mean *= inv_area; + variance = (int_sqsum[ii_a] + - int_sqsum[ii_a+ii_b] + - int_sqsum[ii_a+ii_c] + + int_sqsum[ii_a+ii_d]) * inv_area - mean * mean; + + std = variance > 0. ? Math.sqrt(variance) : 1; + + stages = classifier.complexClassifiers; + sn = stages.length; + found = true; + for(i = 0; i < sn; ++i) { + stage = stages[i]; + stage_thresh = stage.threshold; + trees = stage.simpleClassifiers; + tn = trees.length; + stage_sum = 0; + for(j = 0; j < tn; ++j) { + tree = trees[j]; + tree_sum = 0; + features = tree.features; + fn = features.length; + if(tree.tilted === 1) { + for(k=0; k < fn; ++k) { + feature = features[k]; + fi_a = ~~(x + feature[0] * scale) + ~~(y + feature[1] * scale) * w1; + fw = ~~(feature[2] * scale); + fh = ~~(feature[3] * scale); + fi_b = fw * w1; + fi_c = fh * w1; + + tree_sum += (int_tilted[fi_a] + - int_tilted[fi_a + fw + fi_b] + - int_tilted[fi_a - fh + fi_c] + + int_tilted[fi_a + fw - fh + fi_b + fi_c]) * feature[4]; + } + } else { + for(k=0; k < fn; ++k) { + feature = features[k]; + fi_a = ~~(x + feature[0] * scale) + ~~(y + feature[1] * scale) * w1; + fw = ~~(feature[2] * scale); + fh = ~~(feature[3] * scale); + fi_c = fh * w1; + + tree_sum += (int_sum[fi_a] + - int_sum[fi_a+fw] + - int_sum[fi_a+fi_c] + + int_sum[fi_a+fi_c+fw]) * feature[4]; + } + } + stage_sum += (tree_sum * inv_area < tree.threshold * std) ? tree.left_val : tree.right_val; + } + if (stage_sum < stage_thresh) { + found = false; + break; + } + } + + if(found) { + rects.push({"x" : x, + "y" : y, + "width" : win_w, + "height" : win_h, + "neighbor" : 1, + "confidence" : stage_sum}); + x += step_x, ii_a += step_x; + } + } + } + return rects; + }, + + detect_multi_scale: function(int_sum, int_sqsum, int_tilted, int_canny_sum, width, height, classifier, scale_factor, scale_min) { + if (typeof scale_factor === "undefined") { scale_factor = 1.2; } + if (typeof scale_min === "undefined") { scale_min = 1.0; } + var win_w = classifier.size[0]; + var win_h = classifier.size[1]; + var rects = []; + while (scale_min * win_w < width && scale_min * win_h < height) { + rects = rects.concat(this.detect_single_scale(int_sum, int_sqsum, int_tilted, int_canny_sum, width, height, scale_min, classifier)); + scale_min *= scale_factor; + } + return rects; + }, + + // OpenCV method to group detected rectangles + group_rectangles: function(rects, min_neighbors) { + if (typeof min_neighbors === "undefined") { min_neighbors = 1; } + var i, j, n = rects.length; + var node = []; + for (i = 0; i < n; ++i) { + node[i] = {"parent" : -1, + "element" : rects[i], + "rank" : 0}; + } + for (i = 0; i < n; ++i) { + if (!node[i].element) + continue; + var root = i; + while (node[root].parent != -1) + root = node[root].parent; + for (j = 0; j < n; ++j) { + if( i != j && node[j].element && _group_func(node[i].element, node[j].element)) { + var root2 = j; + + while (node[root2].parent != -1) + root2 = node[root2].parent; + + if(root2 != root) { + if(node[root].rank > node[root2].rank) + node[root2].parent = root; + else { + node[root].parent = root2; + if (node[root].rank == node[root2].rank) + node[root2].rank++; + root = root2; + } + + /* compress path from node2 to the root: */ + var temp, node2 = j; + while (node[node2].parent != -1) { + temp = node2; + node2 = node[node2].parent; + node[temp].parent = root; + } + + /* compress path from node to the root: */ + node2 = i; + while (node[node2].parent != -1) { + temp = node2; + node2 = node[node2].parent; + node[temp].parent = root; + } + } + } + } + } + var idx_seq = []; + var class_idx = 0; + for(i = 0; i < n; i++) { + j = -1; + var node1 = i; + if(node[node1].element) { + while (node[node1].parent != -1) + node1 = node[node1].parent; + if(node[node1].rank >= 0) + node[node1].rank = ~class_idx++; + j = ~node[node1].rank; + } + idx_seq[i] = j; + } + + var comps = []; + for (i = 0; i < class_idx+1; ++i) { + comps[i] = {"neighbors" : 0, + "x" : 0, + "y" : 0, + "width" : 0, + "height" : 0, + "confidence" : 0}; + } + + // count number of neighbors + for(i = 0; i < n; ++i) { + var r1 = rects[i]; + var idx = idx_seq[i]; + + if (comps[idx].neighbors == 0) + comps[idx].confidence = r1.confidence; + + ++comps[idx].neighbors; + + comps[idx].x += r1.x; + comps[idx].y += r1.y; + comps[idx].width += r1.width; + comps[idx].height += r1.height; + comps[idx].confidence = Math.max(comps[idx].confidence, r1.confidence); + } + + var seq2 = []; + // calculate average bounding box + for(i = 0; i < class_idx; ++i) { + n = comps[i].neighbors; + if (n >= min_neighbors) + seq2.push({"x" : (comps[i].x * 2 + n) / (2 * n), + "y" : (comps[i].y * 2 + n) / (2 * n), + "width" : (comps[i].width * 2 + n) / (2 * n), + "height" : (comps[i].height * 2 + n) / (2 * n), + "neighbors" : comps[i].neighbors, + "confidence" : comps[i].confidence}); + } + + var result_seq = []; + n = seq2.length; + // filter out small face rectangles inside large face rectangles + for(i = 0; i < n; ++i) { + var r1 = seq2[i]; + var flag = true; + for(j = 0; j < n; ++j) { + var r2 = seq2[j]; + var distance = (r2.width * 0.25 + 0.5)|0; + + if(i != j && + r1.x >= r2.x - distance && + r1.y >= r2.y - distance && + r1.x + r1.width <= r2.x + r2.width + distance && + r1.y + r1.height <= r2.y + r2.height + distance && + (r2.neighbors > Math.max(3, r1.neighbors) || r1.neighbors < 3)) { + flag = false; + break; + } + } + + if(flag) + result_seq.push(r1); + } + return result_seq; + } + }; + + })(); + + global.haar = haar; + +})(jsfeat); diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js old mode 100644 new mode 100755 index b6be6d9..256bbfb --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -8,67 +8,440 @@ var imgproc = (function() { + var _resample_u8 = function(src, dst, nw, nh) { + var xofs = [],xofs_count=0; + var ch=src.channel,w=src.cols,h=src.rows; + var src_d=src.data,dst_d=dst.data; + var scale_x = w / nw, scale_y = h / nh; + var inv_scale_256 = (scale_x * scale_y * 0x10000)|0; + var dx=0,dy=0,sx=0,sy=0,sx1=0,sx2=0,i=0,k=0,fsx1=0.0,fsx2=0.0; + var a=0,b=0,dxn=0,alpha=0,beta=0,beta1=0; + + var buf_node = jsfeat.cache.get_buffer((nw*ch)<<2); + var sum_node = jsfeat.cache.get_buffer((nw*ch)<<2); + + var buf = buf_node.i32; + var sum = sum_node.i32; + + for (; dx < nw; dx++) { + fsx1 = dx * scale_x, fsx2 = fsx1 + scale_x; + sx1 = (fsx1 + 1.0 - 1e-6)|0, sx2 = fsx2|0; + sx1 = Math.min(sx1, w - 1); + sx2 = Math.min(sx2, w - 1); + + if(sx1 > fsx1) { + xofs[xofs_count++] = {"si": ((sx1 - 1)*ch)|0, + "di": (dx * ch)|0, + "alpha": ((sx1 - fsx1) * 0x100)|0}; + } + for(sx = sx1; sx < sx2; sx++){ + xofs[xofs_count++] = {"si": (sx * ch)|0, + "di": (dx * ch)|0, + "alpha": 256}; + } + if(fsx2 - sx2 > 1e-3) { + xofs[xofs_count++] = {"si": (sx2 * ch)|0, + "di": (dx * ch)|0, + "alpha": ((fsx2 - sx2) * 256)|0}; + } + } + + for (dx = 0; dx < nw * ch; dx++) { + buf[dx] = sum[dx] = 0; + } + dy = 0; + for (sy = 0; sy < h; sy++) { + a = w * sy; + for (k = 0; k < xofs_count; k++) { + dxn = xofs[k].di; + alpha = xofs[k].alpha; + sx1 = xofs[k].si; + for (i = 0; i < ch; i++) { + buf[dxn + i] += src_d[a+sx1+i] * alpha; + } + } + if ((dy + 1) * scale_y <= sy + 1 || sy == h - 1) { + beta = (Math.max(sy + 1 - (dy + 1) * scale_y, 0.0) * 256)|0; + beta1 = 256 - beta; + b = nw * dy; + if (beta <= 0) { + for (dx = 0; dx < nw * ch; dx++) { + dst_d[b+dx] = Math.min(Math.max((sum[dx] + buf[dx] * 256) / inv_scale_256, 0), 255); + sum[dx] = buf[dx] = 0; + } + } else { + for (dx = 0; dx < nw * ch; dx++) { + dst_d[b+dx] = Math.min(Math.max((sum[dx] + buf[dx] * beta1) / inv_scale_256, 0), 255); + sum[dx] = buf[dx] * beta; + buf[dx] = 0; + } + } + dy++; + } else { + for(dx = 0; dx < nw * ch; dx++) { + sum[dx] += buf[dx] * 256; + buf[dx] = 0; + } + } + } + + jsfeat.cache.put_buffer(sum_node); + jsfeat.cache.put_buffer(buf_node); + } + + var _resample = function(src, dst, nw, nh) { + var xofs = [],xofs_count=0; + var ch=src.channel,w=src.cols,h=src.rows; + var src_d=src.data,dst_d=dst.data; + var scale_x = w / nw, scale_y = h / nh; + var scale = 1.0 / (scale_x * scale_y); + var dx=0,dy=0,sx=0,sy=0,sx1=0,sx2=0,i=0,k=0,fsx1=0.0,fsx2=0.0; + var a=0,b=0,dxn=0,alpha=0.0,beta=0.0,beta1=0.0; + + var buf_node = jsfeat.cache.get_buffer((nw*ch)<<2); + var sum_node = jsfeat.cache.get_buffer((nw*ch)<<2); + + var buf = buf_node.f32; + var sum = sum_node.f32; + + for (; dx < nw; dx++) { + fsx1 = dx * scale_x, fsx2 = fsx1 + scale_x; + sx1 = (fsx1 + 1.0 - 1e-6)|0, sx2 = fsx2|0; + sx1 = Math.min(sx1, w - 1); + sx2 = Math.min(sx2, w - 1); + + if(sx1 > fsx1) { + xofs[xofs_count++] = {"si": ((sx1 - 1)*ch)|0, + "di": (dx * ch)|0, + "alpha": (sx1 - fsx1) * scale}; + } + for(sx = sx1; sx < sx2; sx++){ + xofs[xofs_count++] = {"si": (sx * ch)|0, + "di": (dx * ch)|0, + "alpha": scale}; + } + if(fsx2 - sx2 > 1e-3) { + xofs[xofs_count++] = {"si": (sx2 * ch)|0, + "di": (dx * ch)|0, + "alpha": (fsx2 - sx2) * scale}; + } + } + + for (dx = 0; dx < nw * ch; dx++) { + buf[dx] = sum[dx] = 0; + } + dy = 0; + for (sy = 0; sy < h; sy++) { + a = w * sy; + for (k = 0; k < xofs_count; k++) { + dxn = xofs[k].di; + alpha = xofs[k].alpha; + sx1 = xofs[k].si; + for (i = 0; i < ch; i++) { + buf[dxn + i] += src_d[a+sx1+i] * alpha; + } + } + if ((dy + 1) * scale_y <= sy + 1 || sy == h - 1) { + beta = Math.max(sy + 1 - (dy + 1) * scale_y, 0.0); + beta1 = 1.0 - beta; + b = nw * dy; + if (Math.abs(beta) < 1e-3) { + for (dx = 0; dx < nw * ch; dx++) { + dst_d[b+dx] = sum[dx] + buf[dx]; + sum[dx] = buf[dx] = 0; + } + } else { + for (dx = 0; dx < nw * ch; dx++) { + dst_d[b+dx] = sum[dx] + buf[dx] * beta1; + sum[dx] = buf[dx] * beta; + buf[dx] = 0; + } + } + dy++; + } else { + for(dx = 0; dx < nw * ch; dx++) { + sum[dx] += buf[dx]; + buf[dx] = 0; + } + } + } + jsfeat.cache.put_buffer(sum_node); + jsfeat.cache.put_buffer(buf_node); + } + + var _convol_u8 = function(buf, src_d, dst_d, w, h, filter, kernel_size, half_kernel) { + var i=0,j=0,k=0,sp=0,dp=0,sum=0,sum1=0,sum2=0,sum3=0,f0=filter[0],fk=0; + var w2=w<<1,w3=w*3,w4=w<<2; + // hor pass + for (; i < h; ++i) { + sum = src_d[sp]; + for (j = 0; j < half_kernel; ++j) { + buf[j] = sum; + } + for (j = 0; j <= w-2; j+=2) { + buf[j + half_kernel] = src_d[sp+j]; + buf[j + half_kernel+1] = src_d[sp+j+1]; + } + for (; j < w; ++j) { + buf[j + half_kernel] = src_d[sp+j]; + } + sum = src_d[sp+w-1]; + for (j = w; j < half_kernel + w; ++j) { + buf[j + half_kernel] = sum; + } + for (j = 0; j <= w-4; j+=4) { + sum = buf[j] * f0, + sum1 = buf[j+1] * f0, + sum2 = buf[j+2] * f0, + sum3 = buf[j+3] * f0; + for (k = 1; k < kernel_size; ++k) { + fk = filter[k]; + sum += buf[k + j] * fk; + sum1 += buf[k + j+1] * fk; + sum2 += buf[k + j+2] * fk; + sum3 += buf[k + j+3] * fk; + } + dst_d[dp+j] = sum >> 8; + dst_d[dp+j+1] = sum1 >> 8; + dst_d[dp+j+2] = sum2 >> 8; + dst_d[dp+j+3] = sum3 >> 8; + } + for (; j < w; ++j) { + sum = buf[j] * f0; + for (k = 1; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + } + dst_d[dp+j] = sum >> 8; + } + sp += w; + dp += w; + } + + // vert pass + for (i = 0; i < w; ++i) { + sum = dst_d[i]; + for (j = 0; j < half_kernel; ++j) { + buf[j] = sum; + } + k = i; + for (j = 0; j <= h-2; j+=2, k+=w2) { + buf[j+half_kernel] = dst_d[k]; + buf[j+half_kernel+1] = dst_d[k+w]; + } + for (; j < h; ++j, k+=w) { + buf[j+half_kernel] = dst_d[k]; + } + sum = dst_d[(h-1)*w + i]; + for (j = h; j < half_kernel + h; ++j) { + buf[j + half_kernel] = sum; + } + dp = i; + for (j = 0; j <= h-4; j+=4, dp+=w4) { + sum = buf[j] * f0, + sum1 = buf[j+1] * f0, + sum2 = buf[j+2] * f0, + sum3 = buf[j+3] * f0; + for (k = 1; k < kernel_size; ++k) { + fk = filter[k]; + sum += buf[k + j] * fk; + sum1 += buf[k + j+1] * fk; + sum2 += buf[k + j+2] * fk; + sum3 += buf[k + j+3] * fk; + } + dst_d[dp] = sum >> 8; + dst_d[dp+w] = sum1 >> 8; + dst_d[dp+w2] = sum2 >> 8; + dst_d[dp+w3] = sum3 >> 8; + } + for (; j < h; ++j, dp+=w) { + sum = buf[j] * f0; + for (k = 1; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + } + dst_d[dp] = sum >> 8; + } + } + } + + var _convol = function(buf, src_d, dst_d, w, h, filter, kernel_size, half_kernel) { + var i=0,j=0,k=0,sp=0,dp=0,sum=0.0,sum1=0.0,sum2=0.0,sum3=0.0,f0=filter[0],fk=0.0; + var w2=w<<1,w3=w*3,w4=w<<2; + // hor pass + for (; i < h; ++i) { + sum = src_d[sp]; + for (j = 0; j < half_kernel; ++j) { + buf[j] = sum; + } + for (j = 0; j <= w-2; j+=2) { + buf[j + half_kernel] = src_d[sp+j]; + buf[j + half_kernel+1] = src_d[sp+j+1]; + } + for (; j < w; ++j) { + buf[j + half_kernel] = src_d[sp+j]; + } + sum = src_d[sp+w-1]; + for (j = w; j < half_kernel + w; ++j) { + buf[j + half_kernel] = sum; + } + for (j = 0; j <= w-4; j+=4) { + sum = buf[j] * f0, + sum1 = buf[j+1] * f0, + sum2 = buf[j+2] * f0, + sum3 = buf[j+3] * f0; + for (k = 1; k < kernel_size; ++k) { + fk = filter[k]; + sum += buf[k + j] * fk; + sum1 += buf[k + j+1] * fk; + sum2 += buf[k + j+2] * fk; + sum3 += buf[k + j+3] * fk; + } + dst_d[dp+j] = sum; + dst_d[dp+j+1] = sum1; + dst_d[dp+j+2] = sum2; + dst_d[dp+j+3] = sum3; + } + for (; j < w; ++j) { + sum = buf[j] * f0; + for (k = 1; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + } + dst_d[dp+j] = sum; + } + sp += w; + dp += w; + } + + // vert pass + for (i = 0; i < w; ++i) { + sum = dst_d[i]; + for (j = 0; j < half_kernel; ++j) { + buf[j] = sum; + } + k = i; + for (j = 0; j <= h-2; j+=2, k+=w2) { + buf[j+half_kernel] = dst_d[k]; + buf[j+half_kernel+1] = dst_d[k+w]; + } + for (; j < h; ++j, k+=w) { + buf[j+half_kernel] = dst_d[k]; + } + sum = dst_d[(h-1)*w + i]; + for (j = h; j < half_kernel + h; ++j) { + buf[j + half_kernel] = sum; + } + dp = i; + for (j = 0; j <= h-4; j+=4, dp+=w4) { + sum = buf[j] * f0, + sum1 = buf[j+1] * f0, + sum2 = buf[j+2] * f0, + sum3 = buf[j+3] * f0; + for (k = 1; k < kernel_size; ++k) { + fk = filter[k]; + sum += buf[k + j] * fk; + sum1 += buf[k + j+1] * fk; + sum2 += buf[k + j+2] * fk; + sum3 += buf[k + j+3] * fk; + } + dst_d[dp] = sum; + dst_d[dp+w] = sum1; + dst_d[dp+w2] = sum2; + dst_d[dp+w3] = sum3; + } + for (; j < h; ++j, dp+=w) { + sum = buf[j] * f0; + for (k = 1; k < kernel_size; ++k) { + sum += buf[k + j] * filter[k]; + } + dst_d[dp] = sum; + } + } + } + return { // TODO: add support for RGB/BGR order + // for raw arrays grayscale: function(src, dst) { var srcLength = src.length|0, srcLength_16 = (srcLength - 16)|0; var j = 0; - for (var i = 0; i <= srcLength_16; i += 16, j += 4) { - dst[j] = ((src[i] * 77) + (src[i + 1] * 151) + (src[i + 2] * 28)) >> 8; - dst[j + 1] = ((src[i + 4] * 77) + (src[i + 5] * 151) + (src[i + 6] * 28)) >> 8; + var coeff_r = 4899, coeff_g = 9617, coeff_b = 1868; - dst[j + 2] = ((src[i + 8] * 77) + (src[i + 9] * 151) + (src[i + 10] * 28)) >> 8; - dst[j + 3] = ((src[i + 12] * 77) + (src[i + 13] * 151) + (src[i + 14] * 28)) >> 8; + for (var i = 0; i <= srcLength_16; i += 16, j += 4) { + dst[j] = (src[i] * coeff_r + src[i+1] * coeff_g + src[i+2] * coeff_b + 8192) >> 14; + dst[j + 1] = (src[i+4] * coeff_r + src[i+5] * coeff_g + src[i+6] * coeff_b + 8192) >> 14; + dst[j + 2] = (src[i+8] * coeff_r + src[i+9] * coeff_g + src[i+10] * coeff_b + 8192) >> 14; + dst[j + 3] = (src[i+12] * coeff_r + src[i+13] * coeff_g + src[i+14] * coeff_b + 8192) >> 14; } for (; i < srcLength; i += 4, ++j) { - dst[j] = ((src[i] * 77) + (src[i + 1] * 151) + (src[i + 2] * 28)) >> 8; + dst[j] = (src[i] * coeff_r + src[i+1] * coeff_g + src[i+2] * coeff_b + 8192) >> 14; + } + }, + // derived from CCV library + resample: function(src, dst, nw, nh) { + var h=src.rows,w=src.cols; + if (h > nh && w > nw) { + // using the fast alternative (fix point scale, 0x100 to avoid overflow) + if (src.type&jsfeat.U8_t && dst.type&jsfeat.U8_t && h * w / (nh * nw) < 0x100) { + _resample_u8(src, dst, nw, nh); + } else { + _resample(src, dst, nw, nh); + } } }, - box_blur: function(src, dst, w, h, hwin) { + box_blur: function(src, dst, hwin, scale) { + if (typeof scale === "undefined") { scale = 1; } var win = (2*hwin+1)|0; - var _buf = new Int32Array(w*win+w); + var w = src.cols, h = src.rows; + var data_type = src.type; + var _buf,buf_sz=(w*win+w)|0,src_d=src.data,dst_d=dst.data; var sums = (w*win)|0; var next_row=0,oldest_row=0; - var i=0, j=0, s0=0, s1=0; - var hsum = 0, back=0; - + var i=0, j=0, s0, s1; + var hsum,back; var input = 0, output = (w*hwin - hwin) | 0; + // select correct data type + var buf_node = jsfeat.cache.get_buffer(buf_sz<<2); + if((data_type&jsfeat.U8_t) || (data_type&jsfeat.S32_t)) { + _buf = buf_node.i32; + } else { + _buf = buf_node.f32; + } + for(; i < w; ++i){ _buf[sums+i] = 0; } for (i=0; i= win-1) { for(j = win-1; j <= w-2; j+=2) { s0 = _buf[sums+j]; s1 = _buf[sums+j+1]; - dst[output+j] = s0; dst[output+j+1] = s1; + dst_d[output+j] = s0*scale; dst_d[output+j+1] = s1*scale; _buf[sums+j] = s0 - _buf[oldest_row+j]; _buf[sums+j+1] = s1 - _buf[oldest_row+j+1]; } for(; j < w; ++j) { s0 = _buf[sums+j]; - dst[output+j] = s0; + dst_d[output+j] = s0*scale; _buf[sums+j] = s0 - _buf[oldest_row+j]; } output += w; @@ -79,120 +452,86 @@ next_row += w; next_row = (next_row < sums) * next_row; } + + jsfeat.cache.put_buffer(buf_node); }, - gaussian_blur_u8: function(src, dst, w, h, kernel_size, sigma) { + gaussian_blur: function(src, dst, kernel_size, sigma) { if (typeof sigma === "undefined") { sigma = 0.0; } if (typeof kernel_size === "undefined") { kernel_size = 0; } - kernel_size = kernel_size == 0 ? (Math.max(1, (4.0 * sigma + 1.0 - 1e-8)|0) * 2 + 1)|0 : kernel_size; + kernel_size = kernel_size == 0 ? (Math.max(1, (4.0 * sigma + 1.0 - 1e-8)) * 2 + 1)|0 : kernel_size; var half_kernel = kernel_size >> 1; - var i=0,j=0,k=0,sum=0,sum1=0,sp=0,dp=0,w2=w<<1; - var buf = new Uint8Array(kernel_size + Math.max(h, w)); - // we use int based kernel - var filter = new Int32Array(kernel_size); + var w = src.cols, h = src.rows; + var data_type = src.type, is_u8 = data_type&jsfeat.U8_t; + var src_d = src.data, dst_d = dst.data; + var buf,filter,buf_sz=(kernel_size + Math.max(h, w))|0; - jsfeat.math.get_gaussian_kernel(kernel_size, sigma, filter, jsfeat.U8_t); + var buf_node = jsfeat.cache.get_buffer(buf_sz<<2); + var filt_node = jsfeat.cache.get_buffer(kernel_size<<2); - // hor pass - for (; i < h; ++i) { - sum = src[sp]; - for (j = 0; j < half_kernel; ++j) { - buf[j] = sum; - } - for (j = 0; j <= w-2; j+=2) { - buf[j + half_kernel] = src[sp+j]; - buf[j + half_kernel+1] = src[sp+j+1]; - } - for (; j < w; ++j) { - buf[j + half_kernel] = src[sp+j]; - } - sum = src[sp+w-1]; - for (j = w; j < half_kernel + w; ++j) { - buf[j + half_kernel] = sum; - } - for (j = 0; j <= w-2; j+=2) { - sum = 0, sum1 = 0; - for (k = 0; k < kernel_size; ++k) { - sum += buf[k + j] * filter[k]; - sum1 += buf[k + j+1] * filter[k]; - } - dst[dp+j] = sum >> 8; - dst[dp+j+1] = sum1 >> 8; - } - for (; j < w; ++j) { - sum = 0; - for (k = 0; k < kernel_size; ++k) { - sum += buf[k + j] * filter[k]; - } - dst[dp+j] = sum >> 8; - } - sp += w; - dp += w; + if(is_u8) { + buf = buf_node.u8; + filter = filt_node.i32; + } else if(data_type&jsfeat.S32_t) { + buf = buf_node.i32; + filter = filt_node.f32; + } else { + buf = buf_node.f32; + filter = filt_node.f32; } - // vert pass - for (i = 0; i < w; ++i) { - sum = dst[i]; - for (j = 0; j < half_kernel; ++j) { - buf[j] = sum; - } - k = i; - for (j = 0; j <= h-2; j+=2, k+=w2) { - buf[j+half_kernel] = dst[k]; - buf[j+half_kernel+1] = dst[k+w]; - } - for (; j < h; ++j, k+=w) { - buf[j+half_kernel] = dst[k]; - } - sum = dst[(h-1)*w + i]; - for (j = h; j < half_kernel + h; ++j) { - buf[j + half_kernel] = sum; - } - dp = i; - for (j = 0; j <= h-2; j+=2, dp+=w2) { - sum = 0, sum1=0; - for (k = 0; k < kernel_size; ++k) { - sum += buf[k + j] * filter[k]; - sum1 += buf[k + j+1] * filter[k]; - } - dst[dp] = sum >> 8; - dst[dp+w] = sum1 >> 8; - } - for (; j < h; ++j, dp+=w) { - sum = 0; - for (k = 0; k < kernel_size; ++k) { - sum += buf[k + j] * filter[k]; - } - dst[dp] = sum >> 8; - } + jsfeat.math.get_gaussian_kernel(kernel_size, sigma, filter, data_type); + + if(is_u8) { + _convol_u8(buf, src_d, dst_d, w, h, filter, kernel_size, half_kernel); + } else { + _convol(buf, src_d, dst_d, w, h, filter, kernel_size, half_kernel); } - }, - pyrdown_fast_u8: function(src, w, h, dst) { + jsfeat.cache.put_buffer(buf_node); + jsfeat.cache.put_buffer(filt_node); + }, + // assume we always need it for u8 image + pyrdown: function(src, dst) { + var w = src.cols, h = src.rows; var w2 = w >> 1, h2 = h >> 1; var x=0,y=0,sptr=0,sline=0,dptr=0; + var src_d = src.data, dst_d = dst.data; for(y = 0; y < h2; ++y) { sline = sptr; for(x = 0; x <= w2-2; x+=2, dptr+=2, sline += 4) { - dst[dptr] = (src[sline] + src[sline+1] + - src[sline+w] + src[sline+w+1] + 2) >> 2; - dst[dptr+1] = (src[sline+2] + src[sline+3] + - src[sline+w+2] + src[sline+w+3] + 2) >> 2; + dst_d[dptr] = (src_d[sline] + src_d[sline+1] + + src_d[sline+w] + src_d[sline+w+1] + 2) >> 2; + dst_d[dptr+1] = (src_d[sline+2] + src_d[sline+3] + + src_d[sline+w+2] + src_d[sline+w+3] + 2) >> 2; } for(; x < w2; ++x, ++dptr, sline += 2) { - dst[dptr] = (src[sline] + src[sline+1] + - src[sline+w] + src[sline+w+1] + 2) >> 2; + dst_d[dptr] = (src_d[sline] + src_d[sline+1] + + src_d[sline+w] + src_d[sline+w+1] + 2) >> 2; } sptr += w << 1; } }, - shar_derivatives: function(img, dst, w, h) { - var dstep = w<<1,x=0,y=0,x1=0; + // dst: [gx,gy,...] + scharr_derivatives: function(src, dst) { + var w = src.cols, h = src.rows; + var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; var srow0=0,srow1=0,srow2=0,drow=0; - var trow0 = new Int32Array(w+2); - var trow1 = new Int32Array(w+2); + var trow0,trow1; + var img = src.data; + + var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); + var buf1_node = jsfeat.cache.get_buffer((w+2)<<2); + + if(src.type&jsfeat.U8_t || src.type&jsfeat.S32_t) { + trow0 = buf0_node.i32; + trow1 = buf1_node.i32; + } else { + trow0 = buf0_node.f32; + trow1 = buf1_node.f32; + } for(; y < h; ++y, srow1+=w) { srow0 = ((y > 0 ? y-1 : 1)*w)|0; @@ -200,32 +539,461 @@ drow = (y*dstep)|0; // do vertical convolution for(x = 0, x1 = 1; x <= w-2; x+=2, x1+=2) { - trow0[x1] = ( ((img[srow0+x]) + (img[srow2+x]))*3 + (img[srow1+x])*10 ); - trow1[x1] = ( (img[srow2+x]) - (img[srow0+x]) ); + a = img[srow0+x], b = img[srow2+x]; + trow0[x1] = ( (a + b)*3 + (img[srow1+x])*10 ); + trow1[x1] = ( b - a ); // - trow0[x1+1] = ( ((img[srow0+x+1]) + (img[srow2+x+1]))*3 + (img[srow1+x+1])*10 ); - trow1[x1+1] = ( (img[srow2+x+1]) - (img[srow0+x+1]) ); + a = img[srow0+x+1], b = img[srow2+x+1]; + trow0[x1+1] = ( (a + b)*3 + (img[srow1+x+1])*10 ); + trow1[x1+1] = ( b - a ); } for(; x < w; ++x, ++x1) { - trow0[x1] = ( ((img[srow0+x]) + (img[srow2+x]))*3 + (img[srow1+x])*10 ); - trow1[x1] = ( (img[srow2+x]) - (img[srow0+x]) ); + a = img[srow0+x], b = img[srow2+x]; + trow0[x1] = ( (a + b)*3 + (img[srow1+x])*10 ); + trow1[x1] = ( b - a ); } // make border x = (w + 1)|0; trow0[0] = trow0[1]; trow0[x] = trow0[w]; trow1[0] = trow1[1]; trow1[x] = trow1[w]; // do horizontal convolution, interleave the results and store them - for(x = 0; x <= w-2; x+=2) { - dst[drow++] = ( (trow0[x+2] - trow0[x]) ); - dst[drow++] = ( ((trow1[x+2] + trow1[x])*3 + trow1[x+1]*10) ); - dst[drow++] = ( (trow0[x+3] - trow0[x+1]) ); - dst[drow++] = ( ((trow1[x+3] + trow1[x+1])*3 + trow1[x+2]*10) ); + for(x = 0; x <= w-4; x+=4) { + a = trow1[x+2], b = trow1[x+1], c = trow1[x+3], d = trow1[x+4], + e = trow0[x+2], f = trow0[x+3]; + dst[drow++] = ( e - trow0[x] ); + dst[drow++] = ( (a + trow1[x])*3 + b*10 ); + dst[drow++] = ( f - trow0[x+1] ); + dst[drow++] = ( (c + b)*3 + a*10 ); + + dst[drow++] = ( (trow0[x+4] - e) ); + dst[drow++] = ( ((d + a)*3 + c*10) ); + dst[drow++] = ( (trow0[x+5] - f) ); + dst[drow++] = ( ((trow1[x+5] + c)*3 + d*10) ); } for(; x < w; ++x) { dst[drow++] = ( (trow0[x+2] - trow0[x]) ); dst[drow++] = ( ((trow1[x+2] + trow1[x])*3 + trow1[x+1]*10) ); } } + jsfeat.cache.put_buffer(buf0_node); + jsfeat.cache.put_buffer(buf1_node); + }, + + // compute gradient using Sobel kernel [1 2 1] * [-1 0 1]^T + // dst: [gx,gy,...] + sobel_derivatives: function(src, dst) { + var w = src.cols, h = src.rows; + var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; + var srow0=0,srow1=0,srow2=0,drow=0; + var trow0,trow1; + var img = src.data; + + var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); + var buf1_node = jsfeat.cache.get_buffer((w+2)<<2); + + if(src.type&jsfeat.U8_t || src.type&jsfeat.S32_t) { + trow0 = buf0_node.i32; + trow1 = buf1_node.i32; + } else { + trow0 = buf0_node.f32; + trow1 = buf1_node.f32; + } + + for(; y < h; ++y, srow1+=w) { + srow0 = ((y > 0 ? y-1 : 1)*w)|0; + srow2 = ((y < h-1 ? y+1 : h-2)*w)|0; + drow = (y*dstep)|0; + // do vertical convolution + for(x = 0, x1 = 1; x <= w-2; x+=2, x1+=2) { + a = img[srow0+x], b = img[srow2+x]; + trow0[x1] = ( (a + b) + (img[srow1+x]*2) ); + trow1[x1] = ( b - a ); + // + a = img[srow0+x+1], b = img[srow2+x+1]; + trow0[x1+1] = ( (a + b) + (img[srow1+x+1]*2) ); + trow1[x1+1] = ( b - a ); + } + for(; x < w; ++x, ++x1) { + a = img[srow0+x], b = img[srow2+x]; + trow0[x1] = ( (a + b) + (img[srow1+x]*2) ); + trow1[x1] = ( b - a ); + } + // make border + x = (w + 1)|0; + trow0[0] = trow0[1]; trow0[x] = trow0[w]; + trow1[0] = trow1[1]; trow1[x] = trow1[w]; + // do horizontal convolution, interleave the results and store them + for(x = 0; x <= w-4; x+=4) { + a = trow1[x+2], b = trow1[x+1], c = trow1[x+3], d = trow1[x+4], + e = trow0[x+2], f = trow0[x+3]; + dst[drow++] = ( e - trow0[x] ); + dst[drow++] = ( a + trow1[x] + b*2 ); + dst[drow++] = ( f - trow0[x+1] ); + dst[drow++] = ( c + b + a*2 ); + + dst[drow++] = ( trow0[x+4] - e ); + dst[drow++] = ( d + a + c*2 ); + dst[drow++] = ( trow0[x+5] - f ); + dst[drow++] = ( trow1[x+5] + c + d*2 ); + } + for(; x < w; ++x) { + dst[drow++] = ( trow0[x+2] - trow0[x] ); + dst[drow++] = ( trow1[x+2] + trow1[x] + trow1[x+1]*2 ); + } + } + jsfeat.cache.put_buffer(buf0_node); + jsfeat.cache.put_buffer(buf1_node); + }, + + // please note: + // dst_(type) size should be cols = src.cols+1, rows = src.rows+1 + compute_integral_image: function(src, dst_sum, dst_sqsum, dst_tilted) { + var w0=src.cols,h0=src.rows,src_d=src.data; + var w1=w0+1; + var s,s2,p,pup,i=0,j=0,v,k; + + if(dst_sum && dst_sqsum) { + // fill first row with zeros + for(; i < w1; ++i) { + dst_sum[i] = 0, dst_sqsum[i] = 0; + } + p = (w1+1)|0, pup = 1; + for(i = 0, k = 0; i < h0; ++i, ++p, ++pup) { + s = s2 = 0; + for(j = 0; j <= w0-2; j+=2, k+=2, p+=2, pup+=2) { + v = src_d[k]; + s += v, s2 += v*v; + dst_sum[p] = dst_sum[pup] + s; + dst_sqsum[p] = dst_sqsum[pup] + s2; + + v = src_d[k+1]; + s += v, s2 += v*v; + dst_sum[p+1] = dst_sum[pup+1] + s; + dst_sqsum[p+1] = dst_sqsum[pup+1] + s2; + } + for(; j < w0; ++j, ++k, ++p, ++pup) { + v = src_d[k]; + s += v, s2 += v*v; + dst_sum[p] = dst_sum[pup] + s; + dst_sqsum[p] = dst_sqsum[pup] + s2; + } + } + } else if(dst_sum) { + // fill first row with zeros + for(; i < w1; ++i) { + dst_sum[i] = 0; + } + p = (w1+1)|0, pup = 1; + for(i = 0, k = 0; i < h0; ++i, ++p, ++pup) { + s = 0; + for(j = 0; j <= w0-2; j+=2, k+=2, p+=2, pup+=2) { + s += src_d[k]; + dst_sum[p] = dst_sum[pup] + s; + s += src_d[k+1]; + dst_sum[p+1] = dst_sum[pup+1] + s; + } + for(; j < w0; ++j, ++k, ++p, ++pup) { + s += src_d[k]; + dst_sum[p] = dst_sum[pup] + s; + } + } + } else if(dst_sqsum) { + // fill first row with zeros + for(; i < w1; ++i) { + dst_sqsum[i] = 0; + } + p = (w1+1)|0, pup = 1; + for(i = 0, k = 0; i < h0; ++i, ++p, ++pup) { + s2 = 0; + for(j = 0; j <= w0-2; j+=2, k+=2, p+=2, pup+=2) { + v = src_d[k]; + s2 += v*v; + dst_sqsum[p] = dst_sqsum[pup] + s2; + v = src_d[k+1]; + s2 += v*v; + dst_sqsum[p+1] = dst_sqsum[pup+1] + s2; + } + for(; j < w0; ++j, ++k, ++p, ++pup) { + v = src_d[k]; + s2 += v*v; + dst_sqsum[p] = dst_sqsum[pup] + s2; + } + } + } + + if(dst_tilted) { + // fill first row with zeros + for(i = 0; i < w1; ++i) { + dst_tilted[i] = 0; + } + // diagonal + p = (w1+1)|0, pup = 0; + for(i = 0, k = 0; i < h0; ++i, ++p, ++pup) { + for(j = 0; j <= w0-2; j+=2, k+=2, p+=2, pup+=2) { + dst_tilted[p] = src_d[k] + dst_tilted[pup]; + dst_tilted[p+1] = src_d[k+1] + dst_tilted[pup+1]; + } + for(; j < w0; ++j, ++k, ++p, ++pup) { + dst_tilted[p] = src_d[k] + dst_tilted[pup]; + } + } + // diagonal + p = (w1+w0)|0, pup = w0; + for(i = 0; i < h0; ++i, p+=w1, pup+=w1) { + dst_tilted[p] += dst_tilted[pup]; + } + + for(j = w0-1; j > 0; --j) { + p = j+h0*w1, pup=p-w1; + for(i = h0; i > 0; --i, p-=w1, pup-=w1) { + dst_tilted[p] += dst_tilted[pup] + dst_tilted[pup+1]; + } + } + } + }, + equalize_histogram: function(src, dst) { + var w=src.cols,h=src.rows,src_d=src.data,dst_d=dst.data,size=w*h; + var i=0,prev=0,hist0,norm; + + var hist0_node = jsfeat.cache.get_buffer(256<<2); + hist0 = hist0_node.i32; + for(; i < 256; ++i) hist0[i] = 0; + for (i = 0; i < size; ++i) { + ++hist0[src_d[i]]; + } + + prev = hist0[0]; + for (i = 1; i < 256; ++i) { + prev = hist0[i] += prev; + } + + norm = 255 / size; + for (i = 0; i < size; ++i) { + dst_d[i] = (hist0[src_d[i]] * norm + 0.5)|0; + } + jsfeat.cache.put_buffer(hist0_node); + }, + + canny: function(src, dst, low_thresh, high_thresh) { + var w=src.cols,h=src.rows,src_d=src.data,dst_d=dst.data; + var i=0,j=0,grad=0,w2=w<<1,_grad=0,suppress=0,f=0,x=0,y=0,s=0; + var tg22x=0,tg67x=0; + + // cache buffers + var dxdy_node = jsfeat.cache.get_buffer((h * w2)<<2); + var buf_node = jsfeat.cache.get_buffer((3 * (w + 2))<<2); + var map_node = jsfeat.cache.get_buffer(((h+2) * (w + 2))<<2); + var stack_node = jsfeat.cache.get_buffer((h * w)<<2); + + + var buf = buf_node.i32; + var map = map_node.i32; + var stack = stack_node.i32; + var dxdy = dxdy_node.i32; + var row0=1,row1=(w+2+1)|0,row2=(2*(w+2)+1)|0,map_w=(w+2)|0,map_i=(map_w+1)|0,stack_i=0; + + this.sobel_derivatives(src, dxdy); + + if(low_thresh > high_thresh) { + i = low_thresh; + low_thresh = high_thresh; + high_thresh = i; + } + + i = (3 * (w + 2))|0; + while(--i>=0) { + buf[i] = 0; + } + + i = ((h+2) * (w + 2))|0; + while(--i>=0) { + map[i] = 0; + } + + for (; j < w; ++j, grad+=2) { + //buf[row1+j] = Math.abs(dxdy[grad]) + Math.abs(dxdy[grad+1]); + x = dxdy[grad], y = dxdy[grad+1]; + //buf[row1+j] = x*x + y*y; + buf[row1+j] = ((x ^ (x >> 31)) - (x >> 31)) + ((y ^ (y >> 31)) - (y >> 31)); + } + + for(i=1; i <= h; ++i, grad+=w2) { + if(i == h) { + j = row2+w; + while(--j>=row2) { + buf[j] = 0; + } + } else { + for (j = 0; j < w; j++) { + //buf[row2+j] = Math.abs(dxdy[grad+(j<<1)]) + Math.abs(dxdy[grad+(j<<1)+1]); + x = dxdy[grad+(j<<1)], y = dxdy[grad+(j<<1)+1]; + //buf[row2+j] = x*x + y*y; + buf[row2+j] = ((x ^ (x >> 31)) - (x >> 31)) + ((y ^ (y >> 31)) - (y >> 31)); + } + } + _grad = (grad - w2)|0; + map[map_i-1] = 0; + suppress = 0; + for(j = 0; j < w; ++j, _grad+=2) { + f = buf[row1+j]; + if (f > low_thresh) { + x = dxdy[_grad]; + y = dxdy[_grad+1]; + s = x ^ y; + // seems ot be faster than Math.abs + x = ((x ^ (x >> 31)) - (x >> 31))|0; + y = ((y ^ (y >> 31)) - (y >> 31))|0; + //x * tan(22.5) x * tan(67.5) == 2 * x + x * tan(22.5) + tg22x = x * 13573; + tg67x = tg22x + ((x + x) << 15); + y <<= 15; + if (y < tg22x) { + if (f > buf[row1+j-1] && f >= buf[row1+j+1]) { + if (f > high_thresh && !suppress && map[map_i+j-map_w] != 2) { + map[map_i+j] = 2; + suppress = 1; + stack[stack_i++] = map_i + j; + } else { + map[map_i+j] = 1; + } + continue; + } + } else if (y > tg67x) { + if (f > buf[row0+j] && f >= buf[row2+j]) { + if (f > high_thresh && !suppress && map[map_i+j-map_w] != 2) { + map[map_i+j] = 2; + suppress = 1; + stack[stack_i++] = map_i + j; + } else { + map[map_i+j] = 1; + } + continue; + } + } else { + s = s < 0 ? -1 : 1; + if (f > buf[row0+j-s] && f > buf[row2+j+s]) { + if (f > high_thresh && !suppress && map[map_i+j-map_w] != 2) { + map[map_i+j] = 2; + suppress = 1; + stack[stack_i++] = map_i + j; + } else { + map[map_i+j] = 1; + } + continue; + } + } + } + map[map_i+j] = 0; + suppress = 0; + } + map[map_i+w] = 0; + map_i += map_w; + j = row0; + row0 = row1; + row1 = row2; + row2 = j; + } + + j = map_i - map_w - 1; + for(i = 0; i < map_w; ++i, ++j) { + map[j] = 0; + } + // path following + while(stack_i > 0) { + map_i = stack[--stack_i]; + map_i -= map_w+1; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + map_i += 1; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + map_i += 1; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + map_i += map_w; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + map_i -= 2; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + map_i += map_w; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + map_i += 1; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + map_i += 1; + if(map[map_i] == 1) map[map_i] = 2, stack[stack_i++] = map_i; + } + + map_i = map_w + 1; + row0 = 0; + for(i = 0; i < h; ++i, map_i+=map_w) { + for(j = 0; j < w; ++j) { + dst_d[row0++] = (map[map_i+j] == 2) * 0xff; + } + } + + // free buffers + jsfeat.cache.put_buffer(dxdy_node); + jsfeat.cache.put_buffer(buf_node); + jsfeat.cache.put_buffer(map_node); + jsfeat.cache.put_buffer(stack_node); + }, + + warp_perspective: function(src, dst, transform, fill_value) { + if (typeof fill_value === "undefined") { fill_value = 0; } + var src_width=src.cols, src_height=src.rows, dst_width=dst.cols, dst_height=dst.rows; + var src_d=src.data, dst_d=dst.data; + var x=0,y=0,off=0,ixs=0,iys=0,xs=0.0,ys=0.0,xs0=0.0,ys0=0.0,ws=0.0,sc=0.0,a=0.0,b=0.0,p0=0.0,p1=0.0; + var m00=transform[0],m01=transform[1],m02=transform[2], + m10=transform[3],m11=transform[4],m12=transform[5], + m20=transform[6],m21=transform[7],m22=transform[8]; + + for(var dptr = 0; y < dst_height; ++y) { + xs0 = m01 * y + m02, + ys0 = m11 * y + m12, + ws = m21 * y + m22; + for(x = 0; x < dst_width; ++x, ++dptr, xs0+=m00, ys0+=m10, ws+=m20) { + sc = 1.0 / ws; + xs = xs0 * sc, ys = ys0 * sc; + ixs = xs | 0, iys = ys | 0; + + if(xs > 0 && ys > 0 && ixs < (src_width - 1) && iys < (src_height - 1)) { + a = Math.max(xs - ixs, 0.0); + b = Math.max(ys - iys, 0.0); + off = src_width*iys + ixs; + + p0 = src_d[off] + a * (src_d[off+1] - src_d[off]); + p1 = src_d[off+src_width] + a * (src_d[off+src_width+1] - src_d[off+src_width]); + + dst_d[dptr] = p0 + b * (p1 - p0); + } + else dst_d[dptr] = fill_value; + } + } + }, + + warp_affine: function(src, dst, transform, fill_value) { + if (typeof fill_value === "undefined") { fill_value = 0; } + var src_width=src.cols, src_height=src.rows, dst_width=dst.cols, dst_height=dst.rows; + var src_d=src.data, dst_d=dst.data; + var x=0,y=0,off=0,ixs=0,iys=0,xs=0.0,ys=0.0,a=0.0,b=0.0,p0=0.0,p1=0.0; + var m00=transform[0],m01=transform[1],m02=transform[2], + m10=transform[3],m11=transform[4],m12=transform[5]; + + for(var dptr = 0; y < dst_height; ++y) { + xs = m01 * y + m02; + ys = m11 * y + m12; + for(x = 0; x < dst_width; ++x, ++dptr, xs+=m00, ys+=m10) { + ixs = xs | 0; iys = ys | 0; + + if(xs > 0 && ys > 0 && ixs < (src_width - 1) && iys < (src_height - 1)) { + a = Math.max(xs - ixs, 0.0); + b = Math.max(ys - iys, 0.0); + off = src_width*iys + ixs; + + p0 = src_d[off] + a * (src_d[off+1] - src_d[off]); + p1 = src_d[off+src_width] + a * (src_d[off+src_width+1] - src_d[off+src_width]); + + dst_d[dptr] = p0 + b * (p1 - p0); + } + else dst_d[dptr] = fill_value; + } + } } }; })(); diff --git a/src/jsfeat_math.js b/src/jsfeat_math.js old mode 100644 new mode 100755 index 80b526b..aad272a --- a/src/jsfeat_math.js +++ b/src/jsfeat_math.js @@ -8,11 +8,14 @@ var math = (function() { + var qsort_stack = new Int32Array(48*2); + return { get_gaussian_kernel: function(size, sigma, kernel, data_type) { var i=0,x=0.0,t=0.0,sigma_x=0.0,scale_2x=0.0; var sum = 0.0; - var _kernel = new Float32Array(size); + var kern_node = jsfeat.cache.get_buffer(size<<2); + var _kernel = kern_node.f32;//new Float32Array(size); if((size&1) == 1 && size <= 7 && sigma <= 0) { switch(size>>1) { @@ -62,6 +65,8 @@ kernel[i] = _kernel[i] * sum; } } + + jsfeat.cache.put_buffer(kern_node); }, // The current implementation was derived from *BSD system qsort(): @@ -69,11 +74,11 @@ // The Regents of the University of California. All rights reserved. qsort: function(array, low, high, cmp) { var isort_thresh = 7; - var t; + var t,ta,tb,tc; var sp = 0,left=0,right=0,i=0,n=0,m=0,ptr=0,ptr2=0,d=0; var left0=0,left1=0,right0=0,right1=0,pivot=0,a=0,b=0,c=0,swap_cnt=0; - var stack = new Int32Array(48*2); + var stack = qsort_stack; if( (high-low+1) <= 1 ) return; @@ -108,22 +113,26 @@ if( n > 40 ) { d = n >> 3; - a = left, b = left + d, c = left + 2*d; - left = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) - : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + a = left, b = left + d, c = left + (d<<1); + ta = array[a],tb = array[b],tc = array[c]; + left = cmp(ta, tb) ? (cmp(tb, tc) ? b : (cmp(ta, tc) ? c : a)) + : (cmp(tc, tb) ? b : (cmp(ta, tc) ? a : c)); a = pivot - d, b = pivot, c = pivot + d; - pivot = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) - : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + ta = array[a],tb = array[b],tc = array[c]; + pivot = cmp(ta, tb) ? (cmp(tb, tc) ? b : (cmp(ta, tc) ? c : a)) + : (cmp(tc, tb) ? b : (cmp(ta, tc) ? a : c)); - a = right - 2*d, b = right - d, c = right; - right = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) - : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + a = right - (d<<1), b = right - d, c = right; + ta = array[a],tb = array[b],tc = array[c]; + right = cmp(ta, tb) ? (cmp(tb, tc) ? b : (cmp(ta, tc) ? c : a)) + : (cmp(tc, tb) ? b : (cmp(ta, tc) ? a : c)); } a = left, b = pivot, c = right; - pivot = cmp(array[a], array[b]) ? (cmp(array[b], array[c]) ? b : (cmp(array[a], array[c]) ? c : a)) - : (cmp(array[c], array[b]) ? b : (cmp(array[a], array[c]) ? a : c)); + ta = array[a],tb = array[b],tc = array[c]; + pivot = cmp(ta, tb) ? (cmp(tb, tc) ? b : (cmp(ta, tc) ? c : a)) + : (cmp(tc, tb) ? b : (cmp(ta, tc) ? a : c)); if( pivot != left0 ) { t = array[pivot]; array[pivot] = array[left0]; @@ -133,10 +142,10 @@ left = left1 = left0 + 1; right = right1 = right0; + ta = array[pivot]; for(;;) { - - while( left <= right && !cmp(array[pivot], array[left]) ) { - if( !cmp(array[left], array[pivot]) ) { + while( left <= right && !cmp(ta, array[left]) ) { + if( !cmp(array[left], ta) ) { if( left > left1 ) { t = array[left1]; array[left1] = array[left]; @@ -148,8 +157,8 @@ left++; } - while( left <= right && !cmp(array[right], array[pivot]) ) { - if( !cmp(array[pivot], array[right]) ) { + while( left <= right && !cmp(array[right], ta) ) { + if( !cmp(ta, array[right]) ) { if( right < right1 ) { t = array[right1]; array[right1] = array[right]; @@ -185,17 +194,19 @@ } n = Math.min( (left1 - left0), (left - left1) ); - for( i = 0; i < n; i++ ) { + m = (left-n)|0; + for( i = 0; i < n; ++i,++m ) { t = array[left0+i]; - array[left0+i] = array[left+i-n]; - array[left+i-n] = t; + array[left0+i] = array[m]; + array[m] = t; } n = Math.min( (right0 - right1), (right1 - right) ); - for( i = 0; i < n; i++ ) { + m = (right0-n+1)|0; + for( i = 0; i < n; ++i,++m ) { t = array[left+i]; - array[left+i] = array[right0+i-n+1]; - array[right0+i-n+1] = t; + array[left+i] = array[m]; + array[m] = t; } n = (left - left1); m = (right1 - right); @@ -283,4 +294,4 @@ global.math = math; -})(jsfeat); \ No newline at end of file +})(jsfeat); diff --git a/src/jsfeat_optical_flow_lk.js b/src/jsfeat_optical_flow_lk.js old mode 100644 new mode 100755 index 179542b..df8b833 --- a/src/jsfeat_optical_flow_lk.js +++ b/src/jsfeat_optical_flow_lk.js @@ -10,7 +10,7 @@ var optical_flow_lk = (function() { // short link to shar deriv - var shar_deriv = jsfeat.imgproc.shar_derivatives; + var scharr_deriv = jsfeat.imgproc.scharr_derivatives; return { track: function(prev_pyr, curr_pyr, prev_xy, curr_xy, count, win_size, max_iter, status, eps, min_eigen_threshold) { @@ -22,13 +22,17 @@ var half_win = (win_size-1)*0.5; var win_area = (win_size*win_size)|0; var win_area2 = win_area << 1; - var prev_imgs = prev_pyr.images, next_imgs = curr_pyr.images; - var img_prev=prev_imgs[0].data_u8,img_next=next_imgs[0].data_u8; - var w0 = prev_imgs[0].width, h0 = prev_imgs[0].height,lw=0,lh=0; + var prev_imgs = prev_pyr.data, next_imgs = curr_pyr.data; + var img_prev=prev_imgs[0].data,img_next=next_imgs[0].data; + var w0 = prev_imgs[0].cols, h0 = prev_imgs[0].rows,lw=0,lh=0; - var iwin_buf = new Int32Array(win_area); - var deriv_iwin = new Int32Array(win_area2); - var deriv_lev = new Int32Array((w0*h0)*2); + var iwin_node = jsfeat.cache.get_buffer(win_area<<2); + var deriv_iwin_node = jsfeat.cache.get_buffer(win_area2<<2); + var deriv_lev_node = jsfeat.cache.get_buffer((h0*(w0<<1))<<2); + + var iwin_buf = iwin_node.i32;//new Int32Array(win_area); + var deriv_iwin = deriv_iwin_node.i32;//new Int32Array(win_area2); + var deriv_lev = deriv_lev_node.i32;//deriv_m.data; var dstep=0,src=0,dsrc=0,iptr=0,diptr=0,jptr=0; var lev_sc=0.0,prev_x=0.0,prev_y=0.0,next_x=0.0,next_y=0.0; @@ -65,14 +69,14 @@ lw = w0 >> level; lh = h0 >> level; dstep = lw << 1; - img_prev = prev_imgs[level].data_u8; - img_next = next_imgs[level].data_u8; + img_prev = prev_imgs[level].data; + img_next = next_imgs[level].data; brd_r = (lw - win_size)|0; brd_b = (lh - win_size)|0; // calculate level derivatives - shar_deriv(img_prev, deriv_lev, lw, lh); + scharr_deriv(prev_imgs[level], deriv_lev); // iterate through points for(ptid = 0; ptid < count; ++ptid) { @@ -227,10 +231,14 @@ } } // points loop } // levels loop + + jsfeat.cache.put_buffer(iwin_node); + jsfeat.cache.put_buffer(deriv_iwin_node); + jsfeat.cache.put_buffer(deriv_lev_node); } }; })(); global.optical_flow_lk = optical_flow_lk; -})(jsfeat); \ No newline at end of file +})(jsfeat); diff --git a/src/jsfeat_struct.js b/src/jsfeat_struct.js old mode 100644 new mode 100755 index 128a155..44d1826 --- a/src/jsfeat_struct.js +++ b/src/jsfeat_struct.js @@ -6,57 +6,146 @@ "use strict"; // - var U8_t = 2, - U32_t = 4, - I32_t = 8, - F32_t = 16; - - var img_t = (function () { - function img_t(w, h, elem_size) { - this.width = w; - this.height = h; - this.buffer = new ArrayBuffer(w*h*elem_size); - this.data_u8 = new Uint8Array(this.buffer); - this.data_i32 = new Int32Array(this.buffer); - this.data_f32 = new Float32Array(this.buffer); - } - return img_t; + // implementation from CCV project + // currently working only with u8,s32,f32 + var U8_t = 0x0100, + S32_t = 0x0200, + F32_t = 0x0400, + S64_t = 0x0800, + F64_t = 0x1000; + + var C1_t = 0x01, + C2_t = 0x02, + C3_t = 0x03, + C4_t = 0x04; + + var _data_type_size = new Int32Array([ -1, 1, 4, -1, 4, -1, -1, -1, 8, -1, -1, -1, -1, -1, -1, -1, 8 ]); + + var get_data_type = (function () { + return function(type) { + return (type & 0xFF00); + } + })(); + + var get_channel = (function () { + return function(type) { + return (type & 0xFF); + } + })(); + + var get_data_type_size = (function () { + return function(type) { + return _data_type_size[(type & 0xFF00) >> 8]; + } + })(); + + var data_t = (function () { + function data_t(size_in_bytes) { + this.size = size_in_bytes|0; + this.buffer = new ArrayBuffer(size_in_bytes); + this.u8 = new Uint8Array(this.buffer); + this.i32 = new Int32Array(this.buffer); + this.f32 = new Float32Array(this.buffer); + } + return data_t; + })(); + + var matrix_t = (function () { + // columns, rows, data_type + function matrix_t(c, r, data_type) { + this.type = get_data_type(data_type)|0; + this.channel = get_channel(data_type)|0; + this.cols = c|0; + this.rows = r|0; + this.buffer = new data_t((c * get_data_type_size(data_type) * get_channel(data_type)) * r); + // data user asked for + this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : this.buffer.f32); + } + matrix_t.prototype.set_data_type = function(data_type) { + this.type = get_data_type(data_type)|0; + this.channel = get_channel(data_type)|0; + // clear references + delete this.data; + delete this.buffer; + // + this.buffer = new data_t((this.cols * get_data_type_size(data_type) * get_channel(data_type)) * this.rows); + this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : this.buffer.f32); + } + return matrix_t; })(); - var img_pyr_t = (function () { + var pyramid_t = (function () { - function img_pyr_t(l) { - this.levels = l; - this.images = new Array(l); - this.pyrdown = jsfeat.imgproc.pyrdown_fast_u8; + function pyramid_t(levels) { + this.levels = levels|0; + this.data = new Array(levels); + this.pyrdown = jsfeat.imgproc.pyrdown; } - img_pyr_t.prototype.allocate = function(start_w, start_h, elem_size) { + pyramid_t.prototype.allocate = function(start_w, start_h, data_type) { var i = this.levels; while(--i >= 0) { - this.images[i] = new img_t(start_w >> i, start_h >> i, elem_size); + this.data[i] = new matrix_t(start_w >> i, start_h >> i, data_type); } } - img_pyr_t.prototype.build = function(src) { - var i = 2, a = src, b = this.images[1]; - this.pyrdown(a.data_u8, a.width, a.height, b.data_u8); + pyramid_t.prototype.build = function(input, skip_first_level) { + if (typeof skip_first_level === "undefined") { skip_first_level = true; } + // just copy data to first level + var i = 2, a = input, b = this.data[0]; + if(!skip_first_level) { + var j=input.cols*input.rows; + while(--j >= 0) { + b.data[j] = input.data[j]; + } + } + b = this.data[1]; + this.pyrdown(a, b); for(; i < this.levels; ++i) { a = b; - b = this.images[i]; - this.pyrdown(a.data_u8, a.width, a.height, b.data_u8); + b = this.data[i]; + this.pyrdown(a, b); } } - return img_pyr_t; + return pyramid_t; })(); + var point2d_t = (function () { + function point2d_t(x,y,score,level) { + if (typeof x === "undefined") { x=0; } + if (typeof y === "undefined") { y=0; } + if (typeof score === "undefined") { score=0; } + if (typeof level === "undefined") { level=0; } + + this.x = x; + this.y = y; + this.score = score; + this.level = level; + } + return point2d_t; + })(); + + + // data types global.U8_t = U8_t; - global.U32_t = U32_t; - global.I32_t = I32_t; + global.S32_t = S32_t; global.F32_t = F32_t; + global.S64_t = S64_t; + global.F64_t = F64_t; + // data channels + global.C1_t = C1_t; + global.C2_t = C2_t; + global.C3_t = C3_t; + global.C4_t = C4_t; + + global.get_data_type = get_data_type; + global.get_channel = get_channel; + global.get_data_type_size = get_data_type_size; - global.img_t = img_t; - global.img_pyr_t = img_pyr_t; + global.data_t = data_t; + global.matrix_t = matrix_t; + global.pyramid_t = pyramid_t; + global.point2d_t = point2d_t; -})(jsfeat); \ No newline at end of file +})(jsfeat); diff --git a/src/jsfeat_transform.js b/src/jsfeat_transform.js new file mode 100644 index 0000000..9684426 --- /dev/null +++ b/src/jsfeat_transform.js @@ -0,0 +1,172 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + */ + +(function(global) { + "use strict"; + // + + var transform = (function() { + // + return { + affine_3point_transform: function(mat, src_x0, src_y0, dst_x0, dst_y0, + src_x1, src_y1, dst_x1, dst_y1, + src_x2, src_y2, dst_x2, dst_y2) { + // we need linear algebra module first + }, + + perspective_4point_transform: function(mat, src_x0, src_y0, dst_x0, dst_y0, + src_x1, src_y1, dst_x1, dst_y1, + src_x2, src_y2, dst_x2, dst_y2, + src_x3, src_y3, dst_x3, dst_y3) { + var t1 = src_x0; + var t2 = src_x2; + var t4 = src_y1; + var t5 = t1 * t2 * t4; + var t6 = src_y3; + var t7 = t1 * t6; + var t8 = t2 * t7; + var t9 = src_y2; + var t10 = t1 * t9; + var t11 = src_x1; + var t14 = src_y0; + var t15 = src_x3; + var t16 = t14 * t15; + var t18 = t16 * t11; + var t20 = t15 * t11 * t9; + var t21 = t15 * t4; + var t24 = t15 * t9; + var t25 = t2 * t4; + var t26 = t6 * t2; + var t27 = t6 * t11; + var t28 = t9 * t11; + var t30 = 1.0 / (t21-t24 - t25 + t26 - t27 + t28); + var t32 = t1 * t15; + var t35 = t14 * t11; + var t41 = t4 * t1; + var t42 = t6 * t41; + var t43 = t14 * t2; + var t46 = t16 * t9; + var t48 = t14 * t9 * t11; + var t51 = t4 * t6 * t2; + var t55 = t6 * t14; + var Hr0 = -(t8-t5 + t10 * t11 - t11 * t7 - t16 * t2 + t18 - t20 + t21 * t2) * t30; + var Hr1 = (t5 - t8 - t32 * t4 + t32 * t9 + t18 - t2 * t35 + t27 * t2 - t20) * t30; + var Hr2 = t1; + var Hr3 = (-t9 * t7 + t42 + t43 * t4 - t16 * t4 + t46 - t48 + t27 * t9 - t51) * t30; + var Hr4 = (-t42 + t41 * t9 - t55 * t2 + t46 - t48 + t55 * t11 + t51 - t21 * t9) * t30; + var Hr5 = t14; + var Hr6 = (-t10 + t41 + t43 - t35 + t24 - t21 - t26 + t27) * t30; + var Hr7 = (-t7 + t10 + t16 - t43 + t27 - t28 - t21 + t25) * t30; + + t1 = dst_x0; + t2 = dst_x2; + t4 = dst_y1; + t5 = t1 * t2 * t4; + t6 = dst_y3; + t7 = t1 * t6; + t8 = t2 * t7; + t9 = dst_y2; + t10 = t1 * t9; + t11 = dst_x1; + t14 = dst_y0; + t15 = dst_x3; + t16 = t14 * t15; + t18 = t16 * t11; + t20 = t15 * t11 * t9; + t21 = t15 * t4; + t24 = t15 * t9; + t25 = t2 * t4; + t26 = t6 * t2; + t27 = t6 * t11; + t28 = t9 * t11; + t30 = 1.0 / (t21-t24 - t25 + t26 - t27 + t28); + t32 = t1 * t15; + t35 = t14 * t11; + t41 = t4 * t1; + t42 = t6 * t41; + t43 = t14 * t2; + t46 = t16 * t9; + t48 = t14 * t9 * t11; + t51 = t4 * t6 * t2; + t55 = t6 * t14; + var Hl0 = -(t8-t5 + t10 * t11 - t11 * t7 - t16 * t2 + t18 - t20 + t21 * t2) * t30; + var Hl1 = (t5 - t8 - t32 * t4 + t32 * t9 + t18 - t2 * t35 + t27 * t2 - t20) * t30; + var Hl2 = t1; + var Hl3 = (-t9 * t7 + t42 + t43 * t4 - t16 * t4 + t46 - t48 + t27 * t9 - t51) * t30; + var Hl4 = (-t42 + t41 * t9 - t55 * t2 + t46 - t48 + t55 * t11 + t51 - t21 * t9) * t30; + var Hl5 = t14; + var Hl6 = (-t10 + t41 + t43 - t35 + t24 - t21 - t26 + t27) * t30; + var Hl7 = (-t7 + t10 + t16 - t43 + t27 - t28 - t21 + t25) * t30; + + // the following code computes R = Hl * inverse Hr + t2 = Hr4-Hr7*Hr5; + t4 = Hr0*Hr4; + t5 = Hr0*Hr5; + t7 = Hr3*Hr1; + t8 = Hr2*Hr3; + t10 = Hr1*Hr6; + var t12 = Hr2*Hr6; + t15 = 1.0 / (t4-t5*Hr7-t7+t8*Hr7+t10*Hr5-t12*Hr4); + t18 = -Hr3+Hr5*Hr6; + var t23 = -Hr3*Hr7+Hr4*Hr6; + t28 = -Hr1+Hr2*Hr7; + var t31 = Hr0-t12; + t35 = Hr0*Hr7-t10; + t41 = -Hr1*Hr5+Hr2*Hr4; + var t44 = t5-t8; + var t47 = t4-t7; + t48 = t2*t15; + var t49 = t28*t15; + var t50 = t41*t15; + mat[0] = Hl0*t48+Hl1*(t18*t15)-Hl2*(t23*t15); + mat[1] = Hl0*t49+Hl1*(t31*t15)-Hl2*(t35*t15); + mat[2] = -Hl0*t50-Hl1*(t44*t15)+Hl2*(t47*t15); + mat[3] = Hl3*t48+Hl4*(t18*t15)-Hl5*(t23*t15); + mat[4] = Hl3*t49+Hl4*(t31*t15)-Hl5*(t35*t15); + mat[5] = -Hl3*t50-Hl4*(t44*t15)+Hl5*(t47*t15); + mat[6] = Hl6*t48+Hl7*(t18*t15)-t23*t15; + mat[7] = Hl6*t49+Hl7*(t31*t15)-t35*t15; + mat[8] = -Hl6*t50-Hl7*(t44*t15)+t47*t15; + }, + + invert_affine_transform: function(src, dst) { + var m11 = src[0], m12 = src[1], m13 = src[2]; + var m21 = src[3], m22 = src[4], m23 = src[5]; + + var det = 1.0 / (m11 * m22 - m12 * m21); + + dst[0] = det * m22; + dst[1] = det * -m12; + dst[2] = det * (m12*m23 - m13*m22); + + dst[3] = det * -m21; + dst[4] = det * m11; + dst[5] = det * (m13*m21 - m11*m23); + }, + + invert_perspective_transform: function(src, dst) { + var m11 = src[0], m12 = src[1], m13 = src[2]; + var m21 = src[3], m22 = src[4], m23 = src[5]; + var m31 = src[6], m32 = src[7], m33 = src[8]; + + var det = 1.0 / (m11 * (m22*m33 - m23*m32) - m12 * (m21*m33 - m23*m31) + m13 * (m21*m32 - m22*m31)); + + dst[0] = det * (m22*m33 - m23*m32); + dst[1] = det * (m13*m32 - m12*m33); + dst[2] = det * (m12*m23 - m13*m22); + + dst[3] = det * (m23*m31 - m21*m33); + dst[4] = det * (m11*m33 - m13*m31); + dst[5] = det * (m13*m21 - m11*m23); + + dst[6] = det * (m21*m32 - m22*m31); + dst[7] = det * (m12*m31 - m11*m32); + dst[8] = det * (m11*m22 - m12*m21); + } + }; + })(); + + global.transform = transform; + +})(jsfeat); \ No newline at end of file From ba0c2cd19f666dd22ff833c7df14b00f7ce5562d Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Sat, 17 Nov 2012 23:49:52 +0400 Subject: [PATCH 10/46] Update README.md --- README.md | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 749655a..919b66d 100644 --- a/README.md +++ b/README.md @@ -5,16 +5,19 @@ jsfeat The project aim is to explore JS/HTML5 possibilities using modern & state-of-art computer vision algorithms. +[Examples and Documentation](http://inspirit.github.com/jsfeat/) + ### Features ### -* Basic image processing methods (grayscale, derivatives, box-blur, resample, etc.) -* Fast Corners feature detector (16/12/8 pattern size) -* Lucas-Kanade optical flow * Custom data structures -* more coming... - -### Change log ### - -2012 10 8 - **alpha** - -* First commit +* Basic image processing methods (grayscale, derivatives, box-blur, resample, etc.) + * grayscale ([Demo](http://inspirit.github.com/jsfeat/sample_grayscale.html)) + * box blur ([Demo](http://inspirit.github.com/jsfeat/sample_boxblur.html)) + * gaussian blur ([Demo](http://inspirit.github.com/jsfeat/sample_gaussblur.html)) + * equalize histogram ([Demo](http://inspirit.github.com/jsfeat/sample_equalize_hist.html)) + * canny edges ([Demo](http://inspirit.github.com/jsfeat/sample_canny_edge.html)) + * find more at Examples and Documentation page +* Fast Corners feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_fast_corners.html)) +* Lucas-Kanade optical flow ([Demo](http://inspirit.github.com/jsfeat/sample_oflow_lk.html) - click to add points) +* HAAR object detector ([Demo](http://inspirit.github.com/jsfeat/sample_haar_face.html)) +* BBF object detector ([Demo](http://inspirit.github.com/jsfeat/sample_bbf_face.html)) From dd80498e6731b9a94f6fb004da5d9a7799086892 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Mon, 19 Nov 2012 10:32:37 +0400 Subject: [PATCH 11/46] minor fixes optimized box blur simplifier fast corner detector --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 237 ++++++++++++++++++++++++++----------- src/jsfeat_fast_corners.js | 26 ++-- src/jsfeat_imgproc.js | 196 +++++++++++++++++++++--------- src/jsfeat_struct.js | 6 + 5 files changed, 332 insertions(+), 135 deletions(-) diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index daf806f..57d7902 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};self.Int32Array=self.Int32Array||Array;self.Uint32Array=self.Uint32Array||Array;self.Uint8Array=self.Uint8Array||Array;self.Float32Array=self.Float32Array||Array;(function(k){var g=256,e=512,d=1024,o=2048,n=4096;var r=1,h=2,a=3,i=4;var q=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var p=(function(){return function(s){return(s&65280)}})();var f=(function(){return function(s){return(s&255)}})();var b=(function(){return function(s){return q[(s&65280)>>8]}})();var m=(function(){function s(t){this.size=t|0;this.buffer=new ArrayBuffer(t);this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer)}return s})();var j=(function(){function s(v,t,u){this.type=p(u)|0;this.channel=f(u)|0;this.cols=v|0;this.rows=t|0;this.buffer=new m((v*b(u)*f(u))*t);this.data=this.type&g?this.buffer.u8:(this.type&e?this.buffer.i32:this.buffer.f32)}s.prototype.set_data_type=function(t){this.type=p(t)|0;this.channel=f(t)|0;delete this.data;delete this.buffer;this.buffer=new m((this.cols*b(t)*f(t))*this.rows);this.data=this.type&g?this.buffer.u8:(this.type&e?this.buffer.i32:this.buffer.f32)};return s})();var l=(function(){function s(t){this.levels=t|0;this.data=new Array(t);this.pyrdown=jsfeat.imgproc.pyrdown}s.prototype.allocate=function(t,v,w){var u=this.levels;while(--u>=0){this.data[u]=new j(t>>u,v>>u,w)}};s.prototype.build=function(w,v){if(typeof v==="undefined"){v=true}var y=2,u=w,t=this.data[0];if(!v){var x=w.cols*w.rows;while(--x>=0){t.data[x]=w.data[x]}}t=this.data[1];this.pyrdown(u,t);for(;yh.size){h.buffer=new ArrayBuffer(g);h.u8=new Uint8Array(h.buffer);h.i32=new Int32Array(h.buffer);h.f32=new Float32Array(h.buffer);h.size=g}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur:function(q,H,A,G){if(typeof G==="undefined"){G=1}var p=(2*A+1)|0;var t=q.cols,D=q.rows;var n=q.type;var g,s=(t*p+t)|0,E=q.data,o=H.data;var v=(t*p)|0;var z=0,F=0;var C=0,B=0,l,k;var x,y;var u=0,r=(t*A-A)|0;var m=jsfeat.cache.get_buffer(s<<2);if((n&jsfeat.U8_t)||(n&jsfeat.S32_t)){g=m.i32}else{g=m.f32}for(;C=p-1){for(B=p-1;B<=t-2;B+=2){l=g[v+B];k=g[v+B+1];o[r+B]=l*G;o[r+B+1]=k*G;g[v+B]=l-g[F+B];g[v+B+1]=k-g[F+B+1]}for(;B>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(i,o){var r=i.cols,m=i.rows;var l=r>>1,n=m>>1;var q=0,p=0,g=0,t=0,s=0;var k=i.data,j=o.data;for(p=0;p>2;j[s+1]=(k[t+2]+k[t+3]+k[t+r+2]+k[t+r+3]+2)>>2}for(;q>2}g+=r<<1}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var m=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var e=new Int32Array([0,2,1,2,2,1,2,0,2,-1,1,-2,0,-2,-1,-2,-2,-1,-2,0,-2,1,-1,2]);var c=new Int32Array([0,1,1,1,1,0,1,-1,0,-1,-1,-1,-1,0,-1,1]);var f=new Uint8Array(512);var k=new Int32Array(25);var i=new Int32Array(25);var l=function(o,q,r){var n=0;var p=r==16?m:(r==12?e:c);for(;n=y){continue}w=Math.max(w,u[r+4]);y=Math.min(y,Math.max(w,u[r]));y=Math.min(y,Math.max(w,u[r+5]))}return -y-1},j=function(n,q,o,u,s){var t=19,r=0,z=n[q];var p=s,x=0,y=0,w=0;for(;r=y){continue}w=Math.max(w,u[r+5]);w=Math.max(w,u[r+6]);y=Math.min(y,Math.max(w,u[r]));y=Math.min(y,Math.max(w,u[r+7]))}return -y-1},h=function(n,q,o,u,s){var t=25,r=0,z=n[q];var p=s,x=0,y=0,w=0;for(;r=y){continue}w=Math.max(w,u[r+6]);w=Math.max(w,u[r+7]);w=Math.max(w,u[r+8]);y=Math.min(y,Math.max(w,u[r]));y=Math.min(y,Math.max(w,u[r+9]))}return -y-1};var g=20;return{set_threshold:function(n){g=Math.min(Math.max(n,0),255);for(var o=-255;o<=255;++o){f[(o+255)]=(o<-g?1:(o>g?2:0))}return g},detect:function(P,L,F,I){if(typeof I==="undefined"){I=16}else{if(I!=16&&I!=12&&I!=8){I=16}}if(typeof F==="undefined"){F=3}var C=(I>>1),y=(I+C+1)|0;var z=P.data,aa=P.cols,av=P.rows;var at=0,aq=0,ao=0,G=0,Z=0,au=0;var D=jsfeat.cache.get_buffer(3*aa);var R=jsfeat.cache.get_buffer(((aa+1)*3)<<2);var M=D.u8;var H=R.i32;var Q=k;var O=i;var A=Math.max(3,F);var ac=Math.min((av-2),(av-F));var B=Math.max(3,F);var ad=Math.min((aa-3),(aa-F));var ak=0,S=0,E;var T=I==16?h:(I==12?j:d);var J=f;var r=g;var ab=0,ar=0,ax=0,az=0,X=0,Y=0,ay=0,U=0,aw=0;var W=0,V=0,q=0;l(Q,aa,I);var ap=Q[0];var an=Q[1];var am=Q[2];var al=Q[3];var aj=Q[4];var ai=Q[5];var ah=Q[6];var ag=Q[7];var af=Q[8];var ae=Q[9];var u=Q[10];var t=Q[11];var s=Q[12];var p=Q[13];var o=Q[14];var n=Q[15];for(at=0;atC){++az;H[X+az]=aq;M[Y+aq]=T(z,ay,Q,O,r);break}}else{ak=0}}}if(ax&2){G=(ab+r);ak=0;for(ao=0;aoG){++ak;if(ak>C){++az;H[X+az]=aq;M[Y+aq]=T(z,ay,Q,O,r);break}}else{ak=0}}}}}H[X+aa]=az;if(at==A){continue}au=(at-4+3)%3;U=(au*aa)|0;X=(au*(aa+1))|0;au=(at-5+3)%3;aw=(au*aa)|0;az=H[X+aa];for(ao=0;aoM[U+W]&&q>M[U+V]&&q>M[aw+V]&&q>M[aw+aq]&&q>M[aw+W]&&q>M[Y+V]&&q>M[Y+aq]&&q>M[Y+W])){E=L[S];E.x=aq,E.y=(at-1),E.score=q;S++}}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(R);return S}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(f){var l=f.stage_classifier.length;for(var g=0;g=0){d=f[r];o[r]=h|(d<<16)|(d<<8)|d}l.putImageData(v,0,0);jsfeat.cache.put_buffer(j)}this.interval=t;this.scale=Math.pow(2,1/(this.interval+1));this.next=(this.interval+1)|0;this.scale_to=(Math.log(Math.min(e.width/p,e.height/x))/Math.log(this.scale))|0;var q=document.createElement("canvas");q.width=e.width;q.height=e.height;var s=q.getContext("2d");var w=new Array((this.scale_to+this.next*2)*4);w[0]={width:e.width,height:e.height,data:e.getContext("2d").getImageData(0,0,e.width,e.height).data};var u,g;for(r=1;r<=this.interval;++r){u=(e.width/Math.pow(this.scale,r))|0;g=(e.height/Math.pow(this.scale,r))|0;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next*2;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,1,0,e.width-1,e.height,0,0,u-2,g);w[r*4+1]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,0,1,e.width,e.height-1,0,0,u,g-2);w[r*4+2]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,1,1,e.width-1,e.height-1,0,0,u-2,g-2);w[r*4+3]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}return w},detect:function(z,H){var g=this.interval;var J=this.scale;var l=this.next;var h=this.scale_to;var X=0,W=0,V=0,S=0,O=0,N=0,Q=0,w=0,F=0,E=0,R=0,Z=0,I=0,Y=0,t=0,U=0,e=0;var B=0,T,M,A,D,C,K=true,m=true;var u=1,s=1;var r=[0,1,0,1];var o=[0,0,1,1];var G=[];var v=[],d=[0,0,0];var L=[0,0,0];var P=[0,0,0];for(X=0;X>2);e=z[t+(l<<3)].height-(H.height>>2);L[0]=z[t].width<<2;L[1]=z[t+(l<<2)].width<<2;L[2]=z[t+(l<<3)].width<<2;P[0]=(z[t].width<<4)-(U<<4);P[1]=(z[t+(l<<2)].width<<3)-(U<<3);P[2]=(z[t+(l<<3)].width<<2)-(U<<2);w=H.stage_classifier.length;for(W=0;W=0){R=v[D.pz[Y]][d[D.pz[Y]]+D.px[Y]];if(R=0){S=v[D.nz[Y]][d[D.nz[Y]]+D.nx[Y]];if(S>I){if(Z<=S){m=false;break}I=S}}}B+=(m)?T[(V<<1)+1]:T[V<<1]}}if(Br[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();a.bbf=b})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};self.Int32Array=self.Int32Array||Array;self.Uint32Array=self.Uint32Array||Array;self.Uint8Array=self.Uint8Array||Array;self.Float32Array=self.Float32Array||Array;(function(l){var h=256,f=512,e=1024,p=2048,o=4096;var s=1,i=2,a=3,j=4;var r=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var q=(function(){return function(t){return(t&65280)}})();var g=(function(){return function(t){return(t&255)}})();var b=(function(){return function(t){return r[(t&65280)>>8]}})();var d=1;var n=(function(){function t(u){this.size=u|0;this.buffer=new ArrayBuffer(u);this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer)}return t})();var k=(function(){function t(w,u,v){this.type=q(v)|0;this.channel=g(v)|0;this.cols=w|0;this.rows=u|0;this.buffer=new n((w*b(v)*g(v))*u);this.data=this.type&h?this.buffer.u8:(this.type&f?this.buffer.i32:this.buffer.f32)}t.prototype.set_data_type=function(u){this.type=q(u)|0;this.channel=g(u)|0;delete this.data;delete this.buffer;this.buffer=new n((this.cols*b(u)*g(u))*this.rows);this.data=this.type&h?this.buffer.u8:(this.type&f?this.buffer.i32:this.buffer.f32)};return t})();var m=(function(){function t(u){this.levels=u|0;this.data=new Array(u);this.pyrdown=jsfeat.imgproc.pyrdown}t.prototype.allocate=function(u,w,x){var v=this.levels;while(--v>=0){this.data[v]=new k(u>>v,w>>v,x)}};t.prototype.build=function(x,w){if(typeof w==="undefined"){w=true}var z=2,v=x,u=this.data[0];if(!w){var y=x.cols*x.rows;while(--y>=0){u.data[y]=x.data[y]}}u=this.data[1];this.pyrdown(v,u);for(;zh.size){h.buffer=new ArrayBuffer(g);h.u8=new Uint8Array(h.buffer);h.i32=new Int32Array(h.buffer);h.f32=new Float32Array(h.buffer);h.size=g}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(q,H,l,k){if(typeof k==="undefined"){k=0}var u=q.cols,D=q.rows;var C,t,s;var A=l*2+1;var n=l+1;var o=8192;var G=k&jsfeat.BOX_BLUR_NOSCALE?1:(16384*(1/(A*A)))|0;var B=jsfeat.cache.get_buffer((u*D)<<2);var g,E,m=0,p,j;var F=B.i32;var v,r;var z;v=q.data;r=F;for(s=0;s>14;g+=v[p]-z;p++}for(;t<=D-n-2;t+=2,E+=u<<1){r[E]=(g*G+o)>>14;g+=v[p]-v[j];r[E+u]=(g*G+o)>>14;g+=v[p+1]-v[j+1];p+=2;j+=2}for(;t>14;g+=v[p]-v[j];p++;j++}z=v[p-1];for(;t>14;g+=z-v[j];j++}}m+=D}jsfeat.cache.put_buffer(B)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(i,o){var r=i.cols,m=i.rows;var l=r>>1,n=m>>1;var q=0,p=0,g=0,t=0,s=0;var k=i.data,j=o.data;for(p=0;p>2;j[s+1]=(k[t+2]+k[t+3]+k[t+r+2]+k[t+r+3]+2)>>2}for(;q>2}g+=r<<1}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,pattern_size);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(f){var l=f.stage_classifier.length;for(var g=0;g=0){d=f[r];o[r]=h|(d<<16)|(d<<8)|d}l.putImageData(v,0,0);jsfeat.cache.put_buffer(j)}this.interval=t;this.scale=Math.pow(2,1/(this.interval+1));this.next=(this.interval+1)|0;this.scale_to=(Math.log(Math.min(e.width/p,e.height/x))/Math.log(this.scale))|0;var q=document.createElement("canvas");q.width=e.width;q.height=e.height;var s=q.getContext("2d");var w=new Array((this.scale_to+this.next*2)*4);w[0]={width:e.width,height:e.height,data:e.getContext("2d").getImageData(0,0,e.width,e.height).data};var u,g;for(r=1;r<=this.interval;++r){u=(e.width/Math.pow(this.scale,r))|0;g=(e.height/Math.pow(this.scale,r))|0;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next*2;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,1,0,e.width-1,e.height,0,0,u-2,g);w[r*4+1]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,0,1,e.width,e.height-1,0,0,u,g-2);w[r*4+2]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,1,1,e.width-1,e.height-1,0,0,u-2,g-2);w[r*4+3]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}return w},detect:function(z,H){var g=this.interval;var J=this.scale;var l=this.next;var h=this.scale_to;var X=0,W=0,V=0,S=0,O=0,N=0,Q=0,w=0,F=0,E=0,R=0,Z=0,I=0,Y=0,t=0,U=0,e=0;var B=0,T,M,A,D,C,K=true,m=true;var u=1,s=1;var r=[0,1,0,1];var o=[0,0,1,1];var G=[];var v=[],d=[0,0,0];var L=[0,0,0];var P=[0,0,0];for(X=0;X>2);e=z[t+(l<<3)].height-(H.height>>2);L[0]=z[t].width<<2;L[1]=z[t+(l<<2)].width<<2;L[2]=z[t+(l<<3)].width<<2;P[0]=(z[t].width<<4)-(U<<4);P[1]=(z[t+(l<<2)].width<<3)-(U<<3);P[2]=(z[t+(l<<3)].width<<2)-(U<<2);w=H.stage_classifier.length;for(W=0;W=0){R=v[D.pz[Y]][d[D.pz[Y]]+D.px[Y]];if(R=0){S=v[D.nz[Y]][d[D.nz[Y]]+D.nx[Y]];if(S>I){if(Z<=S){m=false;break}I=S}}}B+=(m)?T[(V<<1)+1]:T[V<<1]}}if(Br[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();a.bbf=b})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index baaec56..b536f27 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -10,6 +10,7 @@ self.Int32Array = self.Int32Array || Array; self.Uint32Array = self.Uint32Array || Array; self.Uint8Array = self.Uint8Array || Array; self.Float32Array = self.Float32Array || Array; + /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -51,6 +52,9 @@ self.Float32Array = self.Float32Array || Array; } })(); + // box blur option + var BOX_BLUR_NOSCALE = 0x01; + var data_t = (function () { function data_t(size_in_bytes) { this.size = size_in_bytes|0; @@ -151,6 +155,9 @@ self.Float32Array = self.Float32Array || Array; global.C3_t = C3_t; global.C4_t = C4_t; + // options + global.BOX_BLUR_NOSCALE = BOX_BLUR_NOSCALE; + global.get_data_type = get_data_type; global.get_channel = get_channel; global.get_data_type_size = get_data_type_size; @@ -161,6 +168,7 @@ self.Float32Array = self.Float32Array || Array; global.point2d_t = point2d_t; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -232,6 +240,7 @@ self.Float32Array = self.Float32Array || Array; cache.allocate(30, 640*4); })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -529,6 +538,7 @@ self.Float32Array = self.Float32Array || Array; global.math = math; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -700,7 +710,7 @@ self.Float32Array = self.Float32Array || Array; global.transform = transform; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -1091,72 +1101,154 @@ self.Float32Array = self.Float32Array || Array; } }, - box_blur: function(src, dst, hwin, scale) { - if (typeof scale === "undefined") { scale = 1; } - var win = (2*hwin+1)|0; - var w = src.cols, h = src.rows; - var data_type = src.type; - var _buf,buf_sz=(w*win+w)|0,src_d=src.data,dst_d=dst.data; - var sums = (w*win)|0; - var next_row=0,oldest_row=0; - var i=0, j=0, s0, s1; - var hsum,back; - var input = 0, output = (w*hwin - hwin) | 0; - - // select correct data type - var buf_node = jsfeat.cache.get_buffer(buf_sz<<2); - if((data_type&jsfeat.U8_t) || (data_type&jsfeat.S32_t)) { - _buf = buf_node.i32; - } else { - _buf = buf_node.f32; - } + box_blur_gray: function(src, dst, radius, options) { + if (typeof options === "undefined") { options = 0; } + var w=src.cols, h=src.rows; + var i,x,y; + var windowSize = radius * 2 + 1; + var radiusPlusOne = radius + 1; + var offset = 8192; + var scale = options&jsfeat.BOX_BLUR_NOSCALE ? 1 : (16384 * (1.0/(windowSize*windowSize)))|0; + + var tmp_buff = jsfeat.cache.get_buffer((w*h)<<2); + + var sum, dstIndex, srcIndex = 0, nextPixelIndex, previousPixelIndex; + var tmp = tmp_buff.i32; // to prevent overflow + var input, output; + var hold; + + // first pass + // no need to scale + input = src.data; + output = tmp; + for (y = 0; y < h; ++y) { + dstIndex = y; + sum = radiusPlusOne * input[srcIndex]; + + for(i = 1; i <= radius; ++i) { + sum += input[srcIndex + i]; + } - for(; i < w; ++i){ _buf[sums+i] = 0; } + nextPixelIndex = srcIndex + radiusPlusOne; + previousPixelIndex = srcIndex; + hold = input[previousPixelIndex]; + for(x = 0; x < radius; ++x, dstIndex += h) { + output[dstIndex] = sum; + sum += input[nextPixelIndex]- hold; + nextPixelIndex ++; + } + for(; x <= w-radiusPlusOne-2; x+=2, dstIndex += h<<1) { + output[dstIndex] = sum; + sum += input[nextPixelIndex]- input[previousPixelIndex]; - for (i=0; i= win-1) { - for(j = win-1; j <= w-2; j+=2) { - s0 = _buf[sums+j]; s1 = _buf[sums+j+1]; - dst_d[output+j] = s0*scale; dst_d[output+j+1] = s1*scale; - _buf[sums+j] = s0 - _buf[oldest_row+j]; - _buf[sums+j+1] = s1 - _buf[oldest_row+j+1]; + + hold = input[nextPixelIndex-1]; + for(; x < w; ++x, dstIndex += h) { + output[dstIndex] = sum; + + sum += hold- input[previousPixelIndex]; + previousPixelIndex ++; + } + + srcIndex += w; + } + // + // second pass + srcIndex = 0; + input = tmp; // this is a transpose + output = dst.data; + for (y = 0; y < w; ++y) { + dstIndex = y; + sum = radiusPlusOne * input[srcIndex]; + + for(i = 1; i <= radius; ++i) { + sum += input[srcIndex + i]; + } + + nextPixelIndex = srcIndex + radiusPlusOne; + previousPixelIndex = srcIndex; + hold = input[previousPixelIndex]; + + // dont scale result + if(scale == 1) { + for(x = 0; x < radius; ++x, dstIndex += w) { + output[dstIndex] = sum; + sum += input[nextPixelIndex]- hold; + nextPixelIndex ++; + } + for(; x <= h-radiusPlusOne-2; x+=2, dstIndex += w<<1) { + output[dstIndex] = sum; + sum += input[nextPixelIndex]- input[previousPixelIndex]; + + output[dstIndex+w] = sum; + sum += input[nextPixelIndex+1]- input[previousPixelIndex+1]; + + nextPixelIndex +=2; + previousPixelIndex +=2; + } + for(; x < h-radiusPlusOne; ++x, dstIndex += w) { + output[dstIndex] = sum; + + sum += input[nextPixelIndex]- input[previousPixelIndex]; + nextPixelIndex ++; + previousPixelIndex ++; + } + hold = input[nextPixelIndex-1]; + for(; x < h; ++x, dstIndex += w) { + output[dstIndex] = sum; + + sum += hold- input[previousPixelIndex]; + previousPixelIndex ++; + } + } else { + for(x = 0; x < radius; ++x, dstIndex += w) { + output[dstIndex] = (sum*scale+offset)>>14; + sum += input[nextPixelIndex]- hold; + nextPixelIndex ++; + } + for(; x <= h-radiusPlusOne-2; x+=2, dstIndex += w<<1) { + output[dstIndex] = (sum*scale+offset)>>14; + sum += input[nextPixelIndex]- input[previousPixelIndex]; + + output[dstIndex+w] = (sum*scale+offset)>>14; + sum += input[nextPixelIndex+1]- input[previousPixelIndex+1]; + + nextPixelIndex +=2; + previousPixelIndex +=2; + } + for(; x < h-radiusPlusOne; ++x, dstIndex += w) { + output[dstIndex] = (sum*scale+offset)>>14; + + sum += input[nextPixelIndex]- input[previousPixelIndex]; + nextPixelIndex ++; + previousPixelIndex ++; } - for(; j < w; ++j) { - s0 = _buf[sums+j]; - dst_d[output+j] = s0*scale; - _buf[sums+j] = s0 - _buf[oldest_row+j]; + hold = input[nextPixelIndex-1]; + for(; x < h; ++x, dstIndex += w) { + output[dstIndex] = (sum*scale+offset)>>14; + + sum += hold- input[previousPixelIndex]; + previousPixelIndex ++; } - output += w; - oldest_row += w; - oldest_row = (oldest_row < sums) * oldest_row; } - input += w; - next_row += w; - next_row = (next_row < sums) * next_row; + + srcIndex += h; } - jsfeat.cache.put_buffer(buf_node); + jsfeat.cache.put_buffer(tmp_buff); }, gaussian_blur: function(src, dst, kernel_size, sigma) { @@ -1704,6 +1796,7 @@ self.Float32Array = self.Float32Array || Array; global.imgproc = imgproc; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -1724,8 +1817,10 @@ The references are: var fast_corners = (function() { var offsets16 = new Int32Array([0, 3, 1, 3, 2, 2, 3, 1, 3, 0, 3, -1, 2, -2, 1, -3, 0, -3, -1, -3, -2, -2, -3, -1, -3, 0, -3, 1, -2, 2, -1, 3]); - var offsets12 = new Int32Array([0, 2, 1, 2, 2, 1, 2, 0, 2, -1, 1, -2, 0, -2, -1, -2, -2, -1, -2, 0, -2, 1, -1, 2]); - var offsets8 = new Int32Array([0, 1, 1, 1, 1, 0, 1, -1, 0, -1, -1, -1, -1, 0, -1, 1]); + + // decided to switch it off since other pattern sizes return quite poor points + //var offsets12 = new Int32Array([0, 2, 1, 2, 2, 1, 2, 0, 2, -1, 1, -2, 0, -2, -1, -2, -2, -1, -2, 0, -2, 1, -1, 2]); + //var offsets8 = new Int32Array([0, 1, 1, 1, 1, 0, 1, -1, 0, -1, -1, -1, -1, 0, -1, 1]); var threshold_tab = new Uint8Array(512); var pixel_off = new Int32Array(25); @@ -1734,7 +1829,8 @@ The references are: // private functions var _cmp_offsets = function(pixel, step, pattern_size) { var k = 0; - var offsets = pattern_size == 16 ? offsets16 : (pattern_size == 12 ? offsets12 : offsets8); + //var offsets = pattern_size == 16 ? offsets16 : (pattern_size == 12 ? offsets12 : offsets8); + var offsets = offsets16; for( ; k < pattern_size; ++k ) { pixel[k] = offsets[k<<1] + offsets[(k<<1)+1] * step; } @@ -1742,7 +1838,7 @@ The references are: pixel[k] = pixel[k - pattern_size]; } }, - +/* _cmp_score_8 = function(src, off, pixel, d, threshold) { var N = 13, k = 0, v = src[off]; var a0 = threshold,a=0,b0=0,b=0; @@ -1814,7 +1910,7 @@ The references are: return -b0-1; }, - +*/ _cmp_score_16 = function(src, off, pixel, d, threshold) { var N = 25, k = 0, v = src[off]; var a0 = threshold,a=0,b0=0,b=0; @@ -1867,21 +1963,23 @@ The references are: return _threshold; }, - detect: function(src, corners, border, pattern_size) { + detect: function(src, corners, border) { + /* if (typeof pattern_size === "undefined") { pattern_size = 16; } else if(pattern_size != 16 && pattern_size!=12 && pattern_size!=8) { pattern_size = 16; } + */ if (typeof border === "undefined") { border = 3; } - var K = (pattern_size>>1), N = (pattern_size + K + 1)|0; + var K = 8, N = 25; var img = src.data, w = src.cols, h = src.rows; var i=0, j=0, k=0, vt=0, x=0, m3=0; var buf_node = jsfeat.cache.get_buffer(3 * w); var cpbuf_node = jsfeat.cache.get_buffer(((w+1)*3)<<2); - var buf = buf_node.u8;//new Uint8Array(w*3); - var cpbuf = cpbuf_node.i32;//new Int32Array((w+1)*3); + var buf = buf_node.u8; + var cpbuf = cpbuf_node.i32; var pixel = pixel_off; var sd = score_diff; var sy = Math.max(3, border); @@ -1889,7 +1987,8 @@ The references are: var sx = Math.max(3, border); var ex = Math.min((w - 3), (w - border)); var _count = 0, corners_cnt = 0, pt; - var score_func = pattern_size == 16 ? _cmp_score_16 : (pattern_size == 12 ? _cmp_score_12 : _cmp_score_8); + //var score_func = pattern_size == 16 ? _cmp_score_16 : (pattern_size == 12 ? _cmp_score_12 : _cmp_score_8); + var score_func = _cmp_score_16; var thresh_tab = threshold_tab; var threshold = _threshold; @@ -2037,6 +2136,7 @@ The references are: fast_corners.set_threshold(20); // set default })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -2281,6 +2381,7 @@ The references are: global.optical_flow_lk = optical_flow_lk; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -2571,6 +2672,7 @@ The references are: global.haar = haar; })(jsfeat); + /** * BBF: Brightness Binary Feature * @@ -2965,3 +3067,4 @@ The references are: global.bbf = bbf; })(jsfeat); + diff --git a/src/jsfeat_fast_corners.js b/src/jsfeat_fast_corners.js index 0d2982e..dcd425a 100755 --- a/src/jsfeat_fast_corners.js +++ b/src/jsfeat_fast_corners.js @@ -18,8 +18,10 @@ The references are: var fast_corners = (function() { var offsets16 = new Int32Array([0, 3, 1, 3, 2, 2, 3, 1, 3, 0, 3, -1, 2, -2, 1, -3, 0, -3, -1, -3, -2, -2, -3, -1, -3, 0, -3, 1, -2, 2, -1, 3]); - var offsets12 = new Int32Array([0, 2, 1, 2, 2, 1, 2, 0, 2, -1, 1, -2, 0, -2, -1, -2, -2, -1, -2, 0, -2, 1, -1, 2]); - var offsets8 = new Int32Array([0, 1, 1, 1, 1, 0, 1, -1, 0, -1, -1, -1, -1, 0, -1, 1]); + + // decided to switch it off since other pattern sizes return quite poor points + //var offsets12 = new Int32Array([0, 2, 1, 2, 2, 1, 2, 0, 2, -1, 1, -2, 0, -2, -1, -2, -2, -1, -2, 0, -2, 1, -1, 2]); + //var offsets8 = new Int32Array([0, 1, 1, 1, 1, 0, 1, -1, 0, -1, -1, -1, -1, 0, -1, 1]); var threshold_tab = new Uint8Array(512); var pixel_off = new Int32Array(25); @@ -28,7 +30,8 @@ The references are: // private functions var _cmp_offsets = function(pixel, step, pattern_size) { var k = 0; - var offsets = pattern_size == 16 ? offsets16 : (pattern_size == 12 ? offsets12 : offsets8); + //var offsets = pattern_size == 16 ? offsets16 : (pattern_size == 12 ? offsets12 : offsets8); + var offsets = offsets16; for( ; k < pattern_size; ++k ) { pixel[k] = offsets[k<<1] + offsets[(k<<1)+1] * step; } @@ -36,7 +39,7 @@ The references are: pixel[k] = pixel[k - pattern_size]; } }, - +/* _cmp_score_8 = function(src, off, pixel, d, threshold) { var N = 13, k = 0, v = src[off]; var a0 = threshold,a=0,b0=0,b=0; @@ -108,7 +111,7 @@ The references are: return -b0-1; }, - +*/ _cmp_score_16 = function(src, off, pixel, d, threshold) { var N = 25, k = 0, v = src[off]; var a0 = threshold,a=0,b0=0,b=0; @@ -161,21 +164,23 @@ The references are: return _threshold; }, - detect: function(src, corners, border, pattern_size) { + detect: function(src, corners, border) { + /* if (typeof pattern_size === "undefined") { pattern_size = 16; } else if(pattern_size != 16 && pattern_size!=12 && pattern_size!=8) { pattern_size = 16; } + */ if (typeof border === "undefined") { border = 3; } - var K = (pattern_size>>1), N = (pattern_size + K + 1)|0; + var K = 8, N = 25; var img = src.data, w = src.cols, h = src.rows; var i=0, j=0, k=0, vt=0, x=0, m3=0; var buf_node = jsfeat.cache.get_buffer(3 * w); var cpbuf_node = jsfeat.cache.get_buffer(((w+1)*3)<<2); - var buf = buf_node.u8;//new Uint8Array(w*3); - var cpbuf = cpbuf_node.i32;//new Int32Array((w+1)*3); + var buf = buf_node.u8; + var cpbuf = cpbuf_node.i32; var pixel = pixel_off; var sd = score_diff; var sy = Math.max(3, border); @@ -183,7 +188,8 @@ The references are: var sx = Math.max(3, border); var ex = Math.min((w - 3), (w - border)); var _count = 0, corners_cnt = 0, pt; - var score_func = pattern_size == 16 ? _cmp_score_16 : (pattern_size == 12 ? _cmp_score_12 : _cmp_score_8); + //var score_func = pattern_size == 16 ? _cmp_score_16 : (pattern_size == 12 ? _cmp_score_12 : _cmp_score_8); + var score_func = _cmp_score_16; var thresh_tab = threshold_tab; var threshold = _threshold; diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index 256bbfb..90331dd 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -388,72 +388,154 @@ } }, - box_blur: function(src, dst, hwin, scale) { - if (typeof scale === "undefined") { scale = 1; } - var win = (2*hwin+1)|0; - var w = src.cols, h = src.rows; - var data_type = src.type; - var _buf,buf_sz=(w*win+w)|0,src_d=src.data,dst_d=dst.data; - var sums = (w*win)|0; - var next_row=0,oldest_row=0; - var i=0, j=0, s0, s1; - var hsum,back; - var input = 0, output = (w*hwin - hwin) | 0; - - // select correct data type - var buf_node = jsfeat.cache.get_buffer(buf_sz<<2); - if((data_type&jsfeat.U8_t) || (data_type&jsfeat.S32_t)) { - _buf = buf_node.i32; - } else { - _buf = buf_node.f32; + box_blur_gray: function(src, dst, radius, options) { + if (typeof options === "undefined") { options = 0; } + var w=src.cols, h=src.rows; + var i,x,y; + var windowSize = radius * 2 + 1; + var radiusPlusOne = radius + 1; + var offset = 8192; + var scale = options&jsfeat.BOX_BLUR_NOSCALE ? 1 : (16384 * (1.0/(windowSize*windowSize)))|0; + + var tmp_buff = jsfeat.cache.get_buffer((w*h)<<2); + + var sum, dstIndex, srcIndex = 0, nextPixelIndex, previousPixelIndex; + var tmp = tmp_buff.i32; // to prevent overflow + var input, output; + var hold; + + // first pass + // no need to scale + input = src.data; + output = tmp; + for (y = 0; y < h; ++y) { + dstIndex = y; + sum = radiusPlusOne * input[srcIndex]; + + for(i = 1; i <= radius; ++i) { + sum += input[srcIndex + i]; + } + + nextPixelIndex = srcIndex + radiusPlusOne; + previousPixelIndex = srcIndex; + hold = input[previousPixelIndex]; + for(x = 0; x < radius; ++x, dstIndex += h) { + output[dstIndex] = sum; + sum += input[nextPixelIndex]- hold; + nextPixelIndex ++; + } + for(; x <= w-radiusPlusOne-2; x+=2, dstIndex += h<<1) { + output[dstIndex] = sum; + sum += input[nextPixelIndex]- input[previousPixelIndex]; + + output[dstIndex+h] = sum; + sum += input[nextPixelIndex+1]- input[previousPixelIndex+1]; + + nextPixelIndex +=2; + previousPixelIndex +=2; + } + for(; x < w-radiusPlusOne; ++x, dstIndex += h) { + output[dstIndex] = sum; + sum += input[nextPixelIndex]- input[previousPixelIndex]; + + nextPixelIndex ++; + previousPixelIndex ++; + } + + hold = input[nextPixelIndex-1]; + for(; x < w; ++x, dstIndex += h) { + output[dstIndex] = sum; + + sum += hold- input[previousPixelIndex]; + previousPixelIndex ++; + } + + srcIndex += w; } + // + // second pass + srcIndex = 0; + input = tmp; // this is a transpose + output = dst.data; + for (y = 0; y < w; ++y) { + dstIndex = y; + sum = radiusPlusOne * input[srcIndex]; + + for(i = 1; i <= radius; ++i) { + sum += input[srcIndex + i]; + } + + nextPixelIndex = srcIndex + radiusPlusOne; + previousPixelIndex = srcIndex; + hold = input[previousPixelIndex]; - for(; i < w; ++i){ _buf[sums+i] = 0; } + // dont scale result + if(scale == 1) { + for(x = 0; x < radius; ++x, dstIndex += w) { + output[dstIndex] = sum; + sum += input[nextPixelIndex]- hold; + nextPixelIndex ++; + } + for(; x <= h-radiusPlusOne-2; x+=2, dstIndex += w<<1) { + output[dstIndex] = sum; + sum += input[nextPixelIndex]- input[previousPixelIndex]; - for (i=0; i= win-1) { - for(j = win-1; j <= w-2; j+=2) { - s0 = _buf[sums+j]; s1 = _buf[sums+j+1]; - dst_d[output+j] = s0*scale; dst_d[output+j+1] = s1*scale; - _buf[sums+j] = s0 - _buf[oldest_row+j]; - _buf[sums+j+1] = s1 - _buf[oldest_row+j+1]; + nextPixelIndex +=2; + previousPixelIndex +=2; + } + for(; x < h-radiusPlusOne; ++x, dstIndex += w) { + output[dstIndex] = sum; + + sum += input[nextPixelIndex]- input[previousPixelIndex]; + nextPixelIndex ++; + previousPixelIndex ++; + } + hold = input[nextPixelIndex-1]; + for(; x < h; ++x, dstIndex += w) { + output[dstIndex] = sum; + + sum += hold- input[previousPixelIndex]; + previousPixelIndex ++; + } + } else { + for(x = 0; x < radius; ++x, dstIndex += w) { + output[dstIndex] = (sum*scale+offset)>>14; + sum += input[nextPixelIndex]- hold; + nextPixelIndex ++; } - for(; j < w; ++j) { - s0 = _buf[sums+j]; - dst_d[output+j] = s0*scale; - _buf[sums+j] = s0 - _buf[oldest_row+j]; + for(; x <= h-radiusPlusOne-2; x+=2, dstIndex += w<<1) { + output[dstIndex] = (sum*scale+offset)>>14; + sum += input[nextPixelIndex]- input[previousPixelIndex]; + + output[dstIndex+w] = (sum*scale+offset)>>14; + sum += input[nextPixelIndex+1]- input[previousPixelIndex+1]; + + nextPixelIndex +=2; + previousPixelIndex +=2; + } + for(; x < h-radiusPlusOne; ++x, dstIndex += w) { + output[dstIndex] = (sum*scale+offset)>>14; + + sum += input[nextPixelIndex]- input[previousPixelIndex]; + nextPixelIndex ++; + previousPixelIndex ++; + } + hold = input[nextPixelIndex-1]; + for(; x < h; ++x, dstIndex += w) { + output[dstIndex] = (sum*scale+offset)>>14; + + sum += hold- input[previousPixelIndex]; + previousPixelIndex ++; } - output += w; - oldest_row += w; - oldest_row = (oldest_row < sums) * oldest_row; } - input += w; - next_row += w; - next_row = (next_row < sums) * next_row; + + srcIndex += h; } - jsfeat.cache.put_buffer(buf_node); + jsfeat.cache.put_buffer(tmp_buff); }, gaussian_blur: function(src, dst, kernel_size, sigma) { diff --git a/src/jsfeat_struct.js b/src/jsfeat_struct.js index 44d1826..9e4280e 100755 --- a/src/jsfeat_struct.js +++ b/src/jsfeat_struct.js @@ -39,6 +39,9 @@ } })(); + // box blur option + var BOX_BLUR_NOSCALE = 0x01; + var data_t = (function () { function data_t(size_in_bytes) { this.size = size_in_bytes|0; @@ -139,6 +142,9 @@ global.C3_t = C3_t; global.C4_t = C4_t; + // options + global.BOX_BLUR_NOSCALE = BOX_BLUR_NOSCALE; + global.get_data_type = get_data_type; global.get_channel = get_channel; global.get_data_type_size = get_data_type_size; From cfe697ff56cda9a9fdc1ccbc8b7efe13d458d18a Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Mon, 19 Nov 2012 10:46:31 +0400 Subject: [PATCH 12/46] fix fast corners --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 2 +- src/jsfeat_fast_corners.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index 57d7902..3115504 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};self.Int32Array=self.Int32Array||Array;self.Uint32Array=self.Uint32Array||Array;self.Uint8Array=self.Uint8Array||Array;self.Float32Array=self.Float32Array||Array;(function(l){var h=256,f=512,e=1024,p=2048,o=4096;var s=1,i=2,a=3,j=4;var r=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var q=(function(){return function(t){return(t&65280)}})();var g=(function(){return function(t){return(t&255)}})();var b=(function(){return function(t){return r[(t&65280)>>8]}})();var d=1;var n=(function(){function t(u){this.size=u|0;this.buffer=new ArrayBuffer(u);this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer)}return t})();var k=(function(){function t(w,u,v){this.type=q(v)|0;this.channel=g(v)|0;this.cols=w|0;this.rows=u|0;this.buffer=new n((w*b(v)*g(v))*u);this.data=this.type&h?this.buffer.u8:(this.type&f?this.buffer.i32:this.buffer.f32)}t.prototype.set_data_type=function(u){this.type=q(u)|0;this.channel=g(u)|0;delete this.data;delete this.buffer;this.buffer=new n((this.cols*b(u)*g(u))*this.rows);this.data=this.type&h?this.buffer.u8:(this.type&f?this.buffer.i32:this.buffer.f32)};return t})();var m=(function(){function t(u){this.levels=u|0;this.data=new Array(u);this.pyrdown=jsfeat.imgproc.pyrdown}t.prototype.allocate=function(u,w,x){var v=this.levels;while(--v>=0){this.data[v]=new k(u>>v,w>>v,x)}};t.prototype.build=function(x,w){if(typeof w==="undefined"){w=true}var z=2,v=x,u=this.data[0];if(!w){var y=x.cols*x.rows;while(--y>=0){u.data[y]=x.data[y]}}u=this.data[1];this.pyrdown(v,u);for(;zh.size){h.buffer=new ArrayBuffer(g);h.u8=new Uint8Array(h.buffer);h.i32=new Int32Array(h.buffer);h.f32=new Float32Array(h.buffer);h.size=g}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(q,H,l,k){if(typeof k==="undefined"){k=0}var u=q.cols,D=q.rows;var C,t,s;var A=l*2+1;var n=l+1;var o=8192;var G=k&jsfeat.BOX_BLUR_NOSCALE?1:(16384*(1/(A*A)))|0;var B=jsfeat.cache.get_buffer((u*D)<<2);var g,E,m=0,p,j;var F=B.i32;var v,r;var z;v=q.data;r=F;for(s=0;s>14;g+=v[p]-z;p++}for(;t<=D-n-2;t+=2,E+=u<<1){r[E]=(g*G+o)>>14;g+=v[p]-v[j];r[E+u]=(g*G+o)>>14;g+=v[p+1]-v[j+1];p+=2;j+=2}for(;t>14;g+=v[p]-v[j];p++;j++}z=v[p-1];for(;t>14;g+=z-v[j];j++}}m+=D}jsfeat.cache.put_buffer(B)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(i,o){var r=i.cols,m=i.rows;var l=r>>1,n=m>>1;var q=0,p=0,g=0,t=0,s=0;var k=i.data,j=o.data;for(p=0;p>2;j[s+1]=(k[t+2]+k[t+3]+k[t+r+2]+k[t+r+3]+2)>>2}for(;q>2}g+=r<<1}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,pattern_size);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(f){var l=f.stage_classifier.length;for(var g=0;g=0){d=f[r];o[r]=h|(d<<16)|(d<<8)|d}l.putImageData(v,0,0);jsfeat.cache.put_buffer(j)}this.interval=t;this.scale=Math.pow(2,1/(this.interval+1));this.next=(this.interval+1)|0;this.scale_to=(Math.log(Math.min(e.width/p,e.height/x))/Math.log(this.scale))|0;var q=document.createElement("canvas");q.width=e.width;q.height=e.height;var s=q.getContext("2d");var w=new Array((this.scale_to+this.next*2)*4);w[0]={width:e.width,height:e.height,data:e.getContext("2d").getImageData(0,0,e.width,e.height).data};var u,g;for(r=1;r<=this.interval;++r){u=(e.width/Math.pow(this.scale,r))|0;g=(e.height/Math.pow(this.scale,r))|0;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next*2;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,1,0,e.width-1,e.height,0,0,u-2,g);w[r*4+1]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,0,1,e.width,e.height-1,0,0,u,g-2);w[r*4+2]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,1,1,e.width-1,e.height-1,0,0,u-2,g-2);w[r*4+3]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}return w},detect:function(z,H){var g=this.interval;var J=this.scale;var l=this.next;var h=this.scale_to;var X=0,W=0,V=0,S=0,O=0,N=0,Q=0,w=0,F=0,E=0,R=0,Z=0,I=0,Y=0,t=0,U=0,e=0;var B=0,T,M,A,D,C,K=true,m=true;var u=1,s=1;var r=[0,1,0,1];var o=[0,0,1,1];var G=[];var v=[],d=[0,0,0];var L=[0,0,0];var P=[0,0,0];for(X=0;X>2);e=z[t+(l<<3)].height-(H.height>>2);L[0]=z[t].width<<2;L[1]=z[t+(l<<2)].width<<2;L[2]=z[t+(l<<3)].width<<2;P[0]=(z[t].width<<4)-(U<<4);P[1]=(z[t+(l<<2)].width<<3)-(U<<3);P[2]=(z[t+(l<<3)].width<<2)-(U<<2);w=H.stage_classifier.length;for(W=0;W=0){R=v[D.pz[Y]][d[D.pz[Y]]+D.px[Y]];if(R=0){S=v[D.nz[Y]][d[D.nz[Y]]+D.nx[Y]];if(S>I){if(Z<=S){m=false;break}I=S}}}B+=(m)?T[(V<<1)+1]:T[V<<1]}}if(Br[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();a.bbf=b})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};self.Int32Array=self.Int32Array||Array;self.Uint32Array=self.Uint32Array||Array;self.Uint8Array=self.Uint8Array||Array;self.Float32Array=self.Float32Array||Array;(function(l){var h=256,f=512,e=1024,p=2048,o=4096;var s=1,i=2,a=3,j=4;var r=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var q=(function(){return function(t){return(t&65280)}})();var g=(function(){return function(t){return(t&255)}})();var b=(function(){return function(t){return r[(t&65280)>>8]}})();var d=1;var n=(function(){function t(u){this.size=u|0;this.buffer=new ArrayBuffer(u);this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer)}return t})();var k=(function(){function t(w,u,v){this.type=q(v)|0;this.channel=g(v)|0;this.cols=w|0;this.rows=u|0;this.buffer=new n((w*b(v)*g(v))*u);this.data=this.type&h?this.buffer.u8:(this.type&f?this.buffer.i32:this.buffer.f32)}t.prototype.set_data_type=function(u){this.type=q(u)|0;this.channel=g(u)|0;delete this.data;delete this.buffer;this.buffer=new n((this.cols*b(u)*g(u))*this.rows);this.data=this.type&h?this.buffer.u8:(this.type&f?this.buffer.i32:this.buffer.f32)};return t})();var m=(function(){function t(u){this.levels=u|0;this.data=new Array(u);this.pyrdown=jsfeat.imgproc.pyrdown}t.prototype.allocate=function(u,w,x){var v=this.levels;while(--v>=0){this.data[v]=new k(u>>v,w>>v,x)}};t.prototype.build=function(x,w){if(typeof w==="undefined"){w=true}var z=2,v=x,u=this.data[0];if(!w){var y=x.cols*x.rows;while(--y>=0){u.data[y]=x.data[y]}}u=this.data[1];this.pyrdown(v,u);for(;zh.size){h.buffer=new ArrayBuffer(g);h.u8=new Uint8Array(h.buffer);h.i32=new Int32Array(h.buffer);h.f32=new Float32Array(h.buffer);h.size=g}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(q,H,l,k){if(typeof k==="undefined"){k=0}var u=q.cols,D=q.rows;var C,t,s;var A=l*2+1;var n=l+1;var o=8192;var G=k&jsfeat.BOX_BLUR_NOSCALE?1:(16384*(1/(A*A)))|0;var B=jsfeat.cache.get_buffer((u*D)<<2);var g,E,m=0,p,j;var F=B.i32;var v,r;var z;v=q.data;r=F;for(s=0;s>14;g+=v[p]-z;p++}for(;t<=D-n-2;t+=2,E+=u<<1){r[E]=(g*G+o)>>14;g+=v[p]-v[j];r[E+u]=(g*G+o)>>14;g+=v[p+1]-v[j+1];p+=2;j+=2}for(;t>14;g+=v[p]-v[j];p++;j++}z=v[p-1];for(;t>14;g+=z-v[j];j++}}m+=D}jsfeat.cache.put_buffer(B)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(i,o){var r=i.cols,m=i.rows;var l=r>>1,n=m>>1;var q=0,p=0,g=0,t=0,s=0;var k=i.data,j=o.data;for(p=0;p>2;j[s+1]=(k[t+2]+k[t+3]+k[t+r+2]+k[t+r+3]+2)>>2}for(;q>2}g+=r<<1}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(f){var l=f.stage_classifier.length;for(var g=0;g=0){d=f[r];o[r]=h|(d<<16)|(d<<8)|d}l.putImageData(v,0,0);jsfeat.cache.put_buffer(j)}this.interval=t;this.scale=Math.pow(2,1/(this.interval+1));this.next=(this.interval+1)|0;this.scale_to=(Math.log(Math.min(e.width/p,e.height/x))/Math.log(this.scale))|0;var q=document.createElement("canvas");q.width=e.width;q.height=e.height;var s=q.getContext("2d");var w=new Array((this.scale_to+this.next*2)*4);w[0]={width:e.width,height:e.height,data:e.getContext("2d").getImageData(0,0,e.width,e.height).data};var u,g;for(r=1;r<=this.interval;++r){u=(e.width/Math.pow(this.scale,r))|0;g=(e.height/Math.pow(this.scale,r))|0;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next*2;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,1,0,e.width-1,e.height,0,0,u-2,g);w[r*4+1]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,0,1,e.width,e.height-1,0,0,u,g-2);w[r*4+2]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,1,1,e.width-1,e.height-1,0,0,u-2,g-2);w[r*4+3]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}return w},detect:function(z,H){var g=this.interval;var J=this.scale;var l=this.next;var h=this.scale_to;var X=0,W=0,V=0,S=0,O=0,N=0,Q=0,w=0,F=0,E=0,R=0,Z=0,I=0,Y=0,t=0,U=0,e=0;var B=0,T,M,A,D,C,K=true,m=true;var u=1,s=1;var r=[0,1,0,1];var o=[0,0,1,1];var G=[];var v=[],d=[0,0,0];var L=[0,0,0];var P=[0,0,0];for(X=0;X>2);e=z[t+(l<<3)].height-(H.height>>2);L[0]=z[t].width<<2;L[1]=z[t+(l<<2)].width<<2;L[2]=z[t+(l<<3)].width<<2;P[0]=(z[t].width<<4)-(U<<4);P[1]=(z[t+(l<<2)].width<<3)-(U<<3);P[2]=(z[t+(l<<3)].width<<2)-(U<<2);w=H.stage_classifier.length;for(W=0;W=0){R=v[D.pz[Y]][d[D.pz[Y]]+D.px[Y]];if(R=0){S=v[D.nz[Y]][d[D.nz[Y]]+D.nx[Y]];if(S>I){if(Z<=S){m=false;break}I=S}}}B+=(m)?T[(V<<1)+1]:T[V<<1]}}if(Br[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();a.bbf=b})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index b536f27..069b69e 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -1995,7 +1995,7 @@ The references are: var v=0,tab=0,d=0,ncorners=0,cornerpos=0,curr=0,ptr=0,prev=0,pprev=0; var jp1=0,jm1=0,score=0; - _cmp_offsets(pixel, w, pattern_size); + _cmp_offsets(pixel, w, 16); // local vars are faster? var pixel0 = pixel[0]; diff --git a/src/jsfeat_fast_corners.js b/src/jsfeat_fast_corners.js index dcd425a..bf99dd2 100755 --- a/src/jsfeat_fast_corners.js +++ b/src/jsfeat_fast_corners.js @@ -196,7 +196,7 @@ The references are: var v=0,tab=0,d=0,ncorners=0,cornerpos=0,curr=0,ptr=0,prev=0,pprev=0; var jp1=0,jm1=0,score=0; - _cmp_offsets(pixel, w, pattern_size); + _cmp_offsets(pixel, w, 16); // local vars are faster? var pixel0 = pixel[0]; From d6fac1005ffbeb15538977755da4427adbc26c39 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Thu, 6 Dec 2012 14:32:15 +0400 Subject: [PATCH 13/46] new functionality added Linear Algebra and Matrix Math modules added new Feature detectors improved and extended matrixt_t initiation with custom data --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 1598 +++++++++++++++++++++++++++++++++++++--- compile/build.xml | 4 + src/jsfeat.js | 1 + src/jsfeat_cache.js | 28 +- src/jsfeat_imgproc.js | 158 ++-- src/jsfeat_linalg.js | 721 ++++++++++++++++++ src/jsfeat_mat_math.js | 140 ++++ src/jsfeat_struct.js | 44 +- src/jsfeat_yape.js | 410 +++++++++++ src/jsfeat_yape06.js | 95 +++ 11 files changed, 3024 insertions(+), 177 deletions(-) create mode 100644 src/jsfeat_linalg.js create mode 100644 src/jsfeat_mat_math.js create mode 100644 src/jsfeat_yape.js create mode 100644 src/jsfeat_yape06.js diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index 3115504..c721956 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};self.Int32Array=self.Int32Array||Array;self.Uint32Array=self.Uint32Array||Array;self.Uint8Array=self.Uint8Array||Array;self.Float32Array=self.Float32Array||Array;(function(l){var h=256,f=512,e=1024,p=2048,o=4096;var s=1,i=2,a=3,j=4;var r=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var q=(function(){return function(t){return(t&65280)}})();var g=(function(){return function(t){return(t&255)}})();var b=(function(){return function(t){return r[(t&65280)>>8]}})();var d=1;var n=(function(){function t(u){this.size=u|0;this.buffer=new ArrayBuffer(u);this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer)}return t})();var k=(function(){function t(w,u,v){this.type=q(v)|0;this.channel=g(v)|0;this.cols=w|0;this.rows=u|0;this.buffer=new n((w*b(v)*g(v))*u);this.data=this.type&h?this.buffer.u8:(this.type&f?this.buffer.i32:this.buffer.f32)}t.prototype.set_data_type=function(u){this.type=q(u)|0;this.channel=g(u)|0;delete this.data;delete this.buffer;this.buffer=new n((this.cols*b(u)*g(u))*this.rows);this.data=this.type&h?this.buffer.u8:(this.type&f?this.buffer.i32:this.buffer.f32)};return t})();var m=(function(){function t(u){this.levels=u|0;this.data=new Array(u);this.pyrdown=jsfeat.imgproc.pyrdown}t.prototype.allocate=function(u,w,x){var v=this.levels;while(--v>=0){this.data[v]=new k(u>>v,w>>v,x)}};t.prototype.build=function(x,w){if(typeof w==="undefined"){w=true}var z=2,v=x,u=this.data[0];if(!w){var y=x.cols*x.rows;while(--y>=0){u.data[y]=x.data[y]}}u=this.data[1];this.pyrdown(v,u);for(;zh.size){h.buffer=new ArrayBuffer(g);h.u8=new Uint8Array(h.buffer);h.i32=new Int32Array(h.buffer);h.f32=new Float32Array(h.buffer);h.size=g}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(q,H,l,k){if(typeof k==="undefined"){k=0}var u=q.cols,D=q.rows;var C,t,s;var A=l*2+1;var n=l+1;var o=8192;var G=k&jsfeat.BOX_BLUR_NOSCALE?1:(16384*(1/(A*A)))|0;var B=jsfeat.cache.get_buffer((u*D)<<2);var g,E,m=0,p,j;var F=B.i32;var v,r;var z;v=q.data;r=F;for(s=0;s>14;g+=v[p]-z;p++}for(;t<=D-n-2;t+=2,E+=u<<1){r[E]=(g*G+o)>>14;g+=v[p]-v[j];r[E+u]=(g*G+o)>>14;g+=v[p+1]-v[j+1];p+=2;j+=2}for(;t>14;g+=v[p]-v[j];p++;j++}z=v[p-1];for(;t>14;g+=z-v[j];j++}}m+=D}jsfeat.cache.put_buffer(B)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(i,o){var r=i.cols,m=i.rows;var l=r>>1,n=m>>1;var q=0,p=0,g=0,t=0,s=0;var k=i.data,j=o.data;for(p=0;p>2;j[s+1]=(k[t+2]+k[t+3]+k[t+r+2]+k[t+r+3]+2)>>2}for(;q>2}g+=r<<1}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(f){var l=f.stage_classifier.length;for(var g=0;g=0){d=f[r];o[r]=h|(d<<16)|(d<<8)|d}l.putImageData(v,0,0);jsfeat.cache.put_buffer(j)}this.interval=t;this.scale=Math.pow(2,1/(this.interval+1));this.next=(this.interval+1)|0;this.scale_to=(Math.log(Math.min(e.width/p,e.height/x))/Math.log(this.scale))|0;var q=document.createElement("canvas");q.width=e.width;q.height=e.height;var s=q.getContext("2d");var w=new Array((this.scale_to+this.next*2)*4);w[0]={width:e.width,height:e.height,data:e.getContext("2d").getImageData(0,0,e.width,e.height).data};var u,g;for(r=1;r<=this.interval;++r){u=(e.width/Math.pow(this.scale,r))|0;g=(e.height/Math.pow(this.scale,r))|0;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next*2;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,1,0,e.width-1,e.height,0,0,u-2,g);w[r*4+1]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,0,1,e.width,e.height-1,0,0,u,g-2);w[r*4+2]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,1,1,e.width-1,e.height-1,0,0,u-2,g-2);w[r*4+3]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}return w},detect:function(z,H){var g=this.interval;var J=this.scale;var l=this.next;var h=this.scale_to;var X=0,W=0,V=0,S=0,O=0,N=0,Q=0,w=0,F=0,E=0,R=0,Z=0,I=0,Y=0,t=0,U=0,e=0;var B=0,T,M,A,D,C,K=true,m=true;var u=1,s=1;var r=[0,1,0,1];var o=[0,0,1,1];var G=[];var v=[],d=[0,0,0];var L=[0,0,0];var P=[0,0,0];for(X=0;X>2);e=z[t+(l<<3)].height-(H.height>>2);L[0]=z[t].width<<2;L[1]=z[t+(l<<2)].width<<2;L[2]=z[t+(l<<3)].width<<2;P[0]=(z[t].width<<4)-(U<<4);P[1]=(z[t+(l<<2)].width<<3)-(U<<3);P[2]=(z[t+(l<<3)].width<<2)-(U<<2);w=H.stage_classifier.length;for(W=0;W=0){R=v[D.pz[Y]][d[D.pz[Y]]+D.px[Y]];if(R=0){S=v[D.nz[Y]][d[D.nz[Y]]+D.nx[Y]];if(S>I){if(Z<=S){m=false;break}I=S}}}B+=(m)?T[(V<<1)+1]:T[V<<1]}}if(Br[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();a.bbf=b})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};self.Int32Array=self.Int32Array||Array;self.Uint32Array=self.Uint32Array||Array;self.Uint8Array=self.Uint8Array||Array;self.Float32Array=self.Float32Array||Array;self.Float64Array=self.Float64Array||Array;(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.buffer=new r((B*b(A)*h(A))*z)}else{this.buffer=y}this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}x.prototype.set_data_type=function(y){this.type=u(y)|0;this.channel=h(y)|0;delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(y)*h(y))*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.set_data=function(z){var y=z.length;while(--y>=0){this.data[y]=z[y]}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{transpose:function(f,d){var l=0,h=0,k=d.rows,c=d.cols;var n=0,e=0,m=0;var o=d.data,g=f.data;for(;lg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=3;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;H=Y*D[K+2]+O*D[J+2];G=-O*D[K+2]+Y*D[J+2];D[K+2]=H;D[J+2]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(s,K,n,l){if(typeof l==="undefined"){l=0}var A=s.cols,F=s.rows,t=F<<1,z=A<<1;var E=0,v=0,u=0,m=0;var C=((n<<1)+1)|0;var p=(n+1)|0,I=(p+1)|0;var q=8192;var J=l&jsfeat.BOX_BLUR_NOSCALE?1:(16384/(C*C)+0.5)|0;var D=jsfeat.cache.get_buffer((A*F)<<2);var j=0,H=0,o=0,r=0,k=0;var G=D.i32;var g=s.data;var B=0;for(u=0;u>14;j+=G[r]-B;r++}for(;v>14;j+=G[r]-G[k];g[H+A]=(j*J+q)>>14;j+=G[r+1]-G[k+1];r+=2;k+=2}for(;v>14;j+=G[r]-G[k];r++;k++}B=G[r-1];for(;v>14;j+=B-G[k];k++}o+=F}}jsfeat.cache.put_buffer(D)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(i,o){var r=i.cols,m=i.rows;var l=r>>1,n=m>>1;var q=0,p=0,g=0,t=0,s=0;var k=i.data,j=o.data;for(p=0;p>2;j[s+1]=(k[t+2]+k[t+3]+k[t+r+2]+k[t+r+3]+2)>>2}for(;q>2}g+=r<<1}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(f){var l=f.stage_classifier.length;for(var g=0;g=0){d=f[r];o[r]=h|(d<<16)|(d<<8)|d}l.putImageData(v,0,0);jsfeat.cache.put_buffer(j)}this.interval=t;this.scale=Math.pow(2,1/(this.interval+1));this.next=(this.interval+1)|0;this.scale_to=(Math.log(Math.min(e.width/p,e.height/x))/Math.log(this.scale))|0;var q=document.createElement("canvas");q.width=e.width;q.height=e.height;var s=q.getContext("2d");var w=new Array((this.scale_to+this.next*2)*4);w[0]={width:e.width,height:e.height,data:e.getContext("2d").getImageData(0,0,e.width,e.height).data};var u,g;for(r=1;r<=this.interval;++r){u=(e.width/Math.pow(this.scale,r))|0;g=(e.height/Math.pow(this.scale,r))|0;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next*2;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,1,0,e.width-1,e.height,0,0,u-2,g);w[r*4+1]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,0,1,e.width,e.height-1,0,0,u,g-2);w[r*4+2]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,1,1,e.width-1,e.height-1,0,0,u-2,g-2);w[r*4+3]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}return w},detect:function(z,H){var g=this.interval;var J=this.scale;var l=this.next;var h=this.scale_to;var X=0,W=0,V=0,S=0,O=0,N=0,Q=0,w=0,F=0,E=0,R=0,Z=0,I=0,Y=0,t=0,U=0,e=0;var B=0,T,M,A,D,C,K=true,m=true;var u=1,s=1;var r=[0,1,0,1];var o=[0,0,1,1];var G=[];var v=[],d=[0,0,0];var L=[0,0,0];var P=[0,0,0];for(X=0;X>2);e=z[t+(l<<3)].height-(H.height>>2);L[0]=z[t].width<<2;L[1]=z[t+(l<<2)].width<<2;L[2]=z[t+(l<<3)].width<<2;P[0]=(z[t].width<<4)-(U<<4);P[1]=(z[t+(l<<2)].width<<3)-(U<<3);P[2]=(z[t+(l<<3)].width<<2)-(U<<2);w=H.stage_classifier.length;for(W=0;W=0){R=v[D.pz[Y]][d[D.pz[Y]]+D.px[Y]];if(R=0){S=v[D.nz[Y]][d[D.nz[Y]]+D.nx[Y]];if(S>I){if(Z<=S){m=false;break}I=S}}}B+=(m)?T[(V<<1)+1]:T[V<<1]}}if(Br[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();a.bbf=b})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index 069b69e..12e1f2c 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -10,6 +10,7 @@ self.Int32Array = self.Int32Array || Array; self.Uint32Array = self.Uint32Array || Array; self.Uint8Array = self.Uint8Array || Array; self.Float32Array = self.Float32Array || Array; +self.Float64Array = self.Float64Array || Array; /** * @author Eugene Zatepyakin / http://inspirit.ru/ @@ -19,6 +20,10 @@ self.Float32Array = self.Float32Array || Array; "use strict"; // + // CONSTANTS + var EPSILON = 0.0000001192092896; + var FLT_MIN = 1E-37; + // implementation from CCV project // currently working only with u8,s32,f32 var U8_t = 0x0100, @@ -54,28 +59,42 @@ self.Float32Array = self.Float32Array || Array; // box blur option var BOX_BLUR_NOSCALE = 0x01; + // svd options + var SVD_U_T = 0x01; + var SVD_V_T = 0x02; var data_t = (function () { - function data_t(size_in_bytes) { - this.size = size_in_bytes|0; - this.buffer = new ArrayBuffer(size_in_bytes); + function data_t(size_in_bytes, buffer) { + // we need align size to multiple of 8 + this.size = ((size_in_bytes + 7) | 0) & -8; + if (typeof buffer === "undefined") { + this.buffer = new ArrayBuffer(this.size); + } else { + this.buffer = buffer; + this.size = buffer.length; + } this.u8 = new Uint8Array(this.buffer); this.i32 = new Int32Array(this.buffer); this.f32 = new Float32Array(this.buffer); + this.f64 = new Float64Array(this.buffer); } return data_t; })(); var matrix_t = (function () { // columns, rows, data_type - function matrix_t(c, r, data_type) { + function matrix_t(c, r, data_type, data_buffer) { this.type = get_data_type(data_type)|0; this.channel = get_channel(data_type)|0; this.cols = c|0; this.rows = r|0; - this.buffer = new data_t((c * get_data_type_size(data_type) * get_channel(data_type)) * r); + if (typeof data_buffer === "undefined") { + this.buffer = new data_t((c * get_data_type_size(data_type) * get_channel(data_type)) * r); + } else { + this.buffer = data_buffer; + } // data user asked for - this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : this.buffer.f32); + this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : (this.type&F32_t ? this.buffer.f32 : this.buffer.f64)); } matrix_t.prototype.set_data_type = function(data_type) { this.type = get_data_type(data_type)|0; @@ -85,7 +104,13 @@ self.Float32Array = self.Float32Array || Array; delete this.buffer; // this.buffer = new data_t((this.cols * get_data_type_size(data_type) * get_channel(data_type)) * this.rows); - this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : this.buffer.f32); + this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : (this.type&F32_t ? this.buffer.f32 : this.buffer.f64)); + } + matrix_t.prototype.set_data = function(array) { + var i = array.length; + while(--i >= 0) { + this.data[i] = array[i]; + } } return matrix_t; })(); @@ -155,8 +180,14 @@ self.Float32Array = self.Float32Array || Array; global.C3_t = C3_t; global.C4_t = C4_t; + // constants + global.EPSILON = EPSILON; + global.FLT_MIN = FLT_MIN; + // options global.BOX_BLUR_NOSCALE = BOX_BLUR_NOSCALE; + global.SVD_U_T = SVD_U_T; + global.SVD_V_T = SVD_V_T; global.get_data_type = get_data_type; global.get_channel = get_channel; @@ -186,11 +217,23 @@ self.Float32Array = self.Float32Array || Array; var _pool_node_t = (function () { function _pool_node_t(size_in_bytes) { this.next = null; - this.size = size_in_bytes|0; - this.buffer = new ArrayBuffer(size_in_bytes); - this.u8 = new Uint8Array(this.buffer); - this.i32 = new Int32Array(this.buffer); - this.f32 = new Float32Array(this.buffer); + this.data = new jsfeat.data_t(size_in_bytes); + this.size = this.data.size; + this.buffer = this.data.buffer; + this.u8 = this.data.u8; + this.i32 = this.data.i32; + this.f32 = this.data.f32; + this.f64 = this.data.f64; + } + _pool_node_t.prototype.resize = function(size_in_bytes) { + delete this.data; + this.data = new jsfeat.data_t(size_in_bytes); + this.size = this.data.size; + this.buffer = this.data.buffer; + this.u8 = this.data.u8; + this.i32 = this.data.i32; + this.f32 = this.data.f32; + this.f64 = this.data.f64; } return _pool_node_t; })(); @@ -217,11 +260,7 @@ self.Float32Array = self.Float32Array || Array; _pool_size--; if(size_in_bytes > node.size) { - node.buffer = new ArrayBuffer(size_in_bytes); - node.u8 = new Uint8Array(node.buffer); - node.i32 = new Int32Array(node.buffer); - node.f32 = new Float32Array(node.buffer); - node.size = size_in_bytes; + node.resize(size_in_bytes); } return node; @@ -539,6 +578,867 @@ self.Float32Array = self.Float32Array || Array; })(jsfeat); +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + */ + +(function(global) { + "use strict"; + // + + var matmath = (function() { + + return { + transpose: function(At, A) { + var i=0,j=0,nrows=A.rows,ncols=A.cols; + var Ai=0,Ati=0,pAt=0; + var ad=A.data,atd=At.data; + + for (; i < nrows; Ati += 1, Ai += ncols, i++) { + pAt = Ati; + for (j = 0; j < ncols; pAt += nrows, j++) atd[pAt] = ad[Ai+j]; + } + }, + + // C = A * B + multiply: function(C, A, B) { + var i=0,j=0,k=0; + var Ap=0,pA=0,pB=0,p_B=0,Cp=0; + var ncols=A.cols,nrows=A.rows,mcols=B.cols; + var ad=A.data,bd=B.data,cd=C.data; + var sum=0.0; + + for (; i < nrows; Ap += ncols, i++) { + for (p_B = 0, j = 0; j < mcols; Cp++, p_B++, j++) { + pB = p_B; + pA = Ap; + sum = 0.0; + for (k = 0; k < ncols; pA++, pB += mcols, k++) { + sum += ad[pA] * bd[pB]; + } + cd[Cp] = sum; + } + } + }, + + // C = A * B' + multiply_ABt: function(C, A, B) { + var i=0,j=0,k=0; + var Ap=0,pA=0,pB=0,Cp=0; + var ncols=A.cols,nrows=A.rows,mrows=B.rows; + var ad=A.data,bd=B.data,cd=C.data; + var sum=0.0; + + for (; i < nrows; Ap += ncols, i++) { + for (pB = 0, j = 0; j < mrows; Cp++, j++) { + pA = Ap; + sum = 0.0; + for (k = 0; k < ncols; pA++, pB++, k++) { + sum += ad[pA] * bd[pB]; + } + cd[Cp] = sum; + } + } + }, + + // C = A' * B + multiply_AtB: function(C, A, B) { + var i=0,j=0,k=0; + var Ap=0,pA=0,pB=0,p_B=0,Cp=0; + var ncols=A.cols,nrows=A.rows,mcols=B.cols; + var ad=A.data,bd=B.data,cd=C.data; + var sum=0.0; + + for (; i < ncols; Ap++, i++) { + for (p_B = 0, j = 0; j < mcols; Cp++, p_B++, j++) { + pB = p_B; + pA = Ap; + sum = 0.0; + for (k = 0; k < nrows; pA += ncols, pB += mcols, k++) { + sum += ad[pA] * bd[pB]; + } + cd[Cp] = sum; + } + } + }, + + // C = A * A' + multiply_AAt: function(C, A) { + var i=0,j=0,k=0; + var pCdiag=0,p_A=0,pA=0,pB=0,pC=0,pCt=0; + var ncols=A.cols,nrows=A.rows; + var ad=A.data,cd=C.data; + var sum=0.0; + + for (; i < nrows; pCdiag += nrows + 1, p_A = pA, i++) { + pC = pCdiag; + pCt = pCdiag; + pB = p_A; + for (j = i; j < nrows; pC++, pCt += nrows, j++) { + pA = p_A; + sum = 0.0; + for (k = 0; k < ncols; k++) { + sum += ad[pA++] * ad[pB++]; + } + cd[pC] = sum + cd[pCt] = sum; + } + } + }, + + // C = A' * A + multiply_AtA: function(C, A) { + var i=0,j=0,k=0; + var p_A=0,pA=0,pB=0,p_C=0,pC=0,p_CC=0; + var ncols=A.cols,nrows=A.rows; + var ad=A.data,cd=C.data; + var sum=0.0; + + for (; i < ncols; p_C += ncols, i++) { + p_A = i; + p_CC = p_C + i; + pC = p_CC; + for (j = i; j < ncols; pC++, p_CC += ncols, j++) { + pA = p_A; + pB = j; + sum = 0.0; + for (k = 0; k < nrows; pA += ncols, pB += ncols, k++) { + sum += ad[pA] * ad[pB]; + } + cd[pC] = sum + cd[p_CC] = sum; + } + } + } + }; + + })(); + + global.matmath = matmath; + +})(jsfeat); +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + */ + +(function(global) { + "use strict"; + // + + var linalg = (function() { + + var swap = function(A, i0, i1, t) { + t = A[i0]; + A[i0] = A[i1]; + A[i1] = t; + } + + var hypot = function(a, b) { + a = Math.abs(a); + b = Math.abs(b); + if( a > b ) { + b /= a; + return a*Math.sqrt(1.0 + b*b); + } + if( b > 0 ) { + a /= b; + return b*Math.sqrt(1.0 + a*a); + } + return 0.0; + } + + var JacobiImpl = function(A, astep, W, V, vstep, n) { + var eps = jsfeat.EPSILON; + var i=0,j=0,k=0,m=0,l=0,idx=0,_in=0,_in2=0; + var iters=0,max_iter=n*n*30; + var mv=0.0,val=0.0,p=0.0,y=0.0,t=0.0,s=0.0,c=0.0,a0=0.0,b0=0.0; + + var indR_buff = jsfeat.cache.get_buffer(n<<2); + var indC_buff = jsfeat.cache.get_buffer(n<<2); + var indR = indR_buff.i32; + var indC = indC_buff.i32; + + if(V) { + for(; i < n; i++) { + k = i*vstep; + for(j = 0; j < n; j++) { + V[k + j] = 0.0; + } + V[k + i] = 1.0; + } + } + + for(k = 0; k < n; k++) { + W[k] = A[(astep + 1)*k]; + if(k < n - 1) { + for(m = k+1, mv = Math.abs(A[astep*k + m]), i = k+2; i < n; i++) { + val = Math.abs(A[astep*k+i]); + if(mv < val) + mv = val, m = i; + } + indR[k] = m; + } + if(k > 0) { + for(m = 0, mv = Math.abs(A[k]), i = 1; i < k; i++) { + val = Math.abs(A[astep*i+k]); + if(mv < val) + mv = val, m = i; + } + indC[k] = m; + } + } + + if(n > 1) for( ; iters < max_iter; iters++) { + // find index (k,l) of pivot p + for(k = 0, mv = Math.abs(A[indR[0]]), i = 1; i < n-1; i++) { + val = Math.abs(A[astep*i + indR[i]]); + if( mv < val ) + mv = val, k = i; + } + l = indR[k]; + for(i = 1; i < n; i++) { + val = Math.abs(A[astep*indC[i] + i]); + if( mv < val ) + mv = val, k = indC[i], l = i; + } + + p = A[astep*k + l]; + + if(Math.abs(p) <= eps) break; + + y = (W[l] - W[k])*0.5; + t = Math.abs(y) + hypot(p, y); + s = hypot(p, t); + c = t/s; + s = p/s; t = (p/t)*p; + if(y < 0) + s = -s, t = -t; + A[astep*k + l] = 0; + + W[k] -= t; + W[l] += t; + + // rotate rows and columns k and l + for (i = 0; i < k; i++) { + _in = (astep * i + k); + _in2 = (astep * i + l); + a0 = A[_in]; + b0 = A[_in2]; + A[_in] = a0 * c - b0 * s; + A[_in2] = a0 * s + b0 * c; + } + for (i = (k + 1); i < l; i++) { + _in = (astep * k + i); + _in2 = (astep * i + l); + a0 = A[_in]; + b0 = A[_in2]; + A[_in] = a0 * c - b0 * s; + A[_in2] = a0 * s + b0 * c; + } + i = l + 1; + _in = (astep * k + i); + _in2 = (astep * l + i); + for (; i < n; i++, _in++, _in2++) { + a0 = A[_in]; + b0 = A[_in2]; + A[_in] = a0 * c - b0 * s; + A[_in2] = a0 * s + b0 * c; + } + + // rotate eigenvectors + if (V) { + _in = vstep * k; + _in2 = vstep * l; + for (i = 0; i < n; i++, _in++, _in2++) { + a0 = V[_in]; + b0 = V[_in2]; + V[_in] = a0 * c - b0 * s; + V[_in2] = a0 * s + b0 * c; + } + } + + for(j = 0; j < 2; j++) { + idx = j == 0 ? k : l; + if(idx < n - 1) { + for(m = idx+1, mv = Math.abs(A[astep*idx + m]), i = idx+2; i < n; i++) { + val = Math.abs(A[astep*idx+i]); + if( mv < val ) + mv = val, m = i; + } + indR[idx] = m; + } + if(idx > 0) { + for(m = 0, mv = Math.abs(A[idx]), i = 1; i < idx; i++) { + val = Math.abs(A[astep*i+idx]); + if( mv < val ) + mv = val, m = i; + } + indC[idx] = m; + } + } + } + + // sort eigenvalues & eigenvectors + for(k = 0; k < n-1; k++) { + m = k; + for(i = k+1; i < n; i++) { + if(W[m] < W[i]) + m = i; + } + if(k != m) { + swap(W, m, k, mv); + if(V) { + for(i = 0; i < n; i++) { + swap(V, vstep*m + i, vstep*k + i, mv); + } + } + } + } + + + jsfeat.cache.put_buffer(indR_buff); + jsfeat.cache.put_buffer(indC_buff); + } + + var JacobiSVDImpl = function(At, astep, _W, Vt, vstep, m, n, n1) { + var eps = jsfeat.EPSILON * 10.0; + var minval = jsfeat.FLT_MIN; + var i=0,j=0,k=0,iter=0,max_iter=Math.max(m, 30); + var Ai=0,Aj=0,Vi=0,Vj=0,changed=0; + var c=0.0, s=0.0, t=0.0; + var t0=0.0,t1=0.0,sd=0.0,beta=0.0,gamma=0.0,delta=0.0,a=0.0,p=0.0,b=0.0; + var seed = 0x1234; + var val=0.0,val0=0.0,asum=0.0; + + var W_buff = jsfeat.cache.get_buffer(n<<3); + var W = W_buff.f64; + + for(; i < n; i++) { + for(k = 0, sd = 0; k < m; k++) { + t = At[i*astep + k]; + sd += t*t; + } + W[i] = sd; + + if(Vt) { + for(k = 0; k < n; k++) { + Vt[i*vstep + k] = 0; + } + Vt[i*vstep + i] = 1; + } + } + + for(; iter < max_iter; iter++) { + changed = 0; + + for(i = 0; i < n-1; i++) { + for(j = i+1; j < n; j++) { + Ai = (i*astep)|0, Aj = (j*astep)|0; + a = W[i], p = 0, b = W[j]; + + k = 3; + p += At[Ai]*At[Aj]; + p += At[Ai+1]*At[Aj+1]; + p += At[Ai+2]*At[Aj+2]; + + for(; k < m; k++) + p += At[Ai+k]*At[Aj+k]; + + if(Math.abs(p) <= eps*Math.sqrt(a*b)) continue; + + p *= 2.0; + beta = a - b, gamma = hypot(p, beta); + if(beta < 0) { + delta = (gamma - beta)*0.5; + s = Math.sqrt(delta/gamma); + c = (p/(gamma*s*2.0)); + } else { + c = Math.sqrt((gamma + beta)/(gamma*2.0)); + s = (p/(gamma*c*2.0)); + delta = p*p*0.5/(gamma + beta); + } + + W[i] += delta; + W[j] -= delta; + + if( (iter & 1) && W[i] > 0 && W[j] > 0 ) { + k = 3;//unroll 3x3 + t0 = c*At[Ai] + s*At[Aj]; + t1 = -s*At[Ai] + c*At[Aj]; + At[Ai] = t0; At[Aj] = t1; + + t0 = c*At[Ai+1] + s*At[Aj+1]; + t1 = -s*At[Ai+1] + c*At[Aj+1]; + At[Ai+1] = t0; At[Aj+1] = t1; + + t0 = c*At[Ai+2] + s*At[Aj+2]; + t1 = -s*At[Ai+2] + c*At[Aj+2]; + At[Ai+2] = t0; At[Aj+2] = t1; + + for(; k < m; k++) { + t0 = c*At[Ai+k] + s*At[Aj+k]; + t1 = -s*At[Ai+k] + c*At[Aj+k]; + At[Ai+k] = t0; At[Aj+k] = t1; + } + } else { + a = b = 0; + k = 3; // unroll + t0 = c*At[Ai] + s*At[Aj]; + t1 = -s*At[Ai] + c*At[Aj]; + At[Ai] = t0; At[Aj] = t1; + a += t0*t0; b += t1*t1; + + t0 = c*At[Ai+1] + s*At[Aj+1]; + t1 = -s*At[Ai+1] + c*At[Aj+1]; + At[Ai+1] = t0; At[Aj+1] = t1; + a += t0*t0; b += t1*t1; + + t0 = c*At[Ai+2] + s*At[Aj+2]; + t1 = -s*At[Ai+2] + c*At[Aj+2]; + At[Ai+2] = t0; At[Aj+2] = t1; + a += t0*t0; b += t1*t1; + + for( ; k < m; k++ ) + { + t0 = c*At[Ai+k] + s*At[Aj+k]; + t1 = -s*At[Ai+k] + c*At[Aj+k]; + At[Ai+k] = t0; At[Aj+k] = t1; + + a += t0*t0; b += t1*t1; + } + W[i] = a; W[j] = b; + } + + changed = 1; + + if(Vt) { + Vi = (i*vstep)|0, Vj = (j*vstep)|0; + + k = 3; + t0 = c*Vt[Vi] + s*Vt[Vj]; + t1 = -s*Vt[Vi] + c*Vt[Vj]; + Vt[Vi] = t0; Vt[Vj] = t1; + + t0 = c*Vt[Vi+1] + s*Vt[Vj+1]; + t1 = -s*Vt[Vi+1] + c*Vt[Vj+1]; + Vt[Vi+1] = t0; Vt[Vj+1] = t1; + + t0 = c*Vt[Vi+2] + s*Vt[Vj+2]; + t1 = -s*Vt[Vi+2] + c*Vt[Vj+2]; + Vt[Vi+2] = t0; Vt[Vj+2] = t1; + + for(; k < n; k++) { + t0 = c*Vt[Vi+k] + s*Vt[Vj+k]; + t1 = -s*Vt[Vi+k] + c*Vt[Vj+k]; + Vt[Vi+k] = t0; Vt[Vj+k] = t1; + } + } + } + } + if(changed == 0) break; + } + + for(i = 0; i < n; i++) { + for(k = 0, sd = 0; k < m; k++) { + t = At[i*astep + k]; + sd += t*t; + } + W[i] = Math.sqrt(sd); + } + + for(i = 0; i < n-1; i++) { + j = i; + for(k = i+1; k < n; k++) { + if(W[j] < W[k]) + j = k; + } + if(i != j) { + swap(W, i, j, sd); + if(Vt) { + for(k = 0; k < m; k++) { + swap(At, i*astep + k, j*astep + k, t); + } + + for(k = 0; k < n; k++) { + swap(Vt, i*vstep + k, j*vstep + k, t); + } + } + } + } + + for(i = 0; i < n; i++) { + _W[i] = W[i]; + } + + if(!Vt) { + jsfeat.cache.put_buffer(W_buff); + return; + } + + for(i = 0; i < n1; i++) { + + sd = i < n ? W[i] : 0; + + while(sd <= minval) { + // if we got a zero singular value, then in order to get the corresponding left singular vector + // we generate a random vector, project it to the previously computed left singular vectors, + // subtract the projection and normalize the difference. + val0 = (1.0/m); + for(k = 0; k < m; k++) { + seed = (seed * 214013 + 2531011); + val = (((seed >> 16) & 0x7fff) & 256) != 0 ? val0 : -val0; + At[i*astep + k] = val; + } + for(iter = 0; iter < 2; iter++) { + for(j = 0; j < i; j++) { + sd = 0; + for(k = 0; k < m; k++) { + sd += At[i*astep + k]*At[j*astep + k]; + } + asum = 0.0; + for(k = 0; k < m; k++) { + t = (At[i*astep + k] - sd*At[j*astep + k]); + At[i*astep + k] = t; + asum += Math.abs(t); + } + asum = asum ? 1.0/asum : 0; + for(k = 0; k < m; k++) { + At[i*astep + k] *= asum; + } + } + } + sd = 0; + for(k = 0; k < m; k++) { + t = At[i*astep + k]; + sd += t*t; + } + sd = Math.sqrt(sd); + } + + s = (1.0/sd); + for(k = 0; k < m; k++) { + At[i*astep + k] *= s; + } + } + + jsfeat.cache.put_buffer(W_buff); + } + + return { + + lu_solve: function(A, B) { + var i=0,j=0,k=0,p=1,astep=A.cols; + var ad=A.data, bd=B.data; + var t,alpha,d,s; + + for(i = 0; i < astep; i++) { + k = i; + for(j = i+1; j < astep; j++) { + if(Math.abs(ad[j*astep + i]) > Math.abs(ad[k*astep+i])) { + k = j; + } + } + + if(Math.abs(ad[k*astep+i]) < jsfeat.EPSILON) { + return 0; // FAILED + } + + if(k != i) { + for(j = i; j < astep; j++ ) { + swap(ad, i*astep+j, k*astep+j, t); + } + + swap(bd, i, k, t); + p = -p; + } + + d = -1.0/ad[i*astep+i]; + + for(j = i+1; j < astep; j++) { + alpha = ad[j*astep+i]*d; + + for(k = i+1; k < astep; k++) { + ad[j*astep+k] += alpha*ad[i*astep+k]; + } + + bd[j] += alpha*bd[i]; + } + + ad[i*astep+i] = -d; + } + + for(i = astep-1; i >= 0; i--) { + s = bd[i]; + for(k = i+1; k < astep; k++) { + s -= ad[i*astep+k]*bd[k]; + } + bd[i] = s*ad[i*astep+i]; + } + + return 1; // OK + }, + + cholesky_solve: function(A, B) { + var col=0,row=0,col2=0,cs=0,rs=0,i=0,j=0; + var size = A.cols; + var ad=A.data, bd=B.data; + var val,inv_diag; + + for (col = 0; col < size; col++) { + inv_diag = 1.0; + cs = (col * size); + rs = cs; + for (row = col; row < size; row++) + { + // correct for the parts of cholesky already computed + val = ad[(rs+col)]; + for (col2 = 0; col2 < col; col2++) { + val -= ad[(col2*size+col)] * ad[(rs+col2)]; + } + if (row == col) { + // this is the diagonal element so don't divide + ad[(rs+col)] = val; + if(val == 0) { + return 0; + } + inv_diag = 1.0 / val; + } else { + // cache the value without division in the upper half + ad[(cs+row)] = val; + // divide my the diagonal element for all others + ad[(rs+col)] = val * inv_diag; + } + rs = (rs + size); + } + } + + // first backsub through L + cs = 0; + for (i = 0; i < size; i++) { + val = bd[i]; + for (j = 0; j < i; j++) { + val -= ad[(cs+j)] * bd[j]; + } + bd[i] = val; + cs = (cs + size); + } + // backsub through diagonal + cs = 0; + for (i = 0; i < size; i++) { + bd[i] /= ad[(cs + i)]; + cs = (cs + size); + } + // backsub through L Transpose + i = (size-1); + for (; i >= 0; i--) { + val = bd[i]; + j = (i + 1); + cs = (j * size); + for (; j < size; j++) { + val -= ad[(cs + i)] * bd[j]; + cs = (cs + size); + } + bd[i] = val; + } + + return 1; + }, + + svd_decompose: function(A, W, U, V, options) { + if (typeof options === "undefined") { options = 0; }; + var at=0,i=0,j=0,_m=A.rows,_n=A.cols,m=_m,n=_n; + var dt = A.type | jsfeat.C1_t; // we only work with single channel + + if(m < n) { + at = 1; + i = m; + m = n; + n = i; + } + + var a_buff = jsfeat.cache.get_buffer((m*m)<<3); + var w_buff = jsfeat.cache.get_buffer(n<<3); + var v_buff = jsfeat.cache.get_buffer((n*n)<<3); + + var a_mt = new jsfeat.matrix_t(m, m, dt, a_buff.data); + var w_mt = new jsfeat.matrix_t(1, n, dt, w_buff.data); + var v_mt = new jsfeat.matrix_t(n, n, dt, v_buff.data); + + if(at == 0) { + // transpose + jsfeat.matmath.transpose(a_mt, A); + } else { + for(i = 0; i < _n*_m; i++) { + a_mt.data[i] = A.data[i]; + } + for(; i < n*m; i++) { + a_mt.data[i] = 0; + } + } + + JacobiSVDImpl(a_mt.data, m, w_mt.data, v_mt.data, n, m, n, m); + + if(W) { + for(i=0; i < n; i++) { + W.data[i] = w_mt.data[i]; + } + for(; i < _n; i++) { + W.data[i] = 0; + } + } + + if (at == 0) { + if(U && (options & jsfeat.SVD_U_T)) { + i = m*m; + while(--i >= 0) { + U.data[i] = a_mt.data[i]; + } + } else if(U) { + jsfeat.matmath.transpose(U, a_mt); + } + + if(V && (options & jsfeat.SVD_V_T)) { + i = n*n; + while(--i >= 0) { + V.data[i] = v_mt.data[i]; + } + } else if(V) { + jsfeat.matmath.transpose(V, v_mt); + } + } else { + if(U && (options & jsfeat.SVD_U_T)) { + i = n*n; + while(--i >= 0) { + U.data[i] = v_mt.data[i]; + } + } else if(U) { + jsfeat.matmath.transpose(U, v_mt); + } + + if(V && (options & jsfeat.SVD_V_T)) { + i = m*m; + while(--i >= 0) { + V.data[i] = a_mt.data[i]; + } + } else if(V) { + jsfeat.matmath.transpose(V, a_mt); + } + } + + jsfeat.cache.put_buffer(a_buff); + jsfeat.cache.put_buffer(w_buff); + jsfeat.cache.put_buffer(v_buff); + + }, + + svd_solve: function(A, X, B) { + var i=0,j=0,k=0; + var pu=0,pv=0; + var nrows=A.rows,ncols=A.cols; + var sum=0.0,xsum=0.0,tol=0.0; + var dt = A.type | jsfeat.C1_t; + + var u_buff = jsfeat.cache.get_buffer((nrows*nrows)<<3); + var w_buff = jsfeat.cache.get_buffer(ncols<<3); + var v_buff = jsfeat.cache.get_buffer((ncols*ncols)<<3); + + var u_mt = new jsfeat.matrix_t(nrows, nrows, dt, u_buff.data); + var w_mt = new jsfeat.matrix_t(1, ncols, dt, w_buff.data); + var v_mt = new jsfeat.matrix_t(ncols, ncols, dt, v_buff.data); + + var bd = B.data, ud = u_mt.data, wd = w_mt.data, vd = v_mt.data; + + this.svd_decompose(A, w_mt, u_mt, v_mt, 0); + + tol = jsfeat.EPSILON * wd[0] * ncols; + + for (; i < ncols; i++, pv += ncols) { + xsum = 0.0; + for(j = 0; j < ncols; j++) { + if(wd[j] > tol) { + for(k = 0, sum = 0.0, pu = 0; k < nrows; k++, pu += ncols) { + sum += ud[pu + j] * bd[k]; + } + xsum += sum * vd[pv + j] / wd[j]; + } + } + X.data[i] = xsum; + } + + jsfeat.cache.put_buffer(u_buff); + jsfeat.cache.put_buffer(w_buff); + jsfeat.cache.put_buffer(v_buff); + }, + + svd_invert: function(Ai, A) { + var i=0,j=0,k=0; + var pu=0,pv=0,pa=0; + var nrows=A.rows,ncols=A.cols; + var sum=0.0,tol=0.0; + var dt = A.type | jsfeat.C1_t; + + var u_buff = jsfeat.cache.get_buffer((nrows*nrows)<<3); + var w_buff = jsfeat.cache.get_buffer(ncols<<3); + var v_buff = jsfeat.cache.get_buffer((ncols*ncols)<<3); + + var u_mt = new jsfeat.matrix_t(nrows, nrows, dt, u_buff.data); + var w_mt = new jsfeat.matrix_t(1, ncols, dt, w_buff.data); + var v_mt = new jsfeat.matrix_t(ncols, ncols, dt, v_buff.data); + + var id = Ai.data, ud = u_mt.data, wd = w_mt.data, vd = v_mt.data; + + this.svd_decompose(A, w_mt, u_mt, v_mt, 0); + + tol = jsfeat.EPSILON * wd[0] * ncols; + + for (; i < ncols; i++, pv += ncols) { + for (j = 0, pu = 0; j < nrows; j++, pa++) { + for (k = 0, sum = 0.0; k < ncols; k++, pu++) { + if (wd[k] > tol) sum += vd[pv + k] * ud[pu] / wd[k]; + } + id[pa] = sum; + } + } + + jsfeat.cache.put_buffer(u_buff); + jsfeat.cache.put_buffer(w_buff); + jsfeat.cache.put_buffer(v_buff); + }, + + eigenVV: function(A, vects, vals) { + var n=A.cols,i=n*n; + var dt = A.type | jsfeat.C1_t; + + var a_buff = jsfeat.cache.get_buffer((n*n)<<3); + var w_buff = jsfeat.cache.get_buffer(n<<3); + var a_mt = new jsfeat.matrix_t(n, n, dt, a_buff.data); + var w_mt = new jsfeat.matrix_t(1, n, dt, w_buff.data); + + while(--i >= 0) { + a_mt.data[i] = A.data[i]; + } + + JacobiImpl(a_mt.data, n, w_mt.data, vects ? vects.data : null, n, n); + + if(vals) { + while(--n >= 0) { + vals.data[n] = w_mt.data[n]; + } + } + + jsfeat.cache.put_buffer(a_buff); + jsfeat.cache.put_buffer(w_buff); + } + + }; + + })(); + + global.linalg = linalg; + +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -1103,63 +2003,63 @@ self.Float32Array = self.Float32Array || Array; box_blur_gray: function(src, dst, radius, options) { if (typeof options === "undefined") { options = 0; } - var w=src.cols, h=src.rows; - var i,x,y; - var windowSize = radius * 2 + 1; - var radiusPlusOne = radius + 1; + var w=src.cols, h=src.rows, h2=h<<1, w2=w<<1; + var i=0,x=0,y=0,end=0; + var windowSize = ((radius << 1) + 1)|0; + var radiusPlusOne = (radius + 1)|0, radiusPlus2 = (radiusPlusOne+1)|0; var offset = 8192; - var scale = options&jsfeat.BOX_BLUR_NOSCALE ? 1 : (16384 * (1.0/(windowSize*windowSize)))|0; + var scale = options&jsfeat.BOX_BLUR_NOSCALE ? 1 : (16384 / (windowSize*windowSize) + 0.5)|0; var tmp_buff = jsfeat.cache.get_buffer((w*h)<<2); - var sum, dstIndex, srcIndex = 0, nextPixelIndex, previousPixelIndex; - var tmp = tmp_buff.i32; // to prevent overflow - var input, output; - var hold; + var sum=0, dstIndex=0, srcIndex = 0, nextPixelIndex=0, previousPixelIndex=0; + var data_i32 = tmp_buff.i32; // to prevent overflow + var data_u8 = src.data; + var hold=0; // first pass // no need to scale - input = src.data; - output = tmp; + //data_u8 = src.data; + //data_i32 = tmp; for (y = 0; y < h; ++y) { dstIndex = y; - sum = radiusPlusOne * input[srcIndex]; + sum = radiusPlusOne * data_u8[srcIndex]; - for(i = 1; i <= radius; ++i) { - sum += input[srcIndex + i]; + for(i = (srcIndex+1)|0, end=(srcIndex+radius)|0; i <= end; ++i) { + sum += data_u8[i]; } - nextPixelIndex = srcIndex + radiusPlusOne; + nextPixelIndex = (srcIndex + radiusPlusOne)|0; previousPixelIndex = srcIndex; - hold = input[previousPixelIndex]; + hold = data_u8[previousPixelIndex]; for(x = 0; x < radius; ++x, dstIndex += h) { - output[dstIndex] = sum; - sum += input[nextPixelIndex]- hold; + data_i32[dstIndex] = sum; + sum += data_u8[nextPixelIndex]- hold; nextPixelIndex ++; } - for(; x <= w-radiusPlusOne-2; x+=2, dstIndex += h<<1) { - output[dstIndex] = sum; - sum += input[nextPixelIndex]- input[previousPixelIndex]; + for(; x < w-radiusPlus2; x+=2, dstIndex += h2) { + data_i32[dstIndex] = sum; + sum += data_u8[nextPixelIndex]- data_u8[previousPixelIndex]; - output[dstIndex+h] = sum; - sum += input[nextPixelIndex+1]- input[previousPixelIndex+1]; + data_i32[dstIndex+h] = sum; + sum += data_u8[nextPixelIndex+1]- data_u8[previousPixelIndex+1]; nextPixelIndex +=2; previousPixelIndex +=2; } for(; x < w-radiusPlusOne; ++x, dstIndex += h) { - output[dstIndex] = sum; - sum += input[nextPixelIndex]- input[previousPixelIndex]; + data_i32[dstIndex] = sum; + sum += data_u8[nextPixelIndex]- data_u8[previousPixelIndex]; nextPixelIndex ++; previousPixelIndex ++; } - hold = input[nextPixelIndex-1]; + hold = data_u8[nextPixelIndex-1]; for(; x < w; ++x, dstIndex += h) { - output[dstIndex] = sum; + data_i32[dstIndex] = sum; - sum += hold- input[previousPixelIndex]; + sum += hold- data_u8[previousPixelIndex]; previousPixelIndex ++; } @@ -1168,84 +2068,100 @@ self.Float32Array = self.Float32Array || Array; // // second pass srcIndex = 0; - input = tmp; // this is a transpose - output = dst.data; - for (y = 0; y < w; ++y) { - dstIndex = y; - sum = radiusPlusOne * input[srcIndex]; + //data_i32 = tmp; // this is a transpose + data_u8 = dst.data; - for(i = 1; i <= radius; ++i) { - sum += input[srcIndex + i]; - } + // dont scale result + if(scale == 1) { + for (y = 0; y < w; ++y) { + dstIndex = y; + sum = radiusPlusOne * data_i32[srcIndex]; - nextPixelIndex = srcIndex + radiusPlusOne; - previousPixelIndex = srcIndex; - hold = input[previousPixelIndex]; + for(i = (srcIndex+1)|0, end=(srcIndex+radius)|0; i <= end; ++i) { + sum += data_i32[i]; + } + + nextPixelIndex = srcIndex + radiusPlusOne; + previousPixelIndex = srcIndex; + hold = data_i32[previousPixelIndex]; - // dont scale result - if(scale == 1) { for(x = 0; x < radius; ++x, dstIndex += w) { - output[dstIndex] = sum; - sum += input[nextPixelIndex]- hold; + data_u8[dstIndex] = sum; + sum += data_i32[nextPixelIndex]- hold; nextPixelIndex ++; } - for(; x <= h-radiusPlusOne-2; x+=2, dstIndex += w<<1) { - output[dstIndex] = sum; - sum += input[nextPixelIndex]- input[previousPixelIndex]; + for(; x < h-radiusPlus2; x+=2, dstIndex += w2) { + data_u8[dstIndex] = sum; + sum += data_i32[nextPixelIndex]- data_i32[previousPixelIndex]; - output[dstIndex+w] = sum; - sum += input[nextPixelIndex+1]- input[previousPixelIndex+1]; + data_u8[dstIndex+w] = sum; + sum += data_i32[nextPixelIndex+1]- data_i32[previousPixelIndex+1]; nextPixelIndex +=2; previousPixelIndex +=2; } for(; x < h-radiusPlusOne; ++x, dstIndex += w) { - output[dstIndex] = sum; + data_u8[dstIndex] = sum; - sum += input[nextPixelIndex]- input[previousPixelIndex]; + sum += data_i32[nextPixelIndex]- data_i32[previousPixelIndex]; nextPixelIndex ++; previousPixelIndex ++; } - hold = input[nextPixelIndex-1]; + hold = data_i32[nextPixelIndex-1]; for(; x < h; ++x, dstIndex += w) { - output[dstIndex] = sum; + data_u8[dstIndex] = sum; - sum += hold- input[previousPixelIndex]; + sum += hold- data_i32[previousPixelIndex]; previousPixelIndex ++; } - } else { + + srcIndex += h; + } + } else { + for (y = 0; y < w; ++y) { + dstIndex = y; + sum = radiusPlusOne * data_i32[srcIndex]; + + for(i = (srcIndex+1)|0, end=(srcIndex+radius)|0; i <= end; ++i) { + sum += data_i32[i]; + } + + nextPixelIndex = srcIndex + radiusPlusOne; + previousPixelIndex = srcIndex; + hold = data_i32[previousPixelIndex]; + for(x = 0; x < radius; ++x, dstIndex += w) { - output[dstIndex] = (sum*scale+offset)>>14; - sum += input[nextPixelIndex]- hold; + data_u8[dstIndex] = (sum*scale+offset)>>14; + sum += data_i32[nextPixelIndex]- hold; nextPixelIndex ++; } - for(; x <= h-radiusPlusOne-2; x+=2, dstIndex += w<<1) { - output[dstIndex] = (sum*scale+offset)>>14; - sum += input[nextPixelIndex]- input[previousPixelIndex]; + for(; x < h-radiusPlus2; x+=2, dstIndex += w2) { + data_u8[dstIndex] = (sum*scale+offset)>>14; + sum += data_i32[nextPixelIndex]- data_i32[previousPixelIndex]; - output[dstIndex+w] = (sum*scale+offset)>>14; - sum += input[nextPixelIndex+1]- input[previousPixelIndex+1]; + data_u8[dstIndex+w] = (sum*scale+offset)>>14; + sum += data_i32[nextPixelIndex+1]- data_i32[previousPixelIndex+1]; nextPixelIndex +=2; previousPixelIndex +=2; } for(; x < h-radiusPlusOne; ++x, dstIndex += w) { - output[dstIndex] = (sum*scale+offset)>>14; + data_u8[dstIndex] = (sum*scale+offset)>>14; - sum += input[nextPixelIndex]- input[previousPixelIndex]; + sum += data_i32[nextPixelIndex]- data_i32[previousPixelIndex]; nextPixelIndex ++; previousPixelIndex ++; } - hold = input[nextPixelIndex-1]; + hold = data_i32[nextPixelIndex-1]; for(; x < h; ++x, dstIndex += w) { - output[dstIndex] = (sum*scale+offset)>>14; + data_u8[dstIndex] = (sum*scale+offset)>>14; - sum += hold- input[previousPixelIndex]; + sum += hold- data_i32[previousPixelIndex]; previousPixelIndex ++; } - } - srcIndex += h; + srcIndex += h; + } } jsfeat.cache.put_buffer(tmp_buff); @@ -1443,9 +2359,9 @@ self.Float32Array = self.Float32Array || Array; // please note: // dst_(type) size should be cols = src.cols+1, rows = src.rows+1 compute_integral_image: function(src, dst_sum, dst_sqsum, dst_tilted) { - var w0=src.cols,h0=src.rows,src_d=src.data; - var w1=w0+1; - var s,s2,p,pup,i=0,j=0,v,k; + var w0=src.cols|0,h0=src.rows|0,src_d=src.data; + var w1=(w0+1)|0; + var s=0,s2=0,p=0,pup=0,i=0,j=0,v=0,k=0; if(dst_sum && dst_sqsum) { // fill first row with zeros @@ -2137,6 +3053,512 @@ The references are: })(jsfeat); +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + * Copyright 2007 Computer Vision Lab, + * Ecole Polytechnique Federale de Lausanne (EPFL), Switzerland. + * @author Vincent Lepetit (http://cvlab.epfl.ch/~lepetit) + */ + +(function(global) { + "use strict"; + // + + var yape06 = (function() { + + var compute_laplacian = function(src, dst, w, h, Dxx, Dyy) { + var y=0,x=0,yrow=(Dxx*w)|0,row=yrow; + + for(y = Dxx; y < h - Dxx; ++y, yrow+=w, row = yrow) { + for(x = w - Dxx; x >= Dxx; --x) { + dst[row] = -4 * src[row] + src[row+Dxx] + src[row-Dxx] + src[row+Dyy] + src[row-Dyy]; + ++row; + } + } + } + + var hessian_min_eigen_value = function(src, off, tr, Dxx, Dyy, Dxy, Dyx) { + var Ixx = -2 * src[off] + src[off + Dxx] + src[off - Dxx]; + var Iyy = -2 * src[off] + src[off + Dyy] + src[off - Dyy]; + var Ixy = src[off + Dxy] + src[off - Dxy] - src[off + Dyx] - src[off - Dyx]; + var sqrt_delta = ( Math.sqrt(((Ixx - Iyy) * (Ixx - Iyy) + 4 * Ixy * Ixy) ) )|0; + + return Math.min(Math.abs(tr - sqrt_delta), Math.abs(-(tr + sqrt_delta))); + } + + return { + + laplacian_threshold: 30, + min_eigen_value_threshold: 25, + + detect: function(src, points) { + var x=0,y=0; + var w=src.cols, h=src.rows, srd_d=src.data; + var Dxx = 5, Dyy = (5 * w)|0; + var Dxy = (3 + 3 * w)|0, Dyx = (3 - 3 * w)|0; + var lap_buf = jsfeat.cache.get_buffer((w*h)<<2); + var laplacian = lap_buf.i32; + var lv=0, row=0,rowx=0,min_eigen_value=0,pt; + var number_of_points = 0; + var lap_thresh = this.laplacian_threshold; + var eigen_thresh = this.min_eigen_value_threshold; + + x = w*h; + while(--x>=0) {laplacian[x]=0;} + compute_laplacian(srd_d, laplacian, w, h, Dxx, Dyy); + + row = (w+1)|0; + for(y = 1; y < h-1; ++y, row += w) { + for(x = 1, rowx=row; x < w-1; ++x, ++rowx) { + + lv = laplacian[rowx]; + if ((lv < -lap_thresh && + lv < laplacian[rowx - 1] && lv < laplacian[rowx + 1] && + lv < laplacian[rowx - w] && lv < laplacian[rowx + w] && + lv < laplacian[rowx - w - 1] && lv < laplacian[rowx + w - 1] && + lv < laplacian[rowx - w + 1] && lv < laplacian[rowx + w + 1]) + || + (lv > lap_thresh && + lv > laplacian[rowx - 1] && lv > laplacian[rowx + 1] && + lv > laplacian[rowx - w] && lv > laplacian[rowx + w] && + lv > laplacian[rowx - w - 1] && lv > laplacian[rowx + w - 1] && + lv > laplacian[rowx - w + 1] && lv > laplacian[rowx + w + 1]) + ) { + + min_eigen_value = hessian_min_eigen_value(srd_d, rowx, lv, Dxx, Dyy, Dxy, Dyx); + if (min_eigen_value > eigen_thresh) { + pt = points[number_of_points]; + pt.x = x, pt.y = y, pt.score = min_eigen_value; + ++number_of_points; + ++x, ++rowx; + } + } + } + } + + jsfeat.cache.put_buffer(lap_buf); + + return number_of_points; + } + + }; + })(); + + global.yape06 = yape06; + +})(jsfeat); + +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + * Copyright 2007 Computer Vision Lab, + * Ecole Polytechnique Federale de Lausanne (EPFL), Switzerland. + */ + +(function(global) { + "use strict"; + // + + var yape = (function() { + + var precompute_directions = function(step, dirs, R) { + var i = 0; + var x, y; + + x = R; + for(y = 0; y < x; y++, i++) + { + x = (Math.sqrt((R * R - y * y)) + 0.5)|0; + dirs[i] = (x + step * y); + } + for(x-- ; x < y && x >= 0; x--, i++) + { + y = (Math.sqrt((R * R - x * x)) + 0.5)|0; + dirs[i] = (x + step * y); + } + for( ; -x < y; x--, i++) + { + y = (Math.sqrt((R * R - x * x)) + 0.5)|0; + dirs[i] = (x + step * y); + } + for(y-- ; y >= 0; y--, i++) + { + x = (-Math.sqrt((R * R - y * y)) - 0.5)|0; + dirs[i] = (x + step * y); + } + for(; y > x; y--, i++) + { + x = (-Math.sqrt((R * R - y * y)) - 0.5)|0; + dirs[i] = (x + step * y); + } + for(x++ ; x <= 0; x++, i++) + { + y = (-Math.sqrt((R * R - x * x)) - 0.5)|0; + dirs[i] = (x + step * y); + } + for( ; x < -y; x++, i++) + { + y = (-Math.sqrt((R * R - x * x)) - 0.5)|0; + dirs[i] = (x + step * y); + } + for(y++ ; y < 0; y++, i++) + { + x = (Math.sqrt((R * R - y * y)) + 0.5)|0; + dirs[i] = (x + step * y); + } + + dirs[i] = dirs[0]; + dirs[i + 1] = dirs[1]; + return i; + } + + var third_check = function (Sb, off, step) { + var n = 0; + if(Sb[off+1] != 0) n++; + if(Sb[off-1] != 0) n++; + if(Sb[off+step] != 0) n++; + if(Sb[off+step+1] != 0) n++; + if(Sb[off+step-1] != 0) n++; + if(Sb[off-step] != 0) n++; + if(Sb[off-step+1] != 0) n++; + if(Sb[off-step-1] != 0) n++; + + return n; + } + + var is_local_maxima = function(p, off, v, step, neighborhood) { + var x, y; + + if (v > 0) { + off -= step*neighborhood; + for (y= -neighborhood; y<=neighborhood; ++y) { + for (x= -neighborhood; x<=neighborhood; ++x) { + if (p[off+x] > v) return false; + } + off += step; + } + } else { + off -= step*neighborhood; + for (y= -neighborhood; y<=neighborhood; ++y) { + for (x= -neighborhood; x<=neighborhood; ++x) { + if (p[off+x] < v) return false; + } + off += step; + } + } + return true; + } + + var perform_one_point = function(I, x, Scores, Im, Ip, dirs, opposite, dirs_nb) { + var score = 0; + var a = 0, b = (opposite - 1)|0; + var A=0, B0=0, B1=0, B2=0; + var state=0; + + // WE KNOW THAT NOT(A ~ I0 & B1 ~ I0): + A = I[x+dirs[a]]; + if ((A <= Ip)) { + if ((A >= Im)) { // A ~ I0 + B0 = I[x+dirs[b]]; + if ((B0 <= Ip)) { + if ((B0 >= Im)) { Scores[x] = 0; return; } + else { + b++; B1 = I[x+dirs[b]]; + if ((B1 > Ip)) { + b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) state = 3; + else if ((B2 < Im)) state = 6; + else { Scores[x] = 0; return; } // A ~ I0, B2 ~ I0 + } + else/* if ((B1 < Im))*/ { + b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) state = 7; + else if ((B2 < Im)) state = 2; + else { Scores[x] = 0; return; } // A ~ I0, B2 ~ I0 + } + //else { Scores[x] = 0; return; } // A ~ I0, B1 ~ I0 + } + } + else { // B0 < I0 + b++; B1 = I[x+dirs[b]]; + if ((B1 > Ip)) { + b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) state = 3; + else if ((B2 < Im)) state = 6; + else { Scores[x] = 0; return; } // A ~ I0, B2 ~ I0 + } + else if ((B1 < Im)) { + b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) state = 7; + else if ((B2 < Im)) state = 2; + else { Scores[x] = 0; return; } // A ~ I0, B2 ~ I0 + } + else { Scores[x] = 0; return; } // A ~ I0, B1 ~ I0 + } + } + else { // A > I0 + B0 = I[x+dirs[b]]; + if ((B0 > Ip)) { Scores[x] = 0; return; } + b++; B1 = I[x+dirs[b]]; + if ((B1 > Ip)) { Scores[x] = 0; return; } + b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { Scores[x] = 0; return; } + state = 1; + } + } + else // A < I0 + { + B0 = I[x+dirs[b]]; + if ((B0 < Im)) { Scores[x] = 0; return; } + b++; B1 = I[x+dirs[b]]; + if ((B1 < Im)) { Scores[x] = 0; return; } + b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { Scores[x] = 0; return; } + state = 0; + } + + for(a = 1; a <= opposite; a++) + { + A = I[x+dirs[a]]; + + switch(state) + { + case 0: + if ((A > Ip)) { + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { Scores[x] = 0; return; } + { score -= A + B1; state = 0; break; }; + } + if ((A < Im)) { + if ((B1 > Ip)) { Scores[x] = 0; return; } + if ((B2 > Ip)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { Scores[x] = 0; return; } + { score -= A + B1; state = 8; break; }; + } + // A ~ I0 + if ((B1 <= Ip)) { Scores[x] = 0; return; } + if ((B2 <= Ip)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { score -= A + B1; state = 3; break; }; + if ((B2 < Im)) { score -= A + B1; state = 6; break; }; + { Scores[x] = 0; return; } + + case 1: + if ((A < Im)) { + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { Scores[x] = 0; return; } + { score -= A + B1; state = 1; break; }; + } + if ((A > Ip)) { + if ((B1 < Im)) { Scores[x] = 0; return; } + if ((B2 < Im)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { Scores[x] = 0; return; } + { score -= A + B1; state = 9; break; }; + } + // A ~ I0 + if ((B1 >= Im)) { Scores[x] = 0; return; } + if ((B2 >= Im)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { score -= A + B1; state = 2; break; }; + if ((B2 > Ip)) { score -= A + B1; state = 7; break; }; + { Scores[x] = 0; return; } + + case 2: + if ((A > Ip)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((A < Im)) + { + if ((B2 > Ip)) { Scores[x] = 0; return; } + { score -= A + B1; state = 4; break; }; + } + // A ~ I0 + if ((B2 > Ip)) { score -= A + B1; state = 7; break; }; + if ((B2 < Im)) { score -= A + B1; state = 2; break; }; + { Scores[x] = 0; return; } // A ~ I0, B2 ~ I0 + + case 3: + if ((A < Im)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((A > Ip)) { + if ((B2 < Im)) { Scores[x] = 0; return; } + { score -= A + B1; state = 5; break; }; + } + // A ~ I0 + if ((B2 > Ip)) { score -= A + B1; state = 3; break; }; + if ((B2 < Im)) { score -= A + B1; state = 6; break; }; + { Scores[x] = 0; return; } + + case 4: + if ((A > Ip)) { Scores[x] = 0; return; } + if ((A < Im)) { + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { Scores[x] = 0; return; } + { score -= A + B1; state = 1; break; }; + } + if ((B2 >= Im)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { score -= A + B1; state = 2; break; }; + if ((B2 > Ip)) { score -= A + B1; state = 7; break; }; + { Scores[x] = 0; return; } + + case 5: + if ((A < Im)) { Scores[x] = 0; return; } + if ((A > Ip)) { + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { Scores[x] = 0; return; } + { score -= A + B1; state = 0; break; }; + } + // A ~ I0 + if ((B2 <= Ip)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { score -= A + B1; state = 3; break; }; + if ((B2 < Im)) { score -= A + B1; state = 6; break; }; + { Scores[x] = 0; return; } + + case 7: + if ((A > Ip)) { Scores[x] = 0; return; } + if ((A < Im)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + // A ~ I0 + if ((B2 > Ip)) { score -= A + B1; state = 3; break; }; + if ((B2 < Im)) { score -= A + B1; state = 6; break; }; + { Scores[x] = 0; return; } // A ~ I0, B2 ~ I0 + + case 6: + if ((A > Ip)) { Scores[x] = 0; return; } + if ((A < Im)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + // A ~ I0 + if ((B2 < Im)) { score -= A + B1; state = 2; break; }; + if ((B2 > Ip)) { score -= A + B1; state = 7; break; }; + { Scores[x] = 0; return; } // A ~ I0, B2 ~ I0 + + case 8: + if ((A > Ip)) { + if ((B2 < Im)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { Scores[x] = 0; return; } + { score -= A + B1; state = 9; break; }; + } + if ((A < Im)) { + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { Scores[x] = 0; return; } + { score -= A + B1; state = 1; break; }; + } + { Scores[x] = 0; return; } + + case 9: + if ((A < Im)) { + if ((B2 > Ip)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { Scores[x] = 0; return; } + { score -= A + B1; state = 8; break; }; + } + if ((A > Ip)) { + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { Scores[x] = 0; return; } + { score -= A + B1; state = 0; break; }; + } + { Scores[x] = 0; return; } + + default: + //"PB default"; + break; + } // switch(state) + } // for(a...) + + Scores[x] = (score + dirs_nb * I[x]); + } + + var lev_table_t = (function () { + function lev_table_t(w, h, r) { + this.dirs = new Int32Array(1024); + this.dirs_count = precompute_directions(w, this.dirs, r)|0; + this.scores = new Int32Array(w*h); + this.radius = r|0; + } + return lev_table_t; + })(); + + return { + + level_tables: [], + tau: 7, + + init: function(width, height, radius, pyramid_levels) { + if (typeof pyramid_levels === "undefined") { pyramid_levels = 1; } + var i; + radius = Math.min(radius, 7); + radius = Math.max(radius, 3); + for(i = 0; i < pyramid_levels; ++i) { + this.level_tables[i] = new lev_table_t(width>>i, height>>i, radius); + } + }, + + detect: function(src, points, border) { + if (typeof border === "undefined") { border = 4; } + var t = this.level_tables[0]; + var R = t.radius|0, Rm1 = (R-1)|0; + var dirs = t.dirs; + var dirs_count = t.dirs_count|0; + var opposite = dirs_count >> 1; + var img = src.data, w=src.cols|0, h=src.rows|0,hw=w>>1; + var scores = t.scores; + var x=0,y=0,row=0,rowx=0,ip=0,im=0,abs_score=0, score=0; + var tau = this.tau|0; + var number_of_points = 0, pt; + + var sx = Math.max(R+1, border)|0; + var sy = Math.max(R+1, border)|0; + var ex = Math.min(w-R-2, w-border)|0; + var ey = Math.min(h-R-2, h-border)|0; + + row = (sy*w+sx)|0; + for(y = sy; y < ey; ++y, row+=w) { + for(x = sx, rowx = row; x < ex; ++x, ++rowx) { + ip = img[rowx] + tau, im = img[rowx] - tau; + + if (im= 3 && is_local_maxima(scores, rowx, score, hw, R)) { + pt = points[number_of_points]; + pt.x = x, pt.y = y, pt.score = abs_score; + ++number_of_points; + + x += Rm1, rowx += Rm1; + } + } + } + } + + return number_of_points; + } + }; + + })(); + + global.yape = yape; + +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ * diff --git a/compile/build.xml b/compile/build.xml index 37ea670..2b93237 100755 --- a/compile/build.xml +++ b/compile/build.xml @@ -6,9 +6,13 @@ + + + + diff --git a/src/jsfeat.js b/src/jsfeat.js index c4c09b8..9b4b5f2 100755 --- a/src/jsfeat.js +++ b/src/jsfeat.js @@ -10,3 +10,4 @@ self.Int32Array = self.Int32Array || Array; self.Uint32Array = self.Uint32Array || Array; self.Uint8Array = self.Uint8Array || Array; self.Float32Array = self.Float32Array || Array; +self.Float64Array = self.Float64Array || Array; diff --git a/src/jsfeat_cache.js b/src/jsfeat_cache.js index ac06a8a..3bbe170 100755 --- a/src/jsfeat_cache.js +++ b/src/jsfeat_cache.js @@ -15,11 +15,23 @@ var _pool_node_t = (function () { function _pool_node_t(size_in_bytes) { this.next = null; - this.size = size_in_bytes|0; - this.buffer = new ArrayBuffer(size_in_bytes); - this.u8 = new Uint8Array(this.buffer); - this.i32 = new Int32Array(this.buffer); - this.f32 = new Float32Array(this.buffer); + this.data = new jsfeat.data_t(size_in_bytes); + this.size = this.data.size; + this.buffer = this.data.buffer; + this.u8 = this.data.u8; + this.i32 = this.data.i32; + this.f32 = this.data.f32; + this.f64 = this.data.f64; + } + _pool_node_t.prototype.resize = function(size_in_bytes) { + delete this.data; + this.data = new jsfeat.data_t(size_in_bytes); + this.size = this.data.size; + this.buffer = this.data.buffer; + this.u8 = this.data.u8; + this.i32 = this.data.i32; + this.f32 = this.data.f32; + this.f64 = this.data.f64; } return _pool_node_t; })(); @@ -46,11 +58,7 @@ _pool_size--; if(size_in_bytes > node.size) { - node.buffer = new ArrayBuffer(size_in_bytes); - node.u8 = new Uint8Array(node.buffer); - node.i32 = new Int32Array(node.buffer); - node.f32 = new Float32Array(node.buffer); - node.size = size_in_bytes; + node.resize(size_in_bytes); } return node; diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index 90331dd..c135134 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -390,63 +390,63 @@ box_blur_gray: function(src, dst, radius, options) { if (typeof options === "undefined") { options = 0; } - var w=src.cols, h=src.rows; - var i,x,y; - var windowSize = radius * 2 + 1; - var radiusPlusOne = radius + 1; + var w=src.cols, h=src.rows, h2=h<<1, w2=w<<1; + var i=0,x=0,y=0,end=0; + var windowSize = ((radius << 1) + 1)|0; + var radiusPlusOne = (radius + 1)|0, radiusPlus2 = (radiusPlusOne+1)|0; var offset = 8192; - var scale = options&jsfeat.BOX_BLUR_NOSCALE ? 1 : (16384 * (1.0/(windowSize*windowSize)))|0; + var scale = options&jsfeat.BOX_BLUR_NOSCALE ? 1 : (16384 / (windowSize*windowSize) + 0.5)|0; var tmp_buff = jsfeat.cache.get_buffer((w*h)<<2); - var sum, dstIndex, srcIndex = 0, nextPixelIndex, previousPixelIndex; - var tmp = tmp_buff.i32; // to prevent overflow - var input, output; - var hold; + var sum=0, dstIndex=0, srcIndex = 0, nextPixelIndex=0, previousPixelIndex=0; + var data_i32 = tmp_buff.i32; // to prevent overflow + var data_u8 = src.data; + var hold=0; // first pass // no need to scale - input = src.data; - output = tmp; + //data_u8 = src.data; + //data_i32 = tmp; for (y = 0; y < h; ++y) { dstIndex = y; - sum = radiusPlusOne * input[srcIndex]; + sum = radiusPlusOne * data_u8[srcIndex]; - for(i = 1; i <= radius; ++i) { - sum += input[srcIndex + i]; + for(i = (srcIndex+1)|0, end=(srcIndex+radius)|0; i <= end; ++i) { + sum += data_u8[i]; } - nextPixelIndex = srcIndex + radiusPlusOne; + nextPixelIndex = (srcIndex + radiusPlusOne)|0; previousPixelIndex = srcIndex; - hold = input[previousPixelIndex]; + hold = data_u8[previousPixelIndex]; for(x = 0; x < radius; ++x, dstIndex += h) { - output[dstIndex] = sum; - sum += input[nextPixelIndex]- hold; + data_i32[dstIndex] = sum; + sum += data_u8[nextPixelIndex]- hold; nextPixelIndex ++; } - for(; x <= w-radiusPlusOne-2; x+=2, dstIndex += h<<1) { - output[dstIndex] = sum; - sum += input[nextPixelIndex]- input[previousPixelIndex]; + for(; x < w-radiusPlus2; x+=2, dstIndex += h2) { + data_i32[dstIndex] = sum; + sum += data_u8[nextPixelIndex]- data_u8[previousPixelIndex]; - output[dstIndex+h] = sum; - sum += input[nextPixelIndex+1]- input[previousPixelIndex+1]; + data_i32[dstIndex+h] = sum; + sum += data_u8[nextPixelIndex+1]- data_u8[previousPixelIndex+1]; nextPixelIndex +=2; previousPixelIndex +=2; } for(; x < w-radiusPlusOne; ++x, dstIndex += h) { - output[dstIndex] = sum; - sum += input[nextPixelIndex]- input[previousPixelIndex]; + data_i32[dstIndex] = sum; + sum += data_u8[nextPixelIndex]- data_u8[previousPixelIndex]; nextPixelIndex ++; previousPixelIndex ++; } - hold = input[nextPixelIndex-1]; + hold = data_u8[nextPixelIndex-1]; for(; x < w; ++x, dstIndex += h) { - output[dstIndex] = sum; + data_i32[dstIndex] = sum; - sum += hold- input[previousPixelIndex]; + sum += hold- data_u8[previousPixelIndex]; previousPixelIndex ++; } @@ -455,84 +455,100 @@ // // second pass srcIndex = 0; - input = tmp; // this is a transpose - output = dst.data; - for (y = 0; y < w; ++y) { - dstIndex = y; - sum = radiusPlusOne * input[srcIndex]; + //data_i32 = tmp; // this is a transpose + data_u8 = dst.data; - for(i = 1; i <= radius; ++i) { - sum += input[srcIndex + i]; - } + // dont scale result + if(scale == 1) { + for (y = 0; y < w; ++y) { + dstIndex = y; + sum = radiusPlusOne * data_i32[srcIndex]; - nextPixelIndex = srcIndex + radiusPlusOne; - previousPixelIndex = srcIndex; - hold = input[previousPixelIndex]; + for(i = (srcIndex+1)|0, end=(srcIndex+radius)|0; i <= end; ++i) { + sum += data_i32[i]; + } + + nextPixelIndex = srcIndex + radiusPlusOne; + previousPixelIndex = srcIndex; + hold = data_i32[previousPixelIndex]; - // dont scale result - if(scale == 1) { for(x = 0; x < radius; ++x, dstIndex += w) { - output[dstIndex] = sum; - sum += input[nextPixelIndex]- hold; + data_u8[dstIndex] = sum; + sum += data_i32[nextPixelIndex]- hold; nextPixelIndex ++; } - for(; x <= h-radiusPlusOne-2; x+=2, dstIndex += w<<1) { - output[dstIndex] = sum; - sum += input[nextPixelIndex]- input[previousPixelIndex]; + for(; x < h-radiusPlus2; x+=2, dstIndex += w2) { + data_u8[dstIndex] = sum; + sum += data_i32[nextPixelIndex]- data_i32[previousPixelIndex]; - output[dstIndex+w] = sum; - sum += input[nextPixelIndex+1]- input[previousPixelIndex+1]; + data_u8[dstIndex+w] = sum; + sum += data_i32[nextPixelIndex+1]- data_i32[previousPixelIndex+1]; nextPixelIndex +=2; previousPixelIndex +=2; } for(; x < h-radiusPlusOne; ++x, dstIndex += w) { - output[dstIndex] = sum; + data_u8[dstIndex] = sum; - sum += input[nextPixelIndex]- input[previousPixelIndex]; + sum += data_i32[nextPixelIndex]- data_i32[previousPixelIndex]; nextPixelIndex ++; previousPixelIndex ++; } - hold = input[nextPixelIndex-1]; + hold = data_i32[nextPixelIndex-1]; for(; x < h; ++x, dstIndex += w) { - output[dstIndex] = sum; + data_u8[dstIndex] = sum; - sum += hold- input[previousPixelIndex]; + sum += hold- data_i32[previousPixelIndex]; previousPixelIndex ++; } - } else { + + srcIndex += h; + } + } else { + for (y = 0; y < w; ++y) { + dstIndex = y; + sum = radiusPlusOne * data_i32[srcIndex]; + + for(i = (srcIndex+1)|0, end=(srcIndex+radius)|0; i <= end; ++i) { + sum += data_i32[i]; + } + + nextPixelIndex = srcIndex + radiusPlusOne; + previousPixelIndex = srcIndex; + hold = data_i32[previousPixelIndex]; + for(x = 0; x < radius; ++x, dstIndex += w) { - output[dstIndex] = (sum*scale+offset)>>14; - sum += input[nextPixelIndex]- hold; + data_u8[dstIndex] = (sum*scale+offset)>>14; + sum += data_i32[nextPixelIndex]- hold; nextPixelIndex ++; } - for(; x <= h-radiusPlusOne-2; x+=2, dstIndex += w<<1) { - output[dstIndex] = (sum*scale+offset)>>14; - sum += input[nextPixelIndex]- input[previousPixelIndex]; + for(; x < h-radiusPlus2; x+=2, dstIndex += w2) { + data_u8[dstIndex] = (sum*scale+offset)>>14; + sum += data_i32[nextPixelIndex]- data_i32[previousPixelIndex]; - output[dstIndex+w] = (sum*scale+offset)>>14; - sum += input[nextPixelIndex+1]- input[previousPixelIndex+1]; + data_u8[dstIndex+w] = (sum*scale+offset)>>14; + sum += data_i32[nextPixelIndex+1]- data_i32[previousPixelIndex+1]; nextPixelIndex +=2; previousPixelIndex +=2; } for(; x < h-radiusPlusOne; ++x, dstIndex += w) { - output[dstIndex] = (sum*scale+offset)>>14; + data_u8[dstIndex] = (sum*scale+offset)>>14; - sum += input[nextPixelIndex]- input[previousPixelIndex]; + sum += data_i32[nextPixelIndex]- data_i32[previousPixelIndex]; nextPixelIndex ++; previousPixelIndex ++; } - hold = input[nextPixelIndex-1]; + hold = data_i32[nextPixelIndex-1]; for(; x < h; ++x, dstIndex += w) { - output[dstIndex] = (sum*scale+offset)>>14; + data_u8[dstIndex] = (sum*scale+offset)>>14; - sum += hold- input[previousPixelIndex]; + sum += hold- data_i32[previousPixelIndex]; previousPixelIndex ++; } - } - srcIndex += h; + srcIndex += h; + } } jsfeat.cache.put_buffer(tmp_buff); @@ -730,9 +746,9 @@ // please note: // dst_(type) size should be cols = src.cols+1, rows = src.rows+1 compute_integral_image: function(src, dst_sum, dst_sqsum, dst_tilted) { - var w0=src.cols,h0=src.rows,src_d=src.data; - var w1=w0+1; - var s,s2,p,pup,i=0,j=0,v,k; + var w0=src.cols|0,h0=src.rows|0,src_d=src.data; + var w1=(w0+1)|0; + var s=0,s2=0,p=0,pup=0,i=0,j=0,v=0,k=0; if(dst_sum && dst_sqsum) { // fill first row with zeros diff --git a/src/jsfeat_linalg.js b/src/jsfeat_linalg.js new file mode 100644 index 0000000..bf1666d --- /dev/null +++ b/src/jsfeat_linalg.js @@ -0,0 +1,721 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + */ + +(function(global) { + "use strict"; + // + + var linalg = (function() { + + var swap = function(A, i0, i1, t) { + t = A[i0]; + A[i0] = A[i1]; + A[i1] = t; + } + + var hypot = function(a, b) { + a = Math.abs(a); + b = Math.abs(b); + if( a > b ) { + b /= a; + return a*Math.sqrt(1.0 + b*b); + } + if( b > 0 ) { + a /= b; + return b*Math.sqrt(1.0 + a*a); + } + return 0.0; + } + + var JacobiImpl = function(A, astep, W, V, vstep, n) { + var eps = jsfeat.EPSILON; + var i=0,j=0,k=0,m=0,l=0,idx=0,_in=0,_in2=0; + var iters=0,max_iter=n*n*30; + var mv=0.0,val=0.0,p=0.0,y=0.0,t=0.0,s=0.0,c=0.0,a0=0.0,b0=0.0; + + var indR_buff = jsfeat.cache.get_buffer(n<<2); + var indC_buff = jsfeat.cache.get_buffer(n<<2); + var indR = indR_buff.i32; + var indC = indC_buff.i32; + + if(V) { + for(; i < n; i++) { + k = i*vstep; + for(j = 0; j < n; j++) { + V[k + j] = 0.0; + } + V[k + i] = 1.0; + } + } + + for(k = 0; k < n; k++) { + W[k] = A[(astep + 1)*k]; + if(k < n - 1) { + for(m = k+1, mv = Math.abs(A[astep*k + m]), i = k+2; i < n; i++) { + val = Math.abs(A[astep*k+i]); + if(mv < val) + mv = val, m = i; + } + indR[k] = m; + } + if(k > 0) { + for(m = 0, mv = Math.abs(A[k]), i = 1; i < k; i++) { + val = Math.abs(A[astep*i+k]); + if(mv < val) + mv = val, m = i; + } + indC[k] = m; + } + } + + if(n > 1) for( ; iters < max_iter; iters++) { + // find index (k,l) of pivot p + for(k = 0, mv = Math.abs(A[indR[0]]), i = 1; i < n-1; i++) { + val = Math.abs(A[astep*i + indR[i]]); + if( mv < val ) + mv = val, k = i; + } + l = indR[k]; + for(i = 1; i < n; i++) { + val = Math.abs(A[astep*indC[i] + i]); + if( mv < val ) + mv = val, k = indC[i], l = i; + } + + p = A[astep*k + l]; + + if(Math.abs(p) <= eps) break; + + y = (W[l] - W[k])*0.5; + t = Math.abs(y) + hypot(p, y); + s = hypot(p, t); + c = t/s; + s = p/s; t = (p/t)*p; + if(y < 0) + s = -s, t = -t; + A[astep*k + l] = 0; + + W[k] -= t; + W[l] += t; + + // rotate rows and columns k and l + for (i = 0; i < k; i++) { + _in = (astep * i + k); + _in2 = (astep * i + l); + a0 = A[_in]; + b0 = A[_in2]; + A[_in] = a0 * c - b0 * s; + A[_in2] = a0 * s + b0 * c; + } + for (i = (k + 1); i < l; i++) { + _in = (astep * k + i); + _in2 = (astep * i + l); + a0 = A[_in]; + b0 = A[_in2]; + A[_in] = a0 * c - b0 * s; + A[_in2] = a0 * s + b0 * c; + } + i = l + 1; + _in = (astep * k + i); + _in2 = (astep * l + i); + for (; i < n; i++, _in++, _in2++) { + a0 = A[_in]; + b0 = A[_in2]; + A[_in] = a0 * c - b0 * s; + A[_in2] = a0 * s + b0 * c; + } + + // rotate eigenvectors + if (V) { + _in = vstep * k; + _in2 = vstep * l; + for (i = 0; i < n; i++, _in++, _in2++) { + a0 = V[_in]; + b0 = V[_in2]; + V[_in] = a0 * c - b0 * s; + V[_in2] = a0 * s + b0 * c; + } + } + + for(j = 0; j < 2; j++) { + idx = j == 0 ? k : l; + if(idx < n - 1) { + for(m = idx+1, mv = Math.abs(A[astep*idx + m]), i = idx+2; i < n; i++) { + val = Math.abs(A[astep*idx+i]); + if( mv < val ) + mv = val, m = i; + } + indR[idx] = m; + } + if(idx > 0) { + for(m = 0, mv = Math.abs(A[idx]), i = 1; i < idx; i++) { + val = Math.abs(A[astep*i+idx]); + if( mv < val ) + mv = val, m = i; + } + indC[idx] = m; + } + } + } + + // sort eigenvalues & eigenvectors + for(k = 0; k < n-1; k++) { + m = k; + for(i = k+1; i < n; i++) { + if(W[m] < W[i]) + m = i; + } + if(k != m) { + swap(W, m, k, mv); + if(V) { + for(i = 0; i < n; i++) { + swap(V, vstep*m + i, vstep*k + i, mv); + } + } + } + } + + + jsfeat.cache.put_buffer(indR_buff); + jsfeat.cache.put_buffer(indC_buff); + } + + var JacobiSVDImpl = function(At, astep, _W, Vt, vstep, m, n, n1) { + var eps = jsfeat.EPSILON * 10.0; + var minval = jsfeat.FLT_MIN; + var i=0,j=0,k=0,iter=0,max_iter=Math.max(m, 30); + var Ai=0,Aj=0,Vi=0,Vj=0,changed=0; + var c=0.0, s=0.0, t=0.0; + var t0=0.0,t1=0.0,sd=0.0,beta=0.0,gamma=0.0,delta=0.0,a=0.0,p=0.0,b=0.0; + var seed = 0x1234; + var val=0.0,val0=0.0,asum=0.0; + + var W_buff = jsfeat.cache.get_buffer(n<<3); + var W = W_buff.f64; + + for(; i < n; i++) { + for(k = 0, sd = 0; k < m; k++) { + t = At[i*astep + k]; + sd += t*t; + } + W[i] = sd; + + if(Vt) { + for(k = 0; k < n; k++) { + Vt[i*vstep + k] = 0; + } + Vt[i*vstep + i] = 1; + } + } + + for(; iter < max_iter; iter++) { + changed = 0; + + for(i = 0; i < n-1; i++) { + for(j = i+1; j < n; j++) { + Ai = (i*astep)|0, Aj = (j*astep)|0; + a = W[i], p = 0, b = W[j]; + + k = 3; + p += At[Ai]*At[Aj]; + p += At[Ai+1]*At[Aj+1]; + p += At[Ai+2]*At[Aj+2]; + + for(; k < m; k++) + p += At[Ai+k]*At[Aj+k]; + + if(Math.abs(p) <= eps*Math.sqrt(a*b)) continue; + + p *= 2.0; + beta = a - b, gamma = hypot(p, beta); + if(beta < 0) { + delta = (gamma - beta)*0.5; + s = Math.sqrt(delta/gamma); + c = (p/(gamma*s*2.0)); + } else { + c = Math.sqrt((gamma + beta)/(gamma*2.0)); + s = (p/(gamma*c*2.0)); + delta = p*p*0.5/(gamma + beta); + } + + W[i] += delta; + W[j] -= delta; + + if( (iter & 1) && W[i] > 0 && W[j] > 0 ) { + k = 3;//unroll 3x3 + t0 = c*At[Ai] + s*At[Aj]; + t1 = -s*At[Ai] + c*At[Aj]; + At[Ai] = t0; At[Aj] = t1; + + t0 = c*At[Ai+1] + s*At[Aj+1]; + t1 = -s*At[Ai+1] + c*At[Aj+1]; + At[Ai+1] = t0; At[Aj+1] = t1; + + t0 = c*At[Ai+2] + s*At[Aj+2]; + t1 = -s*At[Ai+2] + c*At[Aj+2]; + At[Ai+2] = t0; At[Aj+2] = t1; + + for(; k < m; k++) { + t0 = c*At[Ai+k] + s*At[Aj+k]; + t1 = -s*At[Ai+k] + c*At[Aj+k]; + At[Ai+k] = t0; At[Aj+k] = t1; + } + } else { + a = b = 0; + k = 3; // unroll + t0 = c*At[Ai] + s*At[Aj]; + t1 = -s*At[Ai] + c*At[Aj]; + At[Ai] = t0; At[Aj] = t1; + a += t0*t0; b += t1*t1; + + t0 = c*At[Ai+1] + s*At[Aj+1]; + t1 = -s*At[Ai+1] + c*At[Aj+1]; + At[Ai+1] = t0; At[Aj+1] = t1; + a += t0*t0; b += t1*t1; + + t0 = c*At[Ai+2] + s*At[Aj+2]; + t1 = -s*At[Ai+2] + c*At[Aj+2]; + At[Ai+2] = t0; At[Aj+2] = t1; + a += t0*t0; b += t1*t1; + + for( ; k < m; k++ ) + { + t0 = c*At[Ai+k] + s*At[Aj+k]; + t1 = -s*At[Ai+k] + c*At[Aj+k]; + At[Ai+k] = t0; At[Aj+k] = t1; + + a += t0*t0; b += t1*t1; + } + W[i] = a; W[j] = b; + } + + changed = 1; + + if(Vt) { + Vi = (i*vstep)|0, Vj = (j*vstep)|0; + + k = 3; + t0 = c*Vt[Vi] + s*Vt[Vj]; + t1 = -s*Vt[Vi] + c*Vt[Vj]; + Vt[Vi] = t0; Vt[Vj] = t1; + + t0 = c*Vt[Vi+1] + s*Vt[Vj+1]; + t1 = -s*Vt[Vi+1] + c*Vt[Vj+1]; + Vt[Vi+1] = t0; Vt[Vj+1] = t1; + + t0 = c*Vt[Vi+2] + s*Vt[Vj+2]; + t1 = -s*Vt[Vi+2] + c*Vt[Vj+2]; + Vt[Vi+2] = t0; Vt[Vj+2] = t1; + + for(; k < n; k++) { + t0 = c*Vt[Vi+k] + s*Vt[Vj+k]; + t1 = -s*Vt[Vi+k] + c*Vt[Vj+k]; + Vt[Vi+k] = t0; Vt[Vj+k] = t1; + } + } + } + } + if(changed == 0) break; + } + + for(i = 0; i < n; i++) { + for(k = 0, sd = 0; k < m; k++) { + t = At[i*astep + k]; + sd += t*t; + } + W[i] = Math.sqrt(sd); + } + + for(i = 0; i < n-1; i++) { + j = i; + for(k = i+1; k < n; k++) { + if(W[j] < W[k]) + j = k; + } + if(i != j) { + swap(W, i, j, sd); + if(Vt) { + for(k = 0; k < m; k++) { + swap(At, i*astep + k, j*astep + k, t); + } + + for(k = 0; k < n; k++) { + swap(Vt, i*vstep + k, j*vstep + k, t); + } + } + } + } + + for(i = 0; i < n; i++) { + _W[i] = W[i]; + } + + if(!Vt) { + jsfeat.cache.put_buffer(W_buff); + return; + } + + for(i = 0; i < n1; i++) { + + sd = i < n ? W[i] : 0; + + while(sd <= minval) { + // if we got a zero singular value, then in order to get the corresponding left singular vector + // we generate a random vector, project it to the previously computed left singular vectors, + // subtract the projection and normalize the difference. + val0 = (1.0/m); + for(k = 0; k < m; k++) { + seed = (seed * 214013 + 2531011); + val = (((seed >> 16) & 0x7fff) & 256) != 0 ? val0 : -val0; + At[i*astep + k] = val; + } + for(iter = 0; iter < 2; iter++) { + for(j = 0; j < i; j++) { + sd = 0; + for(k = 0; k < m; k++) { + sd += At[i*astep + k]*At[j*astep + k]; + } + asum = 0.0; + for(k = 0; k < m; k++) { + t = (At[i*astep + k] - sd*At[j*astep + k]); + At[i*astep + k] = t; + asum += Math.abs(t); + } + asum = asum ? 1.0/asum : 0; + for(k = 0; k < m; k++) { + At[i*astep + k] *= asum; + } + } + } + sd = 0; + for(k = 0; k < m; k++) { + t = At[i*astep + k]; + sd += t*t; + } + sd = Math.sqrt(sd); + } + + s = (1.0/sd); + for(k = 0; k < m; k++) { + At[i*astep + k] *= s; + } + } + + jsfeat.cache.put_buffer(W_buff); + } + + return { + + lu_solve: function(A, B) { + var i=0,j=0,k=0,p=1,astep=A.cols; + var ad=A.data, bd=B.data; + var t,alpha,d,s; + + for(i = 0; i < astep; i++) { + k = i; + for(j = i+1; j < astep; j++) { + if(Math.abs(ad[j*astep + i]) > Math.abs(ad[k*astep+i])) { + k = j; + } + } + + if(Math.abs(ad[k*astep+i]) < jsfeat.EPSILON) { + return 0; // FAILED + } + + if(k != i) { + for(j = i; j < astep; j++ ) { + swap(ad, i*astep+j, k*astep+j, t); + } + + swap(bd, i, k, t); + p = -p; + } + + d = -1.0/ad[i*astep+i]; + + for(j = i+1; j < astep; j++) { + alpha = ad[j*astep+i]*d; + + for(k = i+1; k < astep; k++) { + ad[j*astep+k] += alpha*ad[i*astep+k]; + } + + bd[j] += alpha*bd[i]; + } + + ad[i*astep+i] = -d; + } + + for(i = astep-1; i >= 0; i--) { + s = bd[i]; + for(k = i+1; k < astep; k++) { + s -= ad[i*astep+k]*bd[k]; + } + bd[i] = s*ad[i*astep+i]; + } + + return 1; // OK + }, + + cholesky_solve: function(A, B) { + var col=0,row=0,col2=0,cs=0,rs=0,i=0,j=0; + var size = A.cols; + var ad=A.data, bd=B.data; + var val,inv_diag; + + for (col = 0; col < size; col++) { + inv_diag = 1.0; + cs = (col * size); + rs = cs; + for (row = col; row < size; row++) + { + // correct for the parts of cholesky already computed + val = ad[(rs+col)]; + for (col2 = 0; col2 < col; col2++) { + val -= ad[(col2*size+col)] * ad[(rs+col2)]; + } + if (row == col) { + // this is the diagonal element so don't divide + ad[(rs+col)] = val; + if(val == 0) { + return 0; + } + inv_diag = 1.0 / val; + } else { + // cache the value without division in the upper half + ad[(cs+row)] = val; + // divide my the diagonal element for all others + ad[(rs+col)] = val * inv_diag; + } + rs = (rs + size); + } + } + + // first backsub through L + cs = 0; + for (i = 0; i < size; i++) { + val = bd[i]; + for (j = 0; j < i; j++) { + val -= ad[(cs+j)] * bd[j]; + } + bd[i] = val; + cs = (cs + size); + } + // backsub through diagonal + cs = 0; + for (i = 0; i < size; i++) { + bd[i] /= ad[(cs + i)]; + cs = (cs + size); + } + // backsub through L Transpose + i = (size-1); + for (; i >= 0; i--) { + val = bd[i]; + j = (i + 1); + cs = (j * size); + for (; j < size; j++) { + val -= ad[(cs + i)] * bd[j]; + cs = (cs + size); + } + bd[i] = val; + } + + return 1; + }, + + svd_decompose: function(A, W, U, V, options) { + if (typeof options === "undefined") { options = 0; }; + var at=0,i=0,j=0,_m=A.rows,_n=A.cols,m=_m,n=_n; + var dt = A.type | jsfeat.C1_t; // we only work with single channel + + if(m < n) { + at = 1; + i = m; + m = n; + n = i; + } + + var a_buff = jsfeat.cache.get_buffer((m*m)<<3); + var w_buff = jsfeat.cache.get_buffer(n<<3); + var v_buff = jsfeat.cache.get_buffer((n*n)<<3); + + var a_mt = new jsfeat.matrix_t(m, m, dt, a_buff.data); + var w_mt = new jsfeat.matrix_t(1, n, dt, w_buff.data); + var v_mt = new jsfeat.matrix_t(n, n, dt, v_buff.data); + + if(at == 0) { + // transpose + jsfeat.matmath.transpose(a_mt, A); + } else { + for(i = 0; i < _n*_m; i++) { + a_mt.data[i] = A.data[i]; + } + for(; i < n*m; i++) { + a_mt.data[i] = 0; + } + } + + JacobiSVDImpl(a_mt.data, m, w_mt.data, v_mt.data, n, m, n, m); + + if(W) { + for(i=0; i < n; i++) { + W.data[i] = w_mt.data[i]; + } + for(; i < _n; i++) { + W.data[i] = 0; + } + } + + if (at == 0) { + if(U && (options & jsfeat.SVD_U_T)) { + i = m*m; + while(--i >= 0) { + U.data[i] = a_mt.data[i]; + } + } else if(U) { + jsfeat.matmath.transpose(U, a_mt); + } + + if(V && (options & jsfeat.SVD_V_T)) { + i = n*n; + while(--i >= 0) { + V.data[i] = v_mt.data[i]; + } + } else if(V) { + jsfeat.matmath.transpose(V, v_mt); + } + } else { + if(U && (options & jsfeat.SVD_U_T)) { + i = n*n; + while(--i >= 0) { + U.data[i] = v_mt.data[i]; + } + } else if(U) { + jsfeat.matmath.transpose(U, v_mt); + } + + if(V && (options & jsfeat.SVD_V_T)) { + i = m*m; + while(--i >= 0) { + V.data[i] = a_mt.data[i]; + } + } else if(V) { + jsfeat.matmath.transpose(V, a_mt); + } + } + + jsfeat.cache.put_buffer(a_buff); + jsfeat.cache.put_buffer(w_buff); + jsfeat.cache.put_buffer(v_buff); + + }, + + svd_solve: function(A, X, B) { + var i=0,j=0,k=0; + var pu=0,pv=0; + var nrows=A.rows,ncols=A.cols; + var sum=0.0,xsum=0.0,tol=0.0; + var dt = A.type | jsfeat.C1_t; + + var u_buff = jsfeat.cache.get_buffer((nrows*nrows)<<3); + var w_buff = jsfeat.cache.get_buffer(ncols<<3); + var v_buff = jsfeat.cache.get_buffer((ncols*ncols)<<3); + + var u_mt = new jsfeat.matrix_t(nrows, nrows, dt, u_buff.data); + var w_mt = new jsfeat.matrix_t(1, ncols, dt, w_buff.data); + var v_mt = new jsfeat.matrix_t(ncols, ncols, dt, v_buff.data); + + var bd = B.data, ud = u_mt.data, wd = w_mt.data, vd = v_mt.data; + + this.svd_decompose(A, w_mt, u_mt, v_mt, 0); + + tol = jsfeat.EPSILON * wd[0] * ncols; + + for (; i < ncols; i++, pv += ncols) { + xsum = 0.0; + for(j = 0; j < ncols; j++) { + if(wd[j] > tol) { + for(k = 0, sum = 0.0, pu = 0; k < nrows; k++, pu += ncols) { + sum += ud[pu + j] * bd[k]; + } + xsum += sum * vd[pv + j] / wd[j]; + } + } + X.data[i] = xsum; + } + + jsfeat.cache.put_buffer(u_buff); + jsfeat.cache.put_buffer(w_buff); + jsfeat.cache.put_buffer(v_buff); + }, + + svd_invert: function(Ai, A) { + var i=0,j=0,k=0; + var pu=0,pv=0,pa=0; + var nrows=A.rows,ncols=A.cols; + var sum=0.0,tol=0.0; + var dt = A.type | jsfeat.C1_t; + + var u_buff = jsfeat.cache.get_buffer((nrows*nrows)<<3); + var w_buff = jsfeat.cache.get_buffer(ncols<<3); + var v_buff = jsfeat.cache.get_buffer((ncols*ncols)<<3); + + var u_mt = new jsfeat.matrix_t(nrows, nrows, dt, u_buff.data); + var w_mt = new jsfeat.matrix_t(1, ncols, dt, w_buff.data); + var v_mt = new jsfeat.matrix_t(ncols, ncols, dt, v_buff.data); + + var id = Ai.data, ud = u_mt.data, wd = w_mt.data, vd = v_mt.data; + + this.svd_decompose(A, w_mt, u_mt, v_mt, 0); + + tol = jsfeat.EPSILON * wd[0] * ncols; + + for (; i < ncols; i++, pv += ncols) { + for (j = 0, pu = 0; j < nrows; j++, pa++) { + for (k = 0, sum = 0.0; k < ncols; k++, pu++) { + if (wd[k] > tol) sum += vd[pv + k] * ud[pu] / wd[k]; + } + id[pa] = sum; + } + } + + jsfeat.cache.put_buffer(u_buff); + jsfeat.cache.put_buffer(w_buff); + jsfeat.cache.put_buffer(v_buff); + }, + + eigenVV: function(A, vects, vals) { + var n=A.cols,i=n*n; + var dt = A.type | jsfeat.C1_t; + + var a_buff = jsfeat.cache.get_buffer((n*n)<<3); + var w_buff = jsfeat.cache.get_buffer(n<<3); + var a_mt = new jsfeat.matrix_t(n, n, dt, a_buff.data); + var w_mt = new jsfeat.matrix_t(1, n, dt, w_buff.data); + + while(--i >= 0) { + a_mt.data[i] = A.data[i]; + } + + JacobiImpl(a_mt.data, n, w_mt.data, vects ? vects.data : null, n, n); + + if(vals) { + while(--n >= 0) { + vals.data[n] = w_mt.data[n]; + } + } + + jsfeat.cache.put_buffer(a_buff); + jsfeat.cache.put_buffer(w_buff); + } + + }; + + })(); + + global.linalg = linalg; + +})(jsfeat); \ No newline at end of file diff --git a/src/jsfeat_mat_math.js b/src/jsfeat_mat_math.js new file mode 100644 index 0000000..6516785 --- /dev/null +++ b/src/jsfeat_mat_math.js @@ -0,0 +1,140 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + */ + +(function(global) { + "use strict"; + // + + var matmath = (function() { + + return { + transpose: function(At, A) { + var i=0,j=0,nrows=A.rows,ncols=A.cols; + var Ai=0,Ati=0,pAt=0; + var ad=A.data,atd=At.data; + + for (; i < nrows; Ati += 1, Ai += ncols, i++) { + pAt = Ati; + for (j = 0; j < ncols; pAt += nrows, j++) atd[pAt] = ad[Ai+j]; + } + }, + + // C = A * B + multiply: function(C, A, B) { + var i=0,j=0,k=0; + var Ap=0,pA=0,pB=0,p_B=0,Cp=0; + var ncols=A.cols,nrows=A.rows,mcols=B.cols; + var ad=A.data,bd=B.data,cd=C.data; + var sum=0.0; + + for (; i < nrows; Ap += ncols, i++) { + for (p_B = 0, j = 0; j < mcols; Cp++, p_B++, j++) { + pB = p_B; + pA = Ap; + sum = 0.0; + for (k = 0; k < ncols; pA++, pB += mcols, k++) { + sum += ad[pA] * bd[pB]; + } + cd[Cp] = sum; + } + } + }, + + // C = A * B' + multiply_ABt: function(C, A, B) { + var i=0,j=0,k=0; + var Ap=0,pA=0,pB=0,Cp=0; + var ncols=A.cols,nrows=A.rows,mrows=B.rows; + var ad=A.data,bd=B.data,cd=C.data; + var sum=0.0; + + for (; i < nrows; Ap += ncols, i++) { + for (pB = 0, j = 0; j < mrows; Cp++, j++) { + pA = Ap; + sum = 0.0; + for (k = 0; k < ncols; pA++, pB++, k++) { + sum += ad[pA] * bd[pB]; + } + cd[Cp] = sum; + } + } + }, + + // C = A' * B + multiply_AtB: function(C, A, B) { + var i=0,j=0,k=0; + var Ap=0,pA=0,pB=0,p_B=0,Cp=0; + var ncols=A.cols,nrows=A.rows,mcols=B.cols; + var ad=A.data,bd=B.data,cd=C.data; + var sum=0.0; + + for (; i < ncols; Ap++, i++) { + for (p_B = 0, j = 0; j < mcols; Cp++, p_B++, j++) { + pB = p_B; + pA = Ap; + sum = 0.0; + for (k = 0; k < nrows; pA += ncols, pB += mcols, k++) { + sum += ad[pA] * bd[pB]; + } + cd[Cp] = sum; + } + } + }, + + // C = A * A' + multiply_AAt: function(C, A) { + var i=0,j=0,k=0; + var pCdiag=0,p_A=0,pA=0,pB=0,pC=0,pCt=0; + var ncols=A.cols,nrows=A.rows; + var ad=A.data,cd=C.data; + var sum=0.0; + + for (; i < nrows; pCdiag += nrows + 1, p_A = pA, i++) { + pC = pCdiag; + pCt = pCdiag; + pB = p_A; + for (j = i; j < nrows; pC++, pCt += nrows, j++) { + pA = p_A; + sum = 0.0; + for (k = 0; k < ncols; k++) { + sum += ad[pA++] * ad[pB++]; + } + cd[pC] = sum + cd[pCt] = sum; + } + } + }, + + // C = A' * A + multiply_AtA: function(C, A) { + var i=0,j=0,k=0; + var p_A=0,pA=0,pB=0,p_C=0,pC=0,p_CC=0; + var ncols=A.cols,nrows=A.rows; + var ad=A.data,cd=C.data; + var sum=0.0; + + for (; i < ncols; p_C += ncols, i++) { + p_A = i; + p_CC = p_C + i; + pC = p_CC; + for (j = i; j < ncols; pC++, p_CC += ncols, j++) { + pA = p_A; + pB = j; + sum = 0.0; + for (k = 0; k < nrows; pA += ncols, pB += ncols, k++) { + sum += ad[pA] * ad[pB]; + } + cd[pC] = sum + cd[p_CC] = sum; + } + } + } + }; + + })(); + + global.matmath = matmath; + +})(jsfeat); \ No newline at end of file diff --git a/src/jsfeat_struct.js b/src/jsfeat_struct.js index 9e4280e..3943f59 100755 --- a/src/jsfeat_struct.js +++ b/src/jsfeat_struct.js @@ -6,6 +6,10 @@ "use strict"; // + // CONSTANTS + var EPSILON = 0.0000001192092896; + var FLT_MIN = 1E-37; + // implementation from CCV project // currently working only with u8,s32,f32 var U8_t = 0x0100, @@ -41,28 +45,42 @@ // box blur option var BOX_BLUR_NOSCALE = 0x01; + // svd options + var SVD_U_T = 0x01; + var SVD_V_T = 0x02; var data_t = (function () { - function data_t(size_in_bytes) { - this.size = size_in_bytes|0; - this.buffer = new ArrayBuffer(size_in_bytes); + function data_t(size_in_bytes, buffer) { + // we need align size to multiple of 8 + this.size = ((size_in_bytes + 7) | 0) & -8; + if (typeof buffer === "undefined") { + this.buffer = new ArrayBuffer(this.size); + } else { + this.buffer = buffer; + this.size = buffer.length; + } this.u8 = new Uint8Array(this.buffer); this.i32 = new Int32Array(this.buffer); this.f32 = new Float32Array(this.buffer); + this.f64 = new Float64Array(this.buffer); } return data_t; })(); var matrix_t = (function () { // columns, rows, data_type - function matrix_t(c, r, data_type) { + function matrix_t(c, r, data_type, data_buffer) { this.type = get_data_type(data_type)|0; this.channel = get_channel(data_type)|0; this.cols = c|0; this.rows = r|0; - this.buffer = new data_t((c * get_data_type_size(data_type) * get_channel(data_type)) * r); + if (typeof data_buffer === "undefined") { + this.buffer = new data_t((c * get_data_type_size(data_type) * get_channel(data_type)) * r); + } else { + this.buffer = data_buffer; + } // data user asked for - this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : this.buffer.f32); + this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : (this.type&F32_t ? this.buffer.f32 : this.buffer.f64)); } matrix_t.prototype.set_data_type = function(data_type) { this.type = get_data_type(data_type)|0; @@ -72,7 +90,13 @@ delete this.buffer; // this.buffer = new data_t((this.cols * get_data_type_size(data_type) * get_channel(data_type)) * this.rows); - this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : this.buffer.f32); + this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : (this.type&F32_t ? this.buffer.f32 : this.buffer.f64)); + } + matrix_t.prototype.set_data = function(array) { + var i = array.length; + while(--i >= 0) { + this.data[i] = array[i]; + } } return matrix_t; })(); @@ -142,8 +166,14 @@ global.C3_t = C3_t; global.C4_t = C4_t; + // constants + global.EPSILON = EPSILON; + global.FLT_MIN = FLT_MIN; + // options global.BOX_BLUR_NOSCALE = BOX_BLUR_NOSCALE; + global.SVD_U_T = SVD_U_T; + global.SVD_V_T = SVD_V_T; global.get_data_type = get_data_type; global.get_channel = get_channel; diff --git a/src/jsfeat_yape.js b/src/jsfeat_yape.js new file mode 100644 index 0000000..46616df --- /dev/null +++ b/src/jsfeat_yape.js @@ -0,0 +1,410 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + * Copyright 2007 Computer Vision Lab, + * Ecole Polytechnique Federale de Lausanne (EPFL), Switzerland. + */ + +(function(global) { + "use strict"; + // + + var yape = (function() { + + var precompute_directions = function(step, dirs, R) { + var i = 0; + var x, y; + + x = R; + for(y = 0; y < x; y++, i++) + { + x = (Math.sqrt((R * R - y * y)) + 0.5)|0; + dirs[i] = (x + step * y); + } + for(x-- ; x < y && x >= 0; x--, i++) + { + y = (Math.sqrt((R * R - x * x)) + 0.5)|0; + dirs[i] = (x + step * y); + } + for( ; -x < y; x--, i++) + { + y = (Math.sqrt((R * R - x * x)) + 0.5)|0; + dirs[i] = (x + step * y); + } + for(y-- ; y >= 0; y--, i++) + { + x = (-Math.sqrt((R * R - y * y)) - 0.5)|0; + dirs[i] = (x + step * y); + } + for(; y > x; y--, i++) + { + x = (-Math.sqrt((R * R - y * y)) - 0.5)|0; + dirs[i] = (x + step * y); + } + for(x++ ; x <= 0; x++, i++) + { + y = (-Math.sqrt((R * R - x * x)) - 0.5)|0; + dirs[i] = (x + step * y); + } + for( ; x < -y; x++, i++) + { + y = (-Math.sqrt((R * R - x * x)) - 0.5)|0; + dirs[i] = (x + step * y); + } + for(y++ ; y < 0; y++, i++) + { + x = (Math.sqrt((R * R - y * y)) + 0.5)|0; + dirs[i] = (x + step * y); + } + + dirs[i] = dirs[0]; + dirs[i + 1] = dirs[1]; + return i; + } + + var third_check = function (Sb, off, step) { + var n = 0; + if(Sb[off+1] != 0) n++; + if(Sb[off-1] != 0) n++; + if(Sb[off+step] != 0) n++; + if(Sb[off+step+1] != 0) n++; + if(Sb[off+step-1] != 0) n++; + if(Sb[off-step] != 0) n++; + if(Sb[off-step+1] != 0) n++; + if(Sb[off-step-1] != 0) n++; + + return n; + } + + var is_local_maxima = function(p, off, v, step, neighborhood) { + var x, y; + + if (v > 0) { + off -= step*neighborhood; + for (y= -neighborhood; y<=neighborhood; ++y) { + for (x= -neighborhood; x<=neighborhood; ++x) { + if (p[off+x] > v) return false; + } + off += step; + } + } else { + off -= step*neighborhood; + for (y= -neighborhood; y<=neighborhood; ++y) { + for (x= -neighborhood; x<=neighborhood; ++x) { + if (p[off+x] < v) return false; + } + off += step; + } + } + return true; + } + + var perform_one_point = function(I, x, Scores, Im, Ip, dirs, opposite, dirs_nb) { + var score = 0; + var a = 0, b = (opposite - 1)|0; + var A=0, B0=0, B1=0, B2=0; + var state=0; + + // WE KNOW THAT NOT(A ~ I0 & B1 ~ I0): + A = I[x+dirs[a]]; + if ((A <= Ip)) { + if ((A >= Im)) { // A ~ I0 + B0 = I[x+dirs[b]]; + if ((B0 <= Ip)) { + if ((B0 >= Im)) { Scores[x] = 0; return; } + else { + b++; B1 = I[x+dirs[b]]; + if ((B1 > Ip)) { + b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) state = 3; + else if ((B2 < Im)) state = 6; + else { Scores[x] = 0; return; } // A ~ I0, B2 ~ I0 + } + else/* if ((B1 < Im))*/ { + b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) state = 7; + else if ((B2 < Im)) state = 2; + else { Scores[x] = 0; return; } // A ~ I0, B2 ~ I0 + } + //else { Scores[x] = 0; return; } // A ~ I0, B1 ~ I0 + } + } + else { // B0 < I0 + b++; B1 = I[x+dirs[b]]; + if ((B1 > Ip)) { + b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) state = 3; + else if ((B2 < Im)) state = 6; + else { Scores[x] = 0; return; } // A ~ I0, B2 ~ I0 + } + else if ((B1 < Im)) { + b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) state = 7; + else if ((B2 < Im)) state = 2; + else { Scores[x] = 0; return; } // A ~ I0, B2 ~ I0 + } + else { Scores[x] = 0; return; } // A ~ I0, B1 ~ I0 + } + } + else { // A > I0 + B0 = I[x+dirs[b]]; + if ((B0 > Ip)) { Scores[x] = 0; return; } + b++; B1 = I[x+dirs[b]]; + if ((B1 > Ip)) { Scores[x] = 0; return; } + b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { Scores[x] = 0; return; } + state = 1; + } + } + else // A < I0 + { + B0 = I[x+dirs[b]]; + if ((B0 < Im)) { Scores[x] = 0; return; } + b++; B1 = I[x+dirs[b]]; + if ((B1 < Im)) { Scores[x] = 0; return; } + b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { Scores[x] = 0; return; } + state = 0; + } + + for(a = 1; a <= opposite; a++) + { + A = I[x+dirs[a]]; + + switch(state) + { + case 0: + if ((A > Ip)) { + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { Scores[x] = 0; return; } + { score -= A + B1; state = 0; break; }; + } + if ((A < Im)) { + if ((B1 > Ip)) { Scores[x] = 0; return; } + if ((B2 > Ip)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { Scores[x] = 0; return; } + { score -= A + B1; state = 8; break; }; + } + // A ~ I0 + if ((B1 <= Ip)) { Scores[x] = 0; return; } + if ((B2 <= Ip)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { score -= A + B1; state = 3; break; }; + if ((B2 < Im)) { score -= A + B1; state = 6; break; }; + { Scores[x] = 0; return; } + + case 1: + if ((A < Im)) { + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { Scores[x] = 0; return; } + { score -= A + B1; state = 1; break; }; + } + if ((A > Ip)) { + if ((B1 < Im)) { Scores[x] = 0; return; } + if ((B2 < Im)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { Scores[x] = 0; return; } + { score -= A + B1; state = 9; break; }; + } + // A ~ I0 + if ((B1 >= Im)) { Scores[x] = 0; return; } + if ((B2 >= Im)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { score -= A + B1; state = 2; break; }; + if ((B2 > Ip)) { score -= A + B1; state = 7; break; }; + { Scores[x] = 0; return; } + + case 2: + if ((A > Ip)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((A < Im)) + { + if ((B2 > Ip)) { Scores[x] = 0; return; } + { score -= A + B1; state = 4; break; }; + } + // A ~ I0 + if ((B2 > Ip)) { score -= A + B1; state = 7; break; }; + if ((B2 < Im)) { score -= A + B1; state = 2; break; }; + { Scores[x] = 0; return; } // A ~ I0, B2 ~ I0 + + case 3: + if ((A < Im)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((A > Ip)) { + if ((B2 < Im)) { Scores[x] = 0; return; } + { score -= A + B1; state = 5; break; }; + } + // A ~ I0 + if ((B2 > Ip)) { score -= A + B1; state = 3; break; }; + if ((B2 < Im)) { score -= A + B1; state = 6; break; }; + { Scores[x] = 0; return; } + + case 4: + if ((A > Ip)) { Scores[x] = 0; return; } + if ((A < Im)) { + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { Scores[x] = 0; return; } + { score -= A + B1; state = 1; break; }; + } + if ((B2 >= Im)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { score -= A + B1; state = 2; break; }; + if ((B2 > Ip)) { score -= A + B1; state = 7; break; }; + { Scores[x] = 0; return; } + + case 5: + if ((A < Im)) { Scores[x] = 0; return; } + if ((A > Ip)) { + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { Scores[x] = 0; return; } + { score -= A + B1; state = 0; break; }; + } + // A ~ I0 + if ((B2 <= Ip)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { score -= A + B1; state = 3; break; }; + if ((B2 < Im)) { score -= A + B1; state = 6; break; }; + { Scores[x] = 0; return; } + + case 7: + if ((A > Ip)) { Scores[x] = 0; return; } + if ((A < Im)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + // A ~ I0 + if ((B2 > Ip)) { score -= A + B1; state = 3; break; }; + if ((B2 < Im)) { score -= A + B1; state = 6; break; }; + { Scores[x] = 0; return; } // A ~ I0, B2 ~ I0 + + case 6: + if ((A > Ip)) { Scores[x] = 0; return; } + if ((A < Im)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + // A ~ I0 + if ((B2 < Im)) { score -= A + B1; state = 2; break; }; + if ((B2 > Ip)) { score -= A + B1; state = 7; break; }; + { Scores[x] = 0; return; } // A ~ I0, B2 ~ I0 + + case 8: + if ((A > Ip)) { + if ((B2 < Im)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { Scores[x] = 0; return; } + { score -= A + B1; state = 9; break; }; + } + if ((A < Im)) { + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { Scores[x] = 0; return; } + { score -= A + B1; state = 1; break; }; + } + { Scores[x] = 0; return; } + + case 9: + if ((A < Im)) { + if ((B2 > Ip)) { Scores[x] = 0; return; } + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 > Ip)) { Scores[x] = 0; return; } + { score -= A + B1; state = 8; break; }; + } + if ((A > Ip)) { + B1 = B2; b++; B2 = I[x+dirs[b]]; + if ((B2 < Im)) { Scores[x] = 0; return; } + { score -= A + B1; state = 0; break; }; + } + { Scores[x] = 0; return; } + + default: + //"PB default"; + break; + } // switch(state) + } // for(a...) + + Scores[x] = (score + dirs_nb * I[x]); + } + + var lev_table_t = (function () { + function lev_table_t(w, h, r) { + this.dirs = new Int32Array(1024); + this.dirs_count = precompute_directions(w, this.dirs, r)|0; + this.scores = new Int32Array(w*h); + this.radius = r|0; + } + return lev_table_t; + })(); + + return { + + level_tables: [], + tau: 7, + + init: function(width, height, radius, pyramid_levels) { + if (typeof pyramid_levels === "undefined") { pyramid_levels = 1; } + var i; + radius = Math.min(radius, 7); + radius = Math.max(radius, 3); + for(i = 0; i < pyramid_levels; ++i) { + this.level_tables[i] = new lev_table_t(width>>i, height>>i, radius); + } + }, + + detect: function(src, points, border) { + if (typeof border === "undefined") { border = 4; } + var t = this.level_tables[0]; + var R = t.radius|0, Rm1 = (R-1)|0; + var dirs = t.dirs; + var dirs_count = t.dirs_count|0; + var opposite = dirs_count >> 1; + var img = src.data, w=src.cols|0, h=src.rows|0,hw=w>>1; + var scores = t.scores; + var x=0,y=0,row=0,rowx=0,ip=0,im=0,abs_score=0, score=0; + var tau = this.tau|0; + var number_of_points = 0, pt; + + var sx = Math.max(R+1, border)|0; + var sy = Math.max(R+1, border)|0; + var ex = Math.min(w-R-2, w-border)|0; + var ey = Math.min(h-R-2, h-border)|0; + + row = (sy*w+sx)|0; + for(y = sy; y < ey; ++y, row+=w) { + for(x = sx, rowx = row; x < ex; ++x, ++rowx) { + ip = img[rowx] + tau, im = img[rowx] - tau; + + if (im= 3 && is_local_maxima(scores, rowx, score, hw, R)) { + pt = points[number_of_points]; + pt.x = x, pt.y = y, pt.score = abs_score; + ++number_of_points; + + x += Rm1, rowx += Rm1; + } + } + } + } + + return number_of_points; + } + }; + + })(); + + global.yape = yape; + +})(jsfeat); \ No newline at end of file diff --git a/src/jsfeat_yape06.js b/src/jsfeat_yape06.js new file mode 100644 index 0000000..2d1559b --- /dev/null +++ b/src/jsfeat_yape06.js @@ -0,0 +1,95 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + * Copyright 2007 Computer Vision Lab, + * Ecole Polytechnique Federale de Lausanne (EPFL), Switzerland. + * @author Vincent Lepetit (http://cvlab.epfl.ch/~lepetit) + */ + +(function(global) { + "use strict"; + // + + var yape06 = (function() { + + var compute_laplacian = function(src, dst, w, h, Dxx, Dyy) { + var y=0,x=0,yrow=(Dxx*w)|0,row=yrow; + + for(y = Dxx; y < h - Dxx; ++y, yrow+=w, row = yrow) { + for(x = w - Dxx; x >= Dxx; --x) { + dst[row] = -4 * src[row] + src[row+Dxx] + src[row-Dxx] + src[row+Dyy] + src[row-Dyy]; + ++row; + } + } + } + + var hessian_min_eigen_value = function(src, off, tr, Dxx, Dyy, Dxy, Dyx) { + var Ixx = -2 * src[off] + src[off + Dxx] + src[off - Dxx]; + var Iyy = -2 * src[off] + src[off + Dyy] + src[off - Dyy]; + var Ixy = src[off + Dxy] + src[off - Dxy] - src[off + Dyx] - src[off - Dyx]; + var sqrt_delta = ( Math.sqrt(((Ixx - Iyy) * (Ixx - Iyy) + 4 * Ixy * Ixy) ) )|0; + + return Math.min(Math.abs(tr - sqrt_delta), Math.abs(-(tr + sqrt_delta))); + } + + return { + + laplacian_threshold: 30, + min_eigen_value_threshold: 25, + + detect: function(src, points) { + var x=0,y=0; + var w=src.cols, h=src.rows, srd_d=src.data; + var Dxx = 5, Dyy = (5 * w)|0; + var Dxy = (3 + 3 * w)|0, Dyx = (3 - 3 * w)|0; + var lap_buf = jsfeat.cache.get_buffer((w*h)<<2); + var laplacian = lap_buf.i32; + var lv=0, row=0,rowx=0,min_eigen_value=0,pt; + var number_of_points = 0; + var lap_thresh = this.laplacian_threshold; + var eigen_thresh = this.min_eigen_value_threshold; + + x = w*h; + while(--x>=0) {laplacian[x]=0;} + compute_laplacian(srd_d, laplacian, w, h, Dxx, Dyy); + + row = (w+1)|0; + for(y = 1; y < h-1; ++y, row += w) { + for(x = 1, rowx=row; x < w-1; ++x, ++rowx) { + + lv = laplacian[rowx]; + if ((lv < -lap_thresh && + lv < laplacian[rowx - 1] && lv < laplacian[rowx + 1] && + lv < laplacian[rowx - w] && lv < laplacian[rowx + w] && + lv < laplacian[rowx - w - 1] && lv < laplacian[rowx + w - 1] && + lv < laplacian[rowx - w + 1] && lv < laplacian[rowx + w + 1]) + || + (lv > lap_thresh && + lv > laplacian[rowx - 1] && lv > laplacian[rowx + 1] && + lv > laplacian[rowx - w] && lv > laplacian[rowx + w] && + lv > laplacian[rowx - w - 1] && lv > laplacian[rowx + w - 1] && + lv > laplacian[rowx - w + 1] && lv > laplacian[rowx + w + 1]) + ) { + + min_eigen_value = hessian_min_eigen_value(srd_d, rowx, lv, Dxx, Dyy, Dxy, Dyx); + if (min_eigen_value > eigen_thresh) { + pt = points[number_of_points]; + pt.x = x, pt.y = y, pt.score = min_eigen_value; + ++number_of_points; + ++x, ++rowx; + } + } + } + } + + jsfeat.cache.put_buffer(lap_buf); + + return number_of_points; + } + + }; + })(); + + global.yape06 = yape06; + +})(jsfeat); From 8c2b440c0e82d71835a2c8289b2ed2e976b06ed7 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Thu, 6 Dec 2012 14:40:33 +0400 Subject: [PATCH 14/46] Update README.md --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 919b66d..af7a457 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,16 @@ The project aim is to explore JS/HTML5 possibilities using modern & state-of-art * equalize histogram ([Demo](http://inspirit.github.com/jsfeat/sample_equalize_hist.html)) * canny edges ([Demo](http://inspirit.github.com/jsfeat/sample_canny_edge.html)) * find more at Examples and Documentation page -* Fast Corners feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_fast_corners.html)) +* Linear Algebra module + * LU (Gaussian elimination) solver + * Cholesky solver + * SVD decomposition, solver and pseudo-inverse + * Eigen Vectors and Values +* Matrix Math module for various matrix operation such as traspose, multiply etc. +* Features 2D + * Fast Corners feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_fast_corners.html)) + * YAPE06 feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_yape06.html)) + * YAPE feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_yape.html)) * Lucas-Kanade optical flow ([Demo](http://inspirit.github.com/jsfeat/sample_oflow_lk.html) - click to add points) * HAAR object detector ([Demo](http://inspirit.github.com/jsfeat/sample_haar_face.html)) * BBF object detector ([Demo](http://inspirit.github.com/jsfeat/sample_bbf_face.html)) From 3b2d42d7d6ba4ca5d326bbb627957d650111de05 Mon Sep 17 00:00:00 2001 From: Eugeny Zatepyakin Date: Sat, 8 Dec 2012 17:18:11 +0400 Subject: [PATCH 15/46] export module added export to support NodeJS export. didn't test since I don't use NodeJS --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 45 +++++++++++++++++++++++--------------------- compile/build.xml | 1 + package.json | 8 ++++++++ src/jsfeat_export.js | 20 ++++++++++++++++++++ 5 files changed, 54 insertions(+), 22 deletions(-) create mode 100644 package.json create mode 100644 src/jsfeat_export.js diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index c721956..6b1be6c 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};self.Int32Array=self.Int32Array||Array;self.Uint32Array=self.Uint32Array||Array;self.Uint8Array=self.Uint8Array||Array;self.Float32Array=self.Float32Array||Array;self.Float64Array=self.Float64Array||Array;(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.buffer=new r((B*b(A)*h(A))*z)}else{this.buffer=y}this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}x.prototype.set_data_type=function(y){this.type=u(y)|0;this.channel=h(y)|0;delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(y)*h(y))*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.set_data=function(z){var y=z.length;while(--y>=0){this.data[y]=z[y]}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{transpose:function(f,d){var l=0,h=0,k=d.rows,c=d.cols;var n=0,e=0,m=0;var o=d.data,g=f.data;for(;lg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=3;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;H=Y*D[K+2]+O*D[J+2];G=-O*D[K+2]+Y*D[J+2];D[K+2]=H;D[J+2]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(s,K,n,l){if(typeof l==="undefined"){l=0}var A=s.cols,F=s.rows,t=F<<1,z=A<<1;var E=0,v=0,u=0,m=0;var C=((n<<1)+1)|0;var p=(n+1)|0,I=(p+1)|0;var q=8192;var J=l&jsfeat.BOX_BLUR_NOSCALE?1:(16384/(C*C)+0.5)|0;var D=jsfeat.cache.get_buffer((A*F)<<2);var j=0,H=0,o=0,r=0,k=0;var G=D.i32;var g=s.data;var B=0;for(u=0;u>14;j+=G[r]-B;r++}for(;v>14;j+=G[r]-G[k];g[H+A]=(j*J+q)>>14;j+=G[r+1]-G[k+1];r+=2;k+=2}for(;v>14;j+=G[r]-G[k];r++;k++}B=G[r-1];for(;v>14;j+=B-G[k];k++}o+=F}}jsfeat.cache.put_buffer(D)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(i,o){var r=i.cols,m=i.rows;var l=r>>1,n=m>>1;var q=0,p=0,g=0,t=0,s=0;var k=i.data,j=o.data;for(p=0;p>2;j[s+1]=(k[t+2]+k[t+3]+k[t+r+2]+k[t+r+3]+2)>>2}for(;q>2}g+=r<<1}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(f){var l=f.stage_classifier.length;for(var g=0;g=0){d=f[r];o[r]=h|(d<<16)|(d<<8)|d}l.putImageData(v,0,0);jsfeat.cache.put_buffer(j)}this.interval=t;this.scale=Math.pow(2,1/(this.interval+1));this.next=(this.interval+1)|0;this.scale_to=(Math.log(Math.min(e.width/p,e.height/x))/Math.log(this.scale))|0;var q=document.createElement("canvas");q.width=e.width;q.height=e.height;var s=q.getContext("2d");var w=new Array((this.scale_to+this.next*2)*4);w[0]={width:e.width,height:e.height,data:e.getContext("2d").getImageData(0,0,e.width,e.height).data};var u,g;for(r=1;r<=this.interval;++r){u=(e.width/Math.pow(this.scale,r))|0;g=(e.height/Math.pow(this.scale,r))|0;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next*2;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,1,0,e.width-1,e.height,0,0,u-2,g);w[r*4+1]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,0,1,e.width,e.height-1,0,0,u,g-2);w[r*4+2]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,1,1,e.width-1,e.height-1,0,0,u-2,g-2);w[r*4+3]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}return w},detect:function(z,H){var g=this.interval;var J=this.scale;var l=this.next;var h=this.scale_to;var X=0,W=0,V=0,S=0,O=0,N=0,Q=0,w=0,F=0,E=0,R=0,Z=0,I=0,Y=0,t=0,U=0,e=0;var B=0,T,M,A,D,C,K=true,m=true;var u=1,s=1;var r=[0,1,0,1];var o=[0,0,1,1];var G=[];var v=[],d=[0,0,0];var L=[0,0,0];var P=[0,0,0];for(X=0;X>2);e=z[t+(l<<3)].height-(H.height>>2);L[0]=z[t].width<<2;L[1]=z[t+(l<<2)].width<<2;L[2]=z[t+(l<<3)].width<<2;P[0]=(z[t].width<<4)-(U<<4);P[1]=(z[t+(l<<2)].width<<3)-(U<<3);P[2]=(z[t+(l<<3)].width<<2)-(U<<2);w=H.stage_classifier.length;for(W=0;W=0){R=v[D.pz[Y]][d[D.pz[Y]]+D.px[Y]];if(R=0){S=v[D.nz[Y]][d[D.nz[Y]]+D.nx[Y]];if(S>I){if(Z<=S){m=false;break}I=S}}}B+=(m)?T[(V<<1)+1]:T[V<<1]}}if(Br[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();a.bbf=b})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.buffer=new r((B*b(A)*h(A))*z)}else{this.buffer=y}this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}x.prototype.set_data_type=function(y){this.type=u(y)|0;this.channel=h(y)|0;delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(y)*h(y))*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.set_data=function(z){var y=z.length;while(--y>=0){this.data[y]=z[y]}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{transpose:function(f,d){var l=0,h=0,k=d.rows,c=d.cols;var n=0,e=0,m=0;var o=d.data,g=f.data;for(;lg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=3;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;H=Y*D[K+2]+O*D[J+2];G=-O*D[K+2]+Y*D[J+2];D[K+2]=H;D[J+2]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(s,K,n,l){if(typeof l==="undefined"){l=0}var A=s.cols,F=s.rows,t=F<<1,z=A<<1;var E=0,v=0,u=0,m=0;var C=((n<<1)+1)|0;var p=(n+1)|0,I=(p+1)|0;var q=8192;var J=l&jsfeat.BOX_BLUR_NOSCALE?1:(16384/(C*C)+0.5)|0;var D=jsfeat.cache.get_buffer((A*F)<<2);var j=0,H=0,o=0,r=0,k=0;var G=D.i32;var g=s.data;var B=0;for(u=0;u>14;j+=G[r]-B;r++}for(;v>14;j+=G[r]-G[k];g[H+A]=(j*J+q)>>14;j+=G[r+1]-G[k+1];r+=2;k+=2}for(;v>14;j+=G[r]-G[k];r++;k++}B=G[r-1];for(;v>14;j+=B-G[k];k++}o+=F}}jsfeat.cache.put_buffer(D)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(i,o){var r=i.cols,m=i.rows;var l=r>>1,n=m>>1;var q=0,p=0,g=0,t=0,s=0;var k=i.data,j=o.data;for(p=0;p>2;j[s+1]=(k[t+2]+k[t+3]+k[t+r+2]+k[t+r+3]+2)>>2}for(;q>2}g+=r<<1}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(f){var l=f.stage_classifier.length;for(var g=0;g=0){d=f[r];o[r]=h|(d<<16)|(d<<8)|d}l.putImageData(v,0,0);jsfeat.cache.put_buffer(j)}this.interval=t;this.scale=Math.pow(2,1/(this.interval+1));this.next=(this.interval+1)|0;this.scale_to=(Math.log(Math.min(e.width/p,e.height/x))/Math.log(this.scale))|0;var q=document.createElement("canvas");q.width=e.width;q.height=e.height;var s=q.getContext("2d");var w=new Array((this.scale_to+this.next*2)*4);w[0]={width:e.width,height:e.height,data:e.getContext("2d").getImageData(0,0,e.width,e.height).data};var u,g;for(r=1;r<=this.interval;++r){u=(e.width/Math.pow(this.scale,r))|0;g=(e.height/Math.pow(this.scale,r))|0;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next*2;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,1,0,e.width-1,e.height,0,0,u-2,g);w[r*4+1]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,0,1,e.width,e.height-1,0,0,u,g-2);w[r*4+2]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,1,1,e.width-1,e.height-1,0,0,u-2,g-2);w[r*4+3]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}return w},detect:function(z,H){var g=this.interval;var J=this.scale;var l=this.next;var h=this.scale_to;var X=0,W=0,V=0,S=0,O=0,N=0,Q=0,w=0,F=0,E=0,R=0,Z=0,I=0,Y=0,t=0,U=0,e=0;var B=0,T,M,A,D,C,K=true,m=true;var u=1,s=1;var r=[0,1,0,1];var o=[0,0,1,1];var G=[];var v=[],d=[0,0,0];var L=[0,0,0];var P=[0,0,0];for(X=0;X>2);e=z[t+(l<<3)].height-(H.height>>2);L[0]=z[t].width<<2;L[1]=z[t+(l<<2)].width<<2;L[2]=z[t+(l<<3)].width<<2;P[0]=(z[t].width<<4)-(U<<4);P[1]=(z[t+(l<<2)].width<<3)-(U<<3);P[2]=(z[t+(l<<3)].width<<2)-(U<<2);w=H.stage_classifier.length;for(W=0;W=0){R=v[D.pz[Y]][d[D.pz[Y]]+D.px[Y]];if(R=0){S=v[D.nz[Y]][d[D.nz[Y]]+D.nx[Y]];if(S>I){if(Z<=S){m=false;break}I=S}}}B+=(m)?T[(V<<1)+1]:T[V<<1]}}if(Br[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();a.bbf=b})(jsfeat);(function(a){var b={};if(typeof(exports)==="undefined"){b.exports=window}else{b.exports=exports}if(typeof(b.exports)!=="undefined"){b.exports.jsfeat=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index 12e1f2c..29eecc5 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -4,14 +4,6 @@ // namespace ? var jsfeat = jsfeat || { REVISION: 'ALPHA' }; - -// use typed arrays if possible -self.Int32Array = self.Int32Array || Array; -self.Uint32Array = self.Uint32Array || Array; -self.Uint8Array = self.Uint8Array || Array; -self.Float32Array = self.Float32Array || Array; -self.Float64Array = self.Float64Array || Array; - /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -199,7 +191,6 @@ self.Float64Array = self.Float64Array || Array; global.point2d_t = point2d_t; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -279,7 +270,6 @@ self.Float64Array = self.Float64Array || Array; cache.allocate(30, 640*4); })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -577,7 +567,6 @@ self.Float64Array = self.Float64Array || Array; global.math = math; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -717,7 +706,7 @@ self.Float64Array = self.Float64Array || Array; global.matmath = matmath; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -1438,7 +1427,7 @@ self.Float64Array = self.Float64Array || Array; global.linalg = linalg; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -1610,7 +1599,7 @@ self.Float64Array = self.Float64Array || Array; global.transform = transform; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -2712,7 +2701,6 @@ self.Float64Array = self.Float64Array || Array; global.imgproc = imgproc; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3052,7 +3040,6 @@ The references are: fast_corners.set_threshold(20); // set default })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3148,7 +3135,6 @@ The references are: global.yape06 = yape06; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3558,7 +3544,7 @@ The references are: global.yape = yape; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3803,7 +3789,6 @@ The references are: global.optical_flow_lk = optical_flow_lk; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -4094,7 +4079,6 @@ The references are: global.haar = haar; })(jsfeat); - /** * BBF: Brightness Binary Feature * @@ -4489,4 +4473,23 @@ The references are: global.bbf = bbf; })(jsfeat); - +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + */ + +(function(lib) { + "use strict"; + + var shim = {}; + if (typeof(exports) === 'undefined') { + // in a browser, define its namespaces in global + shim.exports = window; + } else { + // in commonjs, define its namespaces in exports + shim.exports = exports; + } + + if(typeof(shim.exports) !== 'undefined') { + shim.exports.jsfeat = lib; + } +})(jsfeat); diff --git a/compile/build.xml b/compile/build.xml index 2b93237..83a1631 100755 --- a/compile/build.xml +++ b/compile/build.xml @@ -16,6 +16,7 @@ + diff --git a/package.json b/package.json new file mode 100644 index 0000000..19f4f0e --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "name" : "jsfeat", + "version" : "0.0.1", + "description" : "JavaScript Computer Vision library", + "author" : "Eugene Zatepyakin (http://www.inspirit.ru/)", + "files" : "build/jsfeat.js", + "main" : "build/jsfeat" +} \ No newline at end of file diff --git a/src/jsfeat_export.js b/src/jsfeat_export.js new file mode 100644 index 0000000..09dff3b --- /dev/null +++ b/src/jsfeat_export.js @@ -0,0 +1,20 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + */ + +(function(lib) { + "use strict"; + + var shim = {}; + if (typeof(exports) === 'undefined') { + // in a browser, define its namespaces in global + shim.exports = window; + } else { + // in commonjs, define its namespaces in exports + shim.exports = exports; + } + + if(typeof(shim.exports) !== 'undefined') { + shim.exports.jsfeat = lib; + } +})(jsfeat); \ No newline at end of file From 2708971bcaf475b9acdcf36169c0c994fe3b7559 Mon Sep 17 00:00:00 2001 From: Adam Ahmed Date: Sun, 9 Dec 2012 07:44:33 +1100 Subject: [PATCH 16/46] Move jsfeat to the root of the exports. This way it can be require'd like: var jsfeat = require('jsfeat'); Rather than: var jsfeat = require('jsfeat').jsfeat; --- package.json | 4 ++-- src/jsfeat_export.js | 19 +++++++------------ 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 19f4f0e..e259c5f 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name" : "jsfeat", - "version" : "0.0.1", + "version" : "0.0.2", "description" : "JavaScript Computer Vision library", "author" : "Eugene Zatepyakin (http://www.inspirit.ru/)", "files" : "build/jsfeat.js", "main" : "build/jsfeat" -} \ No newline at end of file +} diff --git a/src/jsfeat_export.js b/src/jsfeat_export.js index 09dff3b..2764bc3 100644 --- a/src/jsfeat_export.js +++ b/src/jsfeat_export.js @@ -1,20 +1,15 @@ /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ - + (function(lib) { "use strict"; - var shim = {}; - if (typeof(exports) === 'undefined') { + if (!module || !module.exports) { // in a browser, define its namespaces in global - shim.exports = window; - } else { - // in commonjs, define its namespaces in exports - shim.exports = exports; - } - - if(typeof(shim.exports) !== 'undefined') { - shim.exports.jsfeat = lib; + window.jsfeat = lib; + } else { + // in commonjs, or when AMD wrapping has been applied, define its namespaces as exports + module.exports = lib; } -})(jsfeat); \ No newline at end of file +})(jsfeat); From 9eade0581f348b0b5cfb3b00a90f7da8a8ae2f2b Mon Sep 17 00:00:00 2001 From: Eugeny Zatepyakin Date: Sun, 9 Dec 2012 12:54:32 +0400 Subject: [PATCH 17/46] node export modified node export code and rebuild all-in-one libraries --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 17 ++++++----------- package.json | 2 +- src/jsfeat_export.js | 2 +- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index 6b1be6c..553aa78 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.buffer=new r((B*b(A)*h(A))*z)}else{this.buffer=y}this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}x.prototype.set_data_type=function(y){this.type=u(y)|0;this.channel=h(y)|0;delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(y)*h(y))*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.set_data=function(z){var y=z.length;while(--y>=0){this.data[y]=z[y]}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{transpose:function(f,d){var l=0,h=0,k=d.rows,c=d.cols;var n=0,e=0,m=0;var o=d.data,g=f.data;for(;lg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=3;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;H=Y*D[K+2]+O*D[J+2];G=-O*D[K+2]+Y*D[J+2];D[K+2]=H;D[J+2]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(s,K,n,l){if(typeof l==="undefined"){l=0}var A=s.cols,F=s.rows,t=F<<1,z=A<<1;var E=0,v=0,u=0,m=0;var C=((n<<1)+1)|0;var p=(n+1)|0,I=(p+1)|0;var q=8192;var J=l&jsfeat.BOX_BLUR_NOSCALE?1:(16384/(C*C)+0.5)|0;var D=jsfeat.cache.get_buffer((A*F)<<2);var j=0,H=0,o=0,r=0,k=0;var G=D.i32;var g=s.data;var B=0;for(u=0;u>14;j+=G[r]-B;r++}for(;v>14;j+=G[r]-G[k];g[H+A]=(j*J+q)>>14;j+=G[r+1]-G[k+1];r+=2;k+=2}for(;v>14;j+=G[r]-G[k];r++;k++}B=G[r-1];for(;v>14;j+=B-G[k];k++}o+=F}}jsfeat.cache.put_buffer(D)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(i,o){var r=i.cols,m=i.rows;var l=r>>1,n=m>>1;var q=0,p=0,g=0,t=0,s=0;var k=i.data,j=o.data;for(p=0;p>2;j[s+1]=(k[t+2]+k[t+3]+k[t+r+2]+k[t+r+3]+2)>>2}for(;q>2}g+=r<<1}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(f){var l=f.stage_classifier.length;for(var g=0;g=0){d=f[r];o[r]=h|(d<<16)|(d<<8)|d}l.putImageData(v,0,0);jsfeat.cache.put_buffer(j)}this.interval=t;this.scale=Math.pow(2,1/(this.interval+1));this.next=(this.interval+1)|0;this.scale_to=(Math.log(Math.min(e.width/p,e.height/x))/Math.log(this.scale))|0;var q=document.createElement("canvas");q.width=e.width;q.height=e.height;var s=q.getContext("2d");var w=new Array((this.scale_to+this.next*2)*4);w[0]={width:e.width,height:e.height,data:e.getContext("2d").getImageData(0,0,e.width,e.height).data};var u,g;for(r=1;r<=this.interval;++r){u=(e.width/Math.pow(this.scale,r))|0;g=(e.height/Math.pow(this.scale,r))|0;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next*2;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,1,0,e.width-1,e.height,0,0,u-2,g);w[r*4+1]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,0,1,e.width,e.height-1,0,0,u,g-2);w[r*4+2]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,1,1,e.width-1,e.height-1,0,0,u-2,g-2);w[r*4+3]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}return w},detect:function(z,H){var g=this.interval;var J=this.scale;var l=this.next;var h=this.scale_to;var X=0,W=0,V=0,S=0,O=0,N=0,Q=0,w=0,F=0,E=0,R=0,Z=0,I=0,Y=0,t=0,U=0,e=0;var B=0,T,M,A,D,C,K=true,m=true;var u=1,s=1;var r=[0,1,0,1];var o=[0,0,1,1];var G=[];var v=[],d=[0,0,0];var L=[0,0,0];var P=[0,0,0];for(X=0;X>2);e=z[t+(l<<3)].height-(H.height>>2);L[0]=z[t].width<<2;L[1]=z[t+(l<<2)].width<<2;L[2]=z[t+(l<<3)].width<<2;P[0]=(z[t].width<<4)-(U<<4);P[1]=(z[t+(l<<2)].width<<3)-(U<<3);P[2]=(z[t+(l<<3)].width<<2)-(U<<2);w=H.stage_classifier.length;for(W=0;W=0){R=v[D.pz[Y]][d[D.pz[Y]]+D.px[Y]];if(R=0){S=v[D.nz[Y]][d[D.nz[Y]]+D.nx[Y]];if(S>I){if(Z<=S){m=false;break}I=S}}}B+=(m)?T[(V<<1)+1]:T[V<<1]}}if(Br[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();a.bbf=b})(jsfeat);(function(a){var b={};if(typeof(exports)==="undefined"){b.exports=window}else{b.exports=exports}if(typeof(b.exports)!=="undefined"){b.exports.jsfeat=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.buffer=new r((B*b(A)*h(A))*z)}else{this.buffer=y}this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}x.prototype.set_data_type=function(y){this.type=u(y)|0;this.channel=h(y)|0;delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(y)*h(y))*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.set_data=function(z){var y=z.length;while(--y>=0){this.data[y]=z[y]}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{transpose:function(f,d){var l=0,h=0,k=d.rows,c=d.cols;var n=0,e=0,m=0;var o=d.data,g=f.data;for(;lg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=3;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;H=Y*D[K+2]+O*D[J+2];G=-O*D[K+2]+Y*D[J+2];D[K+2]=H;D[J+2]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(s,K,n,l){if(typeof l==="undefined"){l=0}var A=s.cols,F=s.rows,t=F<<1,z=A<<1;var E=0,v=0,u=0,m=0;var C=((n<<1)+1)|0;var p=(n+1)|0,I=(p+1)|0;var q=8192;var J=l&jsfeat.BOX_BLUR_NOSCALE?1:(16384/(C*C)+0.5)|0;var D=jsfeat.cache.get_buffer((A*F)<<2);var j=0,H=0,o=0,r=0,k=0;var G=D.i32;var g=s.data;var B=0;for(u=0;u>14;j+=G[r]-B;r++}for(;v>14;j+=G[r]-G[k];g[H+A]=(j*J+q)>>14;j+=G[r+1]-G[k+1];r+=2;k+=2}for(;v>14;j+=G[r]-G[k];r++;k++}B=G[r-1];for(;v>14;j+=B-G[k];k++}o+=F}}jsfeat.cache.put_buffer(D)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(i,o){var r=i.cols,m=i.rows;var l=r>>1,n=m>>1;var q=0,p=0,g=0,t=0,s=0;var k=i.data,j=o.data;for(p=0;p>2;j[s+1]=(k[t+2]+k[t+3]+k[t+r+2]+k[t+r+3]+2)>>2}for(;q>2}g+=r<<1}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(f){var l=f.stage_classifier.length;for(var g=0;g=0){d=f[r];o[r]=h|(d<<16)|(d<<8)|d}l.putImageData(v,0,0);jsfeat.cache.put_buffer(j)}this.interval=t;this.scale=Math.pow(2,1/(this.interval+1));this.next=(this.interval+1)|0;this.scale_to=(Math.log(Math.min(e.width/p,e.height/x))/Math.log(this.scale))|0;var q=document.createElement("canvas");q.width=e.width;q.height=e.height;var s=q.getContext("2d");var w=new Array((this.scale_to+this.next*2)*4);w[0]={width:e.width,height:e.height,data:e.getContext("2d").getImageData(0,0,e.width,e.height).data};var u,g;for(r=1;r<=this.interval;++r){u=(e.width/Math.pow(this.scale,r))|0;g=(e.height/Math.pow(this.scale,r))|0;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next*2;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,1,0,e.width-1,e.height,0,0,u-2,g);w[r*4+1]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,0,1,e.width,e.height-1,0,0,u,g-2);w[r*4+2]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,1,1,e.width-1,e.height-1,0,0,u-2,g-2);w[r*4+3]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}return w},detect:function(z,H){var g=this.interval;var J=this.scale;var l=this.next;var h=this.scale_to;var X=0,W=0,V=0,S=0,O=0,N=0,Q=0,w=0,F=0,E=0,R=0,Z=0,I=0,Y=0,t=0,U=0,e=0;var B=0,T,M,A,D,C,K=true,m=true;var u=1,s=1;var r=[0,1,0,1];var o=[0,0,1,1];var G=[];var v=[],d=[0,0,0];var L=[0,0,0];var P=[0,0,0];for(X=0;X>2);e=z[t+(l<<3)].height-(H.height>>2);L[0]=z[t].width<<2;L[1]=z[t+(l<<2)].width<<2;L[2]=z[t+(l<<3)].width<<2;P[0]=(z[t].width<<4)-(U<<4);P[1]=(z[t+(l<<2)].width<<3)-(U<<3);P[2]=(z[t+(l<<3)].width<<2)-(U<<2);w=H.stage_classifier.length;for(W=0;W=0){R=v[D.pz[Y]][d[D.pz[Y]]+D.px[Y]];if(R=0){S=v[D.nz[Y]][d[D.nz[Y]]+D.nx[Y]];if(S>I){if(Z<=S){m=false;break}I=S}}}B+=(m)?T[(V<<1)+1]:T[V<<1]}}if(Br[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index 29eecc5..9ab81de 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -4476,20 +4476,15 @@ The references are: /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ - + (function(lib) { "use strict"; - var shim = {}; - if (typeof(exports) === 'undefined') { + if (typeof module === "undefined" || typeof module.exports === "undefined") { // in a browser, define its namespaces in global - shim.exports = window; - } else { - // in commonjs, define its namespaces in exports - shim.exports = exports; - } - - if(typeof(shim.exports) !== 'undefined') { - shim.exports.jsfeat = lib; + window.jsfeat = lib; + } else { + // in commonjs, or when AMD wrapping has been applied, define its namespaces as exports + module.exports = lib; } })(jsfeat); diff --git a/package.json b/package.json index e259c5f..aa767a2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name" : "jsfeat", - "version" : "0.0.2", + "version" : "0.0.3", "description" : "JavaScript Computer Vision library", "author" : "Eugene Zatepyakin (http://www.inspirit.ru/)", "files" : "build/jsfeat.js", diff --git a/src/jsfeat_export.js b/src/jsfeat_export.js index 2764bc3..0ee0507 100644 --- a/src/jsfeat_export.js +++ b/src/jsfeat_export.js @@ -5,7 +5,7 @@ (function(lib) { "use strict"; - if (!module || !module.exports) { + if (typeof module === "undefined" || typeof module.exports === "undefined") { // in a browser, define its namespaces in global window.jsfeat = lib; } else { From 2f6a03218f06d98e1be78bef07489bd2ea2c32a8 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Tue, 11 Dec 2012 18:11:15 +0400 Subject: [PATCH 18/46] bbf no canvas dependency removed bbf canvas dependency --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 206 +++++++++++++++++++++++------------------- package.json | 2 +- src/jsfeat_bbf.js | 164 ++++++++++++++++----------------- src/jsfeat_imgproc.js | 23 +++-- 5 files changed, 211 insertions(+), 186 deletions(-) diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index 553aa78..7bd2751 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.buffer=new r((B*b(A)*h(A))*z)}else{this.buffer=y}this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}x.prototype.set_data_type=function(y){this.type=u(y)|0;this.channel=h(y)|0;delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(y)*h(y))*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.set_data=function(z){var y=z.length;while(--y>=0){this.data[y]=z[y]}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{transpose:function(f,d){var l=0,h=0,k=d.rows,c=d.cols;var n=0,e=0,m=0;var o=d.data,g=f.data;for(;lg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=3;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;H=Y*D[K+2]+O*D[J+2];G=-O*D[K+2]+Y*D[J+2];D[K+2]=H;D[J+2]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(s,K,n,l){if(typeof l==="undefined"){l=0}var A=s.cols,F=s.rows,t=F<<1,z=A<<1;var E=0,v=0,u=0,m=0;var C=((n<<1)+1)|0;var p=(n+1)|0,I=(p+1)|0;var q=8192;var J=l&jsfeat.BOX_BLUR_NOSCALE?1:(16384/(C*C)+0.5)|0;var D=jsfeat.cache.get_buffer((A*F)<<2);var j=0,H=0,o=0,r=0,k=0;var G=D.i32;var g=s.data;var B=0;for(u=0;u>14;j+=G[r]-B;r++}for(;v>14;j+=G[r]-G[k];g[H+A]=(j*J+q)>>14;j+=G[r+1]-G[k+1];r+=2;k+=2}for(;v>14;j+=G[r]-G[k];r++;k++}B=G[r-1];for(;v>14;j+=B-G[k];k++}o+=F}}jsfeat.cache.put_buffer(D)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(i,o){var r=i.cols,m=i.rows;var l=r>>1,n=m>>1;var q=0,p=0,g=0,t=0,s=0;var k=i.data,j=o.data;for(p=0;p>2;j[s+1]=(k[t+2]+k[t+3]+k[t+r+2]+k[t+r+3]+2)>>2}for(;q>2}g+=r<<1}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(f){var l=f.stage_classifier.length;for(var g=0;g=0){d=f[r];o[r]=h|(d<<16)|(d<<8)|d}l.putImageData(v,0,0);jsfeat.cache.put_buffer(j)}this.interval=t;this.scale=Math.pow(2,1/(this.interval+1));this.next=(this.interval+1)|0;this.scale_to=(Math.log(Math.min(e.width/p,e.height/x))/Math.log(this.scale))|0;var q=document.createElement("canvas");q.width=e.width;q.height=e.height;var s=q.getContext("2d");var w=new Array((this.scale_to+this.next*2)*4);w[0]={width:e.width,height:e.height,data:e.getContext("2d").getImageData(0,0,e.width,e.height).data};var u,g;for(r=1;r<=this.interval;++r){u=(e.width/Math.pow(this.scale,r))|0;g=(e.height/Math.pow(this.scale,r))|0;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,0,0,e.width,e.height,0,0,u,g);w[r*4]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}for(r=this.next*2;r>1;g=w[r*4-this.next*4].height>>1;s.drawImage(e,1,0,e.width-1,e.height,0,0,u-2,g);w[r*4+1]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,0,1,e.width,e.height-1,0,0,u,g-2);w[r*4+2]={width:u,height:g,data:s.getImageData(0,0,u,g).data};s.drawImage(e,1,1,e.width-1,e.height-1,0,0,u-2,g-2);w[r*4+3]={width:u,height:g,data:s.getImageData(0,0,u,g).data}}return w},detect:function(z,H){var g=this.interval;var J=this.scale;var l=this.next;var h=this.scale_to;var X=0,W=0,V=0,S=0,O=0,N=0,Q=0,w=0,F=0,E=0,R=0,Z=0,I=0,Y=0,t=0,U=0,e=0;var B=0,T,M,A,D,C,K=true,m=true;var u=1,s=1;var r=[0,1,0,1];var o=[0,0,1,1];var G=[];var v=[],d=[0,0,0];var L=[0,0,0];var P=[0,0,0];for(X=0;X>2);e=z[t+(l<<3)].height-(H.height>>2);L[0]=z[t].width<<2;L[1]=z[t+(l<<2)].width<<2;L[2]=z[t+(l<<3)].width<<2;P[0]=(z[t].width<<4)-(U<<4);P[1]=(z[t+(l<<2)].width<<3)-(U<<3);P[2]=(z[t+(l<<3)].width<<2)-(U<<2);w=H.stage_classifier.length;for(W=0;W=0){R=v[D.pz[Y]][d[D.pz[Y]]+D.px[Y]];if(R=0){S=v[D.nz[Y]][d[D.nz[Y]]+D.nx[Y]];if(S>I){if(Z<=S){m=false;break}I=S}}}B+=(m)?T[(V<<1)+1]:T[V<<1]}}if(Br[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.buffer=new r((B*b(A)*h(A))*z)}else{this.buffer=y}this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}x.prototype.set_data_type=function(y){this.type=u(y)|0;this.channel=h(y)|0;delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(y)*h(y))*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.set_data=function(z){var y=z.length;while(--y>=0){this.data[y]=z[y]}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{transpose:function(f,d){var l=0,h=0,k=d.rows,c=d.cols;var n=0,e=0,m=0;var o=d.data,g=f.data;for(;lg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=3;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;H=Y*D[K+2]+O*D[J+2];G=-O*D[K+2]+Y*D[J+2];D[K+2]=H;D[J+2]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(s,K,n,l){if(typeof l==="undefined"){l=0}var A=s.cols,F=s.rows,t=F<<1,z=A<<1;var E=0,v=0,u=0,m=0;var C=((n<<1)+1)|0;var p=(n+1)|0,I=(p+1)|0;var q=8192;var J=l&jsfeat.BOX_BLUR_NOSCALE?1:(16384/(C*C)+0.5)|0;var D=jsfeat.cache.get_buffer((A*F)<<2);var j=0,H=0,o=0,r=0,k=0;var G=D.i32;var g=s.data;var B=0;for(u=0;u>14;j+=G[r]-B;r++}for(;v>14;j+=G[r]-G[k];g[H+A]=(j*J+q)>>14;j+=G[r+1]-G[k+1];r+=2;k+=2}for(;v>14;j+=G[r]-G[k];r++;k++}B=G[r-1];for(;v>14;j+=B-G[k];k++}o+=F}}jsfeat.cache.put_buffer(D)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index 9ab81de..9d875a0 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -4,6 +4,7 @@ // namespace ? var jsfeat = jsfeat || { REVISION: 'ALPHA' }; + /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -191,6 +192,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.point2d_t = point2d_t; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -270,6 +272,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; cache.allocate(30, 640*4); })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -567,6 +570,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.math = math; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -706,7 +710,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.matmath = matmath; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -1427,7 +1431,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.linalg = linalg; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -1599,7 +1603,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.transform = transform; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -2192,25 +2196,32 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; jsfeat.cache.put_buffer(filt_node); }, // assume we always need it for u8 image - pyrdown: function(src, dst) { + pyrdown: function(src, dst, sx, sy) { + // this is needed for bbf + if (typeof sx === "undefined") { sx = 0; } + if (typeof sy === "undefined") { sy = 0; } + var w = src.cols, h = src.rows; var w2 = w >> 1, h2 = h >> 1; - var x=0,y=0,sptr=0,sline=0,dptr=0; + var _w2 = w2 - (sx << 1), _h2 = h2 - (sy << 1); + var x=0,y=0,sptr=sx+sy*w,sline=0,dptr=0,dline=0; var src_d = src.data, dst_d = dst.data; - for(y = 0; y < h2; ++y) { + for(y = 0; y < _h2; ++y) { sline = sptr; - for(x = 0; x <= w2-2; x+=2, dptr+=2, sline += 4) { - dst_d[dptr] = (src_d[sline] + src_d[sline+1] + + dline = dptr; + for(x = 0; x <= _w2-2; x+=2, dline+=2, sline += 4) { + dst_d[dline] = (src_d[sline] + src_d[sline+1] + src_d[sline+w] + src_d[sline+w+1] + 2) >> 2; - dst_d[dptr+1] = (src_d[sline+2] + src_d[sline+3] + + dst_d[dline+1] = (src_d[sline+2] + src_d[sline+3] + src_d[sline+w+2] + src_d[sline+w+3] + 2) >> 2; } - for(; x < w2; ++x, ++dptr, sline += 2) { - dst_d[dptr] = (src_d[sline] + src_d[sline+1] + + for(; x < _w2; ++x, ++dline, sline += 2) { + dst_d[dline] = (src_d[sline] + src_d[sline+1] + src_d[sline+w] + src_d[sline+w+1] + 2) >> 2; } sptr += w << 1; + dptr += w2; } }, @@ -2701,6 +2712,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.imgproc = imgproc; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3040,6 +3052,7 @@ The references are: fast_corners.set_threshold(20); // set default })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3135,6 +3148,7 @@ The references are: global.yape06 = yape06; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3544,7 +3558,7 @@ The references are: global.yape = yape; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3789,6 +3803,7 @@ The references are: global.optical_flow_lk = optical_flow_lk; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -4079,6 +4094,7 @@ The references are: global.haar = haar; })(jsfeat); + /** * BBF: Brightness Binary Feature * @@ -4106,6 +4122,8 @@ The references are: (r2.width * 1.5 + 0.5)|0 >= r1.width; } + var img_pyr = new jsfeat.pyramid_t(1); + return { interval: 4, @@ -4132,89 +4150,78 @@ The references are: } }, - build_pyramid: function(canvas, min_width, min_height, interval, do_grayscale) { + build_pyramid: function(src, min_width, min_height, interval) { if (typeof interval === "undefined") { interval = 4; } - if (typeof do_grayscale === "undefined") { do_grayscale = true; } - - // need to convert to grayscale - if(do_grayscale) { - var ctx_input = canvas.getContext('2d'); - var in_size = canvas.width * canvas.height; - var img_data_input = ctx_input.getImageData(0, 0, canvas.width, canvas.height); - var data_input = img_data_input.data; - var data_u32 = new Uint32Array(data_input.buffer); - var gray_n = jsfeat.cache.get_buffer(in_size); - var gray_data = gray_n.u8; - jsfeat.imgproc.grayscale(data_input, gray_data); - var alpha = (0xff << 24); - var i = in_size,pix=0; - while (--i >= 0) { - pix = gray_data[i]; - data_u32[i] = alpha | (pix << 16) | (pix << 8) | pix; - } - ctx_input.putImageData(img_data_input, 0, 0); - jsfeat.cache.put_buffer(gray_n); - } - // + + var sw=src.cols,sh=src.rows; + var i=0,nw=0,nh=0; + var new_pyr=false; + var src0=src,src1=src; + var data_type = jsfeat.U8_t | jsfeat.C1_t; this.interval = interval; this.scale = Math.pow(2, 1 / (this.interval + 1)); this.next = (this.interval + 1)|0; - this.scale_to = (Math.log(Math.min(canvas.width / min_width, canvas.height / min_height)) / Math.log(this.scale))|0; - - var _canvas = document.createElement('canvas'); - _canvas.width = canvas.width; - _canvas.height = canvas.height; - var _ctx = _canvas.getContext('2d'); - - var ret = new Array((this.scale_to + this.next * 2) * 4); - ret[0] = { "width" : canvas.width, - "height" : canvas.height, - "data" : canvas.getContext("2d").getImageData(0, 0, canvas.width, canvas.height).data }; - var nw, nh; + this.scale_to = (Math.log(Math.min(sw / min_width, sh / min_height)) / Math.log(this.scale))|0; + + var pyr_l = ((this.scale_to + this.next * 2) * 4) | 0; + if(img_pyr.levels != pyr_l) { + img_pyr.levels = pyr_l; + img_pyr.data = new Array(pyr_l); + new_pyr = true; + img_pyr.data[0] = src; // first is src + } + for (i = 1; i <= this.interval; ++i) { - nw = (canvas.width / Math.pow(this.scale, i))|0; - nh = (canvas.height / Math.pow(this.scale, i))|0; - _ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, nw, nh); - ret[i * 4] = { "width" : nw, - "height" : nh, - "data" : _ctx.getImageData(0, 0, nw, nh).data }; + nw = (sw / Math.pow(this.scale, i))|0; + nh = (sh / Math.pow(this.scale, i))|0; + src0 = img_pyr.data[i<<2]; + if(new_pyr || nw != src0.cols || nh != src0.rows) { + img_pyr.data[i<<2] = new jsfeat.matrix_t(nw, nh, data_type); + src0 = img_pyr.data[i<<2]; + } + jsfeat.imgproc.resample(src, src0, nw, nh); } for (i = this.next; i < this.scale_to + this.next * 2; ++i) { - nw = ret[i * 4 - this.next * 4].width >> 1; - nh = ret[i * 4 - this.next * 4].height >> 1; - _ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, nw, nh); - ret[i * 4] = { "width" : nw, - "height" : nh, - "data" : _ctx.getImageData(0, 0, nw, nh).data }; + src1 = img_pyr.data[(i << 2) - (this.next << 2)]; + src0 = img_pyr.data[i<<2]; + nw = src1.cols >> 1; + nh = src1.rows >> 1; + if(new_pyr || nw != src0.cols || nh != src0.rows) { + img_pyr.data[i<<2] = new jsfeat.matrix_t(nw, nh, data_type); + src0 = img_pyr.data[i<<2]; + } + jsfeat.imgproc.pyrdown(src1, src0); } for (i = this.next * 2; i < this.scale_to + this.next * 2; ++i) { - nw = ret[i * 4 - this.next * 4].width >> 1; - nh = ret[i * 4 - this.next * 4].height >> 1; - - _ctx.drawImage(canvas, 1, 0, canvas.width-1, canvas.height, 0, 0, nw-2, nh); - - ret[i * 4 + 1] = { "width" : nw, - "height" : nh, - "data" : _ctx.getImageData(0, 0, nw, nh).data }; - - _ctx.drawImage(canvas, 0, 1, canvas.width, canvas.height-1, 0, 0, nw, nh-2); - - ret[i * 4 + 2] = { "width" : nw, - "height" : nh, - "data" : _ctx.getImageData(0, 0, nw, nh).data }; - - _ctx.drawImage(canvas, 1, 1, canvas.width-1, canvas.height-1, 0, 0, nw-2, nh-2); - - ret[i * 4 + 3] = { "width" : nw, - "height" : nh, - "data" : _ctx.getImageData(0, 0, nw, nh).data }; + src1 = img_pyr.data[(i << 2) - (this.next << 2)]; + nw = src1.cols >> 1; + nh = src1.rows >> 1; + src0 = img_pyr.data[(i<<2)+1]; + if(new_pyr || nw != src0.cols || nh != src0.rows) { + img_pyr.data[(i<<2)+1] = new jsfeat.matrix_t(nw, nh, data_type); + src0 = img_pyr.data[(i<<2)+1]; + } + jsfeat.imgproc.pyrdown(src1, src0, 1, 0); + // + src0 = img_pyr.data[(i<<2)+2]; + if(new_pyr || nw != src0.cols || nh != src0.rows) { + img_pyr.data[(i<<2)+2] = new jsfeat.matrix_t(nw, nh, data_type); + src0 = img_pyr.data[(i<<2)+2]; + } + jsfeat.imgproc.pyrdown(src1, src0, 0, 1); + // + src0 = img_pyr.data[(i<<2)+3]; + if(new_pyr || nw != src0.cols || nh != src0.rows) { + img_pyr.data[(i<<2)+3] = new jsfeat.matrix_t(nw, nh, data_type); + src0 = img_pyr.data[(i<<2)+3]; + } + jsfeat.imgproc.pyrdown(src1, src0, 1, 1); } - - return ret; + return img_pyr; }, - detect: function(pyr, cascade) { + detect: function(pyramid, cascade) { var interval = this.interval; var scale = this.scale; var next = this.next; @@ -4225,6 +4232,7 @@ The references are: var dx = [0, 1, 0, 1]; var dy = [0, 0, 1, 1]; var seq = []; + var pyr=pyramid.data, bpp = 1, bpp2 = 2, bpp4 = 4; var u8 = [], u8o = [0,0,0]; var step = [0,0,0]; @@ -4232,12 +4240,14 @@ The references are: for (i = 0; i < scale_upto; i++) { i4 = (i<<2); - qw = pyr[i4 + (next << 3)].width - (cascade.width >> 2); - qh = pyr[i4 + (next << 3)].height - (cascade.height >> 2); - step[0] = pyr[i4].width << 2; step[1] = pyr[i4 + (next << 2)].width << 2; step[2] = pyr[i4 + (next << 3)].width << 2; - paddings[0] = (pyr[i4].width << 4) - (qw << 4); - paddings[1] = (pyr[i4 + (next << 2)].width << 3) - (qw << 3); - paddings[2] = (pyr[i4 + (next << 3)].width << 2) - (qw << 2); + qw = pyr[i4 + (next << 3)].cols - (cascade.width >> 2); + qh = pyr[i4 + (next << 3)].rows - (cascade.height >> 2); + step[0] = pyr[i4].cols * bpp; + step[1] = pyr[i4 + (next << 2)].cols * bpp; + step[2] = pyr[i4 + (next << 3)].cols * bpp; + paddings[0] = (pyr[i4].cols * bpp4) - (qw * bpp4); + paddings[1] = (pyr[i4 + (next << 2)].cols * bpp2) - (qw * bpp2); + paddings[2] = (pyr[i4 + (next << 3)].cols * bpp) - (qw * bpp); sn = cascade.stage_classifier.length; for (j = 0; j < sn; j++) { orig_feature = cascade.stage_classifier[j].feature; @@ -4248,9 +4258,9 @@ The references are: feature_o = orig_feature[k]; q_cnt = feature_o.size|0; for (q = 0; q < q_cnt; q++) { - feature_k.px[q] = (feature_o.px[q] << 2) + feature_o.py[q] * step[feature_o.pz[q]]; + feature_k.px[q] = (feature_o.px[q] * bpp) + feature_o.py[q] * step[feature_o.pz[q]]; feature_k.pz[q] = feature_o.pz[q]; - feature_k.nx[q] = (feature_o.nx[q] << 2) + feature_o.ny[q] * step[feature_o.nz[q]]; + feature_k.nx[q] = (feature_o.nx[q] * bpp) + feature_o.ny[q] * step[feature_o.nz[q]]; feature_k.nz[q] = feature_o.nz[q]; } } @@ -4258,7 +4268,9 @@ The references are: u8[0] = pyr[i4].data; u8[1] = pyr[i4 + (next<<2)].data; for (q = 0; q < 4; q++) { u8[2] = pyr[i4 + (next<<3) + q].data; - u8o[0] = (dx[q]<<3) + dy[q] * (pyr[i4].width<<3); u8o[1] = (dx[q]<<2) + dy[q] * (pyr[i4 + (next<<2)].width<<2); u8o[2]=0; + u8o[0] = (dx[q]*bpp2) + dy[q] * (pyr[i4].cols*bpp2); + u8o[1] = (dx[q]*bpp) + dy[q] * (pyr[i4 + (next<<2)].cols*bpp); + u8o[2] = 0; for (y = 0; y < qh; y++) { for (x = 0; x < qw; x++) { sum = 0; @@ -4315,10 +4327,14 @@ The references are: "height" : cascade.height * scale_y, "neighbor" : 1, "confidence" : sum}); + ++x; + u8o[0] += bpp4; + u8o[1] += bpp2; + u8o[2] += bpp; } - u8o[0] += 16; - u8o[1] += 8; - u8o[2] += 4; + u8o[0] += bpp4; + u8o[1] += bpp2; + u8o[2] += bpp; } u8o[0] += paddings[0]; u8o[1] += paddings[1]; @@ -4473,6 +4489,7 @@ The references are: global.bbf = bbf; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -4488,3 +4505,4 @@ The references are: module.exports = lib; } })(jsfeat); + diff --git a/package.json b/package.json index aa767a2..d66c21e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name" : "jsfeat", - "version" : "0.0.3", + "version" : "0.0.4", "description" : "JavaScript Computer Vision library", "author" : "Eugene Zatepyakin (http://www.inspirit.ru/)", "files" : "build/jsfeat.js", diff --git a/src/jsfeat_bbf.js b/src/jsfeat_bbf.js index 016dc2b..b06e355 100755 --- a/src/jsfeat_bbf.js +++ b/src/jsfeat_bbf.js @@ -25,6 +25,8 @@ (r2.width * 1.5 + 0.5)|0 >= r1.width; } + var img_pyr = new jsfeat.pyramid_t(1); + return { interval: 4, @@ -51,89 +53,78 @@ } }, - build_pyramid: function(canvas, min_width, min_height, interval, do_grayscale) { + build_pyramid: function(src, min_width, min_height, interval) { if (typeof interval === "undefined") { interval = 4; } - if (typeof do_grayscale === "undefined") { do_grayscale = true; } - - // need to convert to grayscale - if(do_grayscale) { - var ctx_input = canvas.getContext('2d'); - var in_size = canvas.width * canvas.height; - var img_data_input = ctx_input.getImageData(0, 0, canvas.width, canvas.height); - var data_input = img_data_input.data; - var data_u32 = new Uint32Array(data_input.buffer); - var gray_n = jsfeat.cache.get_buffer(in_size); - var gray_data = gray_n.u8; - jsfeat.imgproc.grayscale(data_input, gray_data); - var alpha = (0xff << 24); - var i = in_size,pix=0; - while (--i >= 0) { - pix = gray_data[i]; - data_u32[i] = alpha | (pix << 16) | (pix << 8) | pix; - } - ctx_input.putImageData(img_data_input, 0, 0); - jsfeat.cache.put_buffer(gray_n); - } - // + + var sw=src.cols,sh=src.rows; + var i=0,nw=0,nh=0; + var new_pyr=false; + var src0=src,src1=src; + var data_type = jsfeat.U8_t | jsfeat.C1_t; this.interval = interval; this.scale = Math.pow(2, 1 / (this.interval + 1)); this.next = (this.interval + 1)|0; - this.scale_to = (Math.log(Math.min(canvas.width / min_width, canvas.height / min_height)) / Math.log(this.scale))|0; - - var _canvas = document.createElement('canvas'); - _canvas.width = canvas.width; - _canvas.height = canvas.height; - var _ctx = _canvas.getContext('2d'); - - var ret = new Array((this.scale_to + this.next * 2) * 4); - ret[0] = { "width" : canvas.width, - "height" : canvas.height, - "data" : canvas.getContext("2d").getImageData(0, 0, canvas.width, canvas.height).data }; - var nw, nh; + this.scale_to = (Math.log(Math.min(sw / min_width, sh / min_height)) / Math.log(this.scale))|0; + + var pyr_l = ((this.scale_to + this.next * 2) * 4) | 0; + if(img_pyr.levels != pyr_l) { + img_pyr.levels = pyr_l; + img_pyr.data = new Array(pyr_l); + new_pyr = true; + img_pyr.data[0] = src; // first is src + } + for (i = 1; i <= this.interval; ++i) { - nw = (canvas.width / Math.pow(this.scale, i))|0; - nh = (canvas.height / Math.pow(this.scale, i))|0; - _ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, nw, nh); - ret[i * 4] = { "width" : nw, - "height" : nh, - "data" : _ctx.getImageData(0, 0, nw, nh).data }; + nw = (sw / Math.pow(this.scale, i))|0; + nh = (sh / Math.pow(this.scale, i))|0; + src0 = img_pyr.data[i<<2]; + if(new_pyr || nw != src0.cols || nh != src0.rows) { + img_pyr.data[i<<2] = new jsfeat.matrix_t(nw, nh, data_type); + src0 = img_pyr.data[i<<2]; + } + jsfeat.imgproc.resample(src, src0, nw, nh); } for (i = this.next; i < this.scale_to + this.next * 2; ++i) { - nw = ret[i * 4 - this.next * 4].width >> 1; - nh = ret[i * 4 - this.next * 4].height >> 1; - _ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, nw, nh); - ret[i * 4] = { "width" : nw, - "height" : nh, - "data" : _ctx.getImageData(0, 0, nw, nh).data }; + src1 = img_pyr.data[(i << 2) - (this.next << 2)]; + src0 = img_pyr.data[i<<2]; + nw = src1.cols >> 1; + nh = src1.rows >> 1; + if(new_pyr || nw != src0.cols || nh != src0.rows) { + img_pyr.data[i<<2] = new jsfeat.matrix_t(nw, nh, data_type); + src0 = img_pyr.data[i<<2]; + } + jsfeat.imgproc.pyrdown(src1, src0); } for (i = this.next * 2; i < this.scale_to + this.next * 2; ++i) { - nw = ret[i * 4 - this.next * 4].width >> 1; - nh = ret[i * 4 - this.next * 4].height >> 1; - - _ctx.drawImage(canvas, 1, 0, canvas.width-1, canvas.height, 0, 0, nw-2, nh); - - ret[i * 4 + 1] = { "width" : nw, - "height" : nh, - "data" : _ctx.getImageData(0, 0, nw, nh).data }; - - _ctx.drawImage(canvas, 0, 1, canvas.width, canvas.height-1, 0, 0, nw, nh-2); - - ret[i * 4 + 2] = { "width" : nw, - "height" : nh, - "data" : _ctx.getImageData(0, 0, nw, nh).data }; - - _ctx.drawImage(canvas, 1, 1, canvas.width-1, canvas.height-1, 0, 0, nw-2, nh-2); - - ret[i * 4 + 3] = { "width" : nw, - "height" : nh, - "data" : _ctx.getImageData(0, 0, nw, nh).data }; + src1 = img_pyr.data[(i << 2) - (this.next << 2)]; + nw = src1.cols >> 1; + nh = src1.rows >> 1; + src0 = img_pyr.data[(i<<2)+1]; + if(new_pyr || nw != src0.cols || nh != src0.rows) { + img_pyr.data[(i<<2)+1] = new jsfeat.matrix_t(nw, nh, data_type); + src0 = img_pyr.data[(i<<2)+1]; + } + jsfeat.imgproc.pyrdown(src1, src0, 1, 0); + // + src0 = img_pyr.data[(i<<2)+2]; + if(new_pyr || nw != src0.cols || nh != src0.rows) { + img_pyr.data[(i<<2)+2] = new jsfeat.matrix_t(nw, nh, data_type); + src0 = img_pyr.data[(i<<2)+2]; + } + jsfeat.imgproc.pyrdown(src1, src0, 0, 1); + // + src0 = img_pyr.data[(i<<2)+3]; + if(new_pyr || nw != src0.cols || nh != src0.rows) { + img_pyr.data[(i<<2)+3] = new jsfeat.matrix_t(nw, nh, data_type); + src0 = img_pyr.data[(i<<2)+3]; + } + jsfeat.imgproc.pyrdown(src1, src0, 1, 1); } - - return ret; + return img_pyr; }, - detect: function(pyr, cascade) { + detect: function(pyramid, cascade) { var interval = this.interval; var scale = this.scale; var next = this.next; @@ -144,6 +135,7 @@ var dx = [0, 1, 0, 1]; var dy = [0, 0, 1, 1]; var seq = []; + var pyr=pyramid.data, bpp = 1, bpp2 = 2, bpp4 = 4; var u8 = [], u8o = [0,0,0]; var step = [0,0,0]; @@ -151,12 +143,14 @@ for (i = 0; i < scale_upto; i++) { i4 = (i<<2); - qw = pyr[i4 + (next << 3)].width - (cascade.width >> 2); - qh = pyr[i4 + (next << 3)].height - (cascade.height >> 2); - step[0] = pyr[i4].width << 2; step[1] = pyr[i4 + (next << 2)].width << 2; step[2] = pyr[i4 + (next << 3)].width << 2; - paddings[0] = (pyr[i4].width << 4) - (qw << 4); - paddings[1] = (pyr[i4 + (next << 2)].width << 3) - (qw << 3); - paddings[2] = (pyr[i4 + (next << 3)].width << 2) - (qw << 2); + qw = pyr[i4 + (next << 3)].cols - (cascade.width >> 2); + qh = pyr[i4 + (next << 3)].rows - (cascade.height >> 2); + step[0] = pyr[i4].cols * bpp; + step[1] = pyr[i4 + (next << 2)].cols * bpp; + step[2] = pyr[i4 + (next << 3)].cols * bpp; + paddings[0] = (pyr[i4].cols * bpp4) - (qw * bpp4); + paddings[1] = (pyr[i4 + (next << 2)].cols * bpp2) - (qw * bpp2); + paddings[2] = (pyr[i4 + (next << 3)].cols * bpp) - (qw * bpp); sn = cascade.stage_classifier.length; for (j = 0; j < sn; j++) { orig_feature = cascade.stage_classifier[j].feature; @@ -167,9 +161,9 @@ feature_o = orig_feature[k]; q_cnt = feature_o.size|0; for (q = 0; q < q_cnt; q++) { - feature_k.px[q] = (feature_o.px[q] << 2) + feature_o.py[q] * step[feature_o.pz[q]]; + feature_k.px[q] = (feature_o.px[q] * bpp) + feature_o.py[q] * step[feature_o.pz[q]]; feature_k.pz[q] = feature_o.pz[q]; - feature_k.nx[q] = (feature_o.nx[q] << 2) + feature_o.ny[q] * step[feature_o.nz[q]]; + feature_k.nx[q] = (feature_o.nx[q] * bpp) + feature_o.ny[q] * step[feature_o.nz[q]]; feature_k.nz[q] = feature_o.nz[q]; } } @@ -177,7 +171,9 @@ u8[0] = pyr[i4].data; u8[1] = pyr[i4 + (next<<2)].data; for (q = 0; q < 4; q++) { u8[2] = pyr[i4 + (next<<3) + q].data; - u8o[0] = (dx[q]<<3) + dy[q] * (pyr[i4].width<<3); u8o[1] = (dx[q]<<2) + dy[q] * (pyr[i4 + (next<<2)].width<<2); u8o[2]=0; + u8o[0] = (dx[q]*bpp2) + dy[q] * (pyr[i4].cols*bpp2); + u8o[1] = (dx[q]*bpp) + dy[q] * (pyr[i4 + (next<<2)].cols*bpp); + u8o[2] = 0; for (y = 0; y < qh; y++) { for (x = 0; x < qw; x++) { sum = 0; @@ -234,10 +230,14 @@ "height" : cascade.height * scale_y, "neighbor" : 1, "confidence" : sum}); + ++x; + u8o[0] += bpp4; + u8o[1] += bpp2; + u8o[2] += bpp; } - u8o[0] += 16; - u8o[1] += 8; - u8o[2] += 4; + u8o[0] += bpp4; + u8o[1] += bpp2; + u8o[2] += bpp; } u8o[0] += paddings[0]; u8o[1] += paddings[1]; diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index c135134..0e27608 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -590,25 +590,32 @@ jsfeat.cache.put_buffer(filt_node); }, // assume we always need it for u8 image - pyrdown: function(src, dst) { + pyrdown: function(src, dst, sx, sy) { + // this is needed for bbf + if (typeof sx === "undefined") { sx = 0; } + if (typeof sy === "undefined") { sy = 0; } + var w = src.cols, h = src.rows; var w2 = w >> 1, h2 = h >> 1; - var x=0,y=0,sptr=0,sline=0,dptr=0; + var _w2 = w2 - (sx << 1), _h2 = h2 - (sy << 1); + var x=0,y=0,sptr=sx+sy*w,sline=0,dptr=0,dline=0; var src_d = src.data, dst_d = dst.data; - for(y = 0; y < h2; ++y) { + for(y = 0; y < _h2; ++y) { sline = sptr; - for(x = 0; x <= w2-2; x+=2, dptr+=2, sline += 4) { - dst_d[dptr] = (src_d[sline] + src_d[sline+1] + + dline = dptr; + for(x = 0; x <= _w2-2; x+=2, dline+=2, sline += 4) { + dst_d[dline] = (src_d[sline] + src_d[sline+1] + src_d[sline+w] + src_d[sline+w+1] + 2) >> 2; - dst_d[dptr+1] = (src_d[sline+2] + src_d[sline+3] + + dst_d[dline+1] = (src_d[sline+2] + src_d[sline+3] + src_d[sline+w+2] + src_d[sline+w+3] + 2) >> 2; } - for(; x < w2; ++x, ++dptr, sline += 2) { - dst_d[dptr] = (src_d[sline] + src_d[sline+1] + + for(; x < _w2; ++x, ++dline, sline += 2) { + dst_d[dline] = (src_d[sline] + src_d[sline+1] + src_d[sline+w] + src_d[sline+w+1] + 2) >> 2; } sptr += w << 1; + dptr += w2; } }, From eef92e8456145ec5678d84a75375bfa3bfae2010 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Wed, 12 Dec 2012 17:11:57 +0400 Subject: [PATCH 19/46] small bbf fix --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 2 +- package.json | 16 ++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index 7bd2751..40aa40c 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.buffer=new r((B*b(A)*h(A))*z)}else{this.buffer=y}this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}x.prototype.set_data_type=function(y){this.type=u(y)|0;this.channel=h(y)|0;delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(y)*h(y))*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.set_data=function(z){var y=z.length;while(--y>=0){this.data[y]=z[y]}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{transpose:function(f,d){var l=0,h=0,k=d.rows,c=d.cols;var n=0,e=0,m=0;var o=d.data,g=f.data;for(;lg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=3;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;H=Y*D[K+2]+O*D[J+2];G=-O*D[K+2]+Y*D[J+2];D[K+2]=H;D[J+2]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(s,K,n,l){if(typeof l==="undefined"){l=0}var A=s.cols,F=s.rows,t=F<<1,z=A<<1;var E=0,v=0,u=0,m=0;var C=((n<<1)+1)|0;var p=(n+1)|0,I=(p+1)|0;var q=8192;var J=l&jsfeat.BOX_BLUR_NOSCALE?1:(16384/(C*C)+0.5)|0;var D=jsfeat.cache.get_buffer((A*F)<<2);var j=0,H=0,o=0,r=0,k=0;var G=D.i32;var g=s.data;var B=0;for(u=0;u>14;j+=G[r]-B;r++}for(;v>14;j+=G[r]-G[k];g[H+A]=(j*J+q)>>14;j+=G[r+1]-G[k+1];r+=2;k+=2}for(;v>14;j+=G[r]-G[k];r++;k++}B=G[r-1];for(;v>14;j+=B-G[k];k++}o+=F}}jsfeat.cache.put_buffer(D)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.buffer=new r((B*b(A)*h(A))*z)}else{this.buffer=y}this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}x.prototype.set_data_type=function(y){this.type=u(y)|0;this.channel=h(y)|0;delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(y)*h(y))*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.set_data=function(z){var y=z.length;while(--y>=0){this.data[y]=z[y]}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{transpose:function(f,d){var l=0,h=0,k=d.rows,c=d.cols;var n=0,e=0,m=0;var o=d.data,g=f.data;for(;lg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=3;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;H=Y*D[K+2]+O*D[J+2];G=-O*D[K+2]+Y*D[J+2];D[K+2]=H;D[J+2]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(s,K,n,l){if(typeof l==="undefined"){l=0}var A=s.cols,F=s.rows,t=F<<1,z=A<<1;var E=0,v=0,u=0,m=0;var C=((n<<1)+1)|0;var p=(n+1)|0,I=(p+1)|0;var q=8192;var J=l&jsfeat.BOX_BLUR_NOSCALE?1:(16384/(C*C)+0.5)|0;var D=jsfeat.cache.get_buffer((A*F)<<2);var j=0,H=0,o=0,r=0,k=0;var G=D.i32;var g=s.data;var B=0;for(u=0;u>14;j+=G[r]-B;r++}for(;v>14;j+=G[r]-G[k];g[H+A]=(j*J+q)>>14;j+=G[r+1]-G[k+1];r+=2;k+=2}for(;v>14;j+=G[r]-G[k];r++;k++}B=G[r-1];for(;v>14;j+=B-G[k];k++}o+=F}}jsfeat.cache.put_buffer(D)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index 9d875a0..e8c52ec 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -4290,7 +4290,7 @@ The references are: } else { shortcut = true; q_cnt = feature_k.size; - for (f = 0; f < q_cnt; f++) { + for (f = 1; f < q_cnt; f++) { if (feature_k.pz[f] >= 0) { p = u8[feature_k.pz[f]][u8o[feature_k.pz[f]] + feature_k.px[f]]; if (p < pmin) { diff --git a/package.json b/package.json index d66c21e..0994ffb 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ -{ - "name" : "jsfeat", - "version" : "0.0.4", - "description" : "JavaScript Computer Vision library", - "author" : "Eugene Zatepyakin (http://www.inspirit.ru/)", - "files" : "build/jsfeat.js", - "main" : "build/jsfeat" -} +{ + "name" : "jsfeat", + "version" : "0.0.5", + "description" : "JavaScript Computer Vision library", + "author" : "Eugene Zatepyakin (http://www.inspirit.ru/)", + "files" : "build/jsfeat.js", + "main" : "build/jsfeat" +} From 9b0b10630df723653c0219d12f90e7bcd2f3f588 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Wed, 12 Dec 2012 17:32:22 +0400 Subject: [PATCH 20/46] update bbf src file --- src/jsfeat_bbf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jsfeat_bbf.js b/src/jsfeat_bbf.js index b06e355..e4e5878 100755 --- a/src/jsfeat_bbf.js +++ b/src/jsfeat_bbf.js @@ -193,7 +193,7 @@ } else { shortcut = true; q_cnt = feature_k.size; - for (f = 0; f < q_cnt; f++) { + for (f = 1; f < q_cnt; f++) { if (feature_k.pz[f] >= 0) { p = u8[feature_k.pz[f]][u8o[feature_k.pz[f]] + feature_k.px[f]]; if (p < pmin) { From 764f8193715661acb2beeba69f69813ad6326217 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Sat, 23 Mar 2013 20:48:03 +0400 Subject: [PATCH 21/46] Motion Estimator 1. Added Affine2D and Homography2D kernels for motion estimation between corresponding pints. 2. Added RANSAC and LMEDS algorithms for robust motion estimation when point sets contain wrong matches. (not tested in real app though) because of the above additions i removed Transform module. 3. several improvements and optimizations. --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 1124 +++++++++++++++++++++++++------- compile/build.xml | 2 +- src/jsfeat.js | 7 - src/jsfeat_export.js | 0 src/jsfeat_imgproc.js | 80 ++- src/jsfeat_linalg.js | 24 +- src/jsfeat_mat_math.js | 70 ++ src/jsfeat_math.js | 117 ++++ src/jsfeat_motion_estimator.js | 653 +++++++++++++++++++ src/jsfeat_struct.js | 35 +- src/jsfeat_yape.js | 0 src/jsfeat_yape06.js | 0 13 files changed, 1817 insertions(+), 297 deletions(-) mode change 100644 => 100755 src/jsfeat_export.js mode change 100644 => 100755 src/jsfeat_linalg.js mode change 100644 => 100755 src/jsfeat_mat_math.js create mode 100644 src/jsfeat_motion_estimator.js mode change 100644 => 100755 src/jsfeat_yape.js mode change 100644 => 100755 src/jsfeat_yape06.js diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index 40aa40c..82b2231 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.buffer=new r((B*b(A)*h(A))*z)}else{this.buffer=y}this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}x.prototype.set_data_type=function(y){this.type=u(y)|0;this.channel=h(y)|0;delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(y)*h(y))*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.set_data=function(z){var y=z.length;while(--y>=0){this.data[y]=z[y]}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{transpose:function(f,d){var l=0,h=0,k=d.rows,c=d.cols;var n=0,e=0,m=0;var o=d.data,g=f.data;for(;lg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=3;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;H=Y*D[K+2]+O*D[J+2];G=-O*D[K+2]+Y*D[J+2];D[K+2]=H;D[J+2]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(b){var a=(function(){return{affine_3point_transform:function(l,h,o,f,m,g,n,d,j,e,k,c,i){},perspective_4point_transform:function(B,w,ac,s,Z,v,ab,r,W,u,aa,p,U,t,Y,m,S){var J=w;var I=u;var H=ab;var G=J*I*H;var F=Y;var E=J*F;var D=I*E;var C=aa;var o=J*C;var l=v;var h=ac;var f=t;var d=h*f;var au=d*l;var T=f*l*C;var R=f*H;var O=f*C;var N=I*H;var M=F*I;var L=F*l;var K=C*l;var A=1/(R-O-N+M-L+K);var y=J*f;var x=h*l;var q=H*J;var n=F*q;var k=h*I;var g=d*C;var c=h*C*l;var V=H*F*I;var Q=F*h;var at=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var ar=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aq=J;var ap=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ao=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var am=h;var ak=(-o+q+k-x+O-R-M+L)*A;var ai=(-E+o+d-k+L-K-R+N)*A;J=s;I=p;H=W;G=J*I*H;F=S;E=J*F;D=I*E;C=U;o=J*C;l=r;h=Z;f=m;d=h*f;au=d*l;T=f*l*C;R=f*H;O=f*C;N=I*H;M=F*I;L=F*l;K=C*l;A=1/(R-O-N+M-L+K);y=J*f;x=h*l;q=H*J;n=F*q;k=h*I;g=d*C;c=h*C*l;V=H*F*I;Q=F*h;var an=-(D-G+o*l-l*E-d*I+au-T+R*I)*A;var al=(G-D-y*H+y*C+au-I*x+L*I-T)*A;var aj=J;var ah=(-C*E+n+k*H-d*H+g-c+L*C-V)*A;var ag=(-n+q*C-Q*I+g-c+Q*l+V-R*C)*A;var af=h;var ae=(-o+q+k-x+O-R-M+L)*A;var ad=(-E+o+d-k+L-K-R+N)*A;I=ao-ai*am;H=at*ao;G=at*am;E=ap*ar;D=aq*ap;o=ar*ak;var j=aq*ak;f=1/(H-G*ai-E+D*ai+o*am-j*ao);au=-ap+am*ak;var P=-ap*ai+ao*ak;K=-ar+aq*ai;var z=at-j;x=at*ai-o;q=-ar*am+aq*ao;var i=G-D;var e=H-E;c=I*f;var av=K*f;var X=q*f;B[0]=an*c+al*(au*f)-aj*(P*f);B[1]=an*av+al*(z*f)-aj*(x*f);B[2]=-an*X-al*(i*f)+aj*(e*f);B[3]=ah*c+ag*(au*f)-af*(P*f);B[4]=ah*av+ag*(z*f)-af*(x*f);B[5]=-ah*X-ag*(i*f)+af*(e*f);B[6]=ae*c+ad*(au*f)-P*f;B[7]=ae*av+ad*(z*f)-x*f;B[8]=-ae*X-ad*(i*f)+e*f},invert_affine_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var j=1/(i*e-h*f);k[0]=j*e;k[1]=j*-h;k[2]=j*(h*d-g*e);k[3]=j*-f;k[4]=j*i;k[5]=j*(g*f-i*d)},invert_perspective_transform:function(c,k){var i=c[0],h=c[1],g=c[2];var f=c[3],e=c[4],d=c[5];var n=c[6],m=c[7],l=c[8];var j=1/(i*(e*l-d*m)-h*(f*l-d*n)+g*(f*m-e*n));k[0]=j*(e*l-d*m);k[1]=j*(g*m-h*l);k[2]=j*(h*d-g*e);k[3]=j*(d*n-f*l);k[4]=j*(i*l-g*n);k[5]=j*(g*f-i*d);k[6]=j*(f*m-e*n);k[7]=j*(h*n-i*m);k[8]=j*(i*e-h*f)}}})();b.transform=a})(jsfeat);(function(b){var a=(function(){var c=function(q,R,O,p){var z=[],r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=R.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var L=l.i32;var j=g.i32;for(;xD){z[r++]={si:((t-1)*y)|0,di:(x*y)|0,alpha:((t-D)*256)|0}}for(C=t;C0.001){z[r++]={si:(s*y)|0,di:(x*y)|0,alpha:((B-s)*256)|0}}}for(x=0;xC){y[q++]={si:((s-1)*x)|0,di:(v*x)|0,alpha:(s-C)*Q}}for(B=s;B0.001){y[q++]={si:(r*x)|0,di:(v*x)|0,alpha:(A-r)*Q}}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(s,K,n,l){if(typeof l==="undefined"){l=0}var A=s.cols,F=s.rows,t=F<<1,z=A<<1;var E=0,v=0,u=0,m=0;var C=((n<<1)+1)|0;var p=(n+1)|0,I=(p+1)|0;var q=8192;var J=l&jsfeat.BOX_BLUR_NOSCALE?1:(16384/(C*C)+0.5)|0;var D=jsfeat.cache.get_buffer((A*F)<<2);var j=0,H=0,o=0,r=0,k=0;var G=D.i32;var g=s.data;var B=0;for(u=0;u>14;j+=G[r]-B;r++}for(;v>14;j+=G[r]-G[k];g[H+A]=(j*J+q)>>14;j+=G[r+1]-G[k+1];r+=2;k+=2}for(;v>14;j+=G[r]-G[k];r++;k++}B=G[r-1];for(;v>14;j+=B-G[k];k++}o+=F}}jsfeat.cache.put_buffer(D)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&E>0&&v<(C-1)&&G<(F-1)){M=Math.max(r-v,0);J=Math.max(E-G,0);O=C*G+v;k=K[O]+M*(K[O+1]-K[O]);j=K[O+C]+M*(K[O+C+1]-K[O+C]);l[H]=k+J*(j-k)}else{l[H]=P}}}},warp_affine:function(k,J,o,I){if(typeof I==="undefined"){I=0}var t=k.cols,w=k.rows,j=J.cols,u=J.rows;var D=k.data,i=J.data;var n=0,m=0,H=0,p=0,z=0,l=0,v=0,F=0,C=0,h=0,g=0;var s=o[0],r=o[1],q=o[2],G=o[3],E=o[4],B=o[5];for(var A=0;m0&&v>0&&p<(t-1)&&z<(w-1)){F=Math.max(l-p,0);C=Math.max(v-z,0);H=t*z+p;h=D[H]+F*(D[H+1]-D[H]);g=D[H+t]+F*(D[H+t+1]-D[H+t]);i[A]=h+C*(g-h)}else{i[A]=I}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data;var A=this.cols*this.rows*this.channel;while(--A>=0){y[A]=this.data[A]}};x.prototype.resize=function(B,z,y){if(typeof y==="undefined"){y=this.channel}var A=(B*y)*z;if(A>this.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{transpose:function(f,d){var l=0,h=0,k=d.rows,c=d.cols;var n=0,e=0,m=0;var o=d.data,g=f.data;for(;lg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=2;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var f=function(j){return j*j};var i=function(t,u,r,q,o){var n=0;var s=0,m=0,k=0,w=0;var p=0,l=0,j=0,v=0;var y=0,x=0;for(;n=0){G[F]=0}for(F=0;F=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(s,K,n,l){if(typeof l==="undefined"){l=0}var A=s.cols,F=s.rows,t=F<<1,z=A<<1;var E=0,v=0,u=0,m=0;var C=((n<<1)+1)|0;var p=(n+1)|0,I=(p+1)|0;var q=8192;var J=l&jsfeat.BOX_BLUR_NOSCALE?1:(16384/(C*C)+0.5)|0;var D=jsfeat.cache.get_buffer((A*F)<<2);var j=0,H=0,o=0,r=0,k=0;var G=D.i32;var g=s.data;var B=0;for(u=0;u>14;j+=G[r]-B;r++}for(;v>14;j+=G[r]-G[k];g[H+A]=(j*J+q)>>14;j+=G[r+1]-G[k+1];r+=2;k+=2}for(;v>14;j+=G[r]-G[k];r++;k++}B=G[r-1];for(;v>14;j+=B-G[k];k++}o+=F}}jsfeat.cache.put_buffer(D)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=l*k+u;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index e8c52ec..fb74086 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -4,7 +4,6 @@ // namespace ? var jsfeat = jsfeat || { REVISION: 'ALPHA' }; - /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -82,29 +81,44 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; this.cols = c|0; this.rows = r|0; if (typeof data_buffer === "undefined") { - this.buffer = new data_t((c * get_data_type_size(data_type) * get_channel(data_type)) * r); + this.allocate(); } else { this.buffer = data_buffer; + // data user asked for + this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : (this.type&F32_t ? this.buffer.f32 : this.buffer.f64)); } - // data user asked for - this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : (this.type&F32_t ? this.buffer.f32 : this.buffer.f64)); } - matrix_t.prototype.set_data_type = function(data_type) { - this.type = get_data_type(data_type)|0; - this.channel = get_channel(data_type)|0; + matrix_t.prototype.allocate = function() { // clear references delete this.data; delete this.buffer; // - this.buffer = new data_t((this.cols * get_data_type_size(data_type) * get_channel(data_type)) * this.rows); + this.buffer = new data_t((this.cols * get_data_type_size(this.type) * this.channel) * this.rows); this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : (this.type&F32_t ? this.buffer.f32 : this.buffer.f64)); } - matrix_t.prototype.set_data = function(array) { - var i = array.length; + matrix_t.prototype.copy_to = function(other) { + var od = other.data; + var i = this.cols*this.rows*this.channel; while(--i >= 0) { - this.data[i] = array[i]; + od[i] = this.data[i]; } } + matrix_t.prototype.resize = function(c, r, ch) { + if (typeof ch === "undefined") { ch = this.channel; } + // change buffer only if new size doesnt fit + var new_size = (c * ch) * r; + if(new_size > this.rows*this.cols*this.channel) { + this.cols = c; + this.rows = r; + this.channel = ch; + this.allocate(); + } else { + this.cols = c; + this.rows = r; + this.channel = ch; + } + } + return matrix_t; })(); @@ -192,7 +206,6 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.point2d_t = point2d_t; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -272,7 +285,6 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; cache.allocate(30, 640*4); })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -344,6 +356,123 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; jsfeat.cache.put_buffer(kern_node); }, + // model is 3x3 matrix_t + perspective_4point_transform: function(model, src_x0, src_y0, dst_x0, dst_y0, + src_x1, src_y1, dst_x1, dst_y1, + src_x2, src_y2, dst_x2, dst_y2, + src_x3, src_y3, dst_x3, dst_y3) { + var t1 = src_x0; + var t2 = src_x2; + var t4 = src_y1; + var t5 = t1 * t2 * t4; + var t6 = src_y3; + var t7 = t1 * t6; + var t8 = t2 * t7; + var t9 = src_y2; + var t10 = t1 * t9; + var t11 = src_x1; + var t14 = src_y0; + var t15 = src_x3; + var t16 = t14 * t15; + var t18 = t16 * t11; + var t20 = t15 * t11 * t9; + var t21 = t15 * t4; + var t24 = t15 * t9; + var t25 = t2 * t4; + var t26 = t6 * t2; + var t27 = t6 * t11; + var t28 = t9 * t11; + var t30 = 1.0 / (t21-t24 - t25 + t26 - t27 + t28); + var t32 = t1 * t15; + var t35 = t14 * t11; + var t41 = t4 * t1; + var t42 = t6 * t41; + var t43 = t14 * t2; + var t46 = t16 * t9; + var t48 = t14 * t9 * t11; + var t51 = t4 * t6 * t2; + var t55 = t6 * t14; + var Hr0 = -(t8-t5 + t10 * t11 - t11 * t7 - t16 * t2 + t18 - t20 + t21 * t2) * t30; + var Hr1 = (t5 - t8 - t32 * t4 + t32 * t9 + t18 - t2 * t35 + t27 * t2 - t20) * t30; + var Hr2 = t1; + var Hr3 = (-t9 * t7 + t42 + t43 * t4 - t16 * t4 + t46 - t48 + t27 * t9 - t51) * t30; + var Hr4 = (-t42 + t41 * t9 - t55 * t2 + t46 - t48 + t55 * t11 + t51 - t21 * t9) * t30; + var Hr5 = t14; + var Hr6 = (-t10 + t41 + t43 - t35 + t24 - t21 - t26 + t27) * t30; + var Hr7 = (-t7 + t10 + t16 - t43 + t27 - t28 - t21 + t25) * t30; + + t1 = dst_x0; + t2 = dst_x2; + t4 = dst_y1; + t5 = t1 * t2 * t4; + t6 = dst_y3; + t7 = t1 * t6; + t8 = t2 * t7; + t9 = dst_y2; + t10 = t1 * t9; + t11 = dst_x1; + t14 = dst_y0; + t15 = dst_x3; + t16 = t14 * t15; + t18 = t16 * t11; + t20 = t15 * t11 * t9; + t21 = t15 * t4; + t24 = t15 * t9; + t25 = t2 * t4; + t26 = t6 * t2; + t27 = t6 * t11; + t28 = t9 * t11; + t30 = 1.0 / (t21-t24 - t25 + t26 - t27 + t28); + t32 = t1 * t15; + t35 = t14 * t11; + t41 = t4 * t1; + t42 = t6 * t41; + t43 = t14 * t2; + t46 = t16 * t9; + t48 = t14 * t9 * t11; + t51 = t4 * t6 * t2; + t55 = t6 * t14; + var Hl0 = -(t8-t5 + t10 * t11 - t11 * t7 - t16 * t2 + t18 - t20 + t21 * t2) * t30; + var Hl1 = (t5 - t8 - t32 * t4 + t32 * t9 + t18 - t2 * t35 + t27 * t2 - t20) * t30; + var Hl2 = t1; + var Hl3 = (-t9 * t7 + t42 + t43 * t4 - t16 * t4 + t46 - t48 + t27 * t9 - t51) * t30; + var Hl4 = (-t42 + t41 * t9 - t55 * t2 + t46 - t48 + t55 * t11 + t51 - t21 * t9) * t30; + var Hl5 = t14; + var Hl6 = (-t10 + t41 + t43 - t35 + t24 - t21 - t26 + t27) * t30; + var Hl7 = (-t7 + t10 + t16 - t43 + t27 - t28 - t21 + t25) * t30; + + // the following code computes R = Hl * inverse Hr + t2 = Hr4-Hr7*Hr5; + t4 = Hr0*Hr4; + t5 = Hr0*Hr5; + t7 = Hr3*Hr1; + t8 = Hr2*Hr3; + t10 = Hr1*Hr6; + var t12 = Hr2*Hr6; + t15 = 1.0 / (t4-t5*Hr7-t7+t8*Hr7+t10*Hr5-t12*Hr4); + t18 = -Hr3+Hr5*Hr6; + var t23 = -Hr3*Hr7+Hr4*Hr6; + t28 = -Hr1+Hr2*Hr7; + var t31 = Hr0-t12; + t35 = Hr0*Hr7-t10; + t41 = -Hr1*Hr5+Hr2*Hr4; + var t44 = t5-t8; + var t47 = t4-t7; + t48 = t2*t15; + var t49 = t28*t15; + var t50 = t41*t15; + var mat = model.data; + mat[0] = Hl0*t48+Hl1*(t18*t15)-Hl2*(t23*t15); + mat[1] = Hl0*t49+Hl1*(t31*t15)-Hl2*(t35*t15); + mat[2] = -Hl0*t50-Hl1*(t44*t15)+Hl2*(t47*t15); + mat[3] = Hl3*t48+Hl4*(t18*t15)-Hl5*(t23*t15); + mat[4] = Hl3*t49+Hl4*(t31*t15)-Hl5*(t35*t15); + mat[5] = -Hl3*t50-Hl4*(t44*t15)+Hl5*(t47*t15); + mat[6] = Hl6*t48+Hl7*(t18*t15)-t23*t15; + mat[7] = Hl6*t49+Hl7*(t31*t15)-t35*t15; + mat[8] = -Hl6*t50-Hl7*(t44*t15)+t47*t15; + }, + // The current implementation was derived from *BSD system qsort(): // Copyright (c) 1992, 1993 // The Regents of the University of California. All rights reserved. @@ -570,7 +699,6 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.math = math; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -703,6 +831,76 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; cd[p_CC] = sum; } } + }, + + // various small matrix operations + invert_3x3: function(from, to) { + var A = from.data, invA = to.data; + var t1 = A[4]; + var t2 = A[8]; + var t4 = A[5]; + var t5 = A[7]; + var t8 = A[0]; + + var t9 = t8*t1; + var t11 = t8*t4; + var t13 = A[3]; + var t14 = A[1]; + var t15 = t13*t14; + var t17 = A[2]; + var t18 = t13*t17; + var t20 = A[6]; + var t21 = t20*t14; + var t23 = t20*t17; + var t26 = 1.0/(t9*t2-t11*t5-t15*t2+t18*t5+t21*t4-t23*t1); + invA[0] = (t1*t2-t4*t5)*t26; + invA[1] = -(t14*t2-t17*t5)*t26; + invA[2] = -(-t14*t4+t17*t1)*t26; + invA[3] = -(t13*t2-t4*t20)*t26; + invA[4] = (t8*t2-t23)*t26; + invA[5] = -(t11-t18)*t26; + invA[6] = -(-t13*t5+t1*t20)*t26; + invA[7] = -(t8*t5-t21)*t26; + invA[8] = (t9-t15)*t26; + }, + // C = A * B + multiply_3x3: function(C, A, B) { + var Cd=C.data, Ad=A.data, Bd=B.data; + var m1_0 = Ad[0], m1_1 = Ad[1], m1_2 = Ad[2]; + var m1_3 = Ad[3], m1_4 = Ad[4], m1_5 = Ad[5]; + var m1_6 = Ad[6], m1_7 = Ad[7], m1_8 = Ad[8]; + + var m2_0 = Bd[0], m2_1 = Bd[1], m2_2 = Bd[2]; + var m2_3 = Bd[3], m2_4 = Bd[4], m2_5 = Bd[5]; + var m2_6 = Bd[6], m2_7 = Bd[7], m2_8 = Bd[8]; + + Cd[0] = m1_0 * m2_0 + m1_1 * m2_3 + m1_2 * m2_6; + Cd[1] = m1_0 * m2_1 + m1_1 * m2_4 + m1_2 * m2_7; + Cd[2] = m1_0 * m2_2 + m1_1 * m2_5 + m1_2 * m2_8; + Cd[3] = m1_3 * m2_0 + m1_4 * m2_3 + m1_5 * m2_6; + Cd[4] = m1_3 * m2_1 + m1_4 * m2_4 + m1_5 * m2_7; + Cd[5] = m1_3 * m2_2 + m1_4 * m2_5 + m1_5 * m2_8; + Cd[6] = m1_6 * m2_0 + m1_7 * m2_3 + m1_8 * m2_6; + Cd[7] = m1_6 * m2_1 + m1_7 * m2_4 + m1_8 * m2_7; + Cd[8] = m1_6 * m2_2 + m1_7 * m2_5 + m1_8 * m2_8; + }, + + mat3x3_determinant: function(M) { + var md=M.data; + return md[0] * md[4] * md[8] - + md[0] * md[5] * md[7] - + md[3] * md[1] * md[8] + + md[3] * md[2] * md[7] + + md[6] * md[1] * md[5] - + md[6] * md[2] * md[4]; + }, + + determinant_3x3: function(M11, M12, M13, + M21, M22, M23, + M31, M32, M33) { + return M11 * M22 * M33 - M11 * M23 * M32 - + M21 * M12 * M33 + M21 * M13 * M32 + + M31 * M12 * M23 - M31 * M13 * M22; } }; @@ -710,7 +908,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.matmath = matmath; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -896,7 +1094,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; } var JacobiSVDImpl = function(At, astep, _W, Vt, vstep, m, n, n1) { - var eps = jsfeat.EPSILON * 10.0; + var eps = jsfeat.EPSILON * 2.0; var minval = jsfeat.FLT_MIN; var i=0,j=0,k=0,iter=0,max_iter=Math.max(m, 30); var Ai=0,Aj=0,Vi=0,Vj=0,changed=0; @@ -931,10 +1129,9 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; Ai = (i*astep)|0, Aj = (j*astep)|0; a = W[i], p = 0, b = W[j]; - k = 3; + k = 2; p += At[Ai]*At[Aj]; p += At[Ai+1]*At[Aj+1]; - p += At[Ai+2]*At[Aj+2]; for(; k < m; k++) p += At[Ai+k]*At[Aj+k]; @@ -957,7 +1154,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; W[j] -= delta; if( (iter & 1) && W[i] > 0 && W[j] > 0 ) { - k = 3;//unroll 3x3 + k = 2;//unroll 2x2 t0 = c*At[Ai] + s*At[Aj]; t1 = -s*At[Ai] + c*At[Aj]; At[Ai] = t0; At[Aj] = t1; @@ -966,10 +1163,6 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; t1 = -s*At[Ai+1] + c*At[Aj+1]; At[Ai+1] = t0; At[Aj+1] = t1; - t0 = c*At[Ai+2] + s*At[Aj+2]; - t1 = -s*At[Ai+2] + c*At[Aj+2]; - At[Ai+2] = t0; At[Aj+2] = t1; - for(; k < m; k++) { t0 = c*At[Ai+k] + s*At[Aj+k]; t1 = -s*At[Ai+k] + c*At[Aj+k]; @@ -977,7 +1170,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; } } else { a = b = 0; - k = 3; // unroll + k = 2; // unroll t0 = c*At[Ai] + s*At[Aj]; t1 = -s*At[Ai] + c*At[Aj]; At[Ai] = t0; At[Aj] = t1; @@ -988,11 +1181,6 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; At[Ai+1] = t0; At[Aj+1] = t1; a += t0*t0; b += t1*t1; - t0 = c*At[Ai+2] + s*At[Aj+2]; - t1 = -s*At[Ai+2] + c*At[Aj+2]; - At[Ai+2] = t0; At[Aj+2] = t1; - a += t0*t0; b += t1*t1; - for( ; k < m; k++ ) { t0 = c*At[Ai+k] + s*At[Aj+k]; @@ -1009,7 +1197,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; if(Vt) { Vi = (i*vstep)|0, Vj = (j*vstep)|0; - k = 3; + k = 2; t0 = c*Vt[Vi] + s*Vt[Vj]; t1 = -s*Vt[Vi] + c*Vt[Vj]; Vt[Vi] = t0; Vt[Vj] = t1; @@ -1018,10 +1206,6 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; t1 = -s*Vt[Vi+1] + c*Vt[Vj+1]; Vt[Vi+1] = t0; Vt[Vj+1] = t1; - t0 = c*Vt[Vi+2] + s*Vt[Vj+2]; - t1 = -s*Vt[Vi+2] + c*Vt[Vj+2]; - Vt[Vi+2] = t0; Vt[Vj+2] = t1; - for(; k < n; k++) { t0 = c*Vt[Vi+k] + s*Vt[Vj+k]; t1 = -s*Vt[Vi+k] + c*Vt[Vj+k]; @@ -1431,179 +1615,660 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.linalg = linalg; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ + * */ (function(global) { "use strict"; // - var transform = (function() { - // - return { - affine_3point_transform: function(mat, src_x0, src_y0, dst_x0, dst_y0, - src_x1, src_y1, dst_x1, dst_y1, - src_x2, src_y2, dst_x2, dst_y2) { - // we need linear algebra module first - }, + var motion_model = (function() { + + var sqr = function(x) { + return x*x; + } + + // does isotropic normalization + var iso_normalize_points = function(from, to, T0, T1, count) { + var i=0; + var cx0=0.0, cy0=0.0, d0=0.0, s0=0.0; + var cx1=0.0, cy1=0.0, d1=0.0, s1=0.0; + var dx=0.0,dy=0.0; + + for (; i < count; ++i) { + cx0 += from[i].x; + cy0 += from[i].y; + cx1 += to[i].x; + cy1 += to[i].y; + } + + cx0 /= count; cy0 /= count; + cx1 /= count; cy1 /= count; + + for (i = 0; i < count; ++i) { + dx = from[i].x - cx0; + dy = from[i].y - cy0; + d0 += Math.sqrt(dx*dx + dy*dy); + dx = to[i].x - cx1; + dy = to[i].y - cy1; + d1 += Math.sqrt(dx*dx + dy*dy); + } + + d0 /= count; d1 /= count; + + s0 = Math.SQRT2 / d0; s1 = Math.SQRT2 / d1; + + T0[0] = T0[4] = s0; + T0[2] = -cx0*s0; + T0[5] = -cy0*s0; + T0[1] = T0[3] = T0[6] = T0[7] = 0.0; + T0[8] = 1.0; + + T1[0] = T1[4] = s1; + T1[2] = -cx1*s1; + T1[5] = -cy1*s1; + T1[1] = T1[3] = T1[6] = T1[7] = 0.0; + T1[8] = 1.0; + } + + var have_collinear_points = function(points, count) { + var j=0,k=0,i=(count-1)|0; + var dx1=0.0,dy1=0.0,dx2=0.0,dy2=0.0; + + // check that the i-th selected point does not belong + // to a line connecting some previously selected points + for(; j < i; ++j) { + dx1 = points[j].x - points[i].x; + dy1 = points[j].y - points[i].y; + for(k = 0; k < j; ++k) { + dx2 = points[k].x - points[i].x; + dy2 = points[k].y - points[i].y; + if( Math.abs(dx2*dy1 - dy2*dx1) <= jsfeat.EPSILON*(Math.abs(dx1) + Math.abs(dy1) + Math.abs(dx2) + Math.abs(dy2))) + return true; + } + } + return false; + } + + var affine2d = (function () { + + function affine2d() { + this.T0 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + this.T1 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + this.AtA = new jsfeat.matrix_t(6, 6, jsfeat.F32_t|jsfeat.C1_t); + this.AtB = new jsfeat.matrix_t(6, 1, jsfeat.F32_t|jsfeat.C1_t); + } + + affine2d.prototype.run = function(from, to, model, count) { + var i=0,j=0; + var dt=model.type|jsfeat.C1_t; + var md=model.data, t0d=this.T0.data, t1d=this.T1.data; + var pt0,pt1,px=0.0,py=0.0; + + iso_normalize_points(from, to, t0d, t1d, count); + + var a_buff = jsfeat.cache.get_buffer((2*count*6)<<3); + var b_buff = jsfeat.cache.get_buffer((2*count)<<3); + + var a_mt = new jsfeat.matrix_t(6, 2*count, dt, a_buff.data); + var b_mt = new jsfeat.matrix_t(1, 2*count, dt, b_buff.data); + var ad=a_mt.data, bd=b_mt.data; + + for (; i < count; ++i) { + pt0 = from[i]; + pt1 = to[i]; + + px = t0d[0]*pt0.x + t0d[1]*pt0.y + t0d[2]; + py = t0d[3]*pt0.x + t0d[4]*pt0.y + t0d[5]; + + j = i*2*6; + ad[j]=px, ad[j+1]=py, ad[j+2]=1.0, ad[j+3]=0.0, ad[j+4]=0.0, ad[j+5]=0.0; + + j += 6; + ad[j]=0.0, ad[j+1]=0.0, ad[j+2]=0.0, ad[j+3]=px, ad[j+4]=py, ad[j+5]=1.0; + + bd[i<<1] = t1d[0]*pt1.x + t1d[1]*pt1.y + t1d[2]; + bd[(i<<1)+1] = t1d[3]*pt1.x + t1d[4]*pt1.y + t1d[5]; + } + + jsfeat.matmath.multiply_AtA(this.AtA, a_mt); + jsfeat.matmath.multiply_AtB(this.AtB, a_mt, b_mt); + + jsfeat.linalg.lu_solve(this.AtA, this.AtB); + + md[0] = this.AtB.data[0], md[1]=this.AtB.data[1], md[2]=this.AtB.data[2]; + md[3] = this.AtB.data[3], md[4]=this.AtB.data[4], md[5]=this.AtB.data[5]; + md[6] = 0.0, md[7] = 0.0, md[8] = 1.0; // fill last row + + // denormalize + jsfeat.matmath.invert_3x3(this.T1, this.T1); + jsfeat.matmath.multiply_3x3(model, this.T1, model); + jsfeat.matmath.multiply_3x3(model, model, this.T0); + + // free buffer + jsfeat.cache.put_buffer(a_buff); + jsfeat.cache.put_buffer(b_buff); + + return 1; + } + + affine2d.prototype.error = function(from, to, model, err, count) { + var i=0; + var pt0,pt1; + var m=model.data; + + for (; i < count; ++i) { + pt0 = from[i]; + pt1 = to[i]; + + err[i] = sqr(pt1.x - m[0]*pt0.x - m[1]*pt0.y - m[2]) + + sqr(pt1.y - m[3]*pt0.x - m[4]*pt0.y - m[5]); + } + } + + affine2d.prototype.check_subset = function(from, to, count) { + return true; // all good + } + + return affine2d; + })(); + + var homography2d = (function () { + + function homography2d() { + this.T0 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + this.T1 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + this.mLtL = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); + this.Evec = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); + } + + homography2d.prototype.run = function(from, to, model, count) { + var i=0,j=0; + var md=model.data, t0d=this.T0.data, t1d=this.T1.data; + var LtL=this.mLtL.data, evd=this.Evec.data; + var x=0.0,y=0.0,X=0.0,Y=0.0; + + // norm + var smx=0.0, smy=0.0, cmx=0.0, cmy=0.0, sMx=0.0, sMy=0.0, cMx=0.0, cMy=0.0; + + for(; i < count; ++i) { + cmx += to[i].x; + cmy += to[i].y; + cMx += from[i].x; + cMy += from[i].y; + } + + cmx /= count; cmy /= count; + cMx /= count; cMy /= count; + + for(i = 0; i < count; ++i) + { + smx += Math.abs(to[i].x - cmx); + smy += Math.abs(to[i].y - cmy); + sMx += Math.abs(from[i].x - cMx); + sMy += Math.abs(from[i].y - cMy); + } + + if( Math.abs(smx) < jsfeat.EPSILON + || Math.abs(smy) < jsfeat.EPSILON + || Math.abs(sMx) < jsfeat.EPSILON + || Math.abs(sMy) < jsfeat.EPSILON ) return 0; + + smx = count/smx; smy = count/smy; + sMx = count/sMx; sMy = count/sMy; + + t0d[0] = sMx; t0d[1] = 0; t0d[2] = -cMx*sMx; + t0d[3] = 0; t0d[4] = sMy; t0d[5] = -cMy*sMy; + t0d[6] = 0; t0d[7] = 0; t0d[8] = 1; + + t1d[0] = 1.0/smx; t1d[1] = 0; t1d[2] = cmx; + t1d[3] = 0; t1d[4] = 1.0/smy; t1d[5] = cmy; + t1d[6] = 0; t1d[7] = 0; t1d[8] = 1; + // + + // construct system + i = 81; + while(--i >= 0) { + LtL[i] = 0.0; + } + for(i = 0; i < count; ++i) { + x = (to[i].x - cmx) * smx; + y = (to[i].y - cmy) * smy; + X = (from[i].x - cMx) * sMx; + Y = (from[i].y - cMy) * sMy; + + LtL[0] += X*X; + LtL[1] += X*Y; + LtL[2] += X; + + LtL[6] += X*-x*X; + LtL[7] += X*-x*Y; + LtL[8] += X*-x; + LtL[10] += Y*Y; + LtL[11] += Y; + + LtL[15] += Y*-x*X; + LtL[16] += Y*-x*Y; + LtL[17] += Y*-x; + LtL[20] += 1.0; + + LtL[24] += -x*X; + LtL[25] += -x*Y; + LtL[26] += -x; + LtL[30] += X*X; + LtL[31] += X*Y; + LtL[32] += X; + LtL[33] += X*-y*X; + LtL[34] += X*-y*Y; + LtL[35] += X*-y; + LtL[40] += Y*Y; + LtL[41] += Y; + LtL[42] += Y*-y*X; + LtL[43] += Y*-y*Y; + LtL[44] += Y*-y; + LtL[50] += 1.0; + LtL[51] += -y*X; + LtL[52] += -y*Y; + LtL[53] += -y; + LtL[60] += -x*X*-x*X + -y*X*-y*X; + LtL[61] += -x*X*-x*Y + -y*X*-y*Y; + LtL[62] += -x*X*-x + -y*X*-y; + LtL[70] += -x*Y*-x*Y + -y*Y*-y*Y; + LtL[71] += -x*Y*-x + -y*Y*-y; + LtL[80] += -x*-x + -y*-y; + } + // + + // symmetry + for(i = 0; i < 9; ++i) { + for(j = 0; j < i; ++j) + LtL[i*9+j] = LtL[j*9+i]; + } + + jsfeat.linalg.eigenVV(this.mLtL, this.Evec); + + md[0]=evd[72], md[1]=evd[73], md[2]=evd[74]; + md[3]=evd[75], md[4]=evd[76], md[5]=evd[77]; + md[6]=evd[78], md[7]=evd[79], md[8]=evd[80]; + + // denormalize + jsfeat.matmath.multiply_3x3(model, this.T1, model); + jsfeat.matmath.multiply_3x3(model, model, this.T0); + + // set bottom right to 1.0 + x = 1.0/md[8]; + md[0] *= x; md[1] *= x; md[2] *= x; + md[3] *= x; md[4] *= x; md[5] *= x; + md[6] *= x; md[7] *= x; md[8] = 1.0; + + return 1; + } + + homography2d.prototype.error = function(from, to, model, err, count) { + var i=0; + var pt0,pt1,ww=0.0,dx=0.0,dy=0.0; + var m=model.data; + + for (; i < count; ++i) { + pt0 = from[i]; + pt1 = to[i]; + + ww = 1.0/(m[6]*pt0.x + m[7]*pt0.y + 1.0); + dx = (m[0]*pt0.x + m[1]*pt0.y + m[2])*ww - pt1.x; + dy = (m[3]*pt0.x + m[4]*pt0.y + m[5])*ww - pt1.y; + err[i] = (dx*dx + dy*dy); + } + } + + homography2d.prototype.check_subset = function(from, to, count) { + if( have_collinear_points(from, count) || have_collinear_points(to, count) ) { + return false; + } + if( count == 4 ) { + var negative = 0; + + var fp0=from[0],fp1=from[1],fp2=from[2],fp3=from[3]; + var tp0=to[0],tp1=to[1],tp2=to[2],tp3=to[3]; + + // set1 + var A11=fp0.x, A12=fp0.y, A13=1.0; + var A21=fp1.x, A22=fp1.y, A23=1.0; + var A31=fp2.x, A32=fp2.y, A33=1.0; + + var B11=tp0.x, B12=tp0.y, B13=1.0; + var B21=tp1.x, B22=tp1.y, B23=1.0; + var B31=tp2.x, B32=tp2.y, B33=1.0; + + var detA = jsfeat.matmath.determinant_3x3(A11,A12,A13, A21,A22,A23, A31,A32,A33); + var detB = jsfeat.matmath.determinant_3x3(B11,B12,B13, B21,B22,B23, B31,B32,B33); + + if(detA*detB < 0) negative++; + + // set2 + A11=fp1.x, A12=fp1.y; + A21=fp2.x, A22=fp2.y; + A31=fp3.x, A32=fp3.y; + + B11=tp1.x, B12=tp1.y; + B21=tp2.x, B22=tp2.y; + B31=tp3.x, B32=tp3.y; + + detA = jsfeat.matmath.determinant_3x3(A11,A12,A13, A21,A22,A23, A31,A32,A33); + detB = jsfeat.matmath.determinant_3x3(B11,B12,B13, B21,B22,B23, B31,B32,B33); + + if(detA*detB < 0) negative++; + + // set3 + A11=fp0.x, A12=fp0.y; + A21=fp2.x, A22=fp2.y; + A31=fp3.x, A32=fp3.y; + + B11=tp0.x, B12=tp0.y; + B21=tp2.x, B22=tp2.y; + B31=tp3.x, B32=tp3.y; + + detA = jsfeat.matmath.determinant_3x3(A11,A12,A13, A21,A22,A23, A31,A32,A33); + detB = jsfeat.matmath.determinant_3x3(B11,B12,B13, B21,B22,B23, B31,B32,B33); - perspective_4point_transform: function(mat, src_x0, src_y0, dst_x0, dst_y0, - src_x1, src_y1, dst_x1, dst_y1, - src_x2, src_y2, dst_x2, dst_y2, - src_x3, src_y3, dst_x3, dst_y3) { - var t1 = src_x0; - var t2 = src_x2; - var t4 = src_y1; - var t5 = t1 * t2 * t4; - var t6 = src_y3; - var t7 = t1 * t6; - var t8 = t2 * t7; - var t9 = src_y2; - var t10 = t1 * t9; - var t11 = src_x1; - var t14 = src_y0; - var t15 = src_x3; - var t16 = t14 * t15; - var t18 = t16 * t11; - var t20 = t15 * t11 * t9; - var t21 = t15 * t4; - var t24 = t15 * t9; - var t25 = t2 * t4; - var t26 = t6 * t2; - var t27 = t6 * t11; - var t28 = t9 * t11; - var t30 = 1.0 / (t21-t24 - t25 + t26 - t27 + t28); - var t32 = t1 * t15; - var t35 = t14 * t11; - var t41 = t4 * t1; - var t42 = t6 * t41; - var t43 = t14 * t2; - var t46 = t16 * t9; - var t48 = t14 * t9 * t11; - var t51 = t4 * t6 * t2; - var t55 = t6 * t14; - var Hr0 = -(t8-t5 + t10 * t11 - t11 * t7 - t16 * t2 + t18 - t20 + t21 * t2) * t30; - var Hr1 = (t5 - t8 - t32 * t4 + t32 * t9 + t18 - t2 * t35 + t27 * t2 - t20) * t30; - var Hr2 = t1; - var Hr3 = (-t9 * t7 + t42 + t43 * t4 - t16 * t4 + t46 - t48 + t27 * t9 - t51) * t30; - var Hr4 = (-t42 + t41 * t9 - t55 * t2 + t46 - t48 + t55 * t11 + t51 - t21 * t9) * t30; - var Hr5 = t14; - var Hr6 = (-t10 + t41 + t43 - t35 + t24 - t21 - t26 + t27) * t30; - var Hr7 = (-t7 + t10 + t16 - t43 + t27 - t28 - t21 + t25) * t30; - - t1 = dst_x0; - t2 = dst_x2; - t4 = dst_y1; - t5 = t1 * t2 * t4; - t6 = dst_y3; - t7 = t1 * t6; - t8 = t2 * t7; - t9 = dst_y2; - t10 = t1 * t9; - t11 = dst_x1; - t14 = dst_y0; - t15 = dst_x3; - t16 = t14 * t15; - t18 = t16 * t11; - t20 = t15 * t11 * t9; - t21 = t15 * t4; - t24 = t15 * t9; - t25 = t2 * t4; - t26 = t6 * t2; - t27 = t6 * t11; - t28 = t9 * t11; - t30 = 1.0 / (t21-t24 - t25 + t26 - t27 + t28); - t32 = t1 * t15; - t35 = t14 * t11; - t41 = t4 * t1; - t42 = t6 * t41; - t43 = t14 * t2; - t46 = t16 * t9; - t48 = t14 * t9 * t11; - t51 = t4 * t6 * t2; - t55 = t6 * t14; - var Hl0 = -(t8-t5 + t10 * t11 - t11 * t7 - t16 * t2 + t18 - t20 + t21 * t2) * t30; - var Hl1 = (t5 - t8 - t32 * t4 + t32 * t9 + t18 - t2 * t35 + t27 * t2 - t20) * t30; - var Hl2 = t1; - var Hl3 = (-t9 * t7 + t42 + t43 * t4 - t16 * t4 + t46 - t48 + t27 * t9 - t51) * t30; - var Hl4 = (-t42 + t41 * t9 - t55 * t2 + t46 - t48 + t55 * t11 + t51 - t21 * t9) * t30; - var Hl5 = t14; - var Hl6 = (-t10 + t41 + t43 - t35 + t24 - t21 - t26 + t27) * t30; - var Hl7 = (-t7 + t10 + t16 - t43 + t27 - t28 - t21 + t25) * t30; - - // the following code computes R = Hl * inverse Hr - t2 = Hr4-Hr7*Hr5; - t4 = Hr0*Hr4; - t5 = Hr0*Hr5; - t7 = Hr3*Hr1; - t8 = Hr2*Hr3; - t10 = Hr1*Hr6; - var t12 = Hr2*Hr6; - t15 = 1.0 / (t4-t5*Hr7-t7+t8*Hr7+t10*Hr5-t12*Hr4); - t18 = -Hr3+Hr5*Hr6; - var t23 = -Hr3*Hr7+Hr4*Hr6; - t28 = -Hr1+Hr2*Hr7; - var t31 = Hr0-t12; - t35 = Hr0*Hr7-t10; - t41 = -Hr1*Hr5+Hr2*Hr4; - var t44 = t5-t8; - var t47 = t4-t7; - t48 = t2*t15; - var t49 = t28*t15; - var t50 = t41*t15; - mat[0] = Hl0*t48+Hl1*(t18*t15)-Hl2*(t23*t15); - mat[1] = Hl0*t49+Hl1*(t31*t15)-Hl2*(t35*t15); - mat[2] = -Hl0*t50-Hl1*(t44*t15)+Hl2*(t47*t15); - mat[3] = Hl3*t48+Hl4*(t18*t15)-Hl5*(t23*t15); - mat[4] = Hl3*t49+Hl4*(t31*t15)-Hl5*(t35*t15); - mat[5] = -Hl3*t50-Hl4*(t44*t15)+Hl5*(t47*t15); - mat[6] = Hl6*t48+Hl7*(t18*t15)-t23*t15; - mat[7] = Hl6*t49+Hl7*(t31*t15)-t35*t15; - mat[8] = -Hl6*t50-Hl7*(t44*t15)+t47*t15; - }, + if(detA*detB < 0) negative++; - invert_affine_transform: function(src, dst) { - var m11 = src[0], m12 = src[1], m13 = src[2]; - var m21 = src[3], m22 = src[4], m23 = src[5]; + // set4 + A11=fp0.x, A12=fp0.y; + A21=fp1.x, A22=fp1.y; + A31=fp3.x, A32=fp3.y; - var det = 1.0 / (m11 * m22 - m12 * m21); + B11=tp0.x, B12=tp0.y; + B21=tp1.x, B22=tp1.y; + B31=tp3.x, B32=tp3.y; - dst[0] = det * m22; - dst[1] = det * -m12; - dst[2] = det * (m12*m23 - m13*m22); + detA = jsfeat.matmath.determinant_3x3(A11,A12,A13, A21,A22,A23, A31,A32,A33); + detB = jsfeat.matmath.determinant_3x3(B11,B12,B13, B21,B22,B23, B31,B32,B33); - dst[3] = det * -m21; - dst[4] = det * m11; - dst[5] = det * (m13*m21 - m11*m23); - }, + if(detA*detB < 0) negative++; - invert_perspective_transform: function(src, dst) { - var m11 = src[0], m12 = src[1], m13 = src[2]; - var m21 = src[3], m22 = src[4], m23 = src[5]; - var m31 = src[6], m32 = src[7], m33 = src[8]; + if(negative != 0 && negative != 4) { + return false; + } + } + return true; // all good + } - var det = 1.0 / (m11 * (m22*m33 - m23*m32) - m12 * (m21*m33 - m23*m31) + m13 * (m21*m32 - m22*m31)); + return homography2d; + })(); - dst[0] = det * (m22*m33 - m23*m32); - dst[1] = det * (m13*m32 - m12*m33); - dst[2] = det * (m12*m23 - m13*m22); + return { - dst[3] = det * (m23*m31 - m21*m33); - dst[4] = det * (m11*m33 - m13*m31); - dst[5] = det * (m13*m21 - m11*m23); + affine2d:affine2d, + homography2d:homography2d - dst[6] = det * (m21*m32 - m22*m31); - dst[7] = det * (m12*m31 - m11*m32); - dst[8] = det * (m11*m22 - m12*m21); - } + }; + + })(); + + var ransac_params_t = (function () { + function ransac_params_t(size, thresh, eps, prob) { + if (typeof size === "undefined") { size=0; } + if (typeof thresh === "undefined") { thresh=0.5; } + if (typeof eps === "undefined") { eps=0.5; } + if (typeof prob === "undefined") { prob=0.99; } + + this.size = size; + this.thresh = thresh; + this.eps = eps; + this.prob = prob; }; + ransac_params_t.prototype.update_iters = function(_eps, max_iters) { + var num = Math.log(1 - this.prob); + var denom = Math.log(1 - Math.pow(1 - _eps, this.size)); + return (denom >= 0 || -num >= max_iters*(-denom) ? max_iters : Math.round(num/denom))|0; + }; + return ransac_params_t; })(); - global.transform = transform; + var motion_estimator = (function() { + + var get_subset = function(kernel, from, to, need_cnt, max_cnt, from_sub, to_sub) { + var max_try = 1000; + var indices = []; + var i=0, j=0, ssiter=0, idx_i=0, ok=false; + for(; ssiter < max_try; ++ssiter) { + i = 0; + for (; i < need_cnt && ssiter < max_try;) { + ok = false; + idx_i = 0; + while (!ok) { + ok = true; + idx_i = indices[i] = Math.floor(Math.random() * max_cnt)|0; + for (j = 0; j < i; ++j) { + if (idx_i == indices[j]) + { ok = false; break; } + } + } + from_sub[i] = from[idx_i]; + to_sub[i] = to[idx_i]; + if( !kernel.check_subset( from_sub, to_sub, i+1 ) ) { + ssiter++; + continue; + } + ++i; + } + break; + } + + return (i == need_cnt && ssiter < max_try); + } + + var find_inliers = function(kernel, model, from, to, count, thresh, err, mask) { + var numinliers = 0, i=0, f=0; + var t = thresh*thresh; + + kernel.error(from, to, model, err, count); + + for(; i < count; ++i) { + f = err[i] <= t; + mask[i] = f|0; + numinliers += f; + } + return numinliers; + } + + return { + + ransac: function(params, kernel, from, to, count, model, mask, max_iters) { + if (typeof max_iters === "undefined") { max_iters=1000; } + + if(count < params.size) return false; + + var model_points = params.size; + var niters = max_iters, iter=0; + var result = false; + + var subset0 = []; + var subset1 = []; + var found = false; + + var mc=model.cols,mr=model.rows; + var dt = model.type | jsfeat.C1_t; + + var m_buff = jsfeat.cache.get_buffer((mc*mr)<<3); + var ms_buff = jsfeat.cache.get_buffer(count); + var err_buff = jsfeat.cache.get_buffer(count<<2); + var M = new jsfeat.matrix_t(mc, mr, dt, m_buff.data); + var curr_mask = new jsfeat.matrix_t(count, 1, jsfeat.U8_t|jsfeat.C1_t, ms_buff.data); + + var inliers_max = -1, numinliers=0; + var nmodels = 0; + + var err = err_buff.f32; + + // special case + if(count == model_points) { + if(kernel.run(from, to, M, count) <= 0) { + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + return false; + } + + M.copy_to(model); + if(mask) { + while(--count >= 0) { + mask.data[count] = 1; + } + } + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + return true; + } + + for (; iter < niters; ++iter) { + // generate subset + found = get_subset(kernel, from, to, model_points, count, subset0, subset1); + if(!found) { + if(iter == 0) { + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + return false; + } + break; + } + + nmodels = kernel.run( subset0, subset1, M, model_points ); + if(nmodels <= 0) + continue; + + // TODO handle multimodel output + + numinliers = find_inliers(kernel, M, from, to, count, params.thresh, err, curr_mask.data); + + if( numinliers > Math.max(inliers_max, model_points-1) ) { + M.copy_to(model); + inliers_max = numinliers; + if(mask) curr_mask.copy_to(mask); + niters = params.update_iters((count - numinliers)/count, niters); + result = true; + } + } + + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + + return result; + }, + + lmeds: function(params, kernel, from, to, count, model, mask, max_iters) { + if (typeof max_iters === "undefined") { max_iters=1000; } + + if(count < params.size) return false; + + var model_points = params.size; + var niters = max_iters, iter=0; + var result = false; + + var subset0 = []; + var subset1 = []; + var found = false; + + var mc=model.cols,mr=model.rows; + var dt = model.type | jsfeat.C1_t; + + var m_buff = jsfeat.cache.get_buffer((mc*mr)<<3); + var ms_buff = jsfeat.cache.get_buffer(count); + var err_buff = jsfeat.cache.get_buffer(count<<2); + var M = new jsfeat.matrix_t(mc, mr, dt, m_buff.data); + var curr_mask = new jsfeat.matrix_t(count, 1, jsfeat.U8_t|jsfeat.C1_t, ms_buff.data); + + var numinliers=0; + var nmodels = 0; + + var err = err_buff.f32; + var min_median = 1000000000.0, sigma=0.0, median=0.0; + + params.eps = 0.45; + niters = params.update_iters(params.eps, niters); + + // special case + if(count == model_points) { + if(kernel.run(from, to, M, count) <= 0) { + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + return false; + } + + M.copy_to(model); + if(mask) { + while(--count >= 0) { + mask.data[count] = 1; + } + } + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + return true; + } + + for (; iter < niters; ++iter) { + // generate subset + found = get_subset(kernel, from, to, model_points, count, subset0, subset1); + if(!found) { + if(iter == 0) { + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + return false; + } + break; + } + + nmodels = kernel.run( subset0, subset1, M, model_points ); + if(nmodels <= 0) + continue; + + // TODO handle multimodel output + + kernel.error(from, to, M, err, count); + median = jsfeat.math.median(err, 0, count-1); + + if(median < min_median) { + min_median = median; + M.copy_to(model); + result = true; + } + } + + if(result) { + sigma = 2.5*1.4826*(1 + 5.0/(count - model_points))*Math.sqrt(minMedian); + sigma = Math.max(sigma, 0.001); + + numinliers = find_inliers(kernel, model, from, to, count, sigma, err, curr_mask.data); + if(mask) curr_mask.copy_to(mask); + + result = numinliers >= model_points; + } + + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + + return result; + } + + }; -})(jsfeat); + })(); + + global.ransac_params_t = ransac_params_t; + global.motion_model = motion_model; + global.motion_estimator = motion_estimator; + +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -1615,7 +2280,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var imgproc = (function() { var _resample_u8 = function(src, dst, nw, nh) { - var xofs = [],xofs_count=0; + var xofs_count=0; var ch=src.channel,w=src.cols,h=src.rows; var src_d=src.data,dst_d=dst.data; var scale_x = w / nw, scale_y = h / nh; @@ -1625,9 +2290,11 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var buf_node = jsfeat.cache.get_buffer((nw*ch)<<2); var sum_node = jsfeat.cache.get_buffer((nw*ch)<<2); + var xofs_node = jsfeat.cache.get_buffer((w*2*3)<<2); var buf = buf_node.i32; var sum = sum_node.i32; + var xofs = xofs_node.i32; for (; dx < nw; dx++) { fsx1 = dx * scale_x, fsx2 = fsx1 + scale_x; @@ -1636,19 +2303,22 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; sx2 = Math.min(sx2, w - 1); if(sx1 > fsx1) { - xofs[xofs_count++] = {"si": ((sx1 - 1)*ch)|0, - "di": (dx * ch)|0, - "alpha": ((sx1 - fsx1) * 0x100)|0}; + xofs[k++] = (dx * ch)|0; + xofs[k++] = ((sx1 - 1)*ch)|0; + xofs[k++] = ((sx1 - fsx1) * 0x100)|0; + xofs_count++; } for(sx = sx1; sx < sx2; sx++){ - xofs[xofs_count++] = {"si": (sx * ch)|0, - "di": (dx * ch)|0, - "alpha": 256}; + xofs_count++; + xofs[k++] = (dx * ch)|0; + xofs[k++] = (sx * ch)|0; + xofs[k++] = 256; } if(fsx2 - sx2 > 1e-3) { - xofs[xofs_count++] = {"si": (sx2 * ch)|0, - "di": (dx * ch)|0, - "alpha": ((fsx2 - sx2) * 256)|0}; + xofs_count++; + xofs[k++] = (dx * ch)|0; + xofs[k++] = (sx2 * ch)|0; + xofs[k++] = ((fsx2 - sx2) * 256)|0; } } @@ -1659,9 +2329,9 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; for (sy = 0; sy < h; sy++) { a = w * sy; for (k = 0; k < xofs_count; k++) { - dxn = xofs[k].di; - alpha = xofs[k].alpha; - sx1 = xofs[k].si; + dxn = xofs[k*3]; + sx1 = xofs[k*3+1]; + alpha = xofs[k*3+2]; for (i = 0; i < ch; i++) { buf[dxn + i] += src_d[a+sx1+i] * alpha; } @@ -1693,10 +2363,11 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; jsfeat.cache.put_buffer(sum_node); jsfeat.cache.put_buffer(buf_node); + jsfeat.cache.put_buffer(xofs_node); } var _resample = function(src, dst, nw, nh) { - var xofs = [],xofs_count=0; + var xofs_count=0; var ch=src.channel,w=src.cols,h=src.rows; var src_d=src.data,dst_d=dst.data; var scale_x = w / nw, scale_y = h / nh; @@ -1706,9 +2377,11 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var buf_node = jsfeat.cache.get_buffer((nw*ch)<<2); var sum_node = jsfeat.cache.get_buffer((nw*ch)<<2); + var xofs_node = jsfeat.cache.get_buffer((w*2*3)<<2); var buf = buf_node.f32; var sum = sum_node.f32; + var xofs = xofs_node.f32; for (; dx < nw; dx++) { fsx1 = dx * scale_x, fsx2 = fsx1 + scale_x; @@ -1717,19 +2390,22 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; sx2 = Math.min(sx2, w - 1); if(sx1 > fsx1) { - xofs[xofs_count++] = {"si": ((sx1 - 1)*ch)|0, - "di": (dx * ch)|0, - "alpha": (sx1 - fsx1) * scale}; + xofs_count++; + xofs[k++] = ((sx1 - 1)*ch)|0; + xofs[k++] = (dx * ch)|0; + xofs[k++] = (sx1 - fsx1) * scale; } for(sx = sx1; sx < sx2; sx++){ - xofs[xofs_count++] = {"si": (sx * ch)|0, - "di": (dx * ch)|0, - "alpha": scale}; + xofs_count++; + xofs[k++] = (sx * ch)|0; + xofs[k++] = (dx * ch)|0; + xofs[k++] = scale; } if(fsx2 - sx2 > 1e-3) { - xofs[xofs_count++] = {"si": (sx2 * ch)|0, - "di": (dx * ch)|0, - "alpha": (fsx2 - sx2) * scale}; + xofs_count++; + xofs[k++] = (sx2 * ch)|0; + xofs[k++] = (dx * ch)|0; + xofs[k++] = (fsx2 - sx2) * scale; } } @@ -1740,9 +2416,9 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; for (sy = 0; sy < h; sy++) { a = w * sy; for (k = 0; k < xofs_count; k++) { - dxn = xofs[k].di; - alpha = xofs[k].alpha; - sx1 = xofs[k].si; + sx1 = xofs[k*3]|0; + dxn = xofs[k*3+1]|0; + alpha = xofs[k*3+2]; for (i = 0; i < ch; i++) { buf[dxn + i] += src_d[a+sx1+i] * alpha; } @@ -1773,6 +2449,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; } jsfeat.cache.put_buffer(sum_node); jsfeat.cache.put_buffer(buf_node); + jsfeat.cache.put_buffer(xofs_node); } var _convol_u8 = function(buf, src_d, dst_d, w, h, filter, kernel_size, half_kernel) { @@ -2644,15 +3321,16 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; jsfeat.cache.put_buffer(map_node); jsfeat.cache.put_buffer(stack_node); }, - + // transform is 3x3 matrix_t warp_perspective: function(src, dst, transform, fill_value) { if (typeof fill_value === "undefined") { fill_value = 0; } var src_width=src.cols, src_height=src.rows, dst_width=dst.cols, dst_height=dst.rows; var src_d=src.data, dst_d=dst.data; var x=0,y=0,off=0,ixs=0,iys=0,xs=0.0,ys=0.0,xs0=0.0,ys0=0.0,ws=0.0,sc=0.0,a=0.0,b=0.0,p0=0.0,p1=0.0; - var m00=transform[0],m01=transform[1],m02=transform[2], - m10=transform[3],m11=transform[4],m12=transform[5], - m20=transform[6],m21=transform[7],m22=transform[8]; + var td=transform.data; + var m00=td[0],m01=td[1],m02=td[2], + m10=td[3],m11=td[4],m12=td[5], + m20=td[6],m21=td[7],m22=td[8]; for(var dptr = 0; y < dst_height; ++y) { xs0 = m01 * y + m02, @@ -2677,14 +3355,15 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; } } }, - + // transform is 3x3 or 2x3 matrix_t only first 6 values referenced warp_affine: function(src, dst, transform, fill_value) { if (typeof fill_value === "undefined") { fill_value = 0; } var src_width=src.cols, src_height=src.rows, dst_width=dst.cols, dst_height=dst.rows; var src_d=src.data, dst_d=dst.data; var x=0,y=0,off=0,ixs=0,iys=0,xs=0.0,ys=0.0,a=0.0,b=0.0,p0=0.0,p1=0.0; - var m00=transform[0],m01=transform[1],m02=transform[2], - m10=transform[3],m11=transform[4],m12=transform[5]; + var td=transform.data; + var m00=td[0],m01=td[1],m02=td[2], + m10=td[3],m11=td[4],m12=td[5]; for(var dptr = 0; y < dst_height; ++y) { xs = m01 * y + m02; @@ -2712,7 +3391,6 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.imgproc = imgproc; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3052,7 +3730,6 @@ The references are: fast_corners.set_threshold(20); // set default })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3148,7 +3825,6 @@ The references are: global.yape06 = yape06; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3558,7 +4234,7 @@ The references are: global.yape = yape; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3803,7 +4479,6 @@ The references are: global.optical_flow_lk = optical_flow_lk; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -4094,7 +4769,6 @@ The references are: global.haar = haar; })(jsfeat); - /** * BBF: Brightness Binary Feature * @@ -4489,7 +5163,6 @@ The references are: global.bbf = bbf; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -4505,4 +5178,3 @@ The references are: module.exports = lib; } })(jsfeat); - diff --git a/compile/build.xml b/compile/build.xml index 83a1631..d14c688 100755 --- a/compile/build.xml +++ b/compile/build.xml @@ -8,7 +8,7 @@ - + diff --git a/src/jsfeat.js b/src/jsfeat.js index 9b4b5f2..86526d0 100755 --- a/src/jsfeat.js +++ b/src/jsfeat.js @@ -4,10 +4,3 @@ // namespace ? var jsfeat = jsfeat || { REVISION: 'ALPHA' }; - -// use typed arrays if possible -self.Int32Array = self.Int32Array || Array; -self.Uint32Array = self.Uint32Array || Array; -self.Uint8Array = self.Uint8Array || Array; -self.Float32Array = self.Float32Array || Array; -self.Float64Array = self.Float64Array || Array; diff --git a/src/jsfeat_export.js b/src/jsfeat_export.js old mode 100644 new mode 100755 diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index 0e27608..0110f74 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -9,7 +9,7 @@ var imgproc = (function() { var _resample_u8 = function(src, dst, nw, nh) { - var xofs = [],xofs_count=0; + var xofs_count=0; var ch=src.channel,w=src.cols,h=src.rows; var src_d=src.data,dst_d=dst.data; var scale_x = w / nw, scale_y = h / nh; @@ -19,9 +19,11 @@ var buf_node = jsfeat.cache.get_buffer((nw*ch)<<2); var sum_node = jsfeat.cache.get_buffer((nw*ch)<<2); + var xofs_node = jsfeat.cache.get_buffer((w*2*3)<<2); var buf = buf_node.i32; var sum = sum_node.i32; + var xofs = xofs_node.i32; for (; dx < nw; dx++) { fsx1 = dx * scale_x, fsx2 = fsx1 + scale_x; @@ -30,19 +32,22 @@ sx2 = Math.min(sx2, w - 1); if(sx1 > fsx1) { - xofs[xofs_count++] = {"si": ((sx1 - 1)*ch)|0, - "di": (dx * ch)|0, - "alpha": ((sx1 - fsx1) * 0x100)|0}; + xofs[k++] = (dx * ch)|0; + xofs[k++] = ((sx1 - 1)*ch)|0; + xofs[k++] = ((sx1 - fsx1) * 0x100)|0; + xofs_count++; } for(sx = sx1; sx < sx2; sx++){ - xofs[xofs_count++] = {"si": (sx * ch)|0, - "di": (dx * ch)|0, - "alpha": 256}; + xofs_count++; + xofs[k++] = (dx * ch)|0; + xofs[k++] = (sx * ch)|0; + xofs[k++] = 256; } if(fsx2 - sx2 > 1e-3) { - xofs[xofs_count++] = {"si": (sx2 * ch)|0, - "di": (dx * ch)|0, - "alpha": ((fsx2 - sx2) * 256)|0}; + xofs_count++; + xofs[k++] = (dx * ch)|0; + xofs[k++] = (sx2 * ch)|0; + xofs[k++] = ((fsx2 - sx2) * 256)|0; } } @@ -53,9 +58,9 @@ for (sy = 0; sy < h; sy++) { a = w * sy; for (k = 0; k < xofs_count; k++) { - dxn = xofs[k].di; - alpha = xofs[k].alpha; - sx1 = xofs[k].si; + dxn = xofs[k*3]; + sx1 = xofs[k*3+1]; + alpha = xofs[k*3+2]; for (i = 0; i < ch; i++) { buf[dxn + i] += src_d[a+sx1+i] * alpha; } @@ -87,10 +92,11 @@ jsfeat.cache.put_buffer(sum_node); jsfeat.cache.put_buffer(buf_node); + jsfeat.cache.put_buffer(xofs_node); } var _resample = function(src, dst, nw, nh) { - var xofs = [],xofs_count=0; + var xofs_count=0; var ch=src.channel,w=src.cols,h=src.rows; var src_d=src.data,dst_d=dst.data; var scale_x = w / nw, scale_y = h / nh; @@ -100,9 +106,11 @@ var buf_node = jsfeat.cache.get_buffer((nw*ch)<<2); var sum_node = jsfeat.cache.get_buffer((nw*ch)<<2); + var xofs_node = jsfeat.cache.get_buffer((w*2*3)<<2); var buf = buf_node.f32; var sum = sum_node.f32; + var xofs = xofs_node.f32; for (; dx < nw; dx++) { fsx1 = dx * scale_x, fsx2 = fsx1 + scale_x; @@ -111,19 +119,22 @@ sx2 = Math.min(sx2, w - 1); if(sx1 > fsx1) { - xofs[xofs_count++] = {"si": ((sx1 - 1)*ch)|0, - "di": (dx * ch)|0, - "alpha": (sx1 - fsx1) * scale}; + xofs_count++; + xofs[k++] = ((sx1 - 1)*ch)|0; + xofs[k++] = (dx * ch)|0; + xofs[k++] = (sx1 - fsx1) * scale; } for(sx = sx1; sx < sx2; sx++){ - xofs[xofs_count++] = {"si": (sx * ch)|0, - "di": (dx * ch)|0, - "alpha": scale}; + xofs_count++; + xofs[k++] = (sx * ch)|0; + xofs[k++] = (dx * ch)|0; + xofs[k++] = scale; } if(fsx2 - sx2 > 1e-3) { - xofs[xofs_count++] = {"si": (sx2 * ch)|0, - "di": (dx * ch)|0, - "alpha": (fsx2 - sx2) * scale}; + xofs_count++; + xofs[k++] = (sx2 * ch)|0; + xofs[k++] = (dx * ch)|0; + xofs[k++] = (fsx2 - sx2) * scale; } } @@ -134,9 +145,9 @@ for (sy = 0; sy < h; sy++) { a = w * sy; for (k = 0; k < xofs_count; k++) { - dxn = xofs[k].di; - alpha = xofs[k].alpha; - sx1 = xofs[k].si; + sx1 = xofs[k*3]|0; + dxn = xofs[k*3+1]|0; + alpha = xofs[k*3+2]; for (i = 0; i < ch; i++) { buf[dxn + i] += src_d[a+sx1+i] * alpha; } @@ -167,6 +178,7 @@ } jsfeat.cache.put_buffer(sum_node); jsfeat.cache.put_buffer(buf_node); + jsfeat.cache.put_buffer(xofs_node); } var _convol_u8 = function(buf, src_d, dst_d, w, h, filter, kernel_size, half_kernel) { @@ -1038,15 +1050,16 @@ jsfeat.cache.put_buffer(map_node); jsfeat.cache.put_buffer(stack_node); }, - + // transform is 3x3 matrix_t warp_perspective: function(src, dst, transform, fill_value) { if (typeof fill_value === "undefined") { fill_value = 0; } var src_width=src.cols, src_height=src.rows, dst_width=dst.cols, dst_height=dst.rows; var src_d=src.data, dst_d=dst.data; var x=0,y=0,off=0,ixs=0,iys=0,xs=0.0,ys=0.0,xs0=0.0,ys0=0.0,ws=0.0,sc=0.0,a=0.0,b=0.0,p0=0.0,p1=0.0; - var m00=transform[0],m01=transform[1],m02=transform[2], - m10=transform[3],m11=transform[4],m12=transform[5], - m20=transform[6],m21=transform[7],m22=transform[8]; + var td=transform.data; + var m00=td[0],m01=td[1],m02=td[2], + m10=td[3],m11=td[4],m12=td[5], + m20=td[6],m21=td[7],m22=td[8]; for(var dptr = 0; y < dst_height; ++y) { xs0 = m01 * y + m02, @@ -1071,14 +1084,15 @@ } } }, - + // transform is 3x3 or 2x3 matrix_t only first 6 values referenced warp_affine: function(src, dst, transform, fill_value) { if (typeof fill_value === "undefined") { fill_value = 0; } var src_width=src.cols, src_height=src.rows, dst_width=dst.cols, dst_height=dst.rows; var src_d=src.data, dst_d=dst.data; var x=0,y=0,off=0,ixs=0,iys=0,xs=0.0,ys=0.0,a=0.0,b=0.0,p0=0.0,p1=0.0; - var m00=transform[0],m01=transform[1],m02=transform[2], - m10=transform[3],m11=transform[4],m12=transform[5]; + var td=transform.data; + var m00=td[0],m01=td[1],m02=td[2], + m10=td[3],m11=td[4],m12=td[5]; for(var dptr = 0; y < dst_height; ++y) { xs = m01 * y + m02; diff --git a/src/jsfeat_linalg.js b/src/jsfeat_linalg.js old mode 100644 new mode 100755 index bf1666d..1fb6f50 --- a/src/jsfeat_linalg.js +++ b/src/jsfeat_linalg.js @@ -183,7 +183,7 @@ } var JacobiSVDImpl = function(At, astep, _W, Vt, vstep, m, n, n1) { - var eps = jsfeat.EPSILON * 10.0; + var eps = jsfeat.EPSILON * 2.0; var minval = jsfeat.FLT_MIN; var i=0,j=0,k=0,iter=0,max_iter=Math.max(m, 30); var Ai=0,Aj=0,Vi=0,Vj=0,changed=0; @@ -218,10 +218,9 @@ Ai = (i*astep)|0, Aj = (j*astep)|0; a = W[i], p = 0, b = W[j]; - k = 3; + k = 2; p += At[Ai]*At[Aj]; p += At[Ai+1]*At[Aj+1]; - p += At[Ai+2]*At[Aj+2]; for(; k < m; k++) p += At[Ai+k]*At[Aj+k]; @@ -244,7 +243,7 @@ W[j] -= delta; if( (iter & 1) && W[i] > 0 && W[j] > 0 ) { - k = 3;//unroll 3x3 + k = 2;//unroll 2x2 t0 = c*At[Ai] + s*At[Aj]; t1 = -s*At[Ai] + c*At[Aj]; At[Ai] = t0; At[Aj] = t1; @@ -253,10 +252,6 @@ t1 = -s*At[Ai+1] + c*At[Aj+1]; At[Ai+1] = t0; At[Aj+1] = t1; - t0 = c*At[Ai+2] + s*At[Aj+2]; - t1 = -s*At[Ai+2] + c*At[Aj+2]; - At[Ai+2] = t0; At[Aj+2] = t1; - for(; k < m; k++) { t0 = c*At[Ai+k] + s*At[Aj+k]; t1 = -s*At[Ai+k] + c*At[Aj+k]; @@ -264,7 +259,7 @@ } } else { a = b = 0; - k = 3; // unroll + k = 2; // unroll t0 = c*At[Ai] + s*At[Aj]; t1 = -s*At[Ai] + c*At[Aj]; At[Ai] = t0; At[Aj] = t1; @@ -275,11 +270,6 @@ At[Ai+1] = t0; At[Aj+1] = t1; a += t0*t0; b += t1*t1; - t0 = c*At[Ai+2] + s*At[Aj+2]; - t1 = -s*At[Ai+2] + c*At[Aj+2]; - At[Ai+2] = t0; At[Aj+2] = t1; - a += t0*t0; b += t1*t1; - for( ; k < m; k++ ) { t0 = c*At[Ai+k] + s*At[Aj+k]; @@ -296,7 +286,7 @@ if(Vt) { Vi = (i*vstep)|0, Vj = (j*vstep)|0; - k = 3; + k = 2; t0 = c*Vt[Vi] + s*Vt[Vj]; t1 = -s*Vt[Vi] + c*Vt[Vj]; Vt[Vi] = t0; Vt[Vj] = t1; @@ -305,10 +295,6 @@ t1 = -s*Vt[Vi+1] + c*Vt[Vj+1]; Vt[Vi+1] = t0; Vt[Vj+1] = t1; - t0 = c*Vt[Vi+2] + s*Vt[Vj+2]; - t1 = -s*Vt[Vi+2] + c*Vt[Vj+2]; - Vt[Vi+2] = t0; Vt[Vj+2] = t1; - for(; k < n; k++) { t0 = c*Vt[Vi+k] + s*Vt[Vj+k]; t1 = -s*Vt[Vi+k] + c*Vt[Vj+k]; diff --git a/src/jsfeat_mat_math.js b/src/jsfeat_mat_math.js old mode 100644 new mode 100755 index 6516785..64e6c73 --- a/src/jsfeat_mat_math.js +++ b/src/jsfeat_mat_math.js @@ -130,6 +130,76 @@ cd[p_CC] = sum; } } + }, + + // various small matrix operations + invert_3x3: function(from, to) { + var A = from.data, invA = to.data; + var t1 = A[4]; + var t2 = A[8]; + var t4 = A[5]; + var t5 = A[7]; + var t8 = A[0]; + + var t9 = t8*t1; + var t11 = t8*t4; + var t13 = A[3]; + var t14 = A[1]; + var t15 = t13*t14; + var t17 = A[2]; + var t18 = t13*t17; + var t20 = A[6]; + var t21 = t20*t14; + var t23 = t20*t17; + var t26 = 1.0/(t9*t2-t11*t5-t15*t2+t18*t5+t21*t4-t23*t1); + invA[0] = (t1*t2-t4*t5)*t26; + invA[1] = -(t14*t2-t17*t5)*t26; + invA[2] = -(-t14*t4+t17*t1)*t26; + invA[3] = -(t13*t2-t4*t20)*t26; + invA[4] = (t8*t2-t23)*t26; + invA[5] = -(t11-t18)*t26; + invA[6] = -(-t13*t5+t1*t20)*t26; + invA[7] = -(t8*t5-t21)*t26; + invA[8] = (t9-t15)*t26; + }, + // C = A * B + multiply_3x3: function(C, A, B) { + var Cd=C.data, Ad=A.data, Bd=B.data; + var m1_0 = Ad[0], m1_1 = Ad[1], m1_2 = Ad[2]; + var m1_3 = Ad[3], m1_4 = Ad[4], m1_5 = Ad[5]; + var m1_6 = Ad[6], m1_7 = Ad[7], m1_8 = Ad[8]; + + var m2_0 = Bd[0], m2_1 = Bd[1], m2_2 = Bd[2]; + var m2_3 = Bd[3], m2_4 = Bd[4], m2_5 = Bd[5]; + var m2_6 = Bd[6], m2_7 = Bd[7], m2_8 = Bd[8]; + + Cd[0] = m1_0 * m2_0 + m1_1 * m2_3 + m1_2 * m2_6; + Cd[1] = m1_0 * m2_1 + m1_1 * m2_4 + m1_2 * m2_7; + Cd[2] = m1_0 * m2_2 + m1_1 * m2_5 + m1_2 * m2_8; + Cd[3] = m1_3 * m2_0 + m1_4 * m2_3 + m1_5 * m2_6; + Cd[4] = m1_3 * m2_1 + m1_4 * m2_4 + m1_5 * m2_7; + Cd[5] = m1_3 * m2_2 + m1_4 * m2_5 + m1_5 * m2_8; + Cd[6] = m1_6 * m2_0 + m1_7 * m2_3 + m1_8 * m2_6; + Cd[7] = m1_6 * m2_1 + m1_7 * m2_4 + m1_8 * m2_7; + Cd[8] = m1_6 * m2_2 + m1_7 * m2_5 + m1_8 * m2_8; + }, + + mat3x3_determinant: function(M) { + var md=M.data; + return md[0] * md[4] * md[8] - + md[0] * md[5] * md[7] - + md[3] * md[1] * md[8] + + md[3] * md[2] * md[7] + + md[6] * md[1] * md[5] - + md[6] * md[2] * md[4]; + }, + + determinant_3x3: function(M11, M12, M13, + M21, M22, M23, + M31, M32, M33) { + return M11 * M22 * M33 - M11 * M23 * M32 - + M21 * M12 * M33 + M21 * M13 * M32 + + M31 * M12 * M23 - M31 * M13 * M22; } }; diff --git a/src/jsfeat_math.js b/src/jsfeat_math.js index aad272a..f5ce94b 100755 --- a/src/jsfeat_math.js +++ b/src/jsfeat_math.js @@ -69,6 +69,123 @@ jsfeat.cache.put_buffer(kern_node); }, + // model is 3x3 matrix_t + perspective_4point_transform: function(model, src_x0, src_y0, dst_x0, dst_y0, + src_x1, src_y1, dst_x1, dst_y1, + src_x2, src_y2, dst_x2, dst_y2, + src_x3, src_y3, dst_x3, dst_y3) { + var t1 = src_x0; + var t2 = src_x2; + var t4 = src_y1; + var t5 = t1 * t2 * t4; + var t6 = src_y3; + var t7 = t1 * t6; + var t8 = t2 * t7; + var t9 = src_y2; + var t10 = t1 * t9; + var t11 = src_x1; + var t14 = src_y0; + var t15 = src_x3; + var t16 = t14 * t15; + var t18 = t16 * t11; + var t20 = t15 * t11 * t9; + var t21 = t15 * t4; + var t24 = t15 * t9; + var t25 = t2 * t4; + var t26 = t6 * t2; + var t27 = t6 * t11; + var t28 = t9 * t11; + var t30 = 1.0 / (t21-t24 - t25 + t26 - t27 + t28); + var t32 = t1 * t15; + var t35 = t14 * t11; + var t41 = t4 * t1; + var t42 = t6 * t41; + var t43 = t14 * t2; + var t46 = t16 * t9; + var t48 = t14 * t9 * t11; + var t51 = t4 * t6 * t2; + var t55 = t6 * t14; + var Hr0 = -(t8-t5 + t10 * t11 - t11 * t7 - t16 * t2 + t18 - t20 + t21 * t2) * t30; + var Hr1 = (t5 - t8 - t32 * t4 + t32 * t9 + t18 - t2 * t35 + t27 * t2 - t20) * t30; + var Hr2 = t1; + var Hr3 = (-t9 * t7 + t42 + t43 * t4 - t16 * t4 + t46 - t48 + t27 * t9 - t51) * t30; + var Hr4 = (-t42 + t41 * t9 - t55 * t2 + t46 - t48 + t55 * t11 + t51 - t21 * t9) * t30; + var Hr5 = t14; + var Hr6 = (-t10 + t41 + t43 - t35 + t24 - t21 - t26 + t27) * t30; + var Hr7 = (-t7 + t10 + t16 - t43 + t27 - t28 - t21 + t25) * t30; + + t1 = dst_x0; + t2 = dst_x2; + t4 = dst_y1; + t5 = t1 * t2 * t4; + t6 = dst_y3; + t7 = t1 * t6; + t8 = t2 * t7; + t9 = dst_y2; + t10 = t1 * t9; + t11 = dst_x1; + t14 = dst_y0; + t15 = dst_x3; + t16 = t14 * t15; + t18 = t16 * t11; + t20 = t15 * t11 * t9; + t21 = t15 * t4; + t24 = t15 * t9; + t25 = t2 * t4; + t26 = t6 * t2; + t27 = t6 * t11; + t28 = t9 * t11; + t30 = 1.0 / (t21-t24 - t25 + t26 - t27 + t28); + t32 = t1 * t15; + t35 = t14 * t11; + t41 = t4 * t1; + t42 = t6 * t41; + t43 = t14 * t2; + t46 = t16 * t9; + t48 = t14 * t9 * t11; + t51 = t4 * t6 * t2; + t55 = t6 * t14; + var Hl0 = -(t8-t5 + t10 * t11 - t11 * t7 - t16 * t2 + t18 - t20 + t21 * t2) * t30; + var Hl1 = (t5 - t8 - t32 * t4 + t32 * t9 + t18 - t2 * t35 + t27 * t2 - t20) * t30; + var Hl2 = t1; + var Hl3 = (-t9 * t7 + t42 + t43 * t4 - t16 * t4 + t46 - t48 + t27 * t9 - t51) * t30; + var Hl4 = (-t42 + t41 * t9 - t55 * t2 + t46 - t48 + t55 * t11 + t51 - t21 * t9) * t30; + var Hl5 = t14; + var Hl6 = (-t10 + t41 + t43 - t35 + t24 - t21 - t26 + t27) * t30; + var Hl7 = (-t7 + t10 + t16 - t43 + t27 - t28 - t21 + t25) * t30; + + // the following code computes R = Hl * inverse Hr + t2 = Hr4-Hr7*Hr5; + t4 = Hr0*Hr4; + t5 = Hr0*Hr5; + t7 = Hr3*Hr1; + t8 = Hr2*Hr3; + t10 = Hr1*Hr6; + var t12 = Hr2*Hr6; + t15 = 1.0 / (t4-t5*Hr7-t7+t8*Hr7+t10*Hr5-t12*Hr4); + t18 = -Hr3+Hr5*Hr6; + var t23 = -Hr3*Hr7+Hr4*Hr6; + t28 = -Hr1+Hr2*Hr7; + var t31 = Hr0-t12; + t35 = Hr0*Hr7-t10; + t41 = -Hr1*Hr5+Hr2*Hr4; + var t44 = t5-t8; + var t47 = t4-t7; + t48 = t2*t15; + var t49 = t28*t15; + var t50 = t41*t15; + var mat = model.data; + mat[0] = Hl0*t48+Hl1*(t18*t15)-Hl2*(t23*t15); + mat[1] = Hl0*t49+Hl1*(t31*t15)-Hl2*(t35*t15); + mat[2] = -Hl0*t50-Hl1*(t44*t15)+Hl2*(t47*t15); + mat[3] = Hl3*t48+Hl4*(t18*t15)-Hl5*(t23*t15); + mat[4] = Hl3*t49+Hl4*(t31*t15)-Hl5*(t35*t15); + mat[5] = -Hl3*t50-Hl4*(t44*t15)+Hl5*(t47*t15); + mat[6] = Hl6*t48+Hl7*(t18*t15)-t23*t15; + mat[7] = Hl6*t49+Hl7*(t31*t15)-t35*t15; + mat[8] = -Hl6*t50-Hl7*(t44*t15)+t47*t15; + }, + // The current implementation was derived from *BSD system qsort(): // Copyright (c) 1992, 1993 // The Regents of the University of California. All rights reserved. diff --git a/src/jsfeat_motion_estimator.js b/src/jsfeat_motion_estimator.js new file mode 100644 index 0000000..a1de55e --- /dev/null +++ b/src/jsfeat_motion_estimator.js @@ -0,0 +1,653 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + */ + +(function(global) { + "use strict"; + // + + var motion_model = (function() { + + var sqr = function(x) { + return x*x; + } + + // does isotropic normalization + var iso_normalize_points = function(from, to, T0, T1, count) { + var i=0; + var cx0=0.0, cy0=0.0, d0=0.0, s0=0.0; + var cx1=0.0, cy1=0.0, d1=0.0, s1=0.0; + var dx=0.0,dy=0.0; + + for (; i < count; ++i) { + cx0 += from[i].x; + cy0 += from[i].y; + cx1 += to[i].x; + cy1 += to[i].y; + } + + cx0 /= count; cy0 /= count; + cx1 /= count; cy1 /= count; + + for (i = 0; i < count; ++i) { + dx = from[i].x - cx0; + dy = from[i].y - cy0; + d0 += Math.sqrt(dx*dx + dy*dy); + dx = to[i].x - cx1; + dy = to[i].y - cy1; + d1 += Math.sqrt(dx*dx + dy*dy); + } + + d0 /= count; d1 /= count; + + s0 = Math.SQRT2 / d0; s1 = Math.SQRT2 / d1; + + T0[0] = T0[4] = s0; + T0[2] = -cx0*s0; + T0[5] = -cy0*s0; + T0[1] = T0[3] = T0[6] = T0[7] = 0.0; + T0[8] = 1.0; + + T1[0] = T1[4] = s1; + T1[2] = -cx1*s1; + T1[5] = -cy1*s1; + T1[1] = T1[3] = T1[6] = T1[7] = 0.0; + T1[8] = 1.0; + } + + var have_collinear_points = function(points, count) { + var j=0,k=0,i=(count-1)|0; + var dx1=0.0,dy1=0.0,dx2=0.0,dy2=0.0; + + // check that the i-th selected point does not belong + // to a line connecting some previously selected points + for(; j < i; ++j) { + dx1 = points[j].x - points[i].x; + dy1 = points[j].y - points[i].y; + for(k = 0; k < j; ++k) { + dx2 = points[k].x - points[i].x; + dy2 = points[k].y - points[i].y; + if( Math.abs(dx2*dy1 - dy2*dx1) <= jsfeat.EPSILON*(Math.abs(dx1) + Math.abs(dy1) + Math.abs(dx2) + Math.abs(dy2))) + return true; + } + } + return false; + } + + var affine2d = (function () { + + function affine2d() { + this.T0 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + this.T1 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + this.AtA = new jsfeat.matrix_t(6, 6, jsfeat.F32_t|jsfeat.C1_t); + this.AtB = new jsfeat.matrix_t(6, 1, jsfeat.F32_t|jsfeat.C1_t); + } + + affine2d.prototype.run = function(from, to, model, count) { + var i=0,j=0; + var dt=model.type|jsfeat.C1_t; + var md=model.data, t0d=this.T0.data, t1d=this.T1.data; + var pt0,pt1,px=0.0,py=0.0; + + iso_normalize_points(from, to, t0d, t1d, count); + + var a_buff = jsfeat.cache.get_buffer((2*count*6)<<3); + var b_buff = jsfeat.cache.get_buffer((2*count)<<3); + + var a_mt = new jsfeat.matrix_t(6, 2*count, dt, a_buff.data); + var b_mt = new jsfeat.matrix_t(1, 2*count, dt, b_buff.data); + var ad=a_mt.data, bd=b_mt.data; + + for (; i < count; ++i) { + pt0 = from[i]; + pt1 = to[i]; + + px = t0d[0]*pt0.x + t0d[1]*pt0.y + t0d[2]; + py = t0d[3]*pt0.x + t0d[4]*pt0.y + t0d[5]; + + j = i*2*6; + ad[j]=px, ad[j+1]=py, ad[j+2]=1.0, ad[j+3]=0.0, ad[j+4]=0.0, ad[j+5]=0.0; + + j += 6; + ad[j]=0.0, ad[j+1]=0.0, ad[j+2]=0.0, ad[j+3]=px, ad[j+4]=py, ad[j+5]=1.0; + + bd[i<<1] = t1d[0]*pt1.x + t1d[1]*pt1.y + t1d[2]; + bd[(i<<1)+1] = t1d[3]*pt1.x + t1d[4]*pt1.y + t1d[5]; + } + + jsfeat.matmath.multiply_AtA(this.AtA, a_mt); + jsfeat.matmath.multiply_AtB(this.AtB, a_mt, b_mt); + + jsfeat.linalg.lu_solve(this.AtA, this.AtB); + + md[0] = this.AtB.data[0], md[1]=this.AtB.data[1], md[2]=this.AtB.data[2]; + md[3] = this.AtB.data[3], md[4]=this.AtB.data[4], md[5]=this.AtB.data[5]; + md[6] = 0.0, md[7] = 0.0, md[8] = 1.0; // fill last row + + // denormalize + jsfeat.matmath.invert_3x3(this.T1, this.T1); + jsfeat.matmath.multiply_3x3(model, this.T1, model); + jsfeat.matmath.multiply_3x3(model, model, this.T0); + + // free buffer + jsfeat.cache.put_buffer(a_buff); + jsfeat.cache.put_buffer(b_buff); + + return 1; + } + + affine2d.prototype.error = function(from, to, model, err, count) { + var i=0; + var pt0,pt1; + var m=model.data; + + for (; i < count; ++i) { + pt0 = from[i]; + pt1 = to[i]; + + err[i] = sqr(pt1.x - m[0]*pt0.x - m[1]*pt0.y - m[2]) + + sqr(pt1.y - m[3]*pt0.x - m[4]*pt0.y - m[5]); + } + } + + affine2d.prototype.check_subset = function(from, to, count) { + return true; // all good + } + + return affine2d; + })(); + + var homography2d = (function () { + + function homography2d() { + this.T0 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + this.T1 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + this.mLtL = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); + this.Evec = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); + } + + homography2d.prototype.run = function(from, to, model, count) { + var i=0,j=0; + var md=model.data, t0d=this.T0.data, t1d=this.T1.data; + var LtL=this.mLtL.data, evd=this.Evec.data; + var x=0.0,y=0.0,X=0.0,Y=0.0; + + // norm + var smx=0.0, smy=0.0, cmx=0.0, cmy=0.0, sMx=0.0, sMy=0.0, cMx=0.0, cMy=0.0; + + for(; i < count; ++i) { + cmx += to[i].x; + cmy += to[i].y; + cMx += from[i].x; + cMy += from[i].y; + } + + cmx /= count; cmy /= count; + cMx /= count; cMy /= count; + + for(i = 0; i < count; ++i) + { + smx += Math.abs(to[i].x - cmx); + smy += Math.abs(to[i].y - cmy); + sMx += Math.abs(from[i].x - cMx); + sMy += Math.abs(from[i].y - cMy); + } + + if( Math.abs(smx) < jsfeat.EPSILON + || Math.abs(smy) < jsfeat.EPSILON + || Math.abs(sMx) < jsfeat.EPSILON + || Math.abs(sMy) < jsfeat.EPSILON ) return 0; + + smx = count/smx; smy = count/smy; + sMx = count/sMx; sMy = count/sMy; + + t0d[0] = sMx; t0d[1] = 0; t0d[2] = -cMx*sMx; + t0d[3] = 0; t0d[4] = sMy; t0d[5] = -cMy*sMy; + t0d[6] = 0; t0d[7] = 0; t0d[8] = 1; + + t1d[0] = 1.0/smx; t1d[1] = 0; t1d[2] = cmx; + t1d[3] = 0; t1d[4] = 1.0/smy; t1d[5] = cmy; + t1d[6] = 0; t1d[7] = 0; t1d[8] = 1; + // + + // construct system + i = 81; + while(--i >= 0) { + LtL[i] = 0.0; + } + for(i = 0; i < count; ++i) { + x = (to[i].x - cmx) * smx; + y = (to[i].y - cmy) * smy; + X = (from[i].x - cMx) * sMx; + Y = (from[i].y - cMy) * sMy; + + LtL[0] += X*X; + LtL[1] += X*Y; + LtL[2] += X; + + LtL[6] += X*-x*X; + LtL[7] += X*-x*Y; + LtL[8] += X*-x; + LtL[10] += Y*Y; + LtL[11] += Y; + + LtL[15] += Y*-x*X; + LtL[16] += Y*-x*Y; + LtL[17] += Y*-x; + LtL[20] += 1.0; + + LtL[24] += -x*X; + LtL[25] += -x*Y; + LtL[26] += -x; + LtL[30] += X*X; + LtL[31] += X*Y; + LtL[32] += X; + LtL[33] += X*-y*X; + LtL[34] += X*-y*Y; + LtL[35] += X*-y; + LtL[40] += Y*Y; + LtL[41] += Y; + LtL[42] += Y*-y*X; + LtL[43] += Y*-y*Y; + LtL[44] += Y*-y; + LtL[50] += 1.0; + LtL[51] += -y*X; + LtL[52] += -y*Y; + LtL[53] += -y; + LtL[60] += -x*X*-x*X + -y*X*-y*X; + LtL[61] += -x*X*-x*Y + -y*X*-y*Y; + LtL[62] += -x*X*-x + -y*X*-y; + LtL[70] += -x*Y*-x*Y + -y*Y*-y*Y; + LtL[71] += -x*Y*-x + -y*Y*-y; + LtL[80] += -x*-x + -y*-y; + } + // + + // symmetry + for(i = 0; i < 9; ++i) { + for(j = 0; j < i; ++j) + LtL[i*9+j] = LtL[j*9+i]; + } + + jsfeat.linalg.eigenVV(this.mLtL, this.Evec); + + md[0]=evd[72], md[1]=evd[73], md[2]=evd[74]; + md[3]=evd[75], md[4]=evd[76], md[5]=evd[77]; + md[6]=evd[78], md[7]=evd[79], md[8]=evd[80]; + + // denormalize + jsfeat.matmath.multiply_3x3(model, this.T1, model); + jsfeat.matmath.multiply_3x3(model, model, this.T0); + + // set bottom right to 1.0 + x = 1.0/md[8]; + md[0] *= x; md[1] *= x; md[2] *= x; + md[3] *= x; md[4] *= x; md[5] *= x; + md[6] *= x; md[7] *= x; md[8] = 1.0; + + return 1; + } + + homography2d.prototype.error = function(from, to, model, err, count) { + var i=0; + var pt0,pt1,ww=0.0,dx=0.0,dy=0.0; + var m=model.data; + + for (; i < count; ++i) { + pt0 = from[i]; + pt1 = to[i]; + + ww = 1.0/(m[6]*pt0.x + m[7]*pt0.y + 1.0); + dx = (m[0]*pt0.x + m[1]*pt0.y + m[2])*ww - pt1.x; + dy = (m[3]*pt0.x + m[4]*pt0.y + m[5])*ww - pt1.y; + err[i] = (dx*dx + dy*dy); + } + } + + homography2d.prototype.check_subset = function(from, to, count) { + if( have_collinear_points(from, count) || have_collinear_points(to, count) ) { + return false; + } + if( count == 4 ) { + var negative = 0; + + var fp0=from[0],fp1=from[1],fp2=from[2],fp3=from[3]; + var tp0=to[0],tp1=to[1],tp2=to[2],tp3=to[3]; + + // set1 + var A11=fp0.x, A12=fp0.y, A13=1.0; + var A21=fp1.x, A22=fp1.y, A23=1.0; + var A31=fp2.x, A32=fp2.y, A33=1.0; + + var B11=tp0.x, B12=tp0.y, B13=1.0; + var B21=tp1.x, B22=tp1.y, B23=1.0; + var B31=tp2.x, B32=tp2.y, B33=1.0; + + var detA = jsfeat.matmath.determinant_3x3(A11,A12,A13, A21,A22,A23, A31,A32,A33); + var detB = jsfeat.matmath.determinant_3x3(B11,B12,B13, B21,B22,B23, B31,B32,B33); + + if(detA*detB < 0) negative++; + + // set2 + A11=fp1.x, A12=fp1.y; + A21=fp2.x, A22=fp2.y; + A31=fp3.x, A32=fp3.y; + + B11=tp1.x, B12=tp1.y; + B21=tp2.x, B22=tp2.y; + B31=tp3.x, B32=tp3.y; + + detA = jsfeat.matmath.determinant_3x3(A11,A12,A13, A21,A22,A23, A31,A32,A33); + detB = jsfeat.matmath.determinant_3x3(B11,B12,B13, B21,B22,B23, B31,B32,B33); + + if(detA*detB < 0) negative++; + + // set3 + A11=fp0.x, A12=fp0.y; + A21=fp2.x, A22=fp2.y; + A31=fp3.x, A32=fp3.y; + + B11=tp0.x, B12=tp0.y; + B21=tp2.x, B22=tp2.y; + B31=tp3.x, B32=tp3.y; + + detA = jsfeat.matmath.determinant_3x3(A11,A12,A13, A21,A22,A23, A31,A32,A33); + detB = jsfeat.matmath.determinant_3x3(B11,B12,B13, B21,B22,B23, B31,B32,B33); + + if(detA*detB < 0) negative++; + + // set4 + A11=fp0.x, A12=fp0.y; + A21=fp1.x, A22=fp1.y; + A31=fp3.x, A32=fp3.y; + + B11=tp0.x, B12=tp0.y; + B21=tp1.x, B22=tp1.y; + B31=tp3.x, B32=tp3.y; + + detA = jsfeat.matmath.determinant_3x3(A11,A12,A13, A21,A22,A23, A31,A32,A33); + detB = jsfeat.matmath.determinant_3x3(B11,B12,B13, B21,B22,B23, B31,B32,B33); + + if(detA*detB < 0) negative++; + + if(negative != 0 && negative != 4) { + return false; + } + } + return true; // all good + } + + return homography2d; + })(); + + return { + + affine2d:affine2d, + homography2d:homography2d + + }; + + })(); + + var ransac_params_t = (function () { + function ransac_params_t(size, thresh, eps, prob) { + if (typeof size === "undefined") { size=0; } + if (typeof thresh === "undefined") { thresh=0.5; } + if (typeof eps === "undefined") { eps=0.5; } + if (typeof prob === "undefined") { prob=0.99; } + + this.size = size; + this.thresh = thresh; + this.eps = eps; + this.prob = prob; + }; + ransac_params_t.prototype.update_iters = function(_eps, max_iters) { + var num = Math.log(1 - this.prob); + var denom = Math.log(1 - Math.pow(1 - _eps, this.size)); + return (denom >= 0 || -num >= max_iters*(-denom) ? max_iters : Math.round(num/denom))|0; + }; + return ransac_params_t; + })(); + + var motion_estimator = (function() { + + var get_subset = function(kernel, from, to, need_cnt, max_cnt, from_sub, to_sub) { + var max_try = 1000; + var indices = []; + var i=0, j=0, ssiter=0, idx_i=0, ok=false; + for(; ssiter < max_try; ++ssiter) { + i = 0; + for (; i < need_cnt && ssiter < max_try;) { + ok = false; + idx_i = 0; + while (!ok) { + ok = true; + idx_i = indices[i] = Math.floor(Math.random() * max_cnt)|0; + for (j = 0; j < i; ++j) { + if (idx_i == indices[j]) + { ok = false; break; } + } + } + from_sub[i] = from[idx_i]; + to_sub[i] = to[idx_i]; + if( !kernel.check_subset( from_sub, to_sub, i+1 ) ) { + ssiter++; + continue; + } + ++i; + } + break; + } + + return (i == need_cnt && ssiter < max_try); + } + + var find_inliers = function(kernel, model, from, to, count, thresh, err, mask) { + var numinliers = 0, i=0, f=0; + var t = thresh*thresh; + + kernel.error(from, to, model, err, count); + + for(; i < count; ++i) { + f = err[i] <= t; + mask[i] = f|0; + numinliers += f; + } + return numinliers; + } + + return { + + ransac: function(params, kernel, from, to, count, model, mask, max_iters) { + if (typeof max_iters === "undefined") { max_iters=1000; } + + if(count < params.size) return false; + + var model_points = params.size; + var niters = max_iters, iter=0; + var result = false; + + var subset0 = []; + var subset1 = []; + var found = false; + + var mc=model.cols,mr=model.rows; + var dt = model.type | jsfeat.C1_t; + + var m_buff = jsfeat.cache.get_buffer((mc*mr)<<3); + var ms_buff = jsfeat.cache.get_buffer(count); + var err_buff = jsfeat.cache.get_buffer(count<<2); + var M = new jsfeat.matrix_t(mc, mr, dt, m_buff.data); + var curr_mask = new jsfeat.matrix_t(count, 1, jsfeat.U8_t|jsfeat.C1_t, ms_buff.data); + + var inliers_max = -1, numinliers=0; + var nmodels = 0; + + var err = err_buff.f32; + + // special case + if(count == model_points) { + if(kernel.run(from, to, M, count) <= 0) { + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + return false; + } + + M.copy_to(model); + if(mask) { + while(--count >= 0) { + mask.data[count] = 1; + } + } + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + return true; + } + + for (; iter < niters; ++iter) { + // generate subset + found = get_subset(kernel, from, to, model_points, count, subset0, subset1); + if(!found) { + if(iter == 0) { + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + return false; + } + break; + } + + nmodels = kernel.run( subset0, subset1, M, model_points ); + if(nmodels <= 0) + continue; + + // TODO handle multimodel output + + numinliers = find_inliers(kernel, M, from, to, count, params.thresh, err, curr_mask.data); + + if( numinliers > Math.max(inliers_max, model_points-1) ) { + M.copy_to(model); + inliers_max = numinliers; + if(mask) curr_mask.copy_to(mask); + niters = params.update_iters((count - numinliers)/count, niters); + result = true; + } + } + + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + + return result; + }, + + lmeds: function(params, kernel, from, to, count, model, mask, max_iters) { + if (typeof max_iters === "undefined") { max_iters=1000; } + + if(count < params.size) return false; + + var model_points = params.size; + var niters = max_iters, iter=0; + var result = false; + + var subset0 = []; + var subset1 = []; + var found = false; + + var mc=model.cols,mr=model.rows; + var dt = model.type | jsfeat.C1_t; + + var m_buff = jsfeat.cache.get_buffer((mc*mr)<<3); + var ms_buff = jsfeat.cache.get_buffer(count); + var err_buff = jsfeat.cache.get_buffer(count<<2); + var M = new jsfeat.matrix_t(mc, mr, dt, m_buff.data); + var curr_mask = new jsfeat.matrix_t(count, 1, jsfeat.U8_t|jsfeat.C1_t, ms_buff.data); + + var numinliers=0; + var nmodels = 0; + + var err = err_buff.f32; + var min_median = 1000000000.0, sigma=0.0, median=0.0; + + params.eps = 0.45; + niters = params.update_iters(params.eps, niters); + + // special case + if(count == model_points) { + if(kernel.run(from, to, M, count) <= 0) { + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + return false; + } + + M.copy_to(model); + if(mask) { + while(--count >= 0) { + mask.data[count] = 1; + } + } + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + return true; + } + + for (; iter < niters; ++iter) { + // generate subset + found = get_subset(kernel, from, to, model_points, count, subset0, subset1); + if(!found) { + if(iter == 0) { + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + return false; + } + break; + } + + nmodels = kernel.run( subset0, subset1, M, model_points ); + if(nmodels <= 0) + continue; + + // TODO handle multimodel output + + kernel.error(from, to, M, err, count); + median = jsfeat.math.median(err, 0, count-1); + + if(median < min_median) { + min_median = median; + M.copy_to(model); + result = true; + } + } + + if(result) { + sigma = 2.5*1.4826*(1 + 5.0/(count - model_points))*Math.sqrt(minMedian); + sigma = Math.max(sigma, 0.001); + + numinliers = find_inliers(kernel, model, from, to, count, sigma, err, curr_mask.data); + if(mask) curr_mask.copy_to(mask); + + result = numinliers >= model_points; + } + + jsfeat.cache.put_buffer(m_buff); + jsfeat.cache.put_buffer(ms_buff); + jsfeat.cache.put_buffer(err_buff); + + return result; + } + + }; + + })(); + + global.ransac_params_t = ransac_params_t; + global.motion_model = motion_model; + global.motion_estimator = motion_estimator; + +})(jsfeat); diff --git a/src/jsfeat_struct.js b/src/jsfeat_struct.js index 3943f59..74c9a2b 100755 --- a/src/jsfeat_struct.js +++ b/src/jsfeat_struct.js @@ -75,29 +75,44 @@ this.cols = c|0; this.rows = r|0; if (typeof data_buffer === "undefined") { - this.buffer = new data_t((c * get_data_type_size(data_type) * get_channel(data_type)) * r); + this.allocate(); } else { this.buffer = data_buffer; + // data user asked for + this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : (this.type&F32_t ? this.buffer.f32 : this.buffer.f64)); } - // data user asked for - this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : (this.type&F32_t ? this.buffer.f32 : this.buffer.f64)); } - matrix_t.prototype.set_data_type = function(data_type) { - this.type = get_data_type(data_type)|0; - this.channel = get_channel(data_type)|0; + matrix_t.prototype.allocate = function() { // clear references delete this.data; delete this.buffer; // - this.buffer = new data_t((this.cols * get_data_type_size(data_type) * get_channel(data_type)) * this.rows); + this.buffer = new data_t((this.cols * get_data_type_size(this.type) * this.channel) * this.rows); this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : (this.type&F32_t ? this.buffer.f32 : this.buffer.f64)); } - matrix_t.prototype.set_data = function(array) { - var i = array.length; + matrix_t.prototype.copy_to = function(other) { + var od = other.data; + var i = this.cols*this.rows*this.channel; while(--i >= 0) { - this.data[i] = array[i]; + od[i] = this.data[i]; } } + matrix_t.prototype.resize = function(c, r, ch) { + if (typeof ch === "undefined") { ch = this.channel; } + // change buffer only if new size doesnt fit + var new_size = (c * ch) * r; + if(new_size > this.rows*this.cols*this.channel) { + this.cols = c; + this.rows = r; + this.channel = ch; + this.allocate(); + } else { + this.cols = c; + this.rows = r; + this.channel = ch; + } + } + return matrix_t; })(); diff --git a/src/jsfeat_yape.js b/src/jsfeat_yape.js old mode 100644 new mode 100755 diff --git a/src/jsfeat_yape06.js b/src/jsfeat_yape06.js old mode 100644 new mode 100755 From 7821169d321cbe79fc88cb959e6c17ff47894a72 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Sat, 23 Mar 2013 20:54:36 +0400 Subject: [PATCH 22/46] readme update --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index af7a457..8b1d7bb 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,11 @@ The project aim is to explore JS/HTML5 possibilities using modern & state-of-art * Cholesky solver * SVD decomposition, solver and pseudo-inverse * Eigen Vectors and Values +* Multiview module + * Affine2D motion kernel + * Homography2D motion kernel + * RANSAC motion estimator + * LMEDS motion estimator * Matrix Math module for various matrix operation such as traspose, multiply etc. * Features 2D * Fast Corners feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_fast_corners.html)) From 4377893ab02504abc2adf3d5354f2eae369dcf65 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Tue, 26 Mar 2013 20:43:48 +0400 Subject: [PATCH 23/46] various improvements did some small improvements to make video stabilizer demo --- README.md | 2 +- build/jsfeat-min.js | 2 +- build/jsfeat.js | 183 ++++++++++++++++++++++----------- src/jsfeat_imgproc.js | 52 +++++----- src/jsfeat_mat_math.js | 23 +++++ src/jsfeat_motion_estimator.js | 56 +++++----- src/jsfeat_optical_flow_lk.js | 10 +- src/jsfeat_struct.js | 24 ++++- 8 files changed, 229 insertions(+), 123 deletions(-) mode change 100644 => 100755 build/jsfeat.js mode change 100644 => 100755 src/jsfeat_motion_estimator.js diff --git a/README.md b/README.md index 8b1d7bb..ff84d24 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ The project aim is to explore JS/HTML5 possibilities using modern & state-of-art * Cholesky solver * SVD decomposition, solver and pseudo-inverse * Eigen Vectors and Values -* Multiview module +* Multiview module ([Demo](http://inspirit.github.com/jsfeat/sample_videostab.html)) * Affine2D motion kernel * Homography2D motion kernel * RANSAC motion estimator diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index 82b2231..48bcf6f 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data;var A=this.cols*this.rows*this.channel;while(--A>=0){y[A]=this.data[A]}};x.prototype.resize=function(B,z,y){if(typeof y==="undefined"){y=this.channel}var A=(B*y)*z;if(A>this.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{transpose:function(f,d){var l=0,h=0,k=d.rows,c=d.cols;var n=0,e=0,m=0;var o=d.data,g=f.data;for(;lg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=2;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var f=function(j){return j*j};var i=function(t,u,r,q,o){var n=0;var s=0,m=0,k=0,w=0;var p=0,l=0,j=0,v=0;var y=0,x=0;for(;n=0){G[F]=0}for(F=0;F=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(s,K,n,l){if(typeof l==="undefined"){l=0}var A=s.cols,F=s.rows,t=F<<1,z=A<<1;var E=0,v=0,u=0,m=0;var C=((n<<1)+1)|0;var p=(n+1)|0,I=(p+1)|0;var q=8192;var J=l&jsfeat.BOX_BLUR_NOSCALE?1:(16384/(C*C)+0.5)|0;var D=jsfeat.cache.get_buffer((A*F)<<2);var j=0,H=0,o=0,r=0,k=0;var G=D.i32;var g=s.data;var B=0;for(u=0;u>14;j+=G[r]-B;r++}for(;v>14;j+=G[r]-G[k];g[H+A]=(j*J+q)>>14;j+=G[r+1]-G[k+1];r+=2;k+=2}for(;v>14;j+=G[r]-G[k];r++;k++}B=G[r-1];for(;v>14;j+=B-G[k];k++}o+=F}}jsfeat.cache.put_buffer(D)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(i,F){var o=i.cols,r=i.rows;var G=o<<1,n=0,l=0,t=0,D,C,B,A,z,v;var u=0,s=0,q=0,g=0;var m,k;var E=i.data;var j=jsfeat.cache.get_buffer((o+2)<<2);var p=jsfeat.cache.get_buffer((o+2)<<2);if(i.type&jsfeat.U8_t||i.type&jsfeat.S32_t){m=j.i32;k=p.i32}else{m=j.f32;k=p.f32}for(;l0?l-1:1)*o)|0;q=((l0?l-1:1)*o)|0;q=((l0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=l*k+u;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ao,aK,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var Z=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aA=r[0].rows,ax=0,aG=0;var ay=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(Z<<2);var t=jsfeat.cache.get_buffer((aA*(M<<1))<<2);var w=ay.i32;var ab=s.i32;var az=t.i32;var aa=0,I=0,aL=0,ar=0,aH=0,at=0;var al=0,aE=0,aC=0,ae=0,ad=0;var E=0,z=0,X=0,V=0;var p=0,o=0,aD=0,aB=0;var Q=0,P=0,J=0,H=0,ah=0,aj=0,l=0;var d=0,A=0,O=0;var U=0,T=0,av=0,au=0;var ag=14;var C=14;var Y=C-5;var aw=(1<<((Y)-1));var ac=(1<=0;--ah){al=(1/(1<>ah;aG=aA>>ah;aa=ax<<1;g=r[ah].data;F=S[ah].data;A=(ax-N)|0;O=(aG-N)|0;c(r[ah],az);for(aj=0;aj=A)|(o<=d)|(o>=O);if(J!=0){if(ah==0){K[aj]=0}continue}U=aE-p;T=aC-o;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);an=0,am=0,af=0;for(H=0;H>(Y));v=(az[aL]*aJ+az[aL+2]*aI+az[aL+aa]*aq+az[aL+aa+2]*ap);v=(((v)+m)>>(C));B=(az[aL+1]*aJ+az[aL+3]*aI+az[aL+aa+1]*aq+az[aL+aa+3]*ap);B=(((B)+m)>>(C));w[ar]=ak;ab[aH++]=v;ab[aH++]=B;an+=v*v;am+=v*B;af+=B*B}}an*=W;am*=W;af*=W;ai=an*af-am*am;aF=(af+an-Math.sqrt((an-af)*(an-af)+4*am*am))/Z;if(aF=A)|(aB<=d)|(aB>=O);if(J!=0){if(ah==0){K[aj]=0}break}U=ae-aD;T=ad-aB;aJ=(((1-U)*(1-T)*ac)+0.5)|0;aI=((U*(1-T)*ac)+0.5)|0;aq=(((1-U)*T*ac)+0.5)|0;ap=(ac-aJ-aI-aq);av=0,au=0;for(H=0;H>(Y));ak=(ak-w[ar]);av+=ak*ab[aH++];au+=ak*ab[aH++]}}av*=W;au*=W;X=((am*au-af*av)*ai);V=((am*av-an*au)*ai);ae+=X;ad+=V;aK[Q]=ae+e;aK[P]=ad+e;if(X*X+V*V<=f){break}if(l>0&&Math.abs(X+E)<0.01&&Math.abs(V+z)<0.01){aK[Q]-=X*0.5;aK[P]-=V*0.5;break}E=X;z=V}}}jsfeat.cache.put_buffer(ay);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=2;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(s,K,n,l){if(typeof l==="undefined"){l=0}var A=s.cols,F=s.rows,t=F<<1,z=A<<1;var E=0,v=0,u=0,m=0;var C=((n<<1)+1)|0;var p=(n+1)|0,I=(p+1)|0;var q=8192;var J=l&jsfeat.BOX_BLUR_NOSCALE?1:(16384/(C*C)+0.5)|0;var D=jsfeat.cache.get_buffer((A*F)<<2);var j=0,H=0,o=0,r=0,k=0;var G=D.i32;var g=s.data;var B=0;for(u=0;u>14;j+=G[r]-B;r++}for(;v>14;j+=G[r]-G[k];g[H+A]=(j*J+q)>>14;j+=G[r+1]-G[k+1];r+=2;k+=2}for(;v>14;j+=G[r]-G[k];r++;k++}B=G[r-1];for(;v>14;j+=B-G[k];k++}o+=F}}jsfeat.cache.put_buffer(D)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ap,aL,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var aa=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aB=r[0].rows,ay=0,aH=0;var az=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(aa<<2);var t=jsfeat.cache.get_buffer((aB*(M<<1))<<2);var V=new jsfeat.matrix_t(M,aB,jsfeat.S32C2_t,t.data);var w=az.i32;var ac=s.i32;var aA=t.i32;var ab=0,I=0,aM=0,at=0,aI=0,au=0;var am=0,aF=0,aD=0,af=0,ae=0;var E=0,z=0,Y=0,W=0;var p=0,o=0,aE=0,aC=0;var Q=0,P=0,J=0,H=0,ai=0,ak=0,l=0;var d=0,A=0,O=0;var U=0,T=0,aw=0,av=0;var ah=14;var C=14;var Z=C-5;var ax=(1<<((Z)-1));var ad=(1<=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js old mode 100644 new mode 100755 index fb74086..c63f4ce --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -4,6 +4,7 @@ // namespace ? var jsfeat = jsfeat || { REVISION: 'ALPHA' }; + /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -97,10 +98,16 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : (this.type&F32_t ? this.buffer.f32 : this.buffer.f64)); } matrix_t.prototype.copy_to = function(other) { - var od = other.data; - var i = this.cols*this.rows*this.channel; - while(--i >= 0) { - od[i] = this.data[i]; + var od = other.data, td = this.data; + var i = 0, n = (this.cols*this.rows*this.channel)|0; + for(; i < n-4; i+=4) { + od[i] = td[i]; + od[i+1] = td[i+1]; + od[i+2] = td[i+2]; + od[i+3] = td[i+3]; + } + for(; i < n; ++i) { + od[i] = td[i]; } } matrix_t.prototype.resize = function(c, r, ch) { @@ -187,6 +194,16 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.C3_t = C3_t; global.C4_t = C4_t; + // popular formats + global.U8C1_t = U8_t | C1_t; + global.U8C3_t = U8_t | C3_t; + global.U8C4_t = U8_t | C4_t; + + global.F32C1_t = F32_t | C1_t; + global.F32C2_t = F32_t | C2_t; + global.S32C1_t = S32_t | C1_t; + global.S32C2_t = S32_t | C2_t; + // constants global.EPSILON = EPSILON; global.FLT_MIN = FLT_MIN; @@ -206,6 +223,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.point2d_t = point2d_t; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -285,6 +303,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; cache.allocate(30, 640*4); })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -699,6 +718,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.math = math; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -711,6 +731,21 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var matmath = (function() { return { + identity: function(M, value) { + if (typeof value === "undefined") { value=1; } + var src=M.data; + var rows=M.rows, cols=M.cols, cols_1=(cols+1)|0; + var len = rows * cols; + var k = len; + while(--len >= 0) src[len] = 0.0; + len = k; + k = 0; + while(k < len) { + src[k] = value; + k = k + cols_1; + } + }, + transpose: function(At, A) { var i=0,j=0,nrows=A.rows,ncols=A.cols; var Ai=0,Ati=0,pAt=0; @@ -834,6 +869,14 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; }, // various small matrix operations + identity_3x3: function(M, value) { + if (typeof value === "undefined") { value=1; } + var dt=M.data; + dt[0] = dt[4] = dt[8] = value; + dt[1] = dt[2] = dt[3] = 0; + dt[5] = dt[6] = dt[7] = 0; + }, + invert_3x3: function(from, to) { var A = from.data, invA = to.data; var t1 = A[4]; @@ -908,7 +951,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.matmath = matmath; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -1615,7 +1658,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.linalg = linalg; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -1692,20 +1735,22 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; } return false; } + + var T0 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + var T1 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + var AtA = new jsfeat.matrix_t(6, 6, jsfeat.F32_t|jsfeat.C1_t); + var AtB = new jsfeat.matrix_t(6, 1, jsfeat.F32_t|jsfeat.C1_t); var affine2d = (function () { function affine2d() { - this.T0 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); - this.T1 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); - this.AtA = new jsfeat.matrix_t(6, 6, jsfeat.F32_t|jsfeat.C1_t); - this.AtB = new jsfeat.matrix_t(6, 1, jsfeat.F32_t|jsfeat.C1_t); + // empty constructor } affine2d.prototype.run = function(from, to, model, count) { var i=0,j=0; var dt=model.type|jsfeat.C1_t; - var md=model.data, t0d=this.T0.data, t1d=this.T1.data; + var md=model.data, t0d=T0.data, t1d=T1.data; var pt0,pt1,px=0.0,py=0.0; iso_normalize_points(from, to, t0d, t1d, count); @@ -1734,19 +1779,19 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; bd[(i<<1)+1] = t1d[3]*pt1.x + t1d[4]*pt1.y + t1d[5]; } - jsfeat.matmath.multiply_AtA(this.AtA, a_mt); - jsfeat.matmath.multiply_AtB(this.AtB, a_mt, b_mt); + jsfeat.matmath.multiply_AtA(AtA, a_mt); + jsfeat.matmath.multiply_AtB(AtB, a_mt, b_mt); - jsfeat.linalg.lu_solve(this.AtA, this.AtB); + jsfeat.linalg.lu_solve(AtA, AtB); - md[0] = this.AtB.data[0], md[1]=this.AtB.data[1], md[2]=this.AtB.data[2]; - md[3] = this.AtB.data[3], md[4]=this.AtB.data[4], md[5]=this.AtB.data[5]; + md[0] = AtB.data[0], md[1]=AtB.data[1], md[2]=AtB.data[2]; + md[3] = AtB.data[3], md[4]=AtB.data[4], md[5]=AtB.data[5]; md[6] = 0.0, md[7] = 0.0, md[8] = 1.0; // fill last row // denormalize - jsfeat.matmath.invert_3x3(this.T1, this.T1); - jsfeat.matmath.multiply_3x3(model, this.T1, model); - jsfeat.matmath.multiply_3x3(model, model, this.T0); + jsfeat.matmath.invert_3x3(T1, T1); + jsfeat.matmath.multiply_3x3(model, T1, model); + jsfeat.matmath.multiply_3x3(model, model, T0); // free buffer jsfeat.cache.put_buffer(a_buff); @@ -1776,19 +1821,23 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; return affine2d; })(); + var mLtL = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); + var Evec = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); + var homography2d = (function () { function homography2d() { - this.T0 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); - this.T1 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); - this.mLtL = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); - this.Evec = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); + // empty constructor + //this.T0 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + //this.T1 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + //this.mLtL = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); + //this.Evec = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); } homography2d.prototype.run = function(from, to, model, count) { var i=0,j=0; - var md=model.data, t0d=this.T0.data, t1d=this.T1.data; - var LtL=this.mLtL.data, evd=this.Evec.data; + var md=model.data, t0d=T0.data, t1d=T1.data; + var LtL=mLtL.data, evd=Evec.data; var x=0.0,y=0.0,X=0.0,Y=0.0; // norm @@ -1888,15 +1937,15 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; LtL[i*9+j] = LtL[j*9+i]; } - jsfeat.linalg.eigenVV(this.mLtL, this.Evec); + jsfeat.linalg.eigenVV(mLtL, Evec); md[0]=evd[72], md[1]=evd[73], md[2]=evd[74]; md[3]=evd[75], md[4]=evd[76], md[5]=evd[77]; md[6]=evd[78], md[7]=evd[79], md[8]=evd[80]; // denormalize - jsfeat.matmath.multiply_3x3(model, this.T1, model); - jsfeat.matmath.multiply_3x3(model, model, this.T0); + jsfeat.matmath.multiply_3x3(model, T1, model); + jsfeat.matmath.multiply_3x3(model, model, T0); // set bottom right to 1.0 x = 1.0/md[8]; @@ -2069,7 +2118,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; for(; i < count; ++i) { f = err[i] <= t; - mask[i] = f|0; + mask[i] = f; numinliers += f; } return numinliers; @@ -2097,7 +2146,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var ms_buff = jsfeat.cache.get_buffer(count); var err_buff = jsfeat.cache.get_buffer(count<<2); var M = new jsfeat.matrix_t(mc, mr, dt, m_buff.data); - var curr_mask = new jsfeat.matrix_t(count, 1, jsfeat.U8_t|jsfeat.C1_t, ms_buff.data); + var curr_mask = new jsfeat.matrix_t(count, 1, jsfeat.U8C1_t, ms_buff.data); var inliers_max = -1, numinliers=0; var nmodels = 0; @@ -2244,7 +2293,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; } if(result) { - sigma = 2.5*1.4826*(1 + 5.0/(count - model_points))*Math.sqrt(minMedian); + sigma = 2.5*1.4826*(1 + 5.0/(count - model_points))*Math.sqrt(min_median); sigma = Math.max(sigma, 0.001); numinliers = find_inliers(kernel, model, from, to, count, sigma, err, curr_mask.data); @@ -2269,6 +2318,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.motion_estimator = motion_estimator; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -2908,7 +2958,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; var srow0=0,srow1=0,srow2=0,drow=0; var trow0,trow1; - var img = src.data; + var img = src.data, gxgy=dst.data; var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); var buf1_node = jsfeat.cache.get_buffer((w+2)<<2); @@ -2948,19 +2998,19 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; for(x = 0; x <= w-4; x+=4) { a = trow1[x+2], b = trow1[x+1], c = trow1[x+3], d = trow1[x+4], e = trow0[x+2], f = trow0[x+3]; - dst[drow++] = ( e - trow0[x] ); - dst[drow++] = ( (a + trow1[x])*3 + b*10 ); - dst[drow++] = ( f - trow0[x+1] ); - dst[drow++] = ( (c + b)*3 + a*10 ); - - dst[drow++] = ( (trow0[x+4] - e) ); - dst[drow++] = ( ((d + a)*3 + c*10) ); - dst[drow++] = ( (trow0[x+5] - f) ); - dst[drow++] = ( ((trow1[x+5] + c)*3 + d*10) ); + gxgy[drow++] = ( e - trow0[x] ); + gxgy[drow++] = ( (a + trow1[x])*3 + b*10 ); + gxgy[drow++] = ( f - trow0[x+1] ); + gxgy[drow++] = ( (c + b)*3 + a*10 ); + + gxgy[drow++] = ( (trow0[x+4] - e) ); + gxgy[drow++] = ( ((d + a)*3 + c*10) ); + gxgy[drow++] = ( (trow0[x+5] - f) ); + gxgy[drow++] = ( ((trow1[x+5] + c)*3 + d*10) ); } for(; x < w; ++x) { - dst[drow++] = ( (trow0[x+2] - trow0[x]) ); - dst[drow++] = ( ((trow1[x+2] + trow1[x])*3 + trow1[x+1]*10) ); + gxgy[drow++] = ( (trow0[x+2] - trow0[x]) ); + gxgy[drow++] = ( ((trow1[x+2] + trow1[x])*3 + trow1[x+1]*10) ); } } jsfeat.cache.put_buffer(buf0_node); @@ -2974,7 +3024,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; var srow0=0,srow1=0,srow2=0,drow=0; var trow0,trow1; - var img = src.data; + var img = src.data, gxgy=dst.data; var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); var buf1_node = jsfeat.cache.get_buffer((w+2)<<2); @@ -3014,19 +3064,19 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; for(x = 0; x <= w-4; x+=4) { a = trow1[x+2], b = trow1[x+1], c = trow1[x+3], d = trow1[x+4], e = trow0[x+2], f = trow0[x+3]; - dst[drow++] = ( e - trow0[x] ); - dst[drow++] = ( a + trow1[x] + b*2 ); - dst[drow++] = ( f - trow0[x+1] ); - dst[drow++] = ( c + b + a*2 ); - - dst[drow++] = ( trow0[x+4] - e ); - dst[drow++] = ( d + a + c*2 ); - dst[drow++] = ( trow0[x+5] - f ); - dst[drow++] = ( trow1[x+5] + c + d*2 ); + gxgy[drow++] = ( e - trow0[x] ); + gxgy[drow++] = ( a + trow1[x] + b*2 ); + gxgy[drow++] = ( f - trow0[x+1] ); + gxgy[drow++] = ( c + b + a*2 ); + + gxgy[drow++] = ( trow0[x+4] - e ); + gxgy[drow++] = ( d + a + c*2 ); + gxgy[drow++] = ( trow0[x+5] - f ); + gxgy[drow++] = ( trow1[x+5] + c + d*2 ); } for(; x < w; ++x) { - dst[drow++] = ( trow0[x+2] - trow0[x] ); - dst[drow++] = ( trow1[x+2] + trow1[x] + trow1[x+1]*2 ); + gxgy[drow++] = ( trow0[x+2] - trow0[x] ); + gxgy[drow++] = ( trow1[x+2] + trow1[x] + trow1[x+1]*2 ); } } jsfeat.cache.put_buffer(buf0_node); @@ -3324,7 +3374,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; // transform is 3x3 matrix_t warp_perspective: function(src, dst, transform, fill_value) { if (typeof fill_value === "undefined") { fill_value = 0; } - var src_width=src.cols, src_height=src.rows, dst_width=dst.cols, dst_height=dst.rows; + var src_width=src.cols|0, src_height=src.rows|0, dst_width=dst.cols|0, dst_height=dst.rows|0; var src_d=src.data, dst_d=dst.data; var x=0,y=0,off=0,ixs=0,iys=0,xs=0.0,ys=0.0,xs0=0.0,ys0=0.0,ws=0.0,sc=0.0,a=0.0,b=0.0,p0=0.0,p1=0.0; var td=transform.data; @@ -3344,7 +3394,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; if(xs > 0 && ys > 0 && ixs < (src_width - 1) && iys < (src_height - 1)) { a = Math.max(xs - ixs, 0.0); b = Math.max(ys - iys, 0.0); - off = src_width*iys + ixs; + off = (src_width*iys + ixs)|0; p0 = src_d[off] + a * (src_d[off+1] - src_d[off]); p1 = src_d[off+src_width] + a * (src_d[off+src_width+1] - src_d[off+src_width]); @@ -3391,6 +3441,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.imgproc = imgproc; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3730,6 +3781,7 @@ The references are: fast_corners.set_threshold(20); // set default })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3825,6 +3877,7 @@ The references are: global.yape06 = yape06; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -4234,7 +4287,7 @@ The references are: global.yape = yape; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -4267,9 +4320,11 @@ The references are: var deriv_iwin_node = jsfeat.cache.get_buffer(win_area2<<2); var deriv_lev_node = jsfeat.cache.get_buffer((h0*(w0<<1))<<2); - var iwin_buf = iwin_node.i32;//new Int32Array(win_area); - var deriv_iwin = deriv_iwin_node.i32;//new Int32Array(win_area2); - var deriv_lev = deriv_lev_node.i32;//deriv_m.data; + var deriv_m = new jsfeat.matrix_t(w0, h0, jsfeat.S32C2_t, deriv_lev_node.data); + + var iwin_buf = iwin_node.i32; + var deriv_iwin = deriv_iwin_node.i32; + var deriv_lev = deriv_lev_node.i32; var dstep=0,src=0,dsrc=0,iptr=0,diptr=0,jptr=0; var lev_sc=0.0,prev_x=0.0,prev_y=0.0,next_x=0.0,next_y=0.0; @@ -4313,7 +4368,7 @@ The references are: brd_b = (lh - win_size)|0; // calculate level derivatives - scharr_deriv(prev_imgs[level], deriv_lev); + scharr_deriv(prev_imgs[level], deriv_m); // iterate through points for(ptid = 0; ptid < count; ++ptid) { @@ -4479,6 +4534,7 @@ The references are: global.optical_flow_lk = optical_flow_lk; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -4769,6 +4825,7 @@ The references are: global.haar = haar; })(jsfeat); + /** * BBF: Brightness Binary Feature * @@ -5163,6 +5220,7 @@ The references are: global.bbf = bbf; })(jsfeat); + /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -5178,3 +5236,4 @@ The references are: module.exports = lib; } })(jsfeat); + diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index 0110f74..0c90666 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -637,7 +637,7 @@ var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; var srow0=0,srow1=0,srow2=0,drow=0; var trow0,trow1; - var img = src.data; + var img = src.data, gxgy=dst.data; var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); var buf1_node = jsfeat.cache.get_buffer((w+2)<<2); @@ -677,19 +677,19 @@ for(x = 0; x <= w-4; x+=4) { a = trow1[x+2], b = trow1[x+1], c = trow1[x+3], d = trow1[x+4], e = trow0[x+2], f = trow0[x+3]; - dst[drow++] = ( e - trow0[x] ); - dst[drow++] = ( (a + trow1[x])*3 + b*10 ); - dst[drow++] = ( f - trow0[x+1] ); - dst[drow++] = ( (c + b)*3 + a*10 ); - - dst[drow++] = ( (trow0[x+4] - e) ); - dst[drow++] = ( ((d + a)*3 + c*10) ); - dst[drow++] = ( (trow0[x+5] - f) ); - dst[drow++] = ( ((trow1[x+5] + c)*3 + d*10) ); + gxgy[drow++] = ( e - trow0[x] ); + gxgy[drow++] = ( (a + trow1[x])*3 + b*10 ); + gxgy[drow++] = ( f - trow0[x+1] ); + gxgy[drow++] = ( (c + b)*3 + a*10 ); + + gxgy[drow++] = ( (trow0[x+4] - e) ); + gxgy[drow++] = ( ((d + a)*3 + c*10) ); + gxgy[drow++] = ( (trow0[x+5] - f) ); + gxgy[drow++] = ( ((trow1[x+5] + c)*3 + d*10) ); } for(; x < w; ++x) { - dst[drow++] = ( (trow0[x+2] - trow0[x]) ); - dst[drow++] = ( ((trow1[x+2] + trow1[x])*3 + trow1[x+1]*10) ); + gxgy[drow++] = ( (trow0[x+2] - trow0[x]) ); + gxgy[drow++] = ( ((trow1[x+2] + trow1[x])*3 + trow1[x+1]*10) ); } } jsfeat.cache.put_buffer(buf0_node); @@ -703,7 +703,7 @@ var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; var srow0=0,srow1=0,srow2=0,drow=0; var trow0,trow1; - var img = src.data; + var img = src.data, gxgy=dst.data; var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); var buf1_node = jsfeat.cache.get_buffer((w+2)<<2); @@ -743,19 +743,19 @@ for(x = 0; x <= w-4; x+=4) { a = trow1[x+2], b = trow1[x+1], c = trow1[x+3], d = trow1[x+4], e = trow0[x+2], f = trow0[x+3]; - dst[drow++] = ( e - trow0[x] ); - dst[drow++] = ( a + trow1[x] + b*2 ); - dst[drow++] = ( f - trow0[x+1] ); - dst[drow++] = ( c + b + a*2 ); - - dst[drow++] = ( trow0[x+4] - e ); - dst[drow++] = ( d + a + c*2 ); - dst[drow++] = ( trow0[x+5] - f ); - dst[drow++] = ( trow1[x+5] + c + d*2 ); + gxgy[drow++] = ( e - trow0[x] ); + gxgy[drow++] = ( a + trow1[x] + b*2 ); + gxgy[drow++] = ( f - trow0[x+1] ); + gxgy[drow++] = ( c + b + a*2 ); + + gxgy[drow++] = ( trow0[x+4] - e ); + gxgy[drow++] = ( d + a + c*2 ); + gxgy[drow++] = ( trow0[x+5] - f ); + gxgy[drow++] = ( trow1[x+5] + c + d*2 ); } for(; x < w; ++x) { - dst[drow++] = ( trow0[x+2] - trow0[x] ); - dst[drow++] = ( trow1[x+2] + trow1[x] + trow1[x+1]*2 ); + gxgy[drow++] = ( trow0[x+2] - trow0[x] ); + gxgy[drow++] = ( trow1[x+2] + trow1[x] + trow1[x+1]*2 ); } } jsfeat.cache.put_buffer(buf0_node); @@ -1053,7 +1053,7 @@ // transform is 3x3 matrix_t warp_perspective: function(src, dst, transform, fill_value) { if (typeof fill_value === "undefined") { fill_value = 0; } - var src_width=src.cols, src_height=src.rows, dst_width=dst.cols, dst_height=dst.rows; + var src_width=src.cols|0, src_height=src.rows|0, dst_width=dst.cols|0, dst_height=dst.rows|0; var src_d=src.data, dst_d=dst.data; var x=0,y=0,off=0,ixs=0,iys=0,xs=0.0,ys=0.0,xs0=0.0,ys0=0.0,ws=0.0,sc=0.0,a=0.0,b=0.0,p0=0.0,p1=0.0; var td=transform.data; @@ -1073,7 +1073,7 @@ if(xs > 0 && ys > 0 && ixs < (src_width - 1) && iys < (src_height - 1)) { a = Math.max(xs - ixs, 0.0); b = Math.max(ys - iys, 0.0); - off = src_width*iys + ixs; + off = (src_width*iys + ixs)|0; p0 = src_d[off] + a * (src_d[off+1] - src_d[off]); p1 = src_d[off+src_width] + a * (src_d[off+src_width+1] - src_d[off+src_width]); diff --git a/src/jsfeat_mat_math.js b/src/jsfeat_mat_math.js index 64e6c73..9dc25ec 100755 --- a/src/jsfeat_mat_math.js +++ b/src/jsfeat_mat_math.js @@ -10,6 +10,21 @@ var matmath = (function() { return { + identity: function(M, value) { + if (typeof value === "undefined") { value=1; } + var src=M.data; + var rows=M.rows, cols=M.cols, cols_1=(cols+1)|0; + var len = rows * cols; + var k = len; + while(--len >= 0) src[len] = 0.0; + len = k; + k = 0; + while(k < len) { + src[k] = value; + k = k + cols_1; + } + }, + transpose: function(At, A) { var i=0,j=0,nrows=A.rows,ncols=A.cols; var Ai=0,Ati=0,pAt=0; @@ -133,6 +148,14 @@ }, // various small matrix operations + identity_3x3: function(M, value) { + if (typeof value === "undefined") { value=1; } + var dt=M.data; + dt[0] = dt[4] = dt[8] = value; + dt[1] = dt[2] = dt[3] = 0; + dt[5] = dt[6] = dt[7] = 0; + }, + invert_3x3: function(from, to) { var A = from.data, invA = to.data; var t1 = A[4]; diff --git a/src/jsfeat_motion_estimator.js b/src/jsfeat_motion_estimator.js old mode 100644 new mode 100755 index a1de55e..055e0f1 --- a/src/jsfeat_motion_estimator.js +++ b/src/jsfeat_motion_estimator.js @@ -74,20 +74,22 @@ } return false; } + + var T0 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + var T1 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + var AtA = new jsfeat.matrix_t(6, 6, jsfeat.F32_t|jsfeat.C1_t); + var AtB = new jsfeat.matrix_t(6, 1, jsfeat.F32_t|jsfeat.C1_t); var affine2d = (function () { function affine2d() { - this.T0 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); - this.T1 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); - this.AtA = new jsfeat.matrix_t(6, 6, jsfeat.F32_t|jsfeat.C1_t); - this.AtB = new jsfeat.matrix_t(6, 1, jsfeat.F32_t|jsfeat.C1_t); + // empty constructor } affine2d.prototype.run = function(from, to, model, count) { var i=0,j=0; var dt=model.type|jsfeat.C1_t; - var md=model.data, t0d=this.T0.data, t1d=this.T1.data; + var md=model.data, t0d=T0.data, t1d=T1.data; var pt0,pt1,px=0.0,py=0.0; iso_normalize_points(from, to, t0d, t1d, count); @@ -116,19 +118,19 @@ bd[(i<<1)+1] = t1d[3]*pt1.x + t1d[4]*pt1.y + t1d[5]; } - jsfeat.matmath.multiply_AtA(this.AtA, a_mt); - jsfeat.matmath.multiply_AtB(this.AtB, a_mt, b_mt); + jsfeat.matmath.multiply_AtA(AtA, a_mt); + jsfeat.matmath.multiply_AtB(AtB, a_mt, b_mt); - jsfeat.linalg.lu_solve(this.AtA, this.AtB); + jsfeat.linalg.lu_solve(AtA, AtB); - md[0] = this.AtB.data[0], md[1]=this.AtB.data[1], md[2]=this.AtB.data[2]; - md[3] = this.AtB.data[3], md[4]=this.AtB.data[4], md[5]=this.AtB.data[5]; + md[0] = AtB.data[0], md[1]=AtB.data[1], md[2]=AtB.data[2]; + md[3] = AtB.data[3], md[4]=AtB.data[4], md[5]=AtB.data[5]; md[6] = 0.0, md[7] = 0.0, md[8] = 1.0; // fill last row // denormalize - jsfeat.matmath.invert_3x3(this.T1, this.T1); - jsfeat.matmath.multiply_3x3(model, this.T1, model); - jsfeat.matmath.multiply_3x3(model, model, this.T0); + jsfeat.matmath.invert_3x3(T1, T1); + jsfeat.matmath.multiply_3x3(model, T1, model); + jsfeat.matmath.multiply_3x3(model, model, T0); // free buffer jsfeat.cache.put_buffer(a_buff); @@ -158,19 +160,23 @@ return affine2d; })(); + var mLtL = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); + var Evec = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); + var homography2d = (function () { function homography2d() { - this.T0 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); - this.T1 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); - this.mLtL = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); - this.Evec = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); + // empty constructor + //this.T0 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + //this.T1 = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + //this.mLtL = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); + //this.Evec = new jsfeat.matrix_t(9, 9, jsfeat.F32_t|jsfeat.C1_t); } homography2d.prototype.run = function(from, to, model, count) { var i=0,j=0; - var md=model.data, t0d=this.T0.data, t1d=this.T1.data; - var LtL=this.mLtL.data, evd=this.Evec.data; + var md=model.data, t0d=T0.data, t1d=T1.data; + var LtL=mLtL.data, evd=Evec.data; var x=0.0,y=0.0,X=0.0,Y=0.0; // norm @@ -270,15 +276,15 @@ LtL[i*9+j] = LtL[j*9+i]; } - jsfeat.linalg.eigenVV(this.mLtL, this.Evec); + jsfeat.linalg.eigenVV(mLtL, Evec); md[0]=evd[72], md[1]=evd[73], md[2]=evd[74]; md[3]=evd[75], md[4]=evd[76], md[5]=evd[77]; md[6]=evd[78], md[7]=evd[79], md[8]=evd[80]; // denormalize - jsfeat.matmath.multiply_3x3(model, this.T1, model); - jsfeat.matmath.multiply_3x3(model, model, this.T0); + jsfeat.matmath.multiply_3x3(model, T1, model); + jsfeat.matmath.multiply_3x3(model, model, T0); // set bottom right to 1.0 x = 1.0/md[8]; @@ -451,7 +457,7 @@ for(; i < count; ++i) { f = err[i] <= t; - mask[i] = f|0; + mask[i] = f; numinliers += f; } return numinliers; @@ -479,7 +485,7 @@ var ms_buff = jsfeat.cache.get_buffer(count); var err_buff = jsfeat.cache.get_buffer(count<<2); var M = new jsfeat.matrix_t(mc, mr, dt, m_buff.data); - var curr_mask = new jsfeat.matrix_t(count, 1, jsfeat.U8_t|jsfeat.C1_t, ms_buff.data); + var curr_mask = new jsfeat.matrix_t(count, 1, jsfeat.U8C1_t, ms_buff.data); var inliers_max = -1, numinliers=0; var nmodels = 0; @@ -626,7 +632,7 @@ } if(result) { - sigma = 2.5*1.4826*(1 + 5.0/(count - model_points))*Math.sqrt(minMedian); + sigma = 2.5*1.4826*(1 + 5.0/(count - model_points))*Math.sqrt(min_median); sigma = Math.max(sigma, 0.001); numinliers = find_inliers(kernel, model, from, to, count, sigma, err, curr_mask.data); diff --git a/src/jsfeat_optical_flow_lk.js b/src/jsfeat_optical_flow_lk.js index df8b833..85730d2 100755 --- a/src/jsfeat_optical_flow_lk.js +++ b/src/jsfeat_optical_flow_lk.js @@ -30,9 +30,11 @@ var deriv_iwin_node = jsfeat.cache.get_buffer(win_area2<<2); var deriv_lev_node = jsfeat.cache.get_buffer((h0*(w0<<1))<<2); - var iwin_buf = iwin_node.i32;//new Int32Array(win_area); - var deriv_iwin = deriv_iwin_node.i32;//new Int32Array(win_area2); - var deriv_lev = deriv_lev_node.i32;//deriv_m.data; + var deriv_m = new jsfeat.matrix_t(w0, h0, jsfeat.S32C2_t, deriv_lev_node.data); + + var iwin_buf = iwin_node.i32; + var deriv_iwin = deriv_iwin_node.i32; + var deriv_lev = deriv_lev_node.i32; var dstep=0,src=0,dsrc=0,iptr=0,diptr=0,jptr=0; var lev_sc=0.0,prev_x=0.0,prev_y=0.0,next_x=0.0,next_y=0.0; @@ -76,7 +78,7 @@ brd_b = (lh - win_size)|0; // calculate level derivatives - scharr_deriv(prev_imgs[level], deriv_lev); + scharr_deriv(prev_imgs[level], deriv_m); // iterate through points for(ptid = 0; ptid < count; ++ptid) { diff --git a/src/jsfeat_struct.js b/src/jsfeat_struct.js index 74c9a2b..b95d96d 100755 --- a/src/jsfeat_struct.js +++ b/src/jsfeat_struct.js @@ -91,10 +91,16 @@ this.data = this.type&U8_t ? this.buffer.u8 : (this.type&S32_t ? this.buffer.i32 : (this.type&F32_t ? this.buffer.f32 : this.buffer.f64)); } matrix_t.prototype.copy_to = function(other) { - var od = other.data; - var i = this.cols*this.rows*this.channel; - while(--i >= 0) { - od[i] = this.data[i]; + var od = other.data, td = this.data; + var i = 0, n = (this.cols*this.rows*this.channel)|0; + for(; i < n-4; i+=4) { + od[i] = td[i]; + od[i+1] = td[i+1]; + od[i+2] = td[i+2]; + od[i+3] = td[i+3]; + } + for(; i < n; ++i) { + od[i] = td[i]; } } matrix_t.prototype.resize = function(c, r, ch) { @@ -181,6 +187,16 @@ global.C3_t = C3_t; global.C4_t = C4_t; + // popular formats + global.U8C1_t = U8_t | C1_t; + global.U8C3_t = U8_t | C3_t; + global.U8C4_t = U8_t | C4_t; + + global.F32C1_t = F32_t | C1_t; + global.F32C2_t = F32_t | C2_t; + global.S32C1_t = S32_t | C1_t; + global.S32C2_t = S32_t | C2_t; + // constants global.EPSILON = EPSILON; global.FLT_MIN = FLT_MIN; From 26f5d69bf415300e7b69749366412234094c2ecd Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Wed, 27 Mar 2013 21:18:16 +0400 Subject: [PATCH 24/46] box blur overflow fix --- README.md | 2 ++ build/jsfeat-min.js | 2 +- build/jsfeat.js | 31 +++++++++---------------------- package.json | 2 +- src/jsfeat_imgproc.js | 13 ++++++------- 5 files changed, 19 insertions(+), 31 deletions(-) mode change 100755 => 100644 build/jsfeat.js diff --git a/README.md b/README.md index ff84d24..77fdf42 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,8 @@ The project aim is to explore JS/HTML5 possibilities using modern & state-of-art * gaussian blur ([Demo](http://inspirit.github.com/jsfeat/sample_gaussblur.html)) * equalize histogram ([Demo](http://inspirit.github.com/jsfeat/sample_equalize_hist.html)) * canny edges ([Demo](http://inspirit.github.com/jsfeat/sample_canny_edge.html)) + * sobel deriv ([Demo](http://inspirit.github.com/jsfeat/sample_sobel.html)) + * scharr deriv ([Demo](http://inspirit.github.com/jsfeat/sample_scharr.html)) * find more at Examples and Documentation page * Linear Algebra module * LU (Gaussian elimination) solver diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index 48bcf6f..a93d716 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=2;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(s,K,n,l){if(typeof l==="undefined"){l=0}var A=s.cols,F=s.rows,t=F<<1,z=A<<1;var E=0,v=0,u=0,m=0;var C=((n<<1)+1)|0;var p=(n+1)|0,I=(p+1)|0;var q=8192;var J=l&jsfeat.BOX_BLUR_NOSCALE?1:(16384/(C*C)+0.5)|0;var D=jsfeat.cache.get_buffer((A*F)<<2);var j=0,H=0,o=0,r=0,k=0;var G=D.i32;var g=s.data;var B=0;for(u=0;u>14;j+=G[r]-B;r++}for(;v>14;j+=G[r]-G[k];g[H+A]=(j*J+q)>>14;j+=G[r+1]-G[k+1];r+=2;k+=2}for(;v>14;j+=G[r]-G[k];r++;k++}B=G[r-1];for(;v>14;j+=B-G[k];k++}o+=F}}jsfeat.cache.put_buffer(D)},gaussian_blur:function(g,s,r,v){if(typeof v==="undefined"){v=0}if(typeof r==="undefined"){r=0}r=r==0?(Math.max(1,(4*v+1-1e-8))*2+1)|0:r;var x=r>>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ap,aL,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var aa=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aB=r[0].rows,ay=0,aH=0;var az=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(aa<<2);var t=jsfeat.cache.get_buffer((aB*(M<<1))<<2);var V=new jsfeat.matrix_t(M,aB,jsfeat.S32C2_t,t.data);var w=az.i32;var ac=s.i32;var aA=t.i32;var ab=0,I=0,aM=0,at=0,aI=0,au=0;var am=0,aF=0,aD=0,af=0,ae=0;var E=0,z=0,Y=0,W=0;var p=0,o=0,aE=0,aC=0;var Q=0,P=0,J=0,H=0,ai=0,ak=0,l=0;var d=0,A=0,O=0;var U=0,T=0,aw=0,av=0;var ah=14;var C=14;var Z=C-5;var ax=(1<<((Z)-1));var ad=(1<=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=2;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ap,aL,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var aa=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aB=r[0].rows,ay=0,aH=0;var az=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(aa<<2);var t=jsfeat.cache.get_buffer((aB*(M<<1))<<2);var V=new jsfeat.matrix_t(M,aB,jsfeat.S32C2_t,t.data);var w=az.i32;var ac=s.i32;var aA=t.i32;var ab=0,I=0,aM=0,at=0,aI=0,au=0;var am=0,aF=0,aD=0,af=0,ae=0;var E=0,z=0,Y=0,W=0;var p=0,o=0,aE=0,aC=0;var Q=0,P=0,J=0,H=0,ai=0,ak=0,l=0;var d=0,A=0,O=0;var U=0,T=0,aw=0,av=0;var ah=14;var C=14;var Z=C-5;var ax=(1<<((Z)-1));var ad=(1<=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js old mode 100755 new mode 100644 index c63f4ce..708d8b7 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -4,7 +4,6 @@ // namespace ? var jsfeat = jsfeat || { REVISION: 'ALPHA' }; - /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -223,7 +222,6 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.point2d_t = point2d_t; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -303,7 +301,6 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; cache.allocate(30, 640*4); })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -718,7 +715,6 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.math = math; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -951,7 +947,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.matmath = matmath; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -1658,7 +1654,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.linalg = linalg; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -2318,7 +2314,6 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.motion_estimator = motion_estimator; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -2727,8 +2722,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var i=0,x=0,y=0,end=0; var windowSize = ((radius << 1) + 1)|0; var radiusPlusOne = (radius + 1)|0, radiusPlus2 = (radiusPlusOne+1)|0; - var offset = 8192; - var scale = options&jsfeat.BOX_BLUR_NOSCALE ? 1 : (16384 / (windowSize*windowSize) + 0.5)|0; + var scale = options&jsfeat.BOX_BLUR_NOSCALE ? 1 : (1.0 / (windowSize*windowSize)); var tmp_buff = jsfeat.cache.get_buffer((w*h)<<2); @@ -2851,22 +2845,22 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; hold = data_i32[previousPixelIndex]; for(x = 0; x < radius; ++x, dstIndex += w) { - data_u8[dstIndex] = (sum*scale+offset)>>14; + data_u8[dstIndex] = sum*scale; sum += data_i32[nextPixelIndex]- hold; nextPixelIndex ++; } for(; x < h-radiusPlus2; x+=2, dstIndex += w2) { - data_u8[dstIndex] = (sum*scale+offset)>>14; + data_u8[dstIndex] = sum*scale; sum += data_i32[nextPixelIndex]- data_i32[previousPixelIndex]; - data_u8[dstIndex+w] = (sum*scale+offset)>>14; + data_u8[dstIndex+w] = sum*scale; sum += data_i32[nextPixelIndex+1]- data_i32[previousPixelIndex+1]; nextPixelIndex +=2; previousPixelIndex +=2; } for(; x < h-radiusPlusOne; ++x, dstIndex += w) { - data_u8[dstIndex] = (sum*scale+offset)>>14; + data_u8[dstIndex] = sum*scale; sum += data_i32[nextPixelIndex]- data_i32[previousPixelIndex]; nextPixelIndex ++; @@ -2874,7 +2868,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; } hold = data_i32[nextPixelIndex-1]; for(; x < h; ++x, dstIndex += w) { - data_u8[dstIndex] = (sum*scale+offset)>>14; + data_u8[dstIndex] = sum*scale; sum += hold- data_i32[previousPixelIndex]; previousPixelIndex ++; @@ -3441,7 +3435,6 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.imgproc = imgproc; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3781,7 +3774,6 @@ The references are: fast_corners.set_threshold(20); // set default })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -3877,7 +3869,6 @@ The references are: global.yape06 = yape06; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -4287,7 +4278,7 @@ The references are: global.yape = yape; -})(jsfeat); +})(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -4534,7 +4525,6 @@ The references are: global.optical_flow_lk = optical_flow_lk; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ * @@ -4825,7 +4815,6 @@ The references are: global.haar = haar; })(jsfeat); - /** * BBF: Brightness Binary Feature * @@ -5220,7 +5209,6 @@ The references are: global.bbf = bbf; })(jsfeat); - /** * @author Eugene Zatepyakin / http://inspirit.ru/ */ @@ -5236,4 +5224,3 @@ The references are: module.exports = lib; } })(jsfeat); - diff --git a/package.json b/package.json index 0994ffb..6484ba2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name" : "jsfeat", - "version" : "0.0.5", + "version" : "0.0.7", "description" : "JavaScript Computer Vision library", "author" : "Eugene Zatepyakin (http://www.inspirit.ru/)", "files" : "build/jsfeat.js", diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index 0c90666..340a70f 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -406,8 +406,7 @@ var i=0,x=0,y=0,end=0; var windowSize = ((radius << 1) + 1)|0; var radiusPlusOne = (radius + 1)|0, radiusPlus2 = (radiusPlusOne+1)|0; - var offset = 8192; - var scale = options&jsfeat.BOX_BLUR_NOSCALE ? 1 : (16384 / (windowSize*windowSize) + 0.5)|0; + var scale = options&jsfeat.BOX_BLUR_NOSCALE ? 1 : (1.0 / (windowSize*windowSize)); var tmp_buff = jsfeat.cache.get_buffer((w*h)<<2); @@ -530,22 +529,22 @@ hold = data_i32[previousPixelIndex]; for(x = 0; x < radius; ++x, dstIndex += w) { - data_u8[dstIndex] = (sum*scale+offset)>>14; + data_u8[dstIndex] = sum*scale; sum += data_i32[nextPixelIndex]- hold; nextPixelIndex ++; } for(; x < h-radiusPlus2; x+=2, dstIndex += w2) { - data_u8[dstIndex] = (sum*scale+offset)>>14; + data_u8[dstIndex] = sum*scale; sum += data_i32[nextPixelIndex]- data_i32[previousPixelIndex]; - data_u8[dstIndex+w] = (sum*scale+offset)>>14; + data_u8[dstIndex+w] = sum*scale; sum += data_i32[nextPixelIndex+1]- data_i32[previousPixelIndex+1]; nextPixelIndex +=2; previousPixelIndex +=2; } for(; x < h-radiusPlusOne; ++x, dstIndex += w) { - data_u8[dstIndex] = (sum*scale+offset)>>14; + data_u8[dstIndex] = sum*scale; sum += data_i32[nextPixelIndex]- data_i32[previousPixelIndex]; nextPixelIndex ++; @@ -553,7 +552,7 @@ } hold = data_i32[nextPixelIndex-1]; for(; x < h; ++x, dstIndex += w) { - data_u8[dstIndex] = (sum*scale+offset)>>14; + data_u8[dstIndex] = sum*scale; sum += hold- data_i32[previousPixelIndex]; previousPixelIndex ++; From 105da9ed4de5442e8aae8448fd3df0f8a0fda263 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Tue, 2 Sep 2014 12:28:23 +0100 Subject: [PATCH 25/46] features2d point2d->keypoint --- src/jsfeat_struct.js | 8 ++++---- src/jsfeat_yape06.js | 24 +++++++++++++++--------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/jsfeat_struct.js b/src/jsfeat_struct.js index 4d7aaf0..8b0cf6d 100755 --- a/src/jsfeat_struct.js +++ b/src/jsfeat_struct.js @@ -159,8 +159,8 @@ return pyramid_t; })(); - var point2d_t = (function () { - function point2d_t(x,y,score,level,angle) { + var keypoint_t = (function () { + function keypoint_t(x,y,score,level,angle) { if (typeof x === "undefined") { x=0; } if (typeof y === "undefined") { y=0; } if (typeof score === "undefined") { score=0; } @@ -173,7 +173,7 @@ this.level = level; this.angle = angle; } - return point2d_t; + return keypoint_t; })(); @@ -215,6 +215,6 @@ global.data_t = data_t; global.matrix_t = matrix_t; global.pyramid_t = pyramid_t; - global.point2d_t = point2d_t; + global.keypoint_t = keypoint_t; })(jsfeat); diff --git a/src/jsfeat_yape06.js b/src/jsfeat_yape06.js index 55664dd..205266d 100755 --- a/src/jsfeat_yape06.js +++ b/src/jsfeat_yape06.js @@ -12,11 +12,11 @@ var yape06 = (function() { - var compute_laplacian = function(src, dst, w, h, Dxx, Dyy) { - var y=0,x=0,yrow=(Dxx*w+Dxx)|0,row=yrow; + var compute_laplacian = function(src, dst, w, h, Dxx, Dyy, sx,sy, ex,ey) { + var y=0,x=0,yrow=(sy*w+sx)|0,row=yrow; - for(y = Dxx; y < h - Dxx; ++y, yrow+=w, row = yrow) { - for(x = Dxx; x < w - Dxx; ++x, ++row) { + for(y = sy; y < ey; ++y, yrow+=w, row = yrow) { + for(x = sx; x < ex; ++x, ++row) { dst[row] = -4 * src[row] + src[row+Dxx] + src[row-Dxx] + src[row+Dyy] + src[row-Dyy]; } } @@ -36,7 +36,8 @@ laplacian_threshold: 30, min_eigen_value_threshold: 25, - detect: function(src, points) { + detect: function(src, points, border) { + if (typeof border === "undefined") { border = 5; } var x=0,y=0; var w=src.cols, h=src.rows, srd_d=src.data; var Dxx = 5, Dyy = (5 * w)|0; @@ -48,13 +49,18 @@ var lap_thresh = this.laplacian_threshold; var eigen_thresh = this.min_eigen_value_threshold; + var sx = Math.max(5, border)|0; + var sy = Math.max(3, border)|0; + var ex = Math.min(w-5, w-border)|0; + var ey = Math.min(h-3, h-border)|0; + x = w*h; while(--x>=0) {laplacian[x]=0;} - compute_laplacian(srd_d, laplacian, w, h, Dxx, Dyy); + compute_laplacian(srd_d, laplacian, w, h, Dxx, Dyy, sx,sy, ex,ey); - row = (Dxx*w+Dxx)|0; - for(y = Dxx; y < h-Dxx; ++y, row += w) { - for(x = Dxx, rowx=row; x < w-Dxx; ++x, ++rowx) { + row = (sy*w+sx)|0; + for(y = sy; y < ey; ++y, row += w) { + for(x = sx, rowx=row; x < ex; ++x, ++rowx) { lv = laplacian[rowx]; if ((lv < -lap_thresh && From 339347c21b6302a2dbe7ce73f36218ab6979dd1a Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Thu, 28 Mar 2013 23:16:01 +0400 Subject: [PATCH 26/46] fix canny due to sobel_deriv use changed --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 3 ++- src/jsfeat_imgproc.js | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index a93d716..d3423f5 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=2;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){J=D;D=k;k=J}J=(3*(B+2))|0;while(--J>=0){P[J]=0}J=((K+2)*(B+2))|0;while(--J>=0){S[J]=0}for(;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}for(J=1;J<=K;++J,p+=z){if(J==K){G=L+B;while(--G>=L){P[G]=0}}else{for(G=0;G>31))-(v>>31))+((u^(u>>31))-(u>>31))}}Q=(p-z)|0;S[H-1]=0;I=0;for(G=0;GD){v=F[Q];u=F[Q+1];C=v^u;v=((v^(v>>31))-(v>>31))|0;u=((u^(u>>31))-(u>>31))|0;g=v*13573;T=g+((v+v)<<15);u<<=15;if(uP[N+G-1]&&M>=P[N+G+1]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{if(u>T){if(M>P[O+G]&&M>=P[L+G]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}else{C=C<0?-1:1;if(M>P[O+G-C]&&M>P[L+G+C]){if(M>k&&!I&&S[H+G-A]!=2){S[H+G]=2;I=1;q[E++]=H+G}else{S[H+G]=1}continue}}}}S[H+G]=0;I=0}S[H+B]=0;H+=A;G=O;O=N;N=L;L=G}G=H-A-1;for(J=0;J0){H=q[--E];H-=A+1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H-=2;if(S[H]==1){S[H]=2,q[E++]=H}H+=A;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}H+=1;if(S[H]==1){S[H]=2,q[E++]=H}}H=A+1;O=0;for(J=0;J0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ap,aL,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var aa=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aB=r[0].rows,ay=0,aH=0;var az=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(aa<<2);var t=jsfeat.cache.get_buffer((aB*(M<<1))<<2);var V=new jsfeat.matrix_t(M,aB,jsfeat.S32C2_t,t.data);var w=az.i32;var ac=s.i32;var aA=t.i32;var ab=0,I=0,aM=0,at=0,aI=0,au=0;var am=0,aF=0,aD=0,af=0,ae=0;var E=0,z=0,Y=0,W=0;var p=0,o=0,aE=0,aC=0;var Q=0,P=0,J=0,H=0,ai=0,ak=0,l=0;var d=0,A=0,O=0;var U=0,T=0,aw=0,av=0;var ah=14;var C=14;var Z=C-5;var ax=(1<<((Z)-1));var ad=(1<=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=2;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ap,aL,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var aa=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aB=r[0].rows,ay=0,aH=0;var az=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(aa<<2);var t=jsfeat.cache.get_buffer((aB*(M<<1))<<2);var V=new jsfeat.matrix_t(M,aB,jsfeat.S32C2_t,t.data);var w=az.i32;var ac=s.i32;var aA=t.i32;var ab=0,I=0,aM=0,at=0,aI=0,au=0;var am=0,aF=0,aD=0,af=0,ae=0;var E=0,z=0,Y=0,W=0;var p=0,o=0,aE=0,aC=0;var Q=0,P=0,J=0,H=0,ai=0,ak=0,l=0;var d=0,A=0,O=0;var U=0,T=0,aw=0,av=0;var ah=14;var C=14;var Z=C-5;var ax=(1<<((Z)-1));var ad=(1<=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index 708d8b7..be54d4c 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -3222,9 +3222,10 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var map = map_node.i32; var stack = stack_node.i32; var dxdy = dxdy_node.i32; + var dxdy_m = new jsfeat.matrix_t(w0, h0, jsfeat.S32C2_t, dxdy_node.data); var row0=1,row1=(w+2+1)|0,row2=(2*(w+2)+1)|0,map_w=(w+2)|0,map_i=(map_w+1)|0,stack_i=0; - this.sobel_derivatives(src, dxdy); + this.sobel_derivatives(src, dxdy_m); if(low_thresh > high_thresh) { i = low_thresh; diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index 340a70f..43023c1 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -906,9 +906,10 @@ var map = map_node.i32; var stack = stack_node.i32; var dxdy = dxdy_node.i32; + var dxdy_m = new jsfeat.matrix_t(w0, h0, jsfeat.S32C2_t, dxdy_node.data); var row0=1,row1=(w+2+1)|0,row2=(2*(w+2)+1)|0,map_w=(w+2)|0,map_i=(map_w+1)|0,stack_i=0; - this.sobel_derivatives(src, dxdy); + this.sobel_derivatives(src, dxdy_m); if(low_thresh > high_thresh) { i = low_thresh; From 1fc51c19e996809cd8b0c35e6417cbdcc245a0fd Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Tue, 2 Sep 2014 18:43:26 +0100 Subject: [PATCH 27/46] fix API flows --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 116 +++++++++++++++++++++++++++++++----------- src/jsfeat_imgproc.js | 66 +++++++++++++++++++----- src/jsfeat_struct.js | 18 +++++-- 4 files changed, 154 insertions(+), 48 deletions(-) diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index 4d6e607..8e47cac 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n=0&&A>=0&&q<(u-1)&&A<(z-1)){G=m-q;D=w-A;I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}},skindetector:function(o,p){var n,m,h,k;var l=o.width*o.height;while(l--){k=l*4;n=o.data[k];m=o.data[k+1];h=o.data[k+2];if((n>95)&&(m>40)&&(h>20)&&(n>m)&&(n>h)&&(n-Math.min(m,h)>15)&&(Math.abs(n-m)>15)){p[l]=255}else{p[l]=0}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m+n)|0,o=f;for(k=n;k=0){j[o]=0}d(q,j,p,v,C,f);k=(C*p+C)|0;for(n=C;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var d=new Int32Array([8,-3,9,5,4,2,7,-12,-11,9,-8,2,7,-12,12,-13,2,-13,2,12,1,-7,1,6,-2,-10,-2,-4,-13,-13,-11,-8,-13,-3,-12,-9,10,4,11,9,-13,-8,-8,-9,-11,7,-9,12,7,7,12,6,-4,-5,-3,0,-13,2,-12,-3,-9,0,-7,5,12,-6,12,-1,-3,6,-2,12,-6,-13,-4,-8,11,-13,12,-8,4,7,5,1,5,-3,10,-3,3,-7,6,12,-8,-7,-6,-2,-2,11,-1,-10,-13,12,-8,10,-7,3,-5,-3,-4,2,-3,7,-10,-12,-6,11,5,-12,6,-7,5,-6,7,-1,1,0,4,-5,9,11,11,-13,4,7,4,12,2,-1,4,4,-4,-12,-2,7,-8,-5,-7,-10,4,11,9,12,0,-8,1,-13,-13,-2,-8,2,-3,-2,-2,3,-6,9,-4,-9,8,12,10,7,0,9,1,3,7,-5,11,-10,-13,-6,-11,0,10,7,12,1,-6,-3,-6,12,10,-9,12,-4,-13,8,-8,-12,-13,0,-8,-4,3,3,7,8,5,7,10,-7,-1,7,1,-12,3,-10,5,6,2,-4,3,-10,-13,0,-13,5,-13,-7,-12,12,-13,3,-11,8,-7,12,-4,7,6,-10,12,8,-9,-1,-7,-6,-2,-5,0,12,-12,5,-7,5,3,-10,8,-13,-7,-7,-4,5,-3,-2,-1,-7,2,9,5,-11,-11,-13,-5,-13,-1,6,0,-1,5,-3,5,2,-4,-13,-4,12,-9,-6,-9,6,-12,-10,-8,-4,10,2,12,-3,7,12,12,12,-7,-13,-6,5,-4,9,-3,4,7,-1,12,2,-7,6,-5,1,-13,11,-12,5,-3,7,-2,-6,7,-8,12,-7,-13,-7,-11,-12,1,-3,12,12,2,-6,3,0,-4,3,-2,-13,-1,-13,1,9,7,1,8,-6,1,-1,3,12,9,1,12,6,-1,-9,-1,3,-13,-13,-10,5,7,7,10,12,12,-5,12,9,6,3,7,11,5,-13,6,10,2,-12,2,3,3,8,4,-6,2,6,12,-13,9,-12,10,3,-8,4,-7,9,-11,12,-4,-6,1,12,2,-8,6,-9,7,-4,2,3,3,-2,6,3,11,0,3,-3,8,-8,7,8,9,3,-11,-5,-6,-4,-10,11,-5,10,-5,-8,-3,12,-10,5,-9,0,8,-1,12,-6,4,-6,6,-11,-10,12,-8,7,4,-2,6,7,-2,0,-2,12,-5,-8,-5,2,7,-6,10,12,-9,-13,-8,-8,-5,-13,-5,-2,8,-8,9,-13,-9,-11,-9,0,1,-8,1,-2,7,-4,9,1,-2,1,-1,-4,11,-6,12,-11,-12,-9,-6,4,3,7,7,12,5,5,10,8,0,-4,2,8,-9,12,-5,-13,0,7,2,12,-1,2,1,7,5,11,7,-9,3,5,6,-8,-13,-4,-8,9,-5,9,-3,-3,-4,-7,-3,-12,6,5,8,0,-7,6,-6,12,-13,6,-5,-2,1,-10,3,10,4,1,8,-4,-2,-2,2,-13,2,-12,12,12,-2,-13,0,-6,4,1,9,3,-6,-10,-3,-5,-3,-13,-1,1,7,5,12,-11,4,-2,5,-7,-13,9,-9,-5,7,1,8,6,7,-8,7,6,-7,-4,-7,1,-8,11,-7,-8,-13,6,-12,-8,2,4,3,9,10,-5,12,3,-6,-5,-6,7,8,-3,9,-8,2,-12,2,8,-11,-2,-10,3,-12,-13,-7,-9,-11,0,-10,-5,5,-3,11,8,-2,-13,-1,12,-1,-8,0,9,-13,-11,-12,-5,-10,-2,-10,11,-3,9,-2,-13,2,-3,3,2,-9,-13,-4,0,-4,6,-3,-10,-4,12,-2,-7,-6,-11,-4,9,6,-3,6,11,-13,11,-5,5,11,11,12,6,7,-5,12,-2,-1,12,0,7,-4,-8,-3,-2,-7,1,-6,7,-13,-12,-8,-13,-7,-2,-6,-8,-8,5,-6,-9,-5,-1,-4,5,-13,7,-8,10,1,5,5,-13,1,0,10,-13,9,12,10,-1,5,-8,10,-9,-1,11,1,-13,-9,-3,-6,2,-1,-10,1,12,-13,1,-8,-10,8,-11,10,-6,2,-13,3,-6,7,-13,12,-9,-10,-10,-5,-7,-10,-8,-8,-13,4,-6,8,5,3,12,8,-13,-4,2,-3,-3,5,-13,10,-12,4,-13,5,-1,-9,9,-4,3,0,3,3,-9,-12,1,-6,1,3,2,4,-8,-10,-10,-10,9,8,-13,12,12,-8,-12,-6,-5,2,2,3,7,10,6,11,-8,6,8,8,-12,-7,10,-6,5,-3,-9,-3,9,-1,-13,-1,5,-3,-7,-3,4,-8,-2,-8,3,4,2,12,12,2,-5,3,11,6,-9,11,-13,3,-1,7,12,11,-1,12,4,-3,0,-3,6,4,-11,4,12,2,-4,2,1,-10,-6,-8,1,-13,7,-11,1,-13,12,-11,-13,6,0,11,-13,0,-1,1,4,-13,3,-9,-2,-9,8,-6,-3,-13,-6,-8,-2,5,-9,8,10,2,7,3,-9,-1,-6,-1,-1,9,5,11,-2,11,-3,12,-8,3,0,3,5,-1,4,0,10,3,-6,4,5,-13,0,-10,5,5,8,12,11,8,9,9,-6,7,-4,8,-12,-10,4,-10,9,7,3,12,4,9,-7,10,-2,7,0,12,-2,-1,-6,0,-11]);var c=new jsfeat.matrix_t(3,3,jsfeat.F32_t|jsfeat.C1_t);var f=new jsfeat.matrix_t(32,32,jsfeat.U8_t|jsfeat.C1_t);var e=function(l,n,k,i,h,j){var m=Math.cos(k);var g=Math.sin(k);c.data[0]=m,c.data[1]=-g,c.data[2]=(-m+g)*j*0.5+i,c.data[3]=g,c.data[4]=m,c.data[5]=(-g-m)*j*0.5+h;jsfeat.imgproc.warp_affine(l,n,c,128)};return{describe:function(j,u,g,B){var r=32;var x=0,A=0,q=0,p=0,z=0;var o=0,m=0,D=0;var C=j.data,n=j.cols,y=j.rows;var t=f.data;var v=16*32+16;var k=0;if(!(B.type&jsfeat.U8_t)){B.type=jsfeat.U8_t;B.cols=r;B.rows=g;B.channel=1;B.allocate()}else{B.resize(r,g,1)}var l=B.data;var s=0;for(x=0;x=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(r){var o=1.192092896e-7;var l=1e-37;var m=256,i=512,h=1024,x=2048,w=4096;var A=1,n=2,b=3,p=4;var z=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var y=(function(){return function(B){return(B&65280)}})();var k=(function(){return function(B){return(B&255)}})();var c=(function(){return function(B){return z[(B&65280)>>8]}})();var a=0;var f=1;var e=2;var u=3;var d=1;var s=1;var g=2;var v=(function(){function B(D,C){this.size=((D+7)|0)&-8;if(typeof C==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=C;this.size=C.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return B})();var q=(function(){function B(F,D,E,C){this.type=y(E)|0;this.channel=k(E)|0;this.cols=F|0;this.rows=D|0;if(typeof C==="undefined"){this.allocate()}else{this.buffer=C;this.data=this.type&m?this.buffer.u8:(this.type&i?this.buffer.i32:(this.type&h?this.buffer.f32:this.buffer.f64))}}B.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new v((this.cols*c(this.type)*this.channel)*this.rows);this.data=this.type&m?this.buffer.u8:(this.type&i?this.buffer.i32:(this.type&h?this.buffer.f32:this.buffer.f64))};B.prototype.copy_to=function(D){var C=D.data,G=this.data;var E=0,F=(this.cols*this.rows*this.channel)|0;for(;Ethis.buffer.size){this.cols=F;this.rows=D;this.channel=C;this.allocate()}else{this.cols=F;this.rows=D;this.channel=C}};return B})();var t=(function(){function B(C){this.levels=C|0;this.data=new Array(C);this.pyrdown=jsfeat.imgproc.pyrdown}B.prototype.allocate=function(C,E,F){var D=this.levels;while(--D>=0){this.data[D]=new q(C>>D,E>>D,F)}};B.prototype.build=function(F,E){if(typeof E==="undefined"){E=true}var H=2,D=F,C=this.data[0];if(!E){var G=F.cols*F.rows;while(--G>=0){C.data[G]=F.data[G]}}C=this.data[1];this.pyrdown(D,C);for(;Hh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;t[u+1]=(n[m+o]*s+n[m+o+1]*B+n[m+o+2]*C+8192)>>14;t[u+2]=(n[m+l]*s+n[m+l+1]*B+n[m+l+2]*C+8192)>>14;t[u+3]=(n[m+k]*s+n[m+k+1]*B+n[m+k+2]*C+8192)>>14}for(;q>14}}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){m.resize(i,k,l.channel);if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;J.resize(z,E,r.channel);for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;s.resize(t,p,g.channel);var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;A.resize(p,l,k.channel);var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;G.resize(p,s,2);var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data;r.resize(s,q,j.channel);var l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n=0&&A>=0&&q<(u-1)&&A<(z-1)){G=m-q;D=w-A;I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}},skindetector:function(o,p){var n,m,h,k;var l=o.width*o.height;while(l--){k=l*4;n=o.data[k];m=o.data[k+1];h=o.data[k+2];if((n>95)&&(m>40)&&(h>20)&&(n>m)&&(n>h)&&(n-Math.min(m,h)>15)&&(Math.abs(n-m)>15)){p[l]=255}else{p[l]=0}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,l,q,i,r,g,p,n,k,j){var m=0,o=0,f=(n*q+p)|0,s=f;for(m=n;m=0){j[o]=0}d(q,j,p,B,H,f,t,s,E,C);k=(s*p+t)|0;for(n=s;nF&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,H,f,G,g);if(r>D){v=A[u];v.x=o,v.y=n,v.score=r;++u;++o,++m}}}}jsfeat.cache.put_buffer(e);return u}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var d=new Int32Array([8,-3,9,5,4,2,7,-12,-11,9,-8,2,7,-12,12,-13,2,-13,2,12,1,-7,1,6,-2,-10,-2,-4,-13,-13,-11,-8,-13,-3,-12,-9,10,4,11,9,-13,-8,-8,-9,-11,7,-9,12,7,7,12,6,-4,-5,-3,0,-13,2,-12,-3,-9,0,-7,5,12,-6,12,-1,-3,6,-2,12,-6,-13,-4,-8,11,-13,12,-8,4,7,5,1,5,-3,10,-3,3,-7,6,12,-8,-7,-6,-2,-2,11,-1,-10,-13,12,-8,10,-7,3,-5,-3,-4,2,-3,7,-10,-12,-6,11,5,-12,6,-7,5,-6,7,-1,1,0,4,-5,9,11,11,-13,4,7,4,12,2,-1,4,4,-4,-12,-2,7,-8,-5,-7,-10,4,11,9,12,0,-8,1,-13,-13,-2,-8,2,-3,-2,-2,3,-6,9,-4,-9,8,12,10,7,0,9,1,3,7,-5,11,-10,-13,-6,-11,0,10,7,12,1,-6,-3,-6,12,10,-9,12,-4,-13,8,-8,-12,-13,0,-8,-4,3,3,7,8,5,7,10,-7,-1,7,1,-12,3,-10,5,6,2,-4,3,-10,-13,0,-13,5,-13,-7,-12,12,-13,3,-11,8,-7,12,-4,7,6,-10,12,8,-9,-1,-7,-6,-2,-5,0,12,-12,5,-7,5,3,-10,8,-13,-7,-7,-4,5,-3,-2,-1,-7,2,9,5,-11,-11,-13,-5,-13,-1,6,0,-1,5,-3,5,2,-4,-13,-4,12,-9,-6,-9,6,-12,-10,-8,-4,10,2,12,-3,7,12,12,12,-7,-13,-6,5,-4,9,-3,4,7,-1,12,2,-7,6,-5,1,-13,11,-12,5,-3,7,-2,-6,7,-8,12,-7,-13,-7,-11,-12,1,-3,12,12,2,-6,3,0,-4,3,-2,-13,-1,-13,1,9,7,1,8,-6,1,-1,3,12,9,1,12,6,-1,-9,-1,3,-13,-13,-10,5,7,7,10,12,12,-5,12,9,6,3,7,11,5,-13,6,10,2,-12,2,3,3,8,4,-6,2,6,12,-13,9,-12,10,3,-8,4,-7,9,-11,12,-4,-6,1,12,2,-8,6,-9,7,-4,2,3,3,-2,6,3,11,0,3,-3,8,-8,7,8,9,3,-11,-5,-6,-4,-10,11,-5,10,-5,-8,-3,12,-10,5,-9,0,8,-1,12,-6,4,-6,6,-11,-10,12,-8,7,4,-2,6,7,-2,0,-2,12,-5,-8,-5,2,7,-6,10,12,-9,-13,-8,-8,-5,-13,-5,-2,8,-8,9,-13,-9,-11,-9,0,1,-8,1,-2,7,-4,9,1,-2,1,-1,-4,11,-6,12,-11,-12,-9,-6,4,3,7,7,12,5,5,10,8,0,-4,2,8,-9,12,-5,-13,0,7,2,12,-1,2,1,7,5,11,7,-9,3,5,6,-8,-13,-4,-8,9,-5,9,-3,-3,-4,-7,-3,-12,6,5,8,0,-7,6,-6,12,-13,6,-5,-2,1,-10,3,10,4,1,8,-4,-2,-2,2,-13,2,-12,12,12,-2,-13,0,-6,4,1,9,3,-6,-10,-3,-5,-3,-13,-1,1,7,5,12,-11,4,-2,5,-7,-13,9,-9,-5,7,1,8,6,7,-8,7,6,-7,-4,-7,1,-8,11,-7,-8,-13,6,-12,-8,2,4,3,9,10,-5,12,3,-6,-5,-6,7,8,-3,9,-8,2,-12,2,8,-11,-2,-10,3,-12,-13,-7,-9,-11,0,-10,-5,5,-3,11,8,-2,-13,-1,12,-1,-8,0,9,-13,-11,-12,-5,-10,-2,-10,11,-3,9,-2,-13,2,-3,3,2,-9,-13,-4,0,-4,6,-3,-10,-4,12,-2,-7,-6,-11,-4,9,6,-3,6,11,-13,11,-5,5,11,11,12,6,7,-5,12,-2,-1,12,0,7,-4,-8,-3,-2,-7,1,-6,7,-13,-12,-8,-13,-7,-2,-6,-8,-8,5,-6,-9,-5,-1,-4,5,-13,7,-8,10,1,5,5,-13,1,0,10,-13,9,12,10,-1,5,-8,10,-9,-1,11,1,-13,-9,-3,-6,2,-1,-10,1,12,-13,1,-8,-10,8,-11,10,-6,2,-13,3,-6,7,-13,12,-9,-10,-10,-5,-7,-10,-8,-8,-13,4,-6,8,5,3,12,8,-13,-4,2,-3,-3,5,-13,10,-12,4,-13,5,-1,-9,9,-4,3,0,3,3,-9,-12,1,-6,1,3,2,4,-8,-10,-10,-10,9,8,-13,12,12,-8,-12,-6,-5,2,2,3,7,10,6,11,-8,6,8,8,-12,-7,10,-6,5,-3,-9,-3,9,-1,-13,-1,5,-3,-7,-3,4,-8,-2,-8,3,4,2,12,12,2,-5,3,11,6,-9,11,-13,3,-1,7,12,11,-1,12,4,-3,0,-3,6,4,-11,4,12,2,-4,2,1,-10,-6,-8,1,-13,7,-11,1,-13,12,-11,-13,6,0,11,-13,0,-1,1,4,-13,3,-9,-2,-9,8,-6,-3,-13,-6,-8,-2,5,-9,8,10,2,7,3,-9,-1,-6,-1,-1,9,5,11,-2,11,-3,12,-8,3,0,3,5,-1,4,0,10,3,-6,4,5,-13,0,-10,5,5,8,12,11,8,9,9,-6,7,-4,8,-12,-10,4,-10,9,7,3,12,4,9,-7,10,-2,7,0,12,-2,-1,-6,0,-11]);var c=new jsfeat.matrix_t(3,3,jsfeat.F32_t|jsfeat.C1_t);var f=new jsfeat.matrix_t(32,32,jsfeat.U8_t|jsfeat.C1_t);var e=function(l,n,k,i,h,j){var m=Math.cos(k);var g=Math.sin(k);c.data[0]=m,c.data[1]=-g,c.data[2]=(-m+g)*j*0.5+i,c.data[3]=g,c.data[4]=m,c.data[5]=(-g-m)*j*0.5+h;jsfeat.imgproc.warp_affine(l,n,c,128)};return{describe:function(j,u,g,B){var r=32;var x=0,A=0,q=0,p=0,z=0;var o=0,m=0,D=0;var C=j.data,n=j.cols,y=j.rows;var t=f.data;var v=16*32+16;var k=0;if(!(B.type&jsfeat.U8_t)){B.type=jsfeat.U8_t;B.cols=r;B.rows=g;B.channel=1;B.allocate()}else{B.resize(r,g,1)}var l=B.data;var s=0;for(x=0;x=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index 6f7bf4a..5618d41 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -49,6 +49,12 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; } })(); + // color conversion + var COLOR_RGBA2GRAY = 0; + var COLOR_RGB2GRAY = 1; + var COLOR_BGRA2GRAY = 2; + var COLOR_BGR2GRAY = 3; + // box blur option var BOX_BLUR_NOSCALE = 0x01; // svd options @@ -111,9 +117,9 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; } matrix_t.prototype.resize = function(c, r, ch) { if (typeof ch === "undefined") { ch = this.channel; } - // change buffer only if new size doesnt fit - var new_size = (c * ch) * r; - if(new_size > this.rows*this.cols*this.channel) { + // relocate buffer only if new size doesnt fit + var new_size = (c * get_data_type_size(this.type) * ch) * r; + if(new_size > this.buffer.size) { this.cols = c; this.rows = r; this.channel = ch; @@ -165,8 +171,8 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; return pyramid_t; })(); - var point2d_t = (function () { - function point2d_t(x,y,score,level,angle) { + var keypoint_t = (function () { + function keypoint_t(x,y,score,level,angle) { if (typeof x === "undefined") { x=0; } if (typeof y === "undefined") { y=0; } if (typeof score === "undefined") { score=0; } @@ -179,7 +185,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; this.level = level; this.angle = angle; } - return point2d_t; + return keypoint_t; })(); @@ -209,6 +215,12 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.EPSILON = EPSILON; global.FLT_MIN = FLT_MIN; + // color convert + global.COLOR_RGBA2GRAY = COLOR_RGBA2GRAY; + global.COLOR_RGB2GRAY = COLOR_RGB2GRAY; + global.COLOR_BGRA2GRAY = COLOR_BGRA2GRAY; + global.COLOR_BGR2GRAY = COLOR_BGR2GRAY; + // options global.BOX_BLUR_NOSCALE = BOX_BLUR_NOSCALE; global.SVD_U_T = SVD_U_T; @@ -221,7 +233,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.data_t = data_t; global.matrix_t = matrix_t; global.pyramid_t = pyramid_t; - global.point2d_t = point2d_t; + global.keypoint_t = keypoint_t; })(jsfeat); /** @@ -2672,25 +2684,41 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; return { // TODO: add support for RGB/BGR order // for raw arrays - grayscale: function(src, dst) { - var srcLength = src.length|0, srcLength_16 = (srcLength - 16)|0; - var j = 0; - var coeff_r = 4899, coeff_g = 9617, coeff_b = 1868; - - for (var i = 0; i <= srcLength_16; i += 16, j += 4) { - dst[j] = (src[i] * coeff_r + src[i+1] * coeff_g + src[i+2] * coeff_b + 8192) >> 14; - dst[j + 1] = (src[i+4] * coeff_r + src[i+5] * coeff_g + src[i+6] * coeff_b + 8192) >> 14; - dst[j + 2] = (src[i+8] * coeff_r + src[i+9] * coeff_g + src[i+10] * coeff_b + 8192) >> 14; - dst[j + 3] = (src[i+12] * coeff_r + src[i+13] * coeff_g + src[i+14] * coeff_b + 8192) >> 14; + grayscale: function(src, w, h, dst, code) { + // this is default image data representation in browser + if (typeof code === "undefined") { code = jsfeat.COLOR_RGBA2GRAY; } + var x=0, y=0, i=0, j=0, ir=0,jr=0; + var coeff_r = 4899, coeff_g = 9617, coeff_b = 1868, cn = 4; + + if(code == jsfeat.COLOR_BGRA2GRAY || code == jsfeat.COLOR_BGR2GRAY) { + coeff_r = 1868; + coeff_b = 4899; } - for (; i < srcLength; i += 4, ++j) { - dst[j] = (src[i] * coeff_r + src[i+1] * coeff_g + src[i+2] * coeff_b + 8192) >> 14; + if(code == jsfeat.COLOR_RGB2GRAY || code == jsfeat.COLOR_BGR2GRAY) { + cn = 3; + } + var cn2 = cn<<1, cn3 = (cn*3)|0; + + dst.resize(w, h, 1); + var dst_u8 = dst.data; + + for(y = 0; y < h; ++y, j+=w, i+=w*cn) { + for(x = 0, ir = i, jr = j; x <= w-4; x+=4, ir+=cn<<2, jr+=4) { + dst_u8[jr] = (src[ir] * coeff_r + src[ir+1] * coeff_g + src[ir+2] * coeff_b + 8192) >> 14; + dst_u8[jr + 1] = (src[ir+cn] * coeff_r + src[ir+cn+1] * coeff_g + src[ir+cn+2] * coeff_b + 8192) >> 14; + dst_u8[jr + 2] = (src[ir+cn2] * coeff_r + src[ir+cn2+1] * coeff_g + src[ir+cn2+2] * coeff_b + 8192) >> 14; + dst_u8[jr + 3] = (src[ir+cn3] * coeff_r + src[ir+cn3+1] * coeff_g + src[ir+cn3+2] * coeff_b + 8192) >> 14; + } + for (; x < w; ++x, ++jr, ir+=cn) { + dst_u8[jr] = (src[ir] * coeff_r + src[ir+1] * coeff_g + src[ir+2] * coeff_b + 8192) >> 14; + } } }, // derived from CCV library resample: function(src, dst, nw, nh) { var h=src.rows,w=src.cols; if (h > nh && w > nw) { + dst.resize(nw, nh, src.channel); // using the fast alternative (fix point scale, 0x100 to avoid overflow) if (src.type&jsfeat.U8_t && dst.type&jsfeat.U8_t && h * w / (nh * nw) < 0x100) { _resample_u8(src, dst, nw, nh); @@ -2715,6 +2743,8 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var data_u8 = src.data; var hold=0; + dst.resize(w, h, src.channel); + // first pass // no need to scale //data_u8 = src.data; @@ -2872,6 +2902,9 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var half_kernel = kernel_size >> 1; var w = src.cols, h = src.rows; var data_type = src.type, is_u8 = data_type&jsfeat.U8_t; + + dst.resize(w, h, src.channel); + var src_d = src.data, dst_d = dst.data; var buf,filter,buf_sz=(kernel_size + Math.max(h, w))|0; @@ -2910,6 +2943,9 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var w2 = w >> 1, h2 = h >> 1; var _w2 = w2 - (sx << 1), _h2 = h2 - (sy << 1); var x=0,y=0,sptr=sx+sy*w,sline=0,dptr=0,dline=0; + + dst.resize(w2, h2, src.channel); + var src_d = src.data, dst_d = dst.data; for(y = 0; y < _h2; ++y) { @@ -2936,6 +2972,9 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; var srow0=0,srow1=0,srow2=0,drow=0; var trow0,trow1; + + dst.resize(w, h, 2); // 2 channel output gx, gy + var img = src.data, gxgy=dst.data; var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); @@ -3002,6 +3041,9 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; var srow0=0,srow1=0,srow2=0,drow=0; var trow0,trow1; + + dst.resize(w, h, 2); // 2 channel output gx, gy + var img = src.data, gxgy=dst.data; var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); @@ -3168,7 +3210,11 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; } }, equalize_histogram: function(src, dst) { - var w=src.cols,h=src.rows,src_d=src.data,dst_d=dst.data,size=w*h; + var w=src.cols,h=src.rows,src_d=src.data; + + dst.resize(w, h, src.channel); + + var dst_d=dst.data,size=w*h; var i=0,prev=0,hist0,norm; var hist0_node = jsfeat.cache.get_buffer(256<<2); @@ -3191,7 +3237,11 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; }, canny: function(src, dst, low_thresh, high_thresh) { - var w=src.cols,h=src.rows,src_d=src.data,dst_d=dst.data; + var w=src.cols,h=src.rows,src_d=src.data; + + dst.resize(w, h, src.channel); + + var dst_d=dst.data; var i=0,j=0,grad=0,w2=w<<1,_grad=0,suppress=0,f=0,x=0,y=0,s=0; var tg22x=0,tg67x=0; @@ -3709,11 +3759,11 @@ The references are: var yape06 = (function() { - var compute_laplacian = function(src, dst, w, h, Dxx, Dyy) { - var y=0,x=0,yrow=(Dxx*w+Dxx)|0,row=yrow; + var compute_laplacian = function(src, dst, w, h, Dxx, Dyy, sx,sy, ex,ey) { + var y=0,x=0,yrow=(sy*w+sx)|0,row=yrow; - for(y = Dxx; y < h - Dxx; ++y, yrow+=w, row = yrow) { - for(x = Dxx; x < w - Dxx; ++x, ++row) { + for(y = sy; y < ey; ++y, yrow+=w, row = yrow) { + for(x = sx; x < ex; ++x, ++row) { dst[row] = -4 * src[row] + src[row+Dxx] + src[row-Dxx] + src[row+Dyy] + src[row-Dyy]; } } @@ -3733,7 +3783,8 @@ The references are: laplacian_threshold: 30, min_eigen_value_threshold: 25, - detect: function(src, points) { + detect: function(src, points, border) { + if (typeof border === "undefined") { border = 5; } var x=0,y=0; var w=src.cols, h=src.rows, srd_d=src.data; var Dxx = 5, Dyy = (5 * w)|0; @@ -3745,13 +3796,18 @@ The references are: var lap_thresh = this.laplacian_threshold; var eigen_thresh = this.min_eigen_value_threshold; + var sx = Math.max(5, border)|0; + var sy = Math.max(3, border)|0; + var ex = Math.min(w-5, w-border)|0; + var ey = Math.min(h-3, h-border)|0; + x = w*h; while(--x>=0) {laplacian[x]=0;} - compute_laplacian(srd_d, laplacian, w, h, Dxx, Dyy); + compute_laplacian(srd_d, laplacian, w, h, Dxx, Dyy, sx,sy, ex,ey); - row = (Dxx*w+Dxx)|0; - for(y = Dxx; y < h-Dxx; ++y, row += w) { - for(x = Dxx, rowx=row; x < w-Dxx; ++x, ++rowx) { + row = (sy*w+sx)|0; + for(y = sy; y < ey; ++y, row += w) { + for(x = sx, rowx=row; x < ex; ++x, ++rowx) { lv = laplacian[rowx]; if ((lv < -lap_thresh && diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index e50b00c..e804760 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -372,25 +372,41 @@ return { // TODO: add support for RGB/BGR order // for raw arrays - grayscale: function(src, dst) { - var srcLength = src.length|0, srcLength_16 = (srcLength - 16)|0; - var j = 0; - var coeff_r = 4899, coeff_g = 9617, coeff_b = 1868; - - for (var i = 0; i <= srcLength_16; i += 16, j += 4) { - dst[j] = (src[i] * coeff_r + src[i+1] * coeff_g + src[i+2] * coeff_b + 8192) >> 14; - dst[j + 1] = (src[i+4] * coeff_r + src[i+5] * coeff_g + src[i+6] * coeff_b + 8192) >> 14; - dst[j + 2] = (src[i+8] * coeff_r + src[i+9] * coeff_g + src[i+10] * coeff_b + 8192) >> 14; - dst[j + 3] = (src[i+12] * coeff_r + src[i+13] * coeff_g + src[i+14] * coeff_b + 8192) >> 14; + grayscale: function(src, w, h, dst, code) { + // this is default image data representation in browser + if (typeof code === "undefined") { code = jsfeat.COLOR_RGBA2GRAY; } + var x=0, y=0, i=0, j=0, ir=0,jr=0; + var coeff_r = 4899, coeff_g = 9617, coeff_b = 1868, cn = 4; + + if(code == jsfeat.COLOR_BGRA2GRAY || code == jsfeat.COLOR_BGR2GRAY) { + coeff_r = 1868; + coeff_b = 4899; } - for (; i < srcLength; i += 4, ++j) { - dst[j] = (src[i] * coeff_r + src[i+1] * coeff_g + src[i+2] * coeff_b + 8192) >> 14; + if(code == jsfeat.COLOR_RGB2GRAY || code == jsfeat.COLOR_BGR2GRAY) { + cn = 3; + } + var cn2 = cn<<1, cn3 = (cn*3)|0; + + dst.resize(w, h, 1); + var dst_u8 = dst.data; + + for(y = 0; y < h; ++y, j+=w, i+=w*cn) { + for(x = 0, ir = i, jr = j; x <= w-4; x+=4, ir+=cn<<2, jr+=4) { + dst_u8[jr] = (src[ir] * coeff_r + src[ir+1] * coeff_g + src[ir+2] * coeff_b + 8192) >> 14; + dst_u8[jr + 1] = (src[ir+cn] * coeff_r + src[ir+cn+1] * coeff_g + src[ir+cn+2] * coeff_b + 8192) >> 14; + dst_u8[jr + 2] = (src[ir+cn2] * coeff_r + src[ir+cn2+1] * coeff_g + src[ir+cn2+2] * coeff_b + 8192) >> 14; + dst_u8[jr + 3] = (src[ir+cn3] * coeff_r + src[ir+cn3+1] * coeff_g + src[ir+cn3+2] * coeff_b + 8192) >> 14; + } + for (; x < w; ++x, ++jr, ir+=cn) { + dst_u8[jr] = (src[ir] * coeff_r + src[ir+1] * coeff_g + src[ir+2] * coeff_b + 8192) >> 14; + } } }, // derived from CCV library resample: function(src, dst, nw, nh) { var h=src.rows,w=src.cols; if (h > nh && w > nw) { + dst.resize(nw, nh, src.channel); // using the fast alternative (fix point scale, 0x100 to avoid overflow) if (src.type&jsfeat.U8_t && dst.type&jsfeat.U8_t && h * w / (nh * nw) < 0x100) { _resample_u8(src, dst, nw, nh); @@ -415,6 +431,8 @@ var data_u8 = src.data; var hold=0; + dst.resize(w, h, src.channel); + // first pass // no need to scale //data_u8 = src.data; @@ -572,6 +590,9 @@ var half_kernel = kernel_size >> 1; var w = src.cols, h = src.rows; var data_type = src.type, is_u8 = data_type&jsfeat.U8_t; + + dst.resize(w, h, src.channel); + var src_d = src.data, dst_d = dst.data; var buf,filter,buf_sz=(kernel_size + Math.max(h, w))|0; @@ -610,6 +631,9 @@ var w2 = w >> 1, h2 = h >> 1; var _w2 = w2 - (sx << 1), _h2 = h2 - (sy << 1); var x=0,y=0,sptr=sx+sy*w,sline=0,dptr=0,dline=0; + + dst.resize(w2, h2, src.channel); + var src_d = src.data, dst_d = dst.data; for(y = 0; y < _h2; ++y) { @@ -636,6 +660,9 @@ var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; var srow0=0,srow1=0,srow2=0,drow=0; var trow0,trow1; + + dst.resize(w, h, 2); // 2 channel output gx, gy + var img = src.data, gxgy=dst.data; var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); @@ -702,6 +729,9 @@ var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; var srow0=0,srow1=0,srow2=0,drow=0; var trow0,trow1; + + dst.resize(w, h, 2); // 2 channel output gx, gy + var img = src.data, gxgy=dst.data; var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); @@ -868,7 +898,11 @@ } }, equalize_histogram: function(src, dst) { - var w=src.cols,h=src.rows,src_d=src.data,dst_d=dst.data,size=w*h; + var w=src.cols,h=src.rows,src_d=src.data; + + dst.resize(w, h, src.channel); + + var dst_d=dst.data,size=w*h; var i=0,prev=0,hist0,norm; var hist0_node = jsfeat.cache.get_buffer(256<<2); @@ -891,7 +925,11 @@ }, canny: function(src, dst, low_thresh, high_thresh) { - var w=src.cols,h=src.rows,src_d=src.data,dst_d=dst.data; + var w=src.cols,h=src.rows,src_d=src.data; + + dst.resize(w, h, src.channel); + + var dst_d=dst.data; var i=0,j=0,grad=0,w2=w<<1,_grad=0,suppress=0,f=0,x=0,y=0,s=0; var tg22x=0,tg67x=0; diff --git a/src/jsfeat_struct.js b/src/jsfeat_struct.js index 8b0cf6d..c7cbbcc 100755 --- a/src/jsfeat_struct.js +++ b/src/jsfeat_struct.js @@ -43,6 +43,12 @@ } })(); + // color conversion + var COLOR_RGBA2GRAY = 0; + var COLOR_RGB2GRAY = 1; + var COLOR_BGRA2GRAY = 2; + var COLOR_BGR2GRAY = 3; + // box blur option var BOX_BLUR_NOSCALE = 0x01; // svd options @@ -105,9 +111,9 @@ } matrix_t.prototype.resize = function(c, r, ch) { if (typeof ch === "undefined") { ch = this.channel; } - // change buffer only if new size doesnt fit - var new_size = (c * ch) * r; - if(new_size > this.rows*this.cols*this.channel) { + // relocate buffer only if new size doesnt fit + var new_size = (c * get_data_type_size(this.type) * ch) * r; + if(new_size > this.buffer.size) { this.cols = c; this.rows = r; this.channel = ch; @@ -203,6 +209,12 @@ global.EPSILON = EPSILON; global.FLT_MIN = FLT_MIN; + // color convert + global.COLOR_RGBA2GRAY = COLOR_RGBA2GRAY; + global.COLOR_RGB2GRAY = COLOR_RGB2GRAY; + global.COLOR_BGRA2GRAY = COLOR_BGRA2GRAY; + global.COLOR_BGR2GRAY = COLOR_BGR2GRAY; + // options global.BOX_BLUR_NOSCALE = BOX_BLUR_NOSCALE; global.SVD_U_T = SVD_U_T; From 2eed4d08e38fa866e866cc15cf6cc5d79f888294 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Mon, 8 Apr 2013 20:22:38 +0400 Subject: [PATCH 28/46] gauss overflow fix and SVD improve --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 63 +++++++++++++++---------------------------- src/jsfeat_imgproc.js | 2 +- src/jsfeat_linalg.js | 61 +++++++++++++++-------------------------- 4 files changed, 45 insertions(+), 83 deletions(-) diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index d3423f5..f0caecf 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N0&&g[V]>0){U=2;H=Y*D[K]+O*D[J];G=-O*D[K]+Y*D[J];D[K]=H;D[J]=G;H=Y*D[K+1]+O*D[J+1];G=-O*D[K+1]+Y*D[J+1];D[K+1]=H;D[J+1]=G;for(;U>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.u8;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ap,aL,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var aa=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aB=r[0].rows,ay=0,aH=0;var az=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(aa<<2);var t=jsfeat.cache.get_buffer((aB*(M<<1))<<2);var V=new jsfeat.matrix_t(M,aB,jsfeat.S32C2_t,t.data);var w=az.i32;var ac=s.i32;var aA=t.i32;var ab=0,I=0,aM=0,at=0,aI=0,au=0;var am=0,aF=0,aD=0,af=0,ae=0;var E=0,z=0,Y=0,W=0;var p=0,o=0,aE=0,aC=0;var Q=0,P=0,J=0,H=0,ai=0,ak=0,l=0;var d=0,A=0,O=0;var U=0,T=0,aw=0,av=0;var ah=14;var C=14;var Z=C-5;var ax=(1<<((Z)-1));var ad=(1<=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ap,aL,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var aa=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aB=r[0].rows,ay=0,aH=0;var az=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(aa<<2);var t=jsfeat.cache.get_buffer((aB*(M<<1))<<2);var V=new jsfeat.matrix_t(M,aB,jsfeat.S32C2_t,t.data);var w=az.i32;var ac=s.i32;var aA=t.i32;var ab=0,I=0,aM=0,at=0,aI=0,au=0;var am=0,aF=0,aD=0,af=0,ae=0;var E=0,z=0,Y=0,W=0;var p=0,o=0,aE=0,aC=0;var Q=0,P=0,J=0,H=0,ai=0,ak=0,l=0;var d=0,A=0,O=0;var U=0,T=0,aw=0,av=0;var ah=14;var C=14;var Z=C-5;var ax=(1<<((Z)-1));var ad=(1<=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index be54d4c..5f824d1 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -1179,58 +1179,39 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; p *= 2.0; beta = a - b, gamma = hypot(p, beta); - if(beta < 0) { + if( beta < 0 ) { delta = (gamma - beta)*0.5; s = Math.sqrt(delta/gamma); c = (p/(gamma*s*2.0)); } else { c = Math.sqrt((gamma + beta)/(gamma*2.0)); s = (p/(gamma*c*2.0)); - delta = p*p*0.5/(gamma + beta); } - W[i] += delta; - W[j] -= delta; + a=0.0, b=0.0; - if( (iter & 1) && W[i] > 0 && W[j] > 0 ) { - k = 2;//unroll 2x2 - t0 = c*At[Ai] + s*At[Aj]; - t1 = -s*At[Ai] + c*At[Aj]; - At[Ai] = t0; At[Aj] = t1; - - t0 = c*At[Ai+1] + s*At[Aj+1]; - t1 = -s*At[Ai+1] + c*At[Aj+1]; - At[Ai+1] = t0; At[Aj+1] = t1; - - for(; k < m; k++) { - t0 = c*At[Ai+k] + s*At[Aj+k]; - t1 = -s*At[Ai+k] + c*At[Aj+k]; - At[Ai+k] = t0; At[Aj+k] = t1; - } - } else { - a = b = 0; - k = 2; // unroll - t0 = c*At[Ai] + s*At[Aj]; - t1 = -s*At[Ai] + c*At[Aj]; - At[Ai] = t0; At[Aj] = t1; - a += t0*t0; b += t1*t1; - - t0 = c*At[Ai+1] + s*At[Aj+1]; - t1 = -s*At[Ai+1] + c*At[Aj+1]; - At[Ai+1] = t0; At[Aj+1] = t1; + k = 2; // unroll + t0 = c*At[Ai] + s*At[Aj]; + t1 = -s*At[Ai] + c*At[Aj]; + At[Ai] = t0; At[Aj] = t1; + a += t0*t0; b += t1*t1; + + t0 = c*At[Ai+1] + s*At[Aj+1]; + t1 = -s*At[Ai+1] + c*At[Aj+1]; + At[Ai+1] = t0; At[Aj+1] = t1; + a += t0*t0; b += t1*t1; + + for( ; k < m; k++ ) + { + t0 = c*At[Ai+k] + s*At[Aj+k]; + t1 = -s*At[Ai+k] + c*At[Aj+k]; + At[Ai+k] = t0; At[Aj+k] = t1; + a += t0*t0; b += t1*t1; - - for( ; k < m; k++ ) - { - t0 = c*At[Ai+k] + s*At[Aj+k]; - t1 = -s*At[Ai+k] + c*At[Aj+k]; - At[Ai+k] = t0; At[Aj+k] = t1; - - a += t0*t0; b += t1*t1; - } - W[i] = a; W[j] = b; } + W[i] = a; W[j] = b; + changed = 1; if(Vt) { @@ -2895,7 +2876,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var filt_node = jsfeat.cache.get_buffer(kernel_size<<2); if(is_u8) { - buf = buf_node.u8; + buf = buf_node.i32; filter = filt_node.i32; } else if(data_type&jsfeat.S32_t) { buf = buf_node.i32; diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index 43023c1..c56d0f5 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -579,7 +579,7 @@ var filt_node = jsfeat.cache.get_buffer(kernel_size<<2); if(is_u8) { - buf = buf_node.u8; + buf = buf_node.i32; filter = filt_node.i32; } else if(data_type&jsfeat.S32_t) { buf = buf_node.i32; diff --git a/src/jsfeat_linalg.js b/src/jsfeat_linalg.js index 1fb6f50..a695b3e 100755 --- a/src/jsfeat_linalg.js +++ b/src/jsfeat_linalg.js @@ -229,58 +229,39 @@ p *= 2.0; beta = a - b, gamma = hypot(p, beta); - if(beta < 0) { + if( beta < 0 ) { delta = (gamma - beta)*0.5; s = Math.sqrt(delta/gamma); c = (p/(gamma*s*2.0)); } else { c = Math.sqrt((gamma + beta)/(gamma*2.0)); s = (p/(gamma*c*2.0)); - delta = p*p*0.5/(gamma + beta); } - W[i] += delta; - W[j] -= delta; + a=0.0, b=0.0; - if( (iter & 1) && W[i] > 0 && W[j] > 0 ) { - k = 2;//unroll 2x2 - t0 = c*At[Ai] + s*At[Aj]; - t1 = -s*At[Ai] + c*At[Aj]; - At[Ai] = t0; At[Aj] = t1; - - t0 = c*At[Ai+1] + s*At[Aj+1]; - t1 = -s*At[Ai+1] + c*At[Aj+1]; - At[Ai+1] = t0; At[Aj+1] = t1; - - for(; k < m; k++) { - t0 = c*At[Ai+k] + s*At[Aj+k]; - t1 = -s*At[Ai+k] + c*At[Aj+k]; - At[Ai+k] = t0; At[Aj+k] = t1; - } - } else { - a = b = 0; - k = 2; // unroll - t0 = c*At[Ai] + s*At[Aj]; - t1 = -s*At[Ai] + c*At[Aj]; - At[Ai] = t0; At[Aj] = t1; - a += t0*t0; b += t1*t1; - - t0 = c*At[Ai+1] + s*At[Aj+1]; - t1 = -s*At[Ai+1] + c*At[Aj+1]; - At[Ai+1] = t0; At[Aj+1] = t1; + k = 2; // unroll + t0 = c*At[Ai] + s*At[Aj]; + t1 = -s*At[Ai] + c*At[Aj]; + At[Ai] = t0; At[Aj] = t1; + a += t0*t0; b += t1*t1; + + t0 = c*At[Ai+1] + s*At[Aj+1]; + t1 = -s*At[Ai+1] + c*At[Aj+1]; + At[Ai+1] = t0; At[Aj+1] = t1; + a += t0*t0; b += t1*t1; + + for( ; k < m; k++ ) + { + t0 = c*At[Ai+k] + s*At[Aj+k]; + t1 = -s*At[Ai+k] + c*At[Aj+k]; + At[Ai+k] = t0; At[Aj+k] = t1; + a += t0*t0; b += t1*t1; - - for( ; k < m; k++ ) - { - t0 = c*At[Ai+k] + s*At[Aj+k]; - t1 = -s*At[Ai+k] + c*At[Aj+k]; - At[Ai+k] = t0; At[Aj+k] = t1; - - a += t0*t0; b += t1*t1; - } - W[i] = a; W[j] = b; } + W[i] = a; W[j] = b; + changed = 1; if(Vt) { From 05807c790fc14ca97895877d001d877e482a8815 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Wed, 3 Sep 2014 12:06:00 +0400 Subject: [PATCH 29/46] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 77fdf42..581dd1e 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ The project aim is to explore JS/HTML5 possibilities using modern & state-of-art * Fast Corners feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_fast_corners.html)) * YAPE06 feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_yape06.html)) * YAPE feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_yape.html)) + * ORB feature descriptor ([Demo](http://inspirit.github.com/jsfeat/sample_orb.html)) * Lucas-Kanade optical flow ([Demo](http://inspirit.github.com/jsfeat/sample_oflow_lk.html) - click to add points) * HAAR object detector ([Demo](http://inspirit.github.com/jsfeat/sample_haar_face.html)) * BBF object detector ([Demo](http://inspirit.github.com/jsfeat/sample_bbf_face.html)) From 751b194dbe2defa69aea1a1d7ae58ad3943978b0 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Tue, 9 Apr 2013 21:20:41 +0400 Subject: [PATCH 30/46] gauss u8 fix --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 20 ++++++++++---------- src/jsfeat_imgproc.js | 20 ++++++++++---------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index f0caecf..7a60867 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8;m[u+y+1]=G>>8;m[u+y+2]=E>>8;m[u+y+3]=C>>8}for(;y>8}A+=s;u+=s}for(z=0;z>8;m[u+s]=G>>8;m[u+q]=E>>8;m[u+p]=C>>8}for(;y>8}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ap,aL,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var aa=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aB=r[0].rows,ay=0,aH=0;var az=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(aa<<2);var t=jsfeat.cache.get_buffer((aB*(M<<1))<<2);var V=new jsfeat.matrix_t(M,aB,jsfeat.S32C2_t,t.data);var w=az.i32;var ac=s.i32;var aA=t.i32;var ab=0,I=0,aM=0,at=0,aI=0,au=0;var am=0,aF=0,aD=0,af=0,ae=0;var E=0,z=0,Y=0,W=0;var p=0,o=0,aE=0,aC=0;var Q=0,P=0,J=0,H=0,ai=0,ak=0,l=0;var d=0,A=0,O=0;var U=0,T=0,aw=0,av=0;var ah=14;var C=14;var Z=C-5;var ax=(1<<((Z)-1));var ad=(1<=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ap,aL,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var aa=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aB=r[0].rows,ay=0,aH=0;var az=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(aa<<2);var t=jsfeat.cache.get_buffer((aB*(M<<1))<<2);var V=new jsfeat.matrix_t(M,aB,jsfeat.S32C2_t,t.data);var w=az.i32;var ac=s.i32;var aA=t.i32;var ab=0,I=0,aM=0,at=0,aI=0,au=0;var am=0,aF=0,aD=0,af=0,ae=0;var E=0,z=0,Y=0,W=0;var p=0,o=0,aE=0,aC=0;var Q=0,P=0,J=0,H=0,ai=0,ak=0,l=0;var d=0,A=0,O=0;var U=0,T=0,aw=0,av=0;var ah=14;var C=14;var Z=C-5;var ax=(1<<((Z)-1));var ad=(1<=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index 5f824d1..cfaa4f6 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -2510,17 +2510,17 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; sum2 += buf[k + j+2] * fk; sum3 += buf[k + j+3] * fk; } - dst_d[dp+j] = sum >> 8; - dst_d[dp+j+1] = sum1 >> 8; - dst_d[dp+j+2] = sum2 >> 8; - dst_d[dp+j+3] = sum3 >> 8; + dst_d[dp+j] = Math.min(sum >> 8, 255); + dst_d[dp+j+1] = Math.min(sum1 >> 8, 255); + dst_d[dp+j+2] = Math.min(sum2 >> 8, 255); + dst_d[dp+j+3] = Math.min(sum3 >> 8, 255); } for (; j < w; ++j) { sum = buf[j] * f0; for (k = 1; k < kernel_size; ++k) { sum += buf[k + j] * filter[k]; } - dst_d[dp+j] = sum >> 8; + dst_d[dp+j] = Math.min(sum >> 8, 255); } sp += w; dp += w; @@ -2557,17 +2557,17 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; sum2 += buf[k + j+2] * fk; sum3 += buf[k + j+3] * fk; } - dst_d[dp] = sum >> 8; - dst_d[dp+w] = sum1 >> 8; - dst_d[dp+w2] = sum2 >> 8; - dst_d[dp+w3] = sum3 >> 8; + dst_d[dp] = Math.min(sum >> 8, 255); + dst_d[dp+w] = Math.min(sum1 >> 8, 255); + dst_d[dp+w2] = Math.min(sum2 >> 8, 255); + dst_d[dp+w3] = Math.min(sum3 >> 8, 255); } for (; j < h; ++j, dp+=w) { sum = buf[j] * f0; for (k = 1; k < kernel_size; ++k) { sum += buf[k + j] * filter[k]; } - dst_d[dp] = sum >> 8; + dst_d[dp] = Math.min(sum >> 8, 255); } } } diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index c56d0f5..02949c6 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -213,17 +213,17 @@ sum2 += buf[k + j+2] * fk; sum3 += buf[k + j+3] * fk; } - dst_d[dp+j] = sum >> 8; - dst_d[dp+j+1] = sum1 >> 8; - dst_d[dp+j+2] = sum2 >> 8; - dst_d[dp+j+3] = sum3 >> 8; + dst_d[dp+j] = Math.min(sum >> 8, 255); + dst_d[dp+j+1] = Math.min(sum1 >> 8, 255); + dst_d[dp+j+2] = Math.min(sum2 >> 8, 255); + dst_d[dp+j+3] = Math.min(sum3 >> 8, 255); } for (; j < w; ++j) { sum = buf[j] * f0; for (k = 1; k < kernel_size; ++k) { sum += buf[k + j] * filter[k]; } - dst_d[dp+j] = sum >> 8; + dst_d[dp+j] = Math.min(sum >> 8, 255); } sp += w; dp += w; @@ -260,17 +260,17 @@ sum2 += buf[k + j+2] * fk; sum3 += buf[k + j+3] * fk; } - dst_d[dp] = sum >> 8; - dst_d[dp+w] = sum1 >> 8; - dst_d[dp+w2] = sum2 >> 8; - dst_d[dp+w3] = sum3 >> 8; + dst_d[dp] = Math.min(sum >> 8, 255); + dst_d[dp+w] = Math.min(sum1 >> 8, 255); + dst_d[dp+w2] = Math.min(sum2 >> 8, 255); + dst_d[dp+w3] = Math.min(sum3 >> 8, 255); } for (; j < h; ++j, dp+=w) { sum = buf[j] * f0; for (k = 1; k < kernel_size; ++k) { sum += buf[k + j] * filter[k]; } - dst_d[dp] = sum >> 8; + dst_d[dp] = Math.min(sum >> 8, 255); } } } From a8a10f48c2629bda7d94baa7957ff09750926634 Mon Sep 17 00:00:00 2001 From: Bartek Drozdz Date: Fri, 12 Sep 2014 09:11:10 -0700 Subject: [PATCH 31/46] Adding bower.json --- bower.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 bower.json diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..3abd8d3 --- /dev/null +++ b/bower.json @@ -0,0 +1,13 @@ +{ + + "name": "jsfeat", + "version" : "0.0.8", + "description" : "JavaScript Computer Vision library", + "author" : "Eugene Zatepyakin (http://www.inspirit.ru/)", + + "ignore": [ + "src", + "compile", + "node_modules" + ] +} \ No newline at end of file From ce980651b98072973aec9ea10d0ada66f0ce32d5 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Sat, 13 Apr 2013 09:56:14 +0400 Subject: [PATCH 32/46] fix canny --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 2 +- src/jsfeat_imgproc.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index 7a60867..38323c9 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ap,aL,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var aa=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aB=r[0].rows,ay=0,aH=0;var az=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(aa<<2);var t=jsfeat.cache.get_buffer((aB*(M<<1))<<2);var V=new jsfeat.matrix_t(M,aB,jsfeat.S32C2_t,t.data);var w=az.i32;var ac=s.i32;var aA=t.i32;var ab=0,I=0,aM=0,at=0,aI=0,au=0;var am=0,aF=0,aD=0,af=0,ae=0;var E=0,z=0,Y=0,W=0;var p=0,o=0,aE=0,aC=0;var Q=0,P=0,J=0,H=0,ai=0,ak=0,l=0;var d=0,A=0,O=0;var U=0,T=0,aw=0,av=0;var ah=14;var C=14;var Z=C-5;var ax=(1<<((Z)-1));var ad=(1<=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ap,aL,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var aa=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aB=r[0].rows,ay=0,aH=0;var az=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(aa<<2);var t=jsfeat.cache.get_buffer((aB*(M<<1))<<2);var V=new jsfeat.matrix_t(M,aB,jsfeat.S32C2_t,t.data);var w=az.i32;var ac=s.i32;var aA=t.i32;var ab=0,I=0,aM=0,at=0,aI=0,au=0;var am=0,aF=0,aD=0,af=0,ae=0;var E=0,z=0,Y=0,W=0;var p=0,o=0,aE=0,aC=0;var Q=0,P=0,J=0,H=0,ai=0,ak=0,l=0;var d=0,A=0,O=0;var U=0,T=0,aw=0,av=0;var ah=14;var C=14;var Z=C-5;var ax=(1<<((Z)-1));var ad=(1<=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index cfaa4f6..7a7b160 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -3203,7 +3203,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var map = map_node.i32; var stack = stack_node.i32; var dxdy = dxdy_node.i32; - var dxdy_m = new jsfeat.matrix_t(w0, h0, jsfeat.S32C2_t, dxdy_node.data); + var dxdy_m = new jsfeat.matrix_t(w, h, jsfeat.S32C2_t, dxdy_node.data); var row0=1,row1=(w+2+1)|0,row2=(2*(w+2)+1)|0,map_w=(w+2)|0,map_i=(map_w+1)|0,stack_i=0; this.sobel_derivatives(src, dxdy_m); diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index 02949c6..9eef253 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -906,7 +906,7 @@ var map = map_node.i32; var stack = stack_node.i32; var dxdy = dxdy_node.i32; - var dxdy_m = new jsfeat.matrix_t(w0, h0, jsfeat.S32C2_t, dxdy_node.data); + var dxdy_m = new jsfeat.matrix_t(w, h, jsfeat.S32C2_t, dxdy_node.data); var row0=1,row1=(w+2+1)|0,row2=(2*(w+2)+1)|0,map_w=(w+2)|0,map_i=(map_w+1)|0,stack_i=0; this.sobel_derivatives(src, dxdy_m); From 63978a08f285d079399f1eac812b40d328b22244 Mon Sep 17 00:00:00 2001 From: Charles Law Date: Sat, 7 Mar 2015 22:06:13 -0800 Subject: [PATCH 33/46] Issue #27: Add a hough transform implementation ported from opencv --- src/jsfeat_imgproc.js | 73 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index e804760..58e8839 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -621,6 +621,79 @@ jsfeat.cache.put_buffer(buf_node); jsfeat.cache.put_buffer(filt_node); }, + hough_transform: function( img, rho_res, theta_res, threshold ) { + var image = img.data; + + var width = img.cols; + var height = img.rows; + var step = width; + + min_theta = 0.0; + max_theta = Math.PI; + + numangle = Math.round((max_theta - min_theta) / theta_res); + numrho = Math.round(((width + height) * 2 + 1) / rho_res); + irho = 1.0 / rho_res; + + var accum = new Int32Array((numangle+2) * (numrho+2)); //typed arrays are initialized to 0 + var tabSin = new Float32Array(numangle); + var tabCos = new Float32Array(numangle); + + var n=0; + var ang = min_theta; + for(; n < numangle; n++ ) { + tabSin[n] = Math.sin(ang) * irho; + tabCos[n] = Math.cos(ang) * irho; + ang += theta_res + } + + // stage 1. fill accumulator + for( var i = 0; i < height; i++ ) { + for( var j = 0; j < width; j++ ) { + if( image[i * step + j] != 0 ) { + //console.log(r, (n+1) * (numrho+2) + r+1, tabCos[n], tabSin[n]); + for(var n = 0; n < numangle; n++ ) { + var r = Math.round( j * tabCos[n] + i * tabSin[n] ); + r += (numrho - 1) / 2; + accum[(n+1) * (numrho+2) + r+1] += 1; + } + } + } + } + + // stage 2. find local maximums + //TODO: Consider making a vector class that uses typed arrays + _sort_buf = new Array(); + for(var r = 0; r < numrho; r++ ) { + for(var n = 0; n < numangle; n++ ) { + var base = (n+1) * (numrho+2) + r+1; + if( accum[base] > threshold && + accum[base] > accum[base - 1] && accum[base] >= accum[base + 1] && + accum[base] > accum[base - numrho - 2] && accum[base] >= accum[base + numrho + 2] ) { + _sort_buf.push(base); + } + } + } + + // stage 3. sort the detected lines by accumulator value + _sort_buf.sort(function(l1, l2) { + return accum[l1] > accum[l2] || (accum[l1] == accum[l2] && l1 < l2); + }); + + // stage 4. store the first min(total,linesMax) lines to the output buffer + linesMax = Math.min(numangle*numrho, _sort_buf.length); + scale = 1.0 / (numrho+2); + lines = new Array(); + for( var i = 0; i < linesMax; i++ ) { + var idx = _sort_buf[i]; + var n = Math.floor(idx*scale) - 1; + var r = idx - (n+1)*(numrho+2) - 1; + var lrho = (r - (numrho - 1)*0.5) * rho_res; + var langle = n * theta_res; + lines.push([lrho, langle]); + } + return lines; + }, // assume we always need it for u8 image pyrdown: function(src, dst, sx, sy) { // this is needed for bbf From b7021a7a6177c5d7f771a8a5432d472a2791a6b3 Mon Sep 17 00:00:00 2001 From: David Corvoysier Date: Wed, 22 May 2013 09:46:29 +0200 Subject: [PATCH 34/46] imgproc: Added a very basic RGB skin detector From: http://popscan.blogspot.fr/2012/08/skin-detection-in-digital-images.html --- src/jsfeat_imgproc.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index 9eef253..6bbb672 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -1113,6 +1113,27 @@ else dst_d[dptr] = fill_value; } } + }, + + // Basic RGB Skin detection filter + // from http://popscan.blogspot.fr/2012/08/skin-detection-in-digital-images.html + skindetector: function(src,dst) { + var r,g,b,j; + var i = src.width*src.height; + while(i--){ + j = i*4; + r = src.data[j]; + g = src.data[j+1]; + b = src.data[j+2]; + if((r>95)&&(g>40)&&(b>20) + &&(r>g)&&(r>b) + &&(r-Math.min(g,b)>15) + &&(Math.abs(r-g)>15)){ + dst[i] = 255; + } else { + dst[i] = 0; + } + } } }; })(); From 42f54c0b9f1cf4827536a790d1a05851e774e1ce Mon Sep 17 00:00:00 2001 From: Joshua Morris Date: Thu, 25 Jun 2015 15:45:37 -0600 Subject: [PATCH 35/46] Added main to bower.json --- bower.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 3abd8d3..83146f2 100644 --- a/bower.json +++ b/bower.json @@ -4,10 +4,11 @@ "version" : "0.0.8", "description" : "JavaScript Computer Vision library", "author" : "Eugene Zatepyakin (http://www.inspirit.ru/)", + "main" : "build/jsfeat-min.js", "ignore": [ "src", "compile", "node_modules" ] -} \ No newline at end of file +} From a10e0cbe93fafc4acd313de06235f189a8ce44c6 Mon Sep 17 00:00:00 2001 From: David Corvoysier Date: Wed, 22 May 2013 09:47:29 +0200 Subject: [PATCH 36/46] build: Rebuilt files after basic Skin Detector addition --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index 38323c9..44cea59 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ap,aL,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var aa=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aB=r[0].rows,ay=0,aH=0;var az=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(aa<<2);var t=jsfeat.cache.get_buffer((aB*(M<<1))<<2);var V=new jsfeat.matrix_t(M,aB,jsfeat.S32C2_t,t.data);var w=az.i32;var ac=s.i32;var aA=t.i32;var ab=0,I=0,aM=0,at=0,aI=0,au=0;var am=0,aF=0,aD=0,af=0,ae=0;var E=0,z=0,Y=0,W=0;var p=0,o=0,aE=0,aC=0;var Q=0,P=0,J=0,H=0,ai=0,ak=0,l=0;var d=0,A=0,O=0;var U=0,T=0,aw=0,av=0;var ah=14;var C=14;var Z=C-5;var ax=(1<<((Z)-1));var ad=(1<=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}},skindetector:function(o,p){var n,m,h,k;var l=o.width*o.height;while(l--){k=l*4;n=o.data[k];m=o.data[k+1];h=o.data[k+2];if((n>95)&&(m>40)&&(h>20)&&(n>m)&&(n>h)&&(n-Math.min(m,h)>15)&&(Math.abs(n-m)>15)){p[l]=255}else{p[l]=0}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ap,aL,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var aa=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aB=r[0].rows,ay=0,aH=0;var az=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(aa<<2);var t=jsfeat.cache.get_buffer((aB*(M<<1))<<2);var V=new jsfeat.matrix_t(M,aB,jsfeat.S32C2_t,t.data);var w=az.i32;var ac=s.i32;var aA=t.i32;var ab=0,I=0,aM=0,at=0,aI=0,au=0;var am=0,aF=0,aD=0,af=0,ae=0;var E=0,z=0,Y=0,W=0;var p=0,o=0,aE=0,aC=0;var Q=0,P=0,J=0,H=0,ai=0,ak=0,l=0;var d=0,A=0,O=0;var U=0,T=0,aw=0,av=0;var ah=14;var C=14;var Z=C-5;var ax=(1<<((Z)-1));var ad=(1<=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index 7a7b160..fa133dd 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -3410,6 +3410,27 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; else dst_d[dptr] = fill_value; } } + }, + + // Basic RGB Skin detection filter + // from http://popscan.blogspot.fr/2012/08/skin-detection-in-digital-images.html + skindetector: function(src,dst) { + var r,g,b,j; + var i = src.width*src.height; + while(i--){ + j = i*4; + r = src.data[j]; + g = src.data[j+1]; + b = src.data[j+2]; + if((r>95)&&(g>40)&&(b>20) + &&(r>g)&&(r>b) + &&(r-Math.min(g,b)>15) + &&(Math.abs(r-g)>15)){ + dst[i] = 255; + } else { + dst[i] = 0; + } + } } }; })(); From 2e0fcd2446cf1182c6189b838e358193b0600667 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Fri, 18 Dec 2015 14:09:28 +0100 Subject: [PATCH 37/46] fix links for all external resources --- README.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 581dd1e..586e954 100644 --- a/README.md +++ b/README.md @@ -5,36 +5,36 @@ jsfeat The project aim is to explore JS/HTML5 possibilities using modern & state-of-art computer vision algorithms. -[Examples and Documentation](http://inspirit.github.com/jsfeat/) +[Examples and Documentation](https://inspirit.github.io/jsfeat/) ### Features ### * Custom data structures * Basic image processing methods (grayscale, derivatives, box-blur, resample, etc.) - * grayscale ([Demo](http://inspirit.github.com/jsfeat/sample_grayscale.html)) - * box blur ([Demo](http://inspirit.github.com/jsfeat/sample_boxblur.html)) - * gaussian blur ([Demo](http://inspirit.github.com/jsfeat/sample_gaussblur.html)) - * equalize histogram ([Demo](http://inspirit.github.com/jsfeat/sample_equalize_hist.html)) - * canny edges ([Demo](http://inspirit.github.com/jsfeat/sample_canny_edge.html)) - * sobel deriv ([Demo](http://inspirit.github.com/jsfeat/sample_sobel.html)) - * scharr deriv ([Demo](http://inspirit.github.com/jsfeat/sample_scharr.html)) + * grayscale ([Demo](https://inspirit.github.io/jsfeat/sample_grayscale.html)) + * box blur ([Demo](https://inspirit.github.io/jsfeat/sample_boxblur.html)) + * gaussian blur ([Demo](https://inspirit.github.io/jsfeat/sample_gaussblur.html)) + * equalize histogram ([Demo](https://inspirit.github.io/jsfeat/sample_equalize_hist.html)) + * canny edges ([Demo](https://inspirit.github.io/jsfeat/sample_canny_edge.html)) + * sobel deriv ([Demo](https://inspirit.github.io/jsfeat/sample_sobel.html)) + * scharr deriv ([Demo](https://inspirit.github.io/jsfeat/sample_scharr.html)) * find more at Examples and Documentation page * Linear Algebra module * LU (Gaussian elimination) solver * Cholesky solver * SVD decomposition, solver and pseudo-inverse * Eigen Vectors and Values -* Multiview module ([Demo](http://inspirit.github.com/jsfeat/sample_videostab.html)) +* Multiview module ([Demo](https://inspirit.github.io/jsfeat/sample_videostab.html)) * Affine2D motion kernel * Homography2D motion kernel * RANSAC motion estimator * LMEDS motion estimator * Matrix Math module for various matrix operation such as traspose, multiply etc. * Features 2D - * Fast Corners feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_fast_corners.html)) - * YAPE06 feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_yape06.html)) - * YAPE feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_yape.html)) - * ORB feature descriptor ([Demo](http://inspirit.github.com/jsfeat/sample_orb.html)) -* Lucas-Kanade optical flow ([Demo](http://inspirit.github.com/jsfeat/sample_oflow_lk.html) - click to add points) -* HAAR object detector ([Demo](http://inspirit.github.com/jsfeat/sample_haar_face.html)) -* BBF object detector ([Demo](http://inspirit.github.com/jsfeat/sample_bbf_face.html)) + * Fast Corners feature detector ([Demo](https://inspirit.github.io/jsfeat/sample_fast_corners.html)) + * YAPE06 feature detector ([Demo](https://inspirit.github.io/jsfeat/sample_yape06.html)) + * YAPE feature detector ([Demo](https://inspirit.github.io/jsfeat/sample_yape.html)) + * ORB feature descriptor ([Demo](https://inspirit.github.io/jsfeat/sample_orb.html)) +* Lucas-Kanade optical flow ([Demo](https://inspirit.github.io/jsfeat/sample_oflow_lk.html) - click to add points) +* HAAR object detector ([Demo](https://inspirit.github.io/jsfeat/sample_haar_face.html)) +* BBF object detector ([Demo](https://inspirit.github.io/jsfeat/sample_bbf_face.html)) From 7b778162577a72fd7cedf35565f42a90b3d62d97 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Mon, 1 Sep 2014 17:32:13 +0100 Subject: [PATCH 38/46] various fixes, added ORB descriptor --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 511 ++++++++++++++++++++++++++------- compile/build.xml | 1 + package.json | 2 +- src/jsfeat_fast_corners.js | 85 ------ src/jsfeat_imgproc.js | 6 +- src/jsfeat_motion_estimator.js | 7 +- src/jsfeat_orb.js | 396 +++++++++++++++++++++++++ src/jsfeat_struct.js | 4 +- src/jsfeat_yape06.js | 13 +- 10 files changed, 827 insertions(+), 200 deletions(-) create mode 100644 src/jsfeat_orb.js diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index 44cea59..a36ba48 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n0&&w>0&&q<(u-1)&&A<(z-1)){G=Math.max(m-q,0);D=Math.max(w-A,0);I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}},skindetector:function(o,p){var n,m,h,k;var l=o.width*o.height;while(l--){k=l*4;n=o.data[k];m=o.data[k+1];h=o.data[k+2];if((n>95)&&(m>40)&&(h>20)&&(n>m)&&(n>h)&&(n-Math.min(m,h)>15)&&(Math.abs(n-m)>15)){p[l]=255}else{p[l]=0}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m)|0,o=f;for(k=n;k=n;--l){j[o]=-4*e[o]+e[o+n]+e[o-n]+e[o+g]+e[o-g];++o}}};var c=function(e,f,k,m,g,l,h){var o=-2*e[f]+e[f+m]+e[f-m];var i=-2*e[f]+e[f+g]+e[f-g];var n=e[f+l]+e[f-l]-e[f+h]-e[f-h];var j=(Math.sqrt(((o-i)*(o-i)+4*n*n)))|0;return Math.min(Math.abs(k-j),Math.abs(-(k+j)))};return{laplacian_threshold:30,min_eigen_value_threshold:25,detect:function(l,u){var o=0,n=0;var p=l.cols,v=l.rows,q=l.data;var C=5,f=(5*p)|0;var B=(3+3*p)|0,g=(3-3*p)|0;var e=jsfeat.cache.get_buffer((p*v)<<2);var j=e.i32;var i=0,k=0,m=0,r=0,t;var s=0;var A=this.laplacian_threshold;var z=this.min_eigen_value_threshold;o=p*v;while(--o>=0){j[o]=0}d(q,j,p,v,C,f);k=(p+1)|0;for(n=1;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var c=jsfeat.imgproc.scharr_derivatives;return{track:function(n,u,ap,aL,k,N,R,K,f,q){if(typeof R==="undefined"){R=30}if(typeof K==="undefined"){K=new Uint8Array(k)}if(typeof f==="undefined"){f=0.01}if(typeof q==="undefined"){q=0.0001}var e=(N-1)*0.5;var h=(N*N)|0;var aa=h<<1;var r=n.data,S=u.data;var g=r[0].data,F=S[0].data;var M=r[0].cols,aB=r[0].rows,ay=0,aH=0;var az=jsfeat.cache.get_buffer(h<<2);var s=jsfeat.cache.get_buffer(aa<<2);var t=jsfeat.cache.get_buffer((aB*(M<<1))<<2);var V=new jsfeat.matrix_t(M,aB,jsfeat.S32C2_t,t.data);var w=az.i32;var ac=s.i32;var aA=t.i32;var ab=0,I=0,aM=0,at=0,aI=0,au=0;var am=0,aF=0,aD=0,af=0,ae=0;var E=0,z=0,Y=0,W=0;var p=0,o=0,aE=0,aC=0;var Q=0,P=0,J=0,H=0,ai=0,ak=0,l=0;var d=0,A=0,O=0;var U=0,T=0,aw=0,av=0;var ah=14;var C=14;var Z=C-5;var ax=(1<<((Z)-1));var ad=(1<=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n=0&&A>=0&&q<(u-1)&&A<(z-1)){G=m-q;D=w-A;I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}},skindetector:function(o,p){var n,m,h,k;var l=o.width*o.height;while(l--){k=l*4;n=o.data[k];m=o.data[k+1];h=o.data[k+2];if((n>95)&&(m>40)&&(h>20)&&(n>m)&&(n>h)&&(n-Math.min(m,h)>15)&&(Math.abs(n-m)>15)){p[l]=255}else{p[l]=0}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m+n)|0,o=f;for(k=n;k=0){j[o]=0}d(q,j,p,v,C,f);k=(C*p+C)|0;for(n=C;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var d=new Int32Array([8,-3,9,5,4,2,7,-12,-11,9,-8,2,7,-12,12,-13,2,-13,2,12,1,-7,1,6,-2,-10,-2,-4,-13,-13,-11,-8,-13,-3,-12,-9,10,4,11,9,-13,-8,-8,-9,-11,7,-9,12,7,7,12,6,-4,-5,-3,0,-13,2,-12,-3,-9,0,-7,5,12,-6,12,-1,-3,6,-2,12,-6,-13,-4,-8,11,-13,12,-8,4,7,5,1,5,-3,10,-3,3,-7,6,12,-8,-7,-6,-2,-2,11,-1,-10,-13,12,-8,10,-7,3,-5,-3,-4,2,-3,7,-10,-12,-6,11,5,-12,6,-7,5,-6,7,-1,1,0,4,-5,9,11,11,-13,4,7,4,12,2,-1,4,4,-4,-12,-2,7,-8,-5,-7,-10,4,11,9,12,0,-8,1,-13,-13,-2,-8,2,-3,-2,-2,3,-6,9,-4,-9,8,12,10,7,0,9,1,3,7,-5,11,-10,-13,-6,-11,0,10,7,12,1,-6,-3,-6,12,10,-9,12,-4,-13,8,-8,-12,-13,0,-8,-4,3,3,7,8,5,7,10,-7,-1,7,1,-12,3,-10,5,6,2,-4,3,-10,-13,0,-13,5,-13,-7,-12,12,-13,3,-11,8,-7,12,-4,7,6,-10,12,8,-9,-1,-7,-6,-2,-5,0,12,-12,5,-7,5,3,-10,8,-13,-7,-7,-4,5,-3,-2,-1,-7,2,9,5,-11,-11,-13,-5,-13,-1,6,0,-1,5,-3,5,2,-4,-13,-4,12,-9,-6,-9,6,-12,-10,-8,-4,10,2,12,-3,7,12,12,12,-7,-13,-6,5,-4,9,-3,4,7,-1,12,2,-7,6,-5,1,-13,11,-12,5,-3,7,-2,-6,7,-8,12,-7,-13,-7,-11,-12,1,-3,12,12,2,-6,3,0,-4,3,-2,-13,-1,-13,1,9,7,1,8,-6,1,-1,3,12,9,1,12,6,-1,-9,-1,3,-13,-13,-10,5,7,7,10,12,12,-5,12,9,6,3,7,11,5,-13,6,10,2,-12,2,3,3,8,4,-6,2,6,12,-13,9,-12,10,3,-8,4,-7,9,-11,12,-4,-6,1,12,2,-8,6,-9,7,-4,2,3,3,-2,6,3,11,0,3,-3,8,-8,7,8,9,3,-11,-5,-6,-4,-10,11,-5,10,-5,-8,-3,12,-10,5,-9,0,8,-1,12,-6,4,-6,6,-11,-10,12,-8,7,4,-2,6,7,-2,0,-2,12,-5,-8,-5,2,7,-6,10,12,-9,-13,-8,-8,-5,-13,-5,-2,8,-8,9,-13,-9,-11,-9,0,1,-8,1,-2,7,-4,9,1,-2,1,-1,-4,11,-6,12,-11,-12,-9,-6,4,3,7,7,12,5,5,10,8,0,-4,2,8,-9,12,-5,-13,0,7,2,12,-1,2,1,7,5,11,7,-9,3,5,6,-8,-13,-4,-8,9,-5,9,-3,-3,-4,-7,-3,-12,6,5,8,0,-7,6,-6,12,-13,6,-5,-2,1,-10,3,10,4,1,8,-4,-2,-2,2,-13,2,-12,12,12,-2,-13,0,-6,4,1,9,3,-6,-10,-3,-5,-3,-13,-1,1,7,5,12,-11,4,-2,5,-7,-13,9,-9,-5,7,1,8,6,7,-8,7,6,-7,-4,-7,1,-8,11,-7,-8,-13,6,-12,-8,2,4,3,9,10,-5,12,3,-6,-5,-6,7,8,-3,9,-8,2,-12,2,8,-11,-2,-10,3,-12,-13,-7,-9,-11,0,-10,-5,5,-3,11,8,-2,-13,-1,12,-1,-8,0,9,-13,-11,-12,-5,-10,-2,-10,11,-3,9,-2,-13,2,-3,3,2,-9,-13,-4,0,-4,6,-3,-10,-4,12,-2,-7,-6,-11,-4,9,6,-3,6,11,-13,11,-5,5,11,11,12,6,7,-5,12,-2,-1,12,0,7,-4,-8,-3,-2,-7,1,-6,7,-13,-12,-8,-13,-7,-2,-6,-8,-8,5,-6,-9,-5,-1,-4,5,-13,7,-8,10,1,5,5,-13,1,0,10,-13,9,12,10,-1,5,-8,10,-9,-1,11,1,-13,-9,-3,-6,2,-1,-10,1,12,-13,1,-8,-10,8,-11,10,-6,2,-13,3,-6,7,-13,12,-9,-10,-10,-5,-7,-10,-8,-8,-13,4,-6,8,5,3,12,8,-13,-4,2,-3,-3,5,-13,10,-12,4,-13,5,-1,-9,9,-4,3,0,3,3,-9,-12,1,-6,1,3,2,4,-8,-10,-10,-10,9,8,-13,12,12,-8,-12,-6,-5,2,2,3,7,10,6,11,-8,6,8,8,-12,-7,10,-6,5,-3,-9,-3,9,-1,-13,-1,5,-3,-7,-3,4,-8,-2,-8,3,4,2,12,12,2,-5,3,11,6,-9,11,-13,3,-1,7,12,11,-1,12,4,-3,0,-3,6,4,-11,4,12,2,-4,2,1,-10,-6,-8,1,-13,7,-11,1,-13,12,-11,-13,6,0,11,-13,0,-1,1,4,-13,3,-9,-2,-9,8,-6,-3,-13,-6,-8,-2,5,-9,8,10,2,7,3,-9,-1,-6,-1,-1,9,5,11,-2,11,-3,12,-8,3,0,3,5,-1,4,0,10,3,-6,4,5,-13,0,-10,5,5,8,12,11,8,9,9,-6,7,-4,8,-12,-10,4,-10,9,7,3,12,4,9,-7,10,-2,7,0,12,-2,-1,-6,0,-11]);var f=new Int32Array([15,15,15,15,14,14,14,13,13,12,11,10,9,8,6,3,0]);ic_angle=function(h,j,o,p,n){var k=0,i=0;var s=0,q=0,g=(n*j+p)|0;var l=0,m=0,r=0;for(s=-o;s<=o;++s){i+=s*h[g+s]}for(q=1;q<=o;++q){l=0;m=f[q];for(s=-m;s<=m;++s){r=h[g+s+q*j],val_minus=h[g+s-q*j];l+=(r-val_minus);i+=s*(r+val_minus)}k+=q*l}return Math.atan2(k,i)};var c=new jsfeat.matrix_t(3,3,jsfeat.F32_t|jsfeat.C1_t);var e=new jsfeat.matrix_t(32,32,jsfeat.U8_t|jsfeat.C1_t);rectify_patch=function(l,n,k,i,h,j){var m=(k>=0)?Math.cos(k*Math.PI/180):1;var g=(k>=0)?Math.sin(k*Math.PI/180):0;c.data[0]=m,c.data[1]=-g,c.data[2]=(-m+g)*j*0.5+i,c.data[3]=g,c.data[4]=m,c.data[5]=(-g-m)*j*0.5+h;jsfeat.warp_affine(l,n,c,128)};return{describe:function(j,u,g,B){var r=32;var x=0,A=0,q=0,p=0,z=0;var o=0,m=0,D=0;var C=j.data,n=j.cols,y=j.rows;var t=e.data;var v=16*32+16;var k=0;if(!(B.type&jsfeat.U8_t)){B.type=jsfeat.U8_t;B.cols=r;B.rows=g;B.channel=1;B.allocate()}else{B.resize(r,g,1)}var l=B.data;var s=0;for(x=0;x=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index fa133dd..646743c 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -166,16 +166,18 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; })(); var point2d_t = (function () { - function point2d_t(x,y,score,level) { + function point2d_t(x,y,score,level,angle) { if (typeof x === "undefined") { x=0; } if (typeof y === "undefined") { y=0; } if (typeof score === "undefined") { score=0; } if (typeof level === "undefined") { level=0; } + if (typeof angle === "undefined") { angle=-1.0; } this.x = x; this.y = y; this.score = score; this.level = level; + this.angle = angle; } return point2d_t; })(); @@ -1950,9 +1952,10 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; } homography2d.prototype.check_subset = function(from, to, count) { - if( have_collinear_points(from, count) || have_collinear_points(to, count) ) { - return false; - } + // seems to reject good subsets actually + //if( have_collinear_points(from, count) || have_collinear_points(to, count) ) { + //return false; + //} if( count == 4 ) { var negative = 0; @@ -3397,9 +3400,9 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; for(x = 0; x < dst_width; ++x, ++dptr, xs+=m00, ys+=m10) { ixs = xs | 0; iys = ys | 0; - if(xs > 0 && ys > 0 && ixs < (src_width - 1) && iys < (src_height - 1)) { - a = Math.max(xs - ixs, 0.0); - b = Math.max(ys - iys, 0.0); + if(ixs >= 0 && iys >= 0 && ixs < (src_width - 1) && iys < (src_height - 1)) { + a = xs - ixs; + b = ys - iys; off = src_width*iys + ixs; p0 = src_d[off] + a * (src_d[off+1] - src_d[off]); @@ -3459,10 +3462,6 @@ The references are: var offsets16 = new Int32Array([0, 3, 1, 3, 2, 2, 3, 1, 3, 0, 3, -1, 2, -2, 1, -3, 0, -3, -1, -3, -2, -2, -3, -1, -3, 0, -3, 1, -2, 2, -1, 3]); - // decided to switch it off since other pattern sizes return quite poor points - //var offsets12 = new Int32Array([0, 2, 1, 2, 2, 1, 2, 0, 2, -1, 1, -2, 0, -2, -1, -2, -2, -1, -2, 0, -2, 1, -1, 2]); - //var offsets8 = new Int32Array([0, 1, 1, 1, 1, 0, 1, -1, 0, -1, -1, -1, -1, 0, -1, 1]); - var threshold_tab = new Uint8Array(512); var pixel_off = new Int32Array(25); var score_diff = new Int32Array(25); @@ -3470,7 +3469,6 @@ The references are: // private functions var _cmp_offsets = function(pixel, step, pattern_size) { var k = 0; - //var offsets = pattern_size == 16 ? offsets16 : (pattern_size == 12 ? offsets12 : offsets8); var offsets = offsets16; for( ; k < pattern_size; ++k ) { pixel[k] = offsets[k<<1] + offsets[(k<<1)+1] * step; @@ -3479,79 +3477,7 @@ The references are: pixel[k] = pixel[k - pattern_size]; } }, -/* - _cmp_score_8 = function(src, off, pixel, d, threshold) { - var N = 13, k = 0, v = src[off]; - var a0 = threshold,a=0,b0=0,b=0; - - for( ; k < N; ++k ) { - d[k] = v - src[off+pixel[k]]; - } - - for( k = 0; k < 8; k += 2 ) { - a = Math.min(d[k+1], d[k+2]); - - if( a <= a0 ) continue; - - a = Math.min(a, d[k+3]); - a = Math.min(a, d[k+4]); - a0 = Math.max(a0, Math.min(a, d[k])); - a0 = Math.max(a0, Math.min(a, d[k+5])); - } - - b0 = -a0; - for( k = 0; k < 8; k += 2 ) { - b = Math.max(d[k+1], d[k+2]); - b = Math.max(b, d[k+3]); - - if( b >= b0 ) continue; - - b = Math.max(b, d[k+4]); - b0 = Math.min(b0, Math.max(b, d[k])); - b0 = Math.min(b0, Math.max(b, d[k+5])); - } - - return -b0-1; - }, - - _cmp_score_12 = function(src, off, pixel, d, threshold) { - var N = 19, k = 0, v = src[off]; - var a0 = threshold,a=0,b0=0,b=0; - - for( ; k < N; ++k ) { - d[k] = v - src[off+pixel[k]]; - } - - for( k = 0; k < 12; k += 2 ) { - a = Math.min(d[k+1], d[k+2]); - - if( a <= a0 ) continue; - - a = Math.min(a, d[k+3]); - a = Math.min(a, d[k+4]); - a = Math.min(a, d[k+5]); - a = Math.min(a, d[k+6]); - a0 = Math.max(a0, Math.min(a, d[k])); - a0 = Math.max(a0, Math.min(a, d[k+7])); - } - - b0 = -a0; - for( k = 0; k < 12; k += 2 ) { - b = Math.max(d[k+1], d[k+2]); - b = Math.max(b, d[k+3]); - b = Math.max(b, d[k+4]); - - if( b >= b0 ) continue; - - b = Math.max(b, d[k+5]); - b = Math.max(b, d[k+6]); - b0 = Math.min(b0, Math.max(b, d[k])); - b0 = Math.min(b0, Math.max(b, d[k+7])); - } - return -b0-1; - }, -*/ _cmp_score_16 = function(src, off, pixel, d, threshold) { var N = 25, k = 0, v = src[off]; var a0 = threshold,a=0,b0=0,b=0; @@ -3605,13 +3531,6 @@ The references are: }, detect: function(src, corners, border) { - /* - if (typeof pattern_size === "undefined") { - pattern_size = 16; - } else if(pattern_size != 16 && pattern_size!=12 && pattern_size!=8) { - pattern_size = 16; - } - */ if (typeof border === "undefined") { border = 3; } var K = 8, N = 25; @@ -3628,7 +3547,6 @@ The references are: var sx = Math.max(3, border); var ex = Math.min((w - 3), (w - border)); var _count = 0, corners_cnt = 0, pt; - //var score_func = pattern_size == 16 ? _cmp_score_16 : (pattern_size == 12 ? _cmp_score_12 : _cmp_score_8); var score_func = _cmp_score_16; var thresh_tab = threshold_tab; var threshold = _threshold; @@ -3792,12 +3710,11 @@ The references are: var yape06 = (function() { var compute_laplacian = function(src, dst, w, h, Dxx, Dyy) { - var y=0,x=0,yrow=(Dxx*w)|0,row=yrow; + var y=0,x=0,yrow=(Dxx*w+Dxx)|0,row=yrow; for(y = Dxx; y < h - Dxx; ++y, yrow+=w, row = yrow) { - for(x = w - Dxx; x >= Dxx; --x) { + for(x = Dxx; x < w - Dxx; ++x, ++row) { dst[row] = -4 * src[row] + src[row+Dxx] + src[row-Dxx] + src[row+Dyy] + src[row-Dyy]; - ++row; } } } @@ -3832,9 +3749,9 @@ The references are: while(--x>=0) {laplacian[x]=0;} compute_laplacian(srd_d, laplacian, w, h, Dxx, Dyy); - row = (w+1)|0; - for(y = 1; y < h-1; ++y, row += w) { - for(x = 1, rowx=row; x < w-1; ++x, ++rowx) { + row = (Dxx*w+Dxx)|0; + for(y = Dxx; y < h-Dxx; ++y, row += w) { + for(x = Dxx, rowx=row; x < w-Dxx; ++x, ++rowx) { lv = laplacian[rowx]; if ((lv < -lap_thresh && @@ -3855,7 +3772,7 @@ The references are: pt = points[number_of_points]; pt.x = x, pt.y = y, pt.score = min_eigen_value; ++number_of_points; - ++x, ++rowx; + ++x, ++rowx; // skip next pixel since this is maxima in 3x3 } } } @@ -4281,6 +4198,402 @@ The references are: global.yape = yape; +})(jsfeat); +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + * Original implementation derived from OpenCV, + * @authors Ethan Rublee, Vincent Rabaud, Gary Bradski + */ + +(function(global) { + "use strict"; + // + + var orb = (function() { + + var bit_pattern_31_ = new Int32Array([ + 8,-3, 9,5/*mean (0), correlation (0)*/, + 4,2, 7,-12/*mean (1.12461e-05), correlation (0.0437584)*/, + -11,9, -8,2/*mean (3.37382e-05), correlation (0.0617409)*/, + 7,-12, 12,-13/*mean (5.62303e-05), correlation (0.0636977)*/, + 2,-13, 2,12/*mean (0.000134953), correlation (0.085099)*/, + 1,-7, 1,6/*mean (0.000528565), correlation (0.0857175)*/, + -2,-10, -2,-4/*mean (0.0188821), correlation (0.0985774)*/, + -13,-13, -11,-8/*mean (0.0363135), correlation (0.0899616)*/, + -13,-3, -12,-9/*mean (0.121806), correlation (0.099849)*/, + 10,4, 11,9/*mean (0.122065), correlation (0.093285)*/, + -13,-8, -8,-9/*mean (0.162787), correlation (0.0942748)*/, + -11,7, -9,12/*mean (0.21561), correlation (0.0974438)*/, + 7,7, 12,6/*mean (0.160583), correlation (0.130064)*/, + -4,-5, -3,0/*mean (0.228171), correlation (0.132998)*/, + -13,2, -12,-3/*mean (0.00997526), correlation (0.145926)*/, + -9,0, -7,5/*mean (0.198234), correlation (0.143636)*/, + 12,-6, 12,-1/*mean (0.0676226), correlation (0.16689)*/, + -3,6, -2,12/*mean (0.166847), correlation (0.171682)*/, + -6,-13, -4,-8/*mean (0.101215), correlation (0.179716)*/, + 11,-13, 12,-8/*mean (0.200641), correlation (0.192279)*/, + 4,7, 5,1/*mean (0.205106), correlation (0.186848)*/, + 5,-3, 10,-3/*mean (0.234908), correlation (0.192319)*/, + 3,-7, 6,12/*mean (0.0709964), correlation (0.210872)*/, + -8,-7, -6,-2/*mean (0.0939834), correlation (0.212589)*/, + -2,11, -1,-10/*mean (0.127778), correlation (0.20866)*/, + -13,12, -8,10/*mean (0.14783), correlation (0.206356)*/, + -7,3, -5,-3/*mean (0.182141), correlation (0.198942)*/, + -4,2, -3,7/*mean (0.188237), correlation (0.21384)*/, + -10,-12, -6,11/*mean (0.14865), correlation (0.23571)*/, + 5,-12, 6,-7/*mean (0.222312), correlation (0.23324)*/, + 5,-6, 7,-1/*mean (0.229082), correlation (0.23389)*/, + 1,0, 4,-5/*mean (0.241577), correlation (0.215286)*/, + 9,11, 11,-13/*mean (0.00338507), correlation (0.251373)*/, + 4,7, 4,12/*mean (0.131005), correlation (0.257622)*/, + 2,-1, 4,4/*mean (0.152755), correlation (0.255205)*/, + -4,-12, -2,7/*mean (0.182771), correlation (0.244867)*/, + -8,-5, -7,-10/*mean (0.186898), correlation (0.23901)*/, + 4,11, 9,12/*mean (0.226226), correlation (0.258255)*/, + 0,-8, 1,-13/*mean (0.0897886), correlation (0.274827)*/, + -13,-2, -8,2/*mean (0.148774), correlation (0.28065)*/, + -3,-2, -2,3/*mean (0.153048), correlation (0.283063)*/, + -6,9, -4,-9/*mean (0.169523), correlation (0.278248)*/, + 8,12, 10,7/*mean (0.225337), correlation (0.282851)*/, + 0,9, 1,3/*mean (0.226687), correlation (0.278734)*/, + 7,-5, 11,-10/*mean (0.00693882), correlation (0.305161)*/, + -13,-6, -11,0/*mean (0.0227283), correlation (0.300181)*/, + 10,7, 12,1/*mean (0.125517), correlation (0.31089)*/, + -6,-3, -6,12/*mean (0.131748), correlation (0.312779)*/, + 10,-9, 12,-4/*mean (0.144827), correlation (0.292797)*/, + -13,8, -8,-12/*mean (0.149202), correlation (0.308918)*/, + -13,0, -8,-4/*mean (0.160909), correlation (0.310013)*/, + 3,3, 7,8/*mean (0.177755), correlation (0.309394)*/, + 5,7, 10,-7/*mean (0.212337), correlation (0.310315)*/, + -1,7, 1,-12/*mean (0.214429), correlation (0.311933)*/, + 3,-10, 5,6/*mean (0.235807), correlation (0.313104)*/, + 2,-4, 3,-10/*mean (0.00494827), correlation (0.344948)*/, + -13,0, -13,5/*mean (0.0549145), correlation (0.344675)*/, + -13,-7, -12,12/*mean (0.103385), correlation (0.342715)*/, + -13,3, -11,8/*mean (0.134222), correlation (0.322922)*/, + -7,12, -4,7/*mean (0.153284), correlation (0.337061)*/, + 6,-10, 12,8/*mean (0.154881), correlation (0.329257)*/, + -9,-1, -7,-6/*mean (0.200967), correlation (0.33312)*/, + -2,-5, 0,12/*mean (0.201518), correlation (0.340635)*/, + -12,5, -7,5/*mean (0.207805), correlation (0.335631)*/, + 3,-10, 8,-13/*mean (0.224438), correlation (0.34504)*/, + -7,-7, -4,5/*mean (0.239361), correlation (0.338053)*/, + -3,-2, -1,-7/*mean (0.240744), correlation (0.344322)*/, + 2,9, 5,-11/*mean (0.242949), correlation (0.34145)*/, + -11,-13, -5,-13/*mean (0.244028), correlation (0.336861)*/, + -1,6, 0,-1/*mean (0.247571), correlation (0.343684)*/, + 5,-3, 5,2/*mean (0.000697256), correlation (0.357265)*/, + -4,-13, -4,12/*mean (0.00213675), correlation (0.373827)*/, + -9,-6, -9,6/*mean (0.0126856), correlation (0.373938)*/, + -12,-10, -8,-4/*mean (0.0152497), correlation (0.364237)*/, + 10,2, 12,-3/*mean (0.0299933), correlation (0.345292)*/, + 7,12, 12,12/*mean (0.0307242), correlation (0.366299)*/, + -7,-13, -6,5/*mean (0.0534975), correlation (0.368357)*/, + -4,9, -3,4/*mean (0.099865), correlation (0.372276)*/, + 7,-1, 12,2/*mean (0.117083), correlation (0.364529)*/, + -7,6, -5,1/*mean (0.126125), correlation (0.369606)*/, + -13,11, -12,5/*mean (0.130364), correlation (0.358502)*/, + -3,7, -2,-6/*mean (0.131691), correlation (0.375531)*/, + 7,-8, 12,-7/*mean (0.160166), correlation (0.379508)*/, + -13,-7, -11,-12/*mean (0.167848), correlation (0.353343)*/, + 1,-3, 12,12/*mean (0.183378), correlation (0.371916)*/, + 2,-6, 3,0/*mean (0.228711), correlation (0.371761)*/, + -4,3, -2,-13/*mean (0.247211), correlation (0.364063)*/, + -1,-13, 1,9/*mean (0.249325), correlation (0.378139)*/, + 7,1, 8,-6/*mean (0.000652272), correlation (0.411682)*/, + 1,-1, 3,12/*mean (0.00248538), correlation (0.392988)*/, + 9,1, 12,6/*mean (0.0206815), correlation (0.386106)*/, + -1,-9, -1,3/*mean (0.0364485), correlation (0.410752)*/, + -13,-13, -10,5/*mean (0.0376068), correlation (0.398374)*/, + 7,7, 10,12/*mean (0.0424202), correlation (0.405663)*/, + 12,-5, 12,9/*mean (0.0942645), correlation (0.410422)*/, + 6,3, 7,11/*mean (0.1074), correlation (0.413224)*/, + 5,-13, 6,10/*mean (0.109256), correlation (0.408646)*/, + 2,-12, 2,3/*mean (0.131691), correlation (0.416076)*/, + 3,8, 4,-6/*mean (0.165081), correlation (0.417569)*/, + 2,6, 12,-13/*mean (0.171874), correlation (0.408471)*/, + 9,-12, 10,3/*mean (0.175146), correlation (0.41296)*/, + -8,4, -7,9/*mean (0.183682), correlation (0.402956)*/, + -11,12, -4,-6/*mean (0.184672), correlation (0.416125)*/, + 1,12, 2,-8/*mean (0.191487), correlation (0.386696)*/, + 6,-9, 7,-4/*mean (0.192668), correlation (0.394771)*/, + 2,3, 3,-2/*mean (0.200157), correlation (0.408303)*/, + 6,3, 11,0/*mean (0.204588), correlation (0.411762)*/, + 3,-3, 8,-8/*mean (0.205904), correlation (0.416294)*/, + 7,8, 9,3/*mean (0.213237), correlation (0.409306)*/, + -11,-5, -6,-4/*mean (0.243444), correlation (0.395069)*/, + -10,11, -5,10/*mean (0.247672), correlation (0.413392)*/, + -5,-8, -3,12/*mean (0.24774), correlation (0.411416)*/, + -10,5, -9,0/*mean (0.00213675), correlation (0.454003)*/, + 8,-1, 12,-6/*mean (0.0293635), correlation (0.455368)*/, + 4,-6, 6,-11/*mean (0.0404971), correlation (0.457393)*/, + -10,12, -8,7/*mean (0.0481107), correlation (0.448364)*/, + 4,-2, 6,7/*mean (0.050641), correlation (0.455019)*/, + -2,0, -2,12/*mean (0.0525978), correlation (0.44338)*/, + -5,-8, -5,2/*mean (0.0629667), correlation (0.457096)*/, + 7,-6, 10,12/*mean (0.0653846), correlation (0.445623)*/, + -9,-13, -8,-8/*mean (0.0858749), correlation (0.449789)*/, + -5,-13, -5,-2/*mean (0.122402), correlation (0.450201)*/, + 8,-8, 9,-13/*mean (0.125416), correlation (0.453224)*/, + -9,-11, -9,0/*mean (0.130128), correlation (0.458724)*/, + 1,-8, 1,-2/*mean (0.132467), correlation (0.440133)*/, + 7,-4, 9,1/*mean (0.132692), correlation (0.454)*/, + -2,1, -1,-4/*mean (0.135695), correlation (0.455739)*/, + 11,-6, 12,-11/*mean (0.142904), correlation (0.446114)*/, + -12,-9, -6,4/*mean (0.146165), correlation (0.451473)*/, + 3,7, 7,12/*mean (0.147627), correlation (0.456643)*/, + 5,5, 10,8/*mean (0.152901), correlation (0.455036)*/, + 0,-4, 2,8/*mean (0.167083), correlation (0.459315)*/, + -9,12, -5,-13/*mean (0.173234), correlation (0.454706)*/, + 0,7, 2,12/*mean (0.18312), correlation (0.433855)*/, + -1,2, 1,7/*mean (0.185504), correlation (0.443838)*/, + 5,11, 7,-9/*mean (0.185706), correlation (0.451123)*/, + 3,5, 6,-8/*mean (0.188968), correlation (0.455808)*/, + -13,-4, -8,9/*mean (0.191667), correlation (0.459128)*/, + -5,9, -3,-3/*mean (0.193196), correlation (0.458364)*/, + -4,-7, -3,-12/*mean (0.196536), correlation (0.455782)*/, + 6,5, 8,0/*mean (0.1972), correlation (0.450481)*/, + -7,6, -6,12/*mean (0.199438), correlation (0.458156)*/, + -13,6, -5,-2/*mean (0.211224), correlation (0.449548)*/, + 1,-10, 3,10/*mean (0.211718), correlation (0.440606)*/, + 4,1, 8,-4/*mean (0.213034), correlation (0.443177)*/, + -2,-2, 2,-13/*mean (0.234334), correlation (0.455304)*/, + 2,-12, 12,12/*mean (0.235684), correlation (0.443436)*/, + -2,-13, 0,-6/*mean (0.237674), correlation (0.452525)*/, + 4,1, 9,3/*mean (0.23962), correlation (0.444824)*/, + -6,-10, -3,-5/*mean (0.248459), correlation (0.439621)*/, + -3,-13, -1,1/*mean (0.249505), correlation (0.456666)*/, + 7,5, 12,-11/*mean (0.00119208), correlation (0.495466)*/, + 4,-2, 5,-7/*mean (0.00372245), correlation (0.484214)*/, + -13,9, -9,-5/*mean (0.00741116), correlation (0.499854)*/, + 7,1, 8,6/*mean (0.0208952), correlation (0.499773)*/, + 7,-8, 7,6/*mean (0.0220085), correlation (0.501609)*/, + -7,-4, -7,1/*mean (0.0233806), correlation (0.496568)*/, + -8,11, -7,-8/*mean (0.0236505), correlation (0.489719)*/, + -13,6, -12,-8/*mean (0.0268781), correlation (0.503487)*/, + 2,4, 3,9/*mean (0.0323324), correlation (0.501938)*/, + 10,-5, 12,3/*mean (0.0399235), correlation (0.494029)*/, + -6,-5, -6,7/*mean (0.0420153), correlation (0.486579)*/, + 8,-3, 9,-8/*mean (0.0548021), correlation (0.484237)*/, + 2,-12, 2,8/*mean (0.0616622), correlation (0.496642)*/, + -11,-2, -10,3/*mean (0.0627755), correlation (0.498563)*/, + -12,-13, -7,-9/*mean (0.0829622), correlation (0.495491)*/, + -11,0, -10,-5/*mean (0.0843342), correlation (0.487146)*/, + 5,-3, 11,8/*mean (0.0929937), correlation (0.502315)*/, + -2,-13, -1,12/*mean (0.113327), correlation (0.48941)*/, + -1,-8, 0,9/*mean (0.132119), correlation (0.467268)*/, + -13,-11, -12,-5/*mean (0.136269), correlation (0.498771)*/, + -10,-2, -10,11/*mean (0.142173), correlation (0.498714)*/, + -3,9, -2,-13/*mean (0.144141), correlation (0.491973)*/, + 2,-3, 3,2/*mean (0.14892), correlation (0.500782)*/, + -9,-13, -4,0/*mean (0.150371), correlation (0.498211)*/, + -4,6, -3,-10/*mean (0.152159), correlation (0.495547)*/, + -4,12, -2,-7/*mean (0.156152), correlation (0.496925)*/, + -6,-11, -4,9/*mean (0.15749), correlation (0.499222)*/, + 6,-3, 6,11/*mean (0.159211), correlation (0.503821)*/, + -13,11, -5,5/*mean (0.162427), correlation (0.501907)*/, + 11,11, 12,6/*mean (0.16652), correlation (0.497632)*/, + 7,-5, 12,-2/*mean (0.169141), correlation (0.484474)*/, + -1,12, 0,7/*mean (0.169456), correlation (0.495339)*/, + -4,-8, -3,-2/*mean (0.171457), correlation (0.487251)*/, + -7,1, -6,7/*mean (0.175), correlation (0.500024)*/, + -13,-12, -8,-13/*mean (0.175866), correlation (0.497523)*/, + -7,-2, -6,-8/*mean (0.178273), correlation (0.501854)*/, + -8,5, -6,-9/*mean (0.181107), correlation (0.494888)*/, + -5,-1, -4,5/*mean (0.190227), correlation (0.482557)*/, + -13,7, -8,10/*mean (0.196739), correlation (0.496503)*/, + 1,5, 5,-13/*mean (0.19973), correlation (0.499759)*/, + 1,0, 10,-13/*mean (0.204465), correlation (0.49873)*/, + 9,12, 10,-1/*mean (0.209334), correlation (0.49063)*/, + 5,-8, 10,-9/*mean (0.211134), correlation (0.503011)*/, + -1,11, 1,-13/*mean (0.212), correlation (0.499414)*/, + -9,-3, -6,2/*mean (0.212168), correlation (0.480739)*/, + -1,-10, 1,12/*mean (0.212731), correlation (0.502523)*/, + -13,1, -8,-10/*mean (0.21327), correlation (0.489786)*/, + 8,-11, 10,-6/*mean (0.214159), correlation (0.488246)*/, + 2,-13, 3,-6/*mean (0.216993), correlation (0.50287)*/, + 7,-13, 12,-9/*mean (0.223639), correlation (0.470502)*/, + -10,-10, -5,-7/*mean (0.224089), correlation (0.500852)*/, + -10,-8, -8,-13/*mean (0.228666), correlation (0.502629)*/, + 4,-6, 8,5/*mean (0.22906), correlation (0.498305)*/, + 3,12, 8,-13/*mean (0.233378), correlation (0.503825)*/, + -4,2, -3,-3/*mean (0.234323), correlation (0.476692)*/, + 5,-13, 10,-12/*mean (0.236392), correlation (0.475462)*/, + 4,-13, 5,-1/*mean (0.236842), correlation (0.504132)*/, + -9,9, -4,3/*mean (0.236977), correlation (0.497739)*/, + 0,3, 3,-9/*mean (0.24314), correlation (0.499398)*/, + -12,1, -6,1/*mean (0.243297), correlation (0.489447)*/, + 3,2, 4,-8/*mean (0.00155196), correlation (0.553496)*/, + -10,-10, -10,9/*mean (0.00239541), correlation (0.54297)*/, + 8,-13, 12,12/*mean (0.0034413), correlation (0.544361)*/, + -8,-12, -6,-5/*mean (0.003565), correlation (0.551225)*/, + 2,2, 3,7/*mean (0.00835583), correlation (0.55285)*/, + 10,6, 11,-8/*mean (0.00885065), correlation (0.540913)*/, + 6,8, 8,-12/*mean (0.0101552), correlation (0.551085)*/, + -7,10, -6,5/*mean (0.0102227), correlation (0.533635)*/, + -3,-9, -3,9/*mean (0.0110211), correlation (0.543121)*/, + -1,-13, -1,5/*mean (0.0113473), correlation (0.550173)*/, + -3,-7, -3,4/*mean (0.0140913), correlation (0.554774)*/, + -8,-2, -8,3/*mean (0.017049), correlation (0.55461)*/, + 4,2, 12,12/*mean (0.01778), correlation (0.546921)*/, + 2,-5, 3,11/*mean (0.0224022), correlation (0.549667)*/, + 6,-9, 11,-13/*mean (0.029161), correlation (0.546295)*/, + 3,-1, 7,12/*mean (0.0303081), correlation (0.548599)*/, + 11,-1, 12,4/*mean (0.0355151), correlation (0.523943)*/, + -3,0, -3,6/*mean (0.0417904), correlation (0.543395)*/, + 4,-11, 4,12/*mean (0.0487292), correlation (0.542818)*/, + 2,-4, 2,1/*mean (0.0575124), correlation (0.554888)*/, + -10,-6, -8,1/*mean (0.0594242), correlation (0.544026)*/, + -13,7, -11,1/*mean (0.0597391), correlation (0.550524)*/, + -13,12, -11,-13/*mean (0.0608974), correlation (0.55383)*/, + 6,0, 11,-13/*mean (0.065126), correlation (0.552006)*/, + 0,-1, 1,4/*mean (0.074224), correlation (0.546372)*/, + -13,3, -9,-2/*mean (0.0808592), correlation (0.554875)*/, + -9,8, -6,-3/*mean (0.0883378), correlation (0.551178)*/, + -13,-6, -8,-2/*mean (0.0901035), correlation (0.548446)*/, + 5,-9, 8,10/*mean (0.0949843), correlation (0.554694)*/, + 2,7, 3,-9/*mean (0.0994152), correlation (0.550979)*/, + -1,-6, -1,-1/*mean (0.10045), correlation (0.552714)*/, + 9,5, 11,-2/*mean (0.100686), correlation (0.552594)*/, + 11,-3, 12,-8/*mean (0.101091), correlation (0.532394)*/, + 3,0, 3,5/*mean (0.101147), correlation (0.525576)*/, + -1,4, 0,10/*mean (0.105263), correlation (0.531498)*/, + 3,-6, 4,5/*mean (0.110785), correlation (0.540491)*/, + -13,0, -10,5/*mean (0.112798), correlation (0.536582)*/, + 5,8, 12,11/*mean (0.114181), correlation (0.555793)*/, + 8,9, 9,-6/*mean (0.117431), correlation (0.553763)*/, + 7,-4, 8,-12/*mean (0.118522), correlation (0.553452)*/, + -10,4, -10,9/*mean (0.12094), correlation (0.554785)*/, + 7,3, 12,4/*mean (0.122582), correlation (0.555825)*/, + 9,-7, 10,-2/*mean (0.124978), correlation (0.549846)*/, + 7,0, 12,-2/*mean (0.127002), correlation (0.537452)*/, + -1,-6, 0,-11/*mean (0.127148), correlation (0.547401)*/ + ]); + + var u_max = new Int32Array([15,15,15,15,14,14,14,13,13,12,11,10,9,8,6,3,0]); + + ic_angle = function(src, step, half_k, ptx, pty) { + var m_01 = 0, m_10 = 0; + var u=0, v=0, center_off=(pty*step + ptx)|0; + var v_sum=0,d=0,val_plus=0; + + // Treat the center line differently, v=0 + for (u = -half_k; u <= half_k; ++u) + m_10 += u * src[center_off+u]; + + // Go line by line in the circular patch + for (v = 1; v <= half_k; ++v) { + // Proceed over the two lines + v_sum = 0; + d = u_max[v]; + for (u = -d; u <= d; ++u) { + val_plus = src[center_off+u+v*step], val_minus = src[center_off+u-v*step]; + v_sum += (val_plus - val_minus); + m_10 += u * (val_plus + val_minus); + } + m_01 += v * v_sum; + } + + return Math.atan2(m_01, m_10); + }; + + var H = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + var patch_img = new jsfeat.matrix_t(32, 32, jsfeat.U8_t|jsfeat.C1_t); + + rectify_patch = function(src, dst, angle, px, py, psize) { + var cosine = (angle>=0) ? Math.cos(angle*Math.PI/180) : 1.0; + var sine = (angle>=0) ? Math.sin(angle*Math.PI/180) : 0.0; + + H.data[0] = cosine, H.data[1] = -sine, H.data[2] = (-cosine + sine ) * psize*0.5 + px, + H.data[3] = sine, H.data[4] = cosine, H.data[5] = (-sine - cosine) * psize*0.5 + py; + + jsfeat.warp_affine(src, dst, H, 128); + }; + + return { + + describe: function(src, corners, count, descriptors) { + var DESCR_SIZE = 32; // bytes; + var i=0,b=0,px=0.0,py=0.0,angle=0.0; + var t0=0, t1=0, val=0; + var img = src.data, w = src.cols, h = src.rows; + var patch_d = patch_img.data; + var patch_off = 16*32 + 16; // center of patch + var patt=0; + + if(!(descriptors.type&jsfeat.U8_t)) { + // relocate to U8 type + descriptors.type = jsfeat.U8_t; + descriptors.cols = DESCR_SIZE; + descriptors.rows = count; + descriptors.channel = 1; + descriptors.allocate(); + } else { + descriptors.resize(DESCR_SIZE, count, 1); + } + + var descr_d = descriptors.data; + var descr_off = 0; + + for(i = 0; i < count; ++i) { + px = corners[i].x; + py = corners[i].y; + angle = corners[i].angle; + + // estimate rotation if not available + if(angle == -1.0) { + corners[i].angle = angle = ic_angle(img, w, 15, px, py); + } + + rectify_patch(src, patch_img, angle, px, py, 32); + + // describe the patch + patt = 0; + for (b = 0; b < DESCR_SIZE; ++b) { + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val = (t0 < t1)|0; + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val |= (t0 < t1) << 1; + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val |= (t0 < t1) << 2; + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val |= (t0 < t1) << 3; + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val |= (t0 < t1) << 4; + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val |= (t0 < t1) << 5; + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val |= (t0 < t1) << 6; + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val |= (t0 < t1) << 7; + + descr_d[descr_off+b] = val; + } + descr_off += DESCR_SIZE; + } + } + }; + })(); + + global.orb = orb; + })(jsfeat); /** * @author Eugene Zatepyakin / http://inspirit.ru/ diff --git a/compile/build.xml b/compile/build.xml index d14c688..8225c78 100755 --- a/compile/build.xml +++ b/compile/build.xml @@ -13,6 +13,7 @@ + diff --git a/package.json b/package.json index 6484ba2..6bc3310 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name" : "jsfeat", - "version" : "0.0.7", + "version" : "0.0.8", "description" : "JavaScript Computer Vision library", "author" : "Eugene Zatepyakin (http://www.inspirit.ru/)", "files" : "build/jsfeat.js", diff --git a/src/jsfeat_fast_corners.js b/src/jsfeat_fast_corners.js index bf99dd2..5689439 100755 --- a/src/jsfeat_fast_corners.js +++ b/src/jsfeat_fast_corners.js @@ -19,10 +19,6 @@ The references are: var offsets16 = new Int32Array([0, 3, 1, 3, 2, 2, 3, 1, 3, 0, 3, -1, 2, -2, 1, -3, 0, -3, -1, -3, -2, -2, -3, -1, -3, 0, -3, 1, -2, 2, -1, 3]); - // decided to switch it off since other pattern sizes return quite poor points - //var offsets12 = new Int32Array([0, 2, 1, 2, 2, 1, 2, 0, 2, -1, 1, -2, 0, -2, -1, -2, -2, -1, -2, 0, -2, 1, -1, 2]); - //var offsets8 = new Int32Array([0, 1, 1, 1, 1, 0, 1, -1, 0, -1, -1, -1, -1, 0, -1, 1]); - var threshold_tab = new Uint8Array(512); var pixel_off = new Int32Array(25); var score_diff = new Int32Array(25); @@ -30,7 +26,6 @@ The references are: // private functions var _cmp_offsets = function(pixel, step, pattern_size) { var k = 0; - //var offsets = pattern_size == 16 ? offsets16 : (pattern_size == 12 ? offsets12 : offsets8); var offsets = offsets16; for( ; k < pattern_size; ++k ) { pixel[k] = offsets[k<<1] + offsets[(k<<1)+1] * step; @@ -39,79 +34,7 @@ The references are: pixel[k] = pixel[k - pattern_size]; } }, -/* - _cmp_score_8 = function(src, off, pixel, d, threshold) { - var N = 13, k = 0, v = src[off]; - var a0 = threshold,a=0,b0=0,b=0; - - for( ; k < N; ++k ) { - d[k] = v - src[off+pixel[k]]; - } - - for( k = 0; k < 8; k += 2 ) { - a = Math.min(d[k+1], d[k+2]); - - if( a <= a0 ) continue; - - a = Math.min(a, d[k+3]); - a = Math.min(a, d[k+4]); - a0 = Math.max(a0, Math.min(a, d[k])); - a0 = Math.max(a0, Math.min(a, d[k+5])); - } - - b0 = -a0; - for( k = 0; k < 8; k += 2 ) { - b = Math.max(d[k+1], d[k+2]); - b = Math.max(b, d[k+3]); - - if( b >= b0 ) continue; - - b = Math.max(b, d[k+4]); - b0 = Math.min(b0, Math.max(b, d[k])); - b0 = Math.min(b0, Math.max(b, d[k+5])); - } - - return -b0-1; - }, - - _cmp_score_12 = function(src, off, pixel, d, threshold) { - var N = 19, k = 0, v = src[off]; - var a0 = threshold,a=0,b0=0,b=0; - for( ; k < N; ++k ) { - d[k] = v - src[off+pixel[k]]; - } - - for( k = 0; k < 12; k += 2 ) { - a = Math.min(d[k+1], d[k+2]); - - if( a <= a0 ) continue; - - a = Math.min(a, d[k+3]); - a = Math.min(a, d[k+4]); - a = Math.min(a, d[k+5]); - a = Math.min(a, d[k+6]); - a0 = Math.max(a0, Math.min(a, d[k])); - a0 = Math.max(a0, Math.min(a, d[k+7])); - } - - b0 = -a0; - for( k = 0; k < 12; k += 2 ) { - b = Math.max(d[k+1], d[k+2]); - b = Math.max(b, d[k+3]); - b = Math.max(b, d[k+4]); - - if( b >= b0 ) continue; - - b = Math.max(b, d[k+5]); - b = Math.max(b, d[k+6]); - b0 = Math.min(b0, Math.max(b, d[k])); - b0 = Math.min(b0, Math.max(b, d[k+7])); - } - - return -b0-1; - }, -*/ _cmp_score_16 = function(src, off, pixel, d, threshold) { var N = 25, k = 0, v = src[off]; var a0 = threshold,a=0,b0=0,b=0; @@ -165,13 +88,6 @@ The references are: }, detect: function(src, corners, border) { - /* - if (typeof pattern_size === "undefined") { - pattern_size = 16; - } else if(pattern_size != 16 && pattern_size!=12 && pattern_size!=8) { - pattern_size = 16; - } - */ if (typeof border === "undefined") { border = 3; } var K = 8, N = 25; @@ -188,7 +104,6 @@ The references are: var sx = Math.max(3, border); var ex = Math.min((w - 3), (w - border)); var _count = 0, corners_cnt = 0, pt; - //var score_func = pattern_size == 16 ? _cmp_score_16 : (pattern_size == 12 ? _cmp_score_12 : _cmp_score_8); var score_func = _cmp_score_16; var thresh_tab = threshold_tab; var threshold = _threshold; diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index 6bbb672..e50b00c 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -1100,9 +1100,9 @@ for(x = 0; x < dst_width; ++x, ++dptr, xs+=m00, ys+=m10) { ixs = xs | 0; iys = ys | 0; - if(xs > 0 && ys > 0 && ixs < (src_width - 1) && iys < (src_height - 1)) { - a = Math.max(xs - ixs, 0.0); - b = Math.max(ys - iys, 0.0); + if(ixs >= 0 && iys >= 0 && ixs < (src_width - 1) && iys < (src_height - 1)) { + a = xs - ixs; + b = ys - iys; off = src_width*iys + ixs; p0 = src_d[off] + a * (src_d[off+1] - src_d[off]); diff --git a/src/jsfeat_motion_estimator.js b/src/jsfeat_motion_estimator.js index 055e0f1..b9eeea5 100755 --- a/src/jsfeat_motion_estimator.js +++ b/src/jsfeat_motion_estimator.js @@ -312,9 +312,10 @@ } homography2d.prototype.check_subset = function(from, to, count) { - if( have_collinear_points(from, count) || have_collinear_points(to, count) ) { - return false; - } + // seems to reject good subsets actually + //if( have_collinear_points(from, count) || have_collinear_points(to, count) ) { + //return false; + //} if( count == 4 ) { var negative = 0; diff --git a/src/jsfeat_orb.js b/src/jsfeat_orb.js new file mode 100644 index 0000000..c89e609 --- /dev/null +++ b/src/jsfeat_orb.js @@ -0,0 +1,396 @@ +/** + * @author Eugene Zatepyakin / http://inspirit.ru/ + * + * Original implementation derived from OpenCV, + * @authors Ethan Rublee, Vincent Rabaud, Gary Bradski + */ + +(function(global) { + "use strict"; + // + + var orb = (function() { + + var bit_pattern_31_ = new Int32Array([ + 8,-3, 9,5/*mean (0), correlation (0)*/, + 4,2, 7,-12/*mean (1.12461e-05), correlation (0.0437584)*/, + -11,9, -8,2/*mean (3.37382e-05), correlation (0.0617409)*/, + 7,-12, 12,-13/*mean (5.62303e-05), correlation (0.0636977)*/, + 2,-13, 2,12/*mean (0.000134953), correlation (0.085099)*/, + 1,-7, 1,6/*mean (0.000528565), correlation (0.0857175)*/, + -2,-10, -2,-4/*mean (0.0188821), correlation (0.0985774)*/, + -13,-13, -11,-8/*mean (0.0363135), correlation (0.0899616)*/, + -13,-3, -12,-9/*mean (0.121806), correlation (0.099849)*/, + 10,4, 11,9/*mean (0.122065), correlation (0.093285)*/, + -13,-8, -8,-9/*mean (0.162787), correlation (0.0942748)*/, + -11,7, -9,12/*mean (0.21561), correlation (0.0974438)*/, + 7,7, 12,6/*mean (0.160583), correlation (0.130064)*/, + -4,-5, -3,0/*mean (0.228171), correlation (0.132998)*/, + -13,2, -12,-3/*mean (0.00997526), correlation (0.145926)*/, + -9,0, -7,5/*mean (0.198234), correlation (0.143636)*/, + 12,-6, 12,-1/*mean (0.0676226), correlation (0.16689)*/, + -3,6, -2,12/*mean (0.166847), correlation (0.171682)*/, + -6,-13, -4,-8/*mean (0.101215), correlation (0.179716)*/, + 11,-13, 12,-8/*mean (0.200641), correlation (0.192279)*/, + 4,7, 5,1/*mean (0.205106), correlation (0.186848)*/, + 5,-3, 10,-3/*mean (0.234908), correlation (0.192319)*/, + 3,-7, 6,12/*mean (0.0709964), correlation (0.210872)*/, + -8,-7, -6,-2/*mean (0.0939834), correlation (0.212589)*/, + -2,11, -1,-10/*mean (0.127778), correlation (0.20866)*/, + -13,12, -8,10/*mean (0.14783), correlation (0.206356)*/, + -7,3, -5,-3/*mean (0.182141), correlation (0.198942)*/, + -4,2, -3,7/*mean (0.188237), correlation (0.21384)*/, + -10,-12, -6,11/*mean (0.14865), correlation (0.23571)*/, + 5,-12, 6,-7/*mean (0.222312), correlation (0.23324)*/, + 5,-6, 7,-1/*mean (0.229082), correlation (0.23389)*/, + 1,0, 4,-5/*mean (0.241577), correlation (0.215286)*/, + 9,11, 11,-13/*mean (0.00338507), correlation (0.251373)*/, + 4,7, 4,12/*mean (0.131005), correlation (0.257622)*/, + 2,-1, 4,4/*mean (0.152755), correlation (0.255205)*/, + -4,-12, -2,7/*mean (0.182771), correlation (0.244867)*/, + -8,-5, -7,-10/*mean (0.186898), correlation (0.23901)*/, + 4,11, 9,12/*mean (0.226226), correlation (0.258255)*/, + 0,-8, 1,-13/*mean (0.0897886), correlation (0.274827)*/, + -13,-2, -8,2/*mean (0.148774), correlation (0.28065)*/, + -3,-2, -2,3/*mean (0.153048), correlation (0.283063)*/, + -6,9, -4,-9/*mean (0.169523), correlation (0.278248)*/, + 8,12, 10,7/*mean (0.225337), correlation (0.282851)*/, + 0,9, 1,3/*mean (0.226687), correlation (0.278734)*/, + 7,-5, 11,-10/*mean (0.00693882), correlation (0.305161)*/, + -13,-6, -11,0/*mean (0.0227283), correlation (0.300181)*/, + 10,7, 12,1/*mean (0.125517), correlation (0.31089)*/, + -6,-3, -6,12/*mean (0.131748), correlation (0.312779)*/, + 10,-9, 12,-4/*mean (0.144827), correlation (0.292797)*/, + -13,8, -8,-12/*mean (0.149202), correlation (0.308918)*/, + -13,0, -8,-4/*mean (0.160909), correlation (0.310013)*/, + 3,3, 7,8/*mean (0.177755), correlation (0.309394)*/, + 5,7, 10,-7/*mean (0.212337), correlation (0.310315)*/, + -1,7, 1,-12/*mean (0.214429), correlation (0.311933)*/, + 3,-10, 5,6/*mean (0.235807), correlation (0.313104)*/, + 2,-4, 3,-10/*mean (0.00494827), correlation (0.344948)*/, + -13,0, -13,5/*mean (0.0549145), correlation (0.344675)*/, + -13,-7, -12,12/*mean (0.103385), correlation (0.342715)*/, + -13,3, -11,8/*mean (0.134222), correlation (0.322922)*/, + -7,12, -4,7/*mean (0.153284), correlation (0.337061)*/, + 6,-10, 12,8/*mean (0.154881), correlation (0.329257)*/, + -9,-1, -7,-6/*mean (0.200967), correlation (0.33312)*/, + -2,-5, 0,12/*mean (0.201518), correlation (0.340635)*/, + -12,5, -7,5/*mean (0.207805), correlation (0.335631)*/, + 3,-10, 8,-13/*mean (0.224438), correlation (0.34504)*/, + -7,-7, -4,5/*mean (0.239361), correlation (0.338053)*/, + -3,-2, -1,-7/*mean (0.240744), correlation (0.344322)*/, + 2,9, 5,-11/*mean (0.242949), correlation (0.34145)*/, + -11,-13, -5,-13/*mean (0.244028), correlation (0.336861)*/, + -1,6, 0,-1/*mean (0.247571), correlation (0.343684)*/, + 5,-3, 5,2/*mean (0.000697256), correlation (0.357265)*/, + -4,-13, -4,12/*mean (0.00213675), correlation (0.373827)*/, + -9,-6, -9,6/*mean (0.0126856), correlation (0.373938)*/, + -12,-10, -8,-4/*mean (0.0152497), correlation (0.364237)*/, + 10,2, 12,-3/*mean (0.0299933), correlation (0.345292)*/, + 7,12, 12,12/*mean (0.0307242), correlation (0.366299)*/, + -7,-13, -6,5/*mean (0.0534975), correlation (0.368357)*/, + -4,9, -3,4/*mean (0.099865), correlation (0.372276)*/, + 7,-1, 12,2/*mean (0.117083), correlation (0.364529)*/, + -7,6, -5,1/*mean (0.126125), correlation (0.369606)*/, + -13,11, -12,5/*mean (0.130364), correlation (0.358502)*/, + -3,7, -2,-6/*mean (0.131691), correlation (0.375531)*/, + 7,-8, 12,-7/*mean (0.160166), correlation (0.379508)*/, + -13,-7, -11,-12/*mean (0.167848), correlation (0.353343)*/, + 1,-3, 12,12/*mean (0.183378), correlation (0.371916)*/, + 2,-6, 3,0/*mean (0.228711), correlation (0.371761)*/, + -4,3, -2,-13/*mean (0.247211), correlation (0.364063)*/, + -1,-13, 1,9/*mean (0.249325), correlation (0.378139)*/, + 7,1, 8,-6/*mean (0.000652272), correlation (0.411682)*/, + 1,-1, 3,12/*mean (0.00248538), correlation (0.392988)*/, + 9,1, 12,6/*mean (0.0206815), correlation (0.386106)*/, + -1,-9, -1,3/*mean (0.0364485), correlation (0.410752)*/, + -13,-13, -10,5/*mean (0.0376068), correlation (0.398374)*/, + 7,7, 10,12/*mean (0.0424202), correlation (0.405663)*/, + 12,-5, 12,9/*mean (0.0942645), correlation (0.410422)*/, + 6,3, 7,11/*mean (0.1074), correlation (0.413224)*/, + 5,-13, 6,10/*mean (0.109256), correlation (0.408646)*/, + 2,-12, 2,3/*mean (0.131691), correlation (0.416076)*/, + 3,8, 4,-6/*mean (0.165081), correlation (0.417569)*/, + 2,6, 12,-13/*mean (0.171874), correlation (0.408471)*/, + 9,-12, 10,3/*mean (0.175146), correlation (0.41296)*/, + -8,4, -7,9/*mean (0.183682), correlation (0.402956)*/, + -11,12, -4,-6/*mean (0.184672), correlation (0.416125)*/, + 1,12, 2,-8/*mean (0.191487), correlation (0.386696)*/, + 6,-9, 7,-4/*mean (0.192668), correlation (0.394771)*/, + 2,3, 3,-2/*mean (0.200157), correlation (0.408303)*/, + 6,3, 11,0/*mean (0.204588), correlation (0.411762)*/, + 3,-3, 8,-8/*mean (0.205904), correlation (0.416294)*/, + 7,8, 9,3/*mean (0.213237), correlation (0.409306)*/, + -11,-5, -6,-4/*mean (0.243444), correlation (0.395069)*/, + -10,11, -5,10/*mean (0.247672), correlation (0.413392)*/, + -5,-8, -3,12/*mean (0.24774), correlation (0.411416)*/, + -10,5, -9,0/*mean (0.00213675), correlation (0.454003)*/, + 8,-1, 12,-6/*mean (0.0293635), correlation (0.455368)*/, + 4,-6, 6,-11/*mean (0.0404971), correlation (0.457393)*/, + -10,12, -8,7/*mean (0.0481107), correlation (0.448364)*/, + 4,-2, 6,7/*mean (0.050641), correlation (0.455019)*/, + -2,0, -2,12/*mean (0.0525978), correlation (0.44338)*/, + -5,-8, -5,2/*mean (0.0629667), correlation (0.457096)*/, + 7,-6, 10,12/*mean (0.0653846), correlation (0.445623)*/, + -9,-13, -8,-8/*mean (0.0858749), correlation (0.449789)*/, + -5,-13, -5,-2/*mean (0.122402), correlation (0.450201)*/, + 8,-8, 9,-13/*mean (0.125416), correlation (0.453224)*/, + -9,-11, -9,0/*mean (0.130128), correlation (0.458724)*/, + 1,-8, 1,-2/*mean (0.132467), correlation (0.440133)*/, + 7,-4, 9,1/*mean (0.132692), correlation (0.454)*/, + -2,1, -1,-4/*mean (0.135695), correlation (0.455739)*/, + 11,-6, 12,-11/*mean (0.142904), correlation (0.446114)*/, + -12,-9, -6,4/*mean (0.146165), correlation (0.451473)*/, + 3,7, 7,12/*mean (0.147627), correlation (0.456643)*/, + 5,5, 10,8/*mean (0.152901), correlation (0.455036)*/, + 0,-4, 2,8/*mean (0.167083), correlation (0.459315)*/, + -9,12, -5,-13/*mean (0.173234), correlation (0.454706)*/, + 0,7, 2,12/*mean (0.18312), correlation (0.433855)*/, + -1,2, 1,7/*mean (0.185504), correlation (0.443838)*/, + 5,11, 7,-9/*mean (0.185706), correlation (0.451123)*/, + 3,5, 6,-8/*mean (0.188968), correlation (0.455808)*/, + -13,-4, -8,9/*mean (0.191667), correlation (0.459128)*/, + -5,9, -3,-3/*mean (0.193196), correlation (0.458364)*/, + -4,-7, -3,-12/*mean (0.196536), correlation (0.455782)*/, + 6,5, 8,0/*mean (0.1972), correlation (0.450481)*/, + -7,6, -6,12/*mean (0.199438), correlation (0.458156)*/, + -13,6, -5,-2/*mean (0.211224), correlation (0.449548)*/, + 1,-10, 3,10/*mean (0.211718), correlation (0.440606)*/, + 4,1, 8,-4/*mean (0.213034), correlation (0.443177)*/, + -2,-2, 2,-13/*mean (0.234334), correlation (0.455304)*/, + 2,-12, 12,12/*mean (0.235684), correlation (0.443436)*/, + -2,-13, 0,-6/*mean (0.237674), correlation (0.452525)*/, + 4,1, 9,3/*mean (0.23962), correlation (0.444824)*/, + -6,-10, -3,-5/*mean (0.248459), correlation (0.439621)*/, + -3,-13, -1,1/*mean (0.249505), correlation (0.456666)*/, + 7,5, 12,-11/*mean (0.00119208), correlation (0.495466)*/, + 4,-2, 5,-7/*mean (0.00372245), correlation (0.484214)*/, + -13,9, -9,-5/*mean (0.00741116), correlation (0.499854)*/, + 7,1, 8,6/*mean (0.0208952), correlation (0.499773)*/, + 7,-8, 7,6/*mean (0.0220085), correlation (0.501609)*/, + -7,-4, -7,1/*mean (0.0233806), correlation (0.496568)*/, + -8,11, -7,-8/*mean (0.0236505), correlation (0.489719)*/, + -13,6, -12,-8/*mean (0.0268781), correlation (0.503487)*/, + 2,4, 3,9/*mean (0.0323324), correlation (0.501938)*/, + 10,-5, 12,3/*mean (0.0399235), correlation (0.494029)*/, + -6,-5, -6,7/*mean (0.0420153), correlation (0.486579)*/, + 8,-3, 9,-8/*mean (0.0548021), correlation (0.484237)*/, + 2,-12, 2,8/*mean (0.0616622), correlation (0.496642)*/, + -11,-2, -10,3/*mean (0.0627755), correlation (0.498563)*/, + -12,-13, -7,-9/*mean (0.0829622), correlation (0.495491)*/, + -11,0, -10,-5/*mean (0.0843342), correlation (0.487146)*/, + 5,-3, 11,8/*mean (0.0929937), correlation (0.502315)*/, + -2,-13, -1,12/*mean (0.113327), correlation (0.48941)*/, + -1,-8, 0,9/*mean (0.132119), correlation (0.467268)*/, + -13,-11, -12,-5/*mean (0.136269), correlation (0.498771)*/, + -10,-2, -10,11/*mean (0.142173), correlation (0.498714)*/, + -3,9, -2,-13/*mean (0.144141), correlation (0.491973)*/, + 2,-3, 3,2/*mean (0.14892), correlation (0.500782)*/, + -9,-13, -4,0/*mean (0.150371), correlation (0.498211)*/, + -4,6, -3,-10/*mean (0.152159), correlation (0.495547)*/, + -4,12, -2,-7/*mean (0.156152), correlation (0.496925)*/, + -6,-11, -4,9/*mean (0.15749), correlation (0.499222)*/, + 6,-3, 6,11/*mean (0.159211), correlation (0.503821)*/, + -13,11, -5,5/*mean (0.162427), correlation (0.501907)*/, + 11,11, 12,6/*mean (0.16652), correlation (0.497632)*/, + 7,-5, 12,-2/*mean (0.169141), correlation (0.484474)*/, + -1,12, 0,7/*mean (0.169456), correlation (0.495339)*/, + -4,-8, -3,-2/*mean (0.171457), correlation (0.487251)*/, + -7,1, -6,7/*mean (0.175), correlation (0.500024)*/, + -13,-12, -8,-13/*mean (0.175866), correlation (0.497523)*/, + -7,-2, -6,-8/*mean (0.178273), correlation (0.501854)*/, + -8,5, -6,-9/*mean (0.181107), correlation (0.494888)*/, + -5,-1, -4,5/*mean (0.190227), correlation (0.482557)*/, + -13,7, -8,10/*mean (0.196739), correlation (0.496503)*/, + 1,5, 5,-13/*mean (0.19973), correlation (0.499759)*/, + 1,0, 10,-13/*mean (0.204465), correlation (0.49873)*/, + 9,12, 10,-1/*mean (0.209334), correlation (0.49063)*/, + 5,-8, 10,-9/*mean (0.211134), correlation (0.503011)*/, + -1,11, 1,-13/*mean (0.212), correlation (0.499414)*/, + -9,-3, -6,2/*mean (0.212168), correlation (0.480739)*/, + -1,-10, 1,12/*mean (0.212731), correlation (0.502523)*/, + -13,1, -8,-10/*mean (0.21327), correlation (0.489786)*/, + 8,-11, 10,-6/*mean (0.214159), correlation (0.488246)*/, + 2,-13, 3,-6/*mean (0.216993), correlation (0.50287)*/, + 7,-13, 12,-9/*mean (0.223639), correlation (0.470502)*/, + -10,-10, -5,-7/*mean (0.224089), correlation (0.500852)*/, + -10,-8, -8,-13/*mean (0.228666), correlation (0.502629)*/, + 4,-6, 8,5/*mean (0.22906), correlation (0.498305)*/, + 3,12, 8,-13/*mean (0.233378), correlation (0.503825)*/, + -4,2, -3,-3/*mean (0.234323), correlation (0.476692)*/, + 5,-13, 10,-12/*mean (0.236392), correlation (0.475462)*/, + 4,-13, 5,-1/*mean (0.236842), correlation (0.504132)*/, + -9,9, -4,3/*mean (0.236977), correlation (0.497739)*/, + 0,3, 3,-9/*mean (0.24314), correlation (0.499398)*/, + -12,1, -6,1/*mean (0.243297), correlation (0.489447)*/, + 3,2, 4,-8/*mean (0.00155196), correlation (0.553496)*/, + -10,-10, -10,9/*mean (0.00239541), correlation (0.54297)*/, + 8,-13, 12,12/*mean (0.0034413), correlation (0.544361)*/, + -8,-12, -6,-5/*mean (0.003565), correlation (0.551225)*/, + 2,2, 3,7/*mean (0.00835583), correlation (0.55285)*/, + 10,6, 11,-8/*mean (0.00885065), correlation (0.540913)*/, + 6,8, 8,-12/*mean (0.0101552), correlation (0.551085)*/, + -7,10, -6,5/*mean (0.0102227), correlation (0.533635)*/, + -3,-9, -3,9/*mean (0.0110211), correlation (0.543121)*/, + -1,-13, -1,5/*mean (0.0113473), correlation (0.550173)*/, + -3,-7, -3,4/*mean (0.0140913), correlation (0.554774)*/, + -8,-2, -8,3/*mean (0.017049), correlation (0.55461)*/, + 4,2, 12,12/*mean (0.01778), correlation (0.546921)*/, + 2,-5, 3,11/*mean (0.0224022), correlation (0.549667)*/, + 6,-9, 11,-13/*mean (0.029161), correlation (0.546295)*/, + 3,-1, 7,12/*mean (0.0303081), correlation (0.548599)*/, + 11,-1, 12,4/*mean (0.0355151), correlation (0.523943)*/, + -3,0, -3,6/*mean (0.0417904), correlation (0.543395)*/, + 4,-11, 4,12/*mean (0.0487292), correlation (0.542818)*/, + 2,-4, 2,1/*mean (0.0575124), correlation (0.554888)*/, + -10,-6, -8,1/*mean (0.0594242), correlation (0.544026)*/, + -13,7, -11,1/*mean (0.0597391), correlation (0.550524)*/, + -13,12, -11,-13/*mean (0.0608974), correlation (0.55383)*/, + 6,0, 11,-13/*mean (0.065126), correlation (0.552006)*/, + 0,-1, 1,4/*mean (0.074224), correlation (0.546372)*/, + -13,3, -9,-2/*mean (0.0808592), correlation (0.554875)*/, + -9,8, -6,-3/*mean (0.0883378), correlation (0.551178)*/, + -13,-6, -8,-2/*mean (0.0901035), correlation (0.548446)*/, + 5,-9, 8,10/*mean (0.0949843), correlation (0.554694)*/, + 2,7, 3,-9/*mean (0.0994152), correlation (0.550979)*/, + -1,-6, -1,-1/*mean (0.10045), correlation (0.552714)*/, + 9,5, 11,-2/*mean (0.100686), correlation (0.552594)*/, + 11,-3, 12,-8/*mean (0.101091), correlation (0.532394)*/, + 3,0, 3,5/*mean (0.101147), correlation (0.525576)*/, + -1,4, 0,10/*mean (0.105263), correlation (0.531498)*/, + 3,-6, 4,5/*mean (0.110785), correlation (0.540491)*/, + -13,0, -10,5/*mean (0.112798), correlation (0.536582)*/, + 5,8, 12,11/*mean (0.114181), correlation (0.555793)*/, + 8,9, 9,-6/*mean (0.117431), correlation (0.553763)*/, + 7,-4, 8,-12/*mean (0.118522), correlation (0.553452)*/, + -10,4, -10,9/*mean (0.12094), correlation (0.554785)*/, + 7,3, 12,4/*mean (0.122582), correlation (0.555825)*/, + 9,-7, 10,-2/*mean (0.124978), correlation (0.549846)*/, + 7,0, 12,-2/*mean (0.127002), correlation (0.537452)*/, + -1,-6, 0,-11/*mean (0.127148), correlation (0.547401)*/ + ]); + + var u_max = new Int32Array([15,15,15,15,14,14,14,13,13,12,11,10,9,8,6,3,0]); + + ic_angle = function(src, step, half_k, ptx, pty) { + var m_01 = 0, m_10 = 0; + var u=0, v=0, center_off=(pty*step + ptx)|0; + var v_sum=0,d=0,val_plus=0; + + // Treat the center line differently, v=0 + for (u = -half_k; u <= half_k; ++u) + m_10 += u * src[center_off+u]; + + // Go line by line in the circular patch + for (v = 1; v <= half_k; ++v) { + // Proceed over the two lines + v_sum = 0; + d = u_max[v]; + for (u = -d; u <= d; ++u) { + val_plus = src[center_off+u+v*step], val_minus = src[center_off+u-v*step]; + v_sum += (val_plus - val_minus); + m_10 += u * (val_plus + val_minus); + } + m_01 += v * v_sum; + } + + return Math.atan2(m_01, m_10); + }; + + var H = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); + var patch_img = new jsfeat.matrix_t(32, 32, jsfeat.U8_t|jsfeat.C1_t); + + rectify_patch = function(src, dst, angle, px, py, psize) { + var cosine = (angle>=0) ? Math.cos(angle*Math.PI/180) : 1.0; + var sine = (angle>=0) ? Math.sin(angle*Math.PI/180) : 0.0; + + H.data[0] = cosine, H.data[1] = -sine, H.data[2] = (-cosine + sine ) * psize*0.5 + px, + H.data[3] = sine, H.data[4] = cosine, H.data[5] = (-sine - cosine) * psize*0.5 + py; + + jsfeat.warp_affine(src, dst, H, 128); + }; + + return { + + describe: function(src, corners, count, descriptors) { + var DESCR_SIZE = 32; // bytes; + var i=0,b=0,px=0.0,py=0.0,angle=0.0; + var t0=0, t1=0, val=0; + var img = src.data, w = src.cols, h = src.rows; + var patch_d = patch_img.data; + var patch_off = 16*32 + 16; // center of patch + var patt=0; + + if(!(descriptors.type&jsfeat.U8_t)) { + // relocate to U8 type + descriptors.type = jsfeat.U8_t; + descriptors.cols = DESCR_SIZE; + descriptors.rows = count; + descriptors.channel = 1; + descriptors.allocate(); + } else { + descriptors.resize(DESCR_SIZE, count, 1); + } + + var descr_d = descriptors.data; + var descr_off = 0; + + for(i = 0; i < count; ++i) { + px = corners[i].x; + py = corners[i].y; + angle = corners[i].angle; + + // estimate rotation if not available + if(angle == -1.0) { + corners[i].angle = angle = ic_angle(img, w, 15, px, py); + } + + rectify_patch(src, patch_img, angle, px, py, 32); + + // describe the patch + patt = 0; + for (b = 0; b < DESCR_SIZE; ++b) { + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val = (t0 < t1)|0; + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val |= (t0 < t1) << 1; + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val |= (t0 < t1) << 2; + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val |= (t0 < t1) << 3; + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val |= (t0 < t1) << 4; + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val |= (t0 < t1) << 5; + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val |= (t0 < t1) << 6; + + t0 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + t1 = patch_d[patch_off + bit_pattern_31_[patt+1] * 32 + bit_pattern_31_[patt]]; patt += 2 + val |= (t0 < t1) << 7; + + descr_d[descr_off+b] = val; + } + descr_off += DESCR_SIZE; + } + } + }; + })(); + + global.orb = orb; + +})(jsfeat); diff --git a/src/jsfeat_struct.js b/src/jsfeat_struct.js index b95d96d..4d7aaf0 100755 --- a/src/jsfeat_struct.js +++ b/src/jsfeat_struct.js @@ -160,16 +160,18 @@ })(); var point2d_t = (function () { - function point2d_t(x,y,score,level) { + function point2d_t(x,y,score,level,angle) { if (typeof x === "undefined") { x=0; } if (typeof y === "undefined") { y=0; } if (typeof score === "undefined") { score=0; } if (typeof level === "undefined") { level=0; } + if (typeof angle === "undefined") { angle=-1.0; } this.x = x; this.y = y; this.score = score; this.level = level; + this.angle = angle; } return point2d_t; })(); diff --git a/src/jsfeat_yape06.js b/src/jsfeat_yape06.js index 2d1559b..55664dd 100755 --- a/src/jsfeat_yape06.js +++ b/src/jsfeat_yape06.js @@ -13,12 +13,11 @@ var yape06 = (function() { var compute_laplacian = function(src, dst, w, h, Dxx, Dyy) { - var y=0,x=0,yrow=(Dxx*w)|0,row=yrow; + var y=0,x=0,yrow=(Dxx*w+Dxx)|0,row=yrow; for(y = Dxx; y < h - Dxx; ++y, yrow+=w, row = yrow) { - for(x = w - Dxx; x >= Dxx; --x) { + for(x = Dxx; x < w - Dxx; ++x, ++row) { dst[row] = -4 * src[row] + src[row+Dxx] + src[row-Dxx] + src[row+Dyy] + src[row-Dyy]; - ++row; } } } @@ -53,9 +52,9 @@ while(--x>=0) {laplacian[x]=0;} compute_laplacian(srd_d, laplacian, w, h, Dxx, Dyy); - row = (w+1)|0; - for(y = 1; y < h-1; ++y, row += w) { - for(x = 1, rowx=row; x < w-1; ++x, ++rowx) { + row = (Dxx*w+Dxx)|0; + for(y = Dxx; y < h-Dxx; ++y, row += w) { + for(x = Dxx, rowx=row; x < w-Dxx; ++x, ++rowx) { lv = laplacian[rowx]; if ((lv < -lap_thresh && @@ -76,7 +75,7 @@ pt = points[number_of_points]; pt.x = x, pt.y = y, pt.score = min_eigen_value; ++number_of_points; - ++x, ++rowx; + ++x, ++rowx; // skip next pixel since this is maxima in 3x3 } } } From f57e88cbba55d9565e773ecf5e4a9a1cbe59f274 Mon Sep 17 00:00:00 2001 From: Seamus Minogue Date: Thu, 13 Apr 2017 13:39:11 -0400 Subject: [PATCH 39/46] updated build files. Changes to the master have been made since the last time the combined and minimized jsfeat.js files were last updated. Specifically hough_transform support has been added. --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 73 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index 8e47cac..f1dc9da 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(r){var o=1.192092896e-7;var l=1e-37;var m=256,i=512,h=1024,x=2048,w=4096;var A=1,n=2,b=3,p=4;var z=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var y=(function(){return function(B){return(B&65280)}})();var k=(function(){return function(B){return(B&255)}})();var c=(function(){return function(B){return z[(B&65280)>>8]}})();var a=0;var f=1;var e=2;var u=3;var d=1;var s=1;var g=2;var v=(function(){function B(D,C){this.size=((D+7)|0)&-8;if(typeof C==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=C;this.size=C.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return B})();var q=(function(){function B(F,D,E,C){this.type=y(E)|0;this.channel=k(E)|0;this.cols=F|0;this.rows=D|0;if(typeof C==="undefined"){this.allocate()}else{this.buffer=C;this.data=this.type&m?this.buffer.u8:(this.type&i?this.buffer.i32:(this.type&h?this.buffer.f32:this.buffer.f64))}}B.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new v((this.cols*c(this.type)*this.channel)*this.rows);this.data=this.type&m?this.buffer.u8:(this.type&i?this.buffer.i32:(this.type&h?this.buffer.f32:this.buffer.f64))};B.prototype.copy_to=function(D){var C=D.data,G=this.data;var E=0,F=(this.cols*this.rows*this.channel)|0;for(;Ethis.buffer.size){this.cols=F;this.rows=D;this.channel=C;this.allocate()}else{this.cols=F;this.rows=D;this.channel=C}};return B})();var t=(function(){function B(C){this.levels=C|0;this.data=new Array(C);this.pyrdown=jsfeat.imgproc.pyrdown}B.prototype.allocate=function(C,E,F){var D=this.levels;while(--D>=0){this.data[D]=new q(C>>D,E>>D,F)}};B.prototype.build=function(F,E){if(typeof E==="undefined"){E=true}var H=2,D=F,C=this.data[0];if(!E){var G=F.cols*F.rows;while(--G>=0){C.data[G]=F.data[G]}}C=this.data[1];this.pyrdown(D,C);for(;Hh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;t[u+1]=(n[m+o]*s+n[m+o+1]*B+n[m+o+2]*C+8192)>>14;t[u+2]=(n[m+l]*s+n[m+l+1]*B+n[m+l+2]*C+8192)>>14;t[u+3]=(n[m+k]*s+n[m+k+1]*B+n[m+k+2]*C+8192)>>14}for(;q>14}}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){m.resize(i,k,l.channel);if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;J.resize(z,E,r.channel);for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;s.resize(t,p,g.channel);var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;A.resize(p,l,k.channel);var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;G.resize(p,s,2);var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data;r.resize(s,q,j.channel);var l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n=0&&A>=0&&q<(u-1)&&A<(z-1)){G=m-q;D=w-A;I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}},skindetector:function(o,p){var n,m,h,k;var l=o.width*o.height;while(l--){k=l*4;n=o.data[k];m=o.data[k+1];h=o.data[k+2];if((n>95)&&(m>40)&&(h>20)&&(n>m)&&(n>h)&&(n-Math.min(m,h)>15)&&(Math.abs(n-m)>15)){p[l]=255}else{p[l]=0}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,l,q,i,r,g,p,n,k,j){var m=0,o=0,f=(n*q+p)|0,s=f;for(m=n;m=0){j[o]=0}d(q,j,p,B,H,f,t,s,E,C);k=(s*p+t)|0;for(n=s;nF&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,H,f,G,g);if(r>D){v=A[u];v.x=o,v.y=n,v.score=r;++u;++o,++m}}}}jsfeat.cache.put_buffer(e);return u}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var d=new Int32Array([8,-3,9,5,4,2,7,-12,-11,9,-8,2,7,-12,12,-13,2,-13,2,12,1,-7,1,6,-2,-10,-2,-4,-13,-13,-11,-8,-13,-3,-12,-9,10,4,11,9,-13,-8,-8,-9,-11,7,-9,12,7,7,12,6,-4,-5,-3,0,-13,2,-12,-3,-9,0,-7,5,12,-6,12,-1,-3,6,-2,12,-6,-13,-4,-8,11,-13,12,-8,4,7,5,1,5,-3,10,-3,3,-7,6,12,-8,-7,-6,-2,-2,11,-1,-10,-13,12,-8,10,-7,3,-5,-3,-4,2,-3,7,-10,-12,-6,11,5,-12,6,-7,5,-6,7,-1,1,0,4,-5,9,11,11,-13,4,7,4,12,2,-1,4,4,-4,-12,-2,7,-8,-5,-7,-10,4,11,9,12,0,-8,1,-13,-13,-2,-8,2,-3,-2,-2,3,-6,9,-4,-9,8,12,10,7,0,9,1,3,7,-5,11,-10,-13,-6,-11,0,10,7,12,1,-6,-3,-6,12,10,-9,12,-4,-13,8,-8,-12,-13,0,-8,-4,3,3,7,8,5,7,10,-7,-1,7,1,-12,3,-10,5,6,2,-4,3,-10,-13,0,-13,5,-13,-7,-12,12,-13,3,-11,8,-7,12,-4,7,6,-10,12,8,-9,-1,-7,-6,-2,-5,0,12,-12,5,-7,5,3,-10,8,-13,-7,-7,-4,5,-3,-2,-1,-7,2,9,5,-11,-11,-13,-5,-13,-1,6,0,-1,5,-3,5,2,-4,-13,-4,12,-9,-6,-9,6,-12,-10,-8,-4,10,2,12,-3,7,12,12,12,-7,-13,-6,5,-4,9,-3,4,7,-1,12,2,-7,6,-5,1,-13,11,-12,5,-3,7,-2,-6,7,-8,12,-7,-13,-7,-11,-12,1,-3,12,12,2,-6,3,0,-4,3,-2,-13,-1,-13,1,9,7,1,8,-6,1,-1,3,12,9,1,12,6,-1,-9,-1,3,-13,-13,-10,5,7,7,10,12,12,-5,12,9,6,3,7,11,5,-13,6,10,2,-12,2,3,3,8,4,-6,2,6,12,-13,9,-12,10,3,-8,4,-7,9,-11,12,-4,-6,1,12,2,-8,6,-9,7,-4,2,3,3,-2,6,3,11,0,3,-3,8,-8,7,8,9,3,-11,-5,-6,-4,-10,11,-5,10,-5,-8,-3,12,-10,5,-9,0,8,-1,12,-6,4,-6,6,-11,-10,12,-8,7,4,-2,6,7,-2,0,-2,12,-5,-8,-5,2,7,-6,10,12,-9,-13,-8,-8,-5,-13,-5,-2,8,-8,9,-13,-9,-11,-9,0,1,-8,1,-2,7,-4,9,1,-2,1,-1,-4,11,-6,12,-11,-12,-9,-6,4,3,7,7,12,5,5,10,8,0,-4,2,8,-9,12,-5,-13,0,7,2,12,-1,2,1,7,5,11,7,-9,3,5,6,-8,-13,-4,-8,9,-5,9,-3,-3,-4,-7,-3,-12,6,5,8,0,-7,6,-6,12,-13,6,-5,-2,1,-10,3,10,4,1,8,-4,-2,-2,2,-13,2,-12,12,12,-2,-13,0,-6,4,1,9,3,-6,-10,-3,-5,-3,-13,-1,1,7,5,12,-11,4,-2,5,-7,-13,9,-9,-5,7,1,8,6,7,-8,7,6,-7,-4,-7,1,-8,11,-7,-8,-13,6,-12,-8,2,4,3,9,10,-5,12,3,-6,-5,-6,7,8,-3,9,-8,2,-12,2,8,-11,-2,-10,3,-12,-13,-7,-9,-11,0,-10,-5,5,-3,11,8,-2,-13,-1,12,-1,-8,0,9,-13,-11,-12,-5,-10,-2,-10,11,-3,9,-2,-13,2,-3,3,2,-9,-13,-4,0,-4,6,-3,-10,-4,12,-2,-7,-6,-11,-4,9,6,-3,6,11,-13,11,-5,5,11,11,12,6,7,-5,12,-2,-1,12,0,7,-4,-8,-3,-2,-7,1,-6,7,-13,-12,-8,-13,-7,-2,-6,-8,-8,5,-6,-9,-5,-1,-4,5,-13,7,-8,10,1,5,5,-13,1,0,10,-13,9,12,10,-1,5,-8,10,-9,-1,11,1,-13,-9,-3,-6,2,-1,-10,1,12,-13,1,-8,-10,8,-11,10,-6,2,-13,3,-6,7,-13,12,-9,-10,-10,-5,-7,-10,-8,-8,-13,4,-6,8,5,3,12,8,-13,-4,2,-3,-3,5,-13,10,-12,4,-13,5,-1,-9,9,-4,3,0,3,3,-9,-12,1,-6,1,3,2,4,-8,-10,-10,-10,9,8,-13,12,12,-8,-12,-6,-5,2,2,3,7,10,6,11,-8,6,8,8,-12,-7,10,-6,5,-3,-9,-3,9,-1,-13,-1,5,-3,-7,-3,4,-8,-2,-8,3,4,2,12,12,2,-5,3,11,6,-9,11,-13,3,-1,7,12,11,-1,12,4,-3,0,-3,6,4,-11,4,12,2,-4,2,1,-10,-6,-8,1,-13,7,-11,1,-13,12,-11,-13,6,0,11,-13,0,-1,1,4,-13,3,-9,-2,-9,8,-6,-3,-13,-6,-8,-2,5,-9,8,10,2,7,3,-9,-1,-6,-1,-1,9,5,11,-2,11,-3,12,-8,3,0,3,5,-1,4,0,10,3,-6,4,5,-13,0,-10,5,5,8,12,11,8,9,9,-6,7,-4,8,-12,-10,4,-10,9,7,3,12,4,9,-7,10,-2,7,0,12,-2,-1,-6,0,-11]);var c=new jsfeat.matrix_t(3,3,jsfeat.F32_t|jsfeat.C1_t);var f=new jsfeat.matrix_t(32,32,jsfeat.U8_t|jsfeat.C1_t);var e=function(l,n,k,i,h,j){var m=Math.cos(k);var g=Math.sin(k);c.data[0]=m,c.data[1]=-g,c.data[2]=(-m+g)*j*0.5+i,c.data[3]=g,c.data[4]=m,c.data[5]=(-g-m)*j*0.5+h;jsfeat.imgproc.warp_affine(l,n,c,128)};return{describe:function(j,u,g,B){var r=32;var x=0,A=0,q=0,p=0,z=0;var o=0,m=0,D=0;var C=j.data,n=j.cols,y=j.rows;var t=f.data;var v=16*32+16;var k=0;if(!(B.type&jsfeat.U8_t)){B.type=jsfeat.U8_t;B.cols=r;B.rows=g;B.channel=1;B.allocate()}else{B.resize(r,g,1)}var l=B.data;var s=0;for(x=0;x=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(r){var o=1.192092896e-7;var l=1e-37;var m=256,i=512,h=1024,x=2048,w=4096;var A=1,n=2,b=3,p=4;var z=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var y=(function(){return function(B){return(B&65280)}})();var k=(function(){return function(B){return(B&255)}})();var c=(function(){return function(B){return z[(B&65280)>>8]}})();var a=0;var f=1;var e=2;var u=3;var d=1;var s=1;var g=2;var v=(function(){function B(D,C){this.size=((D+7)|0)&-8;if(typeof C==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=C;this.size=C.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return B})();var q=(function(){function B(F,D,E,C){this.type=y(E)|0;this.channel=k(E)|0;this.cols=F|0;this.rows=D|0;if(typeof C==="undefined"){this.allocate()}else{this.buffer=C;this.data=this.type&m?this.buffer.u8:(this.type&i?this.buffer.i32:(this.type&h?this.buffer.f32:this.buffer.f64))}}B.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new v((this.cols*c(this.type)*this.channel)*this.rows);this.data=this.type&m?this.buffer.u8:(this.type&i?this.buffer.i32:(this.type&h?this.buffer.f32:this.buffer.f64))};B.prototype.copy_to=function(D){var C=D.data,G=this.data;var E=0,F=(this.cols*this.rows*this.channel)|0;for(;Ethis.buffer.size){this.cols=F;this.rows=D;this.channel=C;this.allocate()}else{this.cols=F;this.rows=D;this.channel=C}};return B})();var t=(function(){function B(C){this.levels=C|0;this.data=new Array(C);this.pyrdown=jsfeat.imgproc.pyrdown}B.prototype.allocate=function(C,E,F){var D=this.levels;while(--D>=0){this.data[D]=new q(C>>D,E>>D,F)}};B.prototype.build=function(F,E){if(typeof E==="undefined"){E=true}var H=2,D=F,C=this.data[0];if(!E){var G=F.cols*F.rows;while(--G>=0){C.data[G]=F.data[G]}}C=this.data[1];this.pyrdown(D,C);for(;Hh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;t[u+1]=(n[m+o]*s+n[m+o+1]*B+n[m+o+2]*C+8192)>>14;t[u+2]=(n[m+l]*s+n[m+l+1]*B+n[m+l+2]*C+8192)>>14;t[u+3]=(n[m+k]*s+n[m+k+1]*B+n[m+k+2]*C+8192)>>14}for(;q>14}}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){m.resize(i,k,l.channel);if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;J.resize(z,E,r.channel);for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;s.resize(t,p,g.channel);var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},hough_transform:function(D,q,C,m){var v=D.data;var x=D.cols;var u=D.rows;var p=x;min_theta=0;max_theta=Math.PI;numangle=Math.round((max_theta-min_theta)/C);numrho=Math.round(((x+u)*2+1)/q);irho=1/q;var A=new Int32Array((numangle+2)*(numrho+2));var g=new Float32Array(numangle);var k=new Float32Array(numangle);var w=0;var B=min_theta;for(;wm&&A[o]>A[o-1]&&A[o]>=A[o+1]&&A[o]>A[o-numrho-2]&&A[o]>=A[o+numrho+2]){_sort_buf.push(o)}}}_sort_buf.sort(function(j,i){return A[j]>A[i]||(A[j]==A[i]&&j>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;A.resize(p,l,k.channel);var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;G.resize(p,s,2);var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data;r.resize(s,q,j.channel);var l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n=0&&A>=0&&q<(u-1)&&A<(z-1)){G=m-q;D=w-A;I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}},skindetector:function(o,p){var n,m,h,k;var l=o.width*o.height;while(l--){k=l*4;n=o.data[k];m=o.data[k+1];h=o.data[k+2];if((n>95)&&(m>40)&&(h>20)&&(n>m)&&(n>h)&&(n-Math.min(m,h)>15)&&(Math.abs(n-m)>15)){p[l]=255}else{p[l]=0}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,l,q,i,r,g,p,n,k,j){var m=0,o=0,f=(n*q+p)|0,s=f;for(m=n;m=0){j[o]=0}d(q,j,p,B,H,f,t,s,E,C);k=(s*p+t)|0;for(n=s;nF&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,H,f,G,g);if(r>D){v=A[u];v.x=o,v.y=n,v.score=r;++u;++o,++m}}}}jsfeat.cache.put_buffer(e);return u}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var d=new Int32Array([8,-3,9,5,4,2,7,-12,-11,9,-8,2,7,-12,12,-13,2,-13,2,12,1,-7,1,6,-2,-10,-2,-4,-13,-13,-11,-8,-13,-3,-12,-9,10,4,11,9,-13,-8,-8,-9,-11,7,-9,12,7,7,12,6,-4,-5,-3,0,-13,2,-12,-3,-9,0,-7,5,12,-6,12,-1,-3,6,-2,12,-6,-13,-4,-8,11,-13,12,-8,4,7,5,1,5,-3,10,-3,3,-7,6,12,-8,-7,-6,-2,-2,11,-1,-10,-13,12,-8,10,-7,3,-5,-3,-4,2,-3,7,-10,-12,-6,11,5,-12,6,-7,5,-6,7,-1,1,0,4,-5,9,11,11,-13,4,7,4,12,2,-1,4,4,-4,-12,-2,7,-8,-5,-7,-10,4,11,9,12,0,-8,1,-13,-13,-2,-8,2,-3,-2,-2,3,-6,9,-4,-9,8,12,10,7,0,9,1,3,7,-5,11,-10,-13,-6,-11,0,10,7,12,1,-6,-3,-6,12,10,-9,12,-4,-13,8,-8,-12,-13,0,-8,-4,3,3,7,8,5,7,10,-7,-1,7,1,-12,3,-10,5,6,2,-4,3,-10,-13,0,-13,5,-13,-7,-12,12,-13,3,-11,8,-7,12,-4,7,6,-10,12,8,-9,-1,-7,-6,-2,-5,0,12,-12,5,-7,5,3,-10,8,-13,-7,-7,-4,5,-3,-2,-1,-7,2,9,5,-11,-11,-13,-5,-13,-1,6,0,-1,5,-3,5,2,-4,-13,-4,12,-9,-6,-9,6,-12,-10,-8,-4,10,2,12,-3,7,12,12,12,-7,-13,-6,5,-4,9,-3,4,7,-1,12,2,-7,6,-5,1,-13,11,-12,5,-3,7,-2,-6,7,-8,12,-7,-13,-7,-11,-12,1,-3,12,12,2,-6,3,0,-4,3,-2,-13,-1,-13,1,9,7,1,8,-6,1,-1,3,12,9,1,12,6,-1,-9,-1,3,-13,-13,-10,5,7,7,10,12,12,-5,12,9,6,3,7,11,5,-13,6,10,2,-12,2,3,3,8,4,-6,2,6,12,-13,9,-12,10,3,-8,4,-7,9,-11,12,-4,-6,1,12,2,-8,6,-9,7,-4,2,3,3,-2,6,3,11,0,3,-3,8,-8,7,8,9,3,-11,-5,-6,-4,-10,11,-5,10,-5,-8,-3,12,-10,5,-9,0,8,-1,12,-6,4,-6,6,-11,-10,12,-8,7,4,-2,6,7,-2,0,-2,12,-5,-8,-5,2,7,-6,10,12,-9,-13,-8,-8,-5,-13,-5,-2,8,-8,9,-13,-9,-11,-9,0,1,-8,1,-2,7,-4,9,1,-2,1,-1,-4,11,-6,12,-11,-12,-9,-6,4,3,7,7,12,5,5,10,8,0,-4,2,8,-9,12,-5,-13,0,7,2,12,-1,2,1,7,5,11,7,-9,3,5,6,-8,-13,-4,-8,9,-5,9,-3,-3,-4,-7,-3,-12,6,5,8,0,-7,6,-6,12,-13,6,-5,-2,1,-10,3,10,4,1,8,-4,-2,-2,2,-13,2,-12,12,12,-2,-13,0,-6,4,1,9,3,-6,-10,-3,-5,-3,-13,-1,1,7,5,12,-11,4,-2,5,-7,-13,9,-9,-5,7,1,8,6,7,-8,7,6,-7,-4,-7,1,-8,11,-7,-8,-13,6,-12,-8,2,4,3,9,10,-5,12,3,-6,-5,-6,7,8,-3,9,-8,2,-12,2,8,-11,-2,-10,3,-12,-13,-7,-9,-11,0,-10,-5,5,-3,11,8,-2,-13,-1,12,-1,-8,0,9,-13,-11,-12,-5,-10,-2,-10,11,-3,9,-2,-13,2,-3,3,2,-9,-13,-4,0,-4,6,-3,-10,-4,12,-2,-7,-6,-11,-4,9,6,-3,6,11,-13,11,-5,5,11,11,12,6,7,-5,12,-2,-1,12,0,7,-4,-8,-3,-2,-7,1,-6,7,-13,-12,-8,-13,-7,-2,-6,-8,-8,5,-6,-9,-5,-1,-4,5,-13,7,-8,10,1,5,5,-13,1,0,10,-13,9,12,10,-1,5,-8,10,-9,-1,11,1,-13,-9,-3,-6,2,-1,-10,1,12,-13,1,-8,-10,8,-11,10,-6,2,-13,3,-6,7,-13,12,-9,-10,-10,-5,-7,-10,-8,-8,-13,4,-6,8,5,3,12,8,-13,-4,2,-3,-3,5,-13,10,-12,4,-13,5,-1,-9,9,-4,3,0,3,3,-9,-12,1,-6,1,3,2,4,-8,-10,-10,-10,9,8,-13,12,12,-8,-12,-6,-5,2,2,3,7,10,6,11,-8,6,8,8,-12,-7,10,-6,5,-3,-9,-3,9,-1,-13,-1,5,-3,-7,-3,4,-8,-2,-8,3,4,2,12,12,2,-5,3,11,6,-9,11,-13,3,-1,7,12,11,-1,12,4,-3,0,-3,6,4,-11,4,12,2,-4,2,1,-10,-6,-8,1,-13,7,-11,1,-13,12,-11,-13,6,0,11,-13,0,-1,1,4,-13,3,-9,-2,-9,8,-6,-3,-13,-6,-8,-2,5,-9,8,10,2,7,3,-9,-1,-6,-1,-1,9,5,11,-2,11,-3,12,-8,3,0,3,5,-1,4,0,10,3,-6,4,5,-13,0,-10,5,5,8,12,11,8,9,9,-6,7,-4,8,-12,-10,4,-10,9,7,3,12,4,9,-7,10,-2,7,0,12,-2,-1,-6,0,-11]);var c=new jsfeat.matrix_t(3,3,jsfeat.F32_t|jsfeat.C1_t);var f=new jsfeat.matrix_t(32,32,jsfeat.U8_t|jsfeat.C1_t);var e=function(l,n,k,i,h,j){var m=Math.cos(k);var g=Math.sin(k);c.data[0]=m,c.data[1]=-g,c.data[2]=(-m+g)*j*0.5+i,c.data[3]=g,c.data[4]=m,c.data[5]=(-g-m)*j*0.5+h;jsfeat.imgproc.warp_affine(l,n,c,128)};return{describe:function(j,u,g,B){var r=32;var x=0,A=0,q=0,p=0,z=0;var o=0,m=0,D=0;var C=j.data,n=j.cols,y=j.rows;var t=f.data;var v=16*32+16;var k=0;if(!(B.type&jsfeat.U8_t)){B.type=jsfeat.U8_t;B.cols=r;B.rows=g;B.channel=1;B.allocate()}else{B.resize(r,g,1)}var l=B.data;var s=0;for(x=0;x=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index 5618d41..f9cc93b 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -2933,6 +2933,79 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; jsfeat.cache.put_buffer(buf_node); jsfeat.cache.put_buffer(filt_node); }, + hough_transform: function( img, rho_res, theta_res, threshold ) { + var image = img.data; + + var width = img.cols; + var height = img.rows; + var step = width; + + min_theta = 0.0; + max_theta = Math.PI; + + numangle = Math.round((max_theta - min_theta) / theta_res); + numrho = Math.round(((width + height) * 2 + 1) / rho_res); + irho = 1.0 / rho_res; + + var accum = new Int32Array((numangle+2) * (numrho+2)); //typed arrays are initialized to 0 + var tabSin = new Float32Array(numangle); + var tabCos = new Float32Array(numangle); + + var n=0; + var ang = min_theta; + for(; n < numangle; n++ ) { + tabSin[n] = Math.sin(ang) * irho; + tabCos[n] = Math.cos(ang) * irho; + ang += theta_res + } + + // stage 1. fill accumulator + for( var i = 0; i < height; i++ ) { + for( var j = 0; j < width; j++ ) { + if( image[i * step + j] != 0 ) { + //console.log(r, (n+1) * (numrho+2) + r+1, tabCos[n], tabSin[n]); + for(var n = 0; n < numangle; n++ ) { + var r = Math.round( j * tabCos[n] + i * tabSin[n] ); + r += (numrho - 1) / 2; + accum[(n+1) * (numrho+2) + r+1] += 1; + } + } + } + } + + // stage 2. find local maximums + //TODO: Consider making a vector class that uses typed arrays + _sort_buf = new Array(); + for(var r = 0; r < numrho; r++ ) { + for(var n = 0; n < numangle; n++ ) { + var base = (n+1) * (numrho+2) + r+1; + if( accum[base] > threshold && + accum[base] > accum[base - 1] && accum[base] >= accum[base + 1] && + accum[base] > accum[base - numrho - 2] && accum[base] >= accum[base + numrho + 2] ) { + _sort_buf.push(base); + } + } + } + + // stage 3. sort the detected lines by accumulator value + _sort_buf.sort(function(l1, l2) { + return accum[l1] > accum[l2] || (accum[l1] == accum[l2] && l1 < l2); + }); + + // stage 4. store the first min(total,linesMax) lines to the output buffer + linesMax = Math.min(numangle*numrho, _sort_buf.length); + scale = 1.0 / (numrho+2); + lines = new Array(); + for( var i = 0; i < linesMax; i++ ) { + var idx = _sort_buf[i]; + var n = Math.floor(idx*scale) - 1; + var r = idx - (n+1)*(numrho+2) - 1; + var lrho = (r - (numrho - 1)*0.5) * rho_res; + var langle = n * theta_res; + lines.push([lrho, langle]); + } + return lines; + }, // assume we always need it for u8 image pyrdown: function(src, dst, sx, sy) { // this is needed for bbf From 8a1bbf97005a84d4d032aad1e07c814041d1efa4 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Mon, 1 Sep 2014 20:35:24 +0100 Subject: [PATCH 40/46] orb --- src/jsfeat_orb.js | 40 ++++------------------------------------ 1 file changed, 4 insertions(+), 36 deletions(-) diff --git a/src/jsfeat_orb.js b/src/jsfeat_orb.js index c89e609..bf5f22a 100644 --- a/src/jsfeat_orb.js +++ b/src/jsfeat_orb.js @@ -270,45 +270,18 @@ -1,-6, 0,-11/*mean (0.127148), correlation (0.547401)*/ ]); - var u_max = new Int32Array([15,15,15,15,14,14,14,13,13,12,11,10,9,8,6,3,0]); - - ic_angle = function(src, step, half_k, ptx, pty) { - var m_01 = 0, m_10 = 0; - var u=0, v=0, center_off=(pty*step + ptx)|0; - var v_sum=0,d=0,val_plus=0; - - // Treat the center line differently, v=0 - for (u = -half_k; u <= half_k; ++u) - m_10 += u * src[center_off+u]; - - // Go line by line in the circular patch - for (v = 1; v <= half_k; ++v) { - // Proceed over the two lines - v_sum = 0; - d = u_max[v]; - for (u = -d; u <= d; ++u) { - val_plus = src[center_off+u+v*step], val_minus = src[center_off+u-v*step]; - v_sum += (val_plus - val_minus); - m_10 += u * (val_plus + val_minus); - } - m_01 += v * v_sum; - } - - return Math.atan2(m_01, m_10); - }; - var H = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); var patch_img = new jsfeat.matrix_t(32, 32, jsfeat.U8_t|jsfeat.C1_t); - rectify_patch = function(src, dst, angle, px, py, psize) { - var cosine = (angle>=0) ? Math.cos(angle*Math.PI/180) : 1.0; - var sine = (angle>=0) ? Math.sin(angle*Math.PI/180) : 0.0; + var rectify_patch = function(src, dst, angle, px, py, psize) { + var cosine = Math.cos(angle); + var sine = Math.sin(angle); H.data[0] = cosine, H.data[1] = -sine, H.data[2] = (-cosine + sine ) * psize*0.5 + px, H.data[3] = sine, H.data[4] = cosine, H.data[5] = (-sine - cosine) * psize*0.5 + py; jsfeat.warp_affine(src, dst, H, 128); - }; + } return { @@ -340,11 +313,6 @@ py = corners[i].y; angle = corners[i].angle; - // estimate rotation if not available - if(angle == -1.0) { - corners[i].angle = angle = ic_angle(img, w, 15, px, py); - } - rectify_patch(src, patch_img, angle, px, py, 32); // describe the patch From c152e30e627f1771b1930f3dfb6006f8e734f1e3 Mon Sep 17 00:00:00 2001 From: literalpie Date: Wed, 14 Feb 2018 16:02:19 -0500 Subject: [PATCH 41/46] fix: declare all variables in Hough Transform Some variables in the `hough_transform` function were not declared. --- src/jsfeat_imgproc.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index 58e8839..5462684 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -628,12 +628,12 @@ var height = img.rows; var step = width; - min_theta = 0.0; - max_theta = Math.PI; + var min_theta = 0.0; + var max_theta = Math.PI; - numangle = Math.round((max_theta - min_theta) / theta_res); - numrho = Math.round(((width + height) * 2 + 1) / rho_res); - irho = 1.0 / rho_res; + var numangle = Math.round((max_theta - min_theta) / theta_res); + var numrho = Math.round(((width + height) * 2 + 1) / rho_res); + var irho = 1.0 / rho_res; var accum = new Int32Array((numangle+2) * (numrho+2)); //typed arrays are initialized to 0 var tabSin = new Float32Array(numangle); @@ -663,7 +663,7 @@ // stage 2. find local maximums //TODO: Consider making a vector class that uses typed arrays - _sort_buf = new Array(); + var _sort_buf = new Array(); for(var r = 0; r < numrho; r++ ) { for(var n = 0; n < numangle; n++ ) { var base = (n+1) * (numrho+2) + r+1; @@ -681,9 +681,9 @@ }); // stage 4. store the first min(total,linesMax) lines to the output buffer - linesMax = Math.min(numangle*numrho, _sort_buf.length); - scale = 1.0 / (numrho+2); - lines = new Array(); + var linesMax = Math.min(numangle*numrho, _sort_buf.length); + var scale = 1.0 / (numrho+2); + var lines = new Array(); for( var i = 0; i < linesMax; i++ ) { var idx = _sort_buf[i]; var n = Math.floor(idx*scale) - 1; From 8ed79550605fc1a544f4ab6c098956817ad3b551 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Mon, 1 Sep 2014 21:28:12 +0100 Subject: [PATCH 42/46] recompile --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 40 ++++------------------------------------ 2 files changed, 5 insertions(+), 37 deletions(-) diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index a36ba48..f703a5a 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n=0&&A>=0&&q<(u-1)&&A<(z-1)){G=m-q;D=w-A;I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}},skindetector:function(o,p){var n,m,h,k;var l=o.width*o.height;while(l--){k=l*4;n=o.data[k];m=o.data[k+1];h=o.data[k+2];if((n>95)&&(m>40)&&(h>20)&&(n>m)&&(n>h)&&(n-Math.min(m,h)>15)&&(Math.abs(n-m)>15)){p[l]=255}else{p[l]=0}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m+n)|0,o=f;for(k=n;k=0){j[o]=0}d(q,j,p,v,C,f);k=(C*p+C)|0;for(n=C;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var d=new Int32Array([8,-3,9,5,4,2,7,-12,-11,9,-8,2,7,-12,12,-13,2,-13,2,12,1,-7,1,6,-2,-10,-2,-4,-13,-13,-11,-8,-13,-3,-12,-9,10,4,11,9,-13,-8,-8,-9,-11,7,-9,12,7,7,12,6,-4,-5,-3,0,-13,2,-12,-3,-9,0,-7,5,12,-6,12,-1,-3,6,-2,12,-6,-13,-4,-8,11,-13,12,-8,4,7,5,1,5,-3,10,-3,3,-7,6,12,-8,-7,-6,-2,-2,11,-1,-10,-13,12,-8,10,-7,3,-5,-3,-4,2,-3,7,-10,-12,-6,11,5,-12,6,-7,5,-6,7,-1,1,0,4,-5,9,11,11,-13,4,7,4,12,2,-1,4,4,-4,-12,-2,7,-8,-5,-7,-10,4,11,9,12,0,-8,1,-13,-13,-2,-8,2,-3,-2,-2,3,-6,9,-4,-9,8,12,10,7,0,9,1,3,7,-5,11,-10,-13,-6,-11,0,10,7,12,1,-6,-3,-6,12,10,-9,12,-4,-13,8,-8,-12,-13,0,-8,-4,3,3,7,8,5,7,10,-7,-1,7,1,-12,3,-10,5,6,2,-4,3,-10,-13,0,-13,5,-13,-7,-12,12,-13,3,-11,8,-7,12,-4,7,6,-10,12,8,-9,-1,-7,-6,-2,-5,0,12,-12,5,-7,5,3,-10,8,-13,-7,-7,-4,5,-3,-2,-1,-7,2,9,5,-11,-11,-13,-5,-13,-1,6,0,-1,5,-3,5,2,-4,-13,-4,12,-9,-6,-9,6,-12,-10,-8,-4,10,2,12,-3,7,12,12,12,-7,-13,-6,5,-4,9,-3,4,7,-1,12,2,-7,6,-5,1,-13,11,-12,5,-3,7,-2,-6,7,-8,12,-7,-13,-7,-11,-12,1,-3,12,12,2,-6,3,0,-4,3,-2,-13,-1,-13,1,9,7,1,8,-6,1,-1,3,12,9,1,12,6,-1,-9,-1,3,-13,-13,-10,5,7,7,10,12,12,-5,12,9,6,3,7,11,5,-13,6,10,2,-12,2,3,3,8,4,-6,2,6,12,-13,9,-12,10,3,-8,4,-7,9,-11,12,-4,-6,1,12,2,-8,6,-9,7,-4,2,3,3,-2,6,3,11,0,3,-3,8,-8,7,8,9,3,-11,-5,-6,-4,-10,11,-5,10,-5,-8,-3,12,-10,5,-9,0,8,-1,12,-6,4,-6,6,-11,-10,12,-8,7,4,-2,6,7,-2,0,-2,12,-5,-8,-5,2,7,-6,10,12,-9,-13,-8,-8,-5,-13,-5,-2,8,-8,9,-13,-9,-11,-9,0,1,-8,1,-2,7,-4,9,1,-2,1,-1,-4,11,-6,12,-11,-12,-9,-6,4,3,7,7,12,5,5,10,8,0,-4,2,8,-9,12,-5,-13,0,7,2,12,-1,2,1,7,5,11,7,-9,3,5,6,-8,-13,-4,-8,9,-5,9,-3,-3,-4,-7,-3,-12,6,5,8,0,-7,6,-6,12,-13,6,-5,-2,1,-10,3,10,4,1,8,-4,-2,-2,2,-13,2,-12,12,12,-2,-13,0,-6,4,1,9,3,-6,-10,-3,-5,-3,-13,-1,1,7,5,12,-11,4,-2,5,-7,-13,9,-9,-5,7,1,8,6,7,-8,7,6,-7,-4,-7,1,-8,11,-7,-8,-13,6,-12,-8,2,4,3,9,10,-5,12,3,-6,-5,-6,7,8,-3,9,-8,2,-12,2,8,-11,-2,-10,3,-12,-13,-7,-9,-11,0,-10,-5,5,-3,11,8,-2,-13,-1,12,-1,-8,0,9,-13,-11,-12,-5,-10,-2,-10,11,-3,9,-2,-13,2,-3,3,2,-9,-13,-4,0,-4,6,-3,-10,-4,12,-2,-7,-6,-11,-4,9,6,-3,6,11,-13,11,-5,5,11,11,12,6,7,-5,12,-2,-1,12,0,7,-4,-8,-3,-2,-7,1,-6,7,-13,-12,-8,-13,-7,-2,-6,-8,-8,5,-6,-9,-5,-1,-4,5,-13,7,-8,10,1,5,5,-13,1,0,10,-13,9,12,10,-1,5,-8,10,-9,-1,11,1,-13,-9,-3,-6,2,-1,-10,1,12,-13,1,-8,-10,8,-11,10,-6,2,-13,3,-6,7,-13,12,-9,-10,-10,-5,-7,-10,-8,-8,-13,4,-6,8,5,3,12,8,-13,-4,2,-3,-3,5,-13,10,-12,4,-13,5,-1,-9,9,-4,3,0,3,3,-9,-12,1,-6,1,3,2,4,-8,-10,-10,-10,9,8,-13,12,12,-8,-12,-6,-5,2,2,3,7,10,6,11,-8,6,8,8,-12,-7,10,-6,5,-3,-9,-3,9,-1,-13,-1,5,-3,-7,-3,4,-8,-2,-8,3,4,2,12,12,2,-5,3,11,6,-9,11,-13,3,-1,7,12,11,-1,12,4,-3,0,-3,6,4,-11,4,12,2,-4,2,1,-10,-6,-8,1,-13,7,-11,1,-13,12,-11,-13,6,0,11,-13,0,-1,1,4,-13,3,-9,-2,-9,8,-6,-3,-13,-6,-8,-2,5,-9,8,10,2,7,3,-9,-1,-6,-1,-1,9,5,11,-2,11,-3,12,-8,3,0,3,5,-1,4,0,10,3,-6,4,5,-13,0,-10,5,5,8,12,11,8,9,9,-6,7,-4,8,-12,-10,4,-10,9,7,3,12,4,9,-7,10,-2,7,0,12,-2,-1,-6,0,-11]);var f=new Int32Array([15,15,15,15,14,14,14,13,13,12,11,10,9,8,6,3,0]);ic_angle=function(h,j,o,p,n){var k=0,i=0;var s=0,q=0,g=(n*j+p)|0;var l=0,m=0,r=0;for(s=-o;s<=o;++s){i+=s*h[g+s]}for(q=1;q<=o;++q){l=0;m=f[q];for(s=-m;s<=m;++s){r=h[g+s+q*j],val_minus=h[g+s-q*j];l+=(r-val_minus);i+=s*(r+val_minus)}k+=q*l}return Math.atan2(k,i)};var c=new jsfeat.matrix_t(3,3,jsfeat.F32_t|jsfeat.C1_t);var e=new jsfeat.matrix_t(32,32,jsfeat.U8_t|jsfeat.C1_t);rectify_patch=function(l,n,k,i,h,j){var m=(k>=0)?Math.cos(k*Math.PI/180):1;var g=(k>=0)?Math.sin(k*Math.PI/180):0;c.data[0]=m,c.data[1]=-g,c.data[2]=(-m+g)*j*0.5+i,c.data[3]=g,c.data[4]=m,c.data[5]=(-g-m)*j*0.5+h;jsfeat.warp_affine(l,n,c,128)};return{describe:function(j,u,g,B){var r=32;var x=0,A=0,q=0,p=0,z=0;var o=0,m=0,D=0;var C=j.data,n=j.cols,y=j.rows;var t=e.data;var v=16*32+16;var k=0;if(!(B.type&jsfeat.U8_t)){B.type=jsfeat.U8_t;B.cols=r;B.rows=g;B.channel=1;B.allocate()}else{B.resize(r,g,1)}var l=B.data;var s=0;for(x=0;x=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n=0&&A>=0&&q<(u-1)&&A<(z-1)){G=m-q;D=w-A;I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}},skindetector:function(o,p){var n,m,h,k;var l=o.width*o.height;while(l--){k=l*4;n=o.data[k];m=o.data[k+1];h=o.data[k+2];if((n>95)&&(m>40)&&(h>20)&&(n>m)&&(n>h)&&(n-Math.min(m,h)>15)&&(Math.abs(n-m)>15)){p[l]=255}else{p[l]=0}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m+n)|0,o=f;for(k=n;k=0){j[o]=0}d(q,j,p,v,C,f);k=(C*p+C)|0;for(n=C;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var d=new Int32Array([8,-3,9,5,4,2,7,-12,-11,9,-8,2,7,-12,12,-13,2,-13,2,12,1,-7,1,6,-2,-10,-2,-4,-13,-13,-11,-8,-13,-3,-12,-9,10,4,11,9,-13,-8,-8,-9,-11,7,-9,12,7,7,12,6,-4,-5,-3,0,-13,2,-12,-3,-9,0,-7,5,12,-6,12,-1,-3,6,-2,12,-6,-13,-4,-8,11,-13,12,-8,4,7,5,1,5,-3,10,-3,3,-7,6,12,-8,-7,-6,-2,-2,11,-1,-10,-13,12,-8,10,-7,3,-5,-3,-4,2,-3,7,-10,-12,-6,11,5,-12,6,-7,5,-6,7,-1,1,0,4,-5,9,11,11,-13,4,7,4,12,2,-1,4,4,-4,-12,-2,7,-8,-5,-7,-10,4,11,9,12,0,-8,1,-13,-13,-2,-8,2,-3,-2,-2,3,-6,9,-4,-9,8,12,10,7,0,9,1,3,7,-5,11,-10,-13,-6,-11,0,10,7,12,1,-6,-3,-6,12,10,-9,12,-4,-13,8,-8,-12,-13,0,-8,-4,3,3,7,8,5,7,10,-7,-1,7,1,-12,3,-10,5,6,2,-4,3,-10,-13,0,-13,5,-13,-7,-12,12,-13,3,-11,8,-7,12,-4,7,6,-10,12,8,-9,-1,-7,-6,-2,-5,0,12,-12,5,-7,5,3,-10,8,-13,-7,-7,-4,5,-3,-2,-1,-7,2,9,5,-11,-11,-13,-5,-13,-1,6,0,-1,5,-3,5,2,-4,-13,-4,12,-9,-6,-9,6,-12,-10,-8,-4,10,2,12,-3,7,12,12,12,-7,-13,-6,5,-4,9,-3,4,7,-1,12,2,-7,6,-5,1,-13,11,-12,5,-3,7,-2,-6,7,-8,12,-7,-13,-7,-11,-12,1,-3,12,12,2,-6,3,0,-4,3,-2,-13,-1,-13,1,9,7,1,8,-6,1,-1,3,12,9,1,12,6,-1,-9,-1,3,-13,-13,-10,5,7,7,10,12,12,-5,12,9,6,3,7,11,5,-13,6,10,2,-12,2,3,3,8,4,-6,2,6,12,-13,9,-12,10,3,-8,4,-7,9,-11,12,-4,-6,1,12,2,-8,6,-9,7,-4,2,3,3,-2,6,3,11,0,3,-3,8,-8,7,8,9,3,-11,-5,-6,-4,-10,11,-5,10,-5,-8,-3,12,-10,5,-9,0,8,-1,12,-6,4,-6,6,-11,-10,12,-8,7,4,-2,6,7,-2,0,-2,12,-5,-8,-5,2,7,-6,10,12,-9,-13,-8,-8,-5,-13,-5,-2,8,-8,9,-13,-9,-11,-9,0,1,-8,1,-2,7,-4,9,1,-2,1,-1,-4,11,-6,12,-11,-12,-9,-6,4,3,7,7,12,5,5,10,8,0,-4,2,8,-9,12,-5,-13,0,7,2,12,-1,2,1,7,5,11,7,-9,3,5,6,-8,-13,-4,-8,9,-5,9,-3,-3,-4,-7,-3,-12,6,5,8,0,-7,6,-6,12,-13,6,-5,-2,1,-10,3,10,4,1,8,-4,-2,-2,2,-13,2,-12,12,12,-2,-13,0,-6,4,1,9,3,-6,-10,-3,-5,-3,-13,-1,1,7,5,12,-11,4,-2,5,-7,-13,9,-9,-5,7,1,8,6,7,-8,7,6,-7,-4,-7,1,-8,11,-7,-8,-13,6,-12,-8,2,4,3,9,10,-5,12,3,-6,-5,-6,7,8,-3,9,-8,2,-12,2,8,-11,-2,-10,3,-12,-13,-7,-9,-11,0,-10,-5,5,-3,11,8,-2,-13,-1,12,-1,-8,0,9,-13,-11,-12,-5,-10,-2,-10,11,-3,9,-2,-13,2,-3,3,2,-9,-13,-4,0,-4,6,-3,-10,-4,12,-2,-7,-6,-11,-4,9,6,-3,6,11,-13,11,-5,5,11,11,12,6,7,-5,12,-2,-1,12,0,7,-4,-8,-3,-2,-7,1,-6,7,-13,-12,-8,-13,-7,-2,-6,-8,-8,5,-6,-9,-5,-1,-4,5,-13,7,-8,10,1,5,5,-13,1,0,10,-13,9,12,10,-1,5,-8,10,-9,-1,11,1,-13,-9,-3,-6,2,-1,-10,1,12,-13,1,-8,-10,8,-11,10,-6,2,-13,3,-6,7,-13,12,-9,-10,-10,-5,-7,-10,-8,-8,-13,4,-6,8,5,3,12,8,-13,-4,2,-3,-3,5,-13,10,-12,4,-13,5,-1,-9,9,-4,3,0,3,3,-9,-12,1,-6,1,3,2,4,-8,-10,-10,-10,9,8,-13,12,12,-8,-12,-6,-5,2,2,3,7,10,6,11,-8,6,8,8,-12,-7,10,-6,5,-3,-9,-3,9,-1,-13,-1,5,-3,-7,-3,4,-8,-2,-8,3,4,2,12,12,2,-5,3,11,6,-9,11,-13,3,-1,7,12,11,-1,12,4,-3,0,-3,6,4,-11,4,12,2,-4,2,1,-10,-6,-8,1,-13,7,-11,1,-13,12,-11,-13,6,0,11,-13,0,-1,1,4,-13,3,-9,-2,-9,8,-6,-3,-13,-6,-8,-2,5,-9,8,10,2,7,3,-9,-1,-6,-1,-1,9,5,11,-2,11,-3,12,-8,3,0,3,5,-1,4,0,10,3,-6,4,5,-13,0,-10,5,5,8,12,11,8,9,9,-6,7,-4,8,-12,-10,4,-10,9,7,3,12,4,9,-7,10,-2,7,0,12,-2,-1,-6,0,-11]);var c=new jsfeat.matrix_t(3,3,jsfeat.F32_t|jsfeat.C1_t);var f=new jsfeat.matrix_t(32,32,jsfeat.U8_t|jsfeat.C1_t);var e=function(l,n,k,i,h,j){var m=Math.cos(k);var g=Math.sin(k);c.data[0]=m,c.data[1]=-g,c.data[2]=(-m+g)*j*0.5+i,c.data[3]=g,c.data[4]=m,c.data[5]=(-g-m)*j*0.5+h;jsfeat.warp_affine(l,n,c,128)};return{describe:function(j,u,g,B){var r=32;var x=0,A=0,q=0,p=0,z=0;var o=0,m=0,D=0;var C=j.data,n=j.cols,y=j.rows;var t=f.data;var v=16*32+16;var k=0;if(!(B.type&jsfeat.U8_t)){B.type=jsfeat.U8_t;B.cols=r;B.rows=g;B.channel=1;B.allocate()}else{B.resize(r,g,1)}var l=B.data;var s=0;for(x=0;x=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index 646743c..1a7aa26 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -4471,45 +4471,18 @@ The references are: -1,-6, 0,-11/*mean (0.127148), correlation (0.547401)*/ ]); - var u_max = new Int32Array([15,15,15,15,14,14,14,13,13,12,11,10,9,8,6,3,0]); - - ic_angle = function(src, step, half_k, ptx, pty) { - var m_01 = 0, m_10 = 0; - var u=0, v=0, center_off=(pty*step + ptx)|0; - var v_sum=0,d=0,val_plus=0; - - // Treat the center line differently, v=0 - for (u = -half_k; u <= half_k; ++u) - m_10 += u * src[center_off+u]; - - // Go line by line in the circular patch - for (v = 1; v <= half_k; ++v) { - // Proceed over the two lines - v_sum = 0; - d = u_max[v]; - for (u = -d; u <= d; ++u) { - val_plus = src[center_off+u+v*step], val_minus = src[center_off+u-v*step]; - v_sum += (val_plus - val_minus); - m_10 += u * (val_plus + val_minus); - } - m_01 += v * v_sum; - } - - return Math.atan2(m_01, m_10); - }; - var H = new jsfeat.matrix_t(3, 3, jsfeat.F32_t|jsfeat.C1_t); var patch_img = new jsfeat.matrix_t(32, 32, jsfeat.U8_t|jsfeat.C1_t); - rectify_patch = function(src, dst, angle, px, py, psize) { - var cosine = (angle>=0) ? Math.cos(angle*Math.PI/180) : 1.0; - var sine = (angle>=0) ? Math.sin(angle*Math.PI/180) : 0.0; + var rectify_patch = function(src, dst, angle, px, py, psize) { + var cosine = Math.cos(angle); + var sine = Math.sin(angle); H.data[0] = cosine, H.data[1] = -sine, H.data[2] = (-cosine + sine ) * psize*0.5 + px, H.data[3] = sine, H.data[4] = cosine, H.data[5] = (-sine - cosine) * psize*0.5 + py; jsfeat.warp_affine(src, dst, H, 128); - }; + } return { @@ -4541,11 +4514,6 @@ The references are: py = corners[i].y; angle = corners[i].angle; - // estimate rotation if not available - if(angle == -1.0) { - corners[i].angle = angle = ic_angle(img, w, 15, px, py); - } - rectify_patch(src, patch_img, angle, px, py, 32); // describe the patch From 572684e0a854eec140cdb454ac3fa24d076e962e Mon Sep 17 00:00:00 2001 From: Iwo Kadziela Date: Fri, 21 Jun 2019 13:48:16 -0400 Subject: [PATCH 43/46] fixing demos, createObjectURL is deprecated, trying srcObject first --- sample_bbf_face.html | 4 ++-- sample_boxblur.html | 4 ++-- sample_canny_edge.html | 4 ++-- sample_equalize_hist.html | 4 ++-- sample_fast_corners.html | 4 ++-- sample_gaussblur.html | 4 ++-- sample_grayscale.html | 4 ++-- sample_haar_face.html | 4 ++-- sample_oflow_lk.html | 4 ++-- sample_orb.html | 4 ++-- sample_pyrdown.html | 4 ++-- sample_scharr.html | 4 ++-- sample_sobel.html | 4 ++-- sample_sobel_edge.html | 4 ++-- sample_videostab.html | 4 ++-- sample_warp_affine.html | 4 ++-- sample_warp_perspective.html | 4 ++-- sample_yape.html | 4 ++-- sample_yape06.html | 4 ++-- 19 files changed, 38 insertions(+), 38 deletions(-) diff --git a/sample_bbf_face.html b/sample_bbf_face.html index d0185e3..fa42d06 100755 --- a/sample_bbf_face.html +++ b/sample_bbf_face.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_boxblur.html b/sample_boxblur.html index b5cb0ff..1bf8351 100755 --- a/sample_boxblur.html +++ b/sample_boxblur.html @@ -72,9 +72,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_canny_edge.html b/sample_canny_edge.html index 202583b..a733167 100755 --- a/sample_canny_edge.html +++ b/sample_canny_edge.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_equalize_hist.html b/sample_equalize_hist.html index e342791..98dc658 100755 --- a/sample_equalize_hist.html +++ b/sample_equalize_hist.html @@ -70,9 +70,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_fast_corners.html b/sample_fast_corners.html index a7d7c56..5b04c19 100755 --- a/sample_fast_corners.html +++ b/sample_fast_corners.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_gaussblur.html b/sample_gaussblur.html index a8c7db4..4644dfb 100755 --- a/sample_gaussblur.html +++ b/sample_gaussblur.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_grayscale.html b/sample_grayscale.html index 70aa0f7..1710487 100755 --- a/sample_grayscale.html +++ b/sample_grayscale.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_haar_face.html b/sample_haar_face.html index c9b9fcd..d7b849b 100755 --- a/sample_haar_face.html +++ b/sample_haar_face.html @@ -72,9 +72,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_oflow_lk.html b/sample_oflow_lk.html index 69f1092..1d9d78a 100755 --- a/sample_oflow_lk.html +++ b/sample_oflow_lk.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_orb.html b/sample_orb.html index 6443ee8..3e7392f 100644 --- a/sample_orb.html +++ b/sample_orb.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_pyrdown.html b/sample_pyrdown.html index 7e1ba2b..850ac43 100755 --- a/sample_pyrdown.html +++ b/sample_pyrdown.html @@ -70,9 +70,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_scharr.html b/sample_scharr.html index 62b8cf3..09fe1f7 100644 --- a/sample_scharr.html +++ b/sample_scharr.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_sobel.html b/sample_sobel.html index b877beb..5d332ce 100644 --- a/sample_sobel.html +++ b/sample_sobel.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_sobel_edge.html b/sample_sobel_edge.html index 9fd833a..e9b6a2b 100644 --- a/sample_sobel_edge.html +++ b/sample_sobel_edge.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_videostab.html b/sample_videostab.html index e239d06..52e761c 100644 --- a/sample_videostab.html +++ b/sample_videostab.html @@ -222,9 +222,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_warp_affine.html b/sample_warp_affine.html index a86be3e..935d4d7 100755 --- a/sample_warp_affine.html +++ b/sample_warp_affine.html @@ -70,9 +70,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_warp_perspective.html b/sample_warp_perspective.html index 3b6c7b4..24fea87 100755 --- a/sample_warp_perspective.html +++ b/sample_warp_perspective.html @@ -70,9 +70,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_yape.html b/sample_yape.html index a8e4b3c..c5cf24f 100755 --- a/sample_yape.html +++ b/sample_yape.html @@ -70,9 +70,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_yape06.html b/sample_yape06.html index b1711a2..eeea9f6 100755 --- a/sample_yape06.html +++ b/sample_yape06.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = tream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); From 57fd776d5947c54fc367f45854d92b526cf02850 Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Mon, 1 Sep 2014 21:35:02 +0100 Subject: [PATCH 44/46] method call fix --- build/jsfeat-min.js | 2 +- build/jsfeat.js | 2 +- src/jsfeat_orb.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index f703a5a..4d6e607 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n=0&&A>=0&&q<(u-1)&&A<(z-1)){G=m-q;D=w-A;I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}},skindetector:function(o,p){var n,m,h,k;var l=o.width*o.height;while(l--){k=l*4;n=o.data[k];m=o.data[k+1];h=o.data[k+2];if((n>95)&&(m>40)&&(h>20)&&(n>m)&&(n>h)&&(n-Math.min(m,h)>15)&&(Math.abs(n-m)>15)){p[l]=255}else{p[l]=0}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m+n)|0,o=f;for(k=n;k=0){j[o]=0}d(q,j,p,v,C,f);k=(C*p+C)|0;for(n=C;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var d=new Int32Array([8,-3,9,5,4,2,7,-12,-11,9,-8,2,7,-12,12,-13,2,-13,2,12,1,-7,1,6,-2,-10,-2,-4,-13,-13,-11,-8,-13,-3,-12,-9,10,4,11,9,-13,-8,-8,-9,-11,7,-9,12,7,7,12,6,-4,-5,-3,0,-13,2,-12,-3,-9,0,-7,5,12,-6,12,-1,-3,6,-2,12,-6,-13,-4,-8,11,-13,12,-8,4,7,5,1,5,-3,10,-3,3,-7,6,12,-8,-7,-6,-2,-2,11,-1,-10,-13,12,-8,10,-7,3,-5,-3,-4,2,-3,7,-10,-12,-6,11,5,-12,6,-7,5,-6,7,-1,1,0,4,-5,9,11,11,-13,4,7,4,12,2,-1,4,4,-4,-12,-2,7,-8,-5,-7,-10,4,11,9,12,0,-8,1,-13,-13,-2,-8,2,-3,-2,-2,3,-6,9,-4,-9,8,12,10,7,0,9,1,3,7,-5,11,-10,-13,-6,-11,0,10,7,12,1,-6,-3,-6,12,10,-9,12,-4,-13,8,-8,-12,-13,0,-8,-4,3,3,7,8,5,7,10,-7,-1,7,1,-12,3,-10,5,6,2,-4,3,-10,-13,0,-13,5,-13,-7,-12,12,-13,3,-11,8,-7,12,-4,7,6,-10,12,8,-9,-1,-7,-6,-2,-5,0,12,-12,5,-7,5,3,-10,8,-13,-7,-7,-4,5,-3,-2,-1,-7,2,9,5,-11,-11,-13,-5,-13,-1,6,0,-1,5,-3,5,2,-4,-13,-4,12,-9,-6,-9,6,-12,-10,-8,-4,10,2,12,-3,7,12,12,12,-7,-13,-6,5,-4,9,-3,4,7,-1,12,2,-7,6,-5,1,-13,11,-12,5,-3,7,-2,-6,7,-8,12,-7,-13,-7,-11,-12,1,-3,12,12,2,-6,3,0,-4,3,-2,-13,-1,-13,1,9,7,1,8,-6,1,-1,3,12,9,1,12,6,-1,-9,-1,3,-13,-13,-10,5,7,7,10,12,12,-5,12,9,6,3,7,11,5,-13,6,10,2,-12,2,3,3,8,4,-6,2,6,12,-13,9,-12,10,3,-8,4,-7,9,-11,12,-4,-6,1,12,2,-8,6,-9,7,-4,2,3,3,-2,6,3,11,0,3,-3,8,-8,7,8,9,3,-11,-5,-6,-4,-10,11,-5,10,-5,-8,-3,12,-10,5,-9,0,8,-1,12,-6,4,-6,6,-11,-10,12,-8,7,4,-2,6,7,-2,0,-2,12,-5,-8,-5,2,7,-6,10,12,-9,-13,-8,-8,-5,-13,-5,-2,8,-8,9,-13,-9,-11,-9,0,1,-8,1,-2,7,-4,9,1,-2,1,-1,-4,11,-6,12,-11,-12,-9,-6,4,3,7,7,12,5,5,10,8,0,-4,2,8,-9,12,-5,-13,0,7,2,12,-1,2,1,7,5,11,7,-9,3,5,6,-8,-13,-4,-8,9,-5,9,-3,-3,-4,-7,-3,-12,6,5,8,0,-7,6,-6,12,-13,6,-5,-2,1,-10,3,10,4,1,8,-4,-2,-2,2,-13,2,-12,12,12,-2,-13,0,-6,4,1,9,3,-6,-10,-3,-5,-3,-13,-1,1,7,5,12,-11,4,-2,5,-7,-13,9,-9,-5,7,1,8,6,7,-8,7,6,-7,-4,-7,1,-8,11,-7,-8,-13,6,-12,-8,2,4,3,9,10,-5,12,3,-6,-5,-6,7,8,-3,9,-8,2,-12,2,8,-11,-2,-10,3,-12,-13,-7,-9,-11,0,-10,-5,5,-3,11,8,-2,-13,-1,12,-1,-8,0,9,-13,-11,-12,-5,-10,-2,-10,11,-3,9,-2,-13,2,-3,3,2,-9,-13,-4,0,-4,6,-3,-10,-4,12,-2,-7,-6,-11,-4,9,6,-3,6,11,-13,11,-5,5,11,11,12,6,7,-5,12,-2,-1,12,0,7,-4,-8,-3,-2,-7,1,-6,7,-13,-12,-8,-13,-7,-2,-6,-8,-8,5,-6,-9,-5,-1,-4,5,-13,7,-8,10,1,5,5,-13,1,0,10,-13,9,12,10,-1,5,-8,10,-9,-1,11,1,-13,-9,-3,-6,2,-1,-10,1,12,-13,1,-8,-10,8,-11,10,-6,2,-13,3,-6,7,-13,12,-9,-10,-10,-5,-7,-10,-8,-8,-13,4,-6,8,5,3,12,8,-13,-4,2,-3,-3,5,-13,10,-12,4,-13,5,-1,-9,9,-4,3,0,3,3,-9,-12,1,-6,1,3,2,4,-8,-10,-10,-10,9,8,-13,12,12,-8,-12,-6,-5,2,2,3,7,10,6,11,-8,6,8,8,-12,-7,10,-6,5,-3,-9,-3,9,-1,-13,-1,5,-3,-7,-3,4,-8,-2,-8,3,4,2,12,12,2,-5,3,11,6,-9,11,-13,3,-1,7,12,11,-1,12,4,-3,0,-3,6,4,-11,4,12,2,-4,2,1,-10,-6,-8,1,-13,7,-11,1,-13,12,-11,-13,6,0,11,-13,0,-1,1,4,-13,3,-9,-2,-9,8,-6,-3,-13,-6,-8,-2,5,-9,8,10,2,7,3,-9,-1,-6,-1,-1,9,5,11,-2,11,-3,12,-8,3,0,3,5,-1,4,0,10,3,-6,4,5,-13,0,-10,5,5,8,12,11,8,9,9,-6,7,-4,8,-12,-10,4,-10,9,7,3,12,4,9,-7,10,-2,7,0,12,-2,-1,-6,0,-11]);var c=new jsfeat.matrix_t(3,3,jsfeat.F32_t|jsfeat.C1_t);var f=new jsfeat.matrix_t(32,32,jsfeat.U8_t|jsfeat.C1_t);var e=function(l,n,k,i,h,j){var m=Math.cos(k);var g=Math.sin(k);c.data[0]=m,c.data[1]=-g,c.data[2]=(-m+g)*j*0.5+i,c.data[3]=g,c.data[4]=m,c.data[5]=(-g-m)*j*0.5+h;jsfeat.warp_affine(l,n,c,128)};return{describe:function(j,u,g,B){var r=32;var x=0,A=0,q=0,p=0,z=0;var o=0,m=0,D=0;var C=j.data,n=j.cols,y=j.rows;var t=f.data;var v=16*32+16;var k=0;if(!(B.type&jsfeat.U8_t)){B.type=jsfeat.U8_t;B.cols=r;B.rows=g;B.channel=1;B.allocate()}else{B.resize(r,g,1)}var l=B.data;var s=0;for(x=0;x=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n=0&&A>=0&&q<(u-1)&&A<(z-1)){G=m-q;D=w-A;I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}},skindetector:function(o,p){var n,m,h,k;var l=o.width*o.height;while(l--){k=l*4;n=o.data[k];m=o.data[k+1];h=o.data[k+2];if((n>95)&&(m>40)&&(h>20)&&(n>m)&&(n>h)&&(n-Math.min(m,h)>15)&&(Math.abs(n-m)>15)){p[l]=255}else{p[l]=0}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m+n)|0,o=f;for(k=n;k=0){j[o]=0}d(q,j,p,v,C,f);k=(C*p+C)|0;for(n=C;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var d=new Int32Array([8,-3,9,5,4,2,7,-12,-11,9,-8,2,7,-12,12,-13,2,-13,2,12,1,-7,1,6,-2,-10,-2,-4,-13,-13,-11,-8,-13,-3,-12,-9,10,4,11,9,-13,-8,-8,-9,-11,7,-9,12,7,7,12,6,-4,-5,-3,0,-13,2,-12,-3,-9,0,-7,5,12,-6,12,-1,-3,6,-2,12,-6,-13,-4,-8,11,-13,12,-8,4,7,5,1,5,-3,10,-3,3,-7,6,12,-8,-7,-6,-2,-2,11,-1,-10,-13,12,-8,10,-7,3,-5,-3,-4,2,-3,7,-10,-12,-6,11,5,-12,6,-7,5,-6,7,-1,1,0,4,-5,9,11,11,-13,4,7,4,12,2,-1,4,4,-4,-12,-2,7,-8,-5,-7,-10,4,11,9,12,0,-8,1,-13,-13,-2,-8,2,-3,-2,-2,3,-6,9,-4,-9,8,12,10,7,0,9,1,3,7,-5,11,-10,-13,-6,-11,0,10,7,12,1,-6,-3,-6,12,10,-9,12,-4,-13,8,-8,-12,-13,0,-8,-4,3,3,7,8,5,7,10,-7,-1,7,1,-12,3,-10,5,6,2,-4,3,-10,-13,0,-13,5,-13,-7,-12,12,-13,3,-11,8,-7,12,-4,7,6,-10,12,8,-9,-1,-7,-6,-2,-5,0,12,-12,5,-7,5,3,-10,8,-13,-7,-7,-4,5,-3,-2,-1,-7,2,9,5,-11,-11,-13,-5,-13,-1,6,0,-1,5,-3,5,2,-4,-13,-4,12,-9,-6,-9,6,-12,-10,-8,-4,10,2,12,-3,7,12,12,12,-7,-13,-6,5,-4,9,-3,4,7,-1,12,2,-7,6,-5,1,-13,11,-12,5,-3,7,-2,-6,7,-8,12,-7,-13,-7,-11,-12,1,-3,12,12,2,-6,3,0,-4,3,-2,-13,-1,-13,1,9,7,1,8,-6,1,-1,3,12,9,1,12,6,-1,-9,-1,3,-13,-13,-10,5,7,7,10,12,12,-5,12,9,6,3,7,11,5,-13,6,10,2,-12,2,3,3,8,4,-6,2,6,12,-13,9,-12,10,3,-8,4,-7,9,-11,12,-4,-6,1,12,2,-8,6,-9,7,-4,2,3,3,-2,6,3,11,0,3,-3,8,-8,7,8,9,3,-11,-5,-6,-4,-10,11,-5,10,-5,-8,-3,12,-10,5,-9,0,8,-1,12,-6,4,-6,6,-11,-10,12,-8,7,4,-2,6,7,-2,0,-2,12,-5,-8,-5,2,7,-6,10,12,-9,-13,-8,-8,-5,-13,-5,-2,8,-8,9,-13,-9,-11,-9,0,1,-8,1,-2,7,-4,9,1,-2,1,-1,-4,11,-6,12,-11,-12,-9,-6,4,3,7,7,12,5,5,10,8,0,-4,2,8,-9,12,-5,-13,0,7,2,12,-1,2,1,7,5,11,7,-9,3,5,6,-8,-13,-4,-8,9,-5,9,-3,-3,-4,-7,-3,-12,6,5,8,0,-7,6,-6,12,-13,6,-5,-2,1,-10,3,10,4,1,8,-4,-2,-2,2,-13,2,-12,12,12,-2,-13,0,-6,4,1,9,3,-6,-10,-3,-5,-3,-13,-1,1,7,5,12,-11,4,-2,5,-7,-13,9,-9,-5,7,1,8,6,7,-8,7,6,-7,-4,-7,1,-8,11,-7,-8,-13,6,-12,-8,2,4,3,9,10,-5,12,3,-6,-5,-6,7,8,-3,9,-8,2,-12,2,8,-11,-2,-10,3,-12,-13,-7,-9,-11,0,-10,-5,5,-3,11,8,-2,-13,-1,12,-1,-8,0,9,-13,-11,-12,-5,-10,-2,-10,11,-3,9,-2,-13,2,-3,3,2,-9,-13,-4,0,-4,6,-3,-10,-4,12,-2,-7,-6,-11,-4,9,6,-3,6,11,-13,11,-5,5,11,11,12,6,7,-5,12,-2,-1,12,0,7,-4,-8,-3,-2,-7,1,-6,7,-13,-12,-8,-13,-7,-2,-6,-8,-8,5,-6,-9,-5,-1,-4,5,-13,7,-8,10,1,5,5,-13,1,0,10,-13,9,12,10,-1,5,-8,10,-9,-1,11,1,-13,-9,-3,-6,2,-1,-10,1,12,-13,1,-8,-10,8,-11,10,-6,2,-13,3,-6,7,-13,12,-9,-10,-10,-5,-7,-10,-8,-8,-13,4,-6,8,5,3,12,8,-13,-4,2,-3,-3,5,-13,10,-12,4,-13,5,-1,-9,9,-4,3,0,3,3,-9,-12,1,-6,1,3,2,4,-8,-10,-10,-10,9,8,-13,12,12,-8,-12,-6,-5,2,2,3,7,10,6,11,-8,6,8,8,-12,-7,10,-6,5,-3,-9,-3,9,-1,-13,-1,5,-3,-7,-3,4,-8,-2,-8,3,4,2,12,12,2,-5,3,11,6,-9,11,-13,3,-1,7,12,11,-1,12,4,-3,0,-3,6,4,-11,4,12,2,-4,2,1,-10,-6,-8,1,-13,7,-11,1,-13,12,-11,-13,6,0,11,-13,0,-1,1,4,-13,3,-9,-2,-9,8,-6,-3,-13,-6,-8,-2,5,-9,8,10,2,7,3,-9,-1,-6,-1,-1,9,5,11,-2,11,-3,12,-8,3,0,3,5,-1,4,0,10,3,-6,4,5,-13,0,-10,5,5,8,12,11,8,9,9,-6,7,-4,8,-12,-10,4,-10,9,7,3,12,4,9,-7,10,-2,7,0,12,-2,-1,-6,0,-11]);var c=new jsfeat.matrix_t(3,3,jsfeat.F32_t|jsfeat.C1_t);var f=new jsfeat.matrix_t(32,32,jsfeat.U8_t|jsfeat.C1_t);var e=function(l,n,k,i,h,j){var m=Math.cos(k);var g=Math.sin(k);c.data[0]=m,c.data[1]=-g,c.data[2]=(-m+g)*j*0.5+i,c.data[3]=g,c.data[4]=m,c.data[5]=(-g-m)*j*0.5+h;jsfeat.imgproc.warp_affine(l,n,c,128)};return{describe:function(j,u,g,B){var r=32;var x=0,A=0,q=0,p=0,z=0;var o=0,m=0,D=0;var C=j.data,n=j.cols,y=j.rows;var t=f.data;var v=16*32+16;var k=0;if(!(B.type&jsfeat.U8_t)){B.type=jsfeat.U8_t;B.cols=r;B.rows=g;B.channel=1;B.allocate()}else{B.resize(r,g,1)}var l=B.data;var s=0;for(x=0;x=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index 1a7aa26..6f7bf4a 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -4481,7 +4481,7 @@ The references are: H.data[0] = cosine, H.data[1] = -sine, H.data[2] = (-cosine + sine ) * psize*0.5 + px, H.data[3] = sine, H.data[4] = cosine, H.data[5] = (-sine - cosine) * psize*0.5 + py; - jsfeat.warp_affine(src, dst, H, 128); + jsfeat.imgproc.warp_affine(src, dst, H, 128); } return { diff --git a/src/jsfeat_orb.js b/src/jsfeat_orb.js index bf5f22a..4b09186 100644 --- a/src/jsfeat_orb.js +++ b/src/jsfeat_orb.js @@ -280,7 +280,7 @@ H.data[0] = cosine, H.data[1] = -sine, H.data[2] = (-cosine + sine ) * psize*0.5 + px, H.data[3] = sine, H.data[4] = cosine, H.data[5] = (-sine - cosine) * psize*0.5 + py; - jsfeat.warp_affine(src, dst, H, 128); + jsfeat.imgproc.warp_affine(src, dst, H, 128); } return { From ca17e49b7ac9261c1a255a5ff930698c65775973 Mon Sep 17 00:00:00 2001 From: Iwo Kadziela Date: Fri, 21 Jun 2019 20:36:40 -0400 Subject: [PATCH 45/46] typo fix --- sample_bbf_face.html | 2 +- sample_boxblur.html | 2 +- sample_canny_edge.html | 2 +- sample_equalize_hist.html | 2 +- sample_fast_corners.html | 2 +- sample_gaussblur.html | 2 +- sample_grayscale.html | 2 +- sample_haar_face.html | 2 +- sample_oflow_lk.html | 2 +- sample_orb.html | 2 +- sample_pyrdown.html | 2 +- sample_scharr.html | 2 +- sample_sobel.html | 2 +- sample_sobel_edge.html | 2 +- sample_videostab.html | 2 +- sample_warp_affine.html | 2 +- sample_warp_perspective.html | 2 +- sample_yape.html | 2 +- sample_yape06.html | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/sample_bbf_face.html b/sample_bbf_face.html index fa42d06..efe4e0e 100755 --- a/sample_bbf_face.html +++ b/sample_bbf_face.html @@ -71,7 +71,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_boxblur.html b/sample_boxblur.html index 1bf8351..084ed1d 100755 --- a/sample_boxblur.html +++ b/sample_boxblur.html @@ -72,7 +72,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_canny_edge.html b/sample_canny_edge.html index a733167..017a227 100755 --- a/sample_canny_edge.html +++ b/sample_canny_edge.html @@ -71,7 +71,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_equalize_hist.html b/sample_equalize_hist.html index 98dc658..57cf8b0 100755 --- a/sample_equalize_hist.html +++ b/sample_equalize_hist.html @@ -70,7 +70,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_fast_corners.html b/sample_fast_corners.html index 5b04c19..5e0dce0 100755 --- a/sample_fast_corners.html +++ b/sample_fast_corners.html @@ -71,7 +71,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_gaussblur.html b/sample_gaussblur.html index 4644dfb..8113f84 100755 --- a/sample_gaussblur.html +++ b/sample_gaussblur.html @@ -71,7 +71,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_grayscale.html b/sample_grayscale.html index 1710487..48c2edc 100755 --- a/sample_grayscale.html +++ b/sample_grayscale.html @@ -71,7 +71,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_haar_face.html b/sample_haar_face.html index d7b849b..6d11c9d 100755 --- a/sample_haar_face.html +++ b/sample_haar_face.html @@ -72,7 +72,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_oflow_lk.html b/sample_oflow_lk.html index 1d9d78a..fad2972 100755 --- a/sample_oflow_lk.html +++ b/sample_oflow_lk.html @@ -71,7 +71,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_orb.html b/sample_orb.html index 3e7392f..b31c1c7 100644 --- a/sample_orb.html +++ b/sample_orb.html @@ -71,7 +71,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_pyrdown.html b/sample_pyrdown.html index 850ac43..fdde283 100755 --- a/sample_pyrdown.html +++ b/sample_pyrdown.html @@ -70,7 +70,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_scharr.html b/sample_scharr.html index 09fe1f7..ce6c56a 100644 --- a/sample_scharr.html +++ b/sample_scharr.html @@ -71,7 +71,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_sobel.html b/sample_sobel.html index 5d332ce..51bbc47 100644 --- a/sample_sobel.html +++ b/sample_sobel.html @@ -71,7 +71,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_sobel_edge.html b/sample_sobel_edge.html index e9b6a2b..66cbbb5 100644 --- a/sample_sobel_edge.html +++ b/sample_sobel_edge.html @@ -71,7 +71,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_videostab.html b/sample_videostab.html index 52e761c..73889b4 100644 --- a/sample_videostab.html +++ b/sample_videostab.html @@ -222,7 +222,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_warp_affine.html b/sample_warp_affine.html index 935d4d7..111fb47 100755 --- a/sample_warp_affine.html +++ b/sample_warp_affine.html @@ -70,7 +70,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_warp_perspective.html b/sample_warp_perspective.html index 24fea87..b11df4c 100755 --- a/sample_warp_perspective.html +++ b/sample_warp_perspective.html @@ -70,7 +70,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_yape.html b/sample_yape.html index c5cf24f..d636e70 100755 --- a/sample_yape.html +++ b/sample_yape.html @@ -70,7 +70,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } diff --git a/sample_yape06.html b/sample_yape06.html index eeea9f6..b26121b 100755 --- a/sample_yape06.html +++ b/sample_yape06.html @@ -71,7 +71,7 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.srcObject = tream; + video.srcObject = stream; } catch (error) { video.src = compatibility.URL.createObjectURL(stream); } From cef54071c7f1db92e7067af6781ffebe801c5e4d Mon Sep 17 00:00:00 2001 From: Eugene Zatepyakin Date: Tue, 2 Sep 2014 12:28:23 +0100 Subject: [PATCH 46/46] Squash all commits --- README.md | 31 +++--- bower.json | 14 +++ build/jsfeat-min.js | 2 +- build/jsfeat.js | 189 +++++++++++++++++++++++++++++------ sample_bbf_face.html | 4 +- sample_boxblur.html | 4 +- sample_canny_edge.html | 4 +- sample_equalize_hist.html | 4 +- sample_fast_corners.html | 4 +- sample_gaussblur.html | 4 +- sample_grayscale.html | 4 +- sample_haar_face.html | 4 +- sample_oflow_lk.html | 4 +- sample_orb.html | 4 +- sample_pyrdown.html | 4 +- sample_scharr.html | 4 +- sample_sobel.html | 4 +- sample_sobel_edge.html | 4 +- sample_videostab.html | 4 +- sample_warp_affine.html | 4 +- sample_warp_perspective.html | 4 +- sample_yape.html | 4 +- sample_yape06.html | 4 +- src/jsfeat_imgproc.js | 139 +++++++++++++++++++++++--- src/jsfeat_struct.js | 26 +++-- src/jsfeat_yape06.js | 24 +++-- 26 files changed, 387 insertions(+), 114 deletions(-) create mode 100644 bower.json diff --git a/README.md b/README.md index 77fdf42..586e954 100644 --- a/README.md +++ b/README.md @@ -5,35 +5,36 @@ jsfeat The project aim is to explore JS/HTML5 possibilities using modern & state-of-art computer vision algorithms. -[Examples and Documentation](http://inspirit.github.com/jsfeat/) +[Examples and Documentation](https://inspirit.github.io/jsfeat/) ### Features ### * Custom data structures * Basic image processing methods (grayscale, derivatives, box-blur, resample, etc.) - * grayscale ([Demo](http://inspirit.github.com/jsfeat/sample_grayscale.html)) - * box blur ([Demo](http://inspirit.github.com/jsfeat/sample_boxblur.html)) - * gaussian blur ([Demo](http://inspirit.github.com/jsfeat/sample_gaussblur.html)) - * equalize histogram ([Demo](http://inspirit.github.com/jsfeat/sample_equalize_hist.html)) - * canny edges ([Demo](http://inspirit.github.com/jsfeat/sample_canny_edge.html)) - * sobel deriv ([Demo](http://inspirit.github.com/jsfeat/sample_sobel.html)) - * scharr deriv ([Demo](http://inspirit.github.com/jsfeat/sample_scharr.html)) + * grayscale ([Demo](https://inspirit.github.io/jsfeat/sample_grayscale.html)) + * box blur ([Demo](https://inspirit.github.io/jsfeat/sample_boxblur.html)) + * gaussian blur ([Demo](https://inspirit.github.io/jsfeat/sample_gaussblur.html)) + * equalize histogram ([Demo](https://inspirit.github.io/jsfeat/sample_equalize_hist.html)) + * canny edges ([Demo](https://inspirit.github.io/jsfeat/sample_canny_edge.html)) + * sobel deriv ([Demo](https://inspirit.github.io/jsfeat/sample_sobel.html)) + * scharr deriv ([Demo](https://inspirit.github.io/jsfeat/sample_scharr.html)) * find more at Examples and Documentation page * Linear Algebra module * LU (Gaussian elimination) solver * Cholesky solver * SVD decomposition, solver and pseudo-inverse * Eigen Vectors and Values -* Multiview module ([Demo](http://inspirit.github.com/jsfeat/sample_videostab.html)) +* Multiview module ([Demo](https://inspirit.github.io/jsfeat/sample_videostab.html)) * Affine2D motion kernel * Homography2D motion kernel * RANSAC motion estimator * LMEDS motion estimator * Matrix Math module for various matrix operation such as traspose, multiply etc. * Features 2D - * Fast Corners feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_fast_corners.html)) - * YAPE06 feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_yape06.html)) - * YAPE feature detector ([Demo](http://inspirit.github.com/jsfeat/sample_yape.html)) -* Lucas-Kanade optical flow ([Demo](http://inspirit.github.com/jsfeat/sample_oflow_lk.html) - click to add points) -* HAAR object detector ([Demo](http://inspirit.github.com/jsfeat/sample_haar_face.html)) -* BBF object detector ([Demo](http://inspirit.github.com/jsfeat/sample_bbf_face.html)) + * Fast Corners feature detector ([Demo](https://inspirit.github.io/jsfeat/sample_fast_corners.html)) + * YAPE06 feature detector ([Demo](https://inspirit.github.io/jsfeat/sample_yape06.html)) + * YAPE feature detector ([Demo](https://inspirit.github.io/jsfeat/sample_yape.html)) + * ORB feature descriptor ([Demo](https://inspirit.github.io/jsfeat/sample_orb.html)) +* Lucas-Kanade optical flow ([Demo](https://inspirit.github.io/jsfeat/sample_oflow_lk.html) - click to add points) +* HAAR object detector ([Demo](https://inspirit.github.io/jsfeat/sample_haar_face.html)) +* BBF object detector ([Demo](https://inspirit.github.io/jsfeat/sample_bbf_face.html)) diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..83146f2 --- /dev/null +++ b/bower.json @@ -0,0 +1,14 @@ +{ + + "name": "jsfeat", + "version" : "0.0.8", + "description" : "JavaScript Computer Vision library", + "author" : "Eugene Zatepyakin (http://www.inspirit.ru/)", + "main" : "build/jsfeat-min.js", + + "ignore": [ + "src", + "compile", + "node_modules" + ] +} diff --git a/build/jsfeat-min.js b/build/jsfeat-min.js index 4d6e607..f1dc9da 100755 --- a/build/jsfeat-min.js +++ b/build/jsfeat-min.js @@ -1 +1 @@ -var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(o){var l=1.192092896e-7;var i=1e-37;var j=256,g=512,f=1024,t=2048,s=4096;var w=1,k=2,a=3,m=4;var v=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var u=(function(){return function(x){return(x&65280)}})();var h=(function(){return function(x){return(x&255)}})();var b=(function(){return function(x){return v[(x&65280)>>8]}})();var d=1;var p=1;var e=2;var r=(function(){function x(z,y){this.size=((z+7)|0)&-8;if(typeof y==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=y;this.size=y.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return x})();var n=(function(){function x(B,z,A,y){this.type=u(A)|0;this.channel=h(A)|0;this.cols=B|0;this.rows=z|0;if(typeof y==="undefined"){this.allocate()}else{this.buffer=y;this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))}}x.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new r((this.cols*b(this.type)*this.channel)*this.rows);this.data=this.type&j?this.buffer.u8:(this.type&g?this.buffer.i32:(this.type&f?this.buffer.f32:this.buffer.f64))};x.prototype.copy_to=function(z){var y=z.data,C=this.data;var A=0,B=(this.cols*this.rows*this.channel)|0;for(;Athis.rows*this.cols*this.channel){this.cols=B;this.rows=z;this.channel=y;this.allocate()}else{this.cols=B;this.rows=z;this.channel=y}};return x})();var q=(function(){function x(y){this.levels=y|0;this.data=new Array(y);this.pyrdown=jsfeat.imgproc.pyrdown}x.prototype.allocate=function(y,A,B){var z=this.levels;while(--z>=0){this.data[z]=new n(y>>z,A>>z,B)}};x.prototype.build=function(B,A){if(typeof A==="undefined"){A=true}var D=2,z=B,y=this.data[0];if(!A){var C=B.cols*B.rows;while(--C>=0){y.data[C]=B.data[C]}}y=this.data[1];this.pyrdown(z,y);for(;Dh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;p[m+1]=(g[n+4]*o+g[n+5]*h+g[n+6]*l+8192)>>14;p[m+2]=(g[n+8]*o+g[n+9]*h+g[n+10]*l+8192)>>14;p[m+3]=(g[n+12]*o+g[n+13]*h+g[n+14]*l+8192)>>14}for(;n>14}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},pyrdown:function(k,A,s,r){if(typeof s==="undefined"){s=0}if(typeof r==="undefined"){r=0}var q=k.cols,t=k.rows;var p=q>>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data,l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n=0&&A>=0&&q<(u-1)&&A<(z-1)){G=m-q;D=w-A;I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}},skindetector:function(o,p){var n,m,h,k;var l=o.width*o.height;while(l--){k=l*4;n=o.data[k];m=o.data[k+1];h=o.data[k+2];if((n>95)&&(m>40)&&(h>20)&&(n>m)&&(n>h)&&(n-Math.min(m,h)>15)&&(Math.abs(n-m)>15)){p[l]=255}else{p[l]=0}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,j,m,i,n,g){var k=0,l=0,f=(n*m+n)|0,o=f;for(k=n;k=0){j[o]=0}d(q,j,p,v,C,f);k=(C*p+C)|0;for(n=C;nA&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,C,f,B,g);if(r>z){t=u[s];t.x=o,t.y=n,t.score=r;++s;++o,++m}}}}jsfeat.cache.put_buffer(e);return s}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var d=new Int32Array([8,-3,9,5,4,2,7,-12,-11,9,-8,2,7,-12,12,-13,2,-13,2,12,1,-7,1,6,-2,-10,-2,-4,-13,-13,-11,-8,-13,-3,-12,-9,10,4,11,9,-13,-8,-8,-9,-11,7,-9,12,7,7,12,6,-4,-5,-3,0,-13,2,-12,-3,-9,0,-7,5,12,-6,12,-1,-3,6,-2,12,-6,-13,-4,-8,11,-13,12,-8,4,7,5,1,5,-3,10,-3,3,-7,6,12,-8,-7,-6,-2,-2,11,-1,-10,-13,12,-8,10,-7,3,-5,-3,-4,2,-3,7,-10,-12,-6,11,5,-12,6,-7,5,-6,7,-1,1,0,4,-5,9,11,11,-13,4,7,4,12,2,-1,4,4,-4,-12,-2,7,-8,-5,-7,-10,4,11,9,12,0,-8,1,-13,-13,-2,-8,2,-3,-2,-2,3,-6,9,-4,-9,8,12,10,7,0,9,1,3,7,-5,11,-10,-13,-6,-11,0,10,7,12,1,-6,-3,-6,12,10,-9,12,-4,-13,8,-8,-12,-13,0,-8,-4,3,3,7,8,5,7,10,-7,-1,7,1,-12,3,-10,5,6,2,-4,3,-10,-13,0,-13,5,-13,-7,-12,12,-13,3,-11,8,-7,12,-4,7,6,-10,12,8,-9,-1,-7,-6,-2,-5,0,12,-12,5,-7,5,3,-10,8,-13,-7,-7,-4,5,-3,-2,-1,-7,2,9,5,-11,-11,-13,-5,-13,-1,6,0,-1,5,-3,5,2,-4,-13,-4,12,-9,-6,-9,6,-12,-10,-8,-4,10,2,12,-3,7,12,12,12,-7,-13,-6,5,-4,9,-3,4,7,-1,12,2,-7,6,-5,1,-13,11,-12,5,-3,7,-2,-6,7,-8,12,-7,-13,-7,-11,-12,1,-3,12,12,2,-6,3,0,-4,3,-2,-13,-1,-13,1,9,7,1,8,-6,1,-1,3,12,9,1,12,6,-1,-9,-1,3,-13,-13,-10,5,7,7,10,12,12,-5,12,9,6,3,7,11,5,-13,6,10,2,-12,2,3,3,8,4,-6,2,6,12,-13,9,-12,10,3,-8,4,-7,9,-11,12,-4,-6,1,12,2,-8,6,-9,7,-4,2,3,3,-2,6,3,11,0,3,-3,8,-8,7,8,9,3,-11,-5,-6,-4,-10,11,-5,10,-5,-8,-3,12,-10,5,-9,0,8,-1,12,-6,4,-6,6,-11,-10,12,-8,7,4,-2,6,7,-2,0,-2,12,-5,-8,-5,2,7,-6,10,12,-9,-13,-8,-8,-5,-13,-5,-2,8,-8,9,-13,-9,-11,-9,0,1,-8,1,-2,7,-4,9,1,-2,1,-1,-4,11,-6,12,-11,-12,-9,-6,4,3,7,7,12,5,5,10,8,0,-4,2,8,-9,12,-5,-13,0,7,2,12,-1,2,1,7,5,11,7,-9,3,5,6,-8,-13,-4,-8,9,-5,9,-3,-3,-4,-7,-3,-12,6,5,8,0,-7,6,-6,12,-13,6,-5,-2,1,-10,3,10,4,1,8,-4,-2,-2,2,-13,2,-12,12,12,-2,-13,0,-6,4,1,9,3,-6,-10,-3,-5,-3,-13,-1,1,7,5,12,-11,4,-2,5,-7,-13,9,-9,-5,7,1,8,6,7,-8,7,6,-7,-4,-7,1,-8,11,-7,-8,-13,6,-12,-8,2,4,3,9,10,-5,12,3,-6,-5,-6,7,8,-3,9,-8,2,-12,2,8,-11,-2,-10,3,-12,-13,-7,-9,-11,0,-10,-5,5,-3,11,8,-2,-13,-1,12,-1,-8,0,9,-13,-11,-12,-5,-10,-2,-10,11,-3,9,-2,-13,2,-3,3,2,-9,-13,-4,0,-4,6,-3,-10,-4,12,-2,-7,-6,-11,-4,9,6,-3,6,11,-13,11,-5,5,11,11,12,6,7,-5,12,-2,-1,12,0,7,-4,-8,-3,-2,-7,1,-6,7,-13,-12,-8,-13,-7,-2,-6,-8,-8,5,-6,-9,-5,-1,-4,5,-13,7,-8,10,1,5,5,-13,1,0,10,-13,9,12,10,-1,5,-8,10,-9,-1,11,1,-13,-9,-3,-6,2,-1,-10,1,12,-13,1,-8,-10,8,-11,10,-6,2,-13,3,-6,7,-13,12,-9,-10,-10,-5,-7,-10,-8,-8,-13,4,-6,8,5,3,12,8,-13,-4,2,-3,-3,5,-13,10,-12,4,-13,5,-1,-9,9,-4,3,0,3,3,-9,-12,1,-6,1,3,2,4,-8,-10,-10,-10,9,8,-13,12,12,-8,-12,-6,-5,2,2,3,7,10,6,11,-8,6,8,8,-12,-7,10,-6,5,-3,-9,-3,9,-1,-13,-1,5,-3,-7,-3,4,-8,-2,-8,3,4,2,12,12,2,-5,3,11,6,-9,11,-13,3,-1,7,12,11,-1,12,4,-3,0,-3,6,4,-11,4,12,2,-4,2,1,-10,-6,-8,1,-13,7,-11,1,-13,12,-11,-13,6,0,11,-13,0,-1,1,4,-13,3,-9,-2,-9,8,-6,-3,-13,-6,-8,-2,5,-9,8,10,2,7,3,-9,-1,-6,-1,-1,9,5,11,-2,11,-3,12,-8,3,0,3,5,-1,4,0,10,3,-6,4,5,-13,0,-10,5,5,8,12,11,8,9,9,-6,7,-4,8,-12,-10,4,-10,9,7,3,12,4,9,-7,10,-2,7,0,12,-2,-1,-6,0,-11]);var c=new jsfeat.matrix_t(3,3,jsfeat.F32_t|jsfeat.C1_t);var f=new jsfeat.matrix_t(32,32,jsfeat.U8_t|jsfeat.C1_t);var e=function(l,n,k,i,h,j){var m=Math.cos(k);var g=Math.sin(k);c.data[0]=m,c.data[1]=-g,c.data[2]=(-m+g)*j*0.5+i,c.data[3]=g,c.data[4]=m,c.data[5]=(-g-m)*j*0.5+h;jsfeat.imgproc.warp_affine(l,n,c,128)};return{describe:function(j,u,g,B){var r=32;var x=0,A=0,q=0,p=0,z=0;var o=0,m=0,D=0;var C=j.data,n=j.cols,y=j.rows;var t=f.data;var v=16*32+16;var k=0;if(!(B.type&jsfeat.U8_t)){B.type=jsfeat.U8_t;B.cols=r;B.rows=g;B.channel=1;B.allocate()}else{B.resize(r,g,1)}var l=B.data;var s=0;for(x=0;x=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file +var jsfeat=jsfeat||{REVISION:"ALPHA"};(function(r){var o=1.192092896e-7;var l=1e-37;var m=256,i=512,h=1024,x=2048,w=4096;var A=1,n=2,b=3,p=4;var z=new Int32Array([-1,1,4,-1,4,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,8]);var y=(function(){return function(B){return(B&65280)}})();var k=(function(){return function(B){return(B&255)}})();var c=(function(){return function(B){return z[(B&65280)>>8]}})();var a=0;var f=1;var e=2;var u=3;var d=1;var s=1;var g=2;var v=(function(){function B(D,C){this.size=((D+7)|0)&-8;if(typeof C==="undefined"){this.buffer=new ArrayBuffer(this.size)}else{this.buffer=C;this.size=C.length}this.u8=new Uint8Array(this.buffer);this.i32=new Int32Array(this.buffer);this.f32=new Float32Array(this.buffer);this.f64=new Float64Array(this.buffer)}return B})();var q=(function(){function B(F,D,E,C){this.type=y(E)|0;this.channel=k(E)|0;this.cols=F|0;this.rows=D|0;if(typeof C==="undefined"){this.allocate()}else{this.buffer=C;this.data=this.type&m?this.buffer.u8:(this.type&i?this.buffer.i32:(this.type&h?this.buffer.f32:this.buffer.f64))}}B.prototype.allocate=function(){delete this.data;delete this.buffer;this.buffer=new v((this.cols*c(this.type)*this.channel)*this.rows);this.data=this.type&m?this.buffer.u8:(this.type&i?this.buffer.i32:(this.type&h?this.buffer.f32:this.buffer.f64))};B.prototype.copy_to=function(D){var C=D.data,G=this.data;var E=0,F=(this.cols*this.rows*this.channel)|0;for(;Ethis.buffer.size){this.cols=F;this.rows=D;this.channel=C;this.allocate()}else{this.cols=F;this.rows=D;this.channel=C}};return B})();var t=(function(){function B(C){this.levels=C|0;this.data=new Array(C);this.pyrdown=jsfeat.imgproc.pyrdown}B.prototype.allocate=function(C,E,F){var D=this.levels;while(--D>=0){this.data[D]=new q(C>>D,E>>D,F)}};B.prototype.build=function(F,E){if(typeof E==="undefined"){E=true}var H=2,D=F,C=this.data[0];if(!E){var G=F.cols*F.rows;while(--G>=0){C.data[G]=F.data[G]}}C=this.data[1];this.pyrdown(D,C);for(;Hh.size){h.resize(g)}return h},put_buffer:function(g){c=c.next=g;d++}}})();b.cache=a;a.allocate(30,640*4)})(jsfeat);(function(b){var a=(function(){var c=new Int32Array(48*2);return{get_gaussian_kernel:function(p,m,e,l){var f=0,j=0,o=0,n=0,d=0;var g=0;var h=jsfeat.cache.get_buffer(p<<2);var k=h.f32;if((p&1)==1&&p<=7&&m<=0){switch(p>>1){case 0:k[0]=1;g=1;break;case 1:k[0]=0.25,k[1]=0.5,k[2]=0.25;g=0.25+0.5+0.25;break;case 2:k[0]=0.0625,k[1]=0.25,k[2]=0.375,k[3]=0.25,k[4]=0.0625;g=0.0625+0.25+0.375+0.25+0.0625;break;case 3:k[0]=0.03125,k[1]=0.109375,k[2]=0.21875,k[3]=0.28125,k[4]=0.21875,k[5]=0.109375,k[6]=0.03125;g=0.03125+0.109375+0.21875+0.28125+0.21875+0.109375+0.03125;break}}else{n=m>0?m:((p-1)*0.5-1)*0.3+0.8;d=-0.5/(n*n);for(;f=0){j=k[C<<1];G=k[(C<<1)+1];C--;for(;;){z=(G-j)+1;if(z<=D){for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}else{f=0;x=j;h=G;l=j+(z>>1);if(z>40){E=z>>3;I=j,H=j+E,F=j+(E<<1);r=o[I],q=o[H],p=o[F];j=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=l-E,H=l,F=l+E;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));I=G-(E<<1),H=G-E,F=G;r=o[I],q=o[H],p=o[F];G=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F))}I=j,H=l,F=G;r=o[I],q=o[H],p=o[F];l=u(r,q)?(u(q,p)?H:(u(r,p)?F:I)):(u(p,q)?H:(u(r,p)?I:F));if(l!=x){v=o[l];o[l]=o[x];o[x]=v;l=x}j=w=x+1;G=g=h;r=o[l];for(;;){while(j<=G&&!u(r,o[j])){if(!u(o[j],r)){if(j>w){v=o[w];o[w]=o[j];o[j]=v}f=1;w++}j++}while(j<=G&&!u(o[G],r)){if(!u(r,o[G])){if(GG){break}v=o[j];o[j]=o[G];o[G]=v;f=1;j++;G--}if(f==0){j=x,G=h;for(e=j+1;e<=G;e++){for(y=e;y>j&&u(o[y],o[y-1]);y--){v=o[y];o[y]=o[y-1];o[y-1]=v}}break}z=Math.min((w-x),(j-w));A=(j-z)|0;for(B=0;B1){if(A>1){if(z>A){++C;k[C<<1]=x;k[(C<<1)+1]=x+z-1;j=h-A+1,G=h}else{++C;k[C<<1]=h-A+1;k[(C<<1)+1]=h;j=x,G=x+z-1}}else{j=x,G=x+z-1}}else{if(A>1){j=h-A+1,G=h}else{break}}}}}},median:function(k,d,i){var e;var f=0,j=0,g=0,h=(d+i)>>1;for(;;){if(i<=d){return k[h]}if(i==(d+1)){if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}return k[h]}f=((d+i)>>1);if(k[f]>k[i]){e=k[f];k[f]=k[i];k[i]=e}if(k[d]>k[i]){e=k[d];k[d]=k[i];k[i]=e}if(k[f]>k[d]){e=k[f];k[f]=k[d];k[d]=e}j=(d+1);e=k[f];k[f]=k[j];k[j]=e;g=i;for(;;){do{++j}while(k[d]>k[j]);do{--g}while(k[g]>k[d]);if(g=h){i=(g-1)}}}return 0}}})();b.math=a})(jsfeat);(function(b){var a=(function(){return{identity:function(j,g){if(typeof g==="undefined"){g=1}var i=j.data;var f=j.rows,h=j.cols,e=(h+1)|0;var c=f*h;var d=c;while(--c>=0){i[c]=0}c=d;d=0;while(dg){g/=h;return h*Math.sqrt(1+g*g)}if(g>0){h/=g;return g*Math.sqrt(1+h*h)}return 0};var c=function(H,o,q,r,h,I){var C=jsfeat.EPSILON;var N=0,M=0,L=0,J=0,K=0,D=0,R=0,G=0;var u=0,v=I*I*30;var E=0,U=0,F=0,x=0,z=0,B=0,Q=0,T=0,w=0;var P=jsfeat.cache.get_buffer(I<<2);var S=jsfeat.cache.get_buffer(I<<2);var O=P.i32;var g=S.i32;if(r){for(;N0){for(J=0,E=Math.abs(H[L]),N=1;N1){for(;u0){for(J=0,E=Math.abs(H[D]),N=1;N>16)&32767)&256)!=0?y:-y;D[X*l+U]=B}for(A=0;A<2;A++){for(V=0;VMath.abs(w[n*v+q])){n=o}}if(Math.abs(w[n*v+q])=0;q--){y=r[q];for(n=q+1;n=0;p--){k=q[p];o=(p+1);s=(o*u);for(;o=0){p.data[z]=u.data[z]}}else{if(p){jsfeat.matmath.transpose(p,u)}}if(l&&(o&jsfeat.SVD_V_T)){z=v*v;while(--z>=0){l.data[z]=y.data[z]}}else{if(l){jsfeat.matmath.transpose(l,y)}}}else{if(p&&(o&jsfeat.SVD_U_T)){z=v*v;while(--z>=0){p.data[z]=y.data[z]}}else{if(p){jsfeat.matmath.transpose(p,y)}}if(l&&(o&jsfeat.SVD_V_T)){z=w*w;while(--z>=0){l.data[z]=u.data[z]}}else{if(l){jsfeat.matmath.transpose(l,u)}}}jsfeat.cache.put_buffer(q);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(C)},svd_solve:function(v,l,s){var E=0,C=0,z=0;var w=0,u=0;var o=v.rows,p=v.cols;var h=0,I=0,x=0;var r=v.type|jsfeat.C1_t;var F=jsfeat.cache.get_buffer((o*o)<<3);var m=jsfeat.cache.get_buffer(p<<3);var H=jsfeat.cache.get_buffer((p*p)<<3);var t=new jsfeat.matrix_t(o,o,r,F.data);var G=new jsfeat.matrix_t(1,p,r,m.data);var D=new jsfeat.matrix_t(p,p,r,H.data);var n=s.data,y=t.data,q=G.data,g=D.data;this.svd_decompose(v,G,t,D,0);x=jsfeat.EPSILON*q[0]*p;for(;Ex){for(z=0,h=0,w=0;zw){l+=g[s+y]*x[v]/p[y]}}r[h]=l}}jsfeat.cache.put_buffer(D);jsfeat.cache.put_buffer(m);jsfeat.cache.put_buffer(G)},eigenVV:function(j,p,r){var k=j.cols,m=k*k;var g=j.type|jsfeat.C1_t;var o=jsfeat.cache.get_buffer((k*k)<<3);var h=jsfeat.cache.get_buffer(k<<3);var l=new jsfeat.matrix_t(k,k,g,o.data);var q=new jsfeat.matrix_t(1,k,g,h.data);while(--m>=0){l.data[m]=j.data[m]}c(l.data,k,q.data,p?p.data:null,k,k);if(r){while(--k>=0){r.data[k]=q.data[k]}}jsfeat.cache.put_buffer(o);jsfeat.cache.put_buffer(h)}}})();b.linalg=a})(jsfeat);(function(a){var c=(function(){var m=function(p){return p*p};var e=function(z,A,x,w,u){var t=0;var y=0,s=0,q=0,C=0;var v=0,r=0,p=0,B=0;var E=0,D=0;for(;t=0){M[L]=0}for(L=0;L=0||-h>=i*(-f)?i:Math.round(h/f))|0};return e})();var d=(function(){var e=function(l,q,r,p,t,m,g){var v=1000;var s=[];var n=0,k=0,u=0,h=0,o=false;for(;u=0){y.data[l]=1}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return true}for(;zMath.max(F,v-1)){o.copy_to(j);F=p;if(y){s.copy_to(y)}A=E.update_iters((l-p)/l,A);q=true}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(t);return q},lmeds:function(H,n,z,i,l,j,B,g){if(typeof g==="undefined"){g=1000}if(l=0){B.data[l]=1}}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return true}for(;C=w}jsfeat.cache.put_buffer(E);jsfeat.cache.put_buffer(h);jsfeat.cache.put_buffer(u);return r}}})();a.ransac_params_t=b;a.motion_model=c;a.motion_estimator=d})(jsfeat);(function(b){var a=(function(){var c=function(q,S,O,p){var r=0;var y=q.channel,v=q.cols,J=q.rows;var P=q.data,m=S.data;var I=v/O,H=J/p;var n=(I*H*65536)|0;var x=0,u=0,C=0,A=0,t=0,s=0,G=0,F=0,D=0,B=0;var Q=0,N=0,K=0,o=0,M=0,E=0;var l=jsfeat.cache.get_buffer((O*y)<<2);var g=jsfeat.cache.get_buffer((O*y)<<2);var R=jsfeat.cache.get_buffer((v*2*3)<<2);var L=l.i32;var j=g.i32;var z=R.i32;for(;xD){z[F++]=(x*y)|0;z[F++]=((t-1)*y)|0;z[F++]=((t-D)*256)|0;r++}for(C=t;C0.001){r++;z[F++]=(x*y)|0;z[F++]=(s*y)|0;z[F++]=((B-s)*256)|0}}for(x=0;xC){q++;y[E++]=((s-1)*x)|0;y[E++]=(v*x)|0;y[E++]=(s-C)*Q}for(B=s;B0.001){q++;y[E++]=(r*x)|0;y[E++]=(v*x)|0;y[E++]=(A-r)*Q}}for(v=0;v>8,255);m[u+y+1]=Math.min(G>>8,255);m[u+y+2]=Math.min(E>>8,255);m[u+y+3]=Math.min(C>>8,255)}for(;y>8,255)}A+=s;u+=s}for(z=0;z>8,255);m[u+s]=Math.min(G>>8,255);m[u+q]=Math.min(E>>8,255);m[u+p]=Math.min(C>>8,255)}for(;y>8,255)}}};var d=function(D,F,m,s,B,t,g,n){var z=0,y=0,x=0,A=0,u=0,l=0,G=0,E=0,C=0,v=t[0],r=0;var q=s<<1,p=s*3,o=s<<2;for(;z>14;t[u+1]=(n[m+o]*s+n[m+o+1]*B+n[m+o+2]*C+8192)>>14;t[u+2]=(n[m+l]*s+n[m+l+1]*B+n[m+l+2]*C+8192)>>14;t[u+3]=(n[m+k]*s+n[m+k+1]*B+n[m+k+2]*C+8192)>>14}for(;q>14}}},resample:function(l,m,i,k){var j=l.rows,g=l.cols;if(j>k&&g>i){m.resize(i,k,l.channel);if(l.type&jsfeat.U8_t&&m.type&jsfeat.U8_t&&j*g/(k*i)<256){c(l,m,i,k)}else{f(l,m,i,k)}}},box_blur_gray:function(r,J,n,l){if(typeof l==="undefined"){l=0}var z=r.cols,E=r.rows,s=E<<1,v=z<<1;var D=0,u=0,t=0,m=0;var B=((n<<1)+1)|0;var p=(n+1)|0,H=(p+1)|0;var I=l&jsfeat.BOX_BLUR_NOSCALE?1:(1/(B*B));var C=jsfeat.cache.get_buffer((z*E)<<2);var j=0,G=0,o=0,q=0,k=0;var F=C.i32;var g=r.data;var A=0;J.resize(z,E,r.channel);for(t=0;t>1;var t=g.cols,p=g.rows;var u=g.type,n=u&jsfeat.U8_t;s.resize(t,p,g.channel);var m=g.data,j=s.data;var k,i,q=(r+Math.max(p,t))|0;var l=jsfeat.cache.get_buffer(q<<2);var o=jsfeat.cache.get_buffer(r<<2);if(n){k=l.i32;i=o.i32}else{if(u&jsfeat.S32_t){k=l.i32;i=o.f32}else{k=l.f32;i=o.f32}}jsfeat.math.get_gaussian_kernel(r,v,i,u);if(n){e(k,m,j,t,p,i,r,x)}else{d(k,m,j,t,p,i,r,x)}jsfeat.cache.put_buffer(l);jsfeat.cache.put_buffer(o)},hough_transform:function(D,q,C,m){var v=D.data;var x=D.cols;var u=D.rows;var p=x;min_theta=0;max_theta=Math.PI;numangle=Math.round((max_theta-min_theta)/C);numrho=Math.round(((x+u)*2+1)/q);irho=1/q;var A=new Int32Array((numangle+2)*(numrho+2));var g=new Float32Array(numangle);var k=new Float32Array(numangle);var w=0;var B=min_theta;for(;wm&&A[o]>A[o-1]&&A[o]>=A[o+1]&&A[o]>A[o-numrho-2]&&A[o]>=A[o+numrho+2]){_sort_buf.push(o)}}}_sort_buf.sort(function(j,i){return A[j]>A[i]||(A[j]==A[i]&&j>1,l=t>>1;var B=p-(s<<1),u=l-(r<<1);var o=0,n=0,g=s+r*q,m=0,v=0,i=0;A.resize(p,l,k.channel);var z=k.data,j=A.data;for(n=0;n>2;j[i+1]=(z[m+2]+z[m+3]+z[m+q+2]+z[m+q+3]+2)>>2}for(;o>2}g+=q<<1;v+=p}},scharr_derivatives:function(j,G){var p=j.cols,s=j.rows;var H=p<<1,o=0,m=0,u=0,E,D,C,B,A,z;var v=0,t=0,r=0,i=0;var n,l;G.resize(p,s,2);var F=j.data,g=G.data;var k=jsfeat.cache.get_buffer((p+2)<<2);var q=jsfeat.cache.get_buffer((p+2)<<2);if(j.type&jsfeat.U8_t||j.type&jsfeat.S32_t){n=k.i32;l=q.i32}else{n=k.f32;l=q.f32}for(;m0?m-1:1)*p)|0;r=((m0?m-1:1)*p)|0;r=((m0;--n){h=n+w*r,x=h-r;for(q=w;q>0;--q,h-=r,x-=r){u[h]+=u[x]+u[x+1]}}}},equalize_histogram:function(j,r){var s=j.cols,q=j.rows,o=j.data;r.resize(s,q,j.channel);var l=r.data,t=s*q;var p=0,n=0,k,g;var m=jsfeat.cache.get_buffer(256<<2);k=m.i32;for(;p<256;++p){k[p]=0}for(p=0;pk){K=E;E=k;k=K}K=(3*(C+2))|0;while(--K>=0){Q[K]=0}K=((L+2)*(C+2))|0;while(--K>=0){T[K]=0}for(;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}for(K=1;K<=L;++K,q+=A){if(K==L){H=M+C;while(--H>=M){Q[H]=0}}else{for(H=0;H>31))-(z>>31))+((v^(v>>31))-(v>>31))}}R=(q-A)|0;T[I-1]=0;J=0;for(H=0;HE){z=G[R];v=G[R+1];D=z^v;z=((z^(z>>31))-(z>>31))|0;v=((v^(v>>31))-(v>>31))|0;g=z*13573;U=g+((z+z)<<15);v<<=15;if(vQ[O+H-1]&&N>=Q[O+H+1]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{if(v>U){if(N>Q[P+H]&&N>=Q[M+H]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}else{D=D<0?-1:1;if(N>Q[P+H-D]&&N>Q[M+H+D]){if(N>k&&!J&&T[I+H-B]!=2){T[I+H]=2;J=1;r[F++]=I+H}else{T[I+H]=1}continue}}}}T[I+H]=0;J=0}T[I+C]=0;I+=B;H=P;P=O;O=M;M=H}H=I-B-1;for(K=0;K0){I=r[--F];I-=B+1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I-=2;if(T[I]==1){T[I]=2,r[F++]=I}I+=B;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}I+=1;if(T[I]==1){T[I]=2,r[F++]=I}}I=B+1;P=0;for(K=0;K0&&p>0&&u<(l-1)&&k<(v-1)){R=Math.max(C-u,0);Q=Math.max(p-k,0);G=(l*k+u)|0;N=H[G]+R*(H[G+1]-H[G]);M=H[G+l]+R*(H[G+l+1]-H[G+l]);q[g]=N+Q*(M-N)}else{q[g]=r}}}},warp_affine:function(k,K,p,J){if(typeof J==="undefined"){J=0}var u=k.cols,z=k.rows,j=K.cols,v=K.rows;var E=k.data,i=K.data;var o=0,n=0,I=0,q=0,A=0,m=0,w=0,G=0,D=0,h=0,g=0;var l=p.data;var t=l[0],s=l[1],r=l[2],H=l[3],F=l[4],C=l[5];for(var B=0;n=0&&A>=0&&q<(u-1)&&A<(z-1)){G=m-q;D=w-A;I=u*A+q;h=E[I]+G*(E[I+1]-E[I]);g=E[I+u]+G*(E[I+u+1]-E[I+u]);i[B]=h+D*(g-h)}else{i[B]=J}}}},skindetector:function(o,p){var n,m,h,k;var l=o.width*o.height;while(l--){k=l*4;n=o.data[k];m=o.data[k+1];h=o.data[k+2];if((n>95)&&(m>40)&&(h>20)&&(n>m)&&(n>h)&&(n-Math.min(m,h)>15)&&(Math.abs(n-m)>15)){p[l]=255}else{p[l]=0}}}}})();b.imgproc=a})(jsfeat);(function(a){var b=(function(){var h=new Int32Array([0,3,1,3,2,2,3,1,3,0,3,-1,2,-2,1,-3,0,-3,-1,-3,-2,-2,-3,-1,-3,0,-3,1,-2,2,-1,3]);var f=new Uint8Array(512);var e=new Int32Array(25);var i=new Int32Array(25);var d=function(l,n,o){var j=0;var m=h;for(;j=u){continue}s=Math.max(s,r[o+6]);s=Math.max(s,r[o+7]);s=Math.max(s,r[o+8]);u=Math.min(u,Math.max(s,r[o]));u=Math.min(u,Math.max(s,r[o+9]))}return -u-1};var c=20;return{set_threshold:function(j){c=Math.min(Math.max(j,0),255);for(var k=-255;k<=255;++k){f[(k+255)]=(k<-c?1:(k>c?2:0))}return c},detect:function(L,H,D){if(typeof D==="undefined"){D=3}var A=8,t=25;var u=L.data,X=L.cols,ar=L.rows;var ap=0,an=0,al=0,E=0,W=0,aq=0;var B=jsfeat.cache.get_buffer(3*X);var O=jsfeat.cache.get_buffer(((X+1)*3)<<2);var I=B.u8;var F=O.i32;var M=e;var J=i;var y=Math.max(3,D);var Z=Math.min((ar-2),(ar-D));var z=Math.max(3,D);var aa=Math.min((X-3),(X-D));var ah=0,P=0,C;var Q=g;var G=f;var p=c;var Y=0,ao=0,au=0,aw=0,U=0,V=0,av=0,R=0,at=0;var T=0,S=0,o=0;d(M,X,16);var am=M[0];var ak=M[1];var aj=M[2];var ai=M[3];var ag=M[4];var af=M[5];var ae=M[6];var ad=M[7];var ac=M[8];var ab=M[9];var s=M[10];var r=M[11];var q=M[12];var n=M[13];var m=M[14];var l=M[15];for(ap=0;apA){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}if(au&2){E=(Y+p);ah=0;for(al=0;alE){++ah;if(ah>A){++aw;F[U+aw]=an;I[V+an]=Q(u,av,M,J,p);break}}else{ah=0}}}}}F[U+X]=aw;if(ap==y){continue}aq=(ap-4+3)%3;R=(aq*X)|0;U=(aq*(X+1))|0;aq=(ap-5+3)%3;at=(aq*X)|0;aw=F[U+X];for(al=0;alI[R+T]&&o>I[R+S]&&o>I[at+S]&&o>I[at+an]&&o>I[at+T]&&o>I[V+S]&&o>I[V+an]&&o>I[V+T])){C=H[P];C.x=an,C.y=(ap-1),C.score=o;P++}}}jsfeat.cache.put_buffer(B);jsfeat.cache.put_buffer(O);return P}}})();a.fast_corners=b;b.set_threshold(20)})(jsfeat);(function(b){var a=(function(){var d=function(e,l,q,i,r,g,p,n,k,j){var m=0,o=0,f=(n*q+p)|0,s=f;for(m=n;m=0){j[o]=0}d(q,j,p,B,H,f,t,s,E,C);k=(s*p+t)|0;for(n=s;nF&&i>j[m-1]&&i>j[m+1]&&i>j[m-p]&&i>j[m+p]&&i>j[m-p-1]&&i>j[m+p-1]&&i>j[m-p+1]&&i>j[m+p+1])){r=c(q,m,i,H,f,G,g);if(r>D){v=A[u];v.x=o,v.y=n,v.score=r;++u;++o,++m}}}}jsfeat.cache.put_buffer(e);return u}}})();b.yape06=a})(jsfeat);(function(a){var b=(function(){var d=function(l,m,k){var j=0;var h,n;h=k;for(n=0;n=0;h--,j++){n=(Math.sqrt((k*k-h*h))+0.5)|0;m[j]=(h+l*n)}for(;-h=0;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(;n>h;n--,j++){h=(-Math.sqrt((k*k-n*n))-0.5)|0;m[j]=(h+l*n)}for(h++;h<=0;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(;h<-n;h++,j++){n=(-Math.sqrt((k*k-h*h))-0.5)|0;m[j]=(h+l*n)}for(n++;n<0;n++,j++){h=(Math.sqrt((k*k-n*n))+0.5)|0;m[j]=(h+l*n)}m[j]=m[0];m[j+1]=m[1];return j};var g=function(h,j,i){var k=0;if(h[j+1]!=0){k++}if(h[j-1]!=0){k++}if(h[j+i]!=0){k++}if(h[j+i+1]!=0){k++}if(h[j+i-1]!=0){k++}if(h[j-i]!=0){k++}if(h[j-i+1]!=0){k++}if(h[j-i-1]!=0){k++}return k};var c=function(l,m,i,k,j){var h,n;if(i>0){m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]>i){return false}}m+=k}}else{m-=k*j;for(n=-j;n<=j;++n){for(h=-j;h<=j;++h){if(l[m+h]=u)){w=s[r+i[o]];if((w<=p)){if((w>=u)){m[r]=0;return}else{o++;v=s[r+i[o]];if((v>p)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){o++;t=s[r+i[o]];if((t>p)){h=3}else{if((tp)){h=7}else{if((tp)){m[r]=0;return}o++;v=s[r+i[o]];if((v>p)){m[r]=0;return}o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}h=1}}else{w=s[r+i[o]];if((wp)){v=t;o++;t=s[r+i[o]];if((tp)){m[r]=0;return}if((t>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((v<=p)){m[r]=0;return}if((t<=p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}k-=j+v;h=1;break}if((j>p)){if((v=u)){m[r]=0;return}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 2:if((j>p)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((jp)){m[r]=0;return}k-=j+v;h=4;break}if((t>p)){k-=j+v;h=7;break}if((tp)){if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){m[r]=0;return}k-=j+v;h=1;break}if((t>=u)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=7;break}m[r]=0;return;case 5:if((jp)){v=t;o++;t=s[r+i[o]];if((tp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=3;break}if((tp)){m[r]=0;return}if((jp)){k-=j+v;h=7;break}m[r]=0;return;case 8:if((j>p)){if((tp)){m[r]=0;return}k-=j+v;h=1;break}m[r]=0;return;case 9:if((jp)){m[r]=0;return}v=t;o++;t=s[r+i[o]];if((t>p)){m[r]=0;return}k-=j+v;h=8;break}if((j>p)){v=t;o++;t=s[r+i[o]];if((t>k,j>>k,h)}},detect:function(k,J,G){if(typeof G==="undefined"){G=4}var A=this.level_tables[0];var i=A.radius|0,q=(i-1)|0;var m=A.dirs;var n=A.dirs_count|0;var v=n>>1;var O=k.data,u=k.cols|0,K=k.rows|0,N=u>>1;var H=A.scores;var s=0,r=0,j=0,l=0,o=0,p=0,z=0,I=0;var F=this.tau|0;var D=0,E;var C=Math.max(i+1,G)|0;var B=Math.max(i+1,G)|0;var M=Math.min(u-i-2,u-G)|0;var L=Math.min(K-i-2,K-G)|0;j=(B*u+C)|0;for(r=B;r=3&&c(H,l,I,N,i)){E=J[D];E.x=s,E.y=r,E.score=z;++D;s+=q,l+=q}}}}return D}}})();a.yape=b})(jsfeat);(function(b){var a=(function(){var d=new Int32Array([8,-3,9,5,4,2,7,-12,-11,9,-8,2,7,-12,12,-13,2,-13,2,12,1,-7,1,6,-2,-10,-2,-4,-13,-13,-11,-8,-13,-3,-12,-9,10,4,11,9,-13,-8,-8,-9,-11,7,-9,12,7,7,12,6,-4,-5,-3,0,-13,2,-12,-3,-9,0,-7,5,12,-6,12,-1,-3,6,-2,12,-6,-13,-4,-8,11,-13,12,-8,4,7,5,1,5,-3,10,-3,3,-7,6,12,-8,-7,-6,-2,-2,11,-1,-10,-13,12,-8,10,-7,3,-5,-3,-4,2,-3,7,-10,-12,-6,11,5,-12,6,-7,5,-6,7,-1,1,0,4,-5,9,11,11,-13,4,7,4,12,2,-1,4,4,-4,-12,-2,7,-8,-5,-7,-10,4,11,9,12,0,-8,1,-13,-13,-2,-8,2,-3,-2,-2,3,-6,9,-4,-9,8,12,10,7,0,9,1,3,7,-5,11,-10,-13,-6,-11,0,10,7,12,1,-6,-3,-6,12,10,-9,12,-4,-13,8,-8,-12,-13,0,-8,-4,3,3,7,8,5,7,10,-7,-1,7,1,-12,3,-10,5,6,2,-4,3,-10,-13,0,-13,5,-13,-7,-12,12,-13,3,-11,8,-7,12,-4,7,6,-10,12,8,-9,-1,-7,-6,-2,-5,0,12,-12,5,-7,5,3,-10,8,-13,-7,-7,-4,5,-3,-2,-1,-7,2,9,5,-11,-11,-13,-5,-13,-1,6,0,-1,5,-3,5,2,-4,-13,-4,12,-9,-6,-9,6,-12,-10,-8,-4,10,2,12,-3,7,12,12,12,-7,-13,-6,5,-4,9,-3,4,7,-1,12,2,-7,6,-5,1,-13,11,-12,5,-3,7,-2,-6,7,-8,12,-7,-13,-7,-11,-12,1,-3,12,12,2,-6,3,0,-4,3,-2,-13,-1,-13,1,9,7,1,8,-6,1,-1,3,12,9,1,12,6,-1,-9,-1,3,-13,-13,-10,5,7,7,10,12,12,-5,12,9,6,3,7,11,5,-13,6,10,2,-12,2,3,3,8,4,-6,2,6,12,-13,9,-12,10,3,-8,4,-7,9,-11,12,-4,-6,1,12,2,-8,6,-9,7,-4,2,3,3,-2,6,3,11,0,3,-3,8,-8,7,8,9,3,-11,-5,-6,-4,-10,11,-5,10,-5,-8,-3,12,-10,5,-9,0,8,-1,12,-6,4,-6,6,-11,-10,12,-8,7,4,-2,6,7,-2,0,-2,12,-5,-8,-5,2,7,-6,10,12,-9,-13,-8,-8,-5,-13,-5,-2,8,-8,9,-13,-9,-11,-9,0,1,-8,1,-2,7,-4,9,1,-2,1,-1,-4,11,-6,12,-11,-12,-9,-6,4,3,7,7,12,5,5,10,8,0,-4,2,8,-9,12,-5,-13,0,7,2,12,-1,2,1,7,5,11,7,-9,3,5,6,-8,-13,-4,-8,9,-5,9,-3,-3,-4,-7,-3,-12,6,5,8,0,-7,6,-6,12,-13,6,-5,-2,1,-10,3,10,4,1,8,-4,-2,-2,2,-13,2,-12,12,12,-2,-13,0,-6,4,1,9,3,-6,-10,-3,-5,-3,-13,-1,1,7,5,12,-11,4,-2,5,-7,-13,9,-9,-5,7,1,8,6,7,-8,7,6,-7,-4,-7,1,-8,11,-7,-8,-13,6,-12,-8,2,4,3,9,10,-5,12,3,-6,-5,-6,7,8,-3,9,-8,2,-12,2,8,-11,-2,-10,3,-12,-13,-7,-9,-11,0,-10,-5,5,-3,11,8,-2,-13,-1,12,-1,-8,0,9,-13,-11,-12,-5,-10,-2,-10,11,-3,9,-2,-13,2,-3,3,2,-9,-13,-4,0,-4,6,-3,-10,-4,12,-2,-7,-6,-11,-4,9,6,-3,6,11,-13,11,-5,5,11,11,12,6,7,-5,12,-2,-1,12,0,7,-4,-8,-3,-2,-7,1,-6,7,-13,-12,-8,-13,-7,-2,-6,-8,-8,5,-6,-9,-5,-1,-4,5,-13,7,-8,10,1,5,5,-13,1,0,10,-13,9,12,10,-1,5,-8,10,-9,-1,11,1,-13,-9,-3,-6,2,-1,-10,1,12,-13,1,-8,-10,8,-11,10,-6,2,-13,3,-6,7,-13,12,-9,-10,-10,-5,-7,-10,-8,-8,-13,4,-6,8,5,3,12,8,-13,-4,2,-3,-3,5,-13,10,-12,4,-13,5,-1,-9,9,-4,3,0,3,3,-9,-12,1,-6,1,3,2,4,-8,-10,-10,-10,9,8,-13,12,12,-8,-12,-6,-5,2,2,3,7,10,6,11,-8,6,8,8,-12,-7,10,-6,5,-3,-9,-3,9,-1,-13,-1,5,-3,-7,-3,4,-8,-2,-8,3,4,2,12,12,2,-5,3,11,6,-9,11,-13,3,-1,7,12,11,-1,12,4,-3,0,-3,6,4,-11,4,12,2,-4,2,1,-10,-6,-8,1,-13,7,-11,1,-13,12,-11,-13,6,0,11,-13,0,-1,1,4,-13,3,-9,-2,-9,8,-6,-3,-13,-6,-8,-2,5,-9,8,10,2,7,3,-9,-1,-6,-1,-1,9,5,11,-2,11,-3,12,-8,3,0,3,5,-1,4,0,10,3,-6,4,5,-13,0,-10,5,5,8,12,11,8,9,9,-6,7,-4,8,-12,-10,4,-10,9,7,3,12,4,9,-7,10,-2,7,0,12,-2,-1,-6,0,-11]);var c=new jsfeat.matrix_t(3,3,jsfeat.F32_t|jsfeat.C1_t);var f=new jsfeat.matrix_t(32,32,jsfeat.U8_t|jsfeat.C1_t);var e=function(l,n,k,i,h,j){var m=Math.cos(k);var g=Math.sin(k);c.data[0]=m,c.data[1]=-g,c.data[2]=(-m+g)*j*0.5+i,c.data[3]=g,c.data[4]=m,c.data[5]=(-g-m)*j*0.5+h;jsfeat.imgproc.warp_affine(l,n,c,128)};return{describe:function(j,u,g,B){var r=32;var x=0,A=0,q=0,p=0,z=0;var o=0,m=0,D=0;var C=j.data,n=j.cols,y=j.rows;var t=f.data;var v=16*32+16;var k=0;if(!(B.type&jsfeat.U8_t)){B.type=jsfeat.U8_t;B.cols=r;B.rows=g;B.channel=1;B.allocate()}else{B.resize(r,g,1)}var l=B.data;var s=0;for(x=0;x=0;--ai){am=(1/(1<>ai;aH=aB>>ai;ab=ay<<1;g=r[ai].data;F=S[ai].data;A=(ay-N)|0;O=(aH-N)|0;c(r[ai],V);for(ak=0;ak=A)|(o<=d)|(o>=O);if(J!=0){if(ai==0){K[ak]=0}continue}U=aF-p;T=aD-o;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);ao=0,an=0,ag=0;for(H=0;H>(Z));v=(aA[aM]*aK+aA[aM+2]*aJ+aA[aM+ab]*ar+aA[aM+ab+2]*aq);v=(((v)+m)>>(C));B=(aA[aM+1]*aK+aA[aM+3]*aJ+aA[aM+ab+1]*ar+aA[aM+ab+3]*aq);B=(((B)+m)>>(C));w[at]=al;ac[aI++]=v;ac[aI++]=B;ao+=v*v;an+=v*B;ag+=B*B}}ao*=X;an*=X;ag*=X;aj=ao*ag-an*an;aG=(ag+ao-Math.sqrt((ao-ag)*(ao-ag)+4*an*an))/aa;if(aG=A)|(aC<=d)|(aC>=O);if(J!=0){if(ai==0){K[ak]=0}break}U=af-aE;T=ae-aC;aK=(((1-U)*(1-T)*ad)+0.5)|0;aJ=((U*(1-T)*ad)+0.5)|0;ar=(((1-U)*T*ad)+0.5)|0;aq=(ad-aK-aJ-ar);aw=0,av=0;for(H=0;H>(Z));al=(al-w[at]);aw+=al*ac[aI++];av+=al*ac[aI++]}}aw*=X;av*=X;Y=((an*av-ag*aw)*aj);W=((an*aw-ao*av)*aj);af+=Y;ae+=W;aL[Q]=af+e;aL[P]=ae+e;if(Y*Y+W*W<=f){break}if(l>0&&Math.abs(Y+E)<0.01&&Math.abs(W+z)<0.01){aL[Q]-=Y*0.5;aL[P]-=W*0.5;break}E=Y;z=W}}}jsfeat.cache.put_buffer(az);jsfeat.cache.put_buffer(s);jsfeat.cache.put_buffer(t)}}})();b.optical_flow_lk=a})(jsfeat);(function(b){var a=(function(){var c=function(e,d){var f=(e.width*0.25+0.5)|0;return d.x<=e.x+f&&d.x>=e.x-f&&d.y<=e.y+f&&d.y>=e.y-f&&d.width<=(e.width*1.5+0.5)|0&&(d.width*1.5+0.5)|0>=e.width};return{edges_density:0.07,detect_single_scale:function(E,ad,af,q,d,f,D,B){var z=(B.size[0]*D)|0,N=(B.size[1]*D)|0,V=(0.5*D+1.5)|0,U=V;var Z,X,W,Q,O,T=(d-z)|0,R=(f-N)|0;var H=(d+1)|0,w,p,r,S;var e=1/(z*N);var t,o,l,u,s,ae,A,g=true,L,h,n,G,m;var M,K,J,I,v,C;var ac=0,ab=z,aa=N*H,Y=aa+z;var F=((z*N)*255*this.edges_density)|0;var P=[];for(O=0;O0?Math.sqrt(r):1;t=B.complexClassifiers;s=t.length;g=true;for(Z=0;Zr[s].rank){r[s].parent=t}else{r[t].parent=s;if(r[t].rank==r[s].rank){r[s].rank++}t=s}var A,d=v;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}d=y;while(r[d].parent!=-1){A=d;d=r[d].parent;r[A].parent=t}}}}}var w=[];var o=0;for(y=0;y=0){r[e].rank=~o++}v=~r[e].rank}w[y]=v}var m=[];for(y=0;y=l){h.push({x:(m[y].x*2+q)/(2*q),y:(m[y].y*2+q)/(2*q),width:(m[y].width*2+q)/(2*q),height:(m[y].height*2+q)/(2*q),neighbors:m[y].neighbors,confidence:m[y].confidence})}}var p=[];q=h.length;for(y=0;y=u.x-f&&z.y>=u.y-f&&z.x+z.width<=u.x+u.width+f&&z.y+z.height<=u.y+u.height+f&&(u.neighbors>Math.max(3,z.neighbors)||z.neighbors<3)){x=false;break}}if(x){p.push(z)}}return p}}})();b.haar=a})(jsfeat);(function(a){var b=(function(){var c=function(f,e){var g=(f.width*0.25+0.5)|0;return e.x<=f.x+g&&e.x>=f.x-g&&e.y<=f.y+g&&e.y>=f.y-g&&e.width<=(f.width*1.5+0.5)|0&&(e.width*1.5+0.5)|0>=f.width};var d=new jsfeat.pyramid_t(1);return{interval:4,scale:1.1486,next:5,scale_to:1,prepare_cascade:function(g){var m=g.stage_classifier.length;for(var h=0;h>1;h=g.rows>>1;if(p||n!=j.cols||h!=j.rows){d.data[l<<2]=new jsfeat.matrix_t(n,h,r);j=d.data[l<<2]}jsfeat.imgproc.pyrdown(g,j)}for(l=this.next*2;l>1;h=g.rows>>1;j=d.data[(l<<2)+1];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+1]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+1]}jsfeat.imgproc.pyrdown(g,j,1,0);j=d.data[(l<<2)+2];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+2]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+2]}jsfeat.imgproc.pyrdown(g,j,0,1);j=d.data[(l<<2)+3];if(p||n!=j.cols||h!=j.rows){d.data[(l<<2)+3]=new jsfeat.matrix_t(n,h,r);j=d.data[(l<<2)+3]}jsfeat.imgproc.pyrdown(g,j,1,1)}return d},detect:function(G,L){var h=this.interval;var N=this.scale;var m=this.next;var l=this.scale_to;var ab=0,aa=0,Z=0,W=0,S=0,R=0,U=0,B=0,J=0,I=0,V=0,ae=0,M=0,ad=0,w=0,Y=0,g=0;var E=0,X,Q,D,H,F,O=true,o=true;var z=1,v=1;var s=[0,1,0,1];var r=[0,0,1,1];var K=[];var C=G.data,ac=1,u=2,t=4;var A=[],e=[0,0,0];var P=[0,0,0];var T=[0,0,0];for(ab=0;ab>2);g=C[w+(m<<3)].rows-(L.height>>2);P[0]=C[w].cols*ac;P[1]=C[w+(m<<2)].cols*ac;P[2]=C[w+(m<<3)].cols*ac;T[0]=(C[w].cols*t)-(Y*t);T[1]=(C[w+(m<<2)].cols*u)-(Y*u);T[2]=(C[w+(m<<3)].cols*ac)-(Y*ac);B=L.stage_classifier.length;for(aa=0;aa=0){V=A[H.pz[ad]][e[H.pz[ad]]+H.px[ad]];if(V=0){W=A[H.nz[ad]][e[H.nz[ad]]+H.nx[ad]];if(W>M){if(ae<=W){o=false;break}M=W}}}E+=(o)?X[(Z<<1)+1]:X[Z<<1]}}if(Es[t].rank){s[t].parent=u}else{s[u].parent=t;if(s[u].rank==s[t].rank){s[t].rank++}u=t}var B,e=w;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}e=z;while(s[e].parent!=-1){B=e;e=s[e].parent;s[B].parent=u}}}}}var x=[];var p=0;for(z=0;z=0){s[f].rank=~p++}w=~s[f].rank}x[z]=w}var o=[];for(z=0;z=m){k.push({x:(o[z].x*2+r)/(2*r),y:(o[z].y*2+r)/(2*r),width:(o[z].width*2+r)/(2*r),height:(o[z].height*2+r)/(2*r),neighbors:o[z].neighbors,confidence:o[z].confidence})}}var q=[];r=k.length;for(z=0;z=v.x-g&&A.y>=v.y-g&&A.x+A.width<=v.x+v.width+g&&A.y+A.height<=v.y+v.height+g&&(v.neighbors>Math.max(3,A.neighbors)||A.neighbors<3)){y=false;break}}if(y){q.push(A)}}return q}}})();a.bbf=b})(jsfeat);(function(a){if(typeof module==="undefined"||typeof module.exports==="undefined"){window.jsfeat=a}else{module.exports=a}})(jsfeat); \ No newline at end of file diff --git a/build/jsfeat.js b/build/jsfeat.js index 6f7bf4a..f9cc93b 100644 --- a/build/jsfeat.js +++ b/build/jsfeat.js @@ -49,6 +49,12 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; } })(); + // color conversion + var COLOR_RGBA2GRAY = 0; + var COLOR_RGB2GRAY = 1; + var COLOR_BGRA2GRAY = 2; + var COLOR_BGR2GRAY = 3; + // box blur option var BOX_BLUR_NOSCALE = 0x01; // svd options @@ -111,9 +117,9 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; } matrix_t.prototype.resize = function(c, r, ch) { if (typeof ch === "undefined") { ch = this.channel; } - // change buffer only if new size doesnt fit - var new_size = (c * ch) * r; - if(new_size > this.rows*this.cols*this.channel) { + // relocate buffer only if new size doesnt fit + var new_size = (c * get_data_type_size(this.type) * ch) * r; + if(new_size > this.buffer.size) { this.cols = c; this.rows = r; this.channel = ch; @@ -165,8 +171,8 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; return pyramid_t; })(); - var point2d_t = (function () { - function point2d_t(x,y,score,level,angle) { + var keypoint_t = (function () { + function keypoint_t(x,y,score,level,angle) { if (typeof x === "undefined") { x=0; } if (typeof y === "undefined") { y=0; } if (typeof score === "undefined") { score=0; } @@ -179,7 +185,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; this.level = level; this.angle = angle; } - return point2d_t; + return keypoint_t; })(); @@ -209,6 +215,12 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.EPSILON = EPSILON; global.FLT_MIN = FLT_MIN; + // color convert + global.COLOR_RGBA2GRAY = COLOR_RGBA2GRAY; + global.COLOR_RGB2GRAY = COLOR_RGB2GRAY; + global.COLOR_BGRA2GRAY = COLOR_BGRA2GRAY; + global.COLOR_BGR2GRAY = COLOR_BGR2GRAY; + // options global.BOX_BLUR_NOSCALE = BOX_BLUR_NOSCALE; global.SVD_U_T = SVD_U_T; @@ -221,7 +233,7 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; global.data_t = data_t; global.matrix_t = matrix_t; global.pyramid_t = pyramid_t; - global.point2d_t = point2d_t; + global.keypoint_t = keypoint_t; })(jsfeat); /** @@ -2672,25 +2684,41 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; return { // TODO: add support for RGB/BGR order // for raw arrays - grayscale: function(src, dst) { - var srcLength = src.length|0, srcLength_16 = (srcLength - 16)|0; - var j = 0; - var coeff_r = 4899, coeff_g = 9617, coeff_b = 1868; - - for (var i = 0; i <= srcLength_16; i += 16, j += 4) { - dst[j] = (src[i] * coeff_r + src[i+1] * coeff_g + src[i+2] * coeff_b + 8192) >> 14; - dst[j + 1] = (src[i+4] * coeff_r + src[i+5] * coeff_g + src[i+6] * coeff_b + 8192) >> 14; - dst[j + 2] = (src[i+8] * coeff_r + src[i+9] * coeff_g + src[i+10] * coeff_b + 8192) >> 14; - dst[j + 3] = (src[i+12] * coeff_r + src[i+13] * coeff_g + src[i+14] * coeff_b + 8192) >> 14; + grayscale: function(src, w, h, dst, code) { + // this is default image data representation in browser + if (typeof code === "undefined") { code = jsfeat.COLOR_RGBA2GRAY; } + var x=0, y=0, i=0, j=0, ir=0,jr=0; + var coeff_r = 4899, coeff_g = 9617, coeff_b = 1868, cn = 4; + + if(code == jsfeat.COLOR_BGRA2GRAY || code == jsfeat.COLOR_BGR2GRAY) { + coeff_r = 1868; + coeff_b = 4899; } - for (; i < srcLength; i += 4, ++j) { - dst[j] = (src[i] * coeff_r + src[i+1] * coeff_g + src[i+2] * coeff_b + 8192) >> 14; + if(code == jsfeat.COLOR_RGB2GRAY || code == jsfeat.COLOR_BGR2GRAY) { + cn = 3; + } + var cn2 = cn<<1, cn3 = (cn*3)|0; + + dst.resize(w, h, 1); + var dst_u8 = dst.data; + + for(y = 0; y < h; ++y, j+=w, i+=w*cn) { + for(x = 0, ir = i, jr = j; x <= w-4; x+=4, ir+=cn<<2, jr+=4) { + dst_u8[jr] = (src[ir] * coeff_r + src[ir+1] * coeff_g + src[ir+2] * coeff_b + 8192) >> 14; + dst_u8[jr + 1] = (src[ir+cn] * coeff_r + src[ir+cn+1] * coeff_g + src[ir+cn+2] * coeff_b + 8192) >> 14; + dst_u8[jr + 2] = (src[ir+cn2] * coeff_r + src[ir+cn2+1] * coeff_g + src[ir+cn2+2] * coeff_b + 8192) >> 14; + dst_u8[jr + 3] = (src[ir+cn3] * coeff_r + src[ir+cn3+1] * coeff_g + src[ir+cn3+2] * coeff_b + 8192) >> 14; + } + for (; x < w; ++x, ++jr, ir+=cn) { + dst_u8[jr] = (src[ir] * coeff_r + src[ir+1] * coeff_g + src[ir+2] * coeff_b + 8192) >> 14; + } } }, // derived from CCV library resample: function(src, dst, nw, nh) { var h=src.rows,w=src.cols; if (h > nh && w > nw) { + dst.resize(nw, nh, src.channel); // using the fast alternative (fix point scale, 0x100 to avoid overflow) if (src.type&jsfeat.U8_t && dst.type&jsfeat.U8_t && h * w / (nh * nw) < 0x100) { _resample_u8(src, dst, nw, nh); @@ -2715,6 +2743,8 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var data_u8 = src.data; var hold=0; + dst.resize(w, h, src.channel); + // first pass // no need to scale //data_u8 = src.data; @@ -2872,6 +2902,9 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var half_kernel = kernel_size >> 1; var w = src.cols, h = src.rows; var data_type = src.type, is_u8 = data_type&jsfeat.U8_t; + + dst.resize(w, h, src.channel); + var src_d = src.data, dst_d = dst.data; var buf,filter,buf_sz=(kernel_size + Math.max(h, w))|0; @@ -2900,6 +2933,79 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; jsfeat.cache.put_buffer(buf_node); jsfeat.cache.put_buffer(filt_node); }, + hough_transform: function( img, rho_res, theta_res, threshold ) { + var image = img.data; + + var width = img.cols; + var height = img.rows; + var step = width; + + min_theta = 0.0; + max_theta = Math.PI; + + numangle = Math.round((max_theta - min_theta) / theta_res); + numrho = Math.round(((width + height) * 2 + 1) / rho_res); + irho = 1.0 / rho_res; + + var accum = new Int32Array((numangle+2) * (numrho+2)); //typed arrays are initialized to 0 + var tabSin = new Float32Array(numangle); + var tabCos = new Float32Array(numangle); + + var n=0; + var ang = min_theta; + for(; n < numangle; n++ ) { + tabSin[n] = Math.sin(ang) * irho; + tabCos[n] = Math.cos(ang) * irho; + ang += theta_res + } + + // stage 1. fill accumulator + for( var i = 0; i < height; i++ ) { + for( var j = 0; j < width; j++ ) { + if( image[i * step + j] != 0 ) { + //console.log(r, (n+1) * (numrho+2) + r+1, tabCos[n], tabSin[n]); + for(var n = 0; n < numangle; n++ ) { + var r = Math.round( j * tabCos[n] + i * tabSin[n] ); + r += (numrho - 1) / 2; + accum[(n+1) * (numrho+2) + r+1] += 1; + } + } + } + } + + // stage 2. find local maximums + //TODO: Consider making a vector class that uses typed arrays + _sort_buf = new Array(); + for(var r = 0; r < numrho; r++ ) { + for(var n = 0; n < numangle; n++ ) { + var base = (n+1) * (numrho+2) + r+1; + if( accum[base] > threshold && + accum[base] > accum[base - 1] && accum[base] >= accum[base + 1] && + accum[base] > accum[base - numrho - 2] && accum[base] >= accum[base + numrho + 2] ) { + _sort_buf.push(base); + } + } + } + + // stage 3. sort the detected lines by accumulator value + _sort_buf.sort(function(l1, l2) { + return accum[l1] > accum[l2] || (accum[l1] == accum[l2] && l1 < l2); + }); + + // stage 4. store the first min(total,linesMax) lines to the output buffer + linesMax = Math.min(numangle*numrho, _sort_buf.length); + scale = 1.0 / (numrho+2); + lines = new Array(); + for( var i = 0; i < linesMax; i++ ) { + var idx = _sort_buf[i]; + var n = Math.floor(idx*scale) - 1; + var r = idx - (n+1)*(numrho+2) - 1; + var lrho = (r - (numrho - 1)*0.5) * rho_res; + var langle = n * theta_res; + lines.push([lrho, langle]); + } + return lines; + }, // assume we always need it for u8 image pyrdown: function(src, dst, sx, sy) { // this is needed for bbf @@ -2910,6 +3016,9 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var w2 = w >> 1, h2 = h >> 1; var _w2 = w2 - (sx << 1), _h2 = h2 - (sy << 1); var x=0,y=0,sptr=sx+sy*w,sline=0,dptr=0,dline=0; + + dst.resize(w2, h2, src.channel); + var src_d = src.data, dst_d = dst.data; for(y = 0; y < _h2; ++y) { @@ -2936,6 +3045,9 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; var srow0=0,srow1=0,srow2=0,drow=0; var trow0,trow1; + + dst.resize(w, h, 2); // 2 channel output gx, gy + var img = src.data, gxgy=dst.data; var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); @@ -3002,6 +3114,9 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; var srow0=0,srow1=0,srow2=0,drow=0; var trow0,trow1; + + dst.resize(w, h, 2); // 2 channel output gx, gy + var img = src.data, gxgy=dst.data; var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); @@ -3168,7 +3283,11 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; } }, equalize_histogram: function(src, dst) { - var w=src.cols,h=src.rows,src_d=src.data,dst_d=dst.data,size=w*h; + var w=src.cols,h=src.rows,src_d=src.data; + + dst.resize(w, h, src.channel); + + var dst_d=dst.data,size=w*h; var i=0,prev=0,hist0,norm; var hist0_node = jsfeat.cache.get_buffer(256<<2); @@ -3191,7 +3310,11 @@ var jsfeat = jsfeat || { REVISION: 'ALPHA' }; }, canny: function(src, dst, low_thresh, high_thresh) { - var w=src.cols,h=src.rows,src_d=src.data,dst_d=dst.data; + var w=src.cols,h=src.rows,src_d=src.data; + + dst.resize(w, h, src.channel); + + var dst_d=dst.data; var i=0,j=0,grad=0,w2=w<<1,_grad=0,suppress=0,f=0,x=0,y=0,s=0; var tg22x=0,tg67x=0; @@ -3709,11 +3832,11 @@ The references are: var yape06 = (function() { - var compute_laplacian = function(src, dst, w, h, Dxx, Dyy) { - var y=0,x=0,yrow=(Dxx*w+Dxx)|0,row=yrow; + var compute_laplacian = function(src, dst, w, h, Dxx, Dyy, sx,sy, ex,ey) { + var y=0,x=0,yrow=(sy*w+sx)|0,row=yrow; - for(y = Dxx; y < h - Dxx; ++y, yrow+=w, row = yrow) { - for(x = Dxx; x < w - Dxx; ++x, ++row) { + for(y = sy; y < ey; ++y, yrow+=w, row = yrow) { + for(x = sx; x < ex; ++x, ++row) { dst[row] = -4 * src[row] + src[row+Dxx] + src[row-Dxx] + src[row+Dyy] + src[row-Dyy]; } } @@ -3733,7 +3856,8 @@ The references are: laplacian_threshold: 30, min_eigen_value_threshold: 25, - detect: function(src, points) { + detect: function(src, points, border) { + if (typeof border === "undefined") { border = 5; } var x=0,y=0; var w=src.cols, h=src.rows, srd_d=src.data; var Dxx = 5, Dyy = (5 * w)|0; @@ -3745,13 +3869,18 @@ The references are: var lap_thresh = this.laplacian_threshold; var eigen_thresh = this.min_eigen_value_threshold; + var sx = Math.max(5, border)|0; + var sy = Math.max(3, border)|0; + var ex = Math.min(w-5, w-border)|0; + var ey = Math.min(h-3, h-border)|0; + x = w*h; while(--x>=0) {laplacian[x]=0;} - compute_laplacian(srd_d, laplacian, w, h, Dxx, Dyy); + compute_laplacian(srd_d, laplacian, w, h, Dxx, Dyy, sx,sy, ex,ey); - row = (Dxx*w+Dxx)|0; - for(y = Dxx; y < h-Dxx; ++y, row += w) { - for(x = Dxx, rowx=row; x < w-Dxx; ++x, ++rowx) { + row = (sy*w+sx)|0; + for(y = sy; y < ey; ++y, row += w) { + for(x = sx, rowx=row; x < ex; ++x, ++rowx) { lv = laplacian[rowx]; if ((lv < -lap_thresh && diff --git a/sample_bbf_face.html b/sample_bbf_face.html index d0185e3..efe4e0e 100755 --- a/sample_bbf_face.html +++ b/sample_bbf_face.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_boxblur.html b/sample_boxblur.html index b5cb0ff..084ed1d 100755 --- a/sample_boxblur.html +++ b/sample_boxblur.html @@ -72,9 +72,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_canny_edge.html b/sample_canny_edge.html index 202583b..017a227 100755 --- a/sample_canny_edge.html +++ b/sample_canny_edge.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_equalize_hist.html b/sample_equalize_hist.html index e342791..57cf8b0 100755 --- a/sample_equalize_hist.html +++ b/sample_equalize_hist.html @@ -70,9 +70,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_fast_corners.html b/sample_fast_corners.html index a7d7c56..5e0dce0 100755 --- a/sample_fast_corners.html +++ b/sample_fast_corners.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_gaussblur.html b/sample_gaussblur.html index a8c7db4..8113f84 100755 --- a/sample_gaussblur.html +++ b/sample_gaussblur.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_grayscale.html b/sample_grayscale.html index 70aa0f7..48c2edc 100755 --- a/sample_grayscale.html +++ b/sample_grayscale.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_haar_face.html b/sample_haar_face.html index c9b9fcd..6d11c9d 100755 --- a/sample_haar_face.html +++ b/sample_haar_face.html @@ -72,9 +72,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_oflow_lk.html b/sample_oflow_lk.html index 69f1092..fad2972 100755 --- a/sample_oflow_lk.html +++ b/sample_oflow_lk.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_orb.html b/sample_orb.html index 6443ee8..b31c1c7 100644 --- a/sample_orb.html +++ b/sample_orb.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_pyrdown.html b/sample_pyrdown.html index 7e1ba2b..fdde283 100755 --- a/sample_pyrdown.html +++ b/sample_pyrdown.html @@ -70,9 +70,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_scharr.html b/sample_scharr.html index 62b8cf3..ce6c56a 100644 --- a/sample_scharr.html +++ b/sample_scharr.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_sobel.html b/sample_sobel.html index b877beb..51bbc47 100644 --- a/sample_sobel.html +++ b/sample_sobel.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_sobel_edge.html b/sample_sobel_edge.html index 9fd833a..66cbbb5 100644 --- a/sample_sobel_edge.html +++ b/sample_sobel_edge.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_videostab.html b/sample_videostab.html index e239d06..73889b4 100644 --- a/sample_videostab.html +++ b/sample_videostab.html @@ -222,9 +222,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_warp_affine.html b/sample_warp_affine.html index a86be3e..111fb47 100755 --- a/sample_warp_affine.html +++ b/sample_warp_affine.html @@ -70,9 +70,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_warp_perspective.html b/sample_warp_perspective.html index 3b6c7b4..b11df4c 100755 --- a/sample_warp_perspective.html +++ b/sample_warp_perspective.html @@ -70,9 +70,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_yape.html b/sample_yape.html index a8e4b3c..d636e70 100755 --- a/sample_yape.html +++ b/sample_yape.html @@ -70,9 +70,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/sample_yape06.html b/sample_yape06.html index b1711a2..b26121b 100755 --- a/sample_yape06.html +++ b/sample_yape06.html @@ -71,9 +71,9 @@ compatibility.getUserMedia({video: true}, function(stream) { try { - video.src = compatibility.URL.createObjectURL(stream); + video.srcObject = stream; } catch (error) { - video.src = stream; + video.src = compatibility.URL.createObjectURL(stream); } setTimeout(function() { video.play(); diff --git a/src/jsfeat_imgproc.js b/src/jsfeat_imgproc.js index e50b00c..5462684 100755 --- a/src/jsfeat_imgproc.js +++ b/src/jsfeat_imgproc.js @@ -372,25 +372,41 @@ return { // TODO: add support for RGB/BGR order // for raw arrays - grayscale: function(src, dst) { - var srcLength = src.length|0, srcLength_16 = (srcLength - 16)|0; - var j = 0; - var coeff_r = 4899, coeff_g = 9617, coeff_b = 1868; - - for (var i = 0; i <= srcLength_16; i += 16, j += 4) { - dst[j] = (src[i] * coeff_r + src[i+1] * coeff_g + src[i+2] * coeff_b + 8192) >> 14; - dst[j + 1] = (src[i+4] * coeff_r + src[i+5] * coeff_g + src[i+6] * coeff_b + 8192) >> 14; - dst[j + 2] = (src[i+8] * coeff_r + src[i+9] * coeff_g + src[i+10] * coeff_b + 8192) >> 14; - dst[j + 3] = (src[i+12] * coeff_r + src[i+13] * coeff_g + src[i+14] * coeff_b + 8192) >> 14; + grayscale: function(src, w, h, dst, code) { + // this is default image data representation in browser + if (typeof code === "undefined") { code = jsfeat.COLOR_RGBA2GRAY; } + var x=0, y=0, i=0, j=0, ir=0,jr=0; + var coeff_r = 4899, coeff_g = 9617, coeff_b = 1868, cn = 4; + + if(code == jsfeat.COLOR_BGRA2GRAY || code == jsfeat.COLOR_BGR2GRAY) { + coeff_r = 1868; + coeff_b = 4899; + } + if(code == jsfeat.COLOR_RGB2GRAY || code == jsfeat.COLOR_BGR2GRAY) { + cn = 3; } - for (; i < srcLength; i += 4, ++j) { - dst[j] = (src[i] * coeff_r + src[i+1] * coeff_g + src[i+2] * coeff_b + 8192) >> 14; + var cn2 = cn<<1, cn3 = (cn*3)|0; + + dst.resize(w, h, 1); + var dst_u8 = dst.data; + + for(y = 0; y < h; ++y, j+=w, i+=w*cn) { + for(x = 0, ir = i, jr = j; x <= w-4; x+=4, ir+=cn<<2, jr+=4) { + dst_u8[jr] = (src[ir] * coeff_r + src[ir+1] * coeff_g + src[ir+2] * coeff_b + 8192) >> 14; + dst_u8[jr + 1] = (src[ir+cn] * coeff_r + src[ir+cn+1] * coeff_g + src[ir+cn+2] * coeff_b + 8192) >> 14; + dst_u8[jr + 2] = (src[ir+cn2] * coeff_r + src[ir+cn2+1] * coeff_g + src[ir+cn2+2] * coeff_b + 8192) >> 14; + dst_u8[jr + 3] = (src[ir+cn3] * coeff_r + src[ir+cn3+1] * coeff_g + src[ir+cn3+2] * coeff_b + 8192) >> 14; + } + for (; x < w; ++x, ++jr, ir+=cn) { + dst_u8[jr] = (src[ir] * coeff_r + src[ir+1] * coeff_g + src[ir+2] * coeff_b + 8192) >> 14; + } } }, // derived from CCV library resample: function(src, dst, nw, nh) { var h=src.rows,w=src.cols; if (h > nh && w > nw) { + dst.resize(nw, nh, src.channel); // using the fast alternative (fix point scale, 0x100 to avoid overflow) if (src.type&jsfeat.U8_t && dst.type&jsfeat.U8_t && h * w / (nh * nw) < 0x100) { _resample_u8(src, dst, nw, nh); @@ -415,6 +431,8 @@ var data_u8 = src.data; var hold=0; + dst.resize(w, h, src.channel); + // first pass // no need to scale //data_u8 = src.data; @@ -572,6 +590,9 @@ var half_kernel = kernel_size >> 1; var w = src.cols, h = src.rows; var data_type = src.type, is_u8 = data_type&jsfeat.U8_t; + + dst.resize(w, h, src.channel); + var src_d = src.data, dst_d = dst.data; var buf,filter,buf_sz=(kernel_size + Math.max(h, w))|0; @@ -600,6 +621,79 @@ jsfeat.cache.put_buffer(buf_node); jsfeat.cache.put_buffer(filt_node); }, + hough_transform: function( img, rho_res, theta_res, threshold ) { + var image = img.data; + + var width = img.cols; + var height = img.rows; + var step = width; + + var min_theta = 0.0; + var max_theta = Math.PI; + + var numangle = Math.round((max_theta - min_theta) / theta_res); + var numrho = Math.round(((width + height) * 2 + 1) / rho_res); + var irho = 1.0 / rho_res; + + var accum = new Int32Array((numangle+2) * (numrho+2)); //typed arrays are initialized to 0 + var tabSin = new Float32Array(numangle); + var tabCos = new Float32Array(numangle); + + var n=0; + var ang = min_theta; + for(; n < numangle; n++ ) { + tabSin[n] = Math.sin(ang) * irho; + tabCos[n] = Math.cos(ang) * irho; + ang += theta_res + } + + // stage 1. fill accumulator + for( var i = 0; i < height; i++ ) { + for( var j = 0; j < width; j++ ) { + if( image[i * step + j] != 0 ) { + //console.log(r, (n+1) * (numrho+2) + r+1, tabCos[n], tabSin[n]); + for(var n = 0; n < numangle; n++ ) { + var r = Math.round( j * tabCos[n] + i * tabSin[n] ); + r += (numrho - 1) / 2; + accum[(n+1) * (numrho+2) + r+1] += 1; + } + } + } + } + + // stage 2. find local maximums + //TODO: Consider making a vector class that uses typed arrays + var _sort_buf = new Array(); + for(var r = 0; r < numrho; r++ ) { + for(var n = 0; n < numangle; n++ ) { + var base = (n+1) * (numrho+2) + r+1; + if( accum[base] > threshold && + accum[base] > accum[base - 1] && accum[base] >= accum[base + 1] && + accum[base] > accum[base - numrho - 2] && accum[base] >= accum[base + numrho + 2] ) { + _sort_buf.push(base); + } + } + } + + // stage 3. sort the detected lines by accumulator value + _sort_buf.sort(function(l1, l2) { + return accum[l1] > accum[l2] || (accum[l1] == accum[l2] && l1 < l2); + }); + + // stage 4. store the first min(total,linesMax) lines to the output buffer + var linesMax = Math.min(numangle*numrho, _sort_buf.length); + var scale = 1.0 / (numrho+2); + var lines = new Array(); + for( var i = 0; i < linesMax; i++ ) { + var idx = _sort_buf[i]; + var n = Math.floor(idx*scale) - 1; + var r = idx - (n+1)*(numrho+2) - 1; + var lrho = (r - (numrho - 1)*0.5) * rho_res; + var langle = n * theta_res; + lines.push([lrho, langle]); + } + return lines; + }, // assume we always need it for u8 image pyrdown: function(src, dst, sx, sy) { // this is needed for bbf @@ -610,6 +704,9 @@ var w2 = w >> 1, h2 = h >> 1; var _w2 = w2 - (sx << 1), _h2 = h2 - (sy << 1); var x=0,y=0,sptr=sx+sy*w,sline=0,dptr=0,dline=0; + + dst.resize(w2, h2, src.channel); + var src_d = src.data, dst_d = dst.data; for(y = 0; y < _h2; ++y) { @@ -636,6 +733,9 @@ var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; var srow0=0,srow1=0,srow2=0,drow=0; var trow0,trow1; + + dst.resize(w, h, 2); // 2 channel output gx, gy + var img = src.data, gxgy=dst.data; var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); @@ -702,6 +802,9 @@ var dstep = w<<1,x=0,y=0,x1=0,a,b,c,d,e,f; var srow0=0,srow1=0,srow2=0,drow=0; var trow0,trow1; + + dst.resize(w, h, 2); // 2 channel output gx, gy + var img = src.data, gxgy=dst.data; var buf0_node = jsfeat.cache.get_buffer((w+2)<<2); @@ -868,7 +971,11 @@ } }, equalize_histogram: function(src, dst) { - var w=src.cols,h=src.rows,src_d=src.data,dst_d=dst.data,size=w*h; + var w=src.cols,h=src.rows,src_d=src.data; + + dst.resize(w, h, src.channel); + + var dst_d=dst.data,size=w*h; var i=0,prev=0,hist0,norm; var hist0_node = jsfeat.cache.get_buffer(256<<2); @@ -891,7 +998,11 @@ }, canny: function(src, dst, low_thresh, high_thresh) { - var w=src.cols,h=src.rows,src_d=src.data,dst_d=dst.data; + var w=src.cols,h=src.rows,src_d=src.data; + + dst.resize(w, h, src.channel); + + var dst_d=dst.data; var i=0,j=0,grad=0,w2=w<<1,_grad=0,suppress=0,f=0,x=0,y=0,s=0; var tg22x=0,tg67x=0; diff --git a/src/jsfeat_struct.js b/src/jsfeat_struct.js index 4d7aaf0..c7cbbcc 100755 --- a/src/jsfeat_struct.js +++ b/src/jsfeat_struct.js @@ -43,6 +43,12 @@ } })(); + // color conversion + var COLOR_RGBA2GRAY = 0; + var COLOR_RGB2GRAY = 1; + var COLOR_BGRA2GRAY = 2; + var COLOR_BGR2GRAY = 3; + // box blur option var BOX_BLUR_NOSCALE = 0x01; // svd options @@ -105,9 +111,9 @@ } matrix_t.prototype.resize = function(c, r, ch) { if (typeof ch === "undefined") { ch = this.channel; } - // change buffer only if new size doesnt fit - var new_size = (c * ch) * r; - if(new_size > this.rows*this.cols*this.channel) { + // relocate buffer only if new size doesnt fit + var new_size = (c * get_data_type_size(this.type) * ch) * r; + if(new_size > this.buffer.size) { this.cols = c; this.rows = r; this.channel = ch; @@ -159,8 +165,8 @@ return pyramid_t; })(); - var point2d_t = (function () { - function point2d_t(x,y,score,level,angle) { + var keypoint_t = (function () { + function keypoint_t(x,y,score,level,angle) { if (typeof x === "undefined") { x=0; } if (typeof y === "undefined") { y=0; } if (typeof score === "undefined") { score=0; } @@ -173,7 +179,7 @@ this.level = level; this.angle = angle; } - return point2d_t; + return keypoint_t; })(); @@ -203,6 +209,12 @@ global.EPSILON = EPSILON; global.FLT_MIN = FLT_MIN; + // color convert + global.COLOR_RGBA2GRAY = COLOR_RGBA2GRAY; + global.COLOR_RGB2GRAY = COLOR_RGB2GRAY; + global.COLOR_BGRA2GRAY = COLOR_BGRA2GRAY; + global.COLOR_BGR2GRAY = COLOR_BGR2GRAY; + // options global.BOX_BLUR_NOSCALE = BOX_BLUR_NOSCALE; global.SVD_U_T = SVD_U_T; @@ -215,6 +227,6 @@ global.data_t = data_t; global.matrix_t = matrix_t; global.pyramid_t = pyramid_t; - global.point2d_t = point2d_t; + global.keypoint_t = keypoint_t; })(jsfeat); diff --git a/src/jsfeat_yape06.js b/src/jsfeat_yape06.js index 55664dd..205266d 100755 --- a/src/jsfeat_yape06.js +++ b/src/jsfeat_yape06.js @@ -12,11 +12,11 @@ var yape06 = (function() { - var compute_laplacian = function(src, dst, w, h, Dxx, Dyy) { - var y=0,x=0,yrow=(Dxx*w+Dxx)|0,row=yrow; + var compute_laplacian = function(src, dst, w, h, Dxx, Dyy, sx,sy, ex,ey) { + var y=0,x=0,yrow=(sy*w+sx)|0,row=yrow; - for(y = Dxx; y < h - Dxx; ++y, yrow+=w, row = yrow) { - for(x = Dxx; x < w - Dxx; ++x, ++row) { + for(y = sy; y < ey; ++y, yrow+=w, row = yrow) { + for(x = sx; x < ex; ++x, ++row) { dst[row] = -4 * src[row] + src[row+Dxx] + src[row-Dxx] + src[row+Dyy] + src[row-Dyy]; } } @@ -36,7 +36,8 @@ laplacian_threshold: 30, min_eigen_value_threshold: 25, - detect: function(src, points) { + detect: function(src, points, border) { + if (typeof border === "undefined") { border = 5; } var x=0,y=0; var w=src.cols, h=src.rows, srd_d=src.data; var Dxx = 5, Dyy = (5 * w)|0; @@ -48,13 +49,18 @@ var lap_thresh = this.laplacian_threshold; var eigen_thresh = this.min_eigen_value_threshold; + var sx = Math.max(5, border)|0; + var sy = Math.max(3, border)|0; + var ex = Math.min(w-5, w-border)|0; + var ey = Math.min(h-3, h-border)|0; + x = w*h; while(--x>=0) {laplacian[x]=0;} - compute_laplacian(srd_d, laplacian, w, h, Dxx, Dyy); + compute_laplacian(srd_d, laplacian, w, h, Dxx, Dyy, sx,sy, ex,ey); - row = (Dxx*w+Dxx)|0; - for(y = Dxx; y < h-Dxx; ++y, row += w) { - for(x = Dxx, rowx=row; x < w-Dxx; ++x, ++rowx) { + row = (sy*w+sx)|0; + for(y = sy; y < ey; ++y, row += w) { + for(x = sx, rowx=row; x < ex; ++x, ++rowx) { lv = laplacian[rowx]; if ((lv < -lap_thresh &&