<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[3DGS pipleline guide]]></title><description><![CDATA[3DGS pipleline guide]]></description><link>https://kotohibi.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1593680282896/kNC7E8IR4.png</url><title>3DGS pipleline guide</title><link>https://kotohibi.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 15:11:14 GMT</lastBuildDate><atom:link href="https://kotohibi.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Easy&Fast 3D Gaussian Splatting workflow with COLMAP and 360 Camera]]></title><description><![CDATA[Overview
This workflow demonstrates an example of performing robust and relatively fast camera alignment (SfM) using omnidirectional images: Equirectangular (equidistant cylindrical projection) images]]></description><link>https://kotohibi.hashnode.dev/easy-fast-3d-gaussian-splatting-workflow-with-colmap-and-360-camera</link><guid isPermaLink="true">https://kotohibi.hashnode.dev/easy-fast-3d-gaussian-splatting-workflow-with-colmap-and-360-camera</guid><category><![CDATA[colmap]]></category><category><![CDATA[3DGS]]></category><category><![CDATA[metashape]]></category><category><![CDATA[gaussian splatting]]></category><category><![CDATA[LFS]]></category><dc:creator><![CDATA[kotohibi]]></dc:creator><pubDate>Sat, 19 Sep 2026 06:35:26 GMT</pubDate><content:encoded><![CDATA[<h1>Overview</h1>
<p>This workflow demonstrates an example of performing robust and relatively fast camera alignment (SfM) using omnidirectional images: Equirectangular (equidistant cylindrical projection) images, followed by training 3D Gaussian Splatting (3DGS).<br />This workflow is a rewritten version of <a href="https://kotohibi.hashnode.dev/easy-fast-3d-gaussian-splatting-workflow-with-360-camera-and-metashape">Easy&amp;Fast 3D Gaussian Splatting workflow with 360 Camera and Metashape</a> that replaces Metashape-based camera alignment (SfM) with COLMAP. Please read it as well.</p>
<h1>References</h1>
<p>Note: The examples below were created using Metashape, but similar results can be achieved with COLMAP.</p>
<h3>DJI AVATA360 examples</h3>
<ul>
<li><p><a href="https://x.com/kotohibi%5C_3d/status/2079907663895482456">https://x.com/kotohibi\_3d/status/2079907663895482456</a></p>
</li>
<li><p><a href="https://x.com/kotohibi%5C_3d/status/2040724840504758578">https://x.com/kotohibi\_3d/status/2040724840504758578</a></p>
</li>
<li><p><a href="https://x.com/naribubu/status/2038881884558791088">https://x.com/naribubu/status/2038881884558791088</a></p>
</li>
<li><p><a href="https://x.com/naribubu/status/2038875398717722743">https://x.com/naribubu/status/2038875398717722743</a></p>
</li>
</ul>
<h3>DJI OSMO360 examples</h3>
<ul>
<li><p><a href="https://x.com/kotohibi%5C_3d/status/2088521899160879450">https://x.com/kotohibi\_3d/status/2088521899160879450</a></p>
</li>
<li><p><a href="https://x.com/kotohibi%5C_3d/status/2082426800215654725">https://x.com/kotohibi\_3d/status/2082426800215654725</a></p>
</li>
<li><p><a href="https://x.com/kotohibi%5C_3d/status/2074821581948481758">https://x.com/kotohibi\_3d/status/2074821581948481758</a></p>
</li>
<li><p><a href="https://x.com/kotohibi%5C_3d/status/2038179454367957106">https://x.com/kotohibi\_3d/status/2038179454367957106</a></p>
</li>
</ul>
<h1>Requirements</h1>
<ul>
<li><p>360° Camera</p>
<ul>
<li><p>DJI OSMO360</p>
</li>
<li><p>DJI AVATA360</p>
</li>
<li><p>Insta360</p>
</li>
</ul>
</li>
<li><p>High-end PC and NVIDIA GPU</p>
<ul>
<li>Training 3DGS requires a high-performance GPU. In particular, more VRAM is better. I recommend a GPU with at least 12 GB of VRAM.</li>
</ul>
</li>
<li><p>COLMAP</p>
<ul>
<li><p>Open-source software for camera alignment (SfM).</p>
<ul>
<li><a href="https://colmap.github.io/">https://colmap.github.io/</a></li>
</ul>
</li>
<li><p>It can directly perform SfM on omnidirectional images and is relatively robust and fast.</p>
</li>
<li><p>This workflow uses the latest version V4.2.0 at the time of writing. You can download it from:</p>
<ul>
<li><p><a href="https://github.com/colmap/colmap/tags">https://github.com/colmap/colmap/tags</a></p>
</li>
<li><p>I recommend the binary (CUDA) edition <strong>colmap-x64-windows-cuda.zip</strong>.</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>3D Gaussian Splatting software</p>
<ul>
<li><p>LichtFeld Studio (LFS): <a href="https://lichtfeld.io/">https://lichtfeld.io/</a></p>
</li>
<li><p>Postshot: <a href="https://www.jawset.com/">https://www.jawset.com/</a></p>
</li>
<li><p>Brush: <a href="https://github.com/ArthurBrussee/brush">https://github.com/ArthurBrussee/brush</a></p>
</li>
</ul>
</li>
<li><p>Still-image extraction tool from video</p>
<ul>
<li><p>Extract Sharpest Frame (free edition)</p>
<ul>
<li><a href="https://github.com/Kotohibi/Extract%5C_sharpest%5C_frame">https://github.com/Kotohibi/Extract\_sharpest\_frame</a></li>
</ul>
</li>
<li><p>360 Extractor (paid edition)</p>
<ul>
<li><a href="https://kotohibi.f5.si/360/extractor.html">https://kotohibi.f5.si/360/extractor.html</a></li>
</ul>
</li>
</ul>
</li>
<li><p>Cubemap conversion tool for COLMAP 360 SfM results</p>
<ul>
<li><p>360 CCConverter (paid edition)</p>
<ul>
<li><a href="https://kotohibi.f5.si/360/ccconverter.html">https://kotohibi.f5.si/360/ccconverter.html</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<h1>Video Shooting (e.g. OSMO360)</h1>
<p>Attach the camera to a selfie stick and slowly walk through the area you want to capture. Recommended video settings: D-Log M, 30 fps or higher.</p>
<h1>Develop the Video</h1>
<h3>Import the captured data into DJI Studio and perform color grading (color restoration).</h3>
<ul>
<li><p>Apply the settings inside the red frame in the image below.</p>
<img src="https://static.zenn.studio/user-upload/73e15e4400df-20260919.jpg" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>(Advanced settings) When using the seam mask implemented in Extract Sharpest Frame V1.0.0 or later, turn RockSteady off. RockSteady provides electronic image stabilization and horizon leveling, but it changes the stitch line. Turn off the equivalent feature for Insta360 cameras as well.</p>
<ul>
<li><p>(Note) The seam mask masks misalignments along the stitch line between the front and rear fisheye cameras, allowing that area to be excluded from the camera alignment and 3DGS training described below.</p>
<img src="https://static.zenn.studio/user-upload/256666a37f9e-20260919.jpg" alt="" style="display:block;margin:0 auto" /></li>
</ul>
</li>
</ul>
<h3>Export the video</h3>
<ul>
<li><p>Export as an MP4 omnidirectional video. Example settings are shown in the image below.</p>
<ul>
<li><p>Turn noise reduction on and select quality priority.</p>
</li>
<li><p>Turn 10-Bit Color off.</p>
</li>
</ul>
</li>
<li><p>When developing multiple clips, you can develop them together using "Multiple Clips." Extract Sharpest Frame can batch-process multiple videos.</p>
<img src="https://static.zenn.studio/user-upload/4319b9bb7727-20260919.jpg" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h1>Extract Still Images from Video</h1>
<ul>
<li><p>There are many ways to extract still images from video. Research and choose your preferred method. Here I introduce the tool I have published. <strong>Extract Sharpest Frame</strong> is a tool that extracts the sharpest image at specified frame intervals.</p>
</li>
<li><p><strong>New features are prioritized for updates in the BOOTH edition</strong></p>
<img src="https://static.zenn.studio/user-upload/48077f5baf77-20260919.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<table>
<thead>
<tr>
<th>Main Item</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td>Video file</td>
<td>Select the omnidirectional video. Multiple videos can be selected and processed in a batch.</td>
</tr>
<tr>
<td>Note: File paths containing multibyte characters are not supported.</td>
<td></td>
</tr>
<tr>
<td>Output folder</td>
<td>Specify the folder where still images and masks will be saved. <code>frames</code> and <code>masks</code> folders will be created under this folder. You can also choose whether images extracted from multiple videos should be collected into a single folder.</td>
</tr>
<tr>
<td>Note: File paths containing multibyte characters are not supported.</td>
<td></td>
</tr>
<tr>
<td>Scale width</td>
<td>Image size used when calculating sharpness for all video frames. Larger values give more precise calculations. Note: Extracted images are always output at the original video resolution.</td>
</tr>
<tr>
<td>Chunk size</td>
<td>Interval for extracting still images. For a 30 fps video, setting 30 extracts images every 1 second. Starting with a 1-second interval is recommended.</td>
</tr>
<tr>
<td>Workers</td>
<td>Number of concurrent extraction processes. Increase it according to your CPU core count.</td>
</tr>
<tr>
<td>Start (HH:MM:SS)</td>
<td>Specify the time to start extraction. The format is HH:MM:SS.</td>
</tr>
<tr>
<td>If left blank, processing starts from the beginning of the video.</td>
<td></td>
</tr>
<tr>
<td>End (HH:MM:SS)</td>
<td>Specify the time to end extraction. The format is HH:MM:SS.</td>
</tr>
<tr>
<td>If left blank, processing continues to the end of the video.</td>
<td></td>
</tr>
<tr>
<td>Remove similar frames</td>
<td>Excludes similar frames. If Review is enabled, you can adjust the threshold during execution to control how many images are extracted.</td>
</tr>
<tr>
<td>pHash threshold</td>
<td>Specifies the threshold for judging similar frames. Higher values remove more images. This is useful when movement speed during shooting is irregular.</td>
</tr>
<tr>
<td>Mask Generation</td>
<td>Generates mask images for objects such as people and cars. This improves SfM accuracy in later steps.</td>
</tr>
<tr>
<td>SAM3 Dual Mask</td>
<td>The latest version supports SAM3 masks. You can generate masks using any short sentence, and preview the result with the Preview/Edit button.</td>
</tr>
</tbody></table>
<img src="https://static.zenn.studio/user-upload/7c4c7eba8d1a-20260919.png" alt="" style="display:block;margin:0 auto" />

<p><a href="https://x.com/kotohibi%5C_3d/status/2061044432837972367">https://x.com/kotohibi\_3d/status/2061044432837972367</a><br />(Advanced settings) SAM3 can be configured with two types of masks: one for camera alignment and one for 3DGS training. For details, see the following Google Slides:<br /><a href="https://t.co/X0uRH959RV">https://t.co/X0uRH959RV</a> (The example uses Metashape, but the same concept applies to COLMAP.)</p>
<table style="min-width:50px"><colgroup><col style="min-width:25px"></col><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>YOLO Mask</p></td><td><p>[YOLO Class IDs]<br />Specify the class IDs to detect. 0: person, 1: bicycle, 2: car, etc. Multiple IDs can be specified comma-separated. https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml<br />[YOLO Confidence]<br />Raising the threshold reduces false positives. Lowering it detects more objects but increases false positives.<br />[YOLO Model]<br />Model size and performance increase from yolo11n toward yolo11x, but so does processing load.<br /></p></td></tr></tbody></table>

<img src="https://static.zenn.studio/user-upload/f33edb0b3f70-20260919.png" alt="" style="display:block;margin:0 auto" />

<table style="min-width:50px"><colgroup><col style="min-width:25px"></col><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>Seam Mask</p></td><td><p>Masks misalignments along the stitch line joining the two fisheye images. To keep the stitch line fixed, develop the video with horizon-leveling features in DJI Studio, Insta360 Studio, and similar software turned off before using this feature.</p></td></tr></tbody></table>

<img src="https://static.zenn.studio/user-upload/1bf86078cd28-20260919.png" alt="" style="display:block;margin:0 auto" />

<table style="min-width:50px"><colgroup><col style="min-width:25px"></col><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>Custom Mask</p></td><td><p>Specify a fixed mask image. When used with the masks above, they are merged. This is useful for masking areas that are always visible, such as a camera rig.<br />Note: Specify a PNG image with the same resolution as the video.</p></td></tr></tbody></table>

<img src="https://static.zenn.studio/user-upload/052aed9a546c-20260919.png" alt="" style="display:block;margin:0 auto" />

<table style="min-width:50px"><colgroup><col style="min-width:25px"></col><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>Analysis only</p></td><td><p>Perform only sharpness calculation. Calculation results (metadata) are saved in the output folder. On subsequent runs, if metadata exists in the output folder, the analysis phase is skipped and only image extraction is performed. Useful when adjusting Chunk size.</p></td></tr><tr><td><p>Save config</p></td><td><p>Save the above settings as a configuration file.</p></td></tr><tr><td><p>Load config</p></td><td><p>Load a previously saved configuration file.</p></td></tr><tr><td><p>Run</p></td><td><p>Execute processing</p></td></tr></tbody></table>

<h3>Execution Result</h3>
<ul>
<li><p>Still images are extracted as shown below. If the SfM in the next step fails, try reducing the still-image extraction interval.</p>
<img src="https://static.zenn.studio/user-upload/dd0ef12a7897-20260919.jpg" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Masks are also generated automatically (SAM3 + Seam mask example)</p>
<img src="https://static.zenn.studio/user-upload/bed01dd46911-20260919.jpg" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h1>Perform Camera Alignment (SfM)</h1>
<ul>
<li>Extract colmap-x64-windows-cuda.zip into any folder and run <strong>COLMAP.bat</strong>.</li>
</ul>
<h3>Create a Database and Specify the Image Files</h3>
<ul>
<li><p>After running COLMAP.bat, the GUI starts.</p>
</li>
<li><p>Select [File] -&gt; [New Project], and the following dialog is displayed.</p>
<img src="https://static.zenn.studio/user-upload/4e7d59150f1d-20260919.jpg" alt="" style="display:block;margin:0 auto" />

<table>
<thead>
<tr>
<th>Item</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td>Database</td>
<td>Click the [New] button to create a new database file in an arbitrary location. Intermediate processing data is stored in this file.</td>
</tr>
<tr>
<td>Images</td>
<td>Specify the folder containing the still images extracted from the video.</td>
</tr>
<tr>
<td>Save</td>
<td>Finally, click the [Save] button to close the dialog.</td>
</tr>
</tbody></table>
</li>
</ul>
<h3>Extract Features from the Images</h3>
<ul>
<li><p>Select [Processing]-&gt;[Feature extraction] from the main window, and the following dialog is displayed.</p>
<img src="https://static.zenn.studio/user-upload/c297285ccf05-20260919.jpg" alt="" style="display:block;margin:0 auto" />

<table>
<thead>
<tr>
<th>Item</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td>Camera model</td>
<td>Select EQUIRECTANGULAR.</td>
</tr>
<tr>
<td>Shared for all images</td>
<td>Turn ON.</td>
</tr>
<tr>
<td>mask_path</td>
<td>Specify the created masks for camera alignment.</td>
</tr>
<tr>
<td>use_gpu</td>
<td>Turn ON.</td>
</tr>
<tr>
<td>sift.max_num_features</td>
<td>The default value of 8192 is also fine, but increasing it increases the initial point cloud for 3DGS training and makes training more stable. If you are using a high-spec PC, try increasing it 2–3x (or more).</td>
</tr>
<tr>
<td>Extract</td>
<td>Starts feature extraction.</td>
</tr>
</tbody></table>
</li>
</ul>
<h3>Run Feature Matching</h3>
<ul>
<li><p>Select [Processing]-&gt;[Feature matching] from the main window, and the following dialog is displayed.</p>
<img src="https://static.zenn.studio/user-upload/205deaf7f66f-20260919.jpg" alt="" style="display:block;margin:0 auto" />

<table>
<thead>
<tr>
<th>Item</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td>Type</td>
<td>In this guide, select the most basic SIFT_BRUTEFORCE. COLMAP allows you to choose from various feature matching algorithms. I would like to cover them in another article.</td>
</tr>
<tr>
<td>max_num_matches</td>
<td>The default value of 32768 is also fine, but increasing it increases the initial point cloud for 3DGS training and makes training more stable. If you are using a high-spec PC, try increasing it 2–3x (or more).</td>
</tr>
<tr>
<td>Run</td>
<td>Starts feature matching.</td>
</tr>
</tbody></table>
</li>
</ul>
<h3>Run Camera Alignment</h3>
<ul>
<li><p>Select [Reconstruction]-&gt;[Start reconstruction] from the main window to start camera alignment.</p>
<img src="https://static.zenn.studio/user-upload/ba43b53852a6-20260919.jpg" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h3>Check the Camera Alignment Result</h3>
<ul>
<li><p>When processing completes successfully, you will get a result like the one below. Check that the camera positions (spherical markers) are as expected.</p>
<img src="https://static.zenn.studio/user-upload/86a07ee7879b-20260919.jpg" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h3>Export the Camera Alignment Result</h3>
<ul>
<li><p>Select [File]-&gt;[Export model as text] from the main window to export the camera alignment information as text files.</p>
</li>
<li><p>The following files are output to the output folder.</p>
<img src="https://static.zenn.studio/user-upload/5c78ffd6325d-20260919.jpg" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h1>Convert to Cubemap</h1>
<ul>
<li>Expand the COLMAP camera alignment results into 6-direction Cubemap images.<br />Here I introduce the tool I have published: <strong>360 CCConverter</strong></li>
</ul>
<h3>Settings 1</h3>
<img src="https://static.zenn.studio/user-upload/545e8003d620-20260919.jpg" alt="" style="display:block;margin:0 auto" />

