SideScanSonarEditor: A Python package for annotation of side-scan sonar data

SideScanSonarEditor: A Python package for annotation of side-scan sonar data - Published in JOSS (2025)

https://github.com/michalmotylinski/sidescansonareditor

Science Score: 95.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 3 DOI reference(s) in README and JOSS metadata
  • Academic publication links
    Links to: zenodo.org
  • Committers with academic emails
    2 of 4 committers (50.0%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software
Last synced: 4 months ago · JSON representation

Repository

Simple GUI project intended for processing of side scan sonar data.

Basic Info
  • Host: GitHub
  • Owner: MichalMotylinski
  • License: gpl-3.0
  • Language: Python
  • Default Branch: master
  • Size: 6.4 MB
Statistics
  • Stars: 0
  • Watchers: 1
  • Forks: 2
  • Open Issues: 1
  • Releases: 7
Created almost 3 years ago · Last pushed 4 months ago
Metadata Files
Readme Contributing License

README.md

PyPI versionDOI

SideScanSonarEditor

SideScanSonarEditor is an open-source application designed for annotation of side-scan sonar data. The interpretation of side-scan sonar data is typically conducted using expensive proprietary software and annotation for the purpoeses training ML solutions requires use of multiple software applications and conversion between various formats. No open-source solutions currently exist that streamline this process, leaving researchers with time-consuming and fragmented tools. SideScanSonarEditor addresses this need by providing a free, open-source platform that simplifies visualization, annotation, and dataset preparation, enabling efficient integration with computer vision models.

Install and Requirements

The SideScanSonarEditor tool has been built and tested using Python 3.9 and requires following dependencies: - NumPy - opencv-python - Pillow - pyproj - PyQt6 - pyxtf - SciPy

To install through PyPI: python pip install SideScanSonarEditor

Or to install from source: 1. Clone the repository from GitHub:

```bash
git clone https://github.com/MichalMotylinski/SideScanSonarEditor.git
```
  1. SideScanSonarEditor can then be installed using pip. From top-level directory run:

    python pip install .

    to install dependencies listed in requirements.txt to your local python library.

Usage


After installation he app can be launched with: 1. Console command: bash SideScanSonarEditor 2. Import and run it from a Python script: python from SideScanSonarEditor import app app.main()

The SideScanSonarEditor was designed to read side-scan sonar data from XTF files and does not support any other input format or other sonar data.

Overview of the app \label{fig:overview}

Loading data and sonar image generation

Use "Open file" button to select and load XTF file. The app will automatically display the sonar image with default settings if no changes were made. The "Reload" button can be used to quickly reload the selected XTF file. It's primary use is to allow quick loading with new sonar data processing settings (Decimation, Stretch, Slant range correction)

The top left corner toolbox contains parameters used for initial processing of the data not sonar image. These changes are applied directly to raw data after loading from XTF file. Decimation - across track down sampling with 1-10 range where each level halves the number of horizontally processed data points. Stretch - Along track stretch factor which defines how many times each ping should be repeated. This method is applied to improve the visual representation of the features. The stretch factor by default is set to auto but it can be addjusted manually. The maximum slider value can be decreased or increased depending when needed. Slant range correction - Applying correction shows more realistic representation of the seafloor without water column.

Slant range corrected sonar image \label{fig:slant_range_correct}

Channel display settings

For each channel port and starboard there is a separate toolbox that allows changing of the color scheme, colour inversion as well as changing mapping ranges. Under each slider there is a minimum, current and maximum value to modify the slider itself. The step controls how much the current value changes across the selected range. Choosing very small step or large range may lead to skipping in the values so it is always adviced to keep the range of slider values below 300.

Toolboxes with channel parameters \label{fig:channel_parameters}

Drawing shapes

The tiles can be drawn without any object classes and exported for further processing but to draw the polygons at least one label must exist in the list of labels (upper left list). The labels can be loaded from a text file where each label has to be listed in a separate line for example: Boulder Debris Shipwreck ... Polygons examples \label{fig:polygons} Tiles examples \label{fig:tiles}

User can also add new labels manually with "Add label" button. The labels can be modified or removed using "Edit label" and "Remove label" accordingly. Add label prompt \label{fig:add_label}

The upper right list shows a list of drawn polygons and their classes. The checkbox can be used to hide or show a specific shape. To hide/show all shapes from the same class user can you checkboxes next to class names in upper left list.

The lower left list shows drawn tiles which can also be shown or hidden. The slider next to the list allows to modify the size of the tile before drawing.

The user can choose to display longitude and latitude of the current mouse position by supplying UTM zone number and ellipsoid model used. The function only accepts UTM projection type.

Longitude and Latitude present \label{fig:long_lat}

Finally user can save currently drawn shapes by clicking "Save labels". This creates 2 separate files holding polygons and tiles for the use by the app. These shapes are always loaded by the app if present in the same directory as XTF file. The "Crop tiles" button allows user to create a annotations file in a COCO format. Each image entry has additional key "side" which indicates from which channel the image was cropped. This might be helpful if user would like to perform further processing with the original XTF file using cropped coordinates. The remaining outlook of the file is unchanged and can be used directly for computer vision tasks. Excerpt from the annotations file \label{fig:annotations}

Author Contributions

  • Michal Motylinski: Software development, Design, Writing – Original Draft.
  • Prof. Andrew J. Plater: Supervision, Conceptualization, Writing – Review & Editing.
  • Dr. Jonathan E. Higham: Supervision, Conceptualization, Writing – Review & Editing.

License

This project is licensed under the GNU License.

Owner

  • Name: Michal Motylinski
  • Login: MichalMotylinski
  • Kind: user
  • Location: Liverpool
  • Company: University of Liverpool

PhD student at University of Liverpool

JOSS Publication

SideScanSonarEditor: A Python package for annotation of side-scan sonar data
Published
October 22, 2025
Volume 10, Issue 114, Page 8445
Authors
Michal Motylinski ORCID
Department of Geography and Planning, School of Environmental Sciences, University of Liverpool, Liverpool, UK
Andrew J. Plater ORCID
Department of Geography and Planning, School of Environmental Sciences, University of Liverpool, Liverpool, UK
Jonathan E. Higham ORCID
Department of Geography and Planning, School of Environmental Sciences, University of Liverpool, Liverpool, UK
Editor
Chris Vernon ORCID
Tags
Python package annotation side-scan sonar xtf

GitHub Events

Total
  • Create event: 8
  • Release event: 3
  • Issues event: 10
  • Watch event: 2
  • Issue comment event: 7
  • Public event: 1
  • Push event: 86
  • Pull request review event: 1
  • Pull request review comment event: 2
  • Pull request event: 1
  • Fork event: 2
Last Year
  • Create event: 8
  • Release event: 3
  • Issues event: 10
  • Watch event: 2
  • Issue comment event: 7
  • Public event: 1
  • Push event: 86
  • Pull request review event: 1
  • Pull request review comment event: 2
  • Pull request event: 1
  • Fork event: 2

Committers

Last synced: 5 months ago

All Time
  • Total Commits: 176
  • Total Committers: 4
  • Avg Commits per committer: 44.0
  • Development Distribution Score (DDS): 0.188
Past Year
  • Commits: 92
  • Committers: 3
  • Avg Commits per committer: 30.667
  • Development Distribution Score (DDS): 0.293
Top Committers
Name Email Commits
MichalMotylinski m****6@g****m 143
Michal Motylinski 4****i@u****m 25
MichalMotylinski m****m@l****k 6
Ross Barnowski r****r@c****u 2
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 5 months ago

All Time
  • Total issues: 6
  • Total pull requests: 1
  • Average time to close issues: about 1 month
  • Average time to close pull requests: N/A
  • Total issue authors: 2
  • Total pull request authors: 1
  • Average comments per issue: 0.83
  • Average comments per pull request: 0.0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 6
  • Pull requests: 1
  • Average time to close issues: about 1 month
  • Average time to close pull requests: N/A
  • Issue authors: 2
  • Pull request authors: 1
  • Average comments per issue: 0.83
  • Average comments per pull request: 0.0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • rossbar (5)
  • yephm (1)
Pull Request Authors
  • MichalMotylinski (1)
Top Labels
Issue Labels
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • pypi 100 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 10
  • Total maintainers: 1
pypi.org: sidescansonareditor

A Python package for editing side-scan sonar data.

  • Versions: 10
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 100 Last month
Rankings
Dependent packages count: 9.6%
Average: 31.7%
Dependent repos count: 53.9%
Maintainers (1)
Last synced: 4 months ago