<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: kotohibi</title>
    <description>The latest articles on DEV Community by kotohibi (@kotohibi).</description>
    <link>https://dev.to/kotohibi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4100136%2Fcba7f30b-518e-4fe4-b542-5b757fabb1a2.jpg</url>
      <title>DEV Community: kotohibi</title>
      <link>https://dev.to/kotohibi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kotohibi"/>
    <language>en</language>
    <item>
      <title>Mixed 3DGS Workflow with 360 Video and Planar Images</title>
      <dc:creator>kotohibi</dc:creator>
      <pubDate>Sat, 29 Aug 2026 10:48:14 +0000</pubDate>
      <link>https://dev.to/kotohibi/mixed-3dgs-workflow-with-360-video-and-planar-images-5g38</link>
      <guid>https://dev.to/kotohibi/mixed-3dgs-workflow-with-360-video-and-planar-images-5g38</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;This document is intended for users who:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand the following guide:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://zenn.dev/kotohibi/articles/409bc16876b9e0" rel="noopener noreferrer"&gt;[EN]Easy&amp;amp;Fast 3D Gaussian Splatting workflow with 360 Camera&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Have a general understanding of the 3DGS production workflow using a 360 camera&lt;/li&gt;
&lt;li&gt;Want to take the next step and create higher-quality 3DGS results&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;

&lt;p&gt;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.&lt;br&gt;
This workflow proposes a mixed workflow using both a 360 camera and a planar camera.&lt;br&gt;
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.&lt;/p&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Requirements
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;360 camera

&lt;ul&gt;
&lt;li&gt;DJI OSMO 360&lt;/li&gt;
&lt;li&gt;DJI AVATA 360&lt;/li&gt;
&lt;li&gt;Insta 360&lt;/li&gt;
&lt;li&gt;etc...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Planar camera&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mirrorless camera&lt;/li&gt;
&lt;li&gt;Action camera&lt;/li&gt;
&lt;li&gt;etc... &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;High-end PC and NVIDIA GPU&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Training 3DGS requires a high-performance GPU. In particular, more VRAM is better. I recommend a GPU with at least 12 GB of VRAM.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Metashape Standard (Professional edition is not supported)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Directly supports SfM with 360 images; extremely fast and robust.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.agisoft.com/features/standard-edition/" rel="noopener noreferrer"&gt;https://www.agisoft.com/features/standard-edition/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3D Gaussian Splatting software&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Postshot: &lt;a href="https://www.jawset.com/" rel="noopener noreferrer"&gt;https://www.jawset.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LichtFeld Studio (LFS): &lt;a href="https://github.com/MrNeRF/LichtFeld-Studio" rel="noopener noreferrer"&gt;https://github.com/MrNeRF/LichtFeld-Studio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Brush: &lt;a href="https://github.com/ArthurBrussee/brush" rel="noopener noreferrer"&gt;https://github.com/ArthurBrussee/brush&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Still-image extraction tool from video&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extract Sharpest Frame (free edition)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Kotohibi/Extract_sharpest_frame" rel="noopener noreferrer"&gt;https://github.com/Kotohibi/Extract_sharpest_frame&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;360 Extractor (paid edition)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kotohibi.f5.si/360/" rel="noopener noreferrer"&gt;https://kotohibi.f5.si/360/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Metashape 360 SfM to COLMAP-format Cubemap conversion tool&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Metashape 360 to COLMAP Converter (free edition)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Kotohibi/Metashape_360_to_COLMAP_plane" rel="noopener noreferrer"&gt;https://github.com/Kotohibi/Metashape_360_to_COLMAP_plane&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;360 MCConverter (paid edition)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kotohibi.f5.si/360/" rel="noopener noreferrer"&gt;https://kotohibi.f5.si/360/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(Optional) Additional license for estimating real-world scale in 3DCG&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Add-on Real Scale 3DGS with AprilTag &lt;a href="https://kotohibi-cg.booth.pm/items/8323677" rel="noopener noreferrer"&gt;https://kotohibi-cg.booth.pm/items/8323677&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;English version: &lt;a href="https://x.gd/CoWJA" rel="noopener noreferrer"&gt;https://x.gd/CoWJA&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Japanese version: &lt;a href="https://x.gd/Isahb" rel="noopener noreferrer"&gt;https://x.gd/Isahb&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  How This Guide Explains the Procedure
&lt;/h1&gt;

&lt;p&gt;The following sections mainly explain the processing flow. For detailed tool usage and option descriptions, refer to the following guide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;a href="https://zenn.dev/kotohibi/articles/409bc16876b9e0" rel="noopener noreferrer"&gt;[EN]Easy&amp;amp;Fast 3D Gaussian Splatting workflow with 360 Camera&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Preparing Videos and Still Images
&lt;/h1&gt;

&lt;p&gt;This article explains 3DGS production using the following video materials as an example.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;I strongly recommend matching exposure and color tone between the 360 camera and planar camera in development software beforehand.&lt;br&gt;
If exposure and color tone differ significantly, the 3DGS result will be worse.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Camera type&lt;/th&gt;
&lt;th&gt;Device&lt;/th&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;360 camera&lt;/td&gt;
&lt;td&gt;Insta 360 X3&lt;/td&gt;
&lt;td&gt;Video&lt;/td&gt;
&lt;td&gt;Reconstructing the entire scene&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Planar camera&lt;/td&gt;
&lt;td&gt;Drone-mounted camera&lt;/td&gt;
&lt;td&gt;Video&lt;/td&gt;
&lt;td&gt;Reconstructing the area of interest&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  Extracting Still Images and Generating Masks from 360 Video
&lt;/h1&gt;

