Skip to content

ladisk/mssp-image-tutorial

Repository files navigation

An Open-source Supported Guide to High-speed Camera Based Structural Dynamics Identification

Code repository for the tutorial paper published in Mechanical Systems and Signal Processing.

D. Gorjup, K. Zaletelj, J. Slavič, An Open-source Supported Tutorial to High-speed Camera Based Structural Dynamics Identification, Mechanical Systems and Signal Processing, TODO (TODO). DOI: TODO

The measured data is published separately as an open dataset on Zenodo: 10.5281/zenodo.21476609 (CC BY 4.0).


Setup

Python 3.11+ is required.

# Clone (no Git LFS required)
git clone git@github.com:domengorjup/mssp-image-tutorial.git
cd mssp-image-tutorial

# Create virtual environment and install dependencies
python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate
pip install -r requirements.txt

# Register the kernel and launch the notebook
python -m ipykernel install --user --name=mssp-tutorial
jupyter notebook image_based_dynamics_tutorial.ipynb

The measured data is not part of the repository — it is downloaded from Zenodo by the notebook itself, in section 2.1. See Measured data below.


Repository structure

image_based_dynamics_tutorial.ipynb   # main tutorial notebook
methods/                              # reusable Python modules
    data.py                           # on-demand download of the measured data from Zenodo
    calibration.py                    # intrinsic and extrinsic camera calibration
    triangulation.py                  # DLT point triangulation and ODS reconstruction
    modal.py                          # FRF estimation and modal analysis utilities
    visualization.py                  # plotting and animation helpers
    utils.py                          # general utilities (I/O, image loading)
data/
    results/image_displacements/      # precomputed LK optical-flow displacements (in repository)
    plate_speckle.png                 # speckle pattern image for visualization (in repository)
    mraw/                             # Photron videos, two views      ─┐
    measured_signals/                 # force and acceleration signals  │ downloaded
    calibration/                      # checkerboard calibration images │ from Zenodo
    .zenodo/                          # download markers (do not edit) ─┘

Measured data

All measurements are published as a citable Zenodo printer-bed dataset and downloaded on demand. The repository pins the version DOI 10.5281/zenodo.21476609, not the concept DOI, so that every reader obtains byte-identical files and reproduces the exact results reported in the paper.

Archive Size MD5 Extracts to
mraw.zip 442.7 MB c1e3fd2e2aa1b59ea686f136411e2041 data/mraw/
measured_signals.zip 9.3 MB bb93d8be17476b1ea13d8f148cde9fb9 data/measured_signals/
calibration.zip 1.9 MB f10eb0d63ce2a919cdd53100c3ed3fe3 data/calibration/

The notebook calls ensure_dataset() in section 2.1, before the data is first used. It can also be called directly:

from methods.data import ensure_dataset

ensure_dataset()                     # all archives (~450 MB on first run)
ensure_dataset('calibration')        # a single archive

The function is safe to re-run. Data already in place is detected via marker files in data/.zenodo/ and skipped without any network access, so re-running a notebook cell costs nothing. Each archive is verified against the MD5 checksum published in the Zenodo record before extraction; a mismatch raises an error rather than proceeding with corrupt data. An interrupted download or extraction leaves no marker behind, so the next call simply fetches the dataset again.

Slow or unreliable connection? Download any of the archives manually from the record page and place them in data/. ensure_dataset() verifies their checksums, extracts them, and skips the download.


Measurement

The example printer-bed dataset consists of a sine-sweep excitation experiment on a suspended thin plate (3D-printer bed) with a speckle pattern, recorded sequentially from two camera views.

  • Excitation: swept-sine, 60–500 Hz
  • Views: 2 (multi-view for 3-D displacement reconstruction using frequency-domain triangulation)
  • Repetitions: 4 (view 0) / 1 (view 1) — used for ensemble-averaged FRF estimation
  • Camera: Photron high-speed, downsampled to 384×384 px at 1000 fps for the provided example data
  • Force and acceleration sampled at 25600 Hz (DAQ), clipped to camera Nyquist (500 Hz) during analysis

Provided data (HDF5)

All precomputed data is stored in HDF5 format, readable without any proprietary software. Load with methods.utils.load_hdf5 or directly with h5py.

data/measured_signals/view_0[_02|_03|_04].hdf5 (downloaded from Zenodo)

Force and acceleration time series for the 4 view-0 repetitions.

InputTask/
    data          float64 (51200, 3)   columns: force [N], acceleration [m/s²], trigger
    time          float64 (51200,)     time axis [s]
    channel_names str list             ['force', 'acc', 'trigger']
    sample_rate   int                  25600 [Hz]

data/measured_signals/view_1.hdf5 (downloaded from Zenodo)

Same structure, single repetition for view 1.

data/results/image_displacements/idi_lk_displacements[_02|_03|_04].hdf5 (in repository)

Lucas–Kanade optical-flow displacements for each measurement repetition. These are derived results, computed from the videos by the notebook, and are included in the repository so that the modal analysis can be run without repeating the tracking.

view 0    float64 (100, 2000, 2)   displacements [px] — axes: (point, frame, [v, u])
view 1    float64 (100, 2000, 2)

Citation

Please cite both the paper and the dataset.

@article{gorjup2026tutorial,
  author  = {Gorjup, Domen and Zaletelj, Klemen and Slavi\v{c}, Janko},
  title   = {An Open-source Supported Guide to High-speed Camera Based Structural Dynamics Identification},
  journal = {Mechanical Systems and Signal Processing},
  year    = {TODO},
  volume  = {TODO},
  pages   = {TODO},
  doi     = {TODO},
}

@dataset{gorjup2026dataset,
  author    = {Gorjup, Domen and Zaletelj, Klemen and Slavi\v{c}, Janko},
  title     = {Printer-bed dataset: high-speed-camera and accelerometer modal
               measurements of a suspended 3D-printer bed},
  year      = {2026},
  publisher = {Zenodo},
  doi       = {10.5281/zenodo.21476609},
  url       = {https://doi.org/10.5281/zenodo.21476609},
}

Authors

  • Domen Gorjup — University of Ljubljana, Faculty of Mechanical Engineering
  • Klemen Zaletelj — University of Ljubljana, Faculty of Mechanical Engineering
  • Janko Slavič — University of Ljubljana, Faculty of Mechanical Engineering

About

Supporting example code for An Open-source Supported Guide to High-speed Camera Based Structural Dynamics Identification

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages