{"id":738,"date":"2026-04-20T10:03:06","date_gmt":"2026-04-20T09:03:06","guid":{"rendered":"https:\/\/southwest-environmental.co.uk\/blog\/?p=738"},"modified":"2026-04-20T10:10:40","modified_gmt":"2026-04-20T09:10:40","slug":"photogrammetry-work-flow-linux-step-by-step","status":"publish","type":"post","link":"https:\/\/southwest-environmental.co.uk\/blog\/2026\/04\/20\/photogrammetry-work-flow-linux-step-by-step\/","title":{"rendered":"Photogrammetry Work Flow &#8211; Linux: Step by Step"},"content":{"rendered":"<h2>Drone Surveys in the Environmental Consultancy Sector<\/h2>\n<p>In the commercial sector, consultancies rely heavily on accurate topographical models and 3D visualizations to conduct <a href=\"https:\/\/www.southwest-environmental.co.uk\/further%20info\/environmental_impact_assessment\/visual_landsacpe_impact_assessment.html\">Landscape and Visual Impact Assessments<\/a> (LVIA)\u2014such as modeling the visual footprint of proposed wind turbines\u2014or to establish accurate site baselines for Preliminary <a href=\"https:\/\/www.southwest-environmental.co.uk\/Ecology_Consultants.html\">Ecological Assessments<\/a>.<\/p>\n<p>The processing was conducted entirely on open-source Linux software. The hardware utilized was a Lubuntu workstation equipped with an Intel Core i9, an NVMe SSD, and 16GB of RAM. While the processor and storage speeds were more than adequate, the 16GB memory capacity required some careful resource management during the heavier processing phases.<\/p>\n<div id=\"attachment_743\" style=\"width: 938px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-743\" class=\"wp-image-743 size-full\" src=\"https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/drone-image-quality.jpg\" alt=\"\" width=\"928\" height=\"665\" srcset=\"https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/drone-image-quality.jpg 928w, https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/drone-image-quality-300x215.jpg 300w, https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/drone-image-quality-768x550.jpg 768w, https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/drone-image-quality-624x447.jpg 624w\" sizes=\"auto, (max-width: 928px) 100vw, 928px\" \/><p id=\"caption-attachment-743\" class=\"wp-caption-text\">44 images like this one used to create mesh (the fallen tree is a good reference point)<\/p><\/div>\n<h3>Phase 1: Flight Planning and Data Acquisition<\/h3>\n<p>A 2D flight grid was plotted using a web-based mission planner (<a href=\"https:\/\/www.dronegrid.web.id\/\">Drone Grid)<\/a>, and the resulting CSV was imported into Litchi to run on the drone controller.<\/p>\n<p>Rather than relying on automated distance-based photo triggers\u2014which can occasionally misfire or skip photos during curved maneuvers\u2014a manual interval approach was utilized (<a href=\"https:\/\/flylitchi.com\/\">Litchi<\/a>). The drone was placed in a hover, the camera was set to a 2-second interval, and the shutter was manually engaged before initiating the mission. This ensured a continuous, reliable stream of overlapping images as the drone navigated the grid.<\/p>\n<h3>Phase 2: Dataset Culling and Format Conversion<\/h3>\n<p>Once the flight was completed, a quality control check was performed on the dataset. Any extraneous photos captured during takeoff, landing, or non-nadir (not pointing straight down) turns were removed, as these irregular angles can confuse the photogrammetry software and corrupt the final geometry.<\/p>\n<p>Initially, the drone was set to capture RAW (.DNG) files. While RAW formats are excellent for standard photography, they lack the automated lens-flattening corrections applied to DJI\u2019s JPEGs. Furthermore, uncompressed RAW files are heavily taxing on system memory during 3D processing.<\/p>\n<p>To rectify this, the DNGs were imported into <a href=\"https:\/\/www.darktable.org\/\">darktable<\/a> on Linux. A batch lens correction profile was applied to eliminate the fish-eye distortion, and the dataset was exported as high-quality JPEGs. (Note: moving forward, capturing JPEGs natively on the drone is highly recommended to bypass this conversion step entirely).<\/p>\n<h3>Phase 3: Processing in WebODM<\/h3>\n<p>WebODM (OpenDroneMap), deployed via Docker, was used for the photogrammetry processing.<\/p>\n<p>The 3D texturing phase of photogrammetry is notoriously memory-intensive, and the 16GB of system RAM was quickly identified as a bottleneck. To prevent Docker from running out of memory and crashing the process, the Resize Images parameter within WebODM\u2019s settings was capped at 2048. This significantly reduced the memory footprint during the dense point cloud and meshing phases, allowing the i9 processor to complete the job smoothly while leveraging the fast swap\/read speeds of the NVMe drive.<\/p>\n<div id=\"attachment_744\" style=\"width: 718px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-744\" class=\"wp-image-744 size-full\" src=\"https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/satallite-vs-drone-ortho.jpg\" alt=\"\" width=\"708\" height=\"549\" srcset=\"https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/satallite-vs-drone-ortho.jpg 708w, https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/satallite-vs-drone-ortho-300x233.jpg 300w, https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/satallite-vs-drone-ortho-624x484.jpg 624w\" sizes=\"auto, (max-width: 708px) 100vw, 708px\" \/><p id=\"caption-attachment-744\" class=\"wp-caption-text\">Top Google Satellite Image \/ Bottom Ortho Mesh Photo Output from WebOMD<\/p><\/div>\n<h3>Phase 4: Output Visualization<\/h3>\n<p>Once the processing concluded, the 2D orthomosaic was reviewed directly within the WebODM web interface. The software successfully stitched the dataset into a crisp, seamless top-down map, providing an excellent baseline of the site.<\/p>\n<div id=\"attachment_739\" style=\"width: 886px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-739\" class=\"wp-image-739 size-full\" src=\"https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/digital-surface-model-drone-survey.jpg\" alt=\"\" width=\"876\" height=\"664\" srcset=\"https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/digital-surface-model-drone-survey.jpg 876w, https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/digital-surface-model-drone-survey-300x227.jpg 300w, https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/digital-surface-model-drone-survey-768x582.jpg 768w, https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/digital-surface-model-drone-survey-624x473.jpg 624w\" sizes=\"auto, (max-width: 876px) 100vw, 876px\" \/><p id=\"caption-attachment-739\" class=\"wp-caption-text\">DSM From Drone Data<\/p><\/div>\n<p>Viewing the 3D output required a slight workaround. Rendering a massive, fully-textured 3D mesh directly in the browser via WebGL can sometimes cause instability depending on Linux graphics drivers. Instead, the .obj file and its associated texture map were downloaded and opened natively in Blender.<\/p>\n<p>Because 3D software often disagrees on coordinate systems, the mesh imported on its side. This was quickly corrected by rotating the model 90 degrees on the X-axis. Once the material preview was enabled, the high-resolution texture map was projected onto the geometry, yielding a mathematically accurate, true-to-life 3D representation of the area.<\/p>\n<div id=\"attachment_740\" style=\"width: 897px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-740\" class=\"wp-image-740 size-full\" src=\"https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/3d-cloud-drone-survey.jpg\" alt=\"\" width=\"887\" height=\"700\" srcset=\"https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/3d-cloud-drone-survey.jpg 887w, https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/3d-cloud-drone-survey-300x237.jpg 300w, https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/3d-cloud-drone-survey-768x606.jpg 768w, https:\/\/southwest-environmental.co.uk\/blog\/wp-content\/uploads\/2026\/04\/3d-cloud-drone-survey-624x492.jpg 624w\" sizes=\"auto, (max-width: 887px) 100vw, 887px\" \/><p id=\"caption-attachment-740\" class=\"wp-caption-text\">3D Mesh Image (Note the white shape to the top right is root ball of fallen tree)<\/p><\/div>\n<h3>Conclusion<\/h3>\n<p>By effectively managing hardware limits and ensuring the dataset is properly formatted, commercial-tier photogrammetry can be reliably executed on a standard Linux workstation. The resulting 2D and 3D outputs now serve as a foundational geospatial baseline.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Drone Surveys in the Environmental Consultancy Sector In the commercial sector, consultancies rely heavily on accurate topographical models and 3D visualizations to conduct Landscape and Visual Impact Assessments (LVIA)\u2014such as modeling the visual footprint of proposed wind turbines\u2014or to establish accurate site baselines for Preliminary Ecological Assessments. The processing was conducted entirely on open-source Linux [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,122,69,130],"tags":[],"class_list":["post-738","post","type-post","status-publish","format-standard","hentry","category-agriculture","category-bng-assessment","category-carbon","category-drone-survey"],"_links":{"self":[{"href":"https:\/\/southwest-environmental.co.uk\/blog\/wp-json\/wp\/v2\/posts\/738","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/southwest-environmental.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/southwest-environmental.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/southwest-environmental.co.uk\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/southwest-environmental.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=738"}],"version-history":[{"count":3,"href":"https:\/\/southwest-environmental.co.uk\/blog\/wp-json\/wp\/v2\/posts\/738\/revisions"}],"predecessor-version":[{"id":747,"href":"https:\/\/southwest-environmental.co.uk\/blog\/wp-json\/wp\/v2\/posts\/738\/revisions\/747"}],"wp:attachment":[{"href":"https:\/\/southwest-environmental.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=738"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/southwest-environmental.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=738"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/southwest-environmental.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=738"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}