&lt;p&gt;There are many ways to extract still images from video. Research and choose your preferred method.&lt;br&gt;
Here I introduce the tool I have published.&lt;br&gt;
&lt;strong&gt;Extract Sharpest Frame&lt;/strong&gt; is a tool that extracts the sharpest image at specified frame intervals.&lt;br&gt;
&lt;strong&gt;New features are prioritized for updates in the BOOTH edition&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparing a Custom Mask (Optional)
&lt;/h2&gt;

&lt;p&gt;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.&lt;br&gt;
The specified custom mask is automatically merged with YOLO and SAM3 masks.&lt;br&gt;
The custom mask must have the same image size as the original video.&lt;br&gt;
If you are using a drone with a built-in 360 camera such as DJI AVATA360, this step is not necessary.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Image&lt;/th&gt;
&lt;th&gt;Custom mask&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdvntzyyj8f6jypad898o.png" width="800" height="400"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4pnyqj0w9nvsf1jwkqby.png" width="800" height="400"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Loading the Video
&lt;/h2&gt;

&lt;p&gt;Load the 360 video in Extract Sharpest Frame. This tool can batch-process multiple videos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;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.

&lt;ul&gt;
&lt;li&gt;Example still-image filenames when processing two video files&lt;/li&gt;
&lt;li&gt;Video 1 | Mask: 001_[output filename pattern], ...&lt;/li&gt;
&lt;li&gt;Video 2 | Mask: 002_[output filename pattern], ...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The still-image extraction settings are shared. If you want to extract each video file with different conditions, run the extraction process multiple times.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;You can limit the target timecode with "Start" and "End", which is useful for test runs.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl6l516h8fmfn2yqqqn1z.png" width="652" height="859"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  SAM3 Mask Settings
&lt;/h2&gt;

&lt;p&gt;This tool can configure two types of SAM3 masks.&lt;br&gt;
The "SAM3 Mask 1" and "SAM3 Mask 2" tabs correspond to this feature.&lt;br&gt;
By separating masks for camera alignment and masks for 3DGS training, you can generate higher-quality 3DGS.&lt;br&gt;
|Purpose|Description|Example mask prompt|Mask example|&lt;br&gt;
|---|---|---|---|&lt;br&gt;
|Camera alignment|Mask moving objects as much as possible|sky, cloud, tree, vehicle, drone, people|&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzr2e8rsf3kmtfv07qlgk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzr2e8rsf3kmtfv07qlgk.png" width="800" height="686"&gt;&lt;/a&gt;|&lt;br&gt;
|3DGS training|Mask only the minimum necessary moving objects|drone, people|&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fksthezgton2jymszabhc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fksthezgton2jymszabhc.png" width="800" height="686"&gt;&lt;/a&gt;|&lt;/p&gt;

&lt;h1&gt;
  
  
  Extracting Still Images and Generating Masks from Planar Video
&lt;/h1&gt;

&lt;p&gt;Next, extract still images and generate masks from the planar video. The method is the same as for the 360 video.&lt;br&gt;
In this article, the planar video is treated as a single file from a drone-mounted camera.&lt;br&gt;
Because the still images and masks should be collected into the same folder as the 360 processing results, specify the same output folder.&lt;br&gt;
&lt;strong&gt;Also, to avoid overwriting files, change the [Output filename pattern] to a non-overlapping name as shown below.&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Output filename pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;003_output_frame_%05d.png&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F23u6s8zyud35bryt6syd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F23u6s8zyud35bryt6syd.png" width="652" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips
&lt;/h2&gt;

&lt;p&gt;Extract Sharpest Frame can create masks not only from videos, but also from still images.&lt;br&gt;
In that case, turn on the following [Still Image Mask Mode] and select the still-image folder.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa7niinjj0sjclxnb10sl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa7niinjj0sjclxnb10sl.png" width="646" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Folder Structure
&lt;/h2&gt;

&lt;p&gt;After still-image extraction and mask generation, the folder structure is as follows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftysg6g0e0y7wiae55msy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftysg6g0e0y7wiae55msy.png" width="237" height="142"&gt;&lt;/a&gt;&lt;br&gt;
|Folder name / filename|Description|&lt;br&gt;
|---|---|&lt;br&gt;
|_batch_metadata|Temporary folder used when processing multiple videos|&lt;br&gt;
|frames|Folder containing still images extracted from both 360 video and planar video|&lt;br&gt;
|masks|Mask folder for Metashape camera alignment|&lt;br&gt;
|masks2|Mask folder used during 3DGS training|&lt;br&gt;
|_sharpness_metadata.csv|Metadata file generated after analyzing video frames|&lt;/p&gt;

&lt;h1&gt;
  
  
  Performing Camera Alignment
&lt;/h1&gt;