<table>
<thead>
<tr>
<th>Main Item</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td>Equirectangular Images Folder</td>
<td>Specify the folder containing the extracted omnidirectional images.</td>
</tr>
<tr>
<td>Note: File paths containing multibyte characters are not supported.</td>
<td></td>
</tr>
<tr>
<td>COLMAP Model Folder</td>
<td>Specify the camera alignment output folder from COLMAP.</td>
</tr>
<tr>
<td>Note: File paths containing multibyte characters are not supported.</td>
<td></td>
</tr>
<tr>
<td>Output Folder</td>
<td>Specify the folder where the Cubemap will be saved.</td>
</tr>
<tr>
<td>Note: File paths containing multibyte characters are not supported.</td>
<td></td>
</tr>
<tr>
<td>Crop Size</td>
<td>Pixel size for the 6-direction crop. For OSMO360 8K video, 1920 is fine.</td>
</tr>
<tr>
<td>FoV</td>
<td>Field of view for the 6-direction crop. 90° is fine.</td>
</tr>
<tr>
<td>Max Images</td>
<td>Upper limit on the number of omnidirectional images to process. Use a small value when testing.</td>
</tr>
<tr>
<td>Image Range</td>
<td>Specify a range of omnidirectional images to process (useful for partial processing).</td>
</tr>
<tr>
<td>Workers</td>
<td>Number of processing threads. Adjust according to the number of CPU cores.</td>
</tr>
<tr>
<td>Yaw Offset</td>
<td>Add variation to the Cubemap Yaw angle. The specified angle is added to each Cubemap. 5–30° is recommended.</td>
</tr>
<tr>
<td>Save Config</td>
<td>Save the above settings as a config file.</td>
</tr>
<tr>
<td>Run Conversion</td>
<td>Start the Cubemap conversion process.</td>
</tr>
</tbody></table>
<h3>Settings 2: Mask Processing</h3>
<ul>
<li><p>You can generate masks for people, vehicles, and other objects on the expanded Cubemap images.</p>
</li>
<li><p>If you use SAM3 masks generated by Extract Sharpest Frame, specify them in the custom mask settings below. They can be combined with YOLO masks.</p>
<img src="https://static.zenn.studio/user-upload/32259e40e204-20260919.jpg" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<table>
<thead>
<tr>
<th>Main Item</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td>Mask Pass Mode</td>
<td>Single: Detects objects only from the omnidirectional image (fast but lower accuracy). Dual: Uses both omnidirectional and Cubemap images for the detection (more processing but higher accuracy).</td>
</tr>
<tr>
<td>Merge Mode</td>
<td>Mode used when combining masks in Dual mode. "union" simply merges both; "refine" uses the Cubemap mask as the base and integrates the omnidirectional mask. "refine" is recommended.</td>
</tr>
<tr>
<td>YOLO Class IDs</td>
<td>Specify the class IDs to detect. 0: person, 1: bicycle, 2: car, etc. Multiple IDs can be specified comma-separated. <a href="https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml">https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml</a></td>
</tr>
<tr>
<td>YOLO Confidence</td>
<td>Lowering the threshold increases the detection rate but also increases noise.</td>
</tr>
<tr>
<td>Enable overexposure mask</td>
<td>Overexposed (blown-out) pixels can become noise during 3DGS training. Enable this if you want to remove them.</td>
</tr>
</tbody></table>
<h3>Settings 3 (Advanced Settings): Custom Mask</h3>
<ul>
<li><p>You can load SAM3 Dual Masks (for 3DGS training) generated by Extract Sharpest Frame, or any custom masks. Specify mask images as PNG files with the same count, resolution, and filenames as the still images.<br />Reference: Google Slides -&gt; <a href="https://t.co/X0uRH959RV">https://t.co/X0uRH959RV</a> (The example uses Metashape, but the same concept applies to COLMAP.)</p>
<img src="https://static.zenn.studio/user-upload/293c6d72d1a3-20260919.jpg" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h3>Settings 4 (Advanced Settings): Cubemap Reduction</h3>
<ul>
<li><p>This feature reduces the number of Cubemaps while minimizing 3DGS quality loss. It can shorten 3DGS training time and reduce VRAM usage.</p>
</li>
<li><p>The ZIP file downloaded from BOOTH includes a detailed PDF operation manual. Please refer to it.</p>
</li>
<li><p>Reference: <a href="https://x.com/kotohibi%5C_3d/status/2078671971639009313">https://x.com/kotohibi\_3d/status/2078671971639009313</a></p>
<img src="https://static.zenn.studio/user-upload/98e268ae6302-20260919.jpg" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h3>Execute</h3>
<ul>
<li><p>After processing completes successfully, the following folders and files are generated in the output folder.</p>
<p><img src="align=%22center%22" alt="" /></p>
<img src="https://static.zenn.studio/user-upload/cafa6f300e89-20260919.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h1>(LichtFeld Studio) 3D Gaussian Splatting Training</h1>
<p>Here I explain the workflow using LichtFeld Studio (LFS) V0.5.3.</p>
<h3>Import Cubemap</h3>
<ul>
<li><p>Select [File]-&gt; [Import Dataset], then specify the <code>Output Folder</code> from CCConverter.</p>
<img src="https://static.zenn.studio/user-upload/e13cdeabf363-20260919.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>If the data is detected correctly, a dialog like the one below appears. Confirm the contents and click [Load] to continue.</p>
<img src="https://static.zenn.studio/user-upload/5baa1c1890df-20260919.jpg" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Once the data is loaded correctly, you will see a screen like the one below.</p>
<img src="https://static.zenn.studio/user-upload/f758afca0ad2-20260919.jpg" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h3>Start 3DGS Training</h3>
<ul>
<li><p>Mask settings</p>
<ul>
<li><p>Select [Training Parameters]-&gt;[Mask Mode]-&gt;[Ignore].</p>
</li>
<li><p>Turn off [Alpha Mask].</p>
</li>
</ul>
</li>
<li><p>Training parameters</p>
<ul>
<li><p>Here is an example of the settings I often use.</p>
</li>
<li><p>I recommend [Strategy]-&gt;[MRNF] (at the time this article was written).</p>
</li>
<li><p>Adjust <code>Max Gaussians</code> according to the scale of the scene (3,000,000–12,000,000).</p>
</li>
<li><p>Adjust <code>SH Degree</code> (1–3). If VRAM is limited, I recommend 1.</p>
</li>
<li><p><code>Iterations</code> and <code>Steps Scaler</code> are calculated automatically according to the number of images.</p>
</li>
<li><p>With MRNF, changes to the other parameters are usually not very necessary.</p>
</li>
<li><p>LFS has many parameters, so please research on the web and find the best settings for your scene.</p>
</li>
<li><p>Note: Recently, Bilateral Grid is often turned off (PPISP is sufficient in many cases).</p>
<img src="https://static.zenn.studio/user-upload/f8e7b4f7efdd-20260919.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
</li>
<li><p>Click [Start Training] to begin 3DGS training.</p>
</li>
</ul>
<h3>3DGS Training Result</h3>
<ul>
<li><p>As training progresses, you should start seeing the 3DGS!</p>
<img src="https://static.zenn.studio/user-upload/03535d1d667e-20260919.jpg" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h1>Finally</h1>
<p>There are many 3DGS methods, and this article is just one example. I will continue sharing the latest information on my X account. Please research on your own and develop even better techniques. Enjoy 3DGS :)</p>
<ul>
<li><p>my 360 Tools: <a href="https://kotohibi.f5.si/360">https://kotohibi.f5.si/360</a></p>
</li>
<li><p>my X: <a href="https://x.com/kotohibi%5C_3d">https://x.com/kotohibi\_3d</a></p>
</li>
<li><p>3DGS pipeline guide: <a href="https://github.com/Kotohibi/3DGS%5C_pipeline%5C_guide">https://github.com/Kotohibi/3DGS\_pipeline\_guide</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Easy&Fast 3D Gaussian Splatting workflow with 360 Camera and Metashape]]></title><description><![CDATA[Overview
This workflow demonstrates an example of performing robust and relatively fast camera alignment (SfM) using omnidirectional images: Equirectangular (equidistant cylindrical projection) images]]></description><link>https://kotohibi.hashnode.dev/easy-fast-3d-gaussian-splatting-workflow-with-360-camera-and-metashape</link><guid isPermaLink="true">https://kotohibi.hashnode.dev/easy-fast-3d-gaussian-splatting-workflow-with-360-camera-and-metashape</guid><dc:creator><![CDATA[kotohibi]]></dc:creator><pubDate>Sat, 29 Aug 2026 11:04:47 GMT</pubDate><content:encoded><![CDATA[<h1>Overview</h1>
<p>This workflow demonstrates an example of performing robust and relatively fast camera alignment (SfM) using omnidirectional images: Equirectangular (equidistant cylindrical projection) images, followed by training 3D Gaussian Splatting (3DGS).</p>
<h1>References</h1>
<h3>DJI AVATA360 examples</h3>
<ul>
<li><p><a href="https://x.com/kotohibi%5C_3d/status/2079907663895482456">https://x.com/kotohibi\_3d/status/2079907663895482456</a></p>
</li>
<li><p><a href="https://x.com/kotohibi%5C_3d/status/2040724840504758578">https://x.com/kotohibi\_3d/status/2040724840504758578</a></p>
</li>
<li><p><a href="https://x.com/naribubu/status/2038881884558791088">https://x.com/naribubu/status/2038881884558791088</a></p>
</li>
<li><p><a href="https://x.com/naribubu/status/2038875398717722743">https://x.com/naribubu/status/2038875398717722743</a></p>
</li>
</ul>
<h3>DJI OSMO360 examples</h3>
<ul>
<li><p><a href="https://x.com/kotohibi%5C_3d/status/2088521899160879450">https://x.com/kotohibi\_3d/status/2088521899160879450</a></p>
</li>
<li><p><a href="https://x.com/kotohibi%5C_3d/status/2082426800215654725">https://x.com/kotohibi\_3d/status/2082426800215654725</a></p>
</li>
<li><p><a href="https://x.com/kotohibi%5C_3d/status/2074821581948481758">https://x.com/kotohibi\_3d/status/2074821581948481758</a></p>
</li>
<li><p><a href="https://x.com/kotohibi%5C_3d/status/2038179454367957106">https://x.com/kotohibi\_3d/status/2038179454367957106</a></p>
</li>
</ul>
<h1>Requirements</h1>
<ul>
<li><p>360° Camera</p>
<ul>
<li><p>DJI OSMO360</p>
</li>
<li><p>DJI AVATA360</p>
</li>
<li><p>Insta360</p>
</li>
</ul>
</li>
<li><p>High-end PC and NVIDIA GPU</p>
<ul>
<li>Training 3DGS requires a high-performance GPU. In particular, more VRAM is better. I recommend a GPU with at least 12 GB of VRAM.</li>
</ul>
</li>
<li><p>Metashape Standard (Not supported the Professional edition)</p>
<ul>
<li><p>Directly supports SfM with omnidirectional images; extremely fast and robust.</p>
</li>
<li><p><a href="https://www.agisoft.com/features/standard-edition/">https://www.agisoft.com/features/standard-edition/</a></p>
</li>
</ul>
</li>
<li><p>3D Gaussian Splatting software</p>
<ul>
<li><p>Postshot: <a href="https://www.jawset.com/">https://www.jawset.com/</a></p>
</li>
<li><p>LichtFeld Studio (LFS): <a href="https://github.com/MrNeRF/LichtFeld-Studio">https://github.com/MrNeRF/LichtFeld-Studio</a></p>
</li>
<li><p>Brush: <a href="https://github.com/ArthurBrussee/brush">https://github.com/ArthurBrussee/brush</a></p>
</li>
</ul>
</li>
<li><p>Still-image extraction tool from video</p>
<ul>
<li><p>Extract Sharpest Frame (Free edition)</p>
<ul>
<li><a href="https://github.com/Kotohibi/Extract%5C_sharpest%5C_frame">https://github.com/Kotohibi/Extract\_sharpest\_frame</a></li>
</ul>
</li>
<li><p>360 Extractor (paid edition)</p>
<ul>
<li><a href="https://kotohibi.f5.si/360/">https://kotohibi.f5.si/360/</a></li>
</ul>
</li>
</ul>
</li>
<li><p>Metashape 360 SfM to COLMAP-format Cubemap conversion tool</p>
<ul>
<li><p>Metashape 360 to COLMAP Converter (Free edition)</p>
<ul>
<li><a href="https://github.com/Kotohibi/Metashape%5C_360%5C_to%5C_COLMAP%5C_plane">https://github.com/Kotohibi/Metashape\_360\_to\_COLMAP\_plane</a></li>
</ul>
</li>
<li><p>360 MCConverter (paid edition)</p>
<ul>
<li><a href="https://kotohibi.f5.si/360/">https://kotohibi.f5.si/360/</a></li>
</ul>
</li>
</ul>
</li>
<li><p>(Optional) Additional license for estimating real-world scale in 3DCG</p>
<ul>
<li><p>Metashape 360 to COLMAP Converter includes a feature that estimates the real-world scale of 3DGS using a 2D marker called AprilTag. An additional license is required to use it. The following articles explain how to use AprilTag.</p>
</li>
<li><p>Add-on Real Scale 3DGS with AprilTag <a href="https://kotohibi-cg.booth.pm/items/8323677">https://kotohibi-cg.booth.pm/items/8323677</a></p>
</li>
<li><p>English version: <a href="https://x.gd/CoWJA">https://x.gd/CoWJA</a></p>
</li>
<li><p>Japanese version: <a href="https://x.gd/Isahb">https://x.gd/Isahb</a></p>
</li>
</ul>
</li>
</ul>
<h1>Video Shooting (e.g. OSMO360)</h1>
<p>Attach the camera to a selfie stick and slowly walk through the area you want to capture.<br />Recommended video settings: D-Log M, 30 fps or higher.</p>
<h1>Develop the Video</h1>
<h3>Import the captured data into DJI Studio and perform color grading (color restoration).</h3>
<ul>
<li><p>Apply the settings inside the red frame in the image below. Everything else can be left at default.  </p>
<img src="https://storage.googleapis.com/zenn-user-upload/60fc28c6c26e-20260322.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>(Advanced settings) When using the seam mask implemented in Extract Sharpest Frame V1.0.0 or later, turn RockSteady off. RockSteady provides electronic image stabilization and horizon leveling, but it changes the stitch line. Turn off the equivalent feature for Insta360 cameras as well.</p>
<ul>
<li>(Note) The seam mask masks misalignments along the stitch line between the front and rear fisheye cameras, allowing that area to be excluded from the camera alignment and 3DGS training described below.</li>
</ul>
</li>
</ul>
<h3>Export the video</h3>
<ul>
<li><p>Export as an MP4 omnidirectional video. Example settings are shown in the image below.</p>
</li>
<li><p>When developing multiple clips, you can develop them together using "Multiple Clips." Extract Sharpest Frame can batch-process multiple videos.</p>
<img src="https://storage.googleapis.com/zenn-user-upload/b80d49f8fef6-20260322.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h1>Extract Still Images from Video</h1>
<p>There are many ways to extract still images from video. Research and choose your preferred method.<br />Here I introduce the tool I have published.<br /><strong>Extract Sharpest Frame</strong> is a tool that extracts the sharpest image at specified frame intervals.</p>
<ul>
<li><p><strong>New features are prioritized for updates in the BOOTH edition</strong>  </p>
<img src="https://static.zenn.studio/user-upload/5eeda54ab2ad-20260816.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<table>
<thead>
<tr>
<th>Main Item</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td>Video file</td>
<td>Select the omnidirectional video. Multiple videos can be selected and processed in a batch.</td>
</tr>
<tr>
<td>Note: File paths containing multibyte characters are not supported.</td>
<td></td>
</tr>
<tr>
<td>Output folder</td>
<td>Specify the folder where still images and masks will be saved. <code>frames</code> and <code>masks</code> folders will be created under this folder. You can also choose whether images extracted from multiple videos should be collected into a single folder.</td>
</tr>
<tr>
<td>Note: File paths containing multibyte characters are not supported.</td>
<td></td>
</tr>
<tr>
<td>Scale width</td>
<td>Image size used when calculating sharpness for all video frames. Larger values give more precise calculations. Note: Extracted images are always output at the original video resolution.</td>
</tr>
<tr>
<td>Chunk size</td>
<td>Interval for extracting still images. For a 30 fps video, setting 30 extracts images every 1 second.</td>
</tr>
<tr>
<td>Workers</td>
<td>Number of processes used when calculating image sharpness. Around 4 is recommended.</td>
</tr>
<tr>
<td>Start (HH:MM:SS)</td>
<td>Specify the time to start extraction. The format is HH:MM:SS.</td>
</tr>
<tr>
<td>If left blank, processing starts from the beginning of the video.</td>
<td></td>
</tr>
<tr>
<td>End (HH:MM:SS)</td>
<td>Specify the time to end extraction. The format is HH:MM:SS.</td>
</tr>
<tr>
<td>If left blank, processing continues to the end of the video.</td>
<td></td>
</tr>
<tr>
<td>Remove similar frames</td>
<td>Excludes similar frames. If Review is enabled, you can adjust the threshold during execution to control how many images are extracted.</td>
</tr>
<tr>
<td>pHash threshold</td>
<td>Specifies the threshold for judging similar images. Higher values remove more images. This is useful when movement speed during shooting is irregular.</td>
</tr>
<tr>
<td>Mask Generation</td>
<td>Generates mask images for moving objects such as people and cars. This improves SfM accuracy in later steps.</td>
</tr>
<tr>
<td>SAM3 Dual Mask</td>
<td>The latest version supports SAM3 masks. You can generate masks using any short sentence and preview the result with the Preview/Edit button.</td>
</tr>
</tbody></table>
<img src="https://static.zenn.studio/user-upload/0e554f407115-20260816.png" alt="" style="display:block;margin:0 auto" />

