Aerial3D ModelDrone photos, 360 photos and 360 video to orthophoto, elevation models, point cloud and 3D mesh, processed on your own PC
Hover the model for coordinates.
Drag to orbit · right-drag to pan · scroll to zoom · double-click to centre
No 3D model yetThe cameras and points appear here as soon as the photos are aligned.
Read the photo folders to see the photos.

Quality report

The report fills in as the model is built: how many photos were aligned, how accurately, how well the model fits the GPS and the LiDAR, and the detail of each output.

No job running.

How it works

This page is the front end. The heavy work runs on your own PC in the Aerial3D Engine, a small local program that drives two proven open-source photogrammetry engines. Your photos never leave your computer: the page only talks to the engine at 127.0.0.1.

1 · ReadGPS, height, gimbal angles and camera from each photo, and the GPS track of each video. 360 photos and video are split into ordinary views; phone photos are set aside.
2 · MatchPairs are chosen from capture order, nearby positions and overlapping ground footprints, so only useful pairs are compared.
3 · AlignCOLMAP solves every camera position and the lens calibration, held to the GPS. Photos and video without GPS are placed by matching.
4 · Dense + meshOpenMVS builds the dense point cloud and the surface mesh; COLMAP paints the photo texture onto it.
5 · Map productsThe engine fits the model to site LiDAR (optional) and writes the orthophoto, DSM, DTM, LAZ and GLB/OBJ.

Photos from several folders

Add as many folders as the photos are kept in, for example the drone flight in one folder and the 360 photos or phone photos in another: they are read as one set and built into one model. Tick Include subfolders on a folder to read every folder inside it as well. A photo that sits in two of the folders is used once, and Insta360 originals (.insp) in a subfolder are always read.

Adding photos to a finished model

Under Results, Add photos… adds new photos, 360s or video to a finished model without starting over. The model's photos keep their places: their features, matches and positions are reused, so only the new photos are matched and placed. The point cloud, mesh, texture and map files are then built again from all of them, which is most of the time a model takes. The result is a new model next to the old one, built with the old one's settings. It needs the old model's job folder on the same PC (it is under Aerial3D\Jobs); a model copied from another PC with Copy to… only has its result files. If the new photos show nothing the model already shows, they cannot be placed and the job stops with a message; the old model is not changed. Models made with every earlier revision can take new photos.

For a site with drone photos and ground 360s, building the drone model first and then adding the 360s to it placed the 360s more accurately at Hamilton Park than building everything at once.

What you get

FileFormatUse it for
OrthophotoGeoTIFF + JPG/JGWA true top-down photo (roofs and carports do not lean). Opens in QGIS, Civil 3D, Global Mapper, ArcGIS.
Surface model (DSM)GeoTIFF float32Top of everything: roofs, trees, carports. Heights and shade studies.
Ground model (DTM)GeoTIFF float32Bare ground with buildings and trees removed. Grading, slopes, trenching.
Point cloudLAZ (LAS 1.2, RGB)Survey-style measurements, comparing with LiDAR, Civil 3D and ReCap.
3D meshGLB and OBJThe site 3D viewers, Blender, SketchUp, presentations. Metres, relative to the origin in origin.json.
Camera positionsCSV, GeoJSON, GPXWhere every photo and video frame was found, next to its GPS if it had one; a GPX track per video. Useful for photos and video that had no GPS.
ReportJSONAlignment error, GPS and LiDAR fit, settings and timings.

All map files use the UTM zone of the photos (Southern California: EPSG:32611, WGS 84 / UTM 11N, metres). With "Fit to site LiDAR", elevations follow the LiDAR (NAVD88 for USGS 3DEP data).

Better models from the Mini 5 Pro

  • Plan the flight with Kewo's Aerial3D Waypoints (open it) and load the KMZ into DJI Fly's Waypoint Flight.
  • Overlap: 75% forward and 70% side for the straight-down grid. Every spot should be in at least 5 photos.
  • Add angled photos: a second grid at -45° to -60°, or two orbits around each building or equipment yard. These are what give walls, columns and carport undersides.
  • Camera: 12 MP mode, shutter 1/1000 s or faster, fixed white balance, no digital zoom, JPEG. Avoid low sun with long shadows and moving shade.
  • Height: 40–60 m above ground for the grid gives about 1.2–1.8 cm per pixel. Lower flights give more detail but need many more photos.
  • Accuracy: drone GPS alone is good to about 1–3 m across and worse in height. Fitting to site LiDAR (or adding ground control points) brings it to a few centimetres relative to the survey.
  • Leave out the drone's own 360° panoramas and takeoff/landing shots (the tool sets them aside for you). Phone photos can add wall detail but are off by default.

Ground-level 360 photos and 360 video