&lt;p&gt;Next, perform camera alignment using Metashape Standard.&lt;br&gt;
Metashape can align still images extracted from both 360 video and planar video at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Loading Still Images
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Select [Workflow] -&amp;gt; [Add Folder], then specify the "frames" folder above and load the extracted still images.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foprxogxxwio9y3mt2dj2.png" width="160" height="324"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Changing Camera Type
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Select [Tools] -&amp;gt; [Camera Calibration].
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkjkwtiaxnxtu7bsnx2e4.png" width="172" height="376"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the 360 images and planar images are loaded correctly, they are automatically separated into two image groups.&lt;br&gt;
Set "Camera type" to "Spherical" and "Frame" respectively.&lt;br&gt;
|360 images|Planar images|&lt;br&gt;
|---|---|&lt;br&gt;
|&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fve0xlr7cycfm7ehl4pze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fve0xlr7cycfm7ehl4pze.png" width="647" height="645"&gt;&lt;/a&gt;|&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fea1oqbvvyljgw86ufyxc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fea1oqbvvyljgw86ufyxc.png" width="644" height="649"&gt;&lt;/a&gt;|&lt;/p&gt;

&lt;h2&gt;
  
  
  Running Camera Alignment
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Run it from [Workflow] -&amp;gt; [Align Photos].
### SfM Parameter Settings
Here are two parameter examples I often use.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgds40z9l5tubb5ys84uk.png" width="425" height="404"&gt;&lt;/td&gt;
&lt;td&gt;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 [&lt;strong&gt;Apply masks to&lt;/strong&gt;], select [&lt;strong&gt;Key points&lt;/strong&gt;].&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbovjjji5tgq46lw2fj26.png" width="465" height="440"&gt;&lt;/td&gt;
&lt;td&gt;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 [&lt;strong&gt;Apply masks to&lt;/strong&gt;], select [&lt;strong&gt;Key points&lt;/strong&gt;].&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Checking the Result
&lt;/h2&gt;

&lt;p&gt;If camera alignment succeeds, a result containing both 360 and planar images is displayed as shown below.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzjvv9c3l6ahxgor6gppr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzjvv9c3l6ahxgor6gppr.png" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Clean up Tie points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;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].
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgj61fq5xa8x39amuj2f7.png" width="349" height="145"&gt;
&lt;/li&gt;
&lt;li&gt;Select [Reprojection error] and adjust the slider to remove about 5% of the Tie points.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbzv082e176zd6odf4ic9.png" width="377" height="182"&gt;
&lt;/li&gt;
&lt;li&gt;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.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feee08mh86g2c4njm78cc.png" width="348" height="227"&gt;
&lt;/li&gt;
&lt;li&gt;Click [Optimize Cameras] to optimize the cameras.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq6al6zpmi18mxw99rk0x.png" width="174" height="234"&gt;
&lt;/li&gt;
&lt;li&gt;Do the same for [Recostruction uncertainty], remove about 5% of the Tie points, and then run [Optimize Cameras] again.&lt;/li&gt;
&lt;li&gt;Do the same for [Projection accuracy], remove about 5% of the Tie points, and then run [Optimize Cameras] again.&lt;/li&gt;
&lt;li&gt;Repeat the above once more so that low-reliability Tie points are removed as much as possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Exporting SfM Results
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Export Camera information
  Select [File] -&amp;gt; [Export] -&amp;gt; [Export Cameras], choose Agisoft XML (*.xml), and save.&lt;/li&gt;
&lt;li&gt;Export Point Cloud
  Select [File] -&amp;gt; [Export] -&amp;gt; [Export Point Cloud], choose Stanford PLY (*.ply), and save.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Converting to COLMAP Cubemap
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Expand the Metashape SfM results into COLMAP-format 6-direction Cubemap images.
Here I introduce the tool I have published.
&lt;strong&gt;Metashape 360 to COLMAP Converter&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New features are prioritized for updates in the BOOTH edition&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;a href="https://zenn.dev/kotohibi/articles/409bc16876b9e0" rel="noopener noreferrer"&gt;[EN]Easy&amp;amp;Fast 3D Gaussian Splatting workflow with 360 Camera&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setting a Custom Mask
&lt;/h2&gt;

&lt;p&gt;From the Custom Mask tab, set the folder path of the 3DGS training masks generated during still-image extraction.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fexft7dx48jyc2asgojgx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fexft7dx48jyc2asgojgx.png" width="582" height="809"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Running the Conversion
&lt;/h2&gt;

&lt;p&gt;Press "Run Conversion" to start processing.&lt;br&gt;
At this point, a dialog appears indicating that planar images are included, but press "OK" to continue processing.&lt;br&gt;
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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advanced
&lt;/h2&gt;

&lt;p&gt;Starting with &lt;strong&gt;Metashape 360 to COLMAP Converter V1.2.0&lt;/strong&gt;, 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.&lt;br&gt;
See my post on X: &lt;br&gt;
&lt;a href="https://x.com/kotohibi_3d/status/2078088377371681237" rel="noopener noreferrer"&gt;https://x.com/kotohibi_3d/status/2078088377371681237&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When "Cubemap Filter" is turned ON, overlapping Cubemap regions are excluded.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpqoubsojxfp8erc9y7md.png" width="760" height="529"&gt;

&lt;/li&gt;
&lt;li&gt;Result after excluding Cubemap faces.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffsfkhg9eaxcdq36t7nrq.png" width="800" height="456"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Training 3DGS
&lt;/h1&gt;