<p><a href="https://x.com/kotohibi%5C_3d/status/2061044432837972367">https://x.com/kotohibi\_3d/status/2061044432837972367</a><br />(Advanced settings) Two SAM3 masks can be configured separately: one for camera alignment and one for 3DGS training. For details, see the following Google Slides:<br /><a href="https://t.co/X0uRH959RV">https://t.co/X0uRH959RV</a></p>
<table style="min-width:50px"><colgroup><col style="min-width:25px"></col><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>YOLO Mask</p></td><td><p>[YOLO Class IDs]<br />Specify the class IDs to detect. 0: person, 1: bicycle, 2: car, etc. Multiple IDs can be specified comma-separated. https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml<br />[YOLO Confidence]<br />Raising the threshold reduces false positives. Lowering it detects more objects but increases false positives.<br />[YOLO Model]<br />Model size and performance increase from yolo11n toward yolo11x, but so does processing load.<br /></p></td></tr></tbody></table>

<img src="https://static.zenn.studio/user-upload/7d34cc2d384d-20260816.png" alt="" style="display:block;margin:0 auto" />

<table style="min-width:50px"><colgroup><col style="min-width:25px"></col><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>Seam Mask</p></td><td><p>Masks misalignments along the stitch line joining the two fisheye images. To keep the stitch line fixed, develop the video with horizon-leveling features in DJI Studio, Insta360 Studio, and similar software turned off before using this feature.</p></td></tr></tbody></table>

<img src="https://static.zenn.studio/user-upload/acd5585b6814-20260816.png" alt="" style="display:block;margin:0 auto" />

<table style="min-width:50px"><colgroup><col style="min-width:25px"></col><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>Custom Mask</p></td><td><p>Specify a fixed mask image. When used with the masks above, they are merged. This is useful for masking areas that are always visible, such as a camera rig.<br />Note: Specify a PNG image with the same resolution as the video.</p></td></tr><tr><td><p>Analysis only</p></td><td><p>Perform only sharpness calculation. Calculation results (metadata) are saved in the output folder. On subsequent runs, if metadata exists in the output folder, the analysis phase is skipped and only image extraction is performed. Useful when adjusting Chunk size.</p></td></tr><tr><td><p>Save config</p></td><td><p>Save the above settings as a configuration file.</p></td></tr><tr><td><p>Load config</p></td><td><p>Load a previously saved configuration file.</p></td></tr><tr><td><p>Run</p></td><td><p>Execute processing</p></td></tr></tbody></table>

