diff --git a/404.html b/404.html index d243fce..807eb87 100644 --- a/404.html +++ b/404.html @@ -4,8 +4,8 @@ WebODM Lightning - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/assets/ideal-img/blur.2156d53.1024.jpg b/assets/ideal-img/blur.2156d53.1024.jpg new file mode 100644 index 0000000..ce20098 Binary files /dev/null and b/assets/ideal-img/blur.2156d53.1024.jpg differ diff --git a/assets/ideal-img/blur.ac102a6.640.jpg b/assets/ideal-img/blur.ac102a6.640.jpg new file mode 100644 index 0000000..5f793d2 Binary files /dev/null and b/assets/ideal-img/blur.ac102a6.640.jpg differ diff --git a/assets/ideal-img/featureless.732d6fa.640.jpg b/assets/ideal-img/featureless.732d6fa.640.jpg new file mode 100644 index 0000000..789484d Binary files /dev/null and b/assets/ideal-img/featureless.732d6fa.640.jpg differ diff --git a/assets/ideal-img/featureless.f3e90f5.1000.jpg b/assets/ideal-img/featureless.f3e90f5.1000.jpg new file mode 100644 index 0000000..d9172cf Binary files /dev/null and b/assets/ideal-img/featureless.f3e90f5.1000.jpg differ diff --git a/assets/ideal-img/horizon.2053607.640.jpg b/assets/ideal-img/horizon.2053607.640.jpg new file mode 100644 index 0000000..5afa14e Binary files /dev/null and b/assets/ideal-img/horizon.2053607.640.jpg differ diff --git a/assets/ideal-img/horizon.b92a38d.1024.jpg b/assets/ideal-img/horizon.b92a38d.1024.jpg new file mode 100644 index 0000000..f3e1336 Binary files /dev/null and b/assets/ideal-img/horizon.b92a38d.1024.jpg differ diff --git a/assets/ideal-img/unfocused.0cdf13c.640.jpg b/assets/ideal-img/unfocused.0cdf13c.640.jpg new file mode 100644 index 0000000..7aaa8d0 Binary files /dev/null and b/assets/ideal-img/unfocused.0cdf13c.640.jpg differ diff --git a/assets/ideal-img/unfocused.4acd2e9.1024.jpg b/assets/ideal-img/unfocused.4acd2e9.1024.jpg new file mode 100644 index 0000000..02e1a4c Binary files /dev/null and b/assets/ideal-img/unfocused.4acd2e9.1024.jpg differ diff --git a/assets/ideal-img/vignette.0feefd7.1024.jpg b/assets/ideal-img/vignette.0feefd7.1024.jpg new file mode 100644 index 0000000..d635c95 Binary files /dev/null and b/assets/ideal-img/vignette.0feefd7.1024.jpg differ diff --git a/assets/ideal-img/vignette.c4cfa74.640.jpg b/assets/ideal-img/vignette.c4cfa74.640.jpg new file mode 100644 index 0000000..a31c716 Binary files /dev/null and b/assets/ideal-img/vignette.c4cfa74.640.jpg differ diff --git a/assets/images/blur-4f9b85ca7cd2a9615115dabed4346ba5.jpg b/assets/images/blur-4f9b85ca7cd2a9615115dabed4346ba5.jpg new file mode 100644 index 0000000..994dca9 Binary files /dev/null and b/assets/images/blur-4f9b85ca7cd2a9615115dabed4346ba5.jpg differ diff --git a/assets/images/featureless-a1f0d1f7c80fbc104f6173fd6355bd1b.jpg b/assets/images/featureless-a1f0d1f7c80fbc104f6173fd6355bd1b.jpg new file mode 100644 index 0000000..70e448c Binary files /dev/null and b/assets/images/featureless-a1f0d1f7c80fbc104f6173fd6355bd1b.jpg differ diff --git a/assets/images/horizon-39f4d625ad21839c1253b191651f985a.jpg b/assets/images/horizon-39f4d625ad21839c1253b191651f985a.jpg new file mode 100644 index 0000000..94afcd1 Binary files /dev/null and b/assets/images/horizon-39f4d625ad21839c1253b191651f985a.jpg differ diff --git a/assets/images/unfocused-a1b80c5904122af6a6bdbcc6a60a14d3.jpg b/assets/images/unfocused-a1b80c5904122af6a6bdbcc6a60a14d3.jpg new file mode 100644 index 0000000..4199e0c Binary files /dev/null and b/assets/images/unfocused-a1b80c5904122af6a6bdbcc6a60a14d3.jpg differ diff --git a/assets/images/vignette-609c410d65eb24c2e0d149dd2d2ae343.jpg b/assets/images/vignette-609c410d65eb24c2e0d149dd2d2ae343.jpg new file mode 100644 index 0000000..a6afa11 Binary files /dev/null and b/assets/images/vignette-609c410d65eb24c2e0d149dd2d2ae343.jpg differ diff --git a/assets/js/8ab516b5.777efe00.js b/assets/js/8ab516b5.777efe00.js new file mode 100644 index 0000000..2fd5bea --- /dev/null +++ b/assets/js/8ab516b5.777efe00.js @@ -0,0 +1 @@ +(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[626],{5406:(e,A,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/blur.ac102a6.640.jpg 640w,"+s.p+"assets/ideal-img/blur.2156d53.1024.jpg 1024w",images:[{path:s.p+"assets/ideal-img/blur.ac102a6.640.jpg",width:640,height:216},{path:s.p+"assets/ideal-img/blur.2156d53.1024.jpg",width:1024,height:346}],src:s.p+"assets/ideal-img/blur.ac102a6.640.jpg",toString:function(){return s.p+"assets/ideal-img/blur.ac102a6.640.jpg"},placeholder:void 0,width:640,height:216},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAADAAoDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAX/xAAeEAACAQMFAAAAAAAAAAAAAAABAgAEBRETITFhkf/EABUBAQEAAAAAAAAAAAAAAAAAAAIE/8QAGREAAQUAAAAAAAAAAAAAAAAAAAEDMZGx/9oADAMBAAIRAxEAPwBTooprWozhEVl34OgZSyevIiRNzegQ/9k="}},5363:(e,A,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/featureless.732d6fa.640.jpg 640w,"+s.p+"assets/ideal-img/featureless.f3e90f5.1000.jpg 1000w",images:[{path:s.p+"assets/ideal-img/featureless.732d6fa.640.jpg",width:640,height:432},{path:s.p+"assets/ideal-img/featureless.f3e90f5.1000.jpg",width:1e3,height:675}],src:s.p+"assets/ideal-img/featureless.732d6fa.640.jpg",toString:function(){return s.p+"assets/ideal-img/featureless.732d6fa.640.jpg"},placeholder:void 0,width:640,height:432},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAHAAoDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAT/xAAaEAACAwEBAAAAAAAAAAAAAAAAAQIDESEx/8QAFQEBAQAAAAAAAAAAAAAAAAAAAwT/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwC6qvzWXKMMXAC4b//Z"}},628:(e,A,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/horizon.2053607.640.jpg 640w,"+s.p+"assets/ideal-img/horizon.b92a38d.1024.jpg 1024w",images:[{path:s.p+"assets/ideal-img/horizon.2053607.640.jpg",width:640,height:360},{path:s.p+"assets/ideal-img/horizon.b92a38d.1024.jpg",width:1024,height:576}],src:s.p+"assets/ideal-img/horizon.2053607.640.jpg",toString:function(){return s.p+"assets/ideal-img/horizon.2053607.640.jpg"},placeholder:void 0,width:640,height:360},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAGAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAUG/8QAHhAAAgICAgMAAAAAAAAAAAAAAQIAAwURBAZTkbH/xAAVAQEBAAAAAAAAAAAAAAAAAAABBP/EABwRAAEDBQAAAAAAAAAAAAAAAAEAAgMEETJRkf/aAAwDAQACEQMRAD8AyWM7rmrGWtr6yQPCgG/UpWd3yCOyNyG2pIOuPXr5ESY1Et8z1IiZpf/Z"}},8557:(e,A,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/unfocused.0cdf13c.640.jpg 640w,"+s.p+"assets/ideal-img/unfocused.4acd2e9.1024.jpg 1024w",images:[{path:s.p+"assets/ideal-img/unfocused.0cdf13c.640.jpg",width:640,height:216},{path:s.p+"assets/ideal-img/unfocused.4acd2e9.1024.jpg",width:1024,height:346}],src:s.p+"assets/ideal-img/unfocused.0cdf13c.640.jpg",toString:function(){return s.p+"assets/ideal-img/unfocused.0cdf13c.640.jpg"},placeholder:void 0,width:640,height:216},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAADAAoDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAX/xAAeEAABBAIDAQAAAAAAAAAAAAABAAIDESEiBAVBYf/EABUBAQEAAAAAAAAAAAAAAAAAAAIF/8QAGhEBAAIDAQAAAAAAAAAAAAAAAQACAyFhkf/aAAwDAQACEQMRAD8AhRcmV3XwOJaS+ba2Db3OMq6DYBNWfiIpFstw1Z95Agz/2Q=="}},356:(e,A,s)=>{e.exports={src:{srcSet:s.p+"assets/ideal-img/vignette.c4cfa74.640.jpg 640w,"+s.p+"assets/ideal-img/vignette.0feefd7.1024.jpg 1024w",images:[{path:s.p+"assets/ideal-img/vignette.c4cfa74.640.jpg",width:640,height:216},{path:s.p+"assets/ideal-img/vignette.0feefd7.1024.jpg",width:1024,height:346}],src:s.p+"assets/ideal-img/vignette.c4cfa74.640.jpg",toString:function(){return s.p+"assets/ideal-img/vignette.c4cfa74.640.jpg"},placeholder:void 0,width:640,height:216},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAADAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEG/8QAIBAAAQQBBAMAAAAAAAAAAAAAAQACAxEEBRQjMkNRcf/EABUBAQEAAAAAAAAAAAAAAAAAAAME/8QAFhEBAQEAAAAAAAAAAAAAAAAAAQAC/9oADAMBAAIRAxEAPwC6nFG2YVGyzIQSWgmqWXyQzcS8GP3PhZ7+IiiwTpf/2Q=="}},5434:(e,A,s)=>{"use strict";s.r(A),s.d(A,{assets:()=>g,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>n,toc:()=>l});var i=s(5893),a=s(1151),t=s(2986);const o={description:"Best practices for flying and stitching imagery"},r="Create Successful Maps",n={id:"references/create-successful-maps",title:"Create Successful Maps",description:"Best practices for flying and stitching imagery",source:"@site/docs/03-references/15-create-successful-maps.md",sourceDirName:"03-references",slug:"/references/create-successful-maps",permalink:"/references/create-successful-maps",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:15,frontMatter:{description:"Best practices for flying and stitching imagery"},sidebar:"tutorialSidebar",previous:{title:"Task Options",permalink:"/references/task-options"}},g={},l=[{value:"Understanding the process",id:"understanding-the-process",level:2},{value:"Fly Higher",id:"fly-higher",level:2},{value:"Fly on Overcast Days",id:"fly-on-overcast-days",level:2},{value:"Fly Between 10am and 2pm",id:"fly-between-10am-and-2pm",level:2},{value:"Increase Overlap",id:"increase-overlap",level:2},{value:"Fly on Calm Days",id:"fly-on-calm-days",level:2},{value:"Hover While Taking Images",id:"hover-while-taking-images",level:2},{value:"Common Problems",id:"common-problems",level:2},{value:"Motion Blur",id:"motion-blur",level:3},{value:"Out of Focus Camera",id:"out-of-focus-camera",level:3},{value:"Vignetting",id:"vignetting",level:3},{value:"Insufficient Overlap",id:"insufficient-overlap",level:3},{value:"Horizon Images",id:"horizon-images",level:3},{value:"Low Altitude Images",id:"low-altitude-images",level:3},{value:"Featureless Images",id:"featureless-images",level:3}];function h(e){const A=Object.assign({h1:"h1",p:"p",a:"a",h2:"h2",h3:"h3"},(0,a.ah)(),e.components);return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(A.h1,{id:"create-successful-maps",children:"Create Successful Maps"}),"\n",(0,i.jsx)(A.p,{children:"A good map is defined as having near perfect coverage and high quality."}),"\n",(0,i.jsxs)(A.p,{children:["However, sometimes regions might be missing or results are distorted. Creating maps from imagery is a ",(0,i.jsx)(A.a,{href:"https://en.wikipedia.org/wiki/Photogrammetry",children:"photogrammetry"})," process which can be a bit tricky to predict. In a way, it's more art than science."]}),"\n",(0,i.jsx)(A.h2,{id:"understanding-the-process",children:"Understanding the process"}),"\n",(0,i.jsx)(A.p,{children:'Each image has "features", or recognizable items such as corners, buildings, trees, cars, etc.'}),"\n",(0,i.jsx)(A.p,{children:"By taking overlapping images, these features can be tracked and matched across images. This process can sometimes fail and the result is either a processing error or bad quality results."}),"\n",(0,i.jsx)(A.p,{children:"Below we list recommendations to achieve best results."}),"\n",(0,i.jsx)(A.h2,{id:"fly-higher",children:"Fly Higher"}),"\n",(0,i.jsx)(A.p,{children:"Fly at the optimal altitude for your desired target resolution. Don't fly lower than you absolutely need to. Higher elevation enhances feature matching, reduces distortion near building edges, and allows for greater image overlap and coverage. It also reduces the data capture time."}),"\n",(0,i.jsx)(A.h2,{id:"fly-on-overcast-days",children:"Fly on Overcast Days"}),"\n",(0,i.jsx)(A.p,{children:"Whenever feasible, fly in cloudy conditions. Clouds scatter sunlight, yielding soft lighting that minimizes blurriness, shadows, and enhances color quality."}),"\n",(0,i.jsx)(A.h2,{id:"fly-between-10am-and-2pm",children:"Fly Between 10am and 2pm"}),"\n",(0,i.jsx)(A.p,{children:"When the sun is directly overhead, there will be less shadows and more\neven lighting."}),"\n",(0,i.jsx)(A.h2,{id:"increase-overlap",children:"Increase Overlap"}),"\n",(0,i.jsx)(A.p,{children:"More images means more matches between images."}),"\n",(0,i.jsx)(A.h2,{id:"fly-on-calm-days",children:"Fly on Calm Days"}),"\n",(0,i.jsx)(A.p,{children:"Strong winds can make it challenging for your drone to stabilize the camera, resulting in blurrier images."}),"\n",(0,i.jsx)(A.h2,{id:"hover-while-taking-images",children:"Hover While Taking Images"}),"\n",(0,i.jsx)(A.p,{children:"For drones with rolling shutter cameras (common in consumer-grade drones), direct the flight controller to hover before capturing an image to improve reconstruction accuracy. This isn't as much of a concern with drones using global shutter cameras."}),"\n",(0,i.jsx)(A.h2,{id:"common-problems",children:"Common Problems"}),"\n",(0,i.jsx)(A.h3,{id:"motion-blur",children:"Motion Blur"}),"\n",(0,i.jsx)(A.p,{children:"This indicates either an inadequate shutter speed or excessive flight speed. The optimal solution is to enhance the shutter speed, though flying at a slower pace or greater altitude can also mitigate the issue."}),"\n",(0,i.jsx)(t.Z,{img:s(5406),alt:"Normal (left) vs. Blur (right)"}),"\n",(0,i.jsx)(A.h3,{id:"out-of-focus-camera",children:"Out of Focus Camera"}),"\n",(0,i.jsx)(A.p,{children:"Ensure autofocus is enabled, and check for any lens dust or particles."}),"\n",(0,i.jsx)(t.Z,{img:s(8557),alt:"Normal (left) vs. Out of focus (right)"}),"\n",(0,i.jsx)(A.h3,{id:"vignetting",children:"Vignetting"}),"\n",(0,i.jsx)(A.p,{children:"Vignetting results from insufficient light. Flying again at a brighter time of the day can alleviate this issue."}),"\n",(0,i.jsx)(t.Z,{img:s(356),alt:"Normal (left) vs. Vignette (right)"}),"\n",(0,i.jsx)(A.h3,{id:"insufficient-overlap",children:"Insufficient Overlap"}),"\n",(0,i.jsx)(A.p,{children:"Low overlap can make it difficult for the software to find sufficient matches between images."}),"\n",(0,i.jsx)(A.h3,{id:"horizon-images",children:"Horizon Images"}),"\n",(0,i.jsx)(A.p,{children:"Incorporating the horizon can distort the map distance. The software will prioritize distant areas, rather than the immediate area of interest below. Avoid images of the horizon."}),"\n",(0,i.jsx)(t.Z,{img:s(628),alt:"Including images like this one will likely cause trouble",padded:!0}),"\n",(0,i.jsx)(A.h3,{id:"low-altitude-images",children:"Low Altitude Images"}),"\n",(0,i.jsx)(A.p,{children:"Taking images at a low altitude can result in blurry/distorted results."}),"\n",(0,i.jsx)(A.h3,{id:"featureless-images",children:"Featureless Images"}),"\n",(0,i.jsxs)(A.p,{children:["Images of water, sand, snow and uniform crop fields have little color variation and few distinguishable patterns. They can be difficult to reconstruct. See ",(0,i.jsx)(A.a,{href:"/getting-started/image-capture",children:"image capture"})," for guidelines on capturing some of these types of terrain."]}),"\n",(0,i.jsx)(t.Z,{img:s(5363),alt:"It can be difficult to find matches in images like this one",padded:!0})]})}const c=function(e={}){const{wrapper:A}=Object.assign({},(0,a.ah)(),e.components);return A?(0,i.jsx)(A,Object.assign({},e,{children:(0,i.jsx)(h,e)})):h(e)}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.47317cf3.js b/assets/js/935f2afb.47317cf3.js new file mode 100644 index 0000000..26be9dc --- /dev/null +++ b/assets/js/935f2afb.47317cf3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Getting Started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Image Capture","href":"/getting-started/image-capture","docId":"getting-started/image-capture","unlisted":false},{"type":"link","label":"Getting GCPs (optional)","href":"/getting-started/getting-ground-control-points","docId":"getting-started/getting-ground-control-points","unlisted":false},{"type":"link","label":"Creating a Task","href":"/getting-started/creating-a-task","docId":"getting-started/creating-a-task","unlisted":false}],"href":"/"},{"type":"category","label":"How To","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Use Ground Control Points","href":"/how-to/ground-control-points","docId":"how-to/ground-control-points","unlisted":false},{"type":"link","label":"Use Image Masks","href":"/how-to/image-masks","docId":"how-to/image-masks","unlisted":false},{"type":"link","label":"Share Results","href":"/how-to/share-results","docId":"how-to/share-results","unlisted":false}],"href":"/how-to/"},{"type":"category","label":"References","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Task Options","href":"/references/task-options","docId":"references/task-options","unlisted":false},{"type":"link","label":"Create Successful Maps","href":"/references/create-successful-maps","docId":"references/create-successful-maps","unlisted":false}],"href":"/references/"}]},"docs":{"getting-started/creating-a-task":{"id":"getting-started/creating-a-task","title":"Creating a Task","description":"How to upload images to WebODM Lightning for processing","sidebar":"tutorialSidebar"},"getting-started/getting-ground-control-points":{"id":"getting-started/getting-ground-control-points","title":"Getting GCPs (optional)","description":"It\'s highly recommended to use Ground Control Points (GCPs) if your images are not georeferenced. When images are not georeferenced, not using GCPs will cause your models to be improperly oriented and scaled.","sidebar":"tutorialSidebar"},"getting-started/image-capture":{"id":"getting-started/image-capture","title":"Image Capture","description":"How to capture good datasets","sidebar":"tutorialSidebar"},"how-to/ground-control-points":{"id":"how-to/ground-control-points","title":"Use Ground Control Points","description":"How to create and use ground control points","sidebar":"tutorialSidebar"},"how-to/image-masks":{"id":"how-to/image-masks","title":"Use Image Masks","description":"How to create and use image masks","sidebar":"tutorialSidebar"},"how-to/share-results":{"id":"how-to/share-results","title":"Share Results","description":"How to share results with others","sidebar":"tutorialSidebar"},"references/create-successful-maps":{"id":"references/create-successful-maps","title":"Create Successful Maps","description":"Best practices for flying and stitching imagery","sidebar":"tutorialSidebar"},"references/task-options":{"id":"references/task-options","title":"Task Options","description":"Learn about the task options to improve results.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.9260c978.js b/assets/js/935f2afb.9260c978.js deleted file mode 100644 index 95cf417..0000000 --- a/assets/js/935f2afb.9260c978.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Getting Started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Image Capture","href":"/getting-started/image-capture","docId":"getting-started/image-capture","unlisted":false},{"type":"link","label":"Getting GCPs (optional)","href":"/getting-started/getting-ground-control-points","docId":"getting-started/getting-ground-control-points","unlisted":false},{"type":"link","label":"Creating a Task","href":"/getting-started/creating-a-task","docId":"getting-started/creating-a-task","unlisted":false}],"href":"/"},{"type":"category","label":"How To","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Use Ground Control Points","href":"/how-to/ground-control-points","docId":"how-to/ground-control-points","unlisted":false},{"type":"link","label":"Use Image Masks","href":"/how-to/image-masks","docId":"how-to/image-masks","unlisted":false},{"type":"link","label":"Share Results","href":"/how-to/share-results","docId":"how-to/share-results","unlisted":false}],"href":"/how-to/"},{"type":"category","label":"References","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Task Options","href":"/references/task-options","docId":"references/task-options","unlisted":false}],"href":"/references/"}]},"docs":{"getting-started/creating-a-task":{"id":"getting-started/creating-a-task","title":"Creating a Task","description":"How to upload images to WebODM Lightning for processing","sidebar":"tutorialSidebar"},"getting-started/getting-ground-control-points":{"id":"getting-started/getting-ground-control-points","title":"Getting GCPs (optional)","description":"It\'s highly recommended to use Ground Control Points (GCPs) if your images are not georeferenced. When images are not georeferenced, not using GCPs will cause your models to be improperly oriented and scaled.","sidebar":"tutorialSidebar"},"getting-started/image-capture":{"id":"getting-started/image-capture","title":"Image Capture","description":"How to capture good datasets","sidebar":"tutorialSidebar"},"how-to/ground-control-points":{"id":"how-to/ground-control-points","title":"Use Ground Control Points","description":"How to create and use ground control points","sidebar":"tutorialSidebar"},"how-to/image-masks":{"id":"how-to/image-masks","title":"Use Image Masks","description":"How to create and use image masks","sidebar":"tutorialSidebar"},"how-to/share-results":{"id":"how-to/share-results","title":"Share Results","description":"How to share results with others","sidebar":"tutorialSidebar"},"references/task-options":{"id":"references/task-options","title":"Task Options","description":"Learn about the task options to improve results.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/e1835986.1b98d163.js b/assets/js/e1835986.1b98d163.js deleted file mode 100644 index e9ddd31..0000000 --- a/assets/js/e1835986.1b98d163.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[68],{3225:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/accessing_task_options.8c32ff3.640.png 640w,"+i.p+"assets/ideal-img/accessing_task_options.7eb1c9c.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/accessing_task_options.8c32ff3.640.png",width:640,height:427},{path:i.p+"assets/ideal-img/accessing_task_options.7eb1c9c.1024.png",width:1024,height:683}],src:i.p+"assets/ideal-img/accessing_task_options.8c32ff3.640.png",toString:function(){return i.p+"assets/ideal-img/accessing_task_options.8c32ff3.640.png"},placeholder:void 0,width:640,height:427},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAYAAAAxrNxjAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA1UlEQVR4nDWOO0vEUBCF7/9vbW1FkLWwsbHTRgSJuKgpXNRkdxUlibmP3GfuJzfqwDBn4JszR0hl8CHwXznnZV5d33JweMTp+QWbpkFM1qHNhDET2hiU0ngfln34HpFKYZ1DGGPo+h4pFcMo0dYR07w4l04p4b1HaF3AgRgTzjren+rct20uQLAWa+0vWMTH5xePzxu887xVVd7XdQ4pYYvrX27hnKPrel63O5Q2hBDw84zZNoxnJ6yOV1zeVIjyYk5puYoxLmDJGMYB93DP+m7NS7vnBwXmCWDEv55EAAAAAElFTkSuQmCC"}},687:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/auto_boundary.016d390.640.png 640w,"+i.p+"assets/ideal-img/auto_boundary.5762f42.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/auto_boundary.016d390.640.png",width:640,height:201},{path:i.p+"assets/ideal-img/auto_boundary.5762f42.1024.png",width:1024,height:322}],src:i.p+"assets/ideal-img/auto_boundary.016d390.640.png",toString:function(){return i.p+"assets/ideal-img/auto_boundary.016d390.640.png"},placeholder:void 0,width:640,height:201},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAC4jAAAuIwF4pT92AAAAUUlEQVR4nFWKsQkAIRDA3H8Rl7BzAq0OKxeQQ1CwECMKwn8gVWLWWhxSSjjnEBF675RSaK3ddjBvDCFgrSXGiKpSa+W135hzxnvPGIM55/XLBg6CcbB/3jGXAAAAAElFTkSuQmCC"}},6826:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/cutline.54e0da2.640.png 640w,"+i.p+"assets/ideal-img/cutline.008d29b.1003.png 1003w",images:[{path:i.p+"assets/ideal-img/cutline.54e0da2.640.png",width:640,height:561},{path:i.p+"assets/ideal-img/cutline.008d29b.1003.png",width:1003,height:879}],src:i.p+"assets/ideal-img/cutline.54e0da2.640.png",toString:function(){return i.p+"assets/ideal-img/cutline.54e0da2.640.png"},placeholder:void 0,width:640,height:561},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAJCAIAAACExCpEAAAACXBIWXMAAC4jAAAuIwF4pT92AAABHklEQVR4nGP49+/f379/////9////99/fhw7c3bp8tZr13f/////37+/DP/+gSQ+ffl04OyG3gVFHRMrypqcZs6v+vsXJM7w5v2rdftnpTV4p9f59c7JmDA7f83KOdnVTkdO7wNJL9881zdHM608vn96c0lDZmNnce/03JrWiCWrJoGk569tzG8InTGno2liUEV7+IRpdd5J2vmF2WsWz33y9AHD+u3z16yc3j4xobjZIb8qvrO7Jzk/NDY1LDrJ9cTRowy3rt5r7k0obbHtnZQyacLUjp7OxHyf2EzrBUs6//35z/D///+T53e29Sd3dZfmlEaFxrvnlvotWdn3/fsPkN0Qj71583r16nkbli2cPaN947rlP358A/v7HwAIX7JDXNvkxwAAAABJRU5ErkJggg=="}},6945:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/dem_euclidean_map.9c919a6.640.png 640w,"+i.p+"assets/ideal-img/dem_euclidean_map.3515974.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/dem_euclidean_map.9c919a6.640.png",width:640,height:209},{path:i.p+"assets/ideal-img/dem_euclidean_map.3515974.1024.png",width:1024,height:334}],src:i.p+"assets/ideal-img/dem_euclidean_map.9c919a6.640.png",toString:function(){return i.p+"assets/ideal-img/dem_euclidean_map.9c919a6.640.png"},placeholder:void 0,width:640,height:209},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAD+wAAA/sAFldtx/AAAAeUlEQVR4nD3MsQ3DIBBAUYZIkXU8QSbxFhkhDStQgdKAKCiQ6LggneBwhSy3LOCKyBT+9dNnjDGmlFq11ocxZpNSLs65ByL+EHFPKX0uM7PWvgFglFJGrfUlhHi21s7e+yCi7w1jjKv3/gghbES0cM7nMee8A8A8/gH8rEdrhZWwtwAAAABJRU5ErkJggg=="}},4022:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/dem_gapfill_interpolation.f268334.640.png 640w,"+i.p+"assets/ideal-img/dem_gapfill_interpolation.c5d5604.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/dem_gapfill_interpolation.f268334.640.png",width:640,height:244},{path:i.p+"assets/ideal-img/dem_gapfill_interpolation.c5d5604.1024.png",width:1024,height:391}],src:i.p+"assets/ideal-img/dem_gapfill_interpolation.f268334.640.png",toString:function(){return i.p+"assets/ideal-img/dem_gapfill_interpolation.f268334.640.png"},placeholder:void 0,width:640,height:244},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAACXBIWXMAAD+wAAA/sAFldtx/AAAAcElEQVR4nGNgYGBgZIAApmnTpvUdPXp0spmZGR8DAwM3VBwC/v//D1PIcuzYsRMXL148b2NjI8jAwMBrb2/PgqFw//79LBs3bjy5bNmy87q6uiCFQsbGxqzIhsJMZE5PT2/Kzc1tV1FRAVnNiyTHAAC5hyEXs8gAbAAAAABJRU5ErkJggg=="}},5497:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/dem_gapfill_steps.8588601.640.png 640w,"+i.p+"assets/ideal-img/dem_gapfill_steps.b503622.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/dem_gapfill_steps.8588601.640.png",width:640,height:209},{path:i.p+"assets/ideal-img/dem_gapfill_steps.b503622.1024.png",width:1024,height:334}],src:i.p+"assets/ideal-img/dem_gapfill_steps.8588601.640.png",toString:function(){return i.p+"assets/ideal-img/dem_gapfill_steps.8588601.640.png"},placeholder:void 0,width:640,height:209},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAD+wAAA/sAFldtx/AAAAhElEQVR4nGO4ePFi/IWzZyMYGBhYDlVWip5pbc3eUlrqyMDAwHDL0THzuqPjgtPW1g4ML168+Hj16tWHDAwMnDe6u03fzp79/3BNzTyQwuceHsf++fv/P2Vh0c5w7ty55GXLlsUwMDAwHWptFd1TX18wJy0NbOJ1J6f0S/b2Cw6amtoBAIA1NfYVmPJaAAAAAElFTkSuQmCC"}},8e3:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/dem_resolution.8d48364.640.png 640w,"+i.p+"assets/ideal-img/dem_resolution.d60f959.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/dem_resolution.8d48364.640.png",width:640,height:209},{path:i.p+"assets/ideal-img/dem_resolution.d60f959.1024.png",width:1024,height:334}],src:i.p+"assets/ideal-img/dem_resolution.8d48364.640.png",toString:function(){return i.p+"assets/ideal-img/dem_resolution.8d48364.640.png"},placeholder:void 0,width:640,height:209},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAD+wAAA/sAFldtx/AAAAX0lEQVR4nGNggABmBgYGFgYGBkFvb2+X+vp6ozNnzrBC5RBAXFycm4GBQVhMTEzp4cOHd9++ffv/1KlTpiC5////M8EV/v//nxFE19fXs929e3f//fv3nx0/flwPWSEAg14j0VhN1EMAAAAASUVORK5CYII="}},1112:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/dsm_vs_dtm.8e18349.640.png 640w,"+i.p+"assets/ideal-img/dsm_vs_dtm.0a8b2b0.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/dsm_vs_dtm.8e18349.640.png",width:640,height:149},{path:i.p+"assets/ideal-img/dsm_vs_dtm.0a8b2b0.1024.png",width:1024,height:238}],src:i.p+"assets/ideal-img/dsm_vs_dtm.8e18349.640.png",toString:function(){return i.p+"assets/ideal-img/dsm_vs_dtm.8e18349.640.png"},placeholder:void 0,width:640,height:149},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAACCAYAAABhYU3QAAAACXBIWXMAACqnAAAqpwFRLbg4AAAASElEQVR4nCWKMQrAIBTF0m5W4Vnon7oJ3kJw8twe7ZdPsyUE4ABq7/2dcz7AyU8dY9jeu7h7PFwRJd2tNQEZSOGS6lorm1n5AKZMChB4P1aFAAAAAElFTkSuQmCC"}},2021:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/graph_rounds.27da6b9.640.png 640w,"+i.p+"assets/ideal-img/graph_rounds.a6eb5b2.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/graph_rounds.27da6b9.640.png",width:640,height:201},{path:i.p+"assets/ideal-img/graph_rounds.a6eb5b2.1024.png",width:1024,height:322}],src:i.p+"assets/ideal-img/graph_rounds.27da6b9.640.png",toString:function(){return i.p+"assets/ideal-img/graph_rounds.27da6b9.640.png"},placeholder:void 0,width:640,height:201},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAC4jAAAuIwF4pT92AAAAXUlEQVR4nD3MMQ4AEQBE0b3/GXRugcYFnEEjEUFQKBT+hmR32v8yz96bs9YaSilKKYwx0FrjvWetdfvzwZwzUkpijKSUEELgnGPOyTE/PI/GGGqt9N6x1hJCuOjAF6INbuOiP+3lAAAAAElFTkSuQmCC"}},7913:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/image_features.9903742.640.png 640w,"+i.p+"assets/ideal-img/image_features.bdf6684.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/image_features.9903742.640.png",width:640,height:239},{path:i.p+"assets/ideal-img/image_features.bdf6684.1024.png",width:1024,height:383}],src:i.p+"assets/ideal-img/image_features.9903742.640.png",toString:function(){return i.p+"assets/ideal-img/image_features.9903742.640.png"},placeholder:void 0,width:640,height:239},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAIAAAA4WjmaAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAh0lEQVR4nAF8AIP/ANHBuqKpcai0ea62fKOpd52TntXM28/Ctp6obqCubADWw8awsYWcrGmmsnehp3K1qK/Px9bVw8GqrXyYqWMA1r/HurKVmKJmna5spa12x7/FxcDN18HGt7ORlqJkANjI09bFv52hbZmpY6WzecfBycW/zN7O2dDBtpObXzdgUD0+kIncAAAAAElFTkSuQmCC"}},573:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/input_surface_model.edc62f8.640.png 640w,"+i.p+"assets/ideal-img/input_surface_model.1366932.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/input_surface_model.edc62f8.640.png",width:640,height:512},{path:i.p+"assets/ideal-img/input_surface_model.1366932.1024.png",width:1024,height:819}],src:i.p+"assets/ideal-img/input_surface_model.edc62f8.640.png",toString:function(){return i.p+"assets/ideal-img/input_surface_model.edc62f8.640.png"},placeholder:void 0,width:640,height:512},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAB7CAAAewgFu0HU+AAABJUlEQVR4nBXBzUvCYADA4f2JXQPRQtJiiR/T8HU1p1Nn6lTMGX6sUvMDMiWSokKITkHeCqJrh+jUJTz/oueRfr5/mc2XmOMpteqc5GBKzu6R605I2T0Wzy/8k64flrgzdTx5i2ixj1w9JWbF8BspvAdpvMk4rx9vSE77HiV8jKa0SETqxIM19kJN9kUToRfwCJVGq4NUlpuINYO4y0RsFCm5HcrBMWX1BkNvsalWqNRvkfLmENVnY/octHWLrNvG2h2ST8zQUmf4jTxG1kaKDs7ZDlpUQ1NUv03Se0RFucQQI4zMFXJGJxwTSPpogitySNrfJbFuoe200QJ1FLmI0E/Y0gOUqibS++cX7bsFzcoEJ3lBwexjptsUjCENp8Ps6ZHVasUfWJLWrONBbVYAAAAASUVORK5CYII="}},8612:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/matcher_neighbors.f438a64.640.png 640w,"+i.p+"assets/ideal-img/matcher_neighbors.5df57b1.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/matcher_neighbors.f438a64.640.png",width:640,height:202},{path:i.p+"assets/ideal-img/matcher_neighbors.5df57b1.1024.png",width:1024,height:323}],src:i.p+"assets/ideal-img/matcher_neighbors.f438a64.640.png",toString:function(){return i.p+"assets/ideal-img/matcher_neighbors.f438a64.640.png"},placeholder:void 0,width:640,height:202},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAITvAACE7wFO9C1tAAAAXUlEQVR4nD3MMQ6EIBBA0V86065KWLfxbLQUXIIODjChp+aIBrP665cPQK1VWmuulLL23l0IwQEfVfWATHNnZjrG+IrIEWM8U0oTTPwD9IXPMee8mZn/H1dgB5aJLp9bGL/3j5I9AAAAAElFTkSuQmCC"}},852:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/mesh_octree_depth_comp.924da56.640.png 640w,"+i.p+"assets/ideal-img/mesh_octree_depth_comp.07f978e.867.png 867w",images:[{path:i.p+"assets/ideal-img/mesh_octree_depth_comp.924da56.640.png",width:640,height:893},{path:i.p+"assets/ideal-img/mesh_octree_depth_comp.07f978e.867.png",width:867,height:1210}],src:i.p+"assets/ideal-img/mesh_octree_depth_comp.924da56.640.png",toString:function(){return i.p+"assets/ideal-img/mesh_octree_depth_comp.924da56.640.png"},placeholder:void 0,width:640,height:893},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAC4jAAAuIwF4pT92AAAB0ElEQVR4nBXOa1eaAACAYX5DH3bLNptCIio0lBIFJBUUFa9DWxdXmpdW6dY51dlZH/bL3509v+ARft3O+bNd0a0dsZgMsCyDmmcQhmWeNnOeNhvklIIgpnY4nX3j5+srd8s5q9mY6+kFP9YLZldn9Dou8+8RQtmKMZw4nC0jppcu7W6R2c09zy9/eX75Tc3LYJb3ERrVLO0gxSBU6fcM/DDHaNRkub4j+l+xddpBAcE/UQjbWTptlU6QI2jKdDoZypZEWokzHgxYTi8RGnUZryZRtUW0wz2KxQSWmcS2daJRxHZ5w2YxRzCNBIUvHynkY3w+2CFx8Bb9UKF5es7Z9YLxMOLxdoWQSu/SajjkNYl62SAlxUnLIrIiYhZ1qpUyzRMTQZQ/cNL28IKAYRgw+RoyiSJGgy69ThNVTeDYGkIuk6Zkq5iugesoWJbGYDBmvXrg4mKKbiTJqO8QdG2fo0KcaiVFvZ6lVBExzUP6/SH9URfbydFq5BHsooRbkXBsCb+u0Gop+L7CcVGkZKZZX53zsnlAKBx9Qs/HcEpJcrld8oV9PDeNV80T+D5PD/e8Pm4RJOUNcvY9uhEno+2hajFcM8OxbRH0hrSaLbbrJf8Ajnv77CkwbM8AAAAASUVORK5CYII="}},8539:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/normal_vs_fastortho.c9f349e.640.jpg 640w,"+i.p+"assets/ideal-img/normal_vs_fastortho.6237a5f.1024.jpg 1024w",images:[{path:i.p+"assets/ideal-img/normal_vs_fastortho.c9f349e.640.jpg",width:640,height:728},{path:i.p+"assets/ideal-img/normal_vs_fastortho.6237a5f.1024.jpg",width:1024,height:1165}],src:i.p+"assets/ideal-img/normal_vs_fastortho.c9f349e.640.jpg",toString:function(){return i.p+"assets/ideal-img/normal_vs_fastortho.c9f349e.640.jpg"},placeholder:void 0,width:640,height:728},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAALAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAQMF/8QAIhAAAwABAwMFAAAAAAAAAAAAAQIDBAAREgUhMQYUQVFh/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgT/xAAbEQACAQUAAAAAAAAAAAAAAAAAAQIDEjFR0f/aAAwDAQACEQMRAD8AyrmIhFY4J4tSfLIaZGy9/keSfrTUxWrg+mjQgkc/Z7cv3bT1a1Ev0/HRysaZaBlHggb7apm2rHMvObsqJRlUA+AD21Paot8Wg08H/9k="}},1855:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/options_as_shown_in_webodm.c8bf853.640.png 640w,"+i.p+"assets/ideal-img/options_as_shown_in_webodm.029ceb6.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/options_as_shown_in_webodm.c8bf853.640.png",width:640,height:527},{path:i.p+"assets/ideal-img/options_as_shown_in_webodm.029ceb6.1024.png",width:1024,height:843}],src:i.p+"assets/ideal-img/options_as_shown_in_webodm.c8bf853.640.png",toString:function(){return i.p+"assets/ideal-img/options_as_shown_in_webodm.c8bf853.640.png"},placeholder:void 0,width:640,height:527},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAC4jAAAuIwF4pT92AAAAy0lEQVR4nG2PvU7DMBSF/fTMjIiFiRdg7hMwBoUOIFdEKSV2Eit22tgJ9ocSVEtIHOnoDvc790cUr2/I6pP6S2Ps+Mf94HAXz/79gFCqwbozMSX+0xIjRVkijqeGzgwZ9vPMGll9DVd1jahPGusueB+YQuC5KAghbECMcatKK4TWGh8C1o0M611mYJr8BnxfQaUQTaNw45nJ/zZXpZSyM6jUOnHOa/ITy4Lue+THkZdyj5BSYq2l67rNbdtijOFQVTztdtzc3nH/8MgP0c8wqoY6AZYAAAAASUVORK5CYII="}},310:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/pc_filter.de9d1d3.640.png 640w,"+i.p+"assets/ideal-img/pc_filter.543cd6a.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/pc_filter.de9d1d3.640.png",width:640,height:250},{path:i.p+"assets/ideal-img/pc_filter.543cd6a.1024.png",width:1024,height:401}],src:i.p+"assets/ideal-img/pc_filter.de9d1d3.640.png",toString:function(){return i.p+"assets/ideal-img/pc_filter.de9d1d3.640.png"},placeholder:void 0,width:640,height:250},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAACXBIWXMAAJqLAACaiwH9WadrAAAAqUlEQVR4nGNgYGBg+G9qKvzOwED/tb6+w2N9fe9zWlohBzQ0Avdradn8t7AQAqlhuKWhYXFBXT3vha5u6gtd3ZTDWlqVBzQ1qw9qa9fs1NBoOaulVfRfX9+A4b6hoeU1S8uKV7q6qW/09JJ3a2o27tPSqjuppVV+TFOzar+GRu1zfX0zsKn/AwPFQFZ/0te3fqSn535ZW9v3hq6u8x0dHZNPBgaiDAwMjAC8BDcm+o8xnQAAAABJRU5ErkJggg=="}},6481:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/pc_skip_geometric.1e29e16.640.png 640w,"+i.p+"assets/ideal-img/pc_skip_geometric.131d733.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/pc_skip_geometric.1e29e16.640.png",width:640,height:186},{path:i.p+"assets/ideal-img/pc_skip_geometric.131d733.1024.png",width:1024,height:298}],src:i.p+"assets/ideal-img/pc_skip_geometric.1e29e16.640.png",toString:function(){return i.p+"assets/ideal-img/pc_skip_geometric.1e29e16.640.png"},placeholder:void 0,width:640,height:186},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAABXWAAAV1gHWa1n9AAAAe0lEQVR4nBXITQuCMACA4f3MmhlKh5ia1CE61FYSmxRIh+oiROEHdpo/8Y2e4yPW40g+dKRtS9r1qNebzf++HUnTkPUDSdMitt6jnCatP0TVndBV7PyIsnuWz5r49mBSOITUluB8ZaZL5Mowjw3BwTItSkJzQeZHosWJH8zdS+td3cWYAAAAAElFTkSuQmCC"}},7041:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/point_cloud_and_shrinked_bounds.4690649.640.png 640w,"+i.p+"assets/ideal-img/point_cloud_and_shrinked_bounds.9d69fa9.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/point_cloud_and_shrinked_bounds.4690649.640.png",width:640,height:192},{path:i.p+"assets/ideal-img/point_cloud_and_shrinked_bounds.9d69fa9.1024.png",width:1024,height:307}],src:i.p+"assets/ideal-img/point_cloud_and_shrinked_bounds.4690649.640.png",toString:function(){return i.p+"assets/ideal-img/point_cloud_and_shrinked_bounds.4690649.640.png"},placeholder:void 0,width:640,height:192},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAC1HAAAtRwHZ/3hdAAAAg0lEQVR4nBXKLwqCMRgH4BfEZPYAmg0ieAGLybsMdgT7DrC8E3xh7F/Z+2OsyT6wWLRosNsnqw8PEdFaKXWx1r6mabp571dERDnnA4AngK+UcjeMmPk6z3Nn5p8xZk9Ei1qrTCn1EEJvrZ3HWwohTs65D4CH1nozMMa4ZeY7gHcp5fgH+B5AwRa0+RIAAAAASUVORK5CYII="}},4242:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/point_cloud_classification.948f54d.640.png 640w,"+i.p+"assets/ideal-img/point_cloud_classification.7061409.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/point_cloud_classification.948f54d.640.png",width:640,height:612},{path:i.p+"assets/ideal-img/point_cloud_classification.7061409.1024.png",width:1024,height:979}],src:i.p+"assets/ideal-img/point_cloud_classification.948f54d.640.png",toString:function(){return i.p+"assets/ideal-img/point_cloud_classification.948f54d.640.png"},placeholder:void 0,width:640,height:612},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABZUlEQVR4nAXB4U8SYQDA4fcm4iUaSBPd3hRJp8jhmTpLEIaA6KFysCs80EgMPDAOtXYoq7U+9If/eh4xab6gVj122k8Ytx2Kzoi1q1+ErBGTFQ9fZYS/+oyIlBsUW6f0H064c8v0HmoMht+wOzfsWJdolsPrwjUiZe3z/OOEp55Fs31Ix31Pf5jF+2lj1bM0v1houTxCXdXJHOe4MHNUamkajSO+tk1q9gUfMrs0W030bAmhRKKI0BK++XdMy3WWEykWNvaYW9EIxzZZjOso88uIqaKLWnZZadkkhwWM+yTpKwP56RL/mcNE/jv+0hChdk3k31M2xxaxf+dsj+uYj+fYv7fQx/sUugcE6yYi4GSIe3fsDXrIP8fIrsP6rYvmDNgYH9DyosQaKYRPJpnV8iyUckSreeLtMnrfIH2f5eN1gq3PBjOJI4QyG0YEgiivwiiBNwSX3jItJREZQo1IlDmJEgjxHw4drU0Ck7bUAAAAAElFTkSuQmCC"}},982:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/sky_removal.8825760.640.png 640w,"+i.p+"assets/ideal-img/sky_removal.340e22d.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/sky_removal.8825760.640.png",width:640,height:711},{path:i.p+"assets/ideal-img/sky_removal.340e22d.1024.png",width:1024,height:1138}],src:i.p+"assets/ideal-img/sky_removal.8825760.640.png",toString:function(){return i.p+"assets/ideal-img/sky_removal.8825760.640.png"},placeholder:void 0,width:640,height:711},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAALCAYAAABGbhwYAAAACXBIWXMAABXXAAAV1wEELLsZAAABnElEQVR4nB3Da09ScQDA4f83gKWsVi9CYybOkcoZR6Wt7K4QRMCRq3q4nTM4XBygE4iblVhJxYtaW2/cetHWZX2E1hc6H+HX5rM9wmKxMz09x+Liba5dXeDhpsL9TQXX8l3kO0Hmb21gtc4i7PZ7PHiSRasOSes99OY7MvsnF3e1QwqHI9xrCmJ1tUz/+BOaXsaoHNAdnNAbviKb0wn6A5y+fU21PUY8enzGcfeUip4kV8jQG3ToDlrkC7v4fRv02/vEUwOEmvnHi6Pv5PNnROOfCcdGBKM9ovEJEaWPpr8hkfiJkOUykmSwsmLgkWosL+kXPVIVSargdmvIch5htc5waWoOx00Z22UnDuc61x0ebFfmmZldYsrmxGq5gVhwKoRjTRJqnefJOrnqS1Sjhy9cJBRRiSWLuFwJhNd7RLv1nkatxEGjwccPYyaTMc16FSUSZNhpse4tIEKhcwadEVp2j3BcJ1dskNHKbCd1tnxPqRkltnwjhKr+NY3SbzOV/mYq27/MwLMvpj8wMZXYD1OJnZupva9meueP+R/qVOIvU3e33wAAAABJRU5ErkJggg=="}},4152:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/smrf_model_default.a075320.640.png 640w,"+i.p+"assets/ideal-img/smrf_model_default.9b6ba4c.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/smrf_model_default.a075320.640.png",width:640,height:512},{path:i.p+"assets/ideal-img/smrf_model_default.9b6ba4c.1024.png",width:1024,height:819}],src:i.p+"assets/ideal-img/smrf_model_default.a075320.640.png",toString:function(){return i.p+"assets/ideal-img/smrf_model_default.a075320.640.png"},placeholder:void 0,width:640,height:512},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAB7CAAAewgFu0HU+AAABKElEQVR4nAXBS0sCUQCA0fmN7SqoRRIUiQ8KJdS8jpPaVRMd89mYoaJoU+pIqYEKQbsWFYS7oBYR0UKiZV/nKN+fC4bdR4qVW3JyiJ4fk0uPKJYmZApjru8egT+U6ewFp/ccn2ihBk2EZuKPdvCEawjRwS8veH37QqlXJngdZVTnGcJuoDqqhDwNQvstpGbhC3foXT+gFN011KUkkeUM0WUduV4kaW9y7BsgwxYHhyal0wlKOtlFbJU5shloqxnkWoGUvUnCbxELWwQjJunsCCVmjXDtnSB3Gqi2AonNKqndS+IBi5jWR413SWWHKAlzyKY/T2CjhFjRkdt1jtxtIu4OmujjSjQx2jOU+fsHjek9hn5FTfQohQaU5RgjNaZ/88T0ec7i55d/eBbhFFtPkzkAAAAASUVORK5CYII="}},5278:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/smrf_model_improved.b1e00c9.640.png 640w,"+i.p+"assets/ideal-img/smrf_model_improved.35a80f6.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/smrf_model_improved.b1e00c9.640.png",width:640,height:512},{path:i.p+"assets/ideal-img/smrf_model_improved.35a80f6.1024.png",width:1024,height:819}],src:i.p+"assets/ideal-img/smrf_model_improved.b1e00c9.640.png",toString:function(){return i.p+"assets/ideal-img/smrf_model_improved.b1e00c9.640.png"},placeholder:void 0,width:640,height:512},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAB7CAAAewgFu0HU+AAABKUlEQVR4nBXKyy/DcADA8f6Nbki44MI8xpKFzePXx5q1q2UPxkpXkQXRrXuU2DIbEnEhXDhIJMJJuEhEnL6yz/kjfX18c1Z5oORcUjBabBQ6bGbaFIs98oU251dP9Em9ziPxiIes+CTW6siaj6z6yHIVIaoIs8br+ydS2ekSmy2hzLmIkIMys4cWPUKPVTDUJnHVo356h7QV3kcMpNAHs+iDOYzRbVJTB1hLTQwlQCR8bKeLtGEFaJMljHGHxHAOY2SLdOgQKx6QVANk3SebbyGt17pEIzuYU2W0sSLWhEt6oYK53CSpBShmnXQ/ZrwO07FdVsdsxFAOc7JMMnyMPu+hrtRZTFZxvWuk57cPji9ucfMN9tdq2OIE22jjZro0qvfc3L/w8/vHP1iQ4mD5+Cq7AAAAAElFTkSuQmCC"}},5287:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/task_output_toggle.a880b19.640.png 640w,"+i.p+"assets/ideal-img/task_output_toggle.c1deaf8.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/task_output_toggle.a880b19.640.png",width:640,height:409},{path:i.p+"assets/ideal-img/task_output_toggle.c1deaf8.1024.png",width:1024,height:654}],src:i.p+"assets/ideal-img/task_output_toggle.a880b19.640.png",toString:function(){return i.p+"assets/ideal-img/task_output_toggle.a880b19.640.png"},placeholder:void 0,width:640,height:409},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAAC4jAAAuIwF4pT92AAAApElEQVR4nFWO2QqDMBRE8/9fVQp9LhT61FLRxsRoY9xQsUlOUbrQgWHg3sMwQpcW2w6smuYZZSpq1+K9x84OtzT4GBC3VFLZegNlrlHasCxPYojb7SNhqgdSF4zTzPl4osz19gghEOLbISAKU5HeFdck21IVJdY1v6oI/ukRUhUkWc7llrLOkNr8gyu7NnbDQNN21K6h7Xq6fmAcp+/GvnbsdwdegKDlmu27buQAAAAASUVORK5CYII="}},2852:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/texturing_keep_unseen_faces.11598fa.640.png 640w,"+i.p+"assets/ideal-img/texturing_keep_unseen_faces.d483d4c.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/texturing_keep_unseen_faces.11598fa.640.png",width:640,height:763},{path:i.p+"assets/ideal-img/texturing_keep_unseen_faces.d483d4c.1024.png",width:1024,height:1221}],src:i.p+"assets/ideal-img/texturing_keep_unseen_faces.11598fa.640.png",toString:function(){return i.p+"assets/ideal-img/texturing_keep_unseen_faces.11598fa.640.png"},placeholder:void 0,width:640,height:763},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAACXBIWXMAAC4jAAAuIwF4pT92AAABrUlEQVR4nCXPTWvTcADA4f9FT4PhYXjYxk4yWetW02S1rFnWrknTvDRt7Ytdte3apunL2o4xpiAyEEEU9eynEEH0oEdBxgQV2UVwn+Un0sPzAR4xN3edK1evEQpJdFotHC+J7kTRTYW0KePYNlbWRaysqCwtqUjRBIlUCMOKYXtxdrJhqqUCec8htrWOkKQu0ajPxsYD1sIZMlYC24tQKmdpN7pElDCemUfo+gv+M4yXGPprTKtPo+FxevKMnt9ATUq0K21Evf6JmY/Uah/Yq73nZPqW48NHuPc8csU2e3ePEb5/zsx3RsPfjA8uGA7PCfrf8IMzgv4PBoNfiIWFNebnbyDdTtHtDMgVHcx8GssxsFydglen6DUQy8txFhfjyJsx7mir6KZMNiejmatUSjlcV0eO30TIch9FCVBiCdYjEUwnju1FqVRd2s2AiHKLglVCGMYbdP0pqraDltwmndmi2Sxx+vA5vV6L7d1N9qsdxP36Z/LFVyQ0BVVTSe1mmPSfcDR9jF12sLzybD2dXjIYnNHaf4fvf6EXfGV08JPh6ILR6A+T8SXjyV/+ARA78NJ7wX7hAAAAAElFTkSuQmCC"}},3717:(e,t,i)=>{"use strict";i.r(t),i.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var s=i(5893),n=i(1151),a=i(2986);const r={description:"Learn about the task options to improve results."},o="Task Options",l={id:"references/task-options",title:"Task Options",description:"Learn about the task options to improve results.",source:"@site/docs/03-references/01-task-options.md",sourceDirName:"03-references",slug:"/references/task-options",permalink:"/references/task-options",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{description:"Learn about the task options to improve results."},sidebar:"tutorialSidebar",previous:{title:"References",permalink:"/references/"}},d={},c=[{value:"3d-tiles",id:"3d-tiles",level:2},{value:"auto-boundary",id:"auto-boundary",level:2},{value:"auto-boundary-distance",id:"auto-boundary-distance",level:2},{value:"bg-removal",id:"bg-removal",level:2},{value:"boundary",id:"boundary",level:2},{value:"camera-lens",id:"camera-lens",level:2},{value:"cameras",id:"cameras",level:2},{value:"crop",id:"crop",level:2},{value:"dem-decimation",id:"dem-decimation",level:2},{value:"dem-euclidean-map",id:"dem-euclidean-map",level:2},{value:"dem-gapfill-steps",id:"dem-gapfill-steps",level:2},{value:"dem-resolution",id:"dem-resolution",level:2},{value:"dsm",id:"dsm",level:2},{value:"dtm",id:"dtm",level:2},{value:"end-with",id:"end-with",level:2},{value:"fast-orthophoto",id:"fast-orthophoto",level:2},{value:"feature-quality",id:"feature-quality",level:2},{value:"feature-type",id:"feature-type",level:2},{value:"force-gps",id:"force-gps",level:2},{value:"gps-accuracy",id:"gps-accuracy",level:2},{value:"matcher-neighbors",id:"matcher-neighbors",level:2},{value:"matcher-order",id:"matcher-order",level:2},{value:"matcher-type",id:"matcher-type",level:2},{value:"mesh-octree-depth",id:"mesh-octree-depth",level:2},{value:"mesh-size",id:"mesh-size",level:2},{value:"min-num-features",id:"min-num-features",level:2},{value:"optimize-disk-space",id:"optimize-disk-space",level:2},{value:"orthophoto-cutline",id:"orthophoto-cutline",level:2},{value:"orthophoto-resolution",id:"orthophoto-resolution",level:2},{value:"pc-classify",id:"pc-classify",level:2},{value:"pc-filter",id:"pc-filter",level:2},{value:"pc-quality",id:"pc-quality",level:2},{value:"pc-sample",id:"pc-sample",level:2},{value:"pc-skip-geometric",id:"pc-skip-geometric",level:2},{value:"primary-band",id:"primary-band",level:2},{value:"radiometric-calibration",id:"radiometric-calibration",level:2},{value:"rerun-from",id:"rerun-from",level:2},{value:"rolling-shutter",id:"rolling-shutter",level:2},{value:"rolling-shutter-readout",id:"rolling-shutter-readout",level:2},{value:"sfm-algorithm",id:"sfm-algorithm",level:2},{value:"sfm-no-partial",id:"sfm-no-partial",level:2},{value:"skip-3dmodel",id:"skip-3dmodel",level:2},{value:"skip-band-alignment",id:"skip-band-alignment",level:2},{value:"skip-orthophoto",id:"skip-orthophoto",level:2},{value:"skip-report",id:"skip-report",level:2},{value:"sky-removal",id:"sky-removal",level:2},{value:"smrf-scalar",id:"smrf-scalar",level:2},{value:"smrf-slope",id:"smrf-slope",level:2},{value:"smrf-threshold",id:"smrf-threshold",level:2},{value:"smrf-window",id:"smrf-window",level:2},{value:"texturing-keep-unseen-faces",id:"texturing-keep-unseen-faces",level:2},{value:"texturing-single-material",id:"texturing-single-material",level:2},{value:"texturing-skip-global-seam-leveling",id:"texturing-skip-global-seam-leveling",level:2},{value:"texturing-skip-local-seam-leveling",id:"texturing-skip-local-seam-leveling",level:2},{value:"tiles",id:"tiles",level:2},{value:"use-3dmesh",id:"use-3dmesh",level:2},{value:"use-exif",id:"use-exif",level:2},{value:"use-fixed-camera-params",id:"use-fixed-camera-params",level:2},{value:"use-hybrid-bundle-adjustment",id:"use-hybrid-bundle-adjustment",level:2},{value:"video-limit",id:"video-limit",level:2},{value:"video-resolution",id:"video-resolution",level:2}];function h(e){const t=Object.assign({h1:"h1",p:"p",strong:"strong",h2:"h2",a:"a",sup:"sup",code:"code",table:"table",thead:"thead",tr:"tr",th:"th",tbody:"tbody",td:"td",em:"em",pre:"pre",ul:"ul",li:"li",admonition:"admonition",section:"section",ol:"ol"},(0,n.ah)(),e.components);return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"task-options",children:"Task Options"}),"\n",(0,s.jsxs)(t.p,{children:["When creating a task, press the ",(0,s.jsx)(t.strong,{children:"Edit"})," button next to the ",(0,s.jsx)(t.strong,{children:"Options"})," field:"]}),"\n",(0,s.jsx)(a.Z,{img:i(3225)}),"\n",(0,s.jsx)(a.Z,{alt:"Accessing task options from the cloud interface",img:i(1855),padded:!0,smooth:!0}),"\n",(0,s.jsx)(t.p,{children:"In general, it's a good idea to begin with the default settings, which usually work well for most datasets, and make adjustments as necessary."}),"\n",(0,s.jsx)(t.h2,{id:"3d-tiles",children:"3d-tiles"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://www.ogc.org/standard/3dtiles/",children:"3D Tiles"})," are a format specification for visualizing and interacting with 3D geospatial content. You can view these files using software like ",(0,s.jsx)(t.a,{href:"https://github.com/CesiumGS/cesium",children:"Cesium"}),". WebODM Lightning can generate point clouds and textured 3D models in 3D Tiles format. Turn on this option to generate them."]}),"\n",(0,s.jsx)(t.h2,{id:"auto-boundary",children:"auto-boundary"}),"\n",(0,s.jsxs)(t.p,{children:["Automatically calculates a 2D polygon that encloses the camera pose locations. This polygon is subsequently employed as an input for the ",(0,s.jsx)(t.a,{href:"#boundary",children:"boundary"})," option. The polygon is generated using a convex hull and it's adjusted with a distance buffer that scales with the flight altitude, with higher altitudes leading to larger buffers."]}),"\n",(0,s.jsx)(a.Z,{img:i(687),alt:"Boundary computed from camera poses (dots)",padded:!0}),"\n",(0,s.jsx)(t.h2,{id:"auto-boundary-distance",children:"auto-boundary-distance"}),"\n",(0,s.jsxs)(t.p,{children:["Manually adjust the distance buffer value (in meters) for ",(0,s.jsx)(t.a,{href:"#auto-boundary",children:"auto-boundary"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"bg-removal",children:"bg-removal"}),"\n",(0,s.jsxs)(t.p,{children:["Utilizes artificial intelligence techniques to automatically create ",(0,s.jsx)(t.a,{href:"/how-to/image-masks",children:"image masks"})," for background removal. This is particularly valuable for generating 3D models of individual objects. However, it may not work well in aerial scenes."]}),"\n",(0,s.jsxs)(t.p,{children:["See also ",(0,s.jsx)(t.a,{href:"#sky-removal",children:"sky-removal"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"boundary",children:"boundary"}),"\n",(0,s.jsx)(t.p,{children:"Specify a single polygon boundary in GeoJSON format, which is used to define the reconstruction area."}),"\n",(0,s.jsxs)(t.p,{children:["GeoJSON polygons can be created using software like QGIS or online tools like ",(0,s.jsx)(t.a,{href:"https://geojson.io",children:"geojson.io"}),". Additionally, you can automatically generate them using the ",(0,s.jsx)(t.a,{href:"#auto-boundary",children:"auto-boundary"})," option."]}),"\n",(0,s.jsxs)(t.p,{children:["If the ",(0,s.jsx)(t.a,{href:"#crop",children:"crop"})," option is set to zero, the boundary polygon can also serve as the crop area for DEMs and orthophotos."]}),"\n",(0,s.jsx)(t.h2,{id:"camera-lens",children:"camera-lens"}),"\n",(0,s.jsx)(t.p,{children:"Digital camera sensors quantify the incoming light. Prior to reaching the sensor, light traverses through a camera lens. Lenses introduce different degrees of distortion into photos, with the specific type of distortion determined by the lens shape. This distortion can range from pronounced, such as in fisheye or wide-angle lenses, to more subtle in the case of perspective lenses. It's essential to recognize that some level of distortion is invariably present."}),"\n",(0,s.jsxs)(t.p,{children:["WebODM Lightning offers support for multiple lens models and automatically selects the most suitable one by considering the information available in the EXIF",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-exif",id:"user-content-fnref-exif","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})," and XMP",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-xmp",id:"user-content-fnref-xmp","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"2"})})," tags of the images. Nevertheless, there are instances where such information is absent. In these cases, if you encounter difficulties when processing images captured with a fisheye lens, it's advisable to manually designate either ",(0,s.jsx)(t.code,{children:"fisheye"})," or ",(0,s.jsx)(t.code,{children:"fisheye_opencv"})," as the camera-lens option. As a general guideline, when your input images exhibit noticeable distortion, it's a prudent approach to manually configure this option with the appropriate value."]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Value"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Images"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Description"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"auto"})}),(0,s.jsx)(t.td,{children:"Normal"}),(0,s.jsxs)(t.td,{children:["Defaults to ",(0,s.jsx)(t.strong,{children:"brown"}),", unless the XMP tag ",(0,s.jsx)(t.code,{children:"GPano:ProjectionType"})," or ",(0,s.jsx)(t.code,{children:"Camera:ModelType"})," contains a value from this table"]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"perspective"})}),(0,s.jsx)(t.td,{children:"Normal"}),(0,s.jsx)(t.td,{children:"Handles radial distortion"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"brown"})}),(0,s.jsx)(t.td,{children:"Normal"}),(0,s.jsx)(t.td,{children:"Handles radial, tangential, and principal point distortions"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"fisheye"})}),(0,s.jsx)(t.td,{children:"Ultra wide-angle"}),(0,s.jsx)(t.td,{children:"Handles radial distortion"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"fisheye_opencv"})}),(0,s.jsx)(t.td,{children:"Ultra wide-angle"}),(0,s.jsx)(t.td,{children:"Handles radial distortion, tangential, and principal point distortions"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"spherical"})}),(0,s.jsx)(t.td,{children:"360"}),(0,s.jsx)(t.td,{children:"Handles spherical projection for 360 images"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"equirectangular"})}),(0,s.jsx)(t.td,{children:"360"}),(0,s.jsxs)(t.td,{children:["Same as ",(0,s.jsx)(t.em,{children:"spherical"})," (legacy name)"]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"dual"})}),(0,s.jsx)(t.td,{children:"Ultra wide-angle / Normal"}),(0,s.jsx)(t.td,{children:"Handles radial distortion from sensors that can capture both fisheye and perspective images, transitioning from one to the other."})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"Please be aware that utilizing this option applies the same camera lens model to all images, even if they originate from different cameras. To apply distinct models for different cameras, it's necessary to ensure that the images have the appropriate XMP tags set."}),"\n",(0,s.jsx)(t.h2,{id:"cameras",children:"cameras"}),"\n",(0,s.jsxs)(t.p,{children:["By default WebODM Lightning estimates the camera model's distortion parameters from the input images. This option allows you to choose a precomputed set of parameters instead from another task. You can do this by providing a ",(0,s.jsx)(t.strong,{children:"cameras.json"})," file, which is generated after processing a dataset and can be downloaded from the cloud interface by clicking ",(0,s.jsx)(t.strong,{children:"Download Assets"})," \u2192 ",(0,s.jsx)(t.strong,{children:"Camera Parameters"}),". This feature can be helpful in improving the accuracy of certain datasets, especially those that didn't follow good image capture guidelines."]}),"\n",(0,s.jsx)(t.h2,{id:"crop",children:"crop"}),"\n",(0,s.jsxs)(t.p,{children:["The crop area for orthophotos and DEMs is calculated from the point cloud, first by defining a convex hull around the points and then shrinking it by ",(0,s.jsx)(t.code,{children:"crop"})," amount (in meters)."]}),"\n",(0,s.jsx)(a.Z,{img:i(7041),alt:"Point cloud (left) and cropped bounds (right)",padded:!0}),"\n",(0,s.jsx)(t.p,{children:"This option can be set to zero to skip cropping."}),"\n",(0,s.jsxs)(t.p,{children:["One can also set the ",(0,s.jsx)(t.a,{href:"#boundary",children:"boundary"})," option and set this option to zero to manually define the crop area."]}),"\n",(0,s.jsx)(t.h2,{id:"dem-decimation",children:"dem-decimation"}),"\n",(0,s.jsx)(t.p,{children:"DEMs are computed from the point cloud. To speed up the process, you can use this option to reduce the number of points used. Setting it to 3 keeps every third point, discarding the rest to speed up computation."}),"\n",(0,s.jsxs)(t.p,{children:["The default value of ",(0,s.jsx)(t.code,{children:"1"})," includes all points. Setting it to ",(0,s.jsx)(t.code,{children:"50"})," keeps approximately 2% of the original points and discards around 98%. You can calculate this percentage by:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"decimation = 50\nprint((1 / decimation) * 100) # <-- 2%\n"})}),"\n",(0,s.jsx)(t.h2,{id:"dem-euclidean-map",children:"dem-euclidean-map"}),"\n",(0,s.jsx)(t.p,{children:"An Euclidean map is a georeferenced image created from Digital Elevation Models (DEMs) before filling any gaps. In this image, each pixel represents the geometric distance to the nearest void, null, or NODATA pixel. It serves as a visual indicator of how far a value in the DEM is from an area with no data. This is valuable when you want to distinguish areas in the DEM that are based on actual point cloud values from those filled with interpolation."}),"\n",(0,s.jsx)(t.p,{children:"In the Euclidean map, every pixel with a value of zero indicates that the corresponding location in the DEM was filled using interpolation, as the distance from a NODATA pixel to itself is zero. You can generate this map by turning on this option."}),"\n",(0,s.jsx)(a.Z,{img:i(6945),alt:"DEM before hole filling (left) and corresponding euclidean map (right)",padded:!0}),"\n",(0,s.jsxs)(t.p,{children:["The resulting map will be available from ",(0,s.jsx)(t.strong,{children:"Download Assets"})," \u2192 ",(0,s.jsx)(t.strong,{children:"All Assets"})," in the ",(0,s.jsx)(t.code,{children:"odm_dem"})," folder."]}),"\n",(0,s.jsx)(t.h2,{id:"dem-gapfill-steps",children:"dem-gapfill-steps"}),"\n",(0,s.jsx)(t.p,{children:"DEMs are image grids with cells that must have values. Cells can have zero, one, or more points based on the raster's resolution. Assigning values to all cells, even those without direct points, is crucial to avoid gaps. To find the right radius, WebODM Lightning computes multiple DEMs with varying radii, stacking results from small radii (more accuracy, more gaps) to large radii (less accuracy, fewer gaps). If gaps persist, it fills them with less accurate interpolation. The number of layers depends on this option."}),"\n",(0,s.jsx)(a.Z,{img:i(5497),alt:"Pixels and points (left), radius of 0.5 (middle) and radius of 1 (right)",padded:!0}),"\n",(0,s.jsx)(a.Z,{img:i(4022),alt:"Gap fill interpolation with 2 DEM layers",padded:!0}),"\n",(0,s.jsx)(t.h2,{id:"dem-resolution",children:"dem-resolution"}),"\n",(0,s.jsx)(t.p,{children:"This option specifies the output resolution of DEMs in cm / pixel."}),"\n",(0,s.jsx)(a.Z,{img:i(8e3),alt:"Pixels in a raster DEM",padded:!0}),"\n",(0,s.jsx)(t.h2,{id:"dsm",children:"dsm"}),"\n",(0,s.jsxs)(t.p,{children:["This option creates a digital surface model (DSM). DSMs are created by identifying the highest elevation values in a point cloud, which includes terrain and various structures like buildings and trees. When two points coincide, only the tallest point is considered. Any gaps in the point cloud are filled using the method detailed in ",(0,s.jsx)(t.a,{href:"#dem-gapfill-steps",children:"dem-gapfill-steps"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"dtm",children:"dtm"}),"\n",(0,s.jsxs)(t.p,{children:["This option creates a digital terrain model (DTM). DTMs are created by applying a hybrid method that combines a simple morphological filter",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-smrf",id:"user-content-fnref-smrf","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"3"})})," (SMRF) with artificial intelligence. Enabling this option also activates the ",(0,s.jsx)(t.a,{href:"#pc-classify",children:"pc-classify"})," feature. Non-ground points are removed before DTM calculation. Any gaps in the point cloud are filled using the process explained in ",(0,s.jsx)(t.a,{href:"#dem-gapfill-steps",children:"dem-gapfill-steps"}),". For additional details refer to the ",(0,s.jsx)(t.a,{href:"#pc-classify",children:"pc-classify"})," option."]}),"\n",(0,s.jsx)(a.Z,{img:i(1112),alt:"DSM (left) vs. DTM (right)",padded:!0}),"\n",(0,s.jsx)(t.h2,{id:"end-with",children:"end-with"}),"\n",(0,s.jsx)(t.p,{children:"Instead of processing the entire photogrammetry pipeline, the pipeline will stop the execution at the chosen step."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Option"}),(0,s.jsx)(t.th,{children:"Stage"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"dataset"}),(0,s.jsx)(t.td,{children:"Load Dataset"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"split"}),(0,s.jsx)(t.td,{children:"Split"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"merge"}),(0,s.jsx)(t.td,{children:"Merge"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"opensfm"}),(0,s.jsx)(t.td,{children:"Structure From Motion"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"openmvs"}),(0,s.jsx)(t.td,{children:"Multi View Stereo"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"odm_filterpoints"}),(0,s.jsx)(t.td,{children:"Point Filtering"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"odm_meshing"}),(0,s.jsx)(t.td,{children:"Meshing"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"mvs_texturing"}),(0,s.jsx)(t.td,{children:"Texturing"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"odm_georeferencing"}),(0,s.jsx)(t.td,{children:"Georeferencing"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"odm_dem"}),(0,s.jsx)(t.td,{children:"DEM"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"odm_orthophoto"}),(0,s.jsx)(t.td,{children:"Orthophoto"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"odm_report"}),(0,s.jsx)(t.td,{children:"Report"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"odm_postprocess"}),(0,s.jsx)(t.td,{children:"Postprocess"})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"fast-orthophoto",children:"fast-orthophoto"}),"\n",(0,s.jsx)(t.p,{children:"For flat areas (agriculture fields), this option can save some substantial computation time by not requiring the construction of the dense point cloud used for orthorectification. This option does not work well in urban scenes due to excessive relief displacement artifacts."}),"\n",(0,s.jsx)(a.Z,{img:i(8539),alt:"Normal (top) vs. fast-orthophoto (bottom)",padded:!0,smooth:!0}),"\n",(0,s.jsx)(t.h2,{id:"feature-quality",children:"feature-quality"}),"\n",(0,s.jsx)(t.p,{children:"The photogrammetry process starts by identifying points of interest (features) from the input images. To expedite this, extraction is performed on a scaled-down version of the input images, determined by a scaling factor."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Option"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Factor"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"high"}),(0,s.jsx)(t.td,{children:"1/2 (default)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"medium"}),(0,s.jsx)(t.td,{children:"1/4"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"low"}),(0,s.jsx)(t.td,{children:"1/8"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"lowest"}),(0,s.jsx)(t.td,{children:"1/16"})]})]})]}),"\n",(0,s.jsxs)(t.p,{children:["For example, choosing ",(0,s.jsx)(t.strong,{children:"medium"})," uses 1/4 of the original image size. The default value works for most cases, without affecting image sizes or orthophoto resolution. Sometimes, decreasing this value can be helpful in forest areas that lack sufficient overlap."]}),"\n",(0,s.jsx)(t.h2,{id:"feature-type",children:"feature-type"}),"\n",(0,s.jsxs)(t.p,{children:["WebODM Lightning provides multiple algorithms for extracting image features. For the most consistent and reliable results, we recommend using the default ",(0,s.jsx)(t.strong,{children:"sift"})," algorithm. However, in specific scenes or situations, you may benefit from using alternative algorithms. Refer to the table below."]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Option"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Description"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"sift"}),(0,s.jsxs)(t.td,{children:["General-purpose, works well in most cases",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-sift",id:"user-content-fnref-sift","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"4"})})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"dspsift"}),(0,s.jsxs)(t.td,{children:["General-purpose, slower but generally more accurate than sift. Performs better in scenes with low overlap or vegetation",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-dspsift",id:"user-content-fnref-dspsift","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"5"})})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"akaze"}),(0,s.jsxs)(t.td,{children:["General-purpose, can perform better on scenes with fewer objects of interest (e.g. forests, vegetation)",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-akaze",id:"user-content-fnref-akaze","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"6"})})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"hahog"}),(0,s.jsxs)(t.td,{children:["General-purpose, similar to sift. It's the only one that works with ",(0,s.jsx)(t.a,{href:"#matcher-type",children:"matcher-type"})," bow",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-hahog",id:"user-content-fnref-hahog","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"7"})})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"orb"}),(0,s.jsxs)(t.td,{children:["Fast, but does not work well with images that have scale variations (images taken at varying altitudes)",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-orb",id:"user-content-fnref-orb","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"8"})})]})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"force-gps",children:"force-gps"}),"\n",(0,s.jsxs)(t.p,{children:["When a GCP file is utilized, the default behavior is to disregard all GPS data, relying solely on the GCP file for georeferencing. The underlying assumption is that GCP data is more accurate than GPS. However, if the GPS data is highly accurate (e.g., with RTK",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-rtk",id:"user-content-fnref-rtk","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"9"})})," correction), enabling this option directs the program to use both GCP and GPS data for georeferencing."]}),"\n",(0,s.jsx)(t.h2,{id:"gps-accuracy",children:"gps-accuracy"}),"\n",(0,s.jsx)(t.p,{children:"GPS data has a certain level of accuracy. This value is used to specify how much GPS data should be constrained during the photogrammetry process."}),"\n",(0,s.jsx)(t.p,{children:"Typically, accuracy information is obtainable from XMP tags in the images. WebODM Lightning uses twice the number indicated in any of the following tags (to account for underestimation):"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"drone-dji::RtkStdLon"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"drone-dji::RtkStdLat"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"drone-dji::RtkStdHgt"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"Camera::GPSXYAccuracy"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"GPSXYAccuracy"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"Camera::GPSZAccuracy"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"GPSZAccuracy"})}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["If multiple tags are present, the maximum value is used. If no tags are available, the default is ",(0,s.jsx)(t.strong,{children:"10 meters"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"matcher-neighbors",children:"matcher-neighbors"}),"\n",(0,s.jsx)(t.p,{children:"During reconstruction image pairs are matched by identifying common features. The brute-force approach compares each image with every other, resulting in exhaustive but slow searching. For a 100-image dataset, it would require numerous comparisons."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"print(100 * (100 - 1)) # <-- 9900 comparisons\n"})}),"\n",(0,s.jsx)(t.p,{children:"To enhance efficiency, the program employs optimizations. The concept is that for datasets gathered uniformly, most images are paired with nearby ones. Using GPS data, the program quickly approximates which images are adjacent and excludes distant ones. This process is termed preemptive matching."}),"\n",(0,s.jsxs)(t.p,{children:["WebODM Lightning by default applies a graph connectivity approach for preemptive matching. It uses GPS locations to link images with edges through Delaunay triangulation",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-delaunay",id:"user-content-fnref-delaunay","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"10"})}),". If two images share an edge, they form a pair. To generate more pairs, the method shuffles GPS locations to create multiple graphs (a total of 50). All pairs from these graphs are considered for further matching."]}),"\n",(0,s.jsx)(a.Z,{img:i(2021),alt:"Initial graph (left) and graph with randomly moved positions and new edges (right). Each edge represents an image pair",padded:!0}),"\n",(0,s.jsx)(t.p,{children:"WebODM Lightning offers an alternative preemptive matching method that focuses on the nearest neighbors of each image instead of using a graph. You can enable this method by turning on this option:"}),"\n",(0,s.jsx)(a.Z,{img:i(8612),alt:"Dots represent approximate image locations, extracted from EXIF tags. When matcher-neighbors is set to 8, only the 8 nearest neighbors (highlighted in gray) are considered for matching with image p1",padded:!0}),"\n",(0,s.jsxs)(t.p,{children:["This option can speed up processing by reducing the number of matching pairs, especially when GPS data is available. If no GPS information is provided, this option is disabled, and all image pairs are considered unless ",(0,s.jsx)(t.a,{href:"#matcher-order",children:"matcher-order"})," is specified."]}),"\n",(0,s.jsx)(t.h2,{id:"matcher-order",children:"matcher-order"}),"\n",(0,s.jsxs)(t.p,{children:["Like ",(0,s.jsx)(t.a,{href:"#matcher-neighbors",children:"matcher-neighbors"}),", this option decreases the number of candidate pairs for matching based on the sequential order of image filenames. For instance, if you have 3 images sorted by filename:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"1.JPG"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"2.JPG"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"3.JPG"})}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["With this option set to ",(0,s.jsx)(t.code,{children:"1"}),", the program will evaluate matches between:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"1.JPG"})," and ",(0,s.jsx)(t.strong,{children:"2.JPG"})]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"2.JPG"})," and ",(0,s.jsx)(t.strong,{children:"3.JPG"})]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:['This is because the "distance" between these image pairs in the list is 1. ',(0,s.jsx)(t.strong,{children:"1.JPG"})," and ",(0,s.jsx)(t.strong,{children:"3.JPG"})," have a distance of 2, so this pair will be excluded from matching."]}),"\n",(0,s.jsx)(t.p,{children:"This option determines the maximum distance between image filenames for them to be considered a matching pair. It is exclusively useful for datasets without GPS information, particularly for expediting the processing of sequentially ordered images, like frames extracted from videos."}),"\n",(0,s.jsx)(t.h2,{id:"matcher-type",children:"matcher-type"}),"\n",(0,s.jsxs)(t.p,{children:["After preemptive matching finds potential image pairs (as discussed in ",(0,s.jsx)(t.a,{href:"#matcher-neighbors",children:"matcher-neighbors"}),"), further computation identifies the actual image pairs by comparing their features."]}),"\n",(0,s.jsx)(t.p,{children:"To expedite feature matching, specific algorithms have been developed, given the large number of features in each image."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Option"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Search For Features With"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"flann"}),(0,s.jsx)(t.td,{children:"An index powered by the Fast Library for Approximate Nearest Neighbors"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"bow"}),(0,s.jsxs)(t.td,{children:["A Bag Of Words",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-bow",id:"user-content-fnref-bow","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"11"})})," approach"]})]})]})]}),"\n",(0,s.jsxs)(t.p,{children:["The default method, ",(0,s.jsx)(t.strong,{children:"flann"}),", is highly versatile, providing an excellent balance between accuracy and speed. ",(0,s.jsx)(t.strong,{children:"bow"})," is quicker but compatible only with HAHOG features and potentially misses some matches."]}),"\n",(0,s.jsx)(t.h2,{id:"mesh-octree-depth",children:"mesh-octree-depth"}),"\n",(0,s.jsxs)(t.p,{children:["Controls the quality of the 3D textured models. A higher value results in a finer model. However, this comes at the cost of significantly increased processing time. The default value of ",(0,s.jsx)(t.code,{children:"11"})," is suitable for most scenarios. Lower values (",(0,s.jsx)(t.code,{children:"6-8"}),") can be sufficient in flat areas, while setting it higher (",(0,s.jsx)(t.code,{children:"12"}),") can improve results in urban areas. When raising this option, consider increasing ",(0,s.jsx)(t.a,{href:"#mesh-size",children:"mesh-size"})," as finer meshes require more triangles."]}),"\n",(0,s.jsx)(a.Z,{img:i(852),alt:"mesh-octree-depth 6 and mesh-size 10000 (top) vs. mesh-octree-depth 11 and mesh-size 1000000 (bottom)",padded:!0,smooth:!0}),"\n",(0,s.jsx)(t.h2,{id:"mesh-size",children:"mesh-size"}),"\n",(0,s.jsx)(t.p,{children:"WebODM Lightning automatically simplifies the textured 3D models by limiting their triangle count. A high triangle count prolongs subsequent processing steps. A low count can reduce model quality, while increasing it can enhance results, especially in urban areas requiring fine building details."}),"\n",(0,s.jsx)(t.h2,{id:"min-num-features",children:"min-num-features"}),"\n",(0,s.jsx)(t.p,{children:"This option controls the minimum number of features detected in each image, increasing the potential for finding matches."}),"\n",(0,s.jsx)(a.Z,{img:i(7913),alt:"Features (red points) and matches between overlapping images (white lines). min-num-features controls the desired number of red points in each image",padded:!0,smooth:!0}),"\n",(0,s.jsx)(t.p,{children:"Increase this option when mapping areas with few discernible features, like forests."}),"\n",(0,s.jsx)(t.h2,{id:"optimize-disk-space",children:"optimize-disk-space"}),"\n",(0,s.jsx)(t.p,{children:"This option is always turned on. No need to worry about it."}),"\n",(0,s.jsx)(t.h2,{id:"orthophoto-cutline",children:"orthophoto-cutline"}),"\n",(0,s.jsx)(t.p,{children:"Enabling this option results in the program creating a cutline, which is a polygon within the crop area of the orthophoto that aims to trace feature edges."}),"\n",(0,s.jsx)(a.Z,{img:i(6826),alt:"Cutline",padded:!0}),"\n",(0,s.jsxs)(t.p,{children:["The resulting cutline can be downloaded from the cloud interface by clicking ",(0,s.jsx)(t.strong,{children:"Download Assets"})," \u2192 ",(0,s.jsx)(t.strong,{children:"All Assets"})," (",(0,s.jsx)(t.code,{children:"odm_orthophoto/cutline.gpkg"}),")."]}),"\n",(0,s.jsx)(t.h2,{id:"orthophoto-resolution",children:"orthophoto-resolution"}),"\n",(0,s.jsx)(t.p,{children:"This option specifies the output resolution of the orthophoto in cm / pixel."}),"\n",(0,s.jsxs)(t.p,{children:["See also ",(0,s.jsx)(t.a,{href:"#dem-resolution",children:"dem-resolution"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"pc-classify",children:"pc-classify"}),"\n",(0,s.jsxs)(t.p,{children:["Points in a point cloud can be assigned classification values",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-las",id:"user-content-fnref-las","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"12"})})," to indicate if they belong to the terrain (ground), a building, a tree (vegetation), or other categories. By default, all points are labeled as ",(0,s.jsx)(t.em,{children:"unclassified"}),", and the software doesn't assign specific labels to points. Enabling this option utilizes a Simple Morphological Filter",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-smrf",id:"user-content-fnref-smrf-2","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"3"})})," (SMRF) to identify and classify terrain points as ground. An AI classifier",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-openpointclass",id:"user-content-fnref-openpointclass","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"13"})})," is then applied to the remaining (non-ground) points to recognize vegetation, buildings, and other structures. This process results in a classified point cloud."]}),"\n",(0,s.jsx)(a.Z,{img:i(4242),alt:"Point cloud (top) and classification results (bottom)",smooth:!0,padded:!0}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Option"}),(0,s.jsx)(t.th,{children:"Description"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"smrf-scalar"}),(0,s.jsx)(t.td,{children:"This parameter makes the threshold dependent on the slope. To enhance results, consider slightly decreasing this value when raising the smrf-threshold, and vice versa.."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"smrf-slope"}),(0,s.jsx)(t.td,{children:"Set this parameter to the steepest common terrain slope, represented as the ratio of elevation change to horizontal distance change (e.g., 1.5 meters over 10 meters is 1.5 / 10 = 0.15). Increase it for terrains with significant slope variation, like hills and mountains, and reduce it for flat areas. For optimal results, it should be above 0.1 but not exceed 1.2."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"smrf-threshold"}),(0,s.jsx)(t.td,{children:"Defines the minimum height (in meters) of non-ground objects. For instance, a setting of 5 meters is suitable for identifying buildings but may not suffice for recognizing cars. To identify cars, lower the value to 2 or even 1.5 meters (the average car height). This parameter significantly influences results."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"smrf-window"}),(0,s.jsx)(t.td,{children:"Set this to the size of the largest non-ground feature in meters. If the scene primarily consists of small objects like trees, reduce this value. If there are larger objects like buildings, increase it. It's advisable to maintain a value above 10 meters."})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"SMRF has limitations, including occasional misclassification of buildings or trees as ground points (type II errors)."}),"\n",(0,s.jsx)(a.Z,{img:i(573),alt:"Input surface model",padded:!0}),"\n",(0,s.jsx)(a.Z,{img:i(4152),alt:"Terrain model created using default SMRF settings. Note a few houses were incorrectly included, and there are lingering artifacts near the edges of removed objects.",padded:!0}),"\n",(0,s.jsx)(a.Z,{img:i(5278),alt:"An improved terrain model obtained by setting smrf-threshold 0.3\n(decreased), smrf-scalar 1.3 (increased), smrf-slope 0.05 (decreased)\nand smrf-window 24 (increased)",padded:!0}),"\n",(0,s.jsx)(t.h2,{id:"pc-filter",children:"pc-filter"}),"\n",(0,s.jsx)(t.p,{children:"Noise from the point cloud can be partially removed using a combination of statistical and visibility\nfiltering. This option sets the standard deviation threshold value for the\nstatistical filter. In this context standard deviation is a measure of how spread out points are\nrelative to their neighbors. The filter looks at the closest 16\nneighbors for each point and computes their standard deviations, which gives a measure of how far\neach point deviates from the average distance to each other point. If a\npoint is found to be too far away relative to its neighbors, thus having\na standard deviation higher than the threshold, the point is labeled as\nan outlier."}),"\n",(0,s.jsx)(a.Z,{img:i(310),alt:"The gray point is an outlier due to its high standard deviation",padded:!0}),"\n",(0,s.jsx)(t.p,{children:"Adjusting this value too high retains noisy points, and setting it too low may eliminate valid ones. You can disable filtering by setting this option to zero."}),"\n",(0,s.jsx)(t.h2,{id:"pc-quality",children:"pc-quality"}),"\n",(0,s.jsx)(t.p,{children:"This option affects the density of the point cloud. Higher values use higher resolution images according to a scale factor:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Option"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Scaling Factor"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"high"}),(0,s.jsx)(t.td,{children:"1/4"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"medium"}),(0,s.jsx)(t.td,{children:"1/8"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"low"}),(0,s.jsx)(t.td,{children:"1/16"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"lowest"}),(0,s.jsx)(t.td,{children:"1/32"})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"Different image dimensions also correspond to a multiplier value:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Largest Image Dimension (megapixels)"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Multiplier"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"< 6"}),(0,s.jsx)(t.td,{children:"2"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"6 - 42"}),(0,s.jsx)(t.td,{children:"1"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"> 42"}),(0,s.jsx)(t.td,{children:"1/2"})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"The actual resolution of the images used for point cloud estimation is then calculated with:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"resolution = max(320, max_image_dimension * scaling_factor * multiplier)\n"})}),"\n",(0,s.jsxs)(t.p,{children:["For example, in a dataset with 4000x3000 (12 megapixels) images, setting this option to ",(0,s.jsx)(t.code,{children:"high"})," will use images scaled to 1000 pixels for computing a point cloud:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"image = (4000,3000)\nmax_image_dimension = max(image) # <-- 4000\nmegapixels = image[0]*image[1]/1000000 # <-- 12\nmultiplier = 1 # From table\nscaling_factor = 1/4 # pc-quality: high\nprint(max(320, max_image_dimension * scaling_factor * multiplier)) # <-- 1000 pixels\n"})}),"\n",(0,s.jsx)(t.h2,{id:"pc-sample",children:"pc-sample"}),"\n",(0,s.jsxs)(t.p,{children:["This option imposes an upper limit on the density of the dense point cloud, defined as a radius in meters that ensures no two points are closer than the specified value. For instance, a setting of ",(0,s.jsx)(t.code,{children:"0.05"})," ensures points are at least 5 centimeter (0.05 meters) apart. This option is always set to at least ",(0,s.jsx)(t.code,{children:"0.01"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"pc-skip-geometric",children:"pc-skip-geometric"}),"\n",(0,s.jsx)(t.p,{children:"A geometric refinement process is used to improve the point cloud. This process can take some time and can be skipped by using this option."}),"\n",(0,s.jsx)(a.Z,{img:i(6481),alt:"Elevation model with defaults (left) vs. pc-skip-geometric (right). Improved building and car definition on the left.",padded:!0}),"\n",(0,s.jsx)(t.h2,{id:"primary-band",children:"primary-band"}),"\n",(0,s.jsxs)(t.p,{children:["This option selects the band name (Red, Blue, Green, NIR, etc.) for reconstructing multispectral datasets. The chosen band name must match the ",(0,s.jsx)(t.strong,{children:"Camera::BandName"})," EXIF",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-exif",id:"user-content-fnref-exif-2","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})," tag. Only the images associated with this band will be utilized for 3D reconstruction."]}),"\n",(0,s.jsxs)(t.p,{children:["By setting it to ",(0,s.jsx)(t.code,{children:"auto"})," (the default), the band will be automatically selected."]}),"\n",(0,s.jsx)(t.h2,{id:"radiometric-calibration",children:"radiometric-calibration"}),"\n",(0,s.jsxs)(t.p,{children:["Radiometric calibration converts pixel values (digital numbers) into reflectance. WebODM Lightning can automate radiometric calibration and compute reflectance and temperature values for various sensors",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-sensors",id:"user-content-fnref-sensors","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"14"})}),"."]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Option"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Description"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"none"}),(0,s.jsx)(t.td,{children:"No radiometric calibration (digital number outputs)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"camera"}),(0,s.jsx)(t.td,{children:"Applies black level, vignetting, gain, and exposure corrections based on information from the EXIF tags. Additionally, computes absolute temperature values when applicable"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"camera+sun"}),(0,s.jsxs)(t.td,{children:["Same as ",(0,s.jsx)(t.code,{children:"camera"}),", but also applies corrections from a downwelling light sensor (DLS) when available"]})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"rerun-from",children:"rerun-from"}),"\n",(0,s.jsx)(t.p,{children:"This option cannot be used. Don't worry about it."}),"\n",(0,s.jsx)(t.h2,{id:"rolling-shutter",children:"rolling-shutter"}),"\n",(0,s.jsxs)(t.p,{children:["Enables rolling shutter correction to enhance reconstruction accuracy in datasets captured with rolling shutter sensors. If GPS information is present in the input images, and the dataset was captured with a single camera, WebODM Lightning can correct for rolling shutter distortion by initially estimating the aircraft's velocity at the time each picture was taken. Some cameras store velocity information in the EXIF/XMP tags of the images (",(0,s.jsx)(t.strong,{children:"SpeedX"}),", ",(0,s.jsx)(t.strong,{children:"SpeedY"}),", and ",(0,s.jsx)(t.strong,{children:"SpeedZ"}),"), which provides the most reliable estimate. In the absence of these tags, velocity is estimated based on the time and positional differences between consecutive images."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"speed = (position_2 - position_1) / (time_2 - time_1)\n"})}),"\n",(0,s.jsx)(t.p,{children:"The accuracy of the formula mentioned above can be compromised in situations where the drone is stationary while capturing a picture, as it assumes continuous motion and sequential image capture. In such cases, the calculation may yield incorrect estimates, potentially degrading results. However, as long as most images can be assigned accurate velocity estimates, rolling shutter correction can still be effective, even if a few images have incorrect estimates."}),"\n",(0,s.jsx)(t.p,{children:"Once the velocities are estimated, the program searches a database to retrieve the rolling shutter readout time for the camera sensor. This readout time represents the duration (in milliseconds) required for the sensor to capture an image. In cases where your camera is not listed in the database, a warning will appear in the task output:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{children:'[WARNING] Rolling shutter readout time for "make model" is not in \nour database, using default of 30ms which might be incorrect.\n'})}),"\n",(0,s.jsx)(a.Z,{img:i(5287),alt:"You can access the task output by expanding a task from the Dashboard and toggling the Task Output button to On. If the task output is truncated, first you'll need to download the task output to a file by pressing the Download To File button",padded:!0}),"\n",(0,s.jsx)(t.p,{children:"With known camera velocities and sensor readout times, the correction is applied by shifting image features based on these factors. Subsequently, the reconstruction is repeated, effectively doubling the processing time but enhancing accuracy in datasets influenced by rolling shutter distortions."}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsxs)(t.p,{children:["You can estimate the correct sensor value by creating a cost-effective calibration device using an Arduino. Detailed instructions are available at ",(0,s.jsx)(t.a,{href:"https://github.com/OpenDroneMap/RSCalibration",children:"github.com/OpenDroneMap/RSCalibration"}),"."]})}),"\n",(0,s.jsx)(t.h2,{id:"rolling-shutter-readout",children:"rolling-shutter-readout"}),"\n",(0,s.jsx)(t.p,{children:"Overrides the default sensor readout time value used for rolling shutter correction."}),"\n",(0,s.jsx)(t.h2,{id:"sfm-algorithm",children:"sfm-algorithm"}),"\n",(0,s.jsx)(t.p,{children:"There are three methods to reconstruct a scene:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Option"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Description"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"incremental"}),(0,s.jsx)(t.td,{children:"a general-purpose approach suitable for all scenes. It supports multiple cameras and adds them to the reconstruction incrementally, ensuring high reliability."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"triangulation"}),(0,s.jsxs)(t.td,{children:["If gimbal angles and GPS information are available, camera positions are initialized from those values in a single step and then iteratively improved. This method can yield better results and may be slightly faster than ",(0,s.jsx)(t.code,{children:"incremental"}),". However, it's experimental and may not work with all camera types."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"planar"}),(0,s.jsxs)(t.td,{children:["For flat scenes, like a farm field, captured with a single camera at a constant altitude and a downward-facing view (nadir), this option is recommended. It processes 5-10 times faster than the ",(0,s.jsx)(t.code,{children:"incremental"})," method and is compatible with multispectral datasets."]})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"sfm-no-partial",children:"sfm-no-partial"}),"\n",(0,s.jsx)(t.p,{children:"This option is always turned on. No need to worry about it."}),"\n",(0,s.jsx)(t.h2,{id:"skip-3dmodel",children:"skip-3dmodel"}),"\n",(0,s.jsx)(t.p,{children:"If a user only needs an orthophoto, there's no need to create a complete 3D model. This option saves time by skipping the steps for generating a 3D model. Instead, it creates a 2.5D model, where elevation is extruded from the ground plane. While not a full 3D model, it works effectively for rendering orthophotos, although it can't accurately represent objects like overhangs."}),"\n",(0,s.jsxs)(t.p,{children:["See also ",(0,s.jsx)(t.a,{href:"#use-3dmesh",children:"use-3dmesh"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"skip-band-alignment",children:"skip-band-alignment"}),"\n",(0,s.jsx)(t.p,{children:"When capturing multispectral images, the sensors for each band are often slightly misaligned, causing small misalignments between the image bands. ODM automatically aligns these bands as part of its multispectral processing. If manual alignment has already been done using other software, you can disable the automatic alignment using this option."}),"\n",(0,s.jsx)(t.h2,{id:"skip-orthophoto",children:"skip-orthophoto"}),"\n",(0,s.jsx)(t.p,{children:"If you don't require an orthophoto, this option can save you time by skipping the orthophoto generation step."}),"\n",(0,s.jsx)(t.h2,{id:"skip-report",children:"skip-report"}),"\n",(0,s.jsx)(t.p,{children:"If you don't require a PDF report, this option can save you some time by skipping the report generation step."}),"\n",(0,s.jsx)(t.h2,{id:"sky-removal",children:"sky-removal"}),"\n",(0,s.jsxs)(t.p,{children:["Utilizes AI methods to automatically create ",(0,s.jsx)(t.a,{href:"/how-to/image-masks",children:"image masks"})," for sky removal. This is beneficial for datasets that include sky portions, especially in cases where oblique images are used for 3D structure capture. Sky areas can introduce noise in the 3D model, and this option helps in its reduction."]}),"\n",(0,s.jsx)(a.Z,{img:i(982),alt:"3D point cloud without (top) and with sky masks (bottom). Sceaux castle model generated from photos by Pierre Moulon",padded:!0,smooth:!0}),"\n",(0,s.jsx)(t.h2,{id:"smrf-scalar",children:"smrf-scalar"}),"\n",(0,s.jsxs)(t.p,{children:["Sets the scalar variable for SMRF. See ",(0,s.jsx)(t.a,{href:"#pc-classify",children:"pc-classify"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"smrf-slope",children:"smrf-slope"}),"\n",(0,s.jsxs)(t.p,{children:["Sets the slope variable for SMRF. See ",(0,s.jsx)(t.a,{href:"#pc-classify",children:"pc-classify"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"smrf-threshold",children:"smrf-threshold"}),"\n",(0,s.jsxs)(t.p,{children:["Sets the threshold variable for SMRF. See ",(0,s.jsx)(t.a,{href:"#pc-classify",children:"pc-classify"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"smrf-window",children:"smrf-window"}),"\n",(0,s.jsxs)(t.p,{children:["Sets the window variable for SMRF. See ",(0,s.jsx)(t.a,{href:"#pc-classify",children:"pc-classify"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"texturing-keep-unseen-faces",children:"texturing-keep-unseen-faces"}),"\n",(0,s.jsx)(t.p,{children:"By default, if a triangle in the 3D textured model isn't visible by any camera, it's removed from the output."}),"\n",(0,s.jsx)(a.Z,{img:i(2852),alt:"Unseen faces are removed from the textured mesh (top) vs. faces are kept with no color (bottom)",padded:!0,smooth:!0}),"\n",(0,s.jsx)(t.p,{children:"This option directs the program to retain all triangles."}),"\n",(0,s.jsx)(t.h2,{id:"texturing-single-material",children:"texturing-single-material"}),"\n",(0,s.jsxs)(t.p,{children:["The 3D models created by WebODM Lightning are in the Wavefront OBJ",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-obj",id:"user-content-fnref-obj","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"15"})}),' format. This format supports storing color information across multiple image files (textures). Each texture in the model is linked to a "material." WebODM Lightning typically uses multiple materials and textures when generating OBJ files by default. However, some software may have issues opening OBJs with multiple materials, or performing certain operations on meshes with multiple materials, which can be complex. This is especially true when editing the mesh in programs like Blender',(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-blender",id:"user-content-fnref-blender","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"16"})}),"."]}),"\n",(0,s.jsx)(t.p,{children:"Enabling this option will produce an OBJ file with a single material."}),"\n",(0,s.jsx)(t.h2,{id:"texturing-skip-global-seam-leveling",children:"texturing-skip-global-seam-leveling"}),"\n",(0,s.jsx)(t.p,{children:"Images with significant color variations caused by differences in illumination and exposure need to be merged using a global optimization process. This process slightly affects reflectance/temperature values when processing multispectral datasets and it might be desirable to enable this option to turn it off."}),"\n",(0,s.jsx)(t.h2,{id:"texturing-skip-local-seam-leveling",children:"texturing-skip-local-seam-leveling"}),"\n",(0,s.jsxs)(t.p,{children:["The application of global seam leveling (discussed in ",(0,s.jsx)(t.a,{href:"#texturing-skip-global-seam-leveling",children:"texturing-skip-global-seam-leveling"}),") may not completely eliminate smaller seams."]}),"\n",(0,s.jsx)(t.p,{children:'To tackle this, localized Poisson editing is used to blend images at texture patch seams. This "local" method only affects a small 20-pixel buffer around patch boundaries.'}),"\n",(0,s.jsx)(t.p,{children:"This option disables local seam leveling (not recommended)."}),"\n",(0,s.jsx)(t.h2,{id:"tiles",children:"tiles"}),"\n",(0,s.jsxs)(t.p,{children:["This option creates static TMS",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-tms",id:"user-content-fnref-tms","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"17"})})," tiles for orthophotos and DEMs, ideal for hosting and sharing maps on websites. These tiles work seamlessly with various viewers, like Leaflet",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-leaflet",id:"user-content-fnref-leaflet","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"18"})}),". DEM tiles are produced with a colored hillshade style and can be downloaded from the cloud interface by clicking on the ",(0,s.jsx)(t.strong,{children:"Download Assets"})," button."]}),"\n",(0,s.jsx)(t.h2,{id:"use-3dmesh",children:"use-3dmesh"}),"\n",(0,s.jsx)(t.p,{children:"By default, a 2.5D textured mesh is used for orthophoto rendering, which usually works well for most aerial datasets. However, it may yield suboptimal results, especially when nadir images (images with the camera pointed straight or nearly straight at the ground) are missing. Furthermore, for specific scenes like single building orbits with oblique images, a 2.5D mesh may not perform well."}),"\n",(0,s.jsxs)(t.p,{children:["This option instructs the program to utilize the full 3D model for orthophoto generation while skipping the creation of the 2.5D model. For additional information, see ",(0,s.jsx)(t.a,{href:"#skip-3dmodel",children:"skip-3dmodel"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"use-exif",children:"use-exif"}),"\n",(0,s.jsxs)(t.p,{children:["When a GCP file is uploaded with a dataset, it is always used for georeferencing. Enabling this option causes the program to disregard the GCP file and rely on location information from the images' EXIF",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-exif",id:"user-content-fnref-exif-3","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})," tags instead."]}),"\n",(0,s.jsx)(t.h2,{id:"use-fixed-camera-params",children:"use-fixed-camera-params"}),"\n",(0,s.jsx)(t.p,{children:'Camera internal parameters are estimated and refined during reconstruction. Poor image capture practices can lead to incorrect estimations and a "doming" effect. Enabling this option keeps camera parameters fixed, potentially improving results when images have little geometric distortion.'}),"\n",(0,s.jsx)(t.admonition,{type:"warning",children:(0,s.jsx)(t.p,{children:"This option will not magically fix problems associated with poor image captures."})}),"\n",(0,s.jsx)(t.h2,{id:"use-hybrid-bundle-adjustment",children:"use-hybrid-bundle-adjustment"}),"\n",(0,s.jsx)(t.p,{children:"This option increases the number of times that bundle adjustment is performed."}),"\n",(0,s.jsx)(t.p,{children:"Turning on this option increases the total run-time, but can help increase the accuracy of the reconstruction in larger datasets that exhibit doming."}),"\n",(0,s.jsx)(t.h2,{id:"video-limit",children:"video-limit"}),"\n",(0,s.jsx)(t.p,{children:"WebODM Lightning can process video files (.mp4, .mov, .lrv, and .ts) by extracting image frames at regular intervals. The program automatically filters out blurry and dark frames."}),"\n",(0,s.jsxs)(t.p,{children:["For DJI drones, if a matching subtitle (.srt) file is available, it will be used to add GPS information to the extracted images. The subtitle file should have the same filename as the video file, and it is case-sensitive. For example, ",(0,s.jsx)(t.strong,{children:"video.mp4"})," should have a corresponding ",(0,s.jsx)(t.strong,{children:"video.srt"})," file."]}),"\n",(0,s.jsx)(t.p,{children:"This option allows you to set the number of images to extract from the video files."}),"\n",(0,s.jsx)(t.h2,{id:"video-resolution",children:"video-resolution"}),"\n",(0,s.jsx)(t.p,{children:"This option defines the resolution of the images extracted from video files. For instance, if a video file has a resolution of 3840x2160 pixels and set this option to 2000, the extracted images will be 2000x1125 pixels in resolution."}),"\n",(0,s.jsxs)(t.p,{children:["See also ",(0,s.jsx)(t.a,{href:"#video-limit",children:"video-limit"}),"."]}),"\n",(0,s.jsxs)(t.section,{"data-footnotes":!0,className:"footnotes",children:[(0,s.jsx)(t.h2,{className:"sr-only",id:"footnote-label",children:"Footnotes"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{id:"user-content-fn-exif",children:["\n",(0,s.jsxs)(t.p,{children:["EXIF Tags: ",(0,s.jsx)(t.a,{href:"https://exiftool.org/TagNames/EXIF.html",children:"exiftool.org/TagNames/EXIF.html"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-exif","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})," ",(0,s.jsxs)(t.a,{href:"#user-content-fnref-exif-2","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:["\u21a9",(0,s.jsx)(t.sup,{children:"2"})]})," ",(0,s.jsxs)(t.a,{href:"#user-content-fnref-exif-3","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:["\u21a9",(0,s.jsx)(t.sup,{children:"3"})]})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-xmp",children:["\n",(0,s.jsxs)(t.p,{children:["XMP Tags: ",(0,s.jsx)(t.a,{href:"https://exiftool.org/TagNames/XMP.html",children:"exiftool.org/TagNames/XMP.html"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-xmp","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-smrf",children:["\n",(0,s.jsxs)(t.p,{children:["SMRF: A Simple Morphological Filter for Ground Identification of LIDAR Data. ",(0,s.jsx)(t.a,{href:"http://tpingel.org/code/smrf/smrf.html",children:"tpingel.org/code/smrf/smrf.html"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-smrf","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})," ",(0,s.jsxs)(t.a,{href:"#user-content-fnref-smrf-2","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:["\u21a9",(0,s.jsx)(t.sup,{children:"2"})]})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-sift",children:["\n",(0,s.jsxs)(t.p,{children:["SIFT: Scale Invariant Feature Transform. ",(0,s.jsx)(t.a,{href:"https://cs.ubc.ca/~lowe/papers/ijcv04.pdf",children:"cs.ubc.ca/~lowe/papers/ijcv04.pdf"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-sift","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-dspsift",children:["\n",(0,s.jsxs)(t.p,{children:["DSP-SIFT: Domain-Size Pooling in Local Descriptors. ",(0,s.jsx)(t.a,{href:"https://arxiv.org/pdf/1412.8556.pdf",children:"https://arxiv.org/pdf/1412.8556.pdf"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-dspsift","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-akaze",children:["\n",(0,s.jsxs)(t.p,{children:["AKAZE: Accelerated-KAZE. KAZE is a Japanese word that means ",(0,s.jsx)(t.em,{children:"wind"})," (a tribute to Iijima, the father of scale space analysis). ",(0,s.jsx)(t.a,{href:"http://robesafe.com/personal/pablo.alcantarilla/papers/Alcantarilla13bmvc.pdf",children:"robesafe.com/personal/pablo.alcantarilla/papers/Alcantarilla13bmvc.pdf"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-akaze","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-hahog",children:["\n",(0,s.jsxs)(t.p,{children:["HAHOG: Hessian Affine (point detector) + Histogram of Oriented Gradients (descriptor). ",(0,s.jsx)(t.a,{href:"https://github.com/mapillary/OpenSfM/blob/main/opensfm/src/features/src/hahog.cc",children:"github.com/mapillary/OpenSfM/blob/main/opensfm/src/features/src/hahog.cc"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-hahog","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-orb",children:["\n",(0,s.jsxs)(t.p,{children:["ORB: Oriented FAST (point detector) and Rotated BRIEF (descriptor). ",(0,s.jsx)(t.a,{href:"https://gwylab.com/download/ORB_2012.pdf",children:"gwylab.com/download/ORB_2012.pdf"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-orb","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-rtk",children:["\n",(0,s.jsxs)(t.p,{children:["RTK: Real Time Kinematic is a technique used to increase the accuracy of GPS positions using a stationary base station that sends out correctional data to the drone. ",(0,s.jsx)(t.a,{href:"#user-content-fnref-rtk","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-delaunay",children:["\n",(0,s.jsxs)(t.p,{children:["Delaunay Triangulation: ",(0,s.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Delaunay_triangulation",children:"en.wikipedia.org/wiki/Delaunay_triangulation"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-delaunay","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-bow",children:["\n",(0,s.jsxs)(t.p,{children:["Bag-of-words model in computer vision: ",(0,s.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Bag-of-words_model_in_computer_vision",children:"en.wikipedia.org/wiki/Bag-of-words_model_in_computer_vision"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-bow","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-las",children:["\n",(0,s.jsxs)(t.p,{children:["LAS 1.4 Specification: ",(0,s.jsx)(t.a,{href:"https://asprs.org/wp-content/uploads/2010/12/LAS_1_4_r13.pdf",children:"asprs.org/wp-content/uploads/2010/12/LAS_1_4_r13.pdf"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-las","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-openpointclass",children:["\n",(0,s.jsxs)(t.p,{children:["OpenPointClass: Fast and memory efficient semantic segmentation of 3D point clouds. ",(0,s.jsx)(t.a,{href:"https://github.com/uav4geo/openpointclass",children:"github.com/uav4geo/openpointclass"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-openpointclass","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-sensors",children:["\n",(0,s.jsxs)(t.p,{children:["Supported Multispectral Hardware: ",(0,s.jsx)(t.a,{href:"https://docs.opendronemap.org/multispectral/#hardware",children:"docs.opendronemap.org/multispectral/#hardware"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-sensors","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-obj",children:["\n",(0,s.jsxs)(t.p,{children:["Wavefront OBJ: ",(0,s.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Wavefront_.obj_file",children:"en.wikipedia.org/wiki/Wavefront_.obj_file"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-obj","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-blender",children:["\n",(0,s.jsxs)(t.p,{children:["Blender: ",(0,s.jsx)(t.a,{href:"https://blender.org",children:"blender.org"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-blender","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-tms",children:["\n",(0,s.jsxs)(t.p,{children:["TMS: Tile Map Service: ",(0,s.jsx)(t.a,{href:"https://wiki.openstreetmap.org/wiki/TMS",children:"wiki.openstreetmap.org/wiki/TMS"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-tms","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-leaflet",children:["\n",(0,s.jsxs)(t.p,{children:["Leaflet: ",(0,s.jsx)(t.a,{href:"https://leafletjs.com/",children:"leafletjs.com/"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-leaflet","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n"]}),"\n"]})]})}const p=function(e={}){const{wrapper:t}=Object.assign({},(0,n.ah)(),e.components);return t?(0,s.jsx)(t,Object.assign({},e,{children:(0,s.jsx)(h,e)})):h(e)}}}]); \ No newline at end of file diff --git a/assets/js/e1835986.42a402e0.js b/assets/js/e1835986.42a402e0.js new file mode 100644 index 0000000..38ed037 --- /dev/null +++ b/assets/js/e1835986.42a402e0.js @@ -0,0 +1 @@ +(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[68],{3225:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/accessing_task_options.8c32ff3.640.png 640w,"+i.p+"assets/ideal-img/accessing_task_options.7eb1c9c.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/accessing_task_options.8c32ff3.640.png",width:640,height:427},{path:i.p+"assets/ideal-img/accessing_task_options.7eb1c9c.1024.png",width:1024,height:683}],src:i.p+"assets/ideal-img/accessing_task_options.8c32ff3.640.png",toString:function(){return i.p+"assets/ideal-img/accessing_task_options.8c32ff3.640.png"},placeholder:void 0,width:640,height:427},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAHCAYAAAAxrNxjAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA1UlEQVR4nDWOO0vEUBCF7/9vbW1FkLWwsbHTRgSJuKgpXNRkdxUlibmP3GfuJzfqwDBn4JszR0hl8CHwXznnZV5d33JweMTp+QWbpkFM1qHNhDET2hiU0ngfln34HpFKYZ1DGGPo+h4pFcMo0dYR07w4l04p4b1HaF3AgRgTzjren+rct20uQLAWa+0vWMTH5xePzxu887xVVd7XdQ4pYYvrX27hnKPrel63O5Q2hBDw84zZNoxnJ6yOV1zeVIjyYk5puYoxLmDJGMYB93DP+m7NS7vnBwXmCWDEv55EAAAAAElFTkSuQmCC"}},687:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/auto_boundary.016d390.640.png 640w,"+i.p+"assets/ideal-img/auto_boundary.5762f42.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/auto_boundary.016d390.640.png",width:640,height:201},{path:i.p+"assets/ideal-img/auto_boundary.5762f42.1024.png",width:1024,height:322}],src:i.p+"assets/ideal-img/auto_boundary.016d390.640.png",toString:function(){return i.p+"assets/ideal-img/auto_boundary.016d390.640.png"},placeholder:void 0,width:640,height:201},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAC4jAAAuIwF4pT92AAAAUUlEQVR4nFWKsQkAIRDA3H8Rl7BzAq0OKxeQQ1CwECMKwn8gVWLWWhxSSjjnEBF675RSaK3ddjBvDCFgrSXGiKpSa+W135hzxnvPGIM55/XLBg6CcbB/3jGXAAAAAElFTkSuQmCC"}},6826:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/cutline.54e0da2.640.png 640w,"+i.p+"assets/ideal-img/cutline.008d29b.1003.png 1003w",images:[{path:i.p+"assets/ideal-img/cutline.54e0da2.640.png",width:640,height:561},{path:i.p+"assets/ideal-img/cutline.008d29b.1003.png",width:1003,height:879}],src:i.p+"assets/ideal-img/cutline.54e0da2.640.png",toString:function(){return i.p+"assets/ideal-img/cutline.54e0da2.640.png"},placeholder:void 0,width:640,height:561},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAJCAIAAACExCpEAAAACXBIWXMAAC4jAAAuIwF4pT92AAABHklEQVR4nGP49+/f379/////9////99/fhw7c3bp8tZr13f/////37+/DP/+gSQ+ffl04OyG3gVFHRMrypqcZs6v+vsXJM7w5v2rdftnpTV4p9f59c7JmDA7f83KOdnVTkdO7wNJL9881zdHM608vn96c0lDZmNnce/03JrWiCWrJoGk569tzG8InTGno2liUEV7+IRpdd5J2vmF2WsWz33y9AHD+u3z16yc3j4xobjZIb8qvrO7Jzk/NDY1LDrJ9cTRowy3rt5r7k0obbHtnZQyacLUjp7OxHyf2EzrBUs6//35z/D///+T53e29Sd3dZfmlEaFxrvnlvotWdn3/fsPkN0Qj71583r16nkbli2cPaN947rlP358A/v7HwAIX7JDXNvkxwAAAABJRU5ErkJggg=="}},6945:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/dem_euclidean_map.9c919a6.640.png 640w,"+i.p+"assets/ideal-img/dem_euclidean_map.3515974.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/dem_euclidean_map.9c919a6.640.png",width:640,height:209},{path:i.p+"assets/ideal-img/dem_euclidean_map.3515974.1024.png",width:1024,height:334}],src:i.p+"assets/ideal-img/dem_euclidean_map.9c919a6.640.png",toString:function(){return i.p+"assets/ideal-img/dem_euclidean_map.9c919a6.640.png"},placeholder:void 0,width:640,height:209},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAD+wAAA/sAFldtx/AAAAeUlEQVR4nD3MsQ3DIBBAUYZIkXU8QSbxFhkhDStQgdKAKCiQ6LggneBwhSy3LOCKyBT+9dNnjDGmlFq11ocxZpNSLs65ByL+EHFPKX0uM7PWvgFglFJGrfUlhHi21s7e+yCi7w1jjKv3/gghbES0cM7nMee8A8A8/gH8rEdrhZWwtwAAAABJRU5ErkJggg=="}},4022:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/dem_gapfill_interpolation.f268334.640.png 640w,"+i.p+"assets/ideal-img/dem_gapfill_interpolation.c5d5604.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/dem_gapfill_interpolation.f268334.640.png",width:640,height:244},{path:i.p+"assets/ideal-img/dem_gapfill_interpolation.c5d5604.1024.png",width:1024,height:391}],src:i.p+"assets/ideal-img/dem_gapfill_interpolation.f268334.640.png",toString:function(){return i.p+"assets/ideal-img/dem_gapfill_interpolation.f268334.640.png"},placeholder:void 0,width:640,height:244},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAACXBIWXMAAD+wAAA/sAFldtx/AAAAcElEQVR4nGNgYGBgZIAApmnTpvUdPXp0spmZGR8DAwM3VBwC/v//D1PIcuzYsRMXL148b2NjI8jAwMBrb2/PgqFw//79LBs3bjy5bNmy87q6uiCFQsbGxqzIhsJMZE5PT2/Kzc1tV1FRAVnNiyTHAAC5hyEXs8gAbAAAAABJRU5ErkJggg=="}},5497:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/dem_gapfill_steps.8588601.640.png 640w,"+i.p+"assets/ideal-img/dem_gapfill_steps.b503622.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/dem_gapfill_steps.8588601.640.png",width:640,height:209},{path:i.p+"assets/ideal-img/dem_gapfill_steps.b503622.1024.png",width:1024,height:334}],src:i.p+"assets/ideal-img/dem_gapfill_steps.8588601.640.png",toString:function(){return i.p+"assets/ideal-img/dem_gapfill_steps.8588601.640.png"},placeholder:void 0,width:640,height:209},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAD+wAAA/sAFldtx/AAAAhElEQVR4nGO4ePFi/IWzZyMYGBhYDlVWip5pbc3eUlrqyMDAwHDL0THzuqPjgtPW1g4ML168+Hj16tWHDAwMnDe6u03fzp79/3BNzTyQwuceHsf++fv/P2Vh0c5w7ty55GXLlsUwMDAwHWptFd1TX18wJy0NbOJ1J6f0S/b2Cw6amtoBAIA1NfYVmPJaAAAAAElFTkSuQmCC"}},8e3:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/dem_resolution.8d48364.640.png 640w,"+i.p+"assets/ideal-img/dem_resolution.d60f959.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/dem_resolution.8d48364.640.png",width:640,height:209},{path:i.p+"assets/ideal-img/dem_resolution.d60f959.1024.png",width:1024,height:334}],src:i.p+"assets/ideal-img/dem_resolution.8d48364.640.png",toString:function(){return i.p+"assets/ideal-img/dem_resolution.8d48364.640.png"},placeholder:void 0,width:640,height:209},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAD+wAAA/sAFldtx/AAAAX0lEQVR4nGNggABmBgYGFgYGBkFvb2+X+vp6ozNnzrBC5RBAXFycm4GBQVhMTEzp4cOHd9++ffv/1KlTpiC5////M8EV/v//nxFE19fXs929e3f//fv3nx0/flwPWSEAg14j0VhN1EMAAAAASUVORK5CYII="}},1112:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/dsm_vs_dtm.8e18349.640.png 640w,"+i.p+"assets/ideal-img/dsm_vs_dtm.0a8b2b0.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/dsm_vs_dtm.8e18349.640.png",width:640,height:149},{path:i.p+"assets/ideal-img/dsm_vs_dtm.0a8b2b0.1024.png",width:1024,height:238}],src:i.p+"assets/ideal-img/dsm_vs_dtm.8e18349.640.png",toString:function(){return i.p+"assets/ideal-img/dsm_vs_dtm.8e18349.640.png"},placeholder:void 0,width:640,height:149},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAACCAYAAABhYU3QAAAACXBIWXMAACqnAAAqpwFRLbg4AAAASElEQVR4nCWKMQrAIBTF0m5W4Vnon7oJ3kJw8twe7ZdPsyUE4ABq7/2dcz7AyU8dY9jeu7h7PFwRJd2tNQEZSOGS6lorm1n5AKZMChB4P1aFAAAAAElFTkSuQmCC"}},2021:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/graph_rounds.27da6b9.640.png 640w,"+i.p+"assets/ideal-img/graph_rounds.a6eb5b2.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/graph_rounds.27da6b9.640.png",width:640,height:201},{path:i.p+"assets/ideal-img/graph_rounds.a6eb5b2.1024.png",width:1024,height:322}],src:i.p+"assets/ideal-img/graph_rounds.27da6b9.640.png",toString:function(){return i.p+"assets/ideal-img/graph_rounds.27da6b9.640.png"},placeholder:void 0,width:640,height:201},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAC4jAAAuIwF4pT92AAAAXUlEQVR4nD3MMQ4AEQBE0b3/GXRugcYFnEEjEUFQKBT+hmR32v8yz96bs9YaSilKKYwx0FrjvWetdfvzwZwzUkpijKSUEELgnGPOyTE/PI/GGGqt9N6x1hJCuOjAF6INbuOiP+3lAAAAAElFTkSuQmCC"}},7913:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/image_features.9903742.640.png 640w,"+i.p+"assets/ideal-img/image_features.bdf6684.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/image_features.9903742.640.png",width:640,height:239},{path:i.p+"assets/ideal-img/image_features.bdf6684.1024.png",width:1024,height:383}],src:i.p+"assets/ideal-img/image_features.9903742.640.png",toString:function(){return i.p+"assets/ideal-img/image_features.9903742.640.png"},placeholder:void 0,width:640,height:239},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAIAAAA4WjmaAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAh0lEQVR4nAF8AIP/ANHBuqKpcai0ea62fKOpd52TntXM28/Ctp6obqCubADWw8awsYWcrGmmsnehp3K1qK/Px9bVw8GqrXyYqWMA1r/HurKVmKJmna5spa12x7/FxcDN18HGt7ORlqJkANjI09bFv52hbZmpY6WzecfBycW/zN7O2dDBtpObXzdgUD0+kIncAAAAAElFTkSuQmCC"}},573:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/input_surface_model.edc62f8.640.png 640w,"+i.p+"assets/ideal-img/input_surface_model.1366932.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/input_surface_model.edc62f8.640.png",width:640,height:512},{path:i.p+"assets/ideal-img/input_surface_model.1366932.1024.png",width:1024,height:819}],src:i.p+"assets/ideal-img/input_surface_model.edc62f8.640.png",toString:function(){return i.p+"assets/ideal-img/input_surface_model.edc62f8.640.png"},placeholder:void 0,width:640,height:512},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAB7CAAAewgFu0HU+AAABJUlEQVR4nBXBzUvCYADA4f2JXQPRQtJiiR/T8HU1p1Nn6lTMGX6sUvMDMiWSokKITkHeCqJrh+jUJTz/oueRfr5/mc2XmOMpteqc5GBKzu6R605I2T0Wzy/8k64flrgzdTx5i2ixj1w9JWbF8BspvAdpvMk4rx9vSE77HiV8jKa0SETqxIM19kJN9kUToRfwCJVGq4NUlpuINYO4y0RsFCm5HcrBMWX1BkNvsalWqNRvkfLmENVnY/octHWLrNvG2h2ST8zQUmf4jTxG1kaKDs7ZDlpUQ1NUv03Se0RFucQQI4zMFXJGJxwTSPpogitySNrfJbFuoe200QJ1FLmI0E/Y0gOUqibS++cX7bsFzcoEJ3lBwexjptsUjCENp8Ps6ZHVasUfWJLWrONBbVYAAAAASUVORK5CYII="}},8612:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/matcher_neighbors.f438a64.640.png 640w,"+i.p+"assets/ideal-img/matcher_neighbors.5df57b1.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/matcher_neighbors.f438a64.640.png",width:640,height:202},{path:i.p+"assets/ideal-img/matcher_neighbors.5df57b1.1024.png",width:1024,height:323}],src:i.p+"assets/ideal-img/matcher_neighbors.f438a64.640.png",toString:function(){return i.p+"assets/ideal-img/matcher_neighbors.f438a64.640.png"},placeholder:void 0,width:640,height:202},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAITvAACE7wFO9C1tAAAAXUlEQVR4nD3MMQ6EIBBA0V86065KWLfxbLQUXIIODjChp+aIBrP665cPQK1VWmuulLL23l0IwQEfVfWATHNnZjrG+IrIEWM8U0oTTPwD9IXPMee8mZn/H1dgB5aJLp9bGL/3j5I9AAAAAElFTkSuQmCC"}},852:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/mesh_octree_depth_comp.924da56.640.png 640w,"+i.p+"assets/ideal-img/mesh_octree_depth_comp.07f978e.867.png 867w",images:[{path:i.p+"assets/ideal-img/mesh_octree_depth_comp.924da56.640.png",width:640,height:893},{path:i.p+"assets/ideal-img/mesh_octree_depth_comp.07f978e.867.png",width:867,height:1210}],src:i.p+"assets/ideal-img/mesh_octree_depth_comp.924da56.640.png",toString:function(){return i.p+"assets/ideal-img/mesh_octree_depth_comp.924da56.640.png"},placeholder:void 0,width:640,height:893},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAC4jAAAuIwF4pT92AAAB0ElEQVR4nBXOa1eaAACAYX5DH3bLNptCIio0lBIFJBUUFa9DWxdXmpdW6dY51dlZH/bL3509v+ARft3O+bNd0a0dsZgMsCyDmmcQhmWeNnOeNhvklIIgpnY4nX3j5+srd8s5q9mY6+kFP9YLZldn9Dou8+8RQtmKMZw4nC0jppcu7W6R2c09zy9/eX75Tc3LYJb3ERrVLO0gxSBU6fcM/DDHaNRkub4j+l+xddpBAcE/UQjbWTptlU6QI2jKdDoZypZEWokzHgxYTi8RGnUZryZRtUW0wz2KxQSWmcS2daJRxHZ5w2YxRzCNBIUvHynkY3w+2CFx8Bb9UKF5es7Z9YLxMOLxdoWQSu/SajjkNYl62SAlxUnLIrIiYhZ1qpUyzRMTQZQ/cNL28IKAYRgw+RoyiSJGgy69ThNVTeDYGkIuk6Zkq5iugesoWJbGYDBmvXrg4mKKbiTJqO8QdG2fo0KcaiVFvZ6lVBExzUP6/SH9URfbydFq5BHsooRbkXBsCb+u0Gop+L7CcVGkZKZZX53zsnlAKBx9Qs/HcEpJcrld8oV9PDeNV80T+D5PD/e8Pm4RJOUNcvY9uhEno+2hajFcM8OxbRH0hrSaLbbrJf8Ajnv77CkwbM8AAAAASUVORK5CYII="}},8539:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/normal_vs_fastortho.c9f349e.640.jpg 640w,"+i.p+"assets/ideal-img/normal_vs_fastortho.6237a5f.1024.jpg 1024w",images:[{path:i.p+"assets/ideal-img/normal_vs_fastortho.c9f349e.640.jpg",width:640,height:728},{path:i.p+"assets/ideal-img/normal_vs_fastortho.6237a5f.1024.jpg",width:1024,height:1165}],src:i.p+"assets/ideal-img/normal_vs_fastortho.c9f349e.640.jpg",toString:function(){return i.p+"assets/ideal-img/normal_vs_fastortho.c9f349e.640.jpg"},placeholder:void 0,width:640,height:728},preSrc:"data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAALAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAQMF/8QAIhAAAwABAwMFAAAAAAAAAAAAAQIDBAAREgUhMQYUQVFh/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgT/xAAbEQACAQUAAAAAAAAAAAAAAAAAAQIDEjFR0f/aAAwDAQACEQMRAD8AyrmIhFY4J4tSfLIaZGy9/keSfrTUxWrg+mjQgkc/Z7cv3bT1a1Ev0/HRysaZaBlHggb7apm2rHMvObsqJRlUA+AD21Paot8Wg08H/9k="}},1855:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/options_as_shown_in_webodm.c8bf853.640.png 640w,"+i.p+"assets/ideal-img/options_as_shown_in_webodm.029ceb6.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/options_as_shown_in_webodm.c8bf853.640.png",width:640,height:527},{path:i.p+"assets/ideal-img/options_as_shown_in_webodm.029ceb6.1024.png",width:1024,height:843}],src:i.p+"assets/ideal-img/options_as_shown_in_webodm.c8bf853.640.png",toString:function(){return i.p+"assets/ideal-img/options_as_shown_in_webodm.c8bf853.640.png"},placeholder:void 0,width:640,height:527},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAC4jAAAuIwF4pT92AAAAy0lEQVR4nG2PvU7DMBSF/fTMjIiFiRdg7hMwBoUOIFdEKSV2Eit22tgJ9ocSVEtIHOnoDvc790cUr2/I6pP6S2Ps+Mf94HAXz/79gFCqwbozMSX+0xIjRVkijqeGzgwZ9vPMGll9DVd1jahPGusueB+YQuC5KAghbECMcatKK4TWGh8C1o0M611mYJr8BnxfQaUQTaNw45nJ/zZXpZSyM6jUOnHOa/ITy4Lue+THkZdyj5BSYq2l67rNbdtijOFQVTztdtzc3nH/8MgP0c8wqoY6AZYAAAAASUVORK5CYII="}},310:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/pc_filter.de9d1d3.640.png 640w,"+i.p+"assets/ideal-img/pc_filter.543cd6a.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/pc_filter.de9d1d3.640.png",width:640,height:250},{path:i.p+"assets/ideal-img/pc_filter.543cd6a.1024.png",width:1024,height:401}],src:i.p+"assets/ideal-img/pc_filter.de9d1d3.640.png",toString:function(){return i.p+"assets/ideal-img/pc_filter.de9d1d3.640.png"},placeholder:void 0,width:640,height:250},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAACXBIWXMAAJqLAACaiwH9WadrAAAAqUlEQVR4nGNgYGBg+G9qKvzOwED/tb6+w2N9fe9zWlohBzQ0Avdradn8t7AQAqlhuKWhYXFBXT3vha5u6gtd3ZTDWlqVBzQ1qw9qa9fs1NBoOaulVfRfX9+A4b6hoeU1S8uKV7q6qW/09JJ3a2o27tPSqjuppVV+TFOzar+GRu1zfX0zsKn/AwPFQFZ/0te3fqSn535ZW9v3hq6u8x0dHZNPBgaiDAwMjAC8BDcm+o8xnQAAAABJRU5ErkJggg=="}},6481:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/pc_skip_geometric.1e29e16.640.png 640w,"+i.p+"assets/ideal-img/pc_skip_geometric.131d733.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/pc_skip_geometric.1e29e16.640.png",width:640,height:186},{path:i.p+"assets/ideal-img/pc_skip_geometric.131d733.1024.png",width:1024,height:298}],src:i.p+"assets/ideal-img/pc_skip_geometric.1e29e16.640.png",toString:function(){return i.p+"assets/ideal-img/pc_skip_geometric.1e29e16.640.png"},placeholder:void 0,width:640,height:186},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAABXWAAAV1gHWa1n9AAAAe0lEQVR4nBXITQuCMACA4f3MmhlKh5ia1CE61FYSmxRIh+oiROEHdpo/8Y2e4yPW40g+dKRtS9r1qNebzf++HUnTkPUDSdMitt6jnCatP0TVndBV7PyIsnuWz5r49mBSOITUluB8ZaZL5Mowjw3BwTItSkJzQeZHosWJH8zdS+td3cWYAAAAAElFTkSuQmCC"}},7041:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/point_cloud_and_shrinked_bounds.4690649.640.png 640w,"+i.p+"assets/ideal-img/point_cloud_and_shrinked_bounds.9d69fa9.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/point_cloud_and_shrinked_bounds.4690649.640.png",width:640,height:192},{path:i.p+"assets/ideal-img/point_cloud_and_shrinked_bounds.9d69fa9.1024.png",width:1024,height:307}],src:i.p+"assets/ideal-img/point_cloud_and_shrinked_bounds.4690649.640.png",toString:function(){return i.p+"assets/ideal-img/point_cloud_and_shrinked_bounds.4690649.640.png"},placeholder:void 0,width:640,height:192},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAACXBIWXMAAC1HAAAtRwHZ/3hdAAAAg0lEQVR4nBXKLwqCMRgH4BfEZPYAmg0ieAGLybsMdgT7DrC8E3xh7F/Z+2OsyT6wWLRosNsnqw8PEdFaKXWx1r6mabp571dERDnnA4AngK+UcjeMmPk6z3Nn5p8xZk9Ei1qrTCn1EEJvrZ3HWwohTs65D4CH1nozMMa4ZeY7gHcp5fgH+B5AwRa0+RIAAAAASUVORK5CYII="}},4242:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/point_cloud_classification.948f54d.640.png 640w,"+i.p+"assets/ideal-img/point_cloud_classification.7061409.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/point_cloud_classification.948f54d.640.png",width:640,height:612},{path:i.p+"assets/ideal-img/point_cloud_classification.7061409.1024.png",width:1024,height:979}],src:i.p+"assets/ideal-img/point_cloud_classification.948f54d.640.png",toString:function(){return i.p+"assets/ideal-img/point_cloud_classification.948f54d.640.png"},placeholder:void 0,width:640,height:612},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABZUlEQVR4nAXB4U8SYQDA4fcm4iUaSBPd3hRJp8jhmTpLEIaA6KFysCs80EgMPDAOtXYoq7U+9If/eh4xab6gVj122k8Ytx2Kzoi1q1+ErBGTFQ9fZYS/+oyIlBsUW6f0H064c8v0HmoMht+wOzfsWJdolsPrwjUiZe3z/OOEp55Fs31Ix31Pf5jF+2lj1bM0v1houTxCXdXJHOe4MHNUamkajSO+tk1q9gUfMrs0W030bAmhRKKI0BK++XdMy3WWEykWNvaYW9EIxzZZjOso88uIqaKLWnZZadkkhwWM+yTpKwP56RL/mcNE/jv+0hChdk3k31M2xxaxf+dsj+uYj+fYv7fQx/sUugcE6yYi4GSIe3fsDXrIP8fIrsP6rYvmDNgYH9DyosQaKYRPJpnV8iyUckSreeLtMnrfIH2f5eN1gq3PBjOJI4QyG0YEgiivwiiBNwSX3jItJREZQo1IlDmJEgjxHw4drU0Ck7bUAAAAAElFTkSuQmCC"}},982:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/sky_removal.8825760.640.png 640w,"+i.p+"assets/ideal-img/sky_removal.340e22d.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/sky_removal.8825760.640.png",width:640,height:711},{path:i.p+"assets/ideal-img/sky_removal.340e22d.1024.png",width:1024,height:1138}],src:i.p+"assets/ideal-img/sky_removal.8825760.640.png",toString:function(){return i.p+"assets/ideal-img/sky_removal.8825760.640.png"},placeholder:void 0,width:640,height:711},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAALCAYAAABGbhwYAAAACXBIWXMAABXXAAAV1wEELLsZAAABnElEQVR4nB3Da09ScQDA4f83gKWsVi9CYybOkcoZR6Wt7K4QRMCRq3q4nTM4XBygE4iblVhJxYtaW2/cetHWZX2E1hc6H+HX5rM9wmKxMz09x+Liba5dXeDhpsL9TQXX8l3kO0Hmb21gtc4i7PZ7PHiSRasOSes99OY7MvsnF3e1QwqHI9xrCmJ1tUz/+BOaXsaoHNAdnNAbviKb0wn6A5y+fU21PUY8enzGcfeUip4kV8jQG3ToDlrkC7v4fRv02/vEUwOEmvnHi6Pv5PNnROOfCcdGBKM9ovEJEaWPpr8hkfiJkOUykmSwsmLgkWosL+kXPVIVSargdmvIch5htc5waWoOx00Z22UnDuc61x0ebFfmmZldYsrmxGq5gVhwKoRjTRJqnefJOrnqS1Sjhy9cJBRRiSWLuFwJhNd7RLv1nkatxEGjwccPYyaTMc16FSUSZNhpse4tIEKhcwadEVp2j3BcJ1dskNHKbCd1tnxPqRkltnwjhKr+NY3SbzOV/mYq27/MwLMvpj8wMZXYD1OJnZupva9meueP+R/qVOIvU3e33wAAAABJRU5ErkJggg=="}},4152:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/smrf_model_default.a075320.640.png 640w,"+i.p+"assets/ideal-img/smrf_model_default.9b6ba4c.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/smrf_model_default.a075320.640.png",width:640,height:512},{path:i.p+"assets/ideal-img/smrf_model_default.9b6ba4c.1024.png",width:1024,height:819}],src:i.p+"assets/ideal-img/smrf_model_default.a075320.640.png",toString:function(){return i.p+"assets/ideal-img/smrf_model_default.a075320.640.png"},placeholder:void 0,width:640,height:512},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAB7CAAAewgFu0HU+AAABKElEQVR4nAXBS0sCUQCA0fmN7SqoRRIUiQ8KJdS8jpPaVRMd89mYoaJoU+pIqYEKQbsWFYS7oBYR0UKiZV/nKN+fC4bdR4qVW3JyiJ4fk0uPKJYmZApjru8egT+U6ewFp/ccn2ihBk2EZuKPdvCEawjRwS8veH37QqlXJngdZVTnGcJuoDqqhDwNQvstpGbhC3foXT+gFN011KUkkeUM0WUduV4kaW9y7BsgwxYHhyal0wlKOtlFbJU5shloqxnkWoGUvUnCbxELWwQjJunsCCVmjXDtnSB3Gqi2AonNKqndS+IBi5jWR413SWWHKAlzyKY/T2CjhFjRkdt1jtxtIu4OmujjSjQx2jOU+fsHjek9hn5FTfQohQaU5RgjNaZ/88T0ec7i55d/eBbhFFtPkzkAAAAASUVORK5CYII="}},5278:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/smrf_model_improved.b1e00c9.640.png 640w,"+i.p+"assets/ideal-img/smrf_model_improved.35a80f6.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/smrf_model_improved.b1e00c9.640.png",width:640,height:512},{path:i.p+"assets/ideal-img/smrf_model_improved.35a80f6.1024.png",width:1024,height:819}],src:i.p+"assets/ideal-img/smrf_model_improved.b1e00c9.640.png",toString:function(){return i.p+"assets/ideal-img/smrf_model_improved.b1e00c9.640.png"},placeholder:void 0,width:640,height:512},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAB7CAAAewgFu0HU+AAABKUlEQVR4nBXKyy/DcADA8f6Nbki44MI8xpKFzePXx5q1q2UPxkpXkQXRrXuU2DIbEnEhXDhIJMJJuEhEnL6yz/kjfX18c1Z5oORcUjBabBQ6bGbaFIs98oU251dP9Em9ziPxiIes+CTW6siaj6z6yHIVIaoIs8br+ydS2ekSmy2hzLmIkIMys4cWPUKPVTDUJnHVo356h7QV3kcMpNAHs+iDOYzRbVJTB1hLTQwlQCR8bKeLtGEFaJMljHGHxHAOY2SLdOgQKx6QVANk3SebbyGt17pEIzuYU2W0sSLWhEt6oYK53CSpBShmnXQ/ZrwO07FdVsdsxFAOc7JMMnyMPu+hrtRZTFZxvWuk57cPji9ucfMN9tdq2OIE22jjZro0qvfc3L/w8/vHP1iQ4mD5+Cq7AAAAAElFTkSuQmCC"}},5287:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/task_output_toggle.a880b19.640.png 640w,"+i.p+"assets/ideal-img/task_output_toggle.c1deaf8.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/task_output_toggle.a880b19.640.png",width:640,height:409},{path:i.p+"assets/ideal-img/task_output_toggle.c1deaf8.1024.png",width:1024,height:654}],src:i.p+"assets/ideal-img/task_output_toggle.a880b19.640.png",toString:function(){return i.p+"assets/ideal-img/task_output_toggle.a880b19.640.png"},placeholder:void 0,width:640,height:409},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAAC4jAAAuIwF4pT92AAAApElEQVR4nFWO2QqDMBRE8/9fVQp9LhT61FLRxsRoY9xQsUlOUbrQgWHg3sMwQpcW2w6smuYZZSpq1+K9x84OtzT4GBC3VFLZegNlrlHasCxPYojb7SNhqgdSF4zTzPl4osz19gghEOLbISAKU5HeFdck21IVJdY1v6oI/ukRUhUkWc7llrLOkNr8gyu7NnbDQNN21K6h7Xq6fmAcp+/GvnbsdwdegKDlmu27buQAAAAASUVORK5CYII="}},2852:(e,t,i)=>{e.exports={src:{srcSet:i.p+"assets/ideal-img/texturing_keep_unseen_faces.11598fa.640.png 640w,"+i.p+"assets/ideal-img/texturing_keep_unseen_faces.d483d4c.1024.png 1024w",images:[{path:i.p+"assets/ideal-img/texturing_keep_unseen_faces.11598fa.640.png",width:640,height:763},{path:i.p+"assets/ideal-img/texturing_keep_unseen_faces.d483d4c.1024.png",width:1024,height:1221}],src:i.p+"assets/ideal-img/texturing_keep_unseen_faces.11598fa.640.png",toString:function(){return i.p+"assets/ideal-img/texturing_keep_unseen_faces.11598fa.640.png"},placeholder:void 0,width:640,height:763},preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAACXBIWXMAAC4jAAAuIwF4pT92AAABrUlEQVR4nCXPTWvTcADA4f9FT4PhYXjYxk4yWetW02S1rFnWrknTvDRt7Ytdte3apunL2o4xpiAyEEEU9eynEEH0oEdBxgQV2UVwn+Un0sPzAR4xN3edK1evEQpJdFotHC+J7kTRTYW0KePYNlbWRaysqCwtqUjRBIlUCMOKYXtxdrJhqqUCec8htrWOkKQu0ajPxsYD1sIZMlYC24tQKmdpN7pElDCemUfo+gv+M4yXGPprTKtPo+FxevKMnt9ATUq0K21Evf6JmY/Uah/Yq73nZPqW48NHuPc8csU2e3ePEb5/zsx3RsPfjA8uGA7PCfrf8IMzgv4PBoNfiIWFNebnbyDdTtHtDMgVHcx8GssxsFydglen6DUQy8txFhfjyJsx7mir6KZMNiejmatUSjlcV0eO30TIch9FCVBiCdYjEUwnju1FqVRd2s2AiHKLglVCGMYbdP0pqraDltwmndmi2Sxx+vA5vV6L7d1N9qsdxP36Z/LFVyQ0BVVTSe1mmPSfcDR9jF12sLzybD2dXjIYnNHaf4fvf6EXfGV08JPh6ILR6A+T8SXjyV/+ARA78NJ7wX7hAAAAAElFTkSuQmCC"}},3717:(e,t,i)=>{"use strict";i.r(t),i.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var s=i(5893),n=i(1151),a=i(2986);const r={description:"Learn about the task options to improve results."},o="Task Options",l={id:"references/task-options",title:"Task Options",description:"Learn about the task options to improve results.",source:"@site/docs/03-references/01-task-options.md",sourceDirName:"03-references",slug:"/references/task-options",permalink:"/references/task-options",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{description:"Learn about the task options to improve results."},sidebar:"tutorialSidebar",previous:{title:"References",permalink:"/references/"},next:{title:"Create Successful Maps",permalink:"/references/create-successful-maps"}},d={},c=[{value:"3d-tiles",id:"3d-tiles",level:2},{value:"auto-boundary",id:"auto-boundary",level:2},{value:"auto-boundary-distance",id:"auto-boundary-distance",level:2},{value:"bg-removal",id:"bg-removal",level:2},{value:"boundary",id:"boundary",level:2},{value:"camera-lens",id:"camera-lens",level:2},{value:"cameras",id:"cameras",level:2},{value:"crop",id:"crop",level:2},{value:"dem-decimation",id:"dem-decimation",level:2},{value:"dem-euclidean-map",id:"dem-euclidean-map",level:2},{value:"dem-gapfill-steps",id:"dem-gapfill-steps",level:2},{value:"dem-resolution",id:"dem-resolution",level:2},{value:"dsm",id:"dsm",level:2},{value:"dtm",id:"dtm",level:2},{value:"end-with",id:"end-with",level:2},{value:"fast-orthophoto",id:"fast-orthophoto",level:2},{value:"feature-quality",id:"feature-quality",level:2},{value:"feature-type",id:"feature-type",level:2},{value:"force-gps",id:"force-gps",level:2},{value:"gps-accuracy",id:"gps-accuracy",level:2},{value:"matcher-neighbors",id:"matcher-neighbors",level:2},{value:"matcher-order",id:"matcher-order",level:2},{value:"matcher-type",id:"matcher-type",level:2},{value:"mesh-octree-depth",id:"mesh-octree-depth",level:2},{value:"mesh-size",id:"mesh-size",level:2},{value:"min-num-features",id:"min-num-features",level:2},{value:"optimize-disk-space",id:"optimize-disk-space",level:2},{value:"orthophoto-cutline",id:"orthophoto-cutline",level:2},{value:"orthophoto-resolution",id:"orthophoto-resolution",level:2},{value:"pc-classify",id:"pc-classify",level:2},{value:"pc-filter",id:"pc-filter",level:2},{value:"pc-quality",id:"pc-quality",level:2},{value:"pc-sample",id:"pc-sample",level:2},{value:"pc-skip-geometric",id:"pc-skip-geometric",level:2},{value:"primary-band",id:"primary-band",level:2},{value:"radiometric-calibration",id:"radiometric-calibration",level:2},{value:"rerun-from",id:"rerun-from",level:2},{value:"rolling-shutter",id:"rolling-shutter",level:2},{value:"rolling-shutter-readout",id:"rolling-shutter-readout",level:2},{value:"sfm-algorithm",id:"sfm-algorithm",level:2},{value:"sfm-no-partial",id:"sfm-no-partial",level:2},{value:"skip-3dmodel",id:"skip-3dmodel",level:2},{value:"skip-band-alignment",id:"skip-band-alignment",level:2},{value:"skip-orthophoto",id:"skip-orthophoto",level:2},{value:"skip-report",id:"skip-report",level:2},{value:"sky-removal",id:"sky-removal",level:2},{value:"smrf-scalar",id:"smrf-scalar",level:2},{value:"smrf-slope",id:"smrf-slope",level:2},{value:"smrf-threshold",id:"smrf-threshold",level:2},{value:"smrf-window",id:"smrf-window",level:2},{value:"texturing-keep-unseen-faces",id:"texturing-keep-unseen-faces",level:2},{value:"texturing-single-material",id:"texturing-single-material",level:2},{value:"texturing-skip-global-seam-leveling",id:"texturing-skip-global-seam-leveling",level:2},{value:"texturing-skip-local-seam-leveling",id:"texturing-skip-local-seam-leveling",level:2},{value:"tiles",id:"tiles",level:2},{value:"use-3dmesh",id:"use-3dmesh",level:2},{value:"use-exif",id:"use-exif",level:2},{value:"use-fixed-camera-params",id:"use-fixed-camera-params",level:2},{value:"use-hybrid-bundle-adjustment",id:"use-hybrid-bundle-adjustment",level:2},{value:"video-limit",id:"video-limit",level:2},{value:"video-resolution",id:"video-resolution",level:2}];function h(e){const t=Object.assign({h1:"h1",p:"p",strong:"strong",h2:"h2",a:"a",sup:"sup",code:"code",table:"table",thead:"thead",tr:"tr",th:"th",tbody:"tbody",td:"td",em:"em",pre:"pre",ul:"ul",li:"li",admonition:"admonition",section:"section",ol:"ol"},(0,n.ah)(),e.components);return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"task-options",children:"Task Options"}),"\n",(0,s.jsxs)(t.p,{children:["When creating a task, press the ",(0,s.jsx)(t.strong,{children:"Edit"})," button next to the ",(0,s.jsx)(t.strong,{children:"Options"})," field:"]}),"\n",(0,s.jsx)(a.Z,{img:i(3225)}),"\n",(0,s.jsx)(a.Z,{alt:"Accessing task options from the cloud interface",img:i(1855),padded:!0,smooth:!0}),"\n",(0,s.jsx)(t.p,{children:"In general, it's a good idea to begin with the default settings, which usually work well for most datasets, and make adjustments as necessary."}),"\n",(0,s.jsx)(t.h2,{id:"3d-tiles",children:"3d-tiles"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://www.ogc.org/standard/3dtiles/",children:"3D Tiles"})," are a format specification for visualizing and interacting with 3D geospatial content. You can view these files using software like ",(0,s.jsx)(t.a,{href:"https://github.com/CesiumGS/cesium",children:"Cesium"}),". WebODM Lightning can generate point clouds and textured 3D models in 3D Tiles format. Turn on this option to generate them."]}),"\n",(0,s.jsx)(t.h2,{id:"auto-boundary",children:"auto-boundary"}),"\n",(0,s.jsxs)(t.p,{children:["Automatically calculates a 2D polygon that encloses the camera pose locations. This polygon is subsequently employed as an input for the ",(0,s.jsx)(t.a,{href:"#boundary",children:"boundary"})," option. The polygon is generated using a convex hull and it's adjusted with a distance buffer that scales with the flight altitude, with higher altitudes leading to larger buffers."]}),"\n",(0,s.jsx)(a.Z,{img:i(687),alt:"Boundary computed from camera poses (dots)",padded:!0}),"\n",(0,s.jsx)(t.h2,{id:"auto-boundary-distance",children:"auto-boundary-distance"}),"\n",(0,s.jsxs)(t.p,{children:["Manually adjust the distance buffer value (in meters) for ",(0,s.jsx)(t.a,{href:"#auto-boundary",children:"auto-boundary"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"bg-removal",children:"bg-removal"}),"\n",(0,s.jsxs)(t.p,{children:["Utilizes artificial intelligence techniques to automatically create ",(0,s.jsx)(t.a,{href:"/how-to/image-masks",children:"image masks"})," for background removal. This is particularly valuable for generating 3D models of individual objects. However, it may not work well in aerial scenes."]}),"\n",(0,s.jsxs)(t.p,{children:["See also ",(0,s.jsx)(t.a,{href:"#sky-removal",children:"sky-removal"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"boundary",children:"boundary"}),"\n",(0,s.jsx)(t.p,{children:"Specify a single polygon boundary in GeoJSON format, which is used to define the reconstruction area."}),"\n",(0,s.jsxs)(t.p,{children:["GeoJSON polygons can be created using software like QGIS or online tools like ",(0,s.jsx)(t.a,{href:"https://geojson.io",children:"geojson.io"}),". Additionally, you can automatically generate them using the ",(0,s.jsx)(t.a,{href:"#auto-boundary",children:"auto-boundary"})," option."]}),"\n",(0,s.jsxs)(t.p,{children:["If the ",(0,s.jsx)(t.a,{href:"#crop",children:"crop"})," option is set to zero, the boundary polygon can also serve as the crop area for DEMs and orthophotos."]}),"\n",(0,s.jsx)(t.h2,{id:"camera-lens",children:"camera-lens"}),"\n",(0,s.jsx)(t.p,{children:"Digital camera sensors quantify the incoming light. Prior to reaching the sensor, light traverses through a camera lens. Lenses introduce different degrees of distortion into photos, with the specific type of distortion determined by the lens shape. This distortion can range from pronounced, such as in fisheye or wide-angle lenses, to more subtle in the case of perspective lenses. It's essential to recognize that some level of distortion is invariably present."}),"\n",(0,s.jsxs)(t.p,{children:["WebODM Lightning offers support for multiple lens models and automatically selects the most suitable one by considering the information available in the EXIF",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-exif",id:"user-content-fnref-exif","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})," and XMP",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-xmp",id:"user-content-fnref-xmp","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"2"})})," tags of the images. Nevertheless, there are instances where such information is absent. In these cases, if you encounter difficulties when processing images captured with a fisheye lens, it's advisable to manually designate either ",(0,s.jsx)(t.code,{children:"fisheye"})," or ",(0,s.jsx)(t.code,{children:"fisheye_opencv"})," as the camera-lens option. As a general guideline, when your input images exhibit noticeable distortion, it's a prudent approach to manually configure this option with the appropriate value."]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Value"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Images"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Description"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"auto"})}),(0,s.jsx)(t.td,{children:"Normal"}),(0,s.jsxs)(t.td,{children:["Defaults to ",(0,s.jsx)(t.strong,{children:"brown"}),", unless the XMP tag ",(0,s.jsx)(t.code,{children:"GPano:ProjectionType"})," or ",(0,s.jsx)(t.code,{children:"Camera:ModelType"})," contains a value from this table"]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"perspective"})}),(0,s.jsx)(t.td,{children:"Normal"}),(0,s.jsx)(t.td,{children:"Handles radial distortion"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"brown"})}),(0,s.jsx)(t.td,{children:"Normal"}),(0,s.jsx)(t.td,{children:"Handles radial, tangential, and principal point distortions"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"fisheye"})}),(0,s.jsx)(t.td,{children:"Ultra wide-angle"}),(0,s.jsx)(t.td,{children:"Handles radial distortion"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"fisheye_opencv"})}),(0,s.jsx)(t.td,{children:"Ultra wide-angle"}),(0,s.jsx)(t.td,{children:"Handles radial distortion, tangential, and principal point distortions"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"spherical"})}),(0,s.jsx)(t.td,{children:"360"}),(0,s.jsx)(t.td,{children:"Handles spherical projection for 360 images"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"equirectangular"})}),(0,s.jsx)(t.td,{children:"360"}),(0,s.jsxs)(t.td,{children:["Same as ",(0,s.jsx)(t.em,{children:"spherical"})," (legacy name)"]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"dual"})}),(0,s.jsx)(t.td,{children:"Ultra wide-angle / Normal"}),(0,s.jsx)(t.td,{children:"Handles radial distortion from sensors that can capture both fisheye and perspective images, transitioning from one to the other."})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"Please be aware that utilizing this option applies the same camera lens model to all images, even if they originate from different cameras. To apply distinct models for different cameras, it's necessary to ensure that the images have the appropriate XMP tags set."}),"\n",(0,s.jsx)(t.h2,{id:"cameras",children:"cameras"}),"\n",(0,s.jsxs)(t.p,{children:["By default WebODM Lightning estimates the camera model's distortion parameters from the input images. This option allows you to choose a precomputed set of parameters instead from another task. You can do this by providing a ",(0,s.jsx)(t.strong,{children:"cameras.json"})," file, which is generated after processing a dataset and can be downloaded from the cloud interface by clicking ",(0,s.jsx)(t.strong,{children:"Download Assets"})," \u2192 ",(0,s.jsx)(t.strong,{children:"Camera Parameters"}),". This feature can be helpful in improving the accuracy of certain datasets, especially those that didn't follow good image capture guidelines."]}),"\n",(0,s.jsx)(t.h2,{id:"crop",children:"crop"}),"\n",(0,s.jsxs)(t.p,{children:["The crop area for orthophotos and DEMs is calculated from the point cloud, first by defining a convex hull around the points and then shrinking it by ",(0,s.jsx)(t.code,{children:"crop"})," amount (in meters)."]}),"\n",(0,s.jsx)(a.Z,{img:i(7041),alt:"Point cloud (left) and cropped bounds (right)",padded:!0}),"\n",(0,s.jsx)(t.p,{children:"This option can be set to zero to skip cropping."}),"\n",(0,s.jsxs)(t.p,{children:["One can also set the ",(0,s.jsx)(t.a,{href:"#boundary",children:"boundary"})," option and set this option to zero to manually define the crop area."]}),"\n",(0,s.jsx)(t.h2,{id:"dem-decimation",children:"dem-decimation"}),"\n",(0,s.jsx)(t.p,{children:"DEMs are computed from the point cloud. To speed up the process, you can use this option to reduce the number of points used. Setting it to 3 keeps every third point, discarding the rest to speed up computation."}),"\n",(0,s.jsxs)(t.p,{children:["The default value of ",(0,s.jsx)(t.code,{children:"1"})," includes all points. Setting it to ",(0,s.jsx)(t.code,{children:"50"})," keeps approximately 2% of the original points and discards around 98%. You can calculate this percentage by:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"decimation = 50\nprint((1 / decimation) * 100) # <-- 2%\n"})}),"\n",(0,s.jsx)(t.h2,{id:"dem-euclidean-map",children:"dem-euclidean-map"}),"\n",(0,s.jsx)(t.p,{children:"An Euclidean map is a georeferenced image created from Digital Elevation Models (DEMs) before filling any gaps. In this image, each pixel represents the geometric distance to the nearest void, null, or NODATA pixel. It serves as a visual indicator of how far a value in the DEM is from an area with no data. This is valuable when you want to distinguish areas in the DEM that are based on actual point cloud values from those filled with interpolation."}),"\n",(0,s.jsx)(t.p,{children:"In the Euclidean map, every pixel with a value of zero indicates that the corresponding location in the DEM was filled using interpolation, as the distance from a NODATA pixel to itself is zero. You can generate this map by turning on this option."}),"\n",(0,s.jsx)(a.Z,{img:i(6945),alt:"DEM before hole filling (left) and corresponding euclidean map (right)",padded:!0}),"\n",(0,s.jsxs)(t.p,{children:["The resulting map will be available from ",(0,s.jsx)(t.strong,{children:"Download Assets"})," \u2192 ",(0,s.jsx)(t.strong,{children:"All Assets"})," in the ",(0,s.jsx)(t.code,{children:"odm_dem"})," folder."]}),"\n",(0,s.jsx)(t.h2,{id:"dem-gapfill-steps",children:"dem-gapfill-steps"}),"\n",(0,s.jsx)(t.p,{children:"DEMs are image grids with cells that must have values. Cells can have zero, one, or more points based on the raster's resolution. Assigning values to all cells, even those without direct points, is crucial to avoid gaps. To find the right radius, WebODM Lightning computes multiple DEMs with varying radii, stacking results from small radii (more accuracy, more gaps) to large radii (less accuracy, fewer gaps). If gaps persist, it fills them with less accurate interpolation. The number of layers depends on this option."}),"\n",(0,s.jsx)(a.Z,{img:i(5497),alt:"Pixels and points (left), radius of 0.5 (middle) and radius of 1 (right)",padded:!0}),"\n",(0,s.jsx)(a.Z,{img:i(4022),alt:"Gap fill interpolation with 2 DEM layers",padded:!0}),"\n",(0,s.jsx)(t.h2,{id:"dem-resolution",children:"dem-resolution"}),"\n",(0,s.jsx)(t.p,{children:"This option specifies the output resolution of DEMs in cm / pixel."}),"\n",(0,s.jsx)(a.Z,{img:i(8e3),alt:"Pixels in a raster DEM",padded:!0}),"\n",(0,s.jsx)(t.h2,{id:"dsm",children:"dsm"}),"\n",(0,s.jsxs)(t.p,{children:["This option creates a digital surface model (DSM). DSMs are created by identifying the highest elevation values in a point cloud, which includes terrain and various structures like buildings and trees. When two points coincide, only the tallest point is considered. Any gaps in the point cloud are filled using the method detailed in ",(0,s.jsx)(t.a,{href:"#dem-gapfill-steps",children:"dem-gapfill-steps"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"dtm",children:"dtm"}),"\n",(0,s.jsxs)(t.p,{children:["This option creates a digital terrain model (DTM). DTMs are created by applying a hybrid method that combines a simple morphological filter",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-smrf",id:"user-content-fnref-smrf","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"3"})})," (SMRF) with artificial intelligence. Enabling this option also activates the ",(0,s.jsx)(t.a,{href:"#pc-classify",children:"pc-classify"})," feature. Non-ground points are removed before DTM calculation. Any gaps in the point cloud are filled using the process explained in ",(0,s.jsx)(t.a,{href:"#dem-gapfill-steps",children:"dem-gapfill-steps"}),". For additional details refer to the ",(0,s.jsx)(t.a,{href:"#pc-classify",children:"pc-classify"})," option."]}),"\n",(0,s.jsx)(a.Z,{img:i(1112),alt:"DSM (left) vs. DTM (right)",padded:!0}),"\n",(0,s.jsx)(t.h2,{id:"end-with",children:"end-with"}),"\n",(0,s.jsx)(t.p,{children:"Instead of processing the entire photogrammetry pipeline, the pipeline will stop the execution at the chosen step."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Option"}),(0,s.jsx)(t.th,{children:"Stage"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"dataset"}),(0,s.jsx)(t.td,{children:"Load Dataset"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"split"}),(0,s.jsx)(t.td,{children:"Split"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"merge"}),(0,s.jsx)(t.td,{children:"Merge"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"opensfm"}),(0,s.jsx)(t.td,{children:"Structure From Motion"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"openmvs"}),(0,s.jsx)(t.td,{children:"Multi View Stereo"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"odm_filterpoints"}),(0,s.jsx)(t.td,{children:"Point Filtering"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"odm_meshing"}),(0,s.jsx)(t.td,{children:"Meshing"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"mvs_texturing"}),(0,s.jsx)(t.td,{children:"Texturing"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"odm_georeferencing"}),(0,s.jsx)(t.td,{children:"Georeferencing"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"odm_dem"}),(0,s.jsx)(t.td,{children:"DEM"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"odm_orthophoto"}),(0,s.jsx)(t.td,{children:"Orthophoto"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"odm_report"}),(0,s.jsx)(t.td,{children:"Report"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"odm_postprocess"}),(0,s.jsx)(t.td,{children:"Postprocess"})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"fast-orthophoto",children:"fast-orthophoto"}),"\n",(0,s.jsx)(t.p,{children:"For flat areas (agriculture fields), this option can save some substantial computation time by not requiring the construction of the dense point cloud used for orthorectification. This option does not work well in urban scenes due to excessive relief displacement artifacts."}),"\n",(0,s.jsx)(a.Z,{img:i(8539),alt:"Normal (top) vs. fast-orthophoto (bottom)",padded:!0,smooth:!0}),"\n",(0,s.jsx)(t.h2,{id:"feature-quality",children:"feature-quality"}),"\n",(0,s.jsx)(t.p,{children:"The photogrammetry process starts by identifying points of interest (features) from the input images. To expedite this, extraction is performed on a scaled-down version of the input images, determined by a scaling factor."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Option"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Factor"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"high"}),(0,s.jsx)(t.td,{children:"1/2 (default)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"medium"}),(0,s.jsx)(t.td,{children:"1/4"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"low"}),(0,s.jsx)(t.td,{children:"1/8"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"lowest"}),(0,s.jsx)(t.td,{children:"1/16"})]})]})]}),"\n",(0,s.jsxs)(t.p,{children:["For example, choosing ",(0,s.jsx)(t.strong,{children:"medium"})," uses 1/4 of the original image size. The default value works for most cases, without affecting image sizes or orthophoto resolution. Sometimes, decreasing this value can be helpful in forest areas that lack sufficient overlap."]}),"\n",(0,s.jsx)(t.h2,{id:"feature-type",children:"feature-type"}),"\n",(0,s.jsxs)(t.p,{children:["WebODM Lightning provides multiple algorithms for extracting image features. For the most consistent and reliable results, we recommend using the default ",(0,s.jsx)(t.strong,{children:"sift"})," algorithm. However, in specific scenes or situations, you may benefit from using alternative algorithms. Refer to the table below."]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Option"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Description"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"sift"}),(0,s.jsxs)(t.td,{children:["General-purpose, works well in most cases",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-sift",id:"user-content-fnref-sift","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"4"})})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"dspsift"}),(0,s.jsxs)(t.td,{children:["General-purpose, slower but generally more accurate than sift. Performs better in scenes with low overlap or vegetation",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-dspsift",id:"user-content-fnref-dspsift","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"5"})})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"akaze"}),(0,s.jsxs)(t.td,{children:["General-purpose, can perform better on scenes with fewer objects of interest (e.g. forests, vegetation)",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-akaze",id:"user-content-fnref-akaze","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"6"})})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"hahog"}),(0,s.jsxs)(t.td,{children:["General-purpose, similar to sift. It's the only one that works with ",(0,s.jsx)(t.a,{href:"#matcher-type",children:"matcher-type"})," bow",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-hahog",id:"user-content-fnref-hahog","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"7"})})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"orb"}),(0,s.jsxs)(t.td,{children:["Fast, but does not work well with images that have scale variations (images taken at varying altitudes)",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-orb",id:"user-content-fnref-orb","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"8"})})]})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"force-gps",children:"force-gps"}),"\n",(0,s.jsxs)(t.p,{children:["When a GCP file is utilized, the default behavior is to disregard all GPS data, relying solely on the GCP file for georeferencing. The underlying assumption is that GCP data is more accurate than GPS. However, if the GPS data is highly accurate (e.g., with RTK",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-rtk",id:"user-content-fnref-rtk","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"9"})})," correction), enabling this option directs the program to use both GCP and GPS data for georeferencing."]}),"\n",(0,s.jsx)(t.h2,{id:"gps-accuracy",children:"gps-accuracy"}),"\n",(0,s.jsx)(t.p,{children:"GPS data has a certain level of accuracy. This value is used to specify how much GPS data should be constrained during the photogrammetry process."}),"\n",(0,s.jsx)(t.p,{children:"Typically, accuracy information is obtainable from XMP tags in the images. WebODM Lightning uses twice the number indicated in any of the following tags (to account for underestimation):"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"drone-dji::RtkStdLon"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"drone-dji::RtkStdLat"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"drone-dji::RtkStdHgt"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"Camera::GPSXYAccuracy"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"GPSXYAccuracy"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"Camera::GPSZAccuracy"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"GPSZAccuracy"})}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["If multiple tags are present, the maximum value is used. If no tags are available, the default is ",(0,s.jsx)(t.strong,{children:"10 meters"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"matcher-neighbors",children:"matcher-neighbors"}),"\n",(0,s.jsx)(t.p,{children:"During reconstruction image pairs are matched by identifying common features. The brute-force approach compares each image with every other, resulting in exhaustive but slow searching. For a 100-image dataset, it would require numerous comparisons."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"print(100 * (100 - 1)) # <-- 9900 comparisons\n"})}),"\n",(0,s.jsx)(t.p,{children:"To enhance efficiency, the program employs optimizations. The concept is that for datasets gathered uniformly, most images are paired with nearby ones. Using GPS data, the program quickly approximates which images are adjacent and excludes distant ones. This process is termed preemptive matching."}),"\n",(0,s.jsxs)(t.p,{children:["WebODM Lightning by default applies a graph connectivity approach for preemptive matching. It uses GPS locations to link images with edges through Delaunay triangulation",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-delaunay",id:"user-content-fnref-delaunay","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"10"})}),". If two images share an edge, they form a pair. To generate more pairs, the method shuffles GPS locations to create multiple graphs (a total of 50). All pairs from these graphs are considered for further matching."]}),"\n",(0,s.jsx)(a.Z,{img:i(2021),alt:"Initial graph (left) and graph with randomly moved positions and new edges (right). Each edge represents an image pair",padded:!0}),"\n",(0,s.jsx)(t.p,{children:"WebODM Lightning offers an alternative preemptive matching method that focuses on the nearest neighbors of each image instead of using a graph. You can enable this method by turning on this option:"}),"\n",(0,s.jsx)(a.Z,{img:i(8612),alt:"Dots represent approximate image locations, extracted from EXIF tags. When matcher-neighbors is set to 8, only the 8 nearest neighbors (highlighted in gray) are considered for matching with image p1",padded:!0}),"\n",(0,s.jsxs)(t.p,{children:["This option can speed up processing by reducing the number of matching pairs, especially when GPS data is available. If no GPS information is provided, this option is disabled, and all image pairs are considered unless ",(0,s.jsx)(t.a,{href:"#matcher-order",children:"matcher-order"})," is specified."]}),"\n",(0,s.jsx)(t.h2,{id:"matcher-order",children:"matcher-order"}),"\n",(0,s.jsxs)(t.p,{children:["Like ",(0,s.jsx)(t.a,{href:"#matcher-neighbors",children:"matcher-neighbors"}),", this option decreases the number of candidate pairs for matching based on the sequential order of image filenames. For instance, if you have 3 images sorted by filename:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"1.JPG"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"2.JPG"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"3.JPG"})}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["With this option set to ",(0,s.jsx)(t.code,{children:"1"}),", the program will evaluate matches between:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"1.JPG"})," and ",(0,s.jsx)(t.strong,{children:"2.JPG"})]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"2.JPG"})," and ",(0,s.jsx)(t.strong,{children:"3.JPG"})]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:['This is because the "distance" between these image pairs in the list is 1. ',(0,s.jsx)(t.strong,{children:"1.JPG"})," and ",(0,s.jsx)(t.strong,{children:"3.JPG"})," have a distance of 2, so this pair will be excluded from matching."]}),"\n",(0,s.jsx)(t.p,{children:"This option determines the maximum distance between image filenames for them to be considered a matching pair. It is exclusively useful for datasets without GPS information, particularly for expediting the processing of sequentially ordered images, like frames extracted from videos."}),"\n",(0,s.jsx)(t.h2,{id:"matcher-type",children:"matcher-type"}),"\n",(0,s.jsxs)(t.p,{children:["After preemptive matching finds potential image pairs (as discussed in ",(0,s.jsx)(t.a,{href:"#matcher-neighbors",children:"matcher-neighbors"}),"), further computation identifies the actual image pairs by comparing their features."]}),"\n",(0,s.jsx)(t.p,{children:"To expedite feature matching, specific algorithms have been developed, given the large number of features in each image."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Option"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Search For Features With"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"flann"}),(0,s.jsx)(t.td,{children:"An index powered by the Fast Library for Approximate Nearest Neighbors"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"bow"}),(0,s.jsxs)(t.td,{children:["A Bag Of Words",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-bow",id:"user-content-fnref-bow","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"11"})})," approach"]})]})]})]}),"\n",(0,s.jsxs)(t.p,{children:["The default method, ",(0,s.jsx)(t.strong,{children:"flann"}),", is highly versatile, providing an excellent balance between accuracy and speed. ",(0,s.jsx)(t.strong,{children:"bow"})," is quicker but compatible only with HAHOG features and potentially misses some matches."]}),"\n",(0,s.jsx)(t.h2,{id:"mesh-octree-depth",children:"mesh-octree-depth"}),"\n",(0,s.jsxs)(t.p,{children:["Controls the quality of the 3D textured models. A higher value results in a finer model. However, this comes at the cost of significantly increased processing time. The default value of ",(0,s.jsx)(t.code,{children:"11"})," is suitable for most scenarios. Lower values (",(0,s.jsx)(t.code,{children:"6-8"}),") can be sufficient in flat areas, while setting it higher (",(0,s.jsx)(t.code,{children:"12"}),") can improve results in urban areas. When raising this option, consider increasing ",(0,s.jsx)(t.a,{href:"#mesh-size",children:"mesh-size"})," as finer meshes require more triangles."]}),"\n",(0,s.jsx)(a.Z,{img:i(852),alt:"mesh-octree-depth 6 and mesh-size 10000 (top) vs. mesh-octree-depth 11 and mesh-size 1000000 (bottom)",padded:!0,smooth:!0}),"\n",(0,s.jsx)(t.h2,{id:"mesh-size",children:"mesh-size"}),"\n",(0,s.jsx)(t.p,{children:"WebODM Lightning automatically simplifies the textured 3D models by limiting their triangle count. A high triangle count prolongs subsequent processing steps. A low count can reduce model quality, while increasing it can enhance results, especially in urban areas requiring fine building details."}),"\n",(0,s.jsx)(t.h2,{id:"min-num-features",children:"min-num-features"}),"\n",(0,s.jsx)(t.p,{children:"This option controls the minimum number of features detected in each image, increasing the potential for finding matches."}),"\n",(0,s.jsx)(a.Z,{img:i(7913),alt:"Features (red points) and matches between overlapping images (white lines). min-num-features controls the desired number of red points in each image",padded:!0,smooth:!0}),"\n",(0,s.jsx)(t.p,{children:"Increase this option when mapping areas with few discernible features, like forests."}),"\n",(0,s.jsx)(t.h2,{id:"optimize-disk-space",children:"optimize-disk-space"}),"\n",(0,s.jsx)(t.p,{children:"This option is always turned on. No need to worry about it."}),"\n",(0,s.jsx)(t.h2,{id:"orthophoto-cutline",children:"orthophoto-cutline"}),"\n",(0,s.jsx)(t.p,{children:"Enabling this option results in the program creating a cutline, which is a polygon within the crop area of the orthophoto that aims to trace feature edges."}),"\n",(0,s.jsx)(a.Z,{img:i(6826),alt:"Cutline",padded:!0}),"\n",(0,s.jsxs)(t.p,{children:["The resulting cutline can be downloaded from the cloud interface by clicking ",(0,s.jsx)(t.strong,{children:"Download Assets"})," \u2192 ",(0,s.jsx)(t.strong,{children:"All Assets"})," (",(0,s.jsx)(t.code,{children:"odm_orthophoto/cutline.gpkg"}),")."]}),"\n",(0,s.jsx)(t.h2,{id:"orthophoto-resolution",children:"orthophoto-resolution"}),"\n",(0,s.jsx)(t.p,{children:"This option specifies the output resolution of the orthophoto in cm / pixel."}),"\n",(0,s.jsxs)(t.p,{children:["See also ",(0,s.jsx)(t.a,{href:"#dem-resolution",children:"dem-resolution"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"pc-classify",children:"pc-classify"}),"\n",(0,s.jsxs)(t.p,{children:["Points in a point cloud can be assigned classification values",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-las",id:"user-content-fnref-las","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"12"})})," to indicate if they belong to the terrain (ground), a building, a tree (vegetation), or other categories. By default, all points are labeled as ",(0,s.jsx)(t.em,{children:"unclassified"}),", and the software doesn't assign specific labels to points. Enabling this option utilizes a Simple Morphological Filter",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-smrf",id:"user-content-fnref-smrf-2","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"3"})})," (SMRF) to identify and classify terrain points as ground. An AI classifier",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-openpointclass",id:"user-content-fnref-openpointclass","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"13"})})," is then applied to the remaining (non-ground) points to recognize vegetation, buildings, and other structures. This process results in a classified point cloud."]}),"\n",(0,s.jsx)(a.Z,{img:i(4242),alt:"Point cloud (top) and classification results (bottom)",smooth:!0,padded:!0}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Option"}),(0,s.jsx)(t.th,{children:"Description"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"smrf-scalar"}),(0,s.jsx)(t.td,{children:"This parameter makes the threshold dependent on the slope. To enhance results, consider slightly decreasing this value when raising the smrf-threshold, and vice versa.."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"smrf-slope"}),(0,s.jsx)(t.td,{children:"Set this parameter to the steepest common terrain slope, represented as the ratio of elevation change to horizontal distance change (e.g., 1.5 meters over 10 meters is 1.5 / 10 = 0.15). Increase it for terrains with significant slope variation, like hills and mountains, and reduce it for flat areas. For optimal results, it should be above 0.1 but not exceed 1.2."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"smrf-threshold"}),(0,s.jsx)(t.td,{children:"Defines the minimum height (in meters) of non-ground objects. For instance, a setting of 5 meters is suitable for identifying buildings but may not suffice for recognizing cars. To identify cars, lower the value to 2 or even 1.5 meters (the average car height). This parameter significantly influences results."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"smrf-window"}),(0,s.jsx)(t.td,{children:"Set this to the size of the largest non-ground feature in meters. If the scene primarily consists of small objects like trees, reduce this value. If there are larger objects like buildings, increase it. It's advisable to maintain a value above 10 meters."})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"SMRF has limitations, including occasional misclassification of buildings or trees as ground points (type II errors)."}),"\n",(0,s.jsx)(a.Z,{img:i(573),alt:"Input surface model",padded:!0}),"\n",(0,s.jsx)(a.Z,{img:i(4152),alt:"Terrain model created using default SMRF settings. Note a few houses were incorrectly included, and there are lingering artifacts near the edges of removed objects.",padded:!0}),"\n",(0,s.jsx)(a.Z,{img:i(5278),alt:"An improved terrain model obtained by setting smrf-threshold 0.3\n(decreased), smrf-scalar 1.3 (increased), smrf-slope 0.05 (decreased)\nand smrf-window 24 (increased)",padded:!0}),"\n",(0,s.jsx)(t.h2,{id:"pc-filter",children:"pc-filter"}),"\n",(0,s.jsx)(t.p,{children:"Noise from the point cloud can be partially removed using a combination of statistical and visibility\nfiltering. This option sets the standard deviation threshold value for the\nstatistical filter. In this context standard deviation is a measure of how spread out points are\nrelative to their neighbors. The filter looks at the closest 16\nneighbors for each point and computes their standard deviations, which gives a measure of how far\neach point deviates from the average distance to each other point. If a\npoint is found to be too far away relative to its neighbors, thus having\na standard deviation higher than the threshold, the point is labeled as\nan outlier."}),"\n",(0,s.jsx)(a.Z,{img:i(310),alt:"The gray point is an outlier due to its high standard deviation",padded:!0}),"\n",(0,s.jsx)(t.p,{children:"Adjusting this value too high retains noisy points, and setting it too low may eliminate valid ones. You can disable filtering by setting this option to zero."}),"\n",(0,s.jsx)(t.h2,{id:"pc-quality",children:"pc-quality"}),"\n",(0,s.jsx)(t.p,{children:"This option affects the density of the point cloud. Higher values use higher resolution images according to a scale factor:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Option"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Scaling Factor"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"high"}),(0,s.jsx)(t.td,{children:"1/4"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"medium"}),(0,s.jsx)(t.td,{children:"1/8"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"low"}),(0,s.jsx)(t.td,{children:"1/16"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"lowest"}),(0,s.jsx)(t.td,{children:"1/32"})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"Different image dimensions also correspond to a multiplier value:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Largest Image Dimension (megapixels)"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Multiplier"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"< 6"}),(0,s.jsx)(t.td,{children:"2"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"6 - 42"}),(0,s.jsx)(t.td,{children:"1"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"> 42"}),(0,s.jsx)(t.td,{children:"1/2"})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"The actual resolution of the images used for point cloud estimation is then calculated with:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"resolution = max(320, max_image_dimension * scaling_factor * multiplier)\n"})}),"\n",(0,s.jsxs)(t.p,{children:["For example, in a dataset with 4000x3000 (12 megapixels) images, setting this option to ",(0,s.jsx)(t.code,{children:"high"})," will use images scaled to 1000 pixels for computing a point cloud:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"image = (4000,3000)\nmax_image_dimension = max(image) # <-- 4000\nmegapixels = image[0]*image[1]/1000000 # <-- 12\nmultiplier = 1 # From table\nscaling_factor = 1/4 # pc-quality: high\nprint(max(320, max_image_dimension * scaling_factor * multiplier)) # <-- 1000 pixels\n"})}),"\n",(0,s.jsx)(t.h2,{id:"pc-sample",children:"pc-sample"}),"\n",(0,s.jsxs)(t.p,{children:["This option imposes an upper limit on the density of the dense point cloud, defined as a radius in meters that ensures no two points are closer than the specified value. For instance, a setting of ",(0,s.jsx)(t.code,{children:"0.05"})," ensures points are at least 5 centimeter (0.05 meters) apart. This option is always set to at least ",(0,s.jsx)(t.code,{children:"0.01"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"pc-skip-geometric",children:"pc-skip-geometric"}),"\n",(0,s.jsx)(t.p,{children:"A geometric refinement process is used to improve the point cloud. This process can take some time and can be skipped by using this option."}),"\n",(0,s.jsx)(a.Z,{img:i(6481),alt:"Elevation model with defaults (left) vs. pc-skip-geometric (right). Improved building and car definition on the left.",padded:!0}),"\n",(0,s.jsx)(t.h2,{id:"primary-band",children:"primary-band"}),"\n",(0,s.jsxs)(t.p,{children:["This option selects the band name (Red, Blue, Green, NIR, etc.) for reconstructing multispectral datasets. The chosen band name must match the ",(0,s.jsx)(t.strong,{children:"Camera::BandName"})," EXIF",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-exif",id:"user-content-fnref-exif-2","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})," tag. Only the images associated with this band will be utilized for 3D reconstruction."]}),"\n",(0,s.jsxs)(t.p,{children:["By setting it to ",(0,s.jsx)(t.code,{children:"auto"})," (the default), the band will be automatically selected."]}),"\n",(0,s.jsx)(t.h2,{id:"radiometric-calibration",children:"radiometric-calibration"}),"\n",(0,s.jsxs)(t.p,{children:["Radiometric calibration converts pixel values (digital numbers) into reflectance. WebODM Lightning can automate radiometric calibration and compute reflectance and temperature values for various sensors",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-sensors",id:"user-content-fnref-sensors","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"14"})}),"."]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Option"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Description"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"none"}),(0,s.jsx)(t.td,{children:"No radiometric calibration (digital number outputs)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"camera"}),(0,s.jsx)(t.td,{children:"Applies black level, vignetting, gain, and exposure corrections based on information from the EXIF tags. Additionally, computes absolute temperature values when applicable"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"camera+sun"}),(0,s.jsxs)(t.td,{children:["Same as ",(0,s.jsx)(t.code,{children:"camera"}),", but also applies corrections from a downwelling light sensor (DLS) when available"]})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"rerun-from",children:"rerun-from"}),"\n",(0,s.jsx)(t.p,{children:"This option cannot be used. Don't worry about it."}),"\n",(0,s.jsx)(t.h2,{id:"rolling-shutter",children:"rolling-shutter"}),"\n",(0,s.jsxs)(t.p,{children:["Enables rolling shutter correction to enhance reconstruction accuracy in datasets captured with rolling shutter sensors. If GPS information is present in the input images, and the dataset was captured with a single camera, WebODM Lightning can correct for rolling shutter distortion by initially estimating the aircraft's velocity at the time each picture was taken. Some cameras store velocity information in the EXIF/XMP tags of the images (",(0,s.jsx)(t.strong,{children:"SpeedX"}),", ",(0,s.jsx)(t.strong,{children:"SpeedY"}),", and ",(0,s.jsx)(t.strong,{children:"SpeedZ"}),"), which provides the most reliable estimate. In the absence of these tags, velocity is estimated based on the time and positional differences between consecutive images."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"speed = (position_2 - position_1) / (time_2 - time_1)\n"})}),"\n",(0,s.jsx)(t.p,{children:"The accuracy of the formula mentioned above can be compromised in situations where the drone is stationary while capturing a picture, as it assumes continuous motion and sequential image capture. In such cases, the calculation may yield incorrect estimates, potentially degrading results. However, as long as most images can be assigned accurate velocity estimates, rolling shutter correction can still be effective, even if a few images have incorrect estimates."}),"\n",(0,s.jsx)(t.p,{children:"Once the velocities are estimated, the program searches a database to retrieve the rolling shutter readout time for the camera sensor. This readout time represents the duration (in milliseconds) required for the sensor to capture an image. In cases where your camera is not listed in the database, a warning will appear in the task output:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{children:'[WARNING] Rolling shutter readout time for "make model" is not in \nour database, using default of 30ms which might be incorrect.\n'})}),"\n",(0,s.jsx)(a.Z,{img:i(5287),alt:"You can access the task output by expanding a task from the Dashboard and toggling the Task Output button to On. If the task output is truncated, first you'll need to download the task output to a file by pressing the Download To File button",padded:!0}),"\n",(0,s.jsx)(t.p,{children:"With known camera velocities and sensor readout times, the correction is applied by shifting image features based on these factors. Subsequently, the reconstruction is repeated, effectively doubling the processing time but enhancing accuracy in datasets influenced by rolling shutter distortions."}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsxs)(t.p,{children:["You can estimate the correct sensor value by creating a cost-effective calibration device using an Arduino. Detailed instructions are available at ",(0,s.jsx)(t.a,{href:"https://github.com/OpenDroneMap/RSCalibration",children:"github.com/OpenDroneMap/RSCalibration"}),"."]})}),"\n",(0,s.jsx)(t.h2,{id:"rolling-shutter-readout",children:"rolling-shutter-readout"}),"\n",(0,s.jsx)(t.p,{children:"Overrides the default sensor readout time value used for rolling shutter correction."}),"\n",(0,s.jsx)(t.h2,{id:"sfm-algorithm",children:"sfm-algorithm"}),"\n",(0,s.jsx)(t.p,{children:"There are three methods to reconstruct a scene:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Option"})}),(0,s.jsx)(t.th,{children:(0,s.jsx)(t.strong,{children:"Description"})})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"incremental"}),(0,s.jsx)(t.td,{children:"a general-purpose approach suitable for all scenes. It supports multiple cameras and adds them to the reconstruction incrementally, ensuring high reliability."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"triangulation"}),(0,s.jsxs)(t.td,{children:["If gimbal angles and GPS information are available, camera positions are initialized from those values in a single step and then iteratively improved. This method can yield better results and may be slightly faster than ",(0,s.jsx)(t.code,{children:"incremental"}),". However, it's experimental and may not work with all camera types."]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"planar"}),(0,s.jsxs)(t.td,{children:["For flat scenes, like a farm field, captured with a single camera at a constant altitude and a downward-facing view (nadir), this option is recommended. It processes 5-10 times faster than the ",(0,s.jsx)(t.code,{children:"incremental"})," method and is compatible with multispectral datasets."]})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"sfm-no-partial",children:"sfm-no-partial"}),"\n",(0,s.jsx)(t.p,{children:"This option is always turned on. No need to worry about it."}),"\n",(0,s.jsx)(t.h2,{id:"skip-3dmodel",children:"skip-3dmodel"}),"\n",(0,s.jsx)(t.p,{children:"If a user only needs an orthophoto, there's no need to create a complete 3D model. This option saves time by skipping the steps for generating a 3D model. Instead, it creates a 2.5D model, where elevation is extruded from the ground plane. While not a full 3D model, it works effectively for rendering orthophotos, although it can't accurately represent objects like overhangs."}),"\n",(0,s.jsxs)(t.p,{children:["See also ",(0,s.jsx)(t.a,{href:"#use-3dmesh",children:"use-3dmesh"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"skip-band-alignment",children:"skip-band-alignment"}),"\n",(0,s.jsx)(t.p,{children:"When capturing multispectral images, the sensors for each band are often slightly misaligned, causing small misalignments between the image bands. ODM automatically aligns these bands as part of its multispectral processing. If manual alignment has already been done using other software, you can disable the automatic alignment using this option."}),"\n",(0,s.jsx)(t.h2,{id:"skip-orthophoto",children:"skip-orthophoto"}),"\n",(0,s.jsx)(t.p,{children:"If you don't require an orthophoto, this option can save you time by skipping the orthophoto generation step."}),"\n",(0,s.jsx)(t.h2,{id:"skip-report",children:"skip-report"}),"\n",(0,s.jsx)(t.p,{children:"If you don't require a PDF report, this option can save you some time by skipping the report generation step."}),"\n",(0,s.jsx)(t.h2,{id:"sky-removal",children:"sky-removal"}),"\n",(0,s.jsxs)(t.p,{children:["Utilizes AI methods to automatically create ",(0,s.jsx)(t.a,{href:"/how-to/image-masks",children:"image masks"})," for sky removal. This is beneficial for datasets that include sky portions, especially in cases where oblique images are used for 3D structure capture. Sky areas can introduce noise in the 3D model, and this option helps in its reduction."]}),"\n",(0,s.jsx)(a.Z,{img:i(982),alt:"3D point cloud without (top) and with sky masks (bottom). Sceaux castle model generated from photos by Pierre Moulon",padded:!0,smooth:!0}),"\n",(0,s.jsx)(t.h2,{id:"smrf-scalar",children:"smrf-scalar"}),"\n",(0,s.jsxs)(t.p,{children:["Sets the scalar variable for SMRF. See ",(0,s.jsx)(t.a,{href:"#pc-classify",children:"pc-classify"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"smrf-slope",children:"smrf-slope"}),"\n",(0,s.jsxs)(t.p,{children:["Sets the slope variable for SMRF. See ",(0,s.jsx)(t.a,{href:"#pc-classify",children:"pc-classify"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"smrf-threshold",children:"smrf-threshold"}),"\n",(0,s.jsxs)(t.p,{children:["Sets the threshold variable for SMRF. See ",(0,s.jsx)(t.a,{href:"#pc-classify",children:"pc-classify"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"smrf-window",children:"smrf-window"}),"\n",(0,s.jsxs)(t.p,{children:["Sets the window variable for SMRF. See ",(0,s.jsx)(t.a,{href:"#pc-classify",children:"pc-classify"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"texturing-keep-unseen-faces",children:"texturing-keep-unseen-faces"}),"\n",(0,s.jsx)(t.p,{children:"By default, if a triangle in the 3D textured model isn't visible by any camera, it's removed from the output."}),"\n",(0,s.jsx)(a.Z,{img:i(2852),alt:"Unseen faces are removed from the textured mesh (top) vs. faces are kept with no color (bottom)",padded:!0,smooth:!0}),"\n",(0,s.jsx)(t.p,{children:"This option directs the program to retain all triangles."}),"\n",(0,s.jsx)(t.h2,{id:"texturing-single-material",children:"texturing-single-material"}),"\n",(0,s.jsxs)(t.p,{children:["The 3D models created by WebODM Lightning are in the Wavefront OBJ",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-obj",id:"user-content-fnref-obj","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"15"})}),' format. This format supports storing color information across multiple image files (textures). Each texture in the model is linked to a "material." WebODM Lightning typically uses multiple materials and textures when generating OBJ files by default. However, some software may have issues opening OBJs with multiple materials, or performing certain operations on meshes with multiple materials, which can be complex. This is especially true when editing the mesh in programs like Blender',(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-blender",id:"user-content-fnref-blender","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"16"})}),"."]}),"\n",(0,s.jsx)(t.p,{children:"Enabling this option will produce an OBJ file with a single material."}),"\n",(0,s.jsx)(t.h2,{id:"texturing-skip-global-seam-leveling",children:"texturing-skip-global-seam-leveling"}),"\n",(0,s.jsx)(t.p,{children:"Images with significant color variations caused by differences in illumination and exposure need to be merged using a global optimization process. This process slightly affects reflectance/temperature values when processing multispectral datasets and it might be desirable to enable this option to turn it off."}),"\n",(0,s.jsx)(t.h2,{id:"texturing-skip-local-seam-leveling",children:"texturing-skip-local-seam-leveling"}),"\n",(0,s.jsxs)(t.p,{children:["The application of global seam leveling (discussed in ",(0,s.jsx)(t.a,{href:"#texturing-skip-global-seam-leveling",children:"texturing-skip-global-seam-leveling"}),") may not completely eliminate smaller seams."]}),"\n",(0,s.jsx)(t.p,{children:'To tackle this, localized Poisson editing is used to blend images at texture patch seams. This "local" method only affects a small 20-pixel buffer around patch boundaries.'}),"\n",(0,s.jsx)(t.p,{children:"This option disables local seam leveling (not recommended)."}),"\n",(0,s.jsx)(t.h2,{id:"tiles",children:"tiles"}),"\n",(0,s.jsxs)(t.p,{children:["This option creates static TMS",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-tms",id:"user-content-fnref-tms","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"17"})})," tiles for orthophotos and DEMs, ideal for hosting and sharing maps on websites. These tiles work seamlessly with various viewers, like Leaflet",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-leaflet",id:"user-content-fnref-leaflet","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"18"})}),". DEM tiles are produced with a colored hillshade style and can be downloaded from the cloud interface by clicking on the ",(0,s.jsx)(t.strong,{children:"Download Assets"})," button."]}),"\n",(0,s.jsx)(t.h2,{id:"use-3dmesh",children:"use-3dmesh"}),"\n",(0,s.jsx)(t.p,{children:"By default, a 2.5D textured mesh is used for orthophoto rendering, which usually works well for most aerial datasets. However, it may yield suboptimal results, especially when nadir images (images with the camera pointed straight or nearly straight at the ground) are missing. Furthermore, for specific scenes like single building orbits with oblique images, a 2.5D mesh may not perform well."}),"\n",(0,s.jsxs)(t.p,{children:["This option instructs the program to utilize the full 3D model for orthophoto generation while skipping the creation of the 2.5D model. For additional information, see ",(0,s.jsx)(t.a,{href:"#skip-3dmodel",children:"skip-3dmodel"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"use-exif",children:"use-exif"}),"\n",(0,s.jsxs)(t.p,{children:["When a GCP file is uploaded with a dataset, it is always used for georeferencing. Enabling this option causes the program to disregard the GCP file and rely on location information from the images' EXIF",(0,s.jsx)(t.sup,{children:(0,s.jsx)(t.a,{href:"#user-content-fn-exif",id:"user-content-fnref-exif-3","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})," tags instead."]}),"\n",(0,s.jsx)(t.h2,{id:"use-fixed-camera-params",children:"use-fixed-camera-params"}),"\n",(0,s.jsx)(t.p,{children:'Camera internal parameters are estimated and refined during reconstruction. Poor image capture practices can lead to incorrect estimations and a "doming" effect. Enabling this option keeps camera parameters fixed, potentially improving results when images have little geometric distortion.'}),"\n",(0,s.jsx)(t.admonition,{type:"warning",children:(0,s.jsx)(t.p,{children:"This option will not magically fix problems associated with poor image captures."})}),"\n",(0,s.jsx)(t.h2,{id:"use-hybrid-bundle-adjustment",children:"use-hybrid-bundle-adjustment"}),"\n",(0,s.jsx)(t.p,{children:"This option increases the number of times that bundle adjustment is performed."}),"\n",(0,s.jsx)(t.p,{children:"Turning on this option increases the total run-time, but can help increase the accuracy of the reconstruction in larger datasets that exhibit doming."}),"\n",(0,s.jsx)(t.h2,{id:"video-limit",children:"video-limit"}),"\n",(0,s.jsx)(t.p,{children:"WebODM Lightning can process video files (.mp4, .mov, .lrv, and .ts) by extracting image frames at regular intervals. The program automatically filters out blurry and dark frames."}),"\n",(0,s.jsxs)(t.p,{children:["For DJI drones, if a matching subtitle (.srt) file is available, it will be used to add GPS information to the extracted images. The subtitle file should have the same filename as the video file, and it is case-sensitive. For example, ",(0,s.jsx)(t.strong,{children:"video.mp4"})," should have a corresponding ",(0,s.jsx)(t.strong,{children:"video.srt"})," file."]}),"\n",(0,s.jsx)(t.p,{children:"This option allows you to set the number of images to extract from the video files."}),"\n",(0,s.jsx)(t.h2,{id:"video-resolution",children:"video-resolution"}),"\n",(0,s.jsx)(t.p,{children:"This option defines the resolution of the images extracted from video files. For instance, if a video file has a resolution of 3840x2160 pixels and set this option to 2000, the extracted images will be 2000x1125 pixels in resolution."}),"\n",(0,s.jsxs)(t.p,{children:["See also ",(0,s.jsx)(t.a,{href:"#video-limit",children:"video-limit"}),"."]}),"\n",(0,s.jsxs)(t.section,{"data-footnotes":!0,className:"footnotes",children:[(0,s.jsx)(t.h2,{className:"sr-only",id:"footnote-label",children:"Footnotes"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{id:"user-content-fn-exif",children:["\n",(0,s.jsxs)(t.p,{children:["EXIF Tags: ",(0,s.jsx)(t.a,{href:"https://exiftool.org/TagNames/EXIF.html",children:"exiftool.org/TagNames/EXIF.html"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-exif","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})," ",(0,s.jsxs)(t.a,{href:"#user-content-fnref-exif-2","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:["\u21a9",(0,s.jsx)(t.sup,{children:"2"})]})," ",(0,s.jsxs)(t.a,{href:"#user-content-fnref-exif-3","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:["\u21a9",(0,s.jsx)(t.sup,{children:"3"})]})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-xmp",children:["\n",(0,s.jsxs)(t.p,{children:["XMP Tags: ",(0,s.jsx)(t.a,{href:"https://exiftool.org/TagNames/XMP.html",children:"exiftool.org/TagNames/XMP.html"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-xmp","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-smrf",children:["\n",(0,s.jsxs)(t.p,{children:["SMRF: A Simple Morphological Filter for Ground Identification of LIDAR Data. ",(0,s.jsx)(t.a,{href:"http://tpingel.org/code/smrf/smrf.html",children:"tpingel.org/code/smrf/smrf.html"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-smrf","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})," ",(0,s.jsxs)(t.a,{href:"#user-content-fnref-smrf-2","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:["\u21a9",(0,s.jsx)(t.sup,{children:"2"})]})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-sift",children:["\n",(0,s.jsxs)(t.p,{children:["SIFT: Scale Invariant Feature Transform. ",(0,s.jsx)(t.a,{href:"https://cs.ubc.ca/~lowe/papers/ijcv04.pdf",children:"cs.ubc.ca/~lowe/papers/ijcv04.pdf"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-sift","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-dspsift",children:["\n",(0,s.jsxs)(t.p,{children:["DSP-SIFT: Domain-Size Pooling in Local Descriptors. ",(0,s.jsx)(t.a,{href:"https://arxiv.org/pdf/1412.8556.pdf",children:"https://arxiv.org/pdf/1412.8556.pdf"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-dspsift","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-akaze",children:["\n",(0,s.jsxs)(t.p,{children:["AKAZE: Accelerated-KAZE. KAZE is a Japanese word that means ",(0,s.jsx)(t.em,{children:"wind"})," (a tribute to Iijima, the father of scale space analysis). ",(0,s.jsx)(t.a,{href:"http://robesafe.com/personal/pablo.alcantarilla/papers/Alcantarilla13bmvc.pdf",children:"robesafe.com/personal/pablo.alcantarilla/papers/Alcantarilla13bmvc.pdf"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-akaze","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-hahog",children:["\n",(0,s.jsxs)(t.p,{children:["HAHOG: Hessian Affine (point detector) + Histogram of Oriented Gradients (descriptor). ",(0,s.jsx)(t.a,{href:"https://github.com/mapillary/OpenSfM/blob/main/opensfm/src/features/src/hahog.cc",children:"github.com/mapillary/OpenSfM/blob/main/opensfm/src/features/src/hahog.cc"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-hahog","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-orb",children:["\n",(0,s.jsxs)(t.p,{children:["ORB: Oriented FAST (point detector) and Rotated BRIEF (descriptor). ",(0,s.jsx)(t.a,{href:"https://gwylab.com/download/ORB_2012.pdf",children:"gwylab.com/download/ORB_2012.pdf"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-orb","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-rtk",children:["\n",(0,s.jsxs)(t.p,{children:["RTK: Real Time Kinematic is a technique used to increase the accuracy of GPS positions using a stationary base station that sends out correctional data to the drone. ",(0,s.jsx)(t.a,{href:"#user-content-fnref-rtk","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-delaunay",children:["\n",(0,s.jsxs)(t.p,{children:["Delaunay Triangulation: ",(0,s.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Delaunay_triangulation",children:"en.wikipedia.org/wiki/Delaunay_triangulation"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-delaunay","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-bow",children:["\n",(0,s.jsxs)(t.p,{children:["Bag-of-words model in computer vision: ",(0,s.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Bag-of-words_model_in_computer_vision",children:"en.wikipedia.org/wiki/Bag-of-words_model_in_computer_vision"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-bow","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-las",children:["\n",(0,s.jsxs)(t.p,{children:["LAS 1.4 Specification: ",(0,s.jsx)(t.a,{href:"https://asprs.org/wp-content/uploads/2010/12/LAS_1_4_r13.pdf",children:"asprs.org/wp-content/uploads/2010/12/LAS_1_4_r13.pdf"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-las","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-openpointclass",children:["\n",(0,s.jsxs)(t.p,{children:["OpenPointClass: Fast and memory efficient semantic segmentation of 3D point clouds. ",(0,s.jsx)(t.a,{href:"https://github.com/uav4geo/openpointclass",children:"github.com/uav4geo/openpointclass"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-openpointclass","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-sensors",children:["\n",(0,s.jsxs)(t.p,{children:["Supported Multispectral Hardware: ",(0,s.jsx)(t.a,{href:"https://docs.opendronemap.org/multispectral/#hardware",children:"docs.opendronemap.org/multispectral/#hardware"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-sensors","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-obj",children:["\n",(0,s.jsxs)(t.p,{children:["Wavefront OBJ: ",(0,s.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Wavefront_.obj_file",children:"en.wikipedia.org/wiki/Wavefront_.obj_file"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-obj","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-blender",children:["\n",(0,s.jsxs)(t.p,{children:["Blender: ",(0,s.jsx)(t.a,{href:"https://blender.org",children:"blender.org"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-blender","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-tms",children:["\n",(0,s.jsxs)(t.p,{children:["TMS: Tile Map Service: ",(0,s.jsx)(t.a,{href:"https://wiki.openstreetmap.org/wiki/TMS",children:"wiki.openstreetmap.org/wiki/TMS"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-tms","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{id:"user-content-fn-leaflet",children:["\n",(0,s.jsxs)(t.p,{children:["Leaflet: ",(0,s.jsx)(t.a,{href:"https://leafletjs.com/",children:"leafletjs.com/"})," ",(0,s.jsx)(t.a,{href:"#user-content-fnref-leaflet","data-footnote-backref":!0,className:"data-footnote-backref","aria-label":"Back to content",children:"\u21a9"})]}),"\n"]}),"\n"]}),"\n"]})]})}const p=function(e={}){const{wrapper:t}=Object.assign({},(0,n.ah)(),e.components);return t?(0,s.jsx)(t,Object.assign({},e,{children:(0,s.jsx)(h,e)})):h(e)}}}]); \ No newline at end of file diff --git a/assets/js/main.a2b88a04.js b/assets/js/main.a2b88a04.js new file mode 100644 index 0000000..c2ab2a9 --- /dev/null +++ b/assets/js/main.a2b88a04.js @@ -0,0 +1,2 @@ +/*! For license information please see main.a2b88a04.js.LICENSE.txt */ +(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[179],{830:(e,t,n)=>{"use strict";n.d(t,{W:()=>a});var r=n(7294);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});n(7294);var r=n(8356),a=n.n(r),o=n(6887);const i={14006581:[()=>n.e(712).then(n.t.bind(n,5745,19)),"/home/runner/work/lightning-docs/lightning-docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"14eb3368":[()=>Promise.all([n.e(532),n.e(817)]).then(n.bind(n,853)),"@theme/DocCategoryGeneratedIndexPage",853],17896441:[()=>Promise.all([n.e(532),n.e(592),n.e(137),n.e(918)]).then(n.bind(n,2828)),"@theme/DocItem",2828],"193334ab":[()=>Promise.all([n.e(532),n.e(592),n.e(88)]).then(n.bind(n,9634)),"@site/docs/02-how-to/01-ground-control-points.md",9634],"1a4e3797":[()=>Promise.all([n.e(532),n.e(920)]).then(n.bind(n,7988)),"@theme/SearchPage",7988],"1f391b9e":[()=>Promise.all([n.e(532),n.e(592),n.e(137),n.e(85)]).then(n.bind(n,6252)),"@theme/MDXPage",6252],"393be207":[()=>Promise.all([n.e(592),n.e(414)]).then(n.bind(n,9386)),"@site/src/pages/markdown-page.md",9386],"57ea8382":[()=>Promise.all([n.e(532),n.e(592),n.e(621)]).then(n.bind(n,785)),"@site/docs/01-getting-started/01-image-capture.md",785],"5e95c892":[()=>n.e(661).then(n.bind(n,4942)),"@theme/DocsRoot",4942],"5ee0f748":[()=>Promise.all([n.e(532),n.e(592),n.e(692)]).then(n.bind(n,1678)),"@site/docs/02-how-to/05-image-masks.md",1678],"73da4eb8":[()=>Promise.all([n.e(532),n.e(592),n.e(609)]).then(n.bind(n,7966)),"@site/docs/01-getting-started/03-creating-a-task.md",7966],"8555311e":[()=>n.e(102).then(n.t.bind(n,348,19)),"~docs/default/category-tutorialsidebar-category-how-to-d28.json",348],"8ab516b5":[()=>Promise.all([n.e(532),n.e(592),n.e(626)]).then(n.bind(n,5434)),"@site/docs/03-references/15-create-successful-maps.md",5434],"8ddc361b":[()=>Promise.all([n.e(532),n.e(592),n.e(818)]).then(n.bind(n,8480)),"@site/docs/01-getting-started/02-getting-ground-control-points.md",8480],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],a1cc567b:[()=>n.e(103).then(n.t.bind(n,3769,19)),"/home/runner/work/lightning-docs/lightning-docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],a7bd4aaa:[()=>n.e(518).then(n.bind(n,604)),"@theme/DocVersionRoot",604],a7f6eb5f:[()=>n.e(545).then(n.t.bind(n,7085,19)),"/home/runner/work/lightning-docs/lightning-docs/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",7085],a94703ab:[()=>Promise.all([n.e(532),n.e(368)]).then(n.bind(n,163)),"@theme/DocRoot",163],c19f478c:[()=>n.e(898).then(n.t.bind(n,6581,19)),"~docs/default/category-tutorialsidebar-category-getting-started-265.json",6581],cc01dae5:[()=>n.e(303).then(n.t.bind(n,9085,19)),"~docs/default/category-tutorialsidebar-category-references-76f.json",9085],e1835986:[()=>Promise.all([n.e(532),n.e(592),n.e(68)]).then(n.bind(n,3717)),"@site/docs/03-references/01-task-options.md",3717],e57fab61:[()=>Promise.all([n.e(532),n.e(592),n.e(663)]).then(n.bind(n,9103)),"@site/docs/02-how-to/09-share-results.md",9103]};var l=n(5893);function s(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,l.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,l.jsx)("p",{children:String(t)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(5304),c=n(9656);function d(e,t){if("*"===e)return a()({loading:s,loader:()=>n.e(868).then(n.bind(n,868)),modules:["@theme/NotFound"],webpack:()=>[868],render(e,t){const n=e.default;return(0,l.jsx)(c.z,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},f=[],p=[],h=(0,u.Z)(r);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],f.push(r[1]),p.push(r[2]))})),a().Map({loading:s,loader:d,modules:f,webpack:()=>p,render(t,n){const a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;return delete a.__context,(0,l.jsx)(c.z,{value:i,children:(0,l.jsx)(o,{...a,...n})})}})}const f=[{path:"/markdown-page",component:d("/markdown-page","8d5"),exact:!0},{path:"/search",component:d("/search","a1d"),exact:!0},{path:"/",component:d("/","a98"),routes:[{path:"/",component:d("/","111"),routes:[{path:"/",component:d("/","cdc"),routes:[{path:"/getting-started/creating-a-task",component:d("/getting-started/creating-a-task","7f7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/getting-started/getting-ground-control-points",component:d("/getting-started/getting-ground-control-points","bd0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/getting-started/image-capture",component:d("/getting-started/image-capture","18e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/how-to/",component:d("/how-to/","e05"),exact:!0,sidebar:"tutorialSidebar"},{path:"/how-to/ground-control-points",component:d("/how-to/ground-control-points","b07"),exact:!0,sidebar:"tutorialSidebar"},{path:"/how-to/image-masks",component:d("/how-to/image-masks","6c5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/how-to/share-results",component:d("/how-to/share-results","d2a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/references/",component:d("/references/","19b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/references/create-successful-maps",component:d("/references/create-successful-maps","bdf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/references/task-options",component:d("/references/task-options","1c9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/",component:d("/","c89"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"*",component:d("*")}]},8121:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>i});var r=n(7294),a=n(5893);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},9717:(e,t,n)=>{"use strict";var r=n(7294),a=n(745),o=n(3727),i=n(405),l=n(6136);const s=[n(984),n(2251),n(9957),n(6930)];var u=n(997),c=n(6550),d=n(8790),f=n(5893);function p(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var h=n(1514),g=n(9962),m=n(9524),y=n(107),b=n(9488),v=n(626),w=n(8181),k=n(246),x=n(3905),S=n(3647);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.Z)(),r=(0,v.l)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,f.jsxs)(h.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function C(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.Z)(),{pathname:r}=(0,c.TH)();return e+(0,x.applyTrailingSlash)((0,m.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,f.jsxs)(h.Z,{children:[(0,f.jsx)("meta",{property:"og:url",content:a}),(0,f.jsx)("link",{rel:"canonical",href:a})]})}function _(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,y.L)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(h.Z,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:w.h})]}),n&&(0,f.jsx)(b.d,{image:n}),(0,f.jsx)(C,{}),(0,f.jsx)(E,{}),(0,f.jsx)(S.Z,{tag:k.HX,locale:e}),(0,f.jsx)(h.Z,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const T=new Map;function A(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var L=n(8121),N=n(694),j=n(1270);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const O=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,j.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),P("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(O,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(c.AW,{location:t,render:()=>e})})}}const F=I,M="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${M}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(5304);const Q=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Q.has(e))(e))return!1;Q.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(G).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),R(e))},te=Object.freeze(ee),ne=Boolean(!0);if(l.Z.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(i.B6,{children:(0,f.jsx)(o.VK,{children:(0,f.jsx)(q,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},l=()=>{if(ne)r.startTransition((()=>{a.hydrateRoot(e,t,{onRecoverableError:n})}));else{const o=a.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{o.render(t)}))}};R(window.location.pathname).then(l)}},694:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>f});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/","mainDocId":"getting-started/image-capture","docs":[{"id":"getting-started/creating-a-task","path":"/getting-started/creating-a-task","sidebar":"tutorialSidebar"},{"id":"getting-started/getting-ground-control-points","path":"/getting-started/getting-ground-control-points","sidebar":"tutorialSidebar"},{"id":"getting-started/image-capture","path":"/getting-started/image-capture","sidebar":"tutorialSidebar"},{"id":"how-to/ground-control-points","path":"/how-to/ground-control-points","sidebar":"tutorialSidebar"},{"id":"how-to/image-masks","path":"/how-to/image-masks","sidebar":"tutorialSidebar"},{"id":"how-to/share-results","path":"/how-to/share-results","sidebar":"tutorialSidebar"},{"id":"references/create-successful-maps","path":"/references/create-successful-maps","sidebar":"tutorialSidebar"},{"id":"references/task-options","path":"/references/task-options","sidebar":"tutorialSidebar"},{"id":"/","path":"/","sidebar":"tutorialSidebar"},{"id":"how-to/","path":"/how-to/","sidebar":"tutorialSidebar"},{"id":"references/","path":"/references/","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/","label":"Getting Started"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"3.0.0-rc.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.0.0-rc.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.0.0-rc.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.0.0-rc.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.0.0-rc.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.0.0-rc.0"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"3.0.0-rc.0"},"docusaurus-plugin-ideal-image":{"type":"package","name":"@docusaurus/plugin-ideal-image","version":"3.0.0-rc.0"}}}');var u=n(5893);const c={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},d=r.createContext(c);function f(e){let{children:t}=e;return(0,u.jsx)(d.Provider,{value:c,children:t})}},3256:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(6136),o=n(1514),i=n(3905),l=n(241),s=n(5893);function u(e){let{error:t,tryAgain:n}=e;return(0,s.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,s.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,s.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,s.jsx)(c,{error:t})]})}function c(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,s.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,s.jsxs)(p,{fallback:()=>(0,s.jsx)(u,{error:t,tryAgain:n}),children:[(0,s.jsx)(o.Z,{children:(0,s.jsx)("title",{children:"Page Error"})}),(0,s.jsx)(l.Z,{children:(0,s.jsx)(u,{error:t,tryAgain:n})})]})}const f=e=>(0,s.jsx)(d,{...e});class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??f)(e)}return e??null}}},6136:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},1514:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7294);var r=n(405),a=n(5893);function o(e){return(0,a.jsx)(r.ql,{...e})}},3699:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(3727),o=n(3905),i=n(9962),l=n(2735),s=n(6136),u=n(5893);const c=r.createContext({collectLink:()=>{}});var d=n(9524);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:h,isActive:g,"data-noBrokenLinkCheck":m,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.Z)(),{withBaseUrl:k}=(0,d.C)(),x=(0,r.useContext)(c),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const E=f||p;const C=(0,l.Z)(E),_=E?.replace("pathname://","");let T=void 0!==_?(A=_,y&&(e=>e.startsWith("/"))(A)?k(A):A):void 0;var A;T&&C&&(T=(0,o.applyTrailingSlash)(T,{trailingSlash:v,baseUrl:w}));const L=(0,r.useRef)(!1),N=n?a.OL:a.rU,j=s.Z.canUseIntersectionObserver,P=(0,r.useRef)(),O=()=>{L.current||null==T||(window.docusaurus.preload(T),L.current=!0)};(0,r.useEffect)((()=>(!j&&C&&null!=T&&window.docusaurus.prefetch(T),()=>{j&&P.current&&P.current.disconnect()})),[P,T,j,C]);const R=T?.startsWith("#")??!1,I=!T||!C||R;return I||m||x.collectLink(T),I?(0,u.jsx)("a",{ref:S,href:T,...E&&!C&&{target:"_blank",rel:"noopener noreferrer"},...b}):(0,u.jsx)(N,{...b,onMouseEnter:O,onTouchStart:O,innerRef:e=>{S.current=e,j&&e&&C&&(P.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(P.current.unobserve(e),P.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),P.current.observe(e))},to:T,...n&&{isActive:g,activeClassName:h}})}const p=r.forwardRef(f)},7325:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u,I:()=>s});var r=n(7294),a=n(5893);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(7529);function l(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function s(e,t){let{message:n,id:r}=e;return o(l({message:n,id:r}),t)}function u(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=l({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},6875:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},2735:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},9524:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),a=n(9962),o=n(2735);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},9962:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(694);function o(){return(0,r.useContext)(a._)}},1048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8121);function o(){return(0,r.useContext)(a._)}},1270:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const a=n(6136).Z.canUseDOM?r.useLayoutEffect:r.useEffect},5304:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},9656:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>i});var r=n(7294),a=n(5893);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),l=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,a.jsx)(o.Provider,{value:l,children:t})}},9871:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>y,gA:()=>p,WS:()=>h,_r:()=>d,Jo:()=>b,zh:()=>f,yW:()=>m,gB:()=>g});var r=n(6550),a=n(9962),o=n(6875);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function u(e,t){const n=s(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const c={},d=()=>i("docusaurus-plugin-content-docs")??c,f=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function h(e){void 0===e&&(e={});const t=p(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:s(t.pluginData,n)}}function g(e){return f(e).versions}function m(e){const t=f(e);return l(t)}function y(e){const t=f(e),{pathname:n}=(0,r.TH)();return u(t,n)}function b(e){const t=f(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:u(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},9957:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},2251:(e,t,n)=>{"use strict";n.r(t);var r=n(2573),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(6854),n(9347)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},3899:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(7294);var r=n(6010),a=n(7325),o=n(107),i=n(3699);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var s=n(5893);function u(e){let{as:t,id:n,...u}=e;const{navbar:{hideOnScroll:c}}=(0,o.L)();if("h1"===t||!n)return(0,s.jsx)(t,{...u,id:void 0});const d=(0,a.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,s.jsxs)(t,{...u,className:(0,r.Z)("anchor",c?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,s.jsx)(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":d,title:d,children:"\u200b"})]})}},4082:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7294);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(5893);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},241:(e,t,n)=>{"use strict";n.d(t,{Z:()=>jt});var r=n(7294),a=n(6010),o=n(3256),i=n(9488),l=n(6550),s=n(7325),u=n(3266),c=n(5893);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,l.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const h=(0,s.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??h,{containerRef:n,onClick:r}=p();return(0,c.jsx)("div",{ref:n,role:"region","aria-label":h,children:(0,c.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var m=n(3702),y=n(8181);const b={skipToContent:"skipToContent_fXgn"};function v(){return(0,c.jsx)(g,{className:b.skipToContent})}var w=n(107),k=n(5830);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,c.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,c.jsx)("g",{stroke:r,strokeWidth:a,children:(0,c.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,c.jsx)("button",{type:"button","aria-label":(0,s.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.Z)("clean-btn close",S.closeButton,e.className),children:(0,c.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const C={content:"content_knG7"};function _(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return(0,c.jsx)("div",{...e,className:(0,a.Z)(C.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,c.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,c.jsx)("div",{className:T.announcementBarPlaceholder}),(0,c.jsx)(_,{className:T.announcementBarContent}),o&&(0,c.jsx)(E,{onClick:n,className:T.announcementBarClose})]})}var L=n(735),N=n(2957);var j=n(3768),P=n(3086);const O=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,L.e)(),t=(0,P.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,j.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,c.jsx)(O.Provider,{value:n,children:t})}function I(e){if(e.component){const t=e.component;return(0,c.jsx)(t,{...e.props})}}function F(){const e=(0,r.useContext)(O);if(!e)throw new j.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,P.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:I(o)})),[a,o,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=F();return(0,c.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,c.jsxs)("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var D=n(9200),z=n(1048);function B(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function Z(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const i=(0,z.Z)(),l=(0,s.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,s.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,s.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,c.jsx)("div",{className:(0,a.Z)(U.toggle,t),children:(0,c.jsxs)("button",{className:(0,a.Z)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:l,"aria-label":l,"aria-live":"polite",children:[(0,c.jsx)(B,{className:(0,a.Z)(U.toggleIcon,U.lightToggleIcon)}),(0,c.jsx)($,{className:(0,a.Z)(U.toggleIcon,U.darkToggleIcon)})]})})}const H=r.memo(Z),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){let{className:t}=e;const n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,D.I)();return r?null:(0,c.jsx)(H,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var q=n(5659);function G(){return(0,c.jsx)(q.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,L.e)();return(0,c.jsx)("button",{type:"button","aria-label":(0,s.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,c.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,c.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,c.jsx)(G,{}),(0,c.jsx)(W,{className:"margin-right--md"}),(0,c.jsx)(K,{})]})}var Q=n(3699),X=n(9524),J=n(2735),ee=n(1500),te=n(4082);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:a,label:o,html:i,isDropdownLink:l,prependBaseUrlToHref:s,...u}=e;const d=(0,X.Z)(r),f=(0,X.Z)(t),p=(0,X.Z)(a,{forcePrependBaseUrl:!0}),h=o&&a&&!(0,J.Z)(a),g=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,c.jsxs)(c.Fragment,{children:[o,h&&(0,c.jsx)(te.Z,{...l&&{width:12,height:12}})]})};return a?(0,c.jsx)(Q.Z,{href:s?p:a,...u,...g}):(0,c.jsx)(Q.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?(0,ee.F)(n,t.pathname):t.pathname.startsWith(f)},...u,...g})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,c.jsx)(ne,{className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,c.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,c.jsx)("li",{className:"menu__list-item",children:(0,c.jsx)(ne,{className:(0,a.Z)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,c.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(4639),le=n(9003),se=n(9962);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!(0,ee.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:o,onClick:i,...l}=e;const s=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{s.current&&!s.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[s]),(0,c.jsxs)("div",{ref:s,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u}),children:[(0,c.jsx)(ne,{"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,a.Z)("navbar__link",o),...l,onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))},children:l.children??l.label}),(0,c.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(Ze,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function de(e){let{items:t,className:n,position:o,onClick:i,...s}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,l.TH)();return t.replace(e,"/")}(),d=ue(t,u),{collapsed:f,toggleCollapsed:p,setCollapsed:h}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&h(!d)}),[u,d,h]),(0,c.jsxs)("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f}),children:[(0,c.jsx)(ne,{role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n),...s,onClick:e=>{e.preventDefault(),p()},children:s.children??s.label}),(0,c.jsx)(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f,children:t.map(((e,t)=>(0,r.createElement)(Ze,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?de:ce;return(0,c.jsx)(r,{...n})}var pe=n(626);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const ge="iconLanguage_nlXk";function me(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var ye=n(830),be=["translations"];function ve(){return ve=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var Se="Ctrl";var Ee=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,o=xe(e,be),i=a.buttonText,l=void 0===i?"Search":i,s=a.buttonAriaLabel,u=void 0===s?"Search":s,c=we((0,r.useState)(null),2),d=c[0],f=c[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?f("\u2318"):f(Se))}),[]),r.createElement("button",ve({type:"button",className:"DocSearch DocSearch-Button","aria-label":u},o,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(ye.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},l)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement("kbd",{className:"DocSearch-Button-Key"},d===Se?r.createElement(me,null):d),r.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),Ce=n(1514),_e=n(5358),Te=n(2327),Ae=n(246);var Le=n(3935);const Ne={button:{buttonText:(0,s.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,s.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,s.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,s.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,s.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,s.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,s.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,s.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,s.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,s.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,s.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,s.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,s.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,s.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,s.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,s.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,s.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,s.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,s.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,s.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,s.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,s.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,s.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,s.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,s.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,s.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,s.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let je=null;function Pe(e){let{hit:t,children:n}=e;return(0,c.jsx)(Q.Z,{to:t.url,children:n})}function Oe(e){let{state:t,onClose:n}=e;const r=(0,_e.M)();return(0,c.jsx)(Q.Z,{to:r(t.query),onClick:n,children:(0,c.jsx)(s.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits},children:"See all {count} results"})})}function Re(e){let{contextualSearch:t,externalUrlRegex:a,...o}=e;const{siteMetadata:i}=(0,se.Z)(),s=(0,Te.l)(),u=function(){const{locale:e,tags:t}=(0,Ae._q)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),d=o.searchParameters?.facetFilters??[],f=t?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(u,d):d,p={...o.searchParameters,facetFilters:f},h=(0,l.k6)(),g=(0,r.useRef)(null),m=(0,r.useRef)(null),[y,b]=(0,r.useState)(!1),[v,w]=(0,r.useState)(void 0),k=(0,r.useCallback)((()=>je?Promise.resolve():Promise.all([n.e(426).then(n.bind(n,1426)),Promise.all([n.e(532),n.e(945)]).then(n.bind(n,3969)),Promise.all([n.e(532),n.e(153)]).then(n.bind(n,2153))]).then((e=>{let[{DocSearchModal:t}]=e;je=t}))),[]),x=(0,r.useCallback)((()=>{k().then((()=>{g.current=document.createElement("div"),document.body.insertBefore(g.current,document.body.firstChild),b(!0)}))}),[k,b]),S=(0,r.useCallback)((()=>{b(!1),g.current?.remove()}),[b]),E=(0,r.useCallback)((e=>{k().then((()=>{b(!0),w(e.key)}))}),[k,b,w]),C=(0,r.useRef)({navigate(e){let{itemUrl:t}=e;(0,ee.F)(a,t)?window.location.href=t:h.push(t)}}).current,_=(0,r.useRef)((e=>o.transformItems?o.transformItems(e):e.map((e=>({...e,url:s(e.url)}))))).current,T=(0,r.useMemo)((()=>e=>(0,c.jsx)(Oe,{...e,onClose:S})),[S]),A=(0,r.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",i.docusaurusVersion),e)),[i.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){var r;(27===e.keyCode&&t||"k"===(null===(r=e.key)||void 0===r?void 0:r.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,i])}({isOpen:y,onOpen:x,onClose:S,onInput:E,searchButtonRef:m}),(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(Ce.Z,{children:(0,c.jsx)("link",{rel:"preconnect",href:`https://${o.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})}),(0,c.jsx)(Ee,{onTouchStart:k,onFocus:k,onMouseOver:k,onClick:x,ref:m,translations:Ne.button}),y&&je&&g.current&&(0,Le.createPortal)((0,c.jsx)(je,{onClose:S,initialScrollY:window.scrollY,initialQuery:v,navigator:C,transformItems:_,hitComponent:Pe,transformSearchClient:A,...o.searchPagePath&&{resultsFooterComponent:T},...o,searchParameters:p,placeholder:Ne.placeholder,translations:Ne.modal}),g.current)]})}function Ie(){const{siteConfig:e}=(0,se.Z)();return(0,c.jsx)(Re,{...e.themeConfig.algolia})}const Fe={navbarSearchContainer:"navbarSearchContainer_Bca1"};function Me(e){let{children:t,className:n}=e;return(0,c.jsx)("div",{className:(0,a.Z)(n,Fe.navbarSearchContainer),children:t})}var De=n(9871),ze=n(3734);var Be=n(6409);const $e=e=>e.docs.find((t=>t.id===e.mainDocId));const Ue={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:h}=(0,l.TH)(),g=[...n,...u.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${h}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],m=t?(0,s.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,c.jsx)(fe,{...o,mobile:t,label:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(he,{className:ge}),m]}),items:g})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,c.jsx)(Me,{className:n,children:(0,c.jsx)(Ie,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,c.jsx)(i,{className:(0,a.Z)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,De.Iw)(r),i=(0,ze.vY)(t,r),l=o?.path===i?.path;return null===i||i.unlisted&&!l?null:(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>l||!!o?.sidebar&&o.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,De.Iw)(r),i=(0,ze.oz)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,ze.lO)(r)[0],i=t??o.label,l=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,c.jsx)(oe,{...a,label:i,to:l})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:u,hash:d}=(0,l.TH)(),f=(0,De.Iw)(n),p=(0,De.gB)(n),{savePreferredVersionName:h}=(0,Be.J)(n),g=[...a,...p.map((e=>{const t=f.alternateDocVersions[e.name]??$e(e);return{label:e.label,to:`${t.path}${u}${d}`,isActive:()=>e===f.activeVersion,onClick:()=>h(e.name)}})),...o],m=(0,ze.lO)(n)[0],y=t&&g.length>1?(0,s.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):m.label,b=t&&g.length>1?void 0:$e(m).path;return g.length<=1?(0,c.jsx)(oe,{...i,mobile:t,label:y,to:b,isActive:r?()=>!1:void 0}):(0,c.jsx)(fe,{...i,mobile:t,label:y,to:b,items:g,isActive:r?()=>!1:void 0})}};function Ze(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Ue[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,c.jsx)(a,{...n})}function He(){const e=(0,L.e)(),t=(0,w.L)().navbar.items;return(0,c.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Ze,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ve(e){return(0,c.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,c.jsx)(s.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function We(){const e=0===(0,w.L)().navbar.items.length,t=F();return(0,c.jsxs)(c.Fragment,{children:[!e&&(0,c.jsx)(Ve,{onClick:()=>t.hide()}),t.content]})}function qe(){const e=(0,L.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,c.jsx)(M,{header:(0,c.jsx)(Y,{}),primaryMenu:(0,c.jsx)(He,{}),secondaryMenu:(0,c.jsx)(We,{})}):null}const Ge={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ke(e){return(0,c.jsx)("div",{role:"presentation",...e,className:(0,a.Z)("navbar-sidebar__backdrop",e.className)})}function Ye(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,L.e)(),{navbarRef:l,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,N.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,c.jsxs)("nav",{ref:l,"aria-label":(0,s.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Ge.navbarHideable,!d&&Ge.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,c.jsx)(Ke,{onClick:i.toggle}),(0,c.jsx)(qe,{})]})}var Qe=n(3905);const Xe={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Je(e){return(0,c.jsx)("button",{type:"button",...e,children:(0,c.jsx)(s.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function et(e){let{error:t}=e;const n=(0,Qe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{className:Xe.errorBoundaryError,children:n})}class tt extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const nt="right";function rt(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,c.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,c.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function at(){const{toggle:e,shown:t}=(0,L.e)();return(0,c.jsx)("button",{onClick:e,"aria-label":(0,s.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,c.jsx)(rt,{})})}const ot={colorModeToggle:"colorModeToggle_DEke"};function it(e){let{items:t}=e;return(0,c.jsx)(c.Fragment,{children:t.map(((e,t)=>(0,c.jsx)(tt,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,c.jsx)(Ze,{...e})},t)))})}function lt(e){let{left:t,right:n}=e;return(0,c.jsxs)("div",{className:"navbar__inner",children:[(0,c.jsx)("div",{className:"navbar__items",children:t}),(0,c.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function st(){const e=(0,L.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??nt)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,c.jsx)(lt,{left:(0,c.jsxs)(c.Fragment,{children:[!e.disabled&&(0,c.jsx)(at,{}),(0,c.jsx)(G,{}),(0,c.jsx)(it,{items:n})]}),right:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(it,{items:r}),(0,c.jsx)(W,{className:ot.colorModeToggle}),!a&&(0,c.jsx)(Me,{children:(0,c.jsx)(Ie,{})})]})})}function ut(){return(0,c.jsx)(Ye,{children:(0,c.jsx)(st,{})})}function ct(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,l=(0,X.Z)(n),s=(0,X.Z)(r,{forcePrependBaseUrl:!0});return(0,c.jsxs)(Q.Z,{className:"footer__link-item",...r?{href:o?s:r}:{to:l},...i,children:[a,r&&!(0,J.Z)(r)&&(0,c.jsx)(te.Z,{})]})}function dt(e){let{item:t}=e;return t.html?(0,c.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)("li",{className:"footer__item",children:(0,c.jsx)(ct,{item:t})},t.href??t.to)}function ft(e){let{column:t}=e;return(0,c.jsxs)("div",{className:"col footer__col",children:[(0,c.jsx)("div",{className:"footer__title",children:t.title}),(0,c.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,c.jsx)(dt,{item:e},t)))})]})}function pt(e){let{columns:t}=e;return(0,c.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,c.jsx)(ft,{column:e},t)))})}function ht(){return(0,c.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function gt(e){let{item:t}=e;return t.html?(0,c.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)(ct,{item:t})}function mt(e){let{links:t}=e;return(0,c.jsx)("div",{className:"footer__links text--center",children:(0,c.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,c.jsxs)(r.Fragment,{children:[(0,c.jsx)(gt,{item:e}),t.length!==n+1&&(0,c.jsx)(ht,{})]},n)))})})}function yt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,c.jsx)(pt,{columns:t}):(0,c.jsx)(mt,{links:t})}var bt=n(4277);const vt={footerLogoLink:"footerLogoLink_BH7S"};function wt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,c.jsx)(bt.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function kt(e){let{logo:t}=e;return t.href?(0,c.jsx)(Q.Z,{href:t.href,className:vt.footerLogoLink,target:t.target,children:(0,c.jsx)(wt,{logo:t})}):(0,c.jsx)(wt,{logo:t})}function xt(e){let{copyright:t}=e;return(0,c.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function St(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,c.jsx)("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t}),children:(0,c.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,c.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,c.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function Et(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,c.jsx)(St,{style:a,links:n&&n.length>0&&(0,c.jsx)(yt,{links:n}),logo:r&&(0,c.jsx)(kt,{logo:r}),copyright:t&&(0,c.jsx)(xt,{copyright:t})})}const Ct=r.memo(Et),_t=(0,j.Qc)([D.S,k.pl,N.OC,Be.L5,i.VC,function(e){let{children:t}=e;return(0,c.jsx)(P.n2,{children:(0,c.jsx)(L.M,{children:(0,c.jsx)(R,{children:t})})})}]);function Tt(e){let{children:t}=e;return(0,c.jsx)(_t,{children:t})}var At=n(3899);function Lt(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)("main",{className:"container margin-vert--xl",children:(0,c.jsx)("div",{className:"row",children:(0,c.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,c.jsx)(At.Z,{as:"h1",className:"hero__title",children:(0,c.jsx)(s.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,c.jsx)("div",{className:"margin-vert--lg",children:(0,c.jsx)(Je,{onClick:n,className:"button button--primary shadow--lw"})}),(0,c.jsx)("hr",{}),(0,c.jsx)("div",{className:"margin-vert--md",children:(0,c.jsx)(et,{error:t})})]})})})}const Nt={mainWrapper:"mainWrapper_z2l0"};function jt(e){const{children:t,noFooter:n,wrapperClassName:r,title:l,description:s}=e;return(0,y.t)(),(0,c.jsxs)(Tt,{children:[(0,c.jsx)(i.d,{title:l,description:s}),(0,c.jsx)(v,{}),(0,c.jsx)(A,{}),(0,c.jsx)(ut,{}),(0,c.jsx)("div",{id:d,className:(0,a.Z)(m.k.wrapper.main,Nt.mainWrapper,r),children:(0,c.jsx)(o.Z,{fallback:e=>(0,c.jsx)(Lt,{...e}),children:t})}),!n&&(0,c.jsx)(Ct,{})]})}},3647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7294);var r=n(1514),a=n(5893);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return(0,a.jsxs)(r.Z,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},4277:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7294),a=n(6010),o=n(1048),i=n(9200);const l={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var s=n(5893);function u(e){let{className:t,children:n}=e;const u=(0,o.Z)(),{colorMode:c}=(0,i.I)();return(0,s.jsx)(s.Fragment,{children:(u?"dark"===c?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.Z)(t,l.themedComponent,l[`themedComponent--${e}`])});return(0,s.jsx)(r.Fragment,{children:o},e)}))})}function c(e){const{sources:t,className:n,alt:r,...a}=e;return(0,s.jsx)(u,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,s.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},4639:(e,t,n)=>{"use strict";n.d(t,{u:()=>u,z:()=>y});var r=n(7294),a=n(6136),o=n(1270),i=n(8986),l=n(5893);const s="ease-in-out";function u(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function f(e,t){const n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??s}`,height:`${t}px`}}function l(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return f(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function h(e){if(!a.Z.canUseDOM)return e?c:d}function g(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:s,disableSSRStyle:u}=e;const c=(0,r.useRef)(null);return p({collapsibleRef:c,collapsed:n,animation:o}),(0,l.jsx)(t,{ref:c,style:u?void 0:h(n),onTransitionEnd:e=>{"height"===e.propertyName&&(f(c.current,n),i?.(n))},className:s,children:a})}function m(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[s,u]=(0,r.useState)(t);return(0,o.Z)((()=>{t||i(!0)}),[t]),(0,o.Z)((()=>{a&&u(t)}),[a,t]),a?(0,l.jsx)(g,{...n,collapsed:s}):null}function y(e){let{lazy:t,...n}=e;const r=t?m:g;return(0,l.jsx)(r,{...n})}},5830:(e,t,n)=>{"use strict";n.d(t,{nT:()=>g,pl:()=>h});var r=n(7294),a=n(1048),o=n(2560),i=n(3768),l=n(107),s=n(5893);const u=(0,o.WA)("docusaurus.announcement.dismiss"),c=(0,o.WA)("docusaurus.announcement.id"),d=()=>"true"===u.get(),f=e=>u.set(String(e)),p=r.createContext(null);function h(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const i=(0,r.useCallback)((()=>{f(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&f(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,s.jsx)(p.Provider,{value:n,children:t})}function g(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},9200:(e,t,n)=>{"use strict";n.d(t,{I:()=>y,S:()=>m});var r=n(7294),a=n(6136),o=n(3768),i=n(2560),l=n(107),s=n(5893);const u=r.createContext(void 0),c="theme",d=(0,i.WA)(c),f={light:"light",dark:"dark"},p=e=>e===f.dark?f.dark:f.light,h=e=>a.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),g=e=>{d.set(p(e))};function m(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[a,o]=(0,r.useState)(h(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&g(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f.dark:f.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===f.dark},setLightTheme(){i(f.light)},setDarkTheme(){i(f.dark)}})),[a,i])}();return(0,s.jsx)(u.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(u);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},6409:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>y,Oh:()=>w});var r=n(7294),a=n(9871),o=n(6875),i=n(107),l=n(3734),s=n(3768),u=n(2560),c=n(5893);const d=e=>`docs-preferred-version-${e}`,f={save:(e,t,n)=>{(0,u.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(d(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const h=r.createContext(null);function g(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=f.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){f.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=g();return(0,c.jsx)(h.Provider,{value:n,children:t})}function y(e){let{children:t}=e;return l.cE?(0,c.jsx)(m,{children:t}):(0,c.jsx)(c.Fragment,{children:t})}function b(){const e=(0,r.useContext)(h);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function w(){const e=(0,a._r)(),[t]=b();function n(n){const r=e[n],{preferredVersionName:a}=t[n];return r.versions.find((e=>e.name===a))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4432:(e,t,n)=>{"use strict";n.d(t,{V:()=>u,b:()=>s});var r=n(7294),a=n(3768),o=n(5893);const i=Symbol("EmptyContext"),l=r.createContext(i);function s(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(l.Provider,{value:i,children:t})}function u(){const e=(0,r.useContext)(l);if(e===i)throw new a.i6("DocsSidebarProvider");return e}},8801:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,q:()=>l});var r=n(7294),a=n(3768),o=n(5893);const i=r.createContext(null);function l(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(null===e)throw new a.i6("DocsVersionProvider");return e}},735:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(7294),a=n(3086),o=n(3488),i=n(5238),l=n(107),s=n(3768),u=n(5893);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function f(e){let{children:t}=e;const n=d();return(0,u.jsx)(c.Provider,{value:n,children:t})}function p(){const e=r.useContext(c);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3086:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>u,n2:()=>l});var r=n(7294),a=n(3768),o=n(5893);const i=r.createContext(null);function l(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function u(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=o,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},8181:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},5358:(e,t,n)=>{"use strict";n.d(t,{K:()=>l,M:()=>s});var r=n(7294),a=n(9962),o=n(5238);const i="q";function l(){return(0,o.Nc)(i)}function s(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,a.Z)(),{algolia:{searchPagePath:n}}=t;return(0,r.useCallback)((t=>`${e}${n}?${i}=${encodeURIComponent(t)}`),[e,n])}},3488:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),a=n(6136);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},3702:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},8986:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},3734:(e,t,n)=>{"use strict";n.d(t,{MN:()=>T,LM:()=>h,_F:()=>b,cE:()=>f,jA:()=>g,xz:()=>p,SN:()=>_,lO:()=>S,vY:()=>C,oz:()=>E,s1:()=>x,f:()=>w});var r=n(7294),a=n(6550),o=n(8790),i=n(9871),l=n(6409),s=n(8801),u=n(4432);function c(e){return Array.from(new Set(e))}var d=n(9003);const f=!!i._r;function p(e){const t=(0,s.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function h(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=h(t);if(e)return e}}(e):void 0:e.href}function g(){const{pathname:e}=(0,a.TH)(),t=(0,u.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=k({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const m=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),y=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||y(e.items,t))}function v(e,t){switch(e.type){case"category":return b(e,t)||e.items.some((e=>v(e,t)));case"link":return!e.unlisted||b(e,t);default:return!1}}function w(e,t){return(0,r.useMemo)((()=>e.filter((e=>v(e,t)))),[e,t])}function k(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function x(){const e=(0,u.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?k({sidebarItems:e.items,pathname:t}):null}function S(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>c([t,n,a].filter(Boolean))),[t,n,a])}function E(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function C(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${c(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function _(e){let{route:t}=e;const n=(0,a.TH)(),r=(0,s.E)(),i=t.routes,l=i.find((e=>(0,a.LX)(n.pathname,e)));if(!l)return null;const u=l.sidebar,c=u?r.docsSidebars[u]:void 0;return{docElement:(0,o.H)(i),sidebarName:u,sidebarItems:c}}function T(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!h(e)))}},2733:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(9962);function a(e){const{siteConfig:t}=(0,r.Z)(),{title:n,titleDelimiter:a}=t;return e?.trim().length?`${e.trim()} ${a} ${n}`:n}},5238:(e,t,n)=>{"use strict";n.d(t,{Nc:()=>s,Rb:()=>i});var r=n(7294),a=n(6550),o=n(3768);function i(e){!function(e){const t=(0,a.k6)(),n=(0,o.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function l(e){return function(e){const t=(0,a.k6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}function s(e){const t=l(e)??"",n=function(){const e=(0,a.k6)();return(0,r.useCallback)(((t,n,r)=>{const a=new URLSearchParams(e.location.search);n?a.set(t,n):a.delete(t),(r?.push?e.push:e.replace)({search:a.toString()})}),[e])}();return[t,(0,r.useCallback)(((t,r)=>{n(e,t,r)}),[n,e])]}},9488:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>d,VC:()=>h});var r=n(7294),a=n(6010),o=n(1514),i=n(9656);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(9524),u=n(2733),c=n(5893);function d(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const l=(0,u.p)(t),{withBaseUrl:d}=(0,s.C)(),f=a?d(a,{absolute:!0}):void 0;return(0,c.jsxs)(o.Z,{children:[t&&(0,c.jsx)("title",{children:l}),t&&(0,c.jsx)("meta",{property:"og:title",content:l}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),f&&(0,c.jsx)("meta",{property:"og:image",content:f}),f&&(0,c.jsx)("meta",{name:"twitter:image",content:f}),i]})}const f=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(f),l=(0,a.Z)(i,t);return(0,c.jsxs)(f.Provider,{value:l,children:[(0,c.jsx)(o.Z,{children:(0,c.jsx)("html",{className:l})}),n]})}function h(e){let{children:t}=e;const n=l(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(p,{className:(0,a.Z)(r,o),children:t})}},3768:(e,t,n)=>{"use strict";n.d(t,{D9:()=>l,Qc:()=>c,Ql:()=>u,i6:()=>s,zX:()=>i});var r=n(7294),a=n(1270),o=n(5893);function i(e){const t=(0,r.useRef)(e);return(0,a.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function l(e){const t=(0,r.useRef)();return(0,a.Z)((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function u(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},1500:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:()=>r})},9003:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(997),o=n(9962);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2957:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>u,RF:()=>f});var r=n(7294),a=n(6136),o=n(1048),i=(n(1270),n(3768)),l=n(5893);const s=r.createContext(void 0);function u(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(s.Provider,{value:n,children:t})}function c(){const e=(0,r.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const d=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(d()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},246:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(9871),a=n(9962),o=n(6409);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,a.Z)(),t=(0,r._r)(),n=(0,r.WS)(),s=(0,o.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,a=s[e],o=t[e].versions.find((e=>e.isLast));return l(e,(r??a??o).name)}))];return{locale:e.currentLocale,tags:u}}},2560:(e,t,n)=>{"use strict";n.d(t,{WA:()=>s});n(7294);const r="localStorage";function a(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function o(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=o(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),a({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},626:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(9962),a=n(6550),o=n(3905);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,a.TH)(),u=(0,o.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},3266:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(3768);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},107:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(9962);function a(){return(0,r.Z)().siteConfig.themeConfig}},7263:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(9962);function a(){const{siteConfig:{themeConfig:e}}=(0,r.Z)();return e}},2327:(e,t,n)=>{"use strict";n.d(t,{l:()=>l});var r=n(7294),a=n(1500),o=n(9524),i=n(7263);function l(){const{withBaseUrl:e}=(0,o.C)(),{algolia:{externalUrlRegex:t,replaceSearchResultPathname:n}}=(0,i.L)();return(0,r.useCallback)((r=>{const o=new URL(r);if((0,a.F)(t,o.href))return r;const i=`${o.pathname+o.hash}`;return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(i,n))}),[e,t,n])}},4136:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},5806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},3905:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(4136);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(5806);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},5659:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7294);var r=n(3699),a=n(9524),o=n(9962),i=n(107),l=n(4277),s=n(5893);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.Z)(t.src),dark:(0,a.Z)(t.srcDark||t.src)},i=(0,s.jsx)(l.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,s.jsx)("div",{className:r,children:i}):i}function c(e){const{siteConfig:{title:t}}=(0,o.Z)(),{navbar:{title:n,logo:l}}=(0,i.L)(),{imageClassName:c,titleClassName:d,...f}=e,p=(0,a.Z)(l?.href||"/"),h=n?"":t,g=l?.alt??h;return(0,s.jsxs)(r.Z,{to:p,...f,...l?.target&&{target:l.target},children:[l&&(0,s.jsx)(u,{logo:l,alt:g,imageClassName:c}),null!=n&&(0,s.jsx)("span",{className:d,children:n})]})}},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>w,q_:()=>_,ob:()=>p,PP:()=>A,Ep:()=>f});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var h=i.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function h(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var a=p(n);a&&a!==h&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),m=0;m{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},984:(e,t,n)=>{"use strict";n.r(t)},6930:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},4779:(e,t,n)=>{var r=n(5826);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var h=e[i],g=n[2],m=n[3],y=n[4],b=n[5],v=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=g&&null!=h&&h!==g,x="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||c,C=y||b;r.push({name:m||o++,prefix:g||"",delimiter:E,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:C?u(C):w?".*":"[^"+s(E)+"]+?"})}}return i{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),h=f.indexOf(p);if(h>-1){++a;var g=f.substring(0,h),m=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(h+p.length),b=[];g&&b.push.apply(b,i([g])),b.push(m),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(Prism)},366:()=>{Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},9347:(e,t,n)=>{var r={"./prism-python":366};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=9347},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(3840);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n