&lt;p&gt;Because the usage is the same as below, detailed steps are omitted.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;a href="https://zenn.dev/kotohibi/articles/409bc16876b9e0" rel="noopener noreferrer"&gt;[EN]Easy&amp;amp;Fast 3D Gaussian Splatting workflow with 360 Camera&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Checking the COLMAP Dataset Loading Result
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Postshot&lt;/th&gt;
&lt;th&gt;LichtFeld Studio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv2j9dqxx7t4o3rwio9lb.png" width="800" height="435"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd0lavs9q4jbhhkm2s9ys.png" width="800" height="434"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  3DGS Training Result
&lt;/h2&gt;

&lt;p&gt;As shown below, the quality of the area of interest captured with the planar camera improved.&lt;br&gt;
|Planar images only|360 images + planar images|&lt;br&gt;
|---|---|&lt;br&gt;
|&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2h0fxu0b2p187buiun1o.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2h0fxu0b2p187buiun1o.jpg" width="800" height="450"&gt;&lt;/a&gt;|&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7uzgsn4vz0sfnw53jt9c.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7uzgsn4vz0sfnw53jt9c.jpg" width="800" height="450"&gt;&lt;/a&gt;|&lt;/p&gt;

&lt;p&gt;See my post on X:&lt;br&gt;
&lt;a href="https://x.com/kotohibi_3d/status/2048060928579850578" rel="noopener noreferrer"&gt;https://x.com/kotohibi_3d/status/2048060928579850578&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Discussion
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Combination&lt;/th&gt;
&lt;th&gt;Quality&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Planar images only&lt;/td&gt;
&lt;td&gt;The 3DGS quality of the area of interest is the best. Reconstructing the entire scene requires a very large amount of effort.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;360 images + planar images&lt;/td&gt;
&lt;td&gt;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.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;360 images only&lt;/td&gt;
&lt;td&gt;This is the most efficient way to reconstruct the entire scene, but the reproducibility of the area of interest is not high.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>3dgs</category>
      <category>gaussian</category>
      <category>colmap</category>
      <category>metashape</category>
    </item>
    <item>
      <title>Easy&amp;Fast 3D Gaussian Splatting workflow with 360 Camera</title>
      <dc:creator>kotohibi</dc:creator>
      <pubDate>Sat, 29 Aug 2026 10:46:48 +0000</pubDate>
      <link>https://dev.to/kotohibi/easyfast-3d-gaussian-splatting-workflow-with-360-camera-c5i</link>
      <guid>https://dev.to/kotohibi/easyfast-3d-gaussian-splatting-workflow-with-360-camera-c5i</guid>
      <description>&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;

&lt;p&gt;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).&lt;/p&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;h3&gt;
  
  
  DJI AVATA360 examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/kotohibi_3d/status/2079907663895482456" rel="noopener noreferrer"&gt;https://x.com/kotohibi_3d/status/2079907663895482456&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/kotohibi_3d/status/2040724840504758578" rel="noopener noreferrer"&gt;https://x.com/kotohibi_3d/status/2040724840504758578&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/naribubu/status/2038881884558791088" rel="noopener noreferrer"&gt;https://x.com/naribubu/status/2038881884558791088&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://x.com/naribubu/status/2038875398717722743" rel="noopener noreferrer"&gt;https://x.com/naribubu/status/2038875398717722743&lt;/a&gt;
### DJI OSMO360 examples&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/kotohibi_3d/status/2088521899160879450" rel="noopener noreferrer"&gt;https://x.com/kotohibi_3d/status/2088521899160879450&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/kotohibi_3d/status/2082426800215654725" rel="noopener noreferrer"&gt;https://x.com/kotohibi_3d/status/2082426800215654725&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/kotohibi_3d/status/2074821581948481758" rel="noopener noreferrer"&gt;https://x.com/kotohibi_3d/status/2074821581948481758&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://x.com/kotohibi_3d/status/2038179454367957106" rel="noopener noreferrer"&gt;https://x.com/kotohibi_3d/status/2038179454367957106&lt;/a&gt;
# Requirements&lt;/li&gt;
&lt;li&gt;360° Camera

&lt;ul&gt;
&lt;li&gt;DJI OSMO360&lt;/li&gt;
&lt;li&gt;DJI AVATA360&lt;/li&gt;
&lt;li&gt;Insta360&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;High-end PC and NVIDIA GPU