<h3>Execution Result</h3>
<ul>
<li><p>Still images are extracted as shown below. Please check the SfM result in the next step and readjust the Chunk size if necessary.  </p>
<img src="https://storage.googleapis.com/zenn-user-upload/0b75a72fb38b-20260322.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p><strong>Masks are also generated automatically</strong></p>
<img src="https://storage.googleapis.com/zenn-user-upload/8840955dc8e6-20260329.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h1>Perform Camera Alignment (SfM)</h1>
<p>Use Metashape Standard, which can directly process omnidirectional images for SfM.</p>
<h3>Load the extracted omnidirectional images</h3>
<p>[Workflow] → [Add Folder]  </p>
<img src="https://storage.googleapis.com/zenn-user-upload/b39e5a8c4bc7-20260322.png" alt="" style="display:block;margin:0 auto" />

<h3>Change Camera Type to Spherical</h3>
<p>Select [Tools] → [Camera Calibration] and set Camera type to Spherical.  </p>
<img src="https://storage.googleapis.com/zenn-user-upload/25897fe5c593-20260322.png" alt="" style="display:block;margin:0 auto" />

<h3>Load the mask images</h3>
<p>Select [File] → [Import] → [Import Masks].</p>
<img src="https://storage.googleapis.com/zenn-user-upload/d4796422f834-20260329.png" alt="" style="display:block;margin:0 auto" />

<p>Use the settings below and click [OK]. Then a folder selection dialog will appear; select the mask folder generated by Extract Sharpest Frame.</p>
<ul>
<li><p>Set Filename template to <code>{filename}.png</code> (the default is <code>{filename}_mask.png</code>).</p>
<img src="https://storage.googleapis.com/zenn-user-upload/8dce21a5a577-20260329.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h3>Set SfM parameters</h3>
<p>Here are two parameter examples I often use.</p>
<table>
<thead>
<tr>
<th>Example</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td></td>
<td></td>
</tr>
</tbody></table>
<img src="https://storage.googleapis.com/zenn-user-upload/d8f5b57f81cd-20260329.png" alt="" style="display:block;margin:0 auto" />

<table style="min-width:25px"><colgroup><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>Turn ON "Generic preselection." It first matches photos at a low-precision setting, selects overlapping pairs, and then runs the main process. This is fast, but it can fail in some cases. If that happens, try the option below. For [<strong>Apply masks to</strong>], select [<strong>Key points</strong>].</p></td></tr><tr><td><p></p></td></tr></tbody></table>

<img src="https://static.zenn.studio/user-upload/1e565d45e5e6-20260602.png" alt="" style="display:block;margin:0 auto" />

<table style="min-width:25px"><colgroup><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>Turn OFF "Generic preselection." This performs full matching for all image pairs. Since it takes longer, set "Key point limit" to a smaller value. Set "Tie point limit" to 0 for unlimited points. For [<strong>Apply masks to</strong>], select [<strong>Key points</strong>].</p></td></tr></tbody></table>

<h3>Execute</h3>
<p>Click OK to run SfM.<br />Example result shown below. The spherical markers correspond to each omnidirectional image.  </p>
<img src="https://storage.googleapis.com/zenn-user-upload/026d9b7f7c2b-20260322.png" alt="" style="display:block;margin:0 auto" />

<h3>Clean up Tie points</h3>
<ul>
<li><p>Remove low-reliability Tie points to improve SfM accuracy. This is a very important step for high-detail 3DGS. Select [Tools] → [Tie Points] → [Clean Tie points].</p>
<img src="https://storage.googleapis.com/zenn-user-upload/0a473dbf0936-20260331.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Select [Reprojection error] and adjust the slider to remove about 5% of the Tie points.</p>
<img src="https://storage.googleapis.com/zenn-user-upload/ab01ff45f657-20260331.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>The number of Tie points is shown at the bottom left of the screen, so adjust the slider while checking how many Tie points will be removed.</p>
<img src="https://storage.googleapis.com/zenn-user-upload/50138c41ddda-20260331.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Click [Optimize Cameras] to optimize the cameras.</p>
<img src="https://storage.googleapis.com/zenn-user-upload/fedf8a3944ad-20260331.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Do the same for [Recostruction uncertainty], remove about 5% of the Tie points, and then run [Optimize Cameras] again.</p>
</li>
<li><p>Do the same for [Projection accuracy], remove about 5% of the Tie points, and then run [Optimize Cameras] again.</p>
</li>
<li><p>Repeat the above once more so that low-reliability Tie points are removed as much as possible.</p>
</li>
</ul>
<h3>Export SfM results</h3>
<pre><code class="language-plaintext">* Export Camera information  
  [File] → [Export] → [Export Cameras] → Select Agisoft XML (*.xml) and save.
* Export Point Cloud  
  [File] → [Export] → [Export Point Cloud] → Select Stanford PLY (*.ply) and save.
</code></pre>
<h1>Convert to COLMAP Cubemap</h1>
<p>Convert the Metashape SfM results into COLMAP-format 6-direction Cubemap images.<br />Here I introduce the tool I have published.<br /><strong>Metashape 360 to COLMAP Converter</strong></p>
<ul>
<li><strong>New features are prioritized for updates in the BOOTH edition</strong></li>
</ul>
<h3>Settings ①</h3>
<img src="https://static.zenn.studio/user-upload/019f14a75224-20260816.png" alt="" style="display:block;margin:0 auto" />

<table>
<thead>
<tr>
<th>Main Item</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td>Input Images Folder</td>
<td>Specify the folder containing the extracted omnidirectional images</td>
</tr>
<tr>
<td>Note: File paths containing multibyte characters are not supported.</td>
<td></td>
</tr>
<tr>
<td>Metashape XML</td>
<td>Specify the Camera.xml from the SfM results</td>
</tr>
<tr>
<td>Note: File paths containing multibyte characters are not supported.</td>
<td></td>
</tr>
<tr>
<td>PLY File</td>
<td>Specify the point_cloud.ply from the SfM results</td>
</tr>
<tr>
<td>Note: File paths containing multibyte characters are not supported.</td>
<td></td>
</tr>
<tr>
<td>Output Folder</td>
<td>Specify the folder where the Cubemap will be saved</td>
</tr>
<tr>
<td>Note: File paths containing multibyte characters are not supported.</td>
<td></td>
</tr>
<tr>
<td>Crop Size</td>
<td>Pixel size for the 6-direction crop. For OSMO360 8K video, 1920 is fine.</td>
</tr>
<tr>
<td>FoV</td>
<td>Field of view for the 6-direction crop. 90° is fine.</td>
</tr>
<tr>
<td>Max Images</td>
<td>Upper limit on the number of omnidirectional images to process. Use a small value when testing.</td>
</tr>
<tr>
<td>Image Range</td>
<td>Specify a range of omnidirectional images to process (useful for partial processing).</td>
</tr>
<tr>
<td>Workers</td>
<td>Number of processing threads. Adjust according to the number of CPU cores.</td>
</tr>
<tr>
<td>Yaw Offset</td>
<td>Add variation to the Cubemap Yaw angle. The specified angle is added to each Cubemap. 5–30° is recommended.</td>
</tr>
<tr>
<td>Save Config</td>
<td>Save the above settings as a config file</td>
</tr>
<tr>
<td>Run Conversion</td>
<td>Start the Cubemap conversion process</td>
</tr>
</tbody></table>
<h3>Settings ② : Mask Processing</h3>
<ul>
<li><p>If you use SAM3 masks generated by Extract Sharpest Frame, turn this feature off and specify the SAM3 masks in the custom-mask settings below.</p>
</li>
<li><p>You can generate masks for people, vehicles, and other objects. Mask generation is particularly important with 360° cameras because the operator is often captured in the frame.</p>
<img src="https://static.zenn.studio/user-upload/87640ef407d7-20260816.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<table>
<thead>
<tr>
<th>Main Item</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td>Mask Pass Mode</td>
<td>Single: Detects moving objects only from the omnidirectional image (fast but lower accuracy). Dual: Uses both omnidirectional and Cubemap images (more processing but higher accuracy).</td>
</tr>
<tr>
<td>Merge Mode</td>
<td>Mode used when combining masks in Dual mode. "union" simply merges both; "refine" uses the Cubemap mask as the base and integrates the omnidirectional mask. "refine" is recommended.</td>
</tr>
<tr>
<td>YOLO Class IDs</td>
<td>Specify detected object IDs. 0: person, 1: bicycle, 2: car, etc. You can specify various moving objects. <a href="https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml">https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml</a></td>
</tr>
<tr>
<td>YOLO Confidence</td>
<td>Lowering the threshold increases detection rate but also increases noise.</td>
</tr>
<tr>
<td>Enable overexposure mask</td>
<td>Overexposed (blown-out) pixels can become noise during 3DGS training. Enable this if you want to remove them.</td>
</tr>
</tbody></table>
<h3>Settings ③ (Advanced Settings): Custom Mask</h3>
<ul>
<li><p>You can load SAM3 Dual Masks (for 3DGS training) generated by Extract Sharpest Frame, or custom masks. Specify mask images as PNG files with the same file count, resolution, and filenames as the still images.<br />Reference: Google Slides -&gt; <a href="https://t.co/X0uRH959RV">https://t.co/X0uRH959RV</a></p>
<img src="https://static.zenn.studio/user-upload/3d5689b26030-20260816.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h3>Settings ④ (Advanced Settings): AprilTag</h3>
<ul>
<li><p>This feature estimates the real-world scale of 3DGS using 2D markers. An additional license is required. The following articles explain how to use AprilTag.</p>
<ul>
<li><p>English version: <a href="https://x.gd/CoWJA">https://x.gd/CoWJA</a></p>
</li>
<li><p>Japanese version: <a href="https://x.gd/Isahb">https://x.gd/Isahb</a></p>
<img src="https://static.zenn.studio/user-upload/fbd9f3c67749-20260816.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
</li>
</ul>
<h3>Settings ⑤ (Advanced Settings): Overlap Filter</h3>
<ul>
<li><p>See the <a href="https://zenn.dev/kotohibi/articles/a14d2ff4fc205c">[EN]Mixed 3DGS Workflow with 360 Video and Planar Images</a> guide.</p>
</li>
<li><p>The ZIP file downloaded from BOOTH includes a detailed PDF operation manual. Please refer to it.</p>
</li>
<li><p>Reference: <a href="https://x.com/kotohibi%5C_3d/status/2078088377371681237">https://x.com/kotohibi\_3d/status/2078088377371681237</a></p>
<img src="https://static.zenn.studio/user-upload/fb0005c1488c-20260816.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h3>Settings ⑥ (Advanced Settings): Cubemap Reduction</h3>
<ul>
<li><p>This feature reduces the number of Cubemaps while minimizing 3DGS quality loss. It can shorten 3DGS training time and reduce VRAM usage.</p>
</li>
<li><p>The ZIP file downloaded from BOOTH includes a detailed PDF operation manual. Please refer to it.</p>
</li>
<li><p>Reference: <a href="https://x.com/kotohibi%5C_3d/status/2086408535768973659">https://x.com/kotohibi\_3d/status/2086408535768973659</a></p>
<img src="https://static.zenn.studio/user-upload/6dc279da639e-20260816.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h3>Execute</h3>
<p>After processing completes successfully, the following folders and files are generated in the output folder.  </p>
<img src="https://storage.googleapis.com/zenn-user-upload/fc379b61d4eb-20260322.png" alt="" style="display:block;margin:0 auto" />

