@inovitas/infra3dapi 1.7.0 → 1.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/235.infra3dapi.js +2 -0
- package/235.infra3dapi.js.map +1 -0
- package/287.infra3dapi.js +2 -0
- package/287.infra3dapi.js.map +1 -0
- package/732.infra3dapi.js +2 -0
- package/732.infra3dapi.js.map +1 -0
- package/{12.infra3dapi.js → 757.infra3dapi.js} +2 -1
- package/757.infra3dapi.js.map +1 -0
- package/README.md +357 -330
- package/infra3dapi.d.ts +7 -4
- package/infra3dapi.js +2 -2
- package/{2bc1d70c511b58108958.gif → infra3dapi.js.map} +0 -0
- package/licenses.txt +23 -353
- package/package.json +6 -2
- package/005403bc8e5f26788284.jpg +0 -0
- package/1f77029fdd773d10ddab.gif +0 -0
- package/274.infra3dapi.js +0 -1
- package/505.infra3dapi.js +0 -1
- package/6a3d99a3d2dc80491364.jpg +0 -0
- package/80.infra3dapi.js +0 -1
- package/81e9296c232fd0e0c86e.jpg +0 -0
- package/c8593183238821a27cbc.gif +0 -0
- package/e970b398393900ae343f.gif +0 -0
- package/ecc862ea04d3c481e631.gif +0 -0
|
@@ -1 +1,2 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("infra3dapi",[],e):"object"==typeof exports?exports.infra3dapi=e():t.infra3dapi=e()}(self,(()=>(()=>{"use strict";var t,e,r={7012:(t,e,r)=>{var a=r(17505),o=r.n(a);const h=self;class s{constructor(){this.offsetConstant=6,this.minimumPixelDistance=5,this.NCCCutoff=.75,this.alphaCutoff=1e-6,this.minAffParsNorm=.15,this.minRadParsNorm=1.5,this.omegaIterationStop=1.01,this.mue=.1,this.alphaMin=1e-9,this.autoradio=1,this.searchWindowPosQuality=0,this.onprogress=null,this._createFilterMatrix=function(){let t=[],e=[];t.push([-3,0,3],[-10,0,10],[-3,0,3]),e.push([-3,-10,-3],[0,0,0],[3,10,3]);let r={};return r.filterX=t,r.filterY=e,r},this._obtainGradient=function(t,e){let r=[],a=[];for(let o=0;o<t.length;++o){let h=Math.floor(o/e),s=Math.floor(o%e);if(0!=s&&s!=e-1&&0!=h&&h!=e-1){let h=(t[o+1]-t[o-1])/2;r.push(h);let s=(t[o+e]-t[o-e])/2;a.push(s)}}let o={};return o.gradientX=r,o.gradientY=a,o},this._interpolate2D=function(t,e,r,a){if("bilinear"==a){let a=t[Math.floor(e[1])][Math.floor(e[0])],o=t[Math.floor(e[1])][Math.floor(e[0])+1],h=t[Math.floor(e[1])+1][Math.floor(e[0])],s=t[Math.floor(e[1])+1][Math.floor(e[0])+1];return a=r[0]*a+r[1],o=r[0]*o+r[1],h=r[0]*h+r[1],s=r[0]*s+r[1],(e[0]-Math.floor(e[0]))*(e[1]-Math.floor(e[1]))*s+(1-e[0]+Math.floor(e[0]))*(e[1]-Math.floor(e[1]))*h+(e[0]-Math.floor(e[0]))*(1-e[1]+Math.floor(e[1]))*o+(1-e[0]+Math.floor(e[0]))*(1-e[1]+Math.floor(e[1]))*a}if("lanczos2"==a){(p=[]).push(Math.floor(e[0])-1),p.push(p[0]+1),p.push(p[0]+2),p.push(p[0]+3),(d=[]).push(Math.floor(e[1])-1),d.push(d[0]+1),d.push(d[0]+2),d.push(d[0]+3);for(var o=[],h=0;h<4;++h)if((M=Math.abs(e[0]-p[h]))>=2)o.push(0);else if(0==M)o.push(1);else{if(!(M<2&&M>=0))return 0;var s=Math.sin(Math.PI*M)/(Math.PI*M)*Math.sin(Math.PI*M/2)/(Math.PI*M/2);o.push(s)}for(var i=[],n=0;n<4;++n){var l=0;for(h=0;h<4;++h)l+=o[h]*(r[0]*t[d[n]][p[h]]+r[1]);i.push(l)}var f=[];for(h=0;h<4;++h)if((M=Math.abs(e[1]-d[h]))>=2)f.push(0);else if(0==M)f.push(1);else{if(!(M<2&&M>=0))return 0;s=Math.sin(Math.PI*M)/(Math.PI*M)*Math.sin(Math.PI*M/2)/(Math.PI*M/2),f.push(s)}var u=0;for(n=0;n<4;++n)u+=f[n]*i[n];return u}if("lanczos3"==a){var p,d;for((p=[]).push(Math.floor(e[0])-2),p.push(p[0]+1),p.push(p[0]+2),p.push(p[0]+3),p.push(p[0]+4),p.push(p[0]+5),(d=[]).push(Math.floor(e[1])-2),d.push(d[0]+1),d.push(d[0]+2),d.push(d[0]+3),d.push(d[0]+4),d.push(d[0]+5),o=[],h=0;h<6;++h)if((M=Math.abs(e[0]-p[h]))>=2)o.push(0);else if(0==M)o.push(1);else{if(!(M<2&&M>=0))return 0;s=Math.sin(Math.PI*M)/(Math.PI*M)*Math.sin(Math.PI*M/3)/(Math.PI*M/3),o.push(s)}for(i=[],n=0;n<6;++n){for(l=0,h=0;h<6;++h)l+=o[h]*(r[0]*t[d[n]][p[h]]+r[1]);i.push(l)}for(f=[],h=0;h<6;++h){var M;if((M=Math.abs(e[1]-d[h]))>=2)f.push(0);else if(0==M)f.push(1);else{if(!(M<2&&M>=0))return 0;s=Math.sin(Math.PI*M)/(Math.PI*M)*Math.sin(Math.PI*M/3)/(Math.PI*M/3),f.push(s)}}for(u=0,n=0;n<6;++n)u+=f[n]*i[n];return u}},this._fillAMatrix=function(t,e,r,a,o){let h=[],s=0;for(let o=-Math.floor(a/2);o<=Math.floor(a/2);++o)for(let i=-Math.floor(a/2);i<=Math.floor(a/2);++i){let a=[i,0],n=[o,0],l=[0,i],f=[0,o],u=[1,0],p=[0,1],d=e[s]*a[0]+r[s]*a[1],M=e[s]*n[0]+r[s]*n[1],g=e[s]*l[0]+r[s]*l[1],c=e[s]*f[0]+r[s]*f[1],m=e[s]*u[0]+r[s]*u[1],v=e[s]*p[0]+r[s]*p[1];h.push([]);let C=t[s],N=1;h[s].push(d,M,g,c,m,v,C,N),s++}return h},this._Adjustment=function(t,e,r,a){let h=0,s=0,i=0,n=0,l=[Math.floor(t.length/2),Math.floor(t[0].length/2)],f=[a[0],a[1]],u=[1,0,0,1,l[1],l[0],1,0],p=[1,0,0,1,f[1],f[0],1,0],d=this._generatePatch(t,u,r),M=this._Wallisfilter(d);if(0==M)return 0;let g=p,c=g,m=1e10,v=0,C=0,N=0,P=[],_=[],I=[],b=o().diag([1,1,1,1,1,1,1,1]);for(;0==h;){this.onprogress&&this.onprogress();let t=this._generatePatch(e,g,r+2);if(0==t)return 0;let a=this._obtainGradient(t,r+2),l=a.gradientX,f=a.gradientY,u=this._generatePatch(e,g,r),d=this._Wallisfilter(u);if(0==d)return 0;0==s&&0==s&&(m=o().sub(M,d),N=this._NormCrossCor(M,d)),P=this._fillAMatrix(d,l,f,r,i),_=o().dot(o().transpose(P),P),0==i?(b[6][6]=1e32,b[7][7]=1e32):(b[6][6]=1,b[7][7]=1),_=o().add(_,b),I=o().dot(o().transpose(P),m);let O=o().solve(_,I),R=o().dot(P,O),k=o().dot(R,m),W=o().sub(R,m);v=C,C=.5*o().dot(W,W);let U=this._Linesearch(g,O,m,k,this.alphaMin,this.mue,M,d,e,r);if(0==U)return 0;var w=U.alphaLength;let T=U.xNew,z=U.rNew;N=U.NCC;var x=U.searchUpdate;c=g,g=T,m=z,o().norm2(R),o().norm2(m);let Q=Math.sqrt(C/(Math.pow(r,2)-8)),X=o().inv(_);for(var S=[],y=0;y<8;++y)S.push(Math.sqrt(Q*X[y][y]));let Y=[],B=[];for(y=0;y<8;++y){Y.push([]);let t=X[y][y];for(var D=0;D<8;++D){let e=X[D][D];Y[y].push(X[y][D]/Math.sqrt(t*e))}}let F=7;for(y=0;y<7;++y){for(D=1;D<F;++D)Y[y][D]>.99&&y!=D?Y[y][D]>Y[D][y]?B.push(y,D,1e20,Y[y][D]):B.push(D,y,1e20,Y[D][y]):Y[y][D]>.9&&y!=D?Y[y][D]>Y[D][y]?B.push(y,D,10/Y[y][D],Y[y][D]):B.push(D,y,10/Y[D][y],Y[D][y]):Y[y][D]>.7&&y!=D?Y[y][D]>Y[D][y]?B.push(y,D,5/Y[y][D],Y[y][D]):B.push(D,y,5/Y[D][y],Y[D][y]):Y[y][D]>.5&&y!=D?Y[y][D]>Y[D][y]?B.push(y,D,2/Y[y][D],Y[y][D]):B.push(D,y,2/Y[D][y],Y[D][y]):Y[y][D]>.3&&y!=D&&(Y[y][D]>Y[D][y]?B.push(y,D,1/Y[y][D],Y[y][D]):B.push(D,y,1/Y[D][y],Y[D][y]));--F}if(s++,(s>=50||w<this.alphaMin)&&(h=2),s>0&&v/C<this.omegaIterationStop&&v/C>1/this.omegaIterationStop)if(1==this.autoradio){if(0==i&&(n=s),i=1,v/C<this.omegaIterationStop&&v/C>1/this.omegaIterationStop&&s>n){let t=[];for(y=0;y<8;++y){let e=o().sub(g,p);t.push(Math.abs(e[y]/S[y]))}var j=o().getBlock(S,[0,0],[5,0]),A=o().getBlock(S,[6,0],[7,0]),L=o().norm2(j),q=o().norm2(A);h=L>this.minAffParsNorm||q>this.minRadParsNorm?2:1}}else v/C<this.omegaIterationStop&&v/C>1/this.omegaIterationStop&&(h=1)}if(0==h||2==h)return 0;if(1==h){let t={};return t.alphaLength=w,t.x=g,t.r=m,t.NCC=N,t.searchUpdate=x,t.ParsStdDev=S,t.AffStdDev=j,t.RadStdDev=A,t.NormAffStdDev=L,t.NormRadStdDev=q,t}},this._Linesearch=function(t,e,r,a,h,s,i,n,l,f){let u=.5*o().dot(r,r),p=1;for(;Math.abs(p)>=this.alphaMin;){let r=o().add(t,o().dot(p,e)),h=this._generatePatch(l,r,f);var d=this._Wallisfilter(h);if(0==d)return 0;let s=o().sub(i,d);var M=this._NormCrossCor(i,d);if(.5*o().dot(s,s)<.1+u+this.mue*p*a)return(g={}).alphaLength=p,g.Change=o().dot(p,e),g.xNew=r,g.rNew=s,g.NCC=M,g.searchUpdate=d,g;p/=2}var g;return(g={alphaLength:0}).xNew=o().add(t,e),g.rNew=r,g.NCC=M,g.searchUpdate=d,g},this._NormCrossCor=function(t,e){let r=t.length,a=(Math.sqrt(r),0),o=0,h=0,s=0;for(var i=0;i<r;++i)a+=t[i],o+=e[i];for(a/=r,o/=r,i=0;i<r;++i)h+=Math.pow(t[i]-a,2),s+=Math.pow(e[i]-o,2);h=Math.sqrt(h/r),s=Math.sqrt(s/r);let n=0;for(i=0;i<r;++i)n+=(t[i]-a)*(e[i]-o)/(h*s);return n*=1/r,n}}runLsm(t,e){let r=(this._IntegralImage(t),this._IntegralImage(e),[Math.floor(t.length/2),Math.floor(t[0].length/2)]),a=[1,0,0,1,r[1],r[0],1,0],o=this._generatePatch(t,a,15),h=this._Wallisfilter(o),s=[],i=[];for(var n=this.offsetConstant;n<e[0].length-(15+this.offsetConstant);++n){i=[Math.floor(e.length/2),n+Math.floor(7.5)],a=[1,0,0,1,i[1],i[0],1,0];let t=this._generatePatch(e,a,15),r=this._Wallisfilter(t);s.push(this._NormCrossCor(h,r))}let l=[],f=0,u=0,p=-1,d=this.offsetConstant+Math.floor(7.5);for(n=0;n<s.length;++n)s[n]>this.NCCCutoff&&s[n]>f?(f=s[n],p=n+d,u=this.minimumPixelDistance):u>0&&(--u,0==u&&(l.push(i[0],p),p=-1,f=0));let M=[];for(n=0;n<l.length;n+=2){a=[l[n],l[n+1]];let r=this._Adjustment(t,e,15,a);if(0!=r){var g={};g.alphaLength=r.alphaLength,g.x=r.x,g.r=r.r,g.NCC=r.NCC,g.searchUpdate=r.searchUpdate,g.ParsStdDev=r.ParsStdDev,g.NormAffStdDev=r.NormAffStdDev,g.NormRadStdDev=r.NormRadStdDev,M.push(g)}}let c=this.NCCCutoff,m=-1,v=this.minAffParsNorm,C=this.minRadParsNorm,N=e[0].length/2,P=1/0;for(n=0;n<M.length;++n)if(this.searchWindowPosQuality>.7){var _=Math.abs(N-M[n].x[4]);_<P&&(m=n,P=_)}else M[n].NCC>c&&M[n].alphaLength>this.alphaCutoff&&M[n].NormAffStdDev<v&&M[n].NormRadStdDev<C&&(m=n,c=M[n].NCC,v=M[n].NormAffStdDev,C=M[n].NormRadStdDev,P=_);return m>-1?[M[m].x[4],M[m].x[5]]:(M.push(g),null)}_Wallisfilter(t){let e=[],r=0,a=0;for(var o=0;o<t.length;++o)r+=t[o];for(r/=t.length,o=0;o<t.length;++o)a+=Math.pow(t[o]-r,2);a=Math.sqrt(a/t.length);let h=81/(.9*a+90*(1-.9)),s=127.5+(0-h)*r;for(let r=0;r<t.length;++r){let a=t[r]*h+s;e[r]=a>255?255:a<0?0:a}return e}_IntegralImage(t){let e=[],r=[];for(let a=0;a<t.length;++a){e.push([]),r.push([]);for(let o=0;o<t[0].length;++o){let h=0,s=0,i=0;o>0&&(h=e[a][o-1]),a>0&&(s=e[a-1][o]),o>0&&a>0&&(i=e[a-1][o-1]);let n=t[a][o]+h+s-i;e[a].push(n),r[a].push(Math.pow(n,2))}}let a={};return a.Integral=e,a.IntegralSq=r,a}_generatePatch(t,e,r){let a=[],h=[[e[0],e[1]],[e[2],e[3]]],s=[[e[4]],[e[5]]],i=[e[6],e[7]],n=0;for(let e=-Math.floor(r/2);e<=Math.floor(r/2)&&1!=n;++e)for(let l=-Math.floor(r/2);l<=Math.floor(r/2);++l){let r=[[l],[e]],f=o().add(o().dot(h,r),s);if(f[1]<this.offsetConstant||f[1]>t.length-this.offsetConstant||f[0]<this.offsetConstant||f[0]>t[0].length-this.offsetConstant){n=1;break}let u=this._interpolate2D(t,f,i,"lanczos2");a.push(u)}return 0==n?a:0}}h.onmessage=t=>{if(t.data.topic&&"run"===t.data.topic){var e=new s;t.data.searchwindowposquality&&(e.searchWindowPosQuality=t.data.searchwindowposquality),t.data.NCC_Threshold&&(e.NCCCutoff=t.data.NCC_Threshold),t.data.adjustRadiometry&&(e.autoradio=1);var r=e.runLsm(t.data.template,t.data.searchwindow);h.postMessage(r)}}}},a={};function o(t){var e=a[t];if(void 0!==e)return e.exports;var h=a[t]={exports:{}};return r[t](h,h.exports,o),h.exports}return o.m=r,o.x=()=>{var t=o.O(void 0,[505],(()=>o(7012)));return o.O(t)},t=[],o.O=(e,r,a,h)=>{if(!r){var s=1/0;for(f=0;f<t.length;f++){r=t[f][0],a=t[f][1],h=t[f][2];for(var i=!0,n=0;n<r.length;n++)(!1&h||s>=h)&&Object.keys(o.O).every((t=>o.O[t](r[n])))?r.splice(n--,1):(i=!1,h<s&&(s=h));if(i){t.splice(f--,1);var l=a();void 0!==l&&(e=l)}}return e}h=h||0;for(var f=t.length;f>0&&t[f-1][2]>h;f--)t[f]=t[f-1];t[f]=[r,a,h]},o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var r in e)o.o(e,r)&&!o.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},o.f={},o.e=t=>Promise.all(Object.keys(o.f).reduce(((e,r)=>(o.f[r](t,e),e)),[])),o.u=t=>t+".infra3dapi.js",o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.p="",(()=>{var t={12:1};o.f.i=(e,r)=>{t[e]||importScripts(o.p+o.u(e))};var e=self.webpackChunkinfra3dapi=self.webpackChunkinfra3dapi||[],r=e.push.bind(e);e.push=e=>{var a=e[0],h=e[1],s=e[2];for(var i in h)o.o(h,i)&&(o.m[i]=h[i]);for(s&&s(o);a.length;)t[a.pop()]=1;r(e)}})(),e=o.x,o.x=()=>o.e(505).then(e),o.x()})()));
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("infra3dapi",[],e):"object"==typeof exports?exports.infra3dapi=e():t.infra3dapi=e()}(self,()=>(()=>{"use strict";var t,e,r={53757:(t,e,r)=>{var a=r(21732),o=r.n(a);const h=self;class s{constructor(){this.offsetConstant=6,this.minimumPixelDistance=5,this.NCCCutoff=.75,this.alphaCutoff=1e-6,this.minAffParsNorm=.15,this.minRadParsNorm=1.5,this.omegaIterationStop=1.01,this.mue=.1,this.alphaMin=1e-9,this.autoradio=1,this.searchWindowPosQuality=0,this.onprogress=null,this._createFilterMatrix=function(){let t=[],e=[];t.push([-3,0,3],[-10,0,10],[-3,0,3]),e.push([-3,-10,-3],[0,0,0],[3,10,3]);let r={};return r.filterX=t,r.filterY=e,r},this._obtainGradient=function(t,e){let r=[],a=[];for(let o=0;o<t.length;++o){let h=Math.floor(o/e),s=Math.floor(o%e);if(0!=s&&s!=e-1&&0!=h&&h!=e-1){let h=(t[o+1]-t[o-1])/2;r.push(h);let s=(t[o+e]-t[o-e])/2;a.push(s)}}let o={};return o.gradientX=r,o.gradientY=a,o},this._interpolate2D=function(t,e,r,a){if("bilinear"==a){let a=t[Math.floor(e[1])][Math.floor(e[0])],o=t[Math.floor(e[1])][Math.floor(e[0])+1],h=t[Math.floor(e[1])+1][Math.floor(e[0])],s=t[Math.floor(e[1])+1][Math.floor(e[0])+1];return a=r[0]*a+r[1],o=r[0]*o+r[1],h=r[0]*h+r[1],s=r[0]*s+r[1],(e[0]-Math.floor(e[0]))*(e[1]-Math.floor(e[1]))*s+(1-e[0]+Math.floor(e[0]))*(e[1]-Math.floor(e[1]))*h+(e[0]-Math.floor(e[0]))*(1-e[1]+Math.floor(e[1]))*o+(1-e[0]+Math.floor(e[0]))*(1-e[1]+Math.floor(e[1]))*a}if("lanczos2"==a){(p=[]).push(Math.floor(e[0])-1),p.push(p[0]+1),p.push(p[0]+2),p.push(p[0]+3),(d=[]).push(Math.floor(e[1])-1),d.push(d[0]+1),d.push(d[0]+2),d.push(d[0]+3);for(var o=[],h=0;h<4;++h)if((M=Math.abs(e[0]-p[h]))>=2)o.push(0);else if(0==M)o.push(1);else{if(!(M<2&&M>=0))return 0;var s=Math.sin(Math.PI*M)/(Math.PI*M)*Math.sin(Math.PI*M/2)/(Math.PI*M/2);o.push(s)}for(var i=[],n=0;n<4;++n){var l=0;for(h=0;h<4;++h)l+=o[h]*(r[0]*t[d[n]][p[h]]+r[1]);i.push(l)}var f=[];for(h=0;h<4;++h)if((M=Math.abs(e[1]-d[h]))>=2)f.push(0);else if(0==M)f.push(1);else{if(!(M<2&&M>=0))return 0;s=Math.sin(Math.PI*M)/(Math.PI*M)*Math.sin(Math.PI*M/2)/(Math.PI*M/2),f.push(s)}var u=0;for(n=0;n<4;++n)u+=f[n]*i[n];return u}if("lanczos3"==a){var p,d;for((p=[]).push(Math.floor(e[0])-2),p.push(p[0]+1),p.push(p[0]+2),p.push(p[0]+3),p.push(p[0]+4),p.push(p[0]+5),(d=[]).push(Math.floor(e[1])-2),d.push(d[0]+1),d.push(d[0]+2),d.push(d[0]+3),d.push(d[0]+4),d.push(d[0]+5),o=[],h=0;h<6;++h)if((M=Math.abs(e[0]-p[h]))>=2)o.push(0);else if(0==M)o.push(1);else{if(!(M<2&&M>=0))return 0;s=Math.sin(Math.PI*M)/(Math.PI*M)*Math.sin(Math.PI*M/3)/(Math.PI*M/3),o.push(s)}for(i=[],n=0;n<6;++n){for(l=0,h=0;h<6;++h)l+=o[h]*(r[0]*t[d[n]][p[h]]+r[1]);i.push(l)}for(f=[],h=0;h<6;++h){var M;if((M=Math.abs(e[1]-d[h]))>=2)f.push(0);else if(0==M)f.push(1);else{if(!(M<2&&M>=0))return 0;s=Math.sin(Math.PI*M)/(Math.PI*M)*Math.sin(Math.PI*M/3)/(Math.PI*M/3),f.push(s)}}for(u=0,n=0;n<6;++n)u+=f[n]*i[n];return u}},this._fillAMatrix=function(t,e,r,a,o){let h=[],s=0;for(let o=-Math.floor(a/2);o<=Math.floor(a/2);++o)for(let i=-Math.floor(a/2);i<=Math.floor(a/2);++i){let a=[i,0],n=[o,0],l=[0,i],f=[0,o],u=[1,0],p=[0,1],d=e[s]*a[0]+r[s]*a[1],M=e[s]*n[0]+r[s]*n[1],g=e[s]*l[0]+r[s]*l[1],c=e[s]*f[0]+r[s]*f[1],m=e[s]*u[0]+r[s]*u[1],v=e[s]*p[0]+r[s]*p[1];h.push([]);let C=t[s],N=1;h[s].push(d,M,g,c,m,v,C,N),s++}return h},this._Adjustment=function(t,e,r,a){let h=0,s=0,i=0,n=0,l=[Math.floor(t.length/2),Math.floor(t[0].length/2)],f=[a[0],a[1]],u=[1,0,0,1,l[1],l[0],1,0],p=[1,0,0,1,f[1],f[0],1,0],d=this._generatePatch(t,u,r),M=this._Wallisfilter(d);if(0==M)return 0;let g=p,c=g,m=1e10,v=0,C=0,N=0,P=[],_=[],I=[],b=o().diag([1,1,1,1,1,1,1,1]);for(;0==h;){this.onprogress&&this.onprogress();let t=this._generatePatch(e,g,r+2);if(0==t)return 0;let a=this._obtainGradient(t,r+2),l=a.gradientX,f=a.gradientY,u=this._generatePatch(e,g,r),d=this._Wallisfilter(u);if(0==d)return 0;0==s&&0==s&&(m=o().sub(M,d),N=this._NormCrossCor(M,d)),P=this._fillAMatrix(d,l,f,r,i),_=o().dot(o().transpose(P),P),0==i?(b[6][6]=1e32,b[7][7]=1e32):(b[6][6]=1,b[7][7]=1),_=o().add(_,b),I=o().dot(o().transpose(P),m);let O=o().solve(_,I),R=o().dot(P,O),k=o().dot(R,m),W=o().sub(R,m);v=C,C=.5*o().dot(W,W);let U=this._Linesearch(g,O,m,k,this.alphaMin,this.mue,M,d,e,r);if(0==U)return 0;var w=U.alphaLength;let T=U.xNew,z=U.rNew;N=U.NCC;var x=U.searchUpdate;c=g,g=T,m=z,o().norm2(R),o().norm2(m);let Q=Math.sqrt(C/(Math.pow(r,2)-8)),X=o().inv(_);for(var S=[],y=0;y<8;++y)S.push(Math.sqrt(Q*X[y][y]));let Y=[],B=[];for(y=0;y<8;++y){Y.push([]);let t=X[y][y];for(var D=0;D<8;++D){let e=X[D][D];Y[y].push(X[y][D]/Math.sqrt(t*e))}}let F=7;for(y=0;y<7;++y){for(D=1;D<F;++D)Y[y][D]>.99&&y!=D?Y[y][D]>Y[D][y]?B.push(y,D,1e20,Y[y][D]):B.push(D,y,1e20,Y[D][y]):Y[y][D]>.9&&y!=D?Y[y][D]>Y[D][y]?B.push(y,D,10/Y[y][D],Y[y][D]):B.push(D,y,10/Y[D][y],Y[D][y]):Y[y][D]>.7&&y!=D?Y[y][D]>Y[D][y]?B.push(y,D,5/Y[y][D],Y[y][D]):B.push(D,y,5/Y[D][y],Y[D][y]):Y[y][D]>.5&&y!=D?Y[y][D]>Y[D][y]?B.push(y,D,2/Y[y][D],Y[y][D]):B.push(D,y,2/Y[D][y],Y[D][y]):Y[y][D]>.3&&y!=D&&(Y[y][D]>Y[D][y]?B.push(y,D,1/Y[y][D],Y[y][D]):B.push(D,y,1/Y[D][y],Y[D][y]));--F}if(s++,(s>=50||w<this.alphaMin)&&(h=2),s>0&&v/C<this.omegaIterationStop&&v/C>1/this.omegaIterationStop)if(1==this.autoradio){if(0==i&&(n=s),i=1,v/C<this.omegaIterationStop&&v/C>1/this.omegaIterationStop&&s>n){let t=[];for(y=0;y<8;++y){let e=o().sub(g,p);t.push(Math.abs(e[y]/S[y]))}var j=o().getBlock(S,[0,0],[5,0]),A=o().getBlock(S,[6,0],[7,0]),L=o().norm2(j),q=o().norm2(A);h=L>this.minAffParsNorm||q>this.minRadParsNorm?2:1}}else v/C<this.omegaIterationStop&&v/C>1/this.omegaIterationStop&&(h=1)}if(0==h||2==h)return 0;if(1==h){let t={};return t.alphaLength=w,t.x=g,t.r=m,t.NCC=N,t.searchUpdate=x,t.ParsStdDev=S,t.AffStdDev=j,t.RadStdDev=A,t.NormAffStdDev=L,t.NormRadStdDev=q,t}},this._Linesearch=function(t,e,r,a,h,s,i,n,l,f){let u=.5*o().dot(r,r),p=1;for(;Math.abs(p)>=this.alphaMin;){let r=o().add(t,o().dot(p,e)),h=this._generatePatch(l,r,f);var d=this._Wallisfilter(h);if(0==d)return 0;let s=o().sub(i,d);var M=this._NormCrossCor(i,d);if(.5*o().dot(s,s)<.1+u+this.mue*p*a)return(g={}).alphaLength=p,g.Change=o().dot(p,e),g.xNew=r,g.rNew=s,g.NCC=M,g.searchUpdate=d,g;p/=2}var g;return(g={alphaLength:0}).xNew=o().add(t,e),g.rNew=r,g.NCC=M,g.searchUpdate=d,g},this._NormCrossCor=function(t,e){let r=t.length,a=(Math.sqrt(r),0),o=0,h=0,s=0;for(var i=0;i<r;++i)a+=t[i],o+=e[i];for(a/=r,o/=r,i=0;i<r;++i)h+=Math.pow(t[i]-a,2),s+=Math.pow(e[i]-o,2);h=Math.sqrt(h/r),s=Math.sqrt(s/r);let n=0;for(i=0;i<r;++i)n+=(t[i]-a)*(e[i]-o)/(h*s);return n*=1/r,n}}runLsm(t,e){let r=(this._IntegralImage(t),this._IntegralImage(e),[Math.floor(t.length/2),Math.floor(t[0].length/2)]),a=[1,0,0,1,r[1],r[0],1,0],o=this._generatePatch(t,a,15),h=this._Wallisfilter(o),s=[],i=[];for(var n=this.offsetConstant;n<e[0].length-(15+this.offsetConstant);++n){i=[Math.floor(e.length/2),n+Math.floor(7.5)],a=[1,0,0,1,i[1],i[0],1,0];let t=this._generatePatch(e,a,15),r=this._Wallisfilter(t);s.push(this._NormCrossCor(h,r))}let l=[],f=0,u=0,p=-1,d=this.offsetConstant+Math.floor(7.5);for(n=0;n<s.length;++n)s[n]>this.NCCCutoff&&s[n]>f?(f=s[n],p=n+d,u=this.minimumPixelDistance):u>0&&(--u,0==u&&(l.push(i[0],p),p=-1,f=0));let M=[];for(n=0;n<l.length;n+=2){a=[l[n],l[n+1]];let r=this._Adjustment(t,e,15,a);if(0!=r){var g={};g.alphaLength=r.alphaLength,g.x=r.x,g.r=r.r,g.NCC=r.NCC,g.searchUpdate=r.searchUpdate,g.ParsStdDev=r.ParsStdDev,g.NormAffStdDev=r.NormAffStdDev,g.NormRadStdDev=r.NormRadStdDev,M.push(g)}}let c=this.NCCCutoff,m=-1,v=this.minAffParsNorm,C=this.minRadParsNorm,N=e[0].length/2,P=1/0;for(n=0;n<M.length;++n)if(this.searchWindowPosQuality>.7){var _=Math.abs(N-M[n].x[4]);_<P&&(m=n,P=_)}else M[n].NCC>c&&M[n].alphaLength>this.alphaCutoff&&M[n].NormAffStdDev<v&&M[n].NormRadStdDev<C&&(m=n,c=M[n].NCC,v=M[n].NormAffStdDev,C=M[n].NormRadStdDev,P=_);return m>-1?[M[m].x[4],M[m].x[5]]:(M.push(g),null)}_Wallisfilter(t){let e=[],r=0,a=0;for(var o=0;o<t.length;++o)r+=t[o];for(r/=t.length,o=0;o<t.length;++o)a+=Math.pow(t[o]-r,2);a=Math.sqrt(a/t.length);let h=81/(.9*a+90*(1-.9)),s=127.5+(0-h)*r;for(let r=0;r<t.length;++r){let a=t[r]*h+s;e[r]=a>255?255:a<0?0:a}return e}_IntegralImage(t){let e=[],r=[];for(let a=0;a<t.length;++a){e.push([]),r.push([]);for(let o=0;o<t[0].length;++o){let h=0,s=0,i=0;o>0&&(h=e[a][o-1]),a>0&&(s=e[a-1][o]),o>0&&a>0&&(i=e[a-1][o-1]);let n=t[a][o]+h+s-i;e[a].push(n),r[a].push(Math.pow(n,2))}}let a={};return a.Integral=e,a.IntegralSq=r,a}_generatePatch(t,e,r){let a=[],h=[[e[0],e[1]],[e[2],e[3]]],s=[[e[4]],[e[5]]],i=[e[6],e[7]],n=0;for(let e=-Math.floor(r/2);e<=Math.floor(r/2)&&1!=n;++e)for(let l=-Math.floor(r/2);l<=Math.floor(r/2);++l){let r=[[l],[e]],f=o().add(o().dot(h,r),s);if(f[1]<this.offsetConstant||f[1]>t.length-this.offsetConstant||f[0]<this.offsetConstant||f[0]>t[0].length-this.offsetConstant){n=1;break}let u=this._interpolate2D(t,f,i,"lanczos2");a.push(u)}return 0==n?a:0}}h.onmessage=t=>{if(t.data.topic&&"run"===t.data.topic){var e=new s;t.data.searchwindowposquality&&(e.searchWindowPosQuality=t.data.searchwindowposquality),t.data.NCC_Threshold&&(e.NCCCutoff=t.data.NCC_Threshold),t.data.adjustRadiometry&&(e.autoradio=1);var r=e.runLsm(t.data.template,t.data.searchwindow);h.postMessage(r)}}}},a={};function o(t){var e=a[t];if(void 0!==e)return e.exports;var h=a[t]={exports:{}};return r[t](h,h.exports,o),h.exports}return o.m=r,o.x=()=>{var t=o.O(void 0,[732],()=>o(53757));return o.O(t)},t=[],o.O=(e,r,a,h)=>{if(!r){var s=1/0;for(f=0;f<t.length;f++){for(var[r,a,h]=t[f],i=!0,n=0;n<r.length;n++)(!1&h||s>=h)&&Object.keys(o.O).every(t=>o.O[t](r[n]))?r.splice(n--,1):(i=!1,h<s&&(s=h));if(i){t.splice(f--,1);var l=a();void 0!==l&&(e=l)}}return e}h=h||0;for(var f=t.length;f>0&&t[f-1][2]>h;f--)t[f]=t[f-1];t[f]=[r,a,h]},o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var r in e)o.o(e,r)&&!o.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},o.f={},o.e=t=>Promise.all(Object.keys(o.f).reduce((e,r)=>(o.f[r](t,e),e),[])),o.u=t=>t+".infra3dapi.js",o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.p="",(()=>{var t={757:1};o.f.i=(e,r)=>{t[e]||importScripts(o.p+o.u(e))};var e=self.webpackChunkinfra3dapi=self.webpackChunkinfra3dapi||[],r=e.push.bind(e);e.push=e=>{var[a,h,s]=e;for(var i in h)o.o(h,i)&&(o.m[i]=h[i]);for(s&&s(o);a.length;)t[a.pop()]=1;r(e)}})(),e=o.x,o.x=()=>o.e(732).then(e),o.x()})());
|
|
2
|
+
//# sourceMappingURL=757.infra3dapi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"757.infra3dapi.js","mappings":"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","sources":["webpack://infra3dapi/webpack/universalModuleDefinition","webpack://infra3dapi/webpack/runtime/chunk loaded","webpack://infra3dapi/webpack/runtime/startup chunk dependencies","webpack://infra3dapi/../../node_modules/.pnpm/@inovitas+infra3dsdk@5.7.8__072b9243df5efb1326f11ca9e611af5a/node_modules/@inovitas/infra3dsdk/dist/esm/mm/measure/lsm.worker.js","webpack://infra3dapi/webpack/bootstrap","webpack://infra3dapi/webpack/runtime/compat get default export","webpack://infra3dapi/webpack/runtime/define property getters","webpack://infra3dapi/webpack/runtime/ensure chunk","webpack://infra3dapi/webpack/runtime/get javascript chunk filename","webpack://infra3dapi/webpack/runtime/global","webpack://infra3dapi/webpack/runtime/hasOwnProperty shorthand","webpack://infra3dapi/webpack/runtime/publicPath","webpack://infra3dapi/webpack/runtime/importScripts chunk loading","webpack://infra3dapi/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"infra3dapi\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"infra3dapi\"] = factory();\n\telse\n\t\troot[\"infra3dapi\"] = factory();\n})(self, () => {\nreturn ","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn __webpack_require__.e(732).then(next);\n};","import numeric from \"numeric\";\nconst ctx = self;\n/**\n *\n * @class LsmWorker\n * @author Benjamin Loesch based on Code by David Novak\n */\nclass LSMWorker {\n constructor() {\n // Globale Variablen zur vereinfachten Nutzung\n // Variable zur Bestimmung des Patchversatzes\n this.offsetConstant = 6;\n // Die Minimale Distanz zwischen zwei Kreuzkorrelations-Peaks\n this.minimumPixelDistance = 5;\n // Tiefster Kreuzkorrelationswert der noch akzeptiert wird\n this.NCCCutoff = 0.75;\n // Tiefster alpha-wert nach der Ausgleichung der noch akzeptiert wird\n this.alphaCutoff = 1e-6;\n // Das minimum des Vektors der affinen transformations-standardabweichungen\n this.minAffParsNorm = 0.15;\n // Das gleiche einfach fuer die Radiometrie\n this.minRadParsNorm = 1.5;\n // Iterations-Stop Kriterium\n this.omegaIterationStop = 1.01;\n // Armijo parameter.\n this.mue = 0.1;\n // Kuerzeste Schrittlaenge\n this.alphaMin = 1e-9;\n // Wenn 1, dann wird die radiometrie automatisch mit ausgeglichen, sobald die\n // geometrischen Parameter genuegend gut bestimmt sind. Sonst wird die Radiometrie\n // vom parameter 'radiometry' bestimmt.\n this.autoradio = 1;\n /*\n *\n */\n this.searchWindowPosQuality = 0;\n this.onprogress = null;\n /*\n * Generiert eine 3x3 Filter Matrize zur Gradientenberechnung\n *\n * @return gibt die beiden Matrizen als Objekt zurueck\n * VORSICHT: WIRD HIER NICHT VERWENDET DA ES SICH NICHT NUR UM\n * GRADIENTEN SONDERN AUCH NOCH UM EINE GLAETTUNG HANDELT. DIES\n * FUEHRT ZU SEHR LANGSAMER KONVERGENZ IN LSM. DESHALB DA LIEBER\n * DIE METHODE EINES 1D-SOBELS WAEHLEN\n */\n this._createFilterMatrix = function () {\n // SCHARR Convolution\n let filterMatrixX = [];\n let filterMatrixY = [];\n filterMatrixX.push([-3, 0, 3], [-10, 0, 10], [-3, 0, 3]);\n filterMatrixY.push([-3, -10, -3], [0, 0, 0], [3, 10, 3]);\n let returnedObject = {};\n returnedObject[\"filterX\"] = filterMatrixX;\n returnedObject[\"filterY\"] = filterMatrixY;\n return returnedObject;\n };\n /*\n * Berechnet das Gradientenbild\n *\n * @imagevector Das bild als array\n * @patchsize Groesse des bildes (um randprobleme anzugehen)\n * @return Gibt Gradientenbild in x- und y-Richtung zureuck\n */\n this._obtainGradient = function (imagevector, patchsize) {\n let gradientmatrixX = [];\n let gradientmatrixY = [];\n for (let i = 0; i < imagevector.length; ++i) {\n let vy = Math.floor(i / patchsize);\n let vx = Math.floor(i % patchsize);\n // Randbereich ausgelassen, was aber o.k. ist,\n // da das bild sowieso 2 pixel groesser ist in beiden richtungen\n if (vx != 0 && vx != patchsize - 1 && vy != 0 && vy != patchsize - 1) {\n // Gradient in X\n let GradX = (imagevector[i + 1] - imagevector[i - 1]) / 2;\n gradientmatrixX.push(GradX);\n // Gradient in Y\n let GradY = (imagevector[i + patchsize] - imagevector[i - patchsize]) / 2;\n gradientmatrixY.push(GradY);\n }\n }\n let returnedObject = {};\n returnedObject[\"gradientX\"] = gradientmatrixX;\n returnedObject[\"gradientY\"] = gradientmatrixY;\n return returnedObject;\n };\n /*\n * Interpoliert\n *\n * @imagematrix 2D bild\n * @pos xy position\n * @rAff Radiometric parameters (imagematrix bekommt dadurch gain + offset)\n * @interpolationFunction wahl zwischen bilinear & lanczos2 & lanczos 3 (lanczos2 = 2-lobed lanczos, lanczos3 = 3-lobed lanczos)\n *\n * @return gibt gewichtetes grayvalue zurueck\n */\n this._interpolate2D = function (imagematrix, localPosition, rAff, interpolateFunction) {\n if (interpolateFunction == \"bilinear\") {\n let Bi0 = imagematrix[Math.floor(localPosition[1])][Math.floor(localPosition[0])];\n let Bi1 = imagematrix[Math.floor(localPosition[1])][Math.floor(localPosition[0]) + 1];\n let Bi2 = imagematrix[Math.floor(localPosition[1]) + 1][Math.floor(localPosition[0])];\n let Bi3 = imagematrix[Math.floor(localPosition[1]) + 1][Math.floor(localPosition[0]) + 1];\n // Radiometric gain & shift anbringen\n Bi0 = rAff[0] * Bi0 + rAff[1];\n Bi1 = rAff[0] * Bi1 + rAff[1];\n Bi2 = rAff[0] * Bi2 + rAff[1];\n Bi3 = rAff[0] * Bi3 + rAff[1];\n // Gewichte fuer Bilineare Interpolation\n let W0 = (localPosition[0] - Math.floor(localPosition[0])) * (localPosition[1] - Math.floor(localPosition[1]));\n let W1 = (1 - localPosition[0] + Math.floor(localPosition[0])) *\n (localPosition[1] - Math.floor(localPosition[1]));\n let W2 = (localPosition[0] - Math.floor(localPosition[0])) *\n (1 - localPosition[1] + Math.floor(localPosition[1]));\n let W3 = (1 - localPosition[0] + Math.floor(localPosition[0])) *\n (1 - localPosition[1] + Math.floor(localPosition[1]));\n var grayValue = W0 * Bi3 + W1 * Bi2 + W2 * Bi1 + W3 * Bi0;\n return grayValue;\n }\n else if (interpolateFunction == \"lanczos2\") {\n var xs = [];\n xs.push(Math.floor(localPosition[0]) - 1);\n xs.push(xs[0] + 1);\n xs.push(xs[0] + 2);\n xs.push(xs[0] + 3);\n var ys = [];\n ys.push(Math.floor(localPosition[1]) - 1);\n ys.push(ys[0] + 1);\n ys.push(ys[0] + 2);\n ys.push(ys[0] + 3);\n var a = [];\n for (var i = 0; i < 4; ++i) {\n var x = Math.abs(localPosition[0] - xs[i]);\n if (x >= 2)\n a.push(0);\n else if (x == 0)\n a.push(1);\n else if (x < 2 && x >= 0) {\n var lanczoswinsinc = ((Math.sin(Math.PI * x) / (Math.PI * x)) * Math.sin((Math.PI * x) / 2)) / ((Math.PI * x) / 2);\n a.push(lanczoswinsinc);\n }\n else\n return 0;\n }\n var Ik = [];\n for (var k = 0; k < 4; ++k) {\n var IntSum = 0;\n for (var i = 0; i < 4; ++i) {\n IntSum += a[i] * (rAff[0] * imagematrix[ys[k]][xs[i]] + rAff[1]);\n }\n Ik.push(IntSum);\n }\n var b = [];\n for (var i = 0; i < 4; ++i) {\n var x = Math.abs(localPosition[1] - ys[i]);\n if (x >= 2)\n b.push(0);\n else if (x == 0)\n b.push(1);\n else if (x < 2 && x >= 0) {\n var lanczoswinsinc = ((Math.sin(Math.PI * x) / (Math.PI * x)) * Math.sin((Math.PI * x) / 2)) / ((Math.PI * x) / 2);\n b.push(lanczoswinsinc);\n }\n else\n return 0;\n }\n var D = [];\n var grayValue = 0;\n for (var k = 0; k < 4; ++k) {\n grayValue += b[k] * Ik[k];\n }\n return grayValue;\n }\n else if (interpolateFunction == \"lanczos3\") {\n var xs = [];\n xs.push(Math.floor(localPosition[0]) - 2);\n xs.push(xs[0] + 1);\n xs.push(xs[0] + 2);\n xs.push(xs[0] + 3);\n xs.push(xs[0] + 4);\n xs.push(xs[0] + 5);\n var ys = [];\n ys.push(Math.floor(localPosition[1]) - 2);\n ys.push(ys[0] + 1);\n ys.push(ys[0] + 2);\n ys.push(ys[0] + 3);\n ys.push(ys[0] + 4);\n ys.push(ys[0] + 5);\n var a = [];\n for (var i = 0; i < 6; ++i) {\n var x = Math.abs(localPosition[0] - xs[i]);\n if (x >= 2)\n a.push(0);\n else if (x == 0)\n a.push(1);\n else if (x < 2 && x >= 0) {\n var lanczoswinsinc = ((Math.sin(Math.PI * x) / (Math.PI * x)) * Math.sin((Math.PI * x) / 3)) / ((Math.PI * x) / 3);\n a.push(lanczoswinsinc);\n }\n else\n return 0;\n }\n var Ik = [];\n for (var k = 0; k < 6; ++k) {\n var IntSum = 0;\n for (var i = 0; i < 6; ++i) {\n IntSum += a[i] * (rAff[0] * imagematrix[ys[k]][xs[i]] + rAff[1]);\n }\n Ik.push(IntSum);\n }\n var b = [];\n for (var i = 0; i < 6; ++i) {\n var x = Math.abs(localPosition[1] - ys[i]);\n if (x >= 2)\n b.push(0);\n else if (x == 0)\n b.push(1);\n else if (x < 2 && x >= 0) {\n var lanczoswinsinc = ((Math.sin(Math.PI * x) / (Math.PI * x)) * Math.sin((Math.PI * x) / 3)) / ((Math.PI * x) / 3);\n b.push(lanczoswinsinc);\n }\n else\n return 0;\n }\n var D = [];\n var grayValue = 0;\n for (var k = 0; k < 6; ++k) {\n grayValue += b[k] * Ik[k];\n }\n return grayValue;\n }\n };\n /*\n * Fuellt A-Matrize\n *\n * @patch Search patch fuer radiometrie\n * @GradientsX Gradienten in X Richtung\n * @GradientsY Gradienten in Y Richtung\n * @patchsize groesse des zu generierenden Patches\n * @radiometry Flag ob radiometrie ausgeglichen werden soll oder nicht (addiert zwei zusaetzliche spalten,\n * was nacher bei den Verbesserungen noch addiert werden muss (zweimal ne 0, falls radio nicht ausgeglichen)\n *\n * @return gibt A-matrize zurueck als array\n */\n this._fillAMatrix = function (patch, GradientsX, GradientsY, patchsize, radiometry) {\n let A = [];\n let aIterator = 0;\n for (let y = -Math.floor(patchsize / 2); y <= Math.floor(patchsize / 2); ++y) {\n for (let x = -Math.floor(patchsize / 2); x <= Math.floor(patchsize / 2); ++x) {\n // Ableitungen\n let vDUda = [x, 0];\n let vDUdb = [y, 0];\n let vDUdc = [0, x];\n let vDUdd = [0, y];\n let vDUde = [1, 0];\n let vDUdf = [0, 1];\n let DgUda = GradientsX[aIterator] * vDUda[0] + GradientsY[aIterator] * vDUda[1];\n let DgUdb = GradientsX[aIterator] * vDUdb[0] + GradientsY[aIterator] * vDUdb[1];\n let DgUdc = GradientsX[aIterator] * vDUdc[0] + GradientsY[aIterator] * vDUdc[1];\n let DgUdd = GradientsX[aIterator] * vDUdd[0] + GradientsY[aIterator] * vDUdd[1];\n let DgUde = GradientsX[aIterator] * vDUde[0] + GradientsY[aIterator] * vDUde[1];\n let DgUdf = GradientsX[aIterator] * vDUdf[0] + GradientsY[aIterator] * vDUdf[1];\n A.push([]);\n // Hier koennte an sich die Matrize variabel aufgebaut werden. D.h. insignifikante und/oder stark\n // korrelierende Parameter koennten komplett deaktiviert werden (oder gewichtet). Ist momentan\n // aber noch nicht fertig bzw. braucht zusatzaufwand\n let DgUdr1 = patch[aIterator];\n let DgUdr2 = 1;\n A[aIterator].push(DgUda, DgUdb, DgUdc, DgUdd, DgUde, DgUdf, DgUdr1, DgUdr2);\n aIterator++;\n }\n }\n return A;\n };\n this._Adjustment = function (fTemplate, fSearch, patchsize, searchposition) {\n //, tIntegralcontainer)\n /*\n * Fuehrt Ausgleichung aus\n *\n * @fTemplate canvas links\n * @fSearch canvas rechts\n * @patchsize groesse der patches\n * @tintegralcontainer container fuer template integral\n *\n * @return gibt loesungsvektor zurück\n */\n // Gedaempfte buendel ausgleichung via gauss-newton und armijo line search\n // Gemaess Niclas Boerlin:\n /*\n @inproceedings{Borlin397996,\n author = {B{\\\"o}rlin, Niclas},\n booktitle = {Close-range imaging, long-range vision : proceedings of the Commission V symposium},\n institution = {Umeå University, Department of Computing Science},\n number = {5},\n pages = {7--11},\n publisher = {ISPRS},\n title = {Improving the robustness of least squares template matching with a line-search algorithm},\n series = {ISPRS - International Archives of the Photogrammetry, Remote Sensing and Spatial Information Sciences},\n number = {Vol 34 part 5},\n volume = {34},\n year = {2002}\n }\n \n sowie\n \n @Article(Borlin2013:Bundle,\n author = {Niclas B{\\\"o}rlin and Pierre Grussenmeyer},\n title = {Bundle Adjustment with and without Damping},\n journal = {Photogrammetric Record},\n year = 2013,\n volume = 28,\n number = 144,\n pages = {396-415},\n month = dec,\n doi = {10.1111/phor.12037}\n )\n \n */\n // Konvergenz-Flag\n let converged = 0;\n // Anzahl iterationen\n let iteration = 0;\n // Radiometrie-flag. Wird bei this.autoradio = 1 automatisch auf 1 gesetzt, sobald\n // die geometrischen Parameter von genuegender qualitaet sind. Empfohlen, auf 0 zu lassen\n let radiometry = 0;\n // Grusiger Hack um min. eine Iteration mit radiometrie zu erzwingen.\n let iterradioswitch = 0;\n // Position im Canvas\n let positionTemplate = [Math.floor(fTemplate.length / 2), Math.floor(fTemplate[0].length / 2)];\n let positionSearch = [searchposition[0], searchposition[1]];\n // Vektor mit allen 8 Parametern (6 affin, 2 radio)\n let affineMatrixTemplate = [1, 0, 0, 1, positionTemplate[1], positionTemplate[0], 1, 0];\n let affineMatrixSearch = [1, 0, 0, 1, positionSearch[1], positionSearch[0], 1, 0];\n // Template patch generieren\n let templateorig = this._generatePatch(fTemplate, affineMatrixTemplate, patchsize);\n let template = this._Wallisfilter(templateorig);\n // Abbrechen falls template am Rand (sehr unwahrscheinlich - falls es passiert, ist\n // wohl ein Wurm drin\n if (template == 0)\n return 0;\n // Template ins Canvas zeichnen\n //this._drawPatchToCanvas(\"canvaspatch_l\", template, patchsize);\n // Loesungsvektor setzen\n let x = affineMatrixSearch;\n let xold = x;\n let epsilon = 1e-1;\n let r = 1e10;\n let omega0 = 0;\n let omega = 0;\n let numpar = 8;\n let NCC = 0;\n let A = [];\n let ATA = [];\n let ATR = [];\n // Stochastische Gewichtung der Unbekannten (nach DGAP...experimentell)\n let StochasticWeights = numeric.diag([1, 1, 1, 1, 1, 1, 1, 1]);\n while (converged == 0) {\n if (this.onprogress) {\n this.onprogress();\n }\n // Search patch generieren (+ 2 fuer gradienten - wird nacher nicht mehr benoetigt)\n let searchGradsBorder = this._generatePatch(fSearch, x, patchsize + 2);\n if (searchGradsBorder == 0)\n return 0;\n // Gradienten fuer Search\n let gradienten = this._obtainGradient(searchGradsBorder, patchsize + 2);\n let searchGradX = gradienten.gradientX;\n let searchGradY = gradienten.gradientY;\n // Search generieren - bei rand-ueberlauf, abbrechen\n let searchorig = this._generatePatch(fSearch, x, patchsize);\n let search = this._Wallisfilter(searchorig);\n if (search == 0)\n return 0;\n // Initialposition von search malen (obsolet, da nun mehrere\n // Loesungen existieren koennen und entsprechend dann auch\n // Falsche approximationen daher kommen\n if (iteration == 0)\n if (iteration == 0) {\n //this._drawPatchToCanvas(\"canvaspatch_r\", search, patchsize);\n // Residuen vektor (nur am Anfang - nacher wirds durch linesearch geregelt\n r = numeric.sub(template, search);\n NCC = this._NormCrossCor(template, search); //, tIntegralcontainer, sIntegralContainer);\n }\n // Correlation check\n // A-Matrize fuellen\n A = this._fillAMatrix(search, searchGradX, searchGradY, patchsize, radiometry);\n // ATA\n ATA = numeric.dot(numeric.transpose(A), A);\n // Gewichte fuer radiometrie\n if (radiometry == 0) {\n StochasticWeights[6][6] = 1e32;\n StochasticWeights[7][7] = 1e32;\n }\n else {\n StochasticWeights[6][6] = 1;\n StochasticWeights[7][7] = 1;\n }\n // Gewichte anbringen\n ATA = numeric.add(ATA, StochasticWeights);\n // ATR\n ATR = numeric.dot(numeric.transpose(A), r);\n // l um ATR zu gewichten (ist glaub so falsch weil beobachtet & approx gleich sin)\n /*\n var l = numeric.sub(x, xold);\n var pl = [];\n for (var i = 0; i < StochasticWeights.length; ++i)\n {\n pl.push(StochasticWeights[i][i] * l[i]);\n }\n ATR = numeric.add(ATR, pl);*/\n // Loesen lineares gleichungssystem\n // An sich liesse sich ATA und ATR vermeiden wenn man eine\n // SVD rechnet. Allerdings weiss ich dann nicht, ob\n // Gewichtungen dann noch moeglich sind. Probleme kann\n // es geben, wenn A-Matrize schlecht konditioniert sind\n let p = numeric.solve(ATA, ATR);\n // Ap = ax\n let Ap = numeric.dot(A, p);\n // fp0\n let fp0 = numeric.dot(Ap, r);\n // Verbesserungen\n let v = numeric.sub(Ap, r);\n // Abbruchskriterium ueber 0.5 * vTv\n omega0 = omega;\n omega = 0.5 * numeric.dot(v, v);\n // Linesearch\n // Da ist u.U. noch ein Fehler drin. Sobald man sich der Loesung naehert\n // wird ~2-3 iterationen vor der Loesung das Alpha minimal. Eigentlich waere das\n // ein Abbruchkriterium - aber laesst man es mit voller alpha-laenge laufen\n // konvergiert es 1-2 iterationen spaeter. Ich nehme an, dass\n // es sich um Rundungsfehler handelt da die Daten groesstenteils rausch-befreit sind\n // Entsprechend wurde die ungleichung f < f0 + this.mue * alpha * fp0 umgeschrieben in\n // f < 1 + f0 + this.mue * alpha * fp0. Trotzdem sollte da noch genauer kontrolliert\n // werden obs stimmt, da es nun praktisch keine alpha < 1e-9 Faelle mehr gibt\n let linesearchres = this._Linesearch(x, p, r, fp0, this.alphaMin, this.mue, template, search, fSearch, patchsize); //, tIntegralcontainer);\n // Falls Bild an rand kommt\n if (linesearchres == 0)\n return 0;\n // Zurueck-gegebene Parameter von linesearch\n var alpha = linesearchres.alphaLength;\n let xNew = linesearchres.xNew;\n let rNew = linesearchres.rNew;\n NCC = linesearchres.NCC;\n var searchUpdate = linesearchres.searchUpdate;\n // Updates\n xold = x;\n x = xNew;\n r = rNew;\n // Boerlin-abbruch Kriterium. Viel zu strikt oder zu schwach. Ueberpruefen\n let left = numeric.norm2(Ap);\n let right = epsilon * numeric.norm2(r);\n // Sigma0\n let sigma0 = Math.sqrt(omega / (Math.pow(patchsize, 2) - numpar));\n // Abschliessend waere hier die Ueberpruefung der Korrelationen\n // um allfaellige Parameter die stark korrelieren zu entfernen\n // oder abzuschwaechen, wenn sie schwach korrelieren. Es this.muesste\n // zuerst auch noch ein Signifikanztest durchgefuehrt werden um\n // nicht-signifikante Parameter auzuschalten.\n // Da dies zeit braucht, wird momentan nur der Radiometrie-Parameter\n // stochastisch gewichtet, je nachdem ob er eingeschaltet\n // ist oder nicht (isch no witzig, odr?)\n let ATAINV = numeric.inv(ATA);\n var parstddev = [];\n for (var i = 0; i < numpar; ++i) {\n parstddev.push(Math.sqrt(sigma0 * ATAINV[i][i]));\n }\n let Correlation = [];\n let MaxPos = [];\n for (var i = 0; i < numpar; ++i) {\n Correlation.push([]);\n let ix = ATAINV[i][i];\n for (var j = 0; j < numpar; ++j) {\n let iy = ATAINV[j][j];\n Correlation[i].push(ATAINV[i][j] / Math.sqrt(ix * iy));\n }\n }\n let UpperPar = numpar - 1;\n for (var i = 0; i < numpar - 1; ++i) {\n for (var j = 1; j < UpperPar; ++j) {\n if (Correlation[i][j] > 0.99 && i != j) {\n if (Correlation[i][j] > Correlation[j][i])\n MaxPos.push(i, j, 1e20, Correlation[i][j]);\n else\n MaxPos.push(j, i, 1e20, Correlation[j][i]);\n }\n else if (Correlation[i][j] > 0.9 && i != j) {\n if (Correlation[i][j] > Correlation[j][i])\n MaxPos.push(i, j, 10 / Correlation[i][j], Correlation[i][j]);\n else\n MaxPos.push(j, i, 10 / Correlation[j][i], Correlation[j][i]);\n }\n else if (Correlation[i][j] > 0.7 && i != j) {\n if (Correlation[i][j] > Correlation[j][i])\n MaxPos.push(i, j, 5 / Correlation[i][j], Correlation[i][j]);\n else\n MaxPos.push(j, i, 5 / Correlation[j][i], Correlation[j][i]);\n }\n else if (Correlation[i][j] > 0.5 && i != j) {\n if (Correlation[i][j] > Correlation[j][i])\n MaxPos.push(i, j, 2 / Correlation[i][j], Correlation[i][j]);\n else\n MaxPos.push(j, i, 2 / Correlation[j][i], Correlation[j][i]);\n }\n else if (Correlation[i][j] > 0.3 && i != j) {\n if (Correlation[i][j] > Correlation[j][i])\n MaxPos.push(i, j, 1 / Correlation[i][j], Correlation[i][j]);\n else\n MaxPos.push(j, i, 1 / Correlation[j][i], Correlation[j][i]);\n }\n }\n --UpperPar;\n }\n // Iteration hoch-schrauben\n iteration++;\n if (iteration >= 50) {\n // Abbruch falls zu viele Iterationen\n converged = 2;\n }\n else if (alpha < this.alphaMin) {\n // Abbruch falls alpha kleiner als this.alphaMin\n converged = 2;\n }\n //else if (left <= right) // Boerlin-abbruch. Bricht ganze Haeuser ein bevor es mal klappt...\n //converged = 1;\n if (iteration > 0 &&\n omega0 / omega < this.omegaIterationStop &&\n omega0 / omega > 1 / this.omegaIterationStop) {\n // Abbruch ueber verbesserungsvergleich\n if (this.autoradio == 1) {\n if (radiometry == 0)\n iterradioswitch = iteration; // Falls automatisch radiometrie zugeschaltet, hier einschalten\n radiometry = 1;\n if (omega0 / omega < this.omegaIterationStop &&\n omega0 / omega > 1 / this.omegaIterationStop &&\n iteration > iterradioswitch) {\n // Zweite ueberpruefung nach einschalten von radiometrie-ausgleich\n // Signifikanztest\n let Signifikanz = [];\n for (var i = 0; i < numpar; ++i) {\n let Change = numeric.sub(x, affineMatrixSearch);\n Signifikanz.push(Math.abs(Change[i] / parstddev[i]));\n }\n var affstddev = numeric.getBlock(parstddev, [0, 0], [5, 0]);\n var radiostddev = numeric.getBlock(parstddev, [6, 0], [7, 0]);\n var normaffstddev = numeric.norm2(affstddev);\n var normradstddev = numeric.norm2(radiostddev);\n if (normaffstddev > this.minAffParsNorm || normradstddev > this.minRadParsNorm)\n converged = 2;\n else\n converged = 1;\n }\n }\n else if (omega0 / omega < this.omegaIterationStop && omega0 / omega > 1 / this.omegaIterationStop)\n converged = 1;\n }\n }\n // Falls keine Konvergenz => null zurueck geben\n if (converged == 0 || converged == 2)\n return 0;\n // Ansonsten den ganzen Plunder hoch schicken\n else if (converged == 1) {\n let returnedObject = {};\n returnedObject[\"alphaLength\"] = alpha;\n returnedObject[\"x\"] = x;\n returnedObject[\"r\"] = r;\n returnedObject[\"NCC\"] = NCC;\n returnedObject[\"searchUpdate\"] = searchUpdate;\n returnedObject[\"ParsStdDev\"] = parstddev;\n returnedObject[\"AffStdDev\"] = affstddev;\n returnedObject[\"RadStdDev\"] = radiostddev;\n returnedObject[\"NormAffStdDev\"] = normaffstddev;\n returnedObject[\"NormRadStdDev\"] = normradstddev;\n return returnedObject;\n }\n };\n /*\n * Fuehrt Armijo-Linesearch aus\n *\n * @x momentaner loesungsvektor\n * @p verbesserungen\n * @r residuen\n * @fp0 A*p*r'\n * @this.alphaMin minimale Schrittlaenge fuer Gauss-Newton\n * @this.mue Armijo parameter\n * @template template patch\n * @search search patch\n * @fSearch Search canvas\n * @patchsize groesse der Patches\n * @tIntegralContainer Integralbilder template\n *\n * @return gibt verbesserung, residuen, ncc und schrittlaenge zurueck\n */\n this._Linesearch = function (x, p, r, fp0, alphaMin, mue, template, search, fSearch, patchsize //, tIntegralcontainer)\n ) {\n // 0.5 * vTpV\n let f0 = 0.5 * numeric.dot(r, r);\n // Start-alpha (schritt-laenge)\n let alpha = 1.0;\n // Solange iterieren bis alpha zu klein\n while (Math.abs(alpha) >= this.alphaMin) {\n // Neuer loesungsvektor\n let trialpoint = numeric.add(x, numeric.dot(alpha, p));\n // neues patch - abbrechen falls Bild ueber Rand gezeichnet\n let searchUpdateorig = this._generatePatch(fSearch, trialpoint, patchsize);\n var searchUpdate = this._Wallisfilter(searchUpdateorig);\n if (searchUpdate == 0)\n return 0;\n // Neuer Residuenvektor\n let rLoc = numeric.sub(template, searchUpdate);\n // Neue NCC\n var NCC = this._NormCrossCor(template, searchUpdate); //, tIntegralcontainer, sIntegralcointainer);\n // neues 0.5 * vTpV\n let f = 0.5 * numeric.dot(rLoc, rLoc);\n // Armijo Kriterium, rechte Seite\n //var fArmijo = 0.1 + f0 + this.mue * alpha * fp0;\n let fArmijo = 0.1 + f0 + this.mue * alpha * fp0;\n // Falls neuer funktionswert (0.5 * vTpV) kleiner als Armijo-kriterium, Loesung akzeptieren...\n if (f < fArmijo) {\n var returnedObject = {};\n returnedObject[\"alphaLength\"] = alpha;\n returnedObject[\"Change\"] = numeric.dot(alpha, p);\n returnedObject[\"xNew\"] = trialpoint;\n returnedObject[\"rNew\"] = rLoc;\n returnedObject[\"NCC\"] = NCC;\n returnedObject[\"searchUpdate\"] = searchUpdate;\n return returnedObject;\n }\n // ...sonst loesung halbieren\n else {\n alpha = alpha / 2;\n }\n }\n // Hier den Plunder zurueckgeben, auch wenn keine vernuenftige Loesung gefunden\n var returnedObject = {};\n returnedObject[\"alphaLength\"] = 0;\n returnedObject[\"xNew\"] = numeric.add(x, p);\n returnedObject[\"rNew\"] = r;\n returnedObject[\"NCC\"] = NCC;\n returnedObject[\"searchUpdate\"] = searchUpdate;\n return returnedObject;\n };\n /*\n * Berechnet normalisierten Kreuzkorrelationskoeffizient (NCC)\n *\n * @template template patch\n * @search search patch\n * @tintegral template integral container (noch nicht drin)\n * @sintegral search integral container (noch nicht drin)\n *\n * @return gibt NCC zurueck\n */\n this._NormCrossCor = function (template, search //, tintegral, sintegral)\n ) {\n let imagesize = template.length;\n let patchsize = Math.sqrt(imagesize);\n let tMean = 0;\n let sMean = 0;\n let tStd = 0;\n let sStd = 0;\n // Mittelwerte berechnen\n for (var i = 0; i < imagesize; ++i) {\n tMean += template[i];\n sMean += search[i];\n }\n tMean /= imagesize;\n sMean /= imagesize;\n //var intmean = tintegral.Integral[y][x];\n for (var i = 0; i < imagesize; ++i) {\n tStd += Math.pow(template[i] - tMean, 2);\n sStd += Math.pow(search[i] - sMean, 2);\n }\n tStd = Math.sqrt(tStd / imagesize);\n sStd = Math.sqrt(sStd / imagesize);\n let NCC = 0;\n for (var i = 0; i < imagesize; ++i) {\n NCC += ((template[i] - tMean) * (search[i] - sMean)) / (tStd * sStd);\n }\n NCC *= 1 / imagesize;\n // NCC via Vektoren berechnen. Dauert wohl laenger als standard-fall weil:\n // Standard:\n // 1x durch patch fuer mean\n // 1x durch patch fuer stdv\n // 1x durch patch fuer NCC\n // Vektoren:\n // 1x durch patch fuer mean\n // 1x (bzw. 2x) durch Vektoren um mean abzuziehen\n // 1x (bzw. 2x) durch Vektoren um norm zu dividieren\n // 1x durch Vektor fuer inneres vektorprodukt\n // da 1x durch Vektor = 1x durch Patch, ergibt sich:\n // 3x durch patch fuer standard\n // min. 4x (oder wie hier 6x) durch patch fuer Vektoren\n // So oder so sollte es mit integralbildern gemacht werden\n /*\n var T = numeric.sub(template, tMean);\n var F = numeric.sub(search, sMean);\n \n var left = numeric.div(T, numeric.norm2(T));\n var right = numeric.div(F, numeric.norm2(F));\n \n var NCC = numeric.dot(left, right);*/\n return NCC;\n };\n }\n /**\n * @param left_dataurl\n * @param right_dataurl\n */\n runLsm(fTemplate, fSearch) {\n // Patchgroesse definieren (evt im Dienst loesen als aufziehbares Rechteck?)\n let patchsize = 15;\n // Integralbilder generieren (um Wallisfilter anzuwenden)\n let integralTemplate = this._IntegralImage(fTemplate);\n let integralSearch = this._IntegralImage(fSearch);\n // Template patch generieren (position in der Mitte des Bildes und groesse von patchsize\n let positionTemplate = [Math.floor(fTemplate.length / 2), Math.floor(fTemplate[0].length / 2)];\n let position = [1, 0, 0, 1, positionTemplate[1], positionTemplate[0], 1, 0];\n let templateorig = this._generatePatch(fTemplate, position, patchsize);\n let template = this._Wallisfilter(templateorig);\n // Kreuzkorrelation entlang der Epipolarlinie (1 pixel momentan)\n let NCC = [];\n let positionSearch = [];\n for (var i = this.offsetConstant; i < fSearch[0].length - (patchsize + this.offsetConstant); ++i) {\n positionSearch = [Math.floor(fSearch.length / 2), i + Math.floor(patchsize / 2)];\n position = [1, 0, 0, 1, positionSearch[1], positionSearch[0], 1, 0];\n let searchorig = this._generatePatch(fSearch, position, patchsize);\n let search = this._Wallisfilter(searchorig);\n //var integralSearch = this._IntegralImage(fSearch);\n NCC.push(this._NormCrossCor(template, search)); //, integralSearch, integralTemplate));\n }\n // Ueberprueft maximas und speichert diese sofern sie groesser als 0.5 sind\n // Sobald der Wert sinkt, wird 5 pixel abgewartet - sofern der Wert dann nicht\n // steigt, wird nach einem neuen Peak gesucht. Sonst wars nur ein Buckel zum maximum\n // Offset um wahre Pixelposition zu bestimmen\n let Maximas = [];\n let localmaximum = 0;\n let peakflag = 0;\n let peakpos = -1;\n let offset = this.offsetConstant + Math.floor(patchsize / 2);\n for (var i = 0; i < NCC.length; ++i) {\n if (NCC[i] > this.NCCCutoff && NCC[i] > localmaximum) {\n localmaximum = NCC[i];\n peakpos = i + offset;\n peakflag = this.minimumPixelDistance;\n }\n else if (peakflag > 0) {\n --peakflag;\n if (peakflag == 0) {\n Maximas.push(positionSearch[0], peakpos);\n peakpos = -1;\n localmaximum = 0;\n }\n }\n }\n // Loesungsraum\n let finalsolutions = [];\n // Alle Positionskandidaten durchs LSM jagen\n for (var i = 0; i < Maximas.length; i += 2) {\n position = [Maximas[i], Maximas[i + 1]];\n let solution = this._Adjustment(fTemplate, fSearch, patchsize, position); //, integralTemplate);\n // Falls Loesung gefunden, hier abspeichern\n if (solution != 0) {\n var Object = {};\n Object[\"alphaLength\"] = solution.alphaLength;\n Object[\"x\"] = solution.x;\n Object[\"r\"] = solution.r;\n Object[\"NCC\"] = solution.NCC;\n Object[\"searchUpdate\"] = solution.searchUpdate;\n Object[\"ParsStdDev\"] = solution.ParsStdDev;\n Object[\"NormAffStdDev\"] = solution.NormAffStdDev;\n Object[\"NormRadStdDev\"] = solution.NormRadStdDev;\n finalsolutions.push(Object);\n }\n }\n let maxNCC = this.NCCCutoff;\n let selectedSolution = -1;\n let localminAffParsNorm = this.minAffParsNorm;\n let localminRadParsNorm = this.minRadParsNorm;\n let searchwindowcenter_x = fSearch[0].length / 2;\n let mindx = Infinity;\n // Durch jede Loesung durch gehen und maximum NCC auswaehlen\n // unter beruecksichtigung dass Alpha nicht zu klein ist.\n for (var i = 0; i < finalsolutions.length; ++i) {\n if (this.searchWindowPosQuality > 0.7) {\n //Wähle beste Lösung aufgrund der Position im Suchfenster ->\n // Suchfenster-Mitte = Rückprojektion des 3D-Punktes aus der Tiefenkarte in das rechte Bild...\n var dx = Math.abs(searchwindowcenter_x - finalsolutions[i].x[4]);\n if (dx < mindx) {\n selectedSolution = i;\n mindx = dx;\n }\n }\n else {\n //Wähle beste Lösung aufgrund der Resultate der Ausgleichung\n if (finalsolutions[i].NCC > maxNCC &&\n finalsolutions[i].alphaLength > this.alphaCutoff &&\n finalsolutions[i].NormAffStdDev < localminAffParsNorm &&\n finalsolutions[i].NormRadStdDev < localminRadParsNorm) {\n selectedSolution = i;\n maxNCC = finalsolutions[i].NCC;\n localminAffParsNorm = finalsolutions[i].NormAffStdDev;\n localminRadParsNorm = finalsolutions[i].NormRadStdDev;\n mindx = dx;\n }\n }\n }\n // Loesung ins canvas malen\n if (selectedSolution > -1) {\n let result = [finalsolutions[selectedSolution].x[4], finalsolutions[selectedSolution].x[5]];\n return result;\n }\n else {\n let colour = {};\n colour[\"red\"] = 255;\n colour[\"green\"] = 0;\n colour[\"blue\"] = 0;\n finalsolutions.push(Object);\n return null;\n }\n }\n //------------------------------------------------------------------------------\n /*\n * Berechnet Wallisfilter (benoetigt Integralbild\n *\n * @imagematrix Bild als array\n * @return integral und integralsquared zurueck\n */\n _Wallisfilter(patch) {\n let wallispatch = [];\n let contrastconstant = 0.9;\n let targetmean = 127.5;\n let targetstdv = 90;\n let brightnessconstant = 1.0;\n let mean = 0;\n let std = 0;\n for (var i = 0; i < patch.length; ++i) {\n mean += patch[i];\n }\n mean = mean / patch.length;\n for (var i = 0; i < patch.length; ++i) {\n std += Math.pow(patch[i] - mean, 2);\n }\n std = Math.sqrt(std / patch.length);\n let conTarg = contrastconstant * targetstdv;\n let minusConTarg = (1 - contrastconstant) * targetstdv;\n let brighTarg = brightnessconstant * targetmean;\n let r1 = conTarg / (contrastconstant * std + minusConTarg);\n let r0 = brighTarg + (1 - brightnessconstant - r1) * mean;\n for (let g = 0; g < patch.length; ++g) {\n let gc = patch[g] * r1 + r0;\n if (gc > 255.0)\n wallispatch[g] = 255;\n else if (gc < 0.0)\n wallispatch[g] = 0;\n else\n wallispatch[g] = gc;\n }\n return wallispatch;\n }\n /*\n * Berechnet integralbild\n *\n * @imagematrix Bild als array\n * @return integral und integralsquared zurueck\n */\n _IntegralImage(imagematrix) {\n let Integral = [];\n let IntegralSq = [];\n for (let y = 0; y < imagematrix.length; ++y) {\n Integral.push([]);\n IntegralSq.push([]);\n for (let x = 0; x < imagematrix[0].length; ++x) {\n let Left = 0;\n let Top = 0;\n let TopLeft = 0;\n if (x > 0)\n Left = Integral[y][x - 1];\n if (y > 0)\n Top = Integral[y - 1][x];\n if (x > 0 && y > 0)\n TopLeft = Integral[y - 1][x - 1];\n let IntegralVal = imagematrix[y][x] + Left + Top - TopLeft;\n Integral[y].push(IntegralVal);\n IntegralSq[y].push(Math.pow(IntegralVal, 2));\n //var IntegralVal = imagematrix[y][x] + Integral[y][x - 1] + Integral[y - 1][x] - Integral[y - 1][x - 1];\n }\n }\n let returnedObject = {};\n returnedObject[\"Integral\"] = Integral;\n returnedObject[\"IntegralSq\"] = IntegralSq;\n return returnedObject;\n }\n /*\n * Erstellt patch aus img, unter beruecksichtigung einer affinen trafo und interpoliert bilinear\n *\n * @imagematrix 2D bild\n * @affineTransformation Affine transformationsmatrize, als Vektor.\n * 0, 1 = erste Zeile, 2, 3 = zweite Zeile, 4, 5 = translation x,y, 6, 7 = radiometric gain & shift\n * @patchsize groesse des zu generierenden Patches\n *\n * @return gibt patch zurueck als array\n */\n _generatePatch(imagematrix, affineTransformation, patchsize) {\n let vectoriterator = 0;\n let patch = [];\n // Rotation, Scherungen, Massstaebe\n let mAff = [\n [affineTransformation[0], affineTransformation[1]],\n [affineTransformation[2], affineTransformation[3]],\n ];\n // Translationen\n let vAff = [[affineTransformation[4]], [affineTransformation[5]]];\n // Radiometrie\n let rAff = [affineTransformation[6], affineTransformation[7]];\n let outOfBounds = 0;\n for (let y = -Math.floor(patchsize / 2); y <= Math.floor(patchsize / 2); ++y) {\n // Falls waehrend der Interpolation ausserhalb des Bildes zugegriffen wird\n // muss abgebrochen werden. Alternative: Patch verkleinern (nein danke...)\n if (outOfBounds == 1)\n break;\n for (let x = -Math.floor(patchsize / 2); x <= Math.floor(patchsize / 2); ++x) {\n let vPos = [[x], [y]];\n // Vorsicht, localposition wie auch vPos sind [X,Y] und nicht umgekehrt\n let localPosition = numeric.add(numeric.dot(mAff, vPos), vAff);\n if (localPosition[1] < this.offsetConstant ||\n localPosition[1] > imagematrix.length - this.offsetConstant ||\n localPosition[0] < this.offsetConstant ||\n localPosition[0] > imagematrix[0].length - this.offsetConstant) {\n outOfBounds = 1;\n break;\n }\n // Interpolieren (bilinear, lanczos2,3)\n let grayValue = this._interpolate2D(imagematrix, localPosition, rAff, \"lanczos2\");\n patch.push(grayValue);\n }\n }\n if (outOfBounds == 0)\n return patch;\n else\n return 0;\n }\n}\nctx.onmessage = (args) => {\n if (args.data[\"topic\"]) {\n switch (args.data[\"topic\"]) {\n case \"run\":\n var lsm = new LSMWorker();\n if (args.data[\"searchwindowposquality\"]) {\n lsm.searchWindowPosQuality = args.data[\"searchwindowposquality\"];\n }\n if (args.data[\"NCC_Threshold\"]) {\n lsm.NCCCutoff = args.data[\"NCC_Threshold\"];\n }\n if (args.data[\"adjustRadiometry\"]) {\n lsm.autoradio = 1;\n }\n var lsmresult = lsm.runLsm(args.data[\"template\"], args.data[\"searchwindow\"]);\n ctx.postMessage(lsmresult);\n }\n }\n};\n//# sourceMappingURL=lsm.worker.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [732], () => (__webpack_require__(53757)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and chunks that the entrypoint depends on\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".infra3dapi.js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","__webpack_require__.p = \"\";","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t757: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = self[\"webpackChunkinfra3dapi\"] = self[\"webpackChunkinfra3dapi\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["root","factory","exports","module","define","amd","self","deferred","next","ctx","LSMWorker","constructor","this","offsetConstant","minimumPixelDistance","NCCCutoff","alphaCutoff","minAffParsNorm","minRadParsNorm","omegaIterationStop","mue","alphaMin","autoradio","searchWindowPosQuality","onprogress","_createFilterMatrix","filterMatrixX","filterMatrixY","push","returnedObject","_obtainGradient","imagevector","patchsize","gradientmatrixX","gradientmatrixY","i","length","vy","Math","floor","vx","GradX","GradY","_interpolate2D","imagematrix","localPosition","rAff","interpolateFunction","Bi0","Bi1","Bi2","Bi3","xs","ys","a","x","abs","lanczoswinsinc","sin","PI","Ik","k","IntSum","b","grayValue","_fillAMatrix","patch","GradientsX","GradientsY","radiometry","A","aIterator","y","vDUda","vDUdb","vDUdc","vDUdd","vDUde","vDUdf","DgUda","DgUdb","DgUdc","DgUdd","DgUde","DgUdf","DgUdr1","DgUdr2","_Adjustment","fTemplate","fSearch","searchposition","converged","iteration","iterradioswitch","positionTemplate","positionSearch","affineMatrixTemplate","affineMatrixSearch","templateorig","_generatePatch","template","_Wallisfilter","xold","r","omega0","omega","NCC","ATA","ATR","StochasticWeights","searchGradsBorder","gradienten","searchGradX","gradientX","searchGradY","gradientY","searchorig","search","_NormCrossCor","p","Ap","fp0","v","linesearchres","_Linesearch","alpha","alphaLength","xNew","rNew","searchUpdate","sigma0","sqrt","pow","ATAINV","parstddev","Correlation","MaxPos","ix","j","iy","UpperPar","numpar","Signifikanz","Change","affstddev","radiostddev","normaffstddev","normradstddev","f0","trialpoint","searchUpdateorig","rLoc","imagesize","tMean","sMean","tStd","sStd","runLsm","_IntegralImage","position","Maximas","localmaximum","peakflag","peakpos","offset","finalsolutions","solution","Object","ParsStdDev","NormAffStdDev","NormRadStdDev","maxNCC","selectedSolution","localminAffParsNorm","localminRadParsNorm","searchwindowcenter_x","mindx","Infinity","dx","wallispatch","mean","std","r1","contrastconstant","r0","brightnessconstant","g","gc","Integral","IntegralSq","Left","Top","TopLeft","IntegralVal","affineTransformation","mAff","vAff","outOfBounds","vPos","onmessage","args","data","lsm","lsmresult","postMessage","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","m","__webpack_exports__","O","result","chunkIds","fn","priority","notFulfilled","fulfilled","keys","every","key","splice","n","getter","__esModule","d","definition","o","defineProperty","enumerable","get","f","e","chunkId","Promise","all","reduce","promises","u","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","call","installedChunks","importScripts","chunkLoadingGlobal","parentChunkLoadingFunction","bind","moreModules","runtime","pop","then"],"ignoreList":[],"sourceRoot":""}
|