&lt;ul&gt;
&lt;li&gt;Training 3DGS requires a high-performance GPU. In particular, more VRAM is better. I recommend a GPU with at least 12 GB of VRAM.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Metashape Standard (Not supported the Professional edition)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Directly supports SfM with omnidirectional images; extremely fast and robust.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.agisoft.com/features/standard-edition/" rel="noopener noreferrer"&gt;https://www.agisoft.com/features/standard-edition/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3D Gaussian Splatting software&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Postshot: &lt;a href="https://www.jawset.com/" rel="noopener noreferrer"&gt;https://www.jawset.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LichtFeld Studio (LFS): &lt;a href="https://github.com/MrNeRF/LichtFeld-Studio" rel="noopener noreferrer"&gt;https://github.com/MrNeRF/LichtFeld-Studio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Brush: &lt;a href="https://github.com/ArthurBrussee/brush" rel="noopener noreferrer"&gt;https://github.com/ArthurBrussee/brush&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Still-image extraction tool from video&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extract Sharpest Frame (Free edition)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Kotohibi/Extract_sharpest_frame" rel="noopener noreferrer"&gt;https://github.com/Kotohibi/Extract_sharpest_frame&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;360 Extractor (paid edition)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kotohibi.f5.si/360/" rel="noopener noreferrer"&gt;https://kotohibi.f5.si/360/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Metashape 360 SfM to COLMAP-format Cubemap conversion tool&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Metashape 360 to COLMAP Converter (Free edition)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Kotohibi/Metashape_360_to_COLMAP_plane" rel="noopener noreferrer"&gt;https://github.com/Kotohibi/Metashape_360_to_COLMAP_plane&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;360 MCConverter (paid edition)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kotohibi.f5.si/360/" rel="noopener noreferrer"&gt;https://kotohibi.f5.si/360/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(Optional) Additional license for estimating real-world scale in 3DCG&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Add-on Real Scale 3DGS with AprilTag &lt;a href="https://kotohibi-cg.booth.pm/items/8323677" rel="noopener noreferrer"&gt;https://kotohibi-cg.booth.pm/items/8323677&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;English version: &lt;a href="https://x.gd/CoWJA" rel="noopener noreferrer"&gt;https://x.gd/CoWJA&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Japanese version: &lt;a href="https://x.gd/Isahb" rel="noopener noreferrer"&gt;https://x.gd/Isahb&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Video Shooting (e.g. OSMO360)
&lt;/h1&gt;

&lt;p&gt;Attach the camera to a selfie stick and slowly walk through the area you want to capture.&lt;br&gt;&lt;br&gt;
Recommended video settings: D-Log M, 30 fps or higher.&lt;/p&gt;