<h1>(Postshot) 3D Gaussian Splatting Training</h1>
<p>Here I explain the workflow using Postshot.</p>
<h3>Import Cubemap</h3>
<img src="https://storage.googleapis.com/zenn-user-upload/cb6564b73383-20260322.png" alt="" style="display:block;margin:0 auto" />

<ul>
<li>First, drag &amp; drop the Images folder, cameras.txt, images.txt, and points3D.txt into Postshot.</li>
</ul>
<h3>Mask Settings</h3>
<img src="https://storage.googleapis.com/zenn-user-upload/14a3f080601f-20260322.png" alt="" style="display:block;margin:0 auto" />

<ul>
<li>Next, drag &amp; drop the masks folder into the Image Masks area in Postshot.<br />Select <strong>Remove Background</strong> for Mask Mode.</li>
</ul>
<h3>Cubemap Import Result</h3>
<img src="https://storage.googleapis.com/zenn-user-upload/41e8ba454bde-20260322.png" alt="" style="display:block;margin:0 auto" />

<ul>
<li>Once the Cubemap is successfully imported, you will see a screen like the one above.</li>
</ul>
<h3>Start 3DGS Training</h3>
<ul>
<li><p>Here is an example of training parameters I use for wide-area 3DGS. Adjust parameters according to your scene.</p>
</li>
<li><p>Turn on Photometric Compensation.</p>
</li>
<li><p>Change Max Splat Count according to the scale of the scene (3,000-12,000 kSplats).</p>
</li>
<li><p>Adjust Max Sph.Hrm.Degree (1-3). If VRAM is limited, I recommend 1.</p>
</li>
<li><p>Stop Training After is calculated automatically according to the number of images.</p>
<img src="https://static.zenn.studio/user-upload/c657a4540edf-20260617.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h3>3DGS Training Result</h3>
<img src="https://storage.googleapis.com/zenn-user-upload/420154d101ed-20260322.png" alt="" style="display:block;margin:0 auto" />

<ul>
<li>As training progresses, you should start seeing the 3DGS!</li>
</ul>
<h1>(LichtFeld Studio) 3D Gaussian Splatting Training</h1>
<p>Here I explain the workflow using LichtFeld Studio (LFS).</p>
<h3>Import Cubemap</h3>
<ul>
<li><p>Select [File] → [Import Dataset], then specify the <code>Output Folder</code> from Metashape 360 to COLMAP Converter.</p>
<img src="https://storage.googleapis.com/zenn-user-upload/059130e3e4f1-20260329.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>If the data is detected correctly, a dialog like the one below appears. Confirm the contents and click [Load] to continue.</p>
<img src="https://storage.googleapis.com/zenn-user-upload/022689a850cb-20260329.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Once the data is loaded correctly, you will see a screen like the one below.</p>
<img src="https://storage.googleapis.com/zenn-user-upload/23fc40a389ab-20260329.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h3>Start 3DGS Training</h3>
<ul>
<li><p>Mask settings</p>
<ul>
<li><p>Select [Training Parameters] → [Mask Mode] → [Ignore].</p>
</li>
<li><p>Turn off [Alpha Mask].</p>
</li>
</ul>
</li>
<li><p>Training parameters</p>
<ul>
<li><p>Here is an example of settings I often use.</p>
</li>
<li><p>I recommend [Strategy] → [MRNF] (at the time this article was written).</p>
</li>
<li><p>Adjust <code>Max Gaussians</code> according to the scale of the scene (3,000,000-12,000,000).</p>
</li>
<li><p>Adjust <code>SH Degree</code> (1-3). If VRAM is limited, I recommend 1.</p>
</li>
<li><p><code>Iterations</code> and <code>Steps Scaler</code> are calculated automatically according to the number of images.</p>
</li>
<li><p>With MRNF, changes to the other parameters are usually not very necessary.</p>
</li>
<li><p>LFS has many parameters, so please research on the web and find the best settings for your scene.</p>
</li>
<li><p>Recently, Bilateral Grid is often turned off because PPISP is sufficient in many cases.</p>
<img src="https://static.zenn.studio/user-upload/d3d56075e6f2-20260816.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
</li>
<li><p>Click [Start Training] to begin 3DGS training.</p>
</li>
</ul>
<h3>3DGS Training Result</h3>
<ul>
<li><p>As training progresses, you should start seeing the 3DGS!</p>
<img src="https://storage.googleapis.com/zenn-user-upload/ead45e8e04bc-20260329.jpg" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h1>Finally</h1>
<p>There are many 3DGS methods, and this article is just one example. I will continue sharing the latest information on my X account.<br />Please research on your own and develop even better techniques. Enjoy 3DGS :)</p>
<ul>
<li><p>my X: <a href="https://x.com/kotohibi%5C_3d">https://x.com/kotohibi\_3d</a></p>
</li>
<li><p>3DGS pipeline guide: <a href="https://github.com/Kotohibi/3DGS%5C_pipeline%5C_guide">https://github.com/Kotohibi/3DGS\_pipeline\_guide</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Mixed 3DGS Workflow with 360 Video and Planar Images]]></title><description><![CDATA[Introduction
This document is intended for users who:

Understand the following guide:

[EN]Easy&Fast 3D Gaussian Splatting workflow with 360 Camera