360 photos and 360 video (for example from an Insta360 X6) join the drone photos in the same model, or make a model on their own. The engine splits each 360 photo, and each frame it takes from a video, into 8 ordinary 90° views around the horizon (plus 4 looking up when there are up to 150 of them) and aligns them as one camera rig with fixed directions. An Insta360 original (.insp) gives 6 horizon views and 2 looking up, each cut from one lens; the small turn between its two lenses is measured during the alignment. They add walls, columns, equipment sides and carport undersides; they do not see roofs. Where the drone photos see the ground and other surfaces facing up, the mesh takes its texture from them, so the ground keeps one look; the 360s texture walls and sides, and the ground the drone photos cannot see, such as under trees.

  • Photos: use the Insta360 originals (.insp) as they come off the camera, in the photo folder or in a subfolder of it (for example INSTA360). The engine cuts the views straight from the two lens images with the lens calibration stored in each file, so nothing is lost to stitching or JPG export and there are no stitching seams. When a 360 JPG exported from the same photo is there too, the original is used and the JPG is set aside. 360 JPGs (exported from Insta360 Studio, or saved by the camera with In-camera stitching) work too.
  • Video: use the Insta360 video originals (.insv) as they come off the camera (Aerial3D Engine 1.5.0 or later), in the photo folder or a subfolder of it. Like the photos, each frame's views are cut straight from the two lens images with the lens calibration stored in the file, and the camera's tilt is read from its motion sensor. Recordings split into two files (_00_ and _10_, one per lens) are read together; keep both in the same folder. The low-resolution .lrv previews are not needed. MP4s exported from Insta360 Studio work too. The engine keeps the sharpest frame of every second (Settings, Advanced: Video frames per second) and skips stretches where the camera stood still. Walk slowly and steadily, about 1 m per second, in a loop around each building, and finish where you started. Avoid pointing the camera at the sun.
  • GPS for video: an .insv original carries GPS when the camera was connected to the Insta360 app (the phone's GPS) or to a GPS remote while recording; the engine reads it from the file. Otherwise, or for an exported MP4, put a GPX track next to the video, either the one Insta360 Studio exports or one from any phone or GPS logger. It is matched by the same file name, or by time. Phone GPS heights can be several metres off; the model is levelled with the 360 camera.
  • No GPS: photos and video without GPS are placed by matching what they see to the photos that have GPS, so include drone photos of the same area. With no GPS at all, the model is built from matching alone, levelled with the 360 camera and sized from the camera height (Advanced: 360 camera height; 2 m is assumed), but it is not on the map and there is no orthophoto.
  • The person holding the camera: in 360 video the engine finds what moves along with the camera (the person, a helmet or a vehicle mount) and leaves it out of matching, the dense cloud and the texture. Single 360 photos cannot be checked that way: use the camera's timer or the phone app and step out of view, or hold the camera high on a pole. Everything more than 30° below the horizon is left out (Advanced: Lowest 360 view), and Insta360's exports already hide the selfie stick.
  • Where they ended up: the results include a camera positions file (CSV and GeoJSON) and a GPX track per video, worked out from the photos, so you can see where each frame was taken even without GPS.

Set up on another PC

  1. Download Aerial3D_Setup.zip and unzip it anywhere.
  2. Double-click Install Aerial3D.bat. It checks for Python 3.10+ (and installs it for the current user if needed), installs the Python packages (numpy, scipy, pillow, laspy, lazrs, pyproj, and av for reading video), and downloads COLMAP and OpenMVS from their official GitHub releases. With an NVIDIA card it picks the faster CUDA versions.
  3. Everything goes into %LOCALAPPDATA%\Aerial3D; jobs are written to %USERPROFILE%\Aerial3D\Jobs. No administrator rights, no system changes.
  4. Start Aerial3D Engine from the desktop shortcut. It opens this page. Leave its window open while you work; closing it stops processing.
  5. Using the page on kewocorp.com: if Chrome asks whether the site may access other apps and devices on your network, choose Allow.

To uninstall, delete %LOCALAPPDATA%\Aerial3D, the desktop shortcut and, if you like, the Jobs folder.

What the PC needs. Windows 10 or 11, 64-bit. 16 GB of memory for up to about 300 photos (32 GB for more). About 3 GB of free disk per 100 photos while processing. An NVIDIA graphics card speeds up feature matching several times; without one everything runs on the processor.

Troubleshooting

"Engine not found"Start the Aerial3D Engine shortcut. If it is running, allow the page's local-network request in Chrome (the icon at the left of the address bar).
Only part of the site alignedThe photos do not overlap enough between flight lines. Fly the grid with more side overlap, or add an angled cross-grid.
Out of memoryClose other programs, use Quick preview, set "Dense cloud detail" to Quarter, or split the site into two jobs.
Model sits a few metres off the imageryThat is normal for drone GPS. Use "Fit to site LiDAR". Esri imagery itself can also be off by a metre or two.
360 photos or video not placedThey need to see the same things as the other photos. Walk closer to the drone photos' area, add low angled drone photos of the same walls, or take 360 photos closer together (every 1–2 m). Photos that match too little are left out rather than put in the wrong place; the quality report lists them.
Holes over water, glass and shiny roofsPhotogrammetry cannot see these surfaces well. Angled photos help with glass; nothing fixes calm water.

About

Kewo Engineering Aerial3D Model, Rev5 261022. Alignment and texture by COLMAP (BSD licence); dense cloud and mesh by OpenMVS (AGPL licence), both run unmodified as separate programs. Video is read with PyAV and FFmpeg (BSD and LGPL licences). Base map: Esri World Imagery.