&lt;h1&gt;
  
  
  Develop the Video
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Import the captured data into DJI Studio and perform color grading (color restoration).
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Apply the settings inside the red frame in the image below. Everything else can be left at default.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsxa3q36ujinxu5993ak6.png" width="800" height="430"&gt;
&lt;/li&gt;
&lt;li&gt;(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.

&lt;ul&gt;
&lt;li&gt;(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.
### Export the video
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Export as an MP4 omnidirectional video. Example settings are shown in the image below.&lt;/li&gt;
&lt;li&gt;When developing multiple clips, you can develop them together using "Multiple Clips." Extract Sharpest Frame can batch-process multiple videos.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq6vbvq4q9yyd2bl812kz.png" width="597" height="631"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Extract Still Images from Video
&lt;/h1&gt;

&lt;p&gt;There are many ways to extract still images from video. Research and choose your preferred method.&lt;br&gt;&lt;br&gt;
Here I introduce the tool I have published.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Extract Sharpest Frame&lt;/strong&gt; is a tool that extracts the sharpest image at specified frame intervals.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New features are prioritized for updates in the BOOTH edition&lt;/strong&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwy0hfx1cauxpiu683fe9.png" width="800" height="956"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Main Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Video file&lt;/td&gt;
&lt;td&gt;Select the omnidirectional video. Multiple videos can be selected and processed in a batch.&lt;br&gt;Note: File paths containing multibyte characters are not supported.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output folder&lt;/td&gt;
&lt;td&gt;Specify the folder where still images and masks will be saved. &lt;code&gt;frames&lt;/code&gt; and &lt;code&gt;masks&lt;/code&gt; folders will be created under this folder. You can also choose whether images extracted from multiple videos should be collected into a single folder.&lt;br&gt;Note: File paths containing multibyte characters are not supported.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scale width&lt;/td&gt;
&lt;td&gt;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.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chunk size&lt;/td&gt;
&lt;td&gt;Interval for extracting still images. For a 30 fps video, setting 30 extracts images every 1 second.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workers&lt;/td&gt;
&lt;td&gt;Number of processes used when calculating image sharpness. Around 4 is recommended.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Start (HH:MM:SS)&lt;/td&gt;
&lt;td&gt;Specify the time to start extraction. The format is HH:MM:SS.&lt;br&gt;If left blank, processing starts from the beginning of the video.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;End (HH:MM:SS)&lt;/td&gt;
&lt;td&gt;Specify the time to end extraction. The format is HH:MM:SS.&lt;br&gt;If left blank, processing continues to the end of the video.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remove similar frames&lt;/td&gt;
&lt;td&gt;Excludes similar frames. If Review is enabled, you can adjust the threshold during execution to control how many images are extracted.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pHash threshold&lt;/td&gt;
&lt;td&gt;Specifies the threshold for judging similar images. Higher values remove more images. This is useful when movement speed during shooting is irregular.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mask Generation&lt;/td&gt;
&lt;td&gt;Generates mask images for moving objects such as people and cars. This improves SfM accuracy in later steps.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SAM3 Dual Mask&lt;/td&gt;
&lt;td&gt;The latest version supports SAM3 masks. You can generate masks using any short sentence and preview the result with the Preview/Edit button. &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjcp9e6alfo6is1y81wez.png" width="800" height="203"&gt; &lt;a href="https://x.com/kotohibi_3d/status/2061044432837972367" rel="noopener noreferrer"&gt;https://x.com/kotohibi_3d/status/2061044432837972367&lt;/a&gt;&lt;br&gt;(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:&lt;br&gt;&lt;a href="https://t.co/X0uRH959RV" rel="noopener noreferrer"&gt;https://t.co/X0uRH959RV&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YOLO Mask&lt;/td&gt;
&lt;td&gt;[YOLO Class IDs]&lt;br&gt;Specify the class IDs to detect. 0: person, 1: bicycle, 2: car, etc. Multiple IDs can be specified comma-separated. &lt;a href="https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml" rel="noopener noreferrer"&gt;https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml&lt;/a&gt;&lt;br&gt;[YOLO Confidence]&lt;br&gt;Raising the threshold reduces false positives. Lowering it detects more objects but increases false positives.&lt;br&gt;[YOLO Model]&lt;br&gt;Model size and performance increase from yolo11n toward yolo11x, but so does processing load.&lt;br&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwhwaxroaep6hguf9bdv2.png" width="800" height="202"&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seam Mask&lt;/td&gt;
&lt;td&gt;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. &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyo499z9xgqcwfiba36hw.png" width="800" height="215"&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom Mask&lt;/td&gt;
&lt;td&gt;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.&lt;br&gt;&lt;small&gt;Note: Specify a PNG image with the same resolution as the video.&lt;/small&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analysis only&lt;/td&gt;
&lt;td&gt;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.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Save config&lt;/td&gt;
&lt;td&gt;Save the above settings as a configuration file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Load config&lt;/td&gt;
&lt;td&gt;Load a previously saved configuration file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run&lt;/td&gt;
&lt;td&gt;Execute processing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Execution Result
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Still images are extracted as shown below. Please check the SfM result in the next step and readjust the Chunk size if necessary.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx87sjovhmxtv8mwpimj8.png" width="800" height="506"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Masks are also generated automatically&lt;/strong&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzwzemucyld5vw7jtio3p.png" width="799" height="503"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Perform Camera Alignment (SfM)
&lt;/h1&gt;

&lt;p&gt;Use Metashape Standard, which can directly process omnidirectional images for SfM.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Load the extracted omnidirectional images
&lt;/h3&gt;

&lt;p&gt;[Workflow] → [Add Folder]&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F66dxrpewa78n9i4ofl73.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F66dxrpewa78n9i4ofl73.png" width="167" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Change Camera Type to Spherical
&lt;/h3&gt;

&lt;p&gt;Select [Tools] → [Camera Calibration] and set Camera type to Spherical.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcbrwik9a8ypljrk3qwha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcbrwik9a8ypljrk3qwha.png" width="675" height="690"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Load the mask images
&lt;/h3&gt;

&lt;p&gt;Select [File] → [Import] → [Import Masks].&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F15jbmzof4bk6rn4rkryc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F15jbmzof4bk6rn4rkryc.png" width="391" height="267"&gt;&lt;/a&gt;&lt;br&gt;
Use the settings below and click [OK]. Then a folder selection dialog will appear; select the mask folder generated by Extract Sharpest Frame.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set Filename template to &lt;code&gt;{filename}.png&lt;/code&gt; (the default is &lt;code&gt;{filename}_mask.png&lt;/code&gt;).
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjjll8pndpfpzahlirdmv.png" width="385" height="250"&gt;
### Set SfM parameters
Here are two parameter examples I often use.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fguced0sbrqp0rytdd3lj.png" width="425" height="404"&gt;&lt;/td&gt;
&lt;td&gt;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 [&lt;strong&gt;Apply masks to&lt;/strong&gt;], select [&lt;strong&gt;Key points&lt;/strong&gt;].&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgb4hgsk6twqp2apudm8y.png" width="465" height="440"&gt;&lt;/td&gt;
&lt;td&gt;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 [&lt;strong&gt;Apply masks to&lt;/strong&gt;], select [&lt;strong&gt;Key points&lt;/strong&gt;].&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Execute
&lt;/h3&gt;

&lt;p&gt;Click OK to run SfM.&lt;br&gt;&lt;br&gt;
Example result shown below. The spherical markers correspond to each omnidirectional image.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo98pwv5xs4sr87acdcwv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo98pwv5xs4sr87acdcwv.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Clean up Tie points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;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].
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgj61fq5xa8x39amuj2f7.png" width="349" height="145"&gt;
&lt;/li&gt;
&lt;li&gt;Select [Reprojection error] and adjust the slider to remove about 5% of the Tie points.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbzv082e176zd6odf4ic9.png" width="377" height="182"&gt;
&lt;/li&gt;
&lt;li&gt;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.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feee08mh86g2c4njm78cc.png" width="348" height="227"&gt;
&lt;/li&gt;
&lt;li&gt;Click [Optimize Cameras] to optimize the cameras.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq6al6zpmi18mxw99rk0x.png" width="174" height="234"&gt;
&lt;/li&gt;
&lt;li&gt;Do the same for [Recostruction uncertainty], remove about 5% of the Tie points, and then run [Optimize Cameras] again.&lt;/li&gt;
&lt;li&gt;Do the same for [Projection accuracy], remove about 5% of the Tie points, and then run [Optimize Cameras] again.&lt;/li&gt;
&lt;li&gt;Repeat the above once more so that low-reliability Tie points are removed as much as possible.
### Export SfM results

&lt;ul&gt;
&lt;li&gt;Export Camera information
[File] → [Export] → [Export Cameras] → Select Agisoft XML (*.xml) and save.&lt;/li&gt;
&lt;li&gt;Export Point Cloud
[File] → [Export] → [Export Point Cloud] → Select Stanford PLY (*.ply) and save.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Convert to COLMAP Cubemap
&lt;/h1&gt;

&lt;p&gt;Convert the Metashape SfM results into COLMAP-format 6-direction Cubemap images.&lt;br&gt;&lt;br&gt;
Here I introduce the tool I have published.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Metashape 360 to COLMAP Converter&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New features are prioritized for updates in the BOOTH edition&lt;/strong&gt;
### Settings ①
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmxh7lu19o30nupvkee43.png" width="800" height="913"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Main Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Input Images Folder&lt;/td&gt;
&lt;td&gt;Specify the folder containing the extracted omnidirectional images&lt;br&gt;Note: File paths containing multibyte characters are not supported.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Metashape XML&lt;/td&gt;
&lt;td&gt;Specify the Camera.xml from the SfM results&lt;br&gt;Note: File paths containing multibyte characters are not supported.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PLY File&lt;/td&gt;
&lt;td&gt;Specify the point_cloud.ply from the SfM results&lt;br&gt;Note: File paths containing multibyte characters are not supported.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output Folder&lt;/td&gt;
&lt;td&gt;Specify the folder where the Cubemap will be saved &lt;br&gt;Note: File paths containing multibyte characters are not supported.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crop Size&lt;/td&gt;
&lt;td&gt;Pixel size for the 6-direction crop. For OSMO360 8K video, 1920 is fine.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FoV&lt;/td&gt;
&lt;td&gt;Field of view for the 6-direction crop. 90° is fine.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max Images&lt;/td&gt;
&lt;td&gt;Upper limit on the number of omnidirectional images to process. Use a small value when testing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image Range&lt;/td&gt;
&lt;td&gt;Specify a range of omnidirectional images to process (useful for partial processing).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workers&lt;/td&gt;
&lt;td&gt;Number of processing threads. Adjust according to the number of CPU cores.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yaw Offset&lt;/td&gt;
&lt;td&gt;Add variation to the Cubemap Yaw angle. The specified angle is added to each Cubemap. 5–30° is recommended.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Save Config&lt;/td&gt;
&lt;td&gt;Save the above settings as a config file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run Conversion&lt;/td&gt;
&lt;td&gt;Start the Cubemap conversion process&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Settings ② : Mask Processing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;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.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi4oc9797hy43toj2ugwa.png" width="674" height="235"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Main Item&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mask Pass Mode&lt;/td&gt;
&lt;td&gt;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).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merge Mode&lt;/td&gt;
&lt;td&gt;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.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YOLO Class IDs&lt;/td&gt;
&lt;td&gt;Specify detected object IDs. 0: person, 1: bicycle, 2: car, etc. You can specify various moving objects. &lt;a href="https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml" rel="noopener noreferrer"&gt;https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YOLO Confidence&lt;/td&gt;
&lt;td&gt;Lowering the threshold increases detection rate but also increases noise.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enable overexposure mask&lt;/td&gt;
&lt;td&gt;Overexposed (blown-out) pixels can become noise during 3DGS training. Enable this if you want to remove them.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Settings ③ (Advanced Settings): Custom Mask
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;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.Reference: Google Slides -&amp;gt; &lt;a href="https://t.co/X0uRH959RV" rel="noopener noreferrer"&gt;https://t.co/X0uRH959RV&lt;/a&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2adxvjjq6a20n45j5bhw.png" width="667" height="146"&gt;
### Settings ④ (Advanced Settings): AprilTag&lt;/li&gt;
&lt;li&gt;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.