Have a general understanding of the 3DGS producti]]></description><link>https://kotohibi.hashnode.dev/mixed-3dgs-workflow-with-360-video-and-planar-images</link><guid isPermaLink="true">https://kotohibi.hashnode.dev/mixed-3dgs-workflow-with-360-video-and-planar-images</guid><dc:creator><![CDATA[kotohibi]]></dc:creator><pubDate>Sat, 29 Aug 2026 11:01:24 GMT</pubDate><content:encoded><![CDATA[<h1>Introduction</h1>
<p>This document is intended for users who:</p>
<ul>
<li><p>Understand the following guide:</p>
<ul>
<li><a href="https://zenn.dev/kotohibi/articles/409bc16876b9e0">[EN]Easy&amp;Fast 3D Gaussian Splatting workflow with 360 Camera</a></li>
</ul>
</li>
<li><p>Have a general understanding of the 3DGS production workflow using a 360 camera</p>
</li>
<li><p>Want to take the next step and create higher-quality 3DGS results</p>
</li>
</ul>
<h1>Overview</h1>
<p>Creating 3DGS with 360 cameras such as OSMO360 or AVATA360 is easy, but there are limits in terms of quality. On the other hand, workflows using planar images from mirrorless cameras and similar devices can achieve higher quality, but they require more shooting effort and make it difficult to reconstruct the entire scene. This workflow proposes a mixed workflow using both a 360 camera and a planar camera. The main goal is to improve 3DGS results by capturing the entire scene with a 360 camera while capturing the area of interest in detail with a planar camera.</p>
<h1>References</h1>
<h1>Requirements</h1>
<ul>
<li><p>360 camera</p>
<ul>
<li><p>DJI OSMO 360</p>
</li>
<li><p>DJI AVATA 360</p>
</li>
<li><p>Insta 360</p>
</li>
<li><p>etc...</p>
</li>
</ul>
</li>
<li><p>Planar camera</p>
<ul>
<li><p>Mirrorless camera</p>
</li>
<li><p>Action camera</p>
</li>
<li><p>etc...</p>
</li>
</ul>
</li>
<li><p>High-end PC and NVIDIA GPU</p>
<ul>
<li>Training 3DGS requires a high-performance GPU. In particular, more VRAM is better. I recommend a GPU with at least 12 GB of VRAM.</li>
</ul>
</li>
<li><p>Metashape Standard (Professional edition is not supported)</p>
<ul>
<li><p>Directly supports SfM with 360 images; extremely fast and robust.</p>
</li>
<li><p><a href="https://www.agisoft.com/features/standard-edition/">https://www.agisoft.com/features/standard-edition/</a></p>
</li>
</ul>
</li>
<li><p>3D Gaussian Splatting software</p>
<ul>
<li><p>Postshot: <a href="https://www.jawset.com/">https://www.jawset.com/</a></p>
</li>
<li><p>LichtFeld Studio (LFS): <a href="https://github.com/MrNeRF/LichtFeld-Studio">https://github.com/MrNeRF/LichtFeld-Studio</a></p>
</li>
<li><p>Brush: <a href="https://github.com/ArthurBrussee/brush">https://github.com/ArthurBrussee/brush</a></p>
</li>
</ul>
</li>
<li><p>Still-image extraction tool from video</p>
<ul>
<li><p>Extract Sharpest Frame (free edition) * <a href="https://github.com/Kotohibi/Extract%5C_sharpest%5C_frame">https://github.com/Kotohibi/Extract\_sharpest\_frame</a></p>
</li>
<li><p>360 Extractor (paid edition) * <a href="https://kotohibi.f5.si/360/">https://kotohibi.f5.si/360/</a></p>
</li>
</ul>
</li>
<li><p>Metashape 360 SfM to COLMAP-format Cubemap conversion tool</p>
<ul>
<li><p>Metashape 360 to COLMAP Converter (free edition) * <a href="https://github.com/Kotohibi/Metashape%5C_360%5C_to%5C_COLMAP%5C_plane">https://github.com/Kotohibi/Metashape\_360\_to\_COLMAP\_plane</a></p>
</li>
<li><p>360 MCConverter (paid edition) * <a href="https://kotohibi.f5.si/360/">https://kotohibi.f5.si/360/</a></p>
</li>
</ul>
</li>
<li><p>(Optional) Additional license for estimating real-world scale in 3DCG</p>
<ul>
<li><p>Metashape 360 to COLMAP Converter includes a feature that estimates the real-world scale of 3DGS using a 2D marker called AprilTag. An additional license is required to use it. The following articles explain how to use AprilTag.</p>
</li>
<li><p>Add-on Real Scale 3DGS with AprilTag <a href="https://kotohibi-cg.booth.pm/items/8323677">https://kotohibi-cg.booth.pm/items/8323677</a></p>
</li>
<li><p>English version: <a href="https://x.gd/CoWJA">https://x.gd/CoWJA</a></p>
</li>
<li><p>Japanese version: <a href="https://x.gd/Isahb">https://x.gd/Isahb</a></p>
</li>
</ul>
</li>
</ul>
<h1>How This Guide Explains the Procedure</h1>
<p>The following sections mainly explain the processing flow. For detailed tool usage and option descriptions, refer to the following guide:</p>
<ul>
<li><a href="https://zenn.dev/kotohibi/articles/409bc16876b9e0">[EN]Easy&amp;Fast 3D Gaussian Splatting workflow with 360 Camera</a></li>
</ul>
<h1>Preparing Videos and Still Images</h1>
<p>This article explains 3DGS production using the following video materials as an example.<br /><strong>I strongly recommend matching exposure and color tone between the 360 camera and planar camera in development software beforehand. If exposure and color tone differ significantly, the 3DGS result will be worse.</strong></p>
<table>
<thead>
<tr>
<th>Camera type</th>
<th>Device</th>
<th>Format</th>
<th>Purpose</th>
</tr>
</thead>
<tbody><tr>
<td>360 camera</td>
<td>Insta 360 X3</td>
<td>Video</td>
<td>Reconstructing the entire scene</td>
</tr>
<tr>
<td>Planar camera</td>
<td>Drone-mounted camera</td>
<td>Video</td>
<td>Reconstructing the area of interest</td>
</tr>
</tbody></table>
<h1>Extracting Still Images and Generating Masks from 360 Video</h1>
<p>There are many ways to extract still images from video. Research and choose your preferred method. Here I introduce the tool I have published. <strong>Extract Sharpest Frame</strong> is a tool that extracts the sharpest image at specified frame intervals. <strong>New features are prioritized for updates in the BOOTH edition</strong></p>
<h2>Preparing a Custom Mask (Optional)</h2>
<p>In this example, the 360 camera is mounted under a drone, so the drone body appears in the upper half of the image. In such cases, create an image that masks the upper half and register it as a custom mask. The specified custom mask is automatically merged with YOLO and SAM3 masks. The custom mask must have the same image size as the original video. If you are using a drone with a built-in 360 camera such as DJI AVATA360, this step is not necessary.</p>
<table>
<thead>
<tr>
<th>Image</th>
<th>Custom mask</th>
</tr>
</thead>
<tbody><tr>
<td></td>
<td></td>
</tr>
</tbody></table>
<img src="https://static.zenn.studio/user-upload/eb20c47c14a3-20260711.png" alt="" style="display:block;margin:0 auto" />

<table style="min-width:25px"><colgroup><col style="min-width:25px"></col></colgroup><tbody><tr><td><p></p></td></tr></tbody></table>

<img src="https://static.zenn.studio/user-upload/83f846681ec2-20260711.png" alt="" style="display:block;margin:0 auto" />

<h2>Loading the Video</h2>
<p>Load the 360 video in Extract Sharpest Frame. This tool can batch-process multiple videos.</p>
<ul>
<li><p>If you turn on the "collect outputs from multiple videos into one folder" option, a sequential prefix is added to each video file, and the extracted still images are stored in one folder. Masks are also stored in one folder in the same way.</p>
<ul>
<li><p>Example still-image filenames when processing two video files</p>
<ul>
<li><p>Video 1 | Mask: 001_[output filename pattern], ...</p>
</li>
<li><p>Video 2 | Mask: 002_[output filename pattern], ...</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>The still-image extraction settings are shared. If you want to extract each video file with different conditions, run the extraction process multiple times.</p>
</li>
<li><p>In that case, by using the same Output folder and changing the Output pattern, you can avoid overwriting extracted files and collect them into the same folder.</p>
</li>
<li><p>You can limit the target timecode with "Start" and "End", which is useful for test runs.</p>
<img src="https://static.zenn.studio/user-upload/eba18c8753b5-20260711.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h2>SAM3 Mask Settings</h2>
<p>This tool can configure two types of SAM3 masks. The "SAM3 Mask 1" and "SAM3 Mask 2" tabs correspond to this feature. By separating masks for camera alignment and masks for 3DGS training, you can generate higher-quality 3DGS.</p>
<table>
<thead>
<tr>
<th>Purpose</th>
<th>Description</th>
<th>Example mask prompt</th>
<th>Mask example</th>
</tr>
</thead>
<tbody><tr>
<td>Camera alignment</td>
<td>Mask moving objects as much as possible</td>
<td>sky, cloud, tree, vehicle, drone, people</td>
<td></td>
</tr>
</tbody></table>
<img src="https://static.zenn.studio/user-upload/faedced638a5-20260711.png" alt="" style="display:block;margin:0 auto" />

<table style="min-width:100px"><colgroup><col style="min-width:25px"></col><col style="min-width:25px"></col><col style="min-width:25px"></col><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>3DGS training</p></td><td><p>Mask only the minimum necessary moving objects</p></td><td><p>drone, people</p></td><td><p></p></td></tr></tbody></table>

<img src="https://static.zenn.studio/user-upload/9c1d4fdd062d-20260711.png" alt="" style="display:block;margin:0 auto" />

<h1>Extracting Still Images and Generating Masks from Planar Video</h1>
<p>Next, extract still images and generate masks from the planar video. The method is the same as for the 360 video. In this article, the planar video is treated as a single file from a drone-mounted camera. Because the still images and masks should be collected into the same folder as the 360 processing results, specify the same output folder. <strong>Also, to avoid overwriting files, change the [Output filename pattern] to a non-overlapping name as shown below.</strong>  </p>
<table>
<thead>
<tr>
<th>Output filename pattern</th>
</tr>
</thead>
<tbody><tr>
<td><code>003_output_frame_%05d.png</code></td>
</tr>
</tbody></table>
<img src="https://static.zenn.studio/user-upload/df6dbf723c12-20260711.png" alt="" style="display:block;margin:0 auto" />

<h2>Tips</h2>
<p>Extract Sharpest Frame can create masks not only from videos, but also from still images. In that case, turn on the following [Still Image Mask Mode] and select the still-image folder.</p>
<img src="https://static.zenn.studio/user-upload/95e91ffdf05c-20260711.png" alt="" style="display:block;margin:0 auto" />

<h2>Folder Structure</h2>
<p>After still-image extraction and mask generation, the folder structure is as follows.</p>
<img src="https://static.zenn.studio/user-upload/2199d7a9c568-20260711.png" alt="" style="display:block;margin:0 auto" />