&lt;ul&gt;
&lt;li&gt;English version: &lt;a href="https://x.gd/CoWJA" rel="noopener noreferrer"&gt;https://x.gd/CoWJA&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Japanese version: &lt;a href="https://x.gd/Isahb" rel="noopener noreferrer"&gt;https://x.gd/Isahb&lt;/a&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvud6l8olii1imxt7zjbk.png" width="678" height="233"&gt;
### Settings ⑤ (Advanced Settings): Overlap Filter&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;See the &lt;a href="https://zenn.dev/kotohibi/articles/a14d2ff4fc205c" rel="noopener noreferrer"&gt;[EN]Mixed 3DGS Workflow with 360 Video and Planar Images&lt;/a&gt; guide.&lt;/li&gt;
&lt;li&gt;The ZIP file downloaded from BOOTH includes a detailed PDF operation manual. Please refer to it.&lt;/li&gt;
&lt;li&gt;Reference: &lt;a href="https://x.com/kotohibi_3d/status/2078088377371681237" rel="noopener noreferrer"&gt;https://x.com/kotohibi_3d/status/2078088377371681237&lt;/a&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb4k5t9odqucsj1419e9c.png" width="675" height="356"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Settings ⑥ (Advanced Settings): Cubemap Reduction
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;This feature reduces the number of Cubemaps while minimizing 3DGS quality loss. It can shorten 3DGS training time and reduce VRAM usage.&lt;/li&gt;
&lt;li&gt;The ZIP file downloaded from BOOTH includes a detailed PDF operation manual. Please refer to it.&lt;/li&gt;
&lt;li&gt;Reference: &lt;a href="https://x.com/kotohibi_3d/status/2086408535768973659" rel="noopener noreferrer"&gt;https://x.com/kotohibi_3d/status/2086408535768973659&lt;/a&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1il58uhmcf3xnx1i7lme.png" width="676" height="304"&gt;
### Execute
After processing completes successfully, the following folders and files are generated in the output folder.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmxhbrl37b2jz7gowk4az.png" width="140" height="210"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  (Postshot) 3D Gaussian Splatting Training
&lt;/h1&gt;