<table>
<thead>
<tr>
<th>Folder name / filename</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td>_batch_metadata</td>
<td>Temporary folder used when processing multiple videos</td>
</tr>
<tr>
<td>frames</td>
<td>Folder containing still images extracted from both 360 video and planar video</td>
</tr>
<tr>
<td>masks</td>
<td>Mask folder for Metashape camera alignment</td>
</tr>
<tr>
<td>masks2</td>
<td>Mask folder used during 3DGS training</td>
</tr>
<tr>
<td>_sharpness_metadata.csv</td>
<td>Metadata file generated after analyzing video frames</td>
</tr>
</tbody></table>
<h1>Performing Camera Alignment</h1>
<p>Next, perform camera alignment using Metashape Standard. Metashape can align still images extracted from both 360 video and planar video at once.</p>
<h2>Loading Still Images</h2>
<ul>
<li><p>Select [Workflow] -&gt; [Add Folder], then specify the "frames" folder above and load the extracted still images.  </p>
<img src="https://static.zenn.studio/user-upload/ef0b9210506f-20260711.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h2>Changing Camera Type</h2>
<ul>
<li><p>Select [Tools] -&gt; [Camera Calibration].  </p>
<img src="https://static.zenn.studio/user-upload/4cb38d3621e8-20260711.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<p>If the 360 images and planar images are loaded correctly, they are automatically separated into two image groups. Set "Camera type" to "Spherical" and "Frame" respectively.</p>
<table>
<thead>
<tr>
<th>360 images</th>
<th>Planar images</th>
</tr>
</thead>
<tbody><tr>
<td></td>
<td></td>
</tr>
</tbody></table>
<img src="https://static.zenn.studio/user-upload/608acb1d4604-20260711.png" alt="" style="display:block;margin:0 auto" />

<table style="min-width:25px"><colgroup><col style="min-width:25px"></col></colgroup><tbody><tr><td><p></p></td></tr></tbody></table>

<img src="https://static.zenn.studio/user-upload/0748febe4d91-20260711.png" alt="" style="display:block;margin:0 auto" />

<h2>Running Camera Alignment</h2>
<ul>
<li>Run it from [Workflow] -&gt; [Align Photos].</li>
</ul>
<h3>SfM Parameter Settings</h3>
<p>Here are two parameter examples I often use.</p>
<table>
<thead>
<tr>
<th>Example</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td></td>
<td></td>
</tr>
</tbody></table>
<img src="https://static.zenn.studio/user-upload/4caed23e96ea-20260711.png" alt="" style="display:block;margin:0 auto" />

<table style="min-width:25px"><colgroup><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>Turn ON "Generic preselection." It first matches photos at a low-precision setting, selects overlapping pairs, and then runs the main process. This is fast, but it can fail in some cases. If that happens, try the option below. For [<strong>Apply masks to</strong>], select [<strong>Key points</strong>].</p></td></tr><tr><td><p></p></td></tr></tbody></table>

<img src="https://static.zenn.studio/user-upload/697c6a240ca6-20260711.png" alt="" style="display:block;margin:0 auto" />

<table style="min-width:25px"><colgroup><col style="min-width:25px"></col></colgroup><tbody><tr><td><p>Turn OFF "Generic preselection." This performs full matching for all image pairs. Since it takes longer, set "Key point limit" to a smaller value. Set "Tie point limit" to 0 for unlimited points. For [<strong>Apply masks to</strong>], select [<strong>Key points</strong>].</p></td></tr></tbody></table>

<h2>Checking the Result</h2>
<p>If camera alignment succeeds, a result containing both 360 and planar images is displayed as shown below.  </p>
<img src="https://static.zenn.studio/user-upload/8ff05cf041b6-20260711.png" alt="" style="display:block;margin:0 auto" />

<h3>Clean up Tie points</h3>
<ul>
<li><p>Remove low-reliability Tie points to improve SfM accuracy. This is a very important step for high-detail 3DGS. Select [Tools] → [Tie Points] → [Clean Tie points].</p>
<img src="https://storage.googleapis.com/zenn-user-upload/0a473dbf0936-20260331.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Select [Reprojection error] and adjust the slider to remove about 5% of the Tie points.</p>
<img src="https://storage.googleapis.com/zenn-user-upload/ab01ff45f657-20260331.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>The number of Tie points is shown at the bottom left of the screen, so adjust the slider while checking how many Tie points will be removed.</p>
<img src="https://storage.googleapis.com/zenn-user-upload/50138c41ddda-20260331.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Click [Optimize Cameras] to optimize the cameras.</p>
<img src="https://storage.googleapis.com/zenn-user-upload/fedf8a3944ad-20260331.png" alt="" style="display:block;margin:0 auto" />
</li>
<li><p>Do the same for [Recostruction uncertainty], remove about 5% of the Tie points, and then run [Optimize Cameras] again.</p>
</li>
<li><p>Do the same for [Projection accuracy], remove about 5% of the Tie points, and then run [Optimize Cameras] again.</p>
</li>
<li><p>Repeat the above once more so that low-reliability Tie points are removed as much as possible.</p>
</li>
</ul>
<h3>Exporting SfM Results</h3>
<ul>
<li><p>Export Camera information Select [File] -&gt; [Export] -&gt; [Export Cameras], choose Agisoft XML (*.xml), and save.</p>
</li>
<li><p>Export Point Cloud Select [File] -&gt; [Export] -&gt; [Export Point Cloud], choose Stanford PLY (*.ply), and save.</p>
</li>
</ul>
<h1>Converting to COLMAP Cubemap</h1>
<ul>
<li><p>Expand the Metashape SfM results into COLMAP-format 6-direction Cubemap images. Here I introduce the tool I have published. <strong>Metashape 360 to COLMAP Converter</strong></p>
</li>
<li><p><strong>New features are prioritized for updates in the BOOTH edition</strong></p>
</li>
</ul>
<p>The basic usage is the same as in the guide below, but this time the 3DGS training masks generated earlier are used for Cubemap expansion.</p>
<ul>
<li><a href="https://zenn.dev/kotohibi/articles/409bc16876b9e0">[EN]Easy&amp;Fast 3D Gaussian Splatting workflow with 360 Camera</a></li>
</ul>
<h2>Setting a Custom Mask</h2>
<p>From the Custom Mask tab, set the folder path of the 3DGS training masks generated during still-image extraction.</p>
<img src="https://static.zenn.studio/user-upload/6a47c70a9548-20260711.png" alt="" style="display:block;margin:0 auto" />

<h2>Running the Conversion</h2>
<p>Press "Run Conversion" to start processing. At this point, a dialog appears indicating that planar images are included, but press "OK" to continue processing. 360 images are expanded into Cubemaps, while planar images are automatically undistorted using the pinhole model. Masks are also processed automatically in the same way.</p>
<h2>Advanced</h2>
<p>Starting with <strong>Metashape 360 to COLMAP Converter V1.2.0</strong>, the Overlap Filter (formerly Cubemap Filter) has been implemented. It detects overlap between Cubemaps expanded from 360 images and planar images, and can exclude the corresponding Cubemap faces. This increases the frequency with which the target area is trained from planar images, making it possible to improve the overall quality of 3DGS. For details, refer to the PDF included in the tool zip file. See my post on X: <a href="https://x.com/kotohibi%5C_3d/status/2078088377371681237">https://x.com/kotohibi\_3d/status/2078088377371681237</a></p>
<ul>
<li><p>When "Cubemap Filter" is turned ON, overlapping Cubemap regions are excluded.</p>
<img src="https://static.zenn.studio/user-upload/6f9291b54e04-20260718.png" alt="" style="display:block;margin:0 auto" />

  
</li>
<li><p>Result after excluding Cubemap faces.</p>
<img src="https://static.zenn.studio/user-upload/e7a24e2c143a-20260711.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h1>Training 3DGS</h1>
<p>Because the usage is the same as below, detailed steps are omitted.</p>
<ul>
<li><a href="https://zenn.dev/kotohibi/articles/409bc16876b9e0">[EN]Easy&amp;Fast 3D Gaussian Splatting workflow with 360 Camera</a></li>
</ul>
<h2>Checking the COLMAP Dataset Loading Result</h2>
<table>
<thead>
<tr>
<th>Postshot</th>
<th>LichtFeld Studio</th>
</tr>
</thead>
<tbody><tr>
<td></td>
<td></td>
</tr>
</tbody></table>
<img src="https://static.zenn.studio/user-upload/6b5d08b619c0-20260711.png" alt="" style="display:block;margin:0 auto" />

<table style="min-width:25px"><colgroup><col style="min-width:25px"></col></colgroup><tbody><tr><td><p></p></td></tr></tbody></table>

<img src="https://static.zenn.studio/user-upload/4dab801d0e33-20260711.png" alt="" style="display:block;margin:0 auto" />

<h2>3DGS Training Result</h2>
<p>As shown below, the quality of the area of interest captured with the planar camera improved.</p>
<table>
<thead>
<tr>
<th>Planar images only</th>
<th>360 images + planar images</th>
</tr>
</thead>
<tbody><tr>
<td></td>
<td></td>
</tr>
</tbody></table>
<img src="https://static.zenn.studio/user-upload/f27a55d861ff-20260711.jpg" alt="" style="display:block;margin:0 auto" />

<table style="min-width:25px"><colgroup><col style="min-width:25px"></col></colgroup><tbody><tr><td><p></p></td></tr></tbody></table>

<img src="https://static.zenn.studio/user-upload/ac49015f460c-20260711.jpg" alt="" style="display:block;margin:0 auto" />

<p>See my post on X: <a href="https://x.com/kotohibi%5C_3d/status/2048060928579850578">https://x.com/kotohibi\_3d/status/2048060928579850578</a></p>
<h2>Discussion</h2>
<table>
<thead>
<tr>
<th>Combination</th>
<th>Quality</th>
</tr>
</thead>
<tbody><tr>
<td>Planar images only</td>
<td>The 3DGS quality of the area of interest is the best. Reconstructing the entire scene requires a very large amount of effort.</td>
</tr>
<tr>
<td>360 images + planar images</td>
<td>The 3DGS quality is between "planar images only" and "360 images only." By capturing the entire scene with a 360 camera and the area of interest with a planar camera, this workflow achieves a good balance.</td>
</tr>
<tr>
<td>360 images only</td>
<td>This is the most efficient way to reconstruct the entire scene, but the reproducibility of the area of interest is not high.</td>
</tr>
</tbody></table>
]]></content:encoded></item></channel></rss>