&lt;p&gt;Here I explain the workflow using Postshot.&lt;/p&gt;

&lt;h3&gt;
  
  
  Import Cubemap
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdmgkq0ymbl9fbporta51.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdmgkq0ymbl9fbporta51.png" width="302" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, drag &amp;amp; drop the Images folder, cameras.txt, images.txt, and points3D.txt into Postshot.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mask Settings
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbag8o98oijmmrkldajjg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbag8o98oijmmrkldajjg.png" width="472" height="750"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next, drag &amp;amp; drop the masks folder into the Image Masks area in Postshot.
Select &lt;strong&gt;Remove Background&lt;/strong&gt; for Mask Mode.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cubemap Import Result
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm4eukln017upfur4cb7l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm4eukln017upfur4cb7l.png" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once the Cubemap is successfully imported, you will see a screen like the one above.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Start 3DGS Training
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Here is an example of training parameters I use for wide-area 3DGS. Adjust parameters according to your scene.&lt;/li&gt;
&lt;li&gt;Turn on Photometric Compensation.&lt;/li&gt;
&lt;li&gt;Change Max Splat Count according to the scale of the scene (3,000-12,000 kSplats).&lt;/li&gt;
&lt;li&gt;Adjust Max Sph.Hrm.Degree (1-3). If VRAM is limited, I recommend 1.&lt;/li&gt;
&lt;li&gt;Stop Training After is calculated automatically according to the number of images.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8vxiujxniystrn1vouzy.png" width="522" height="474"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3DGS Training Result
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd2694b649p9w73bmt4vd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd2694b649p9w73bmt4vd.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As training progresses, you should start seeing the 3DGS!&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  (LichtFeld Studio) 3D Gaussian Splatting Training
&lt;/h1&gt;

&lt;p&gt;Here I explain the workflow using LichtFeld Studio (LFS).&lt;/p&gt;

&lt;h3&gt;
  
  
  Import Cubemap
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select [File] → [Import Dataset], then specify the &lt;code&gt;Output Folder&lt;/code&gt; from Metashape 360 to COLMAP Converter.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqmxojfej0vy9eo5kf075.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqmxojfej0vy9eo5kf075.png" width="142" height="376"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the data is detected correctly, a dialog like the one below appears. Confirm the contents and click [Load] to continue.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq85mghicfw4qllmxwuof.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq85mghicfw4qllmxwuof.png" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once the data is loaded correctly, you will see a screen like the one below.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgnh9bn5x2u6qzjuics2e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgnh9bn5x2u6qzjuics2e.png" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Start 3DGS Training
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mask settings

&lt;ul&gt;
&lt;li&gt;Select [Training Parameters] → [Mask Mode] → [Ignore].&lt;/li&gt;
&lt;li&gt;Turn off [Alpha Mask].&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Training parameters

&lt;ul&gt;
&lt;li&gt;Here is an example of settings I often use.&lt;/li&gt;
&lt;li&gt;I recommend [Strategy] → &lt;a href="https://dev.toat%20the%20time%20this%20article%20was%20written"&gt;MRNF&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Adjust &lt;code&gt;Max Gaussians&lt;/code&gt; according to the scale of the scene (3,000,000-12,000,000).&lt;/li&gt;
&lt;li&gt;Adjust &lt;code&gt;SH Degree&lt;/code&gt; (1-3). If VRAM is limited, I recommend 1.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Iterations&lt;/code&gt; and &lt;code&gt;Steps Scaler&lt;/code&gt; are calculated automatically according to the number of images.&lt;/li&gt;
&lt;li&gt;With MRNF, changes to the other parameters are usually not very necessary.&lt;/li&gt;
&lt;li&gt;LFS has many parameters, so please research on the web and find the best settings for your scene.&lt;/li&gt;
&lt;li&gt;Recently, Bilateral Grid is often turned off because PPISP is sufficient in many cases.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9m730fe9bextmd7kkwj1.png" width="437" height="665"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click [Start Training] to begin 3DGS training.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3DGS Training Result
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;As training progresses, you should start seeing the 3DGS!
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2qzujg4cfwvx2bmnki4h.jpg" width="800" height="430"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Finally
&lt;/h1&gt;

&lt;p&gt;There are many 3DGS methods, and this article is just one example. I will continue sharing the latest information on my X account.&lt;br&gt;&lt;br&gt;
Please research on your own and develop even better techniques. Enjoy 3DGS :)  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;my X: &lt;a href="https://x.com/kotohibi_3d" rel="noopener noreferrer"&gt;https://x.com/kotohibi_3d&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;3DGS pipeline guide: &lt;a href="https://github.com/Kotohibi/3DGS_pipeline_guide" rel="noopener noreferrer"&gt;https://github.com/Kotohibi/3DGS_pipeline_guide&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gaussian</category>
      <category>colmap</category>
      <category>metashape</category>
      <category>3dgs</category>
    </item>
  </channel>
</rss>
