# Exploitation of historical analog seismological records by image processing and machine learning

Polina Lemenkova

► To cite this version:

Polina Lemenkova. Exploitation of historical analog seismological records by image processing and machine learning. Doctoral. Bruxelles, Belgique, Belgium. 2023, pp.68. hal-04612863

HAL Id: hal-04612863

https://hal.science/hal-04612863

Submitted on 14 Jun 2024

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>

Distributed under a Creative Commons Attribution 4.0 International License
<figure><img src="image_1.png" /></figure>

HAL
open science

# Exploitation of historical analog seismological records by image processing and machine learning

Polina Lemenkova

► To cite this version:

Polina Lemenkova. Exploitation of historical analog seismological records by image processing and machine learning. Doctoral. Bruxelles, Belgique, Belgium. 2023, pp.68. hal-04612863

HAL Id: hal-04612863

https://hal.science/hal-04612863v1

Submitted on 14 Jun 2024

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_2.png" /></figure>

Distributed under a Creative Commons Attribution 4.0 International License
Exploitation of
historical analog
seismological
records by image
processing and
machine learning

<figure><img src="image_2.png" /></figure>

**SUPERVISORS** Prof. Dr. Olivier DEBEIR (ULB) and Dr. Thomas LECOCQ (Royal Observatory of Belgium, Department of Seismology and Gravimetry, co-promoteur)

**PRESENTATION PLACE** Université Libre de Bruxelles, École polytechnique de Bruxelles (Brussels Faculty of Engineering), Laboratory of Image Synthesis and Analysis (LISA).

**DATE** 02.V.2023

**PRESENTER** Polina Lemenkova
# Exploitation of historical analog seismological records by image processing and machine learning

<figure><img src="image_3.png" /></figure>

**SUPERVISORS** Prof. Dr. Olivier DEBEIR (ULB) and Dr. Thomas LECOCQ (Royal Observatory of Belgium, Department of Seismology and Gravimetry, co-promoteur)

**PRESENTATION PLACE** Université Libre de Bruxelles, École polytechnique de Bruxelles (Brussels Faculty of Engineering), Laboratory of Image Synthesis and Analysis (LISA).

**DATE** 02.V.2023

**PRESENTER** Polina Lemenkova
# Part 1.

Project Objectives and Goals.
Data (Seismograms), Data Source (ROB)
Instruments (Galitzine Seismographer).
# Part 1.

Project Objectives and Goals.
Data (Seismograms), Data Source (ROB)
Instruments (Galitzine Seismographer).
# Research Object and Problem

* Study object => historical scanned seismograms in TIFF format from the archives of Royal Observatory of Belgium (ROB), Department of Seismology & Gravimetry.

* Study area => Uccle station (see map).

* Study problem => to digitise large archive of the old paper-based seismograms from ROB quickly, accurately and automatically.

Study area: location of Uccle seismic station, Belgium

Digital elevation data: GEBCO/SRTM, 15 arc sec resolution grid

<figure><img src="image_3.png" /></figure>

<figure><img src="image_4.png" /></figure>

2021 Oct 29 11:26:51

<figure><img src="image_5.png" /></figure>
# Research Object and Problem

* Study object => historical scanned seismograms in TIFF format from the archives of Royal Observatory of Belgium (ROB), Department of Seismology & Gravimetry.

* Study area => Uccle station (see map).

* Study problem => to digitise large archive of the old paper-based seismograms from ROB quickly, accurately and automatically.

Study area: location of Uccle seismic station, Belgium

Digital elevation data: GEBCO/SRTM, 15 arc sec resolution grid

<figure><img src="image_4.png" /></figure>

<figure><img src="image_5.png" /></figure>

2021 Oct 29 11:26:51

<figure><img src="image_6.png" /></figure>
Publication results of the Part 1 of the PhD project:

De Plaen, R. S. M.; Lecocq, T.; Lemenkova, P. ; Debeir, O.; Ardhuin, F.;

De Carlo, M. Extracting Microseismic Ground Motion From Legacy Seismograms. In: *Proceedings of the Third European Conference on Earthquake Engineering and Seismology*, 2022-09-04: Bucharest, Romania. Conspress, Ed. 1, pp. 3507-3513. Publié, 2022-09-09.

<figure><img src="image_6.png" /></figure>

<figure><img src="image_7.png" /></figure>

**Extracting Microseismic Ground Motion From Legacy Seismograms**

**De Plaen Raphael** - Seismology-Gravimetry, Royal Observatory of Belgium, Brussels, Belgium, raphael.deplaen@gmail.com

**Lecocq Thomas** - Seismology-Gravimetry, Royal Observatory of Belgium, Brussels, Belgium, thomas.lecocq@seismology.be

**Polina Lemenkova** - Université Libre de Bruxelles, Brussels Faculty of Engineering, Laboratory of Image Synthesis and Analysis, Brussels, Belgium, polina.lemenkova@ulb.be

**Olivier Debeir** - Université Libre de Bruxelles, Brussels Faculty of Engineering, Laboratory of Image Synthesis and Analysis, Brussels, Belgium, olivier.debeir@ulb.be

**Fabrice Ardhuin** - Laboratoire d'Océanographie Spatiale, Institut Français de Recherche pour l'Exploitation de la Mer, Plouzané, France, fabrice.ardhuin@ifremer.fr

**Marine De Carlo** - Laboratoire d'Océanographie Spatiale, Institut Français de Recherche pour l'Exploitation de la Mer, Plouzané, France, marine.de.carlo@ifremer.fr

**Abstract**

Before digital recordings became available in the 1970s, the ground motion was recorded using ink on white paper, scratching black-smoked paper, or light on photographic paper. While those analog seismic records offer unique continuous observations from the last century, most of them are now stacked and archived in boxes and potentially exposed to physical decay and permanent loss. To preserve those records and ultimately subject them to modern methods of analysis, it is time-sensitive to scan and digitize them. Here, we worked on a method for automatic digitization of paper seismograms using image processing and machine learning to extract microseismic ground-motion periods and amplitudes. We implemented the method on legacy data recorded at the Royal Observatory of Belgium to extract power spectral densities for major storms during the last century, which are compared with modeled microseisms levels computed using a numerical ocean wave model. This further shows how digitizing analog seismograms does not only preserve the scientific legacy but also makes new research possible by bringing analog data to the digital age.

**Keywords:** analog seismograms; seismic noise; oceanic storms; digitalization; machine learning; oceanic climate

**1. Introduction**

The Royal Observatory of Belgium (ROB) has been operating seismic stations since the late 19th century with the first instrument, a von Rebeur-Ehlert triple horizontal pendulum
Publication results of the Part 1 of the PhD project:

De Plaen, R. S. M.; Lecocq, T.; Lemenkova, P. ; Debeir, O.; Ardhuin, F.;
De Carlo, M. Extracting Microseismic Ground Motion From Legacy
Seismograms. In: Proceedings of the Third European Conference on
Earthquake Engineering and Seismology, 2022-09-04: Bucharest,
Romania. Conspress, Ed. 1, pp. 3507-3513. Publié, 2022-09-09.

<figure><img src="image_7.png" /></figure>

<figure><img src="image_8.png" /></figure>

Extracting Microseismic Ground Motion From Legacy Seismograms

**De Plaen Raphael** - Seismology-Gravimetry, Royal Observatory of Belgium, Brussels, Belgium,
raphael.deplaen@gmail.com

**Lecocq Thomas** - Seismology-Gravimetry, Royal Observatory of Belgium, Brussels, Belgium,
thomas.lecocq@seismology.be

**Polina Lemenkova** - Université Libre de Bruxelles, Brussels Faculty of Engineering, Laboratory of Image Synthesis and Analysis, Brussels, Belgium, polina.lemenkova@ulb.be

**Olivier Debeir** - Université Libre de Bruxelles, Brussels Faculty of Engineering, Laboratory of Image Synthesis and Analysis, Brussels, Belgium, olivier.debeir@ulb.be

**Fabrice Ardhuin** - Laboratoire d'Océanographie Spatiale, Institut Français de Recherche pour l'Exploitation de la Mer, Plouzané, France, fabrice.ardhuin@ifremer.fr

**Marine De Carlo** - Laboratoire d'Océanographie Spatiale, Institut Français de Recherche pour l'Exploitation de la Mer, Plouzané, France, marine.de.carlo@ifremer.fr

Abstract

Before digital recordings became available in the 1970s, the ground motion was recorded using ink on white paper, scratching black-smoked paper, or light on photographic paper. While those analog seismic records offer unique continuous observations from the last century, most of them are now stacked and archived in boxes and potentially exposed to physical decay and permanent loss. To preserve those records and ultimately subject them to modern methods of analysis, it is time-sensitive to scan and digitize them. Here, we worked on a method for automatic digitization of paper seismograms using image processing and machine learning to extract microseismic ground-motion periods and amplitudes. We implemented the method on legacy data recorded at the Royal Observatory of Belgium to extract power spectral densities for major storms during the last century, which are compared with modeled microseisms levels computed using a numerical ocean wave model. This further shows how digitizing analog seismograms does not only preserve the scientific legacy but also makes new research possible by bringing analog data to the digital age.

**Keywords:** analog seismograms; seismic noise; oceanic storms; digitalization; machine learning; oceanic climate

1. Introduction

The Royal Observatory of Belgium (ROB) has been operating seismic stations since the late 19th century with the first instrument, a von Rebeur-Ehlert triple horizontal pendulum
# Data and Instrument

* There are various types of seismometers used in geophysics. In this study we used archived seismograms recorded in 1954 by the Galitzine seismometer in Uccle station.

* Currently dataset included a collection of 145 images from 1 January 1954 to 12 March 1954

* The period will be gradually enlarged as soon as other seismograms are scanned to cover 70 last years.

* The most of the images are monochrome (B/W). Some other images are scanned in colour (RGB).

* Some of the images are well preserved, some have distortions and defects visible on the aged paper

<figure><img src="image_8.png" /><figcaption>Instrument used for data capture in 1954: Horizontal Galitzine seismometer located in UCC. Image source: courtesy of ROB. Photo: Raphaël S. M. De Plaen</figcaption></figure>
Data and Instrument

* There are various types of seismometers used in geophysics. In this study we used archived seismograms recorded in 1954 by the Galitzine seismometer in Uccle station.

* Currently dataset included a collection of 145 images from 1 January 1954 to 12 March 1954

* The period will be gradually enlarged as soon as other seismograms are scanned to cover 70 last years.

* The most of the images are monochrome (B/W). Some other images are scanned in colour (RGB).

* Some of the images are well preserved, some have distortions and defects visible on the aged paper

<figure><img src="image_9.png" /><figcaption>Instrument used for data capture in 1954:
Horizontal Galitzine seismometer located in UCC.
Image source: courtesy of ROB. Photo: Raphaël S. M. De Plaen</figcaption></figure>
# Research Questions

**What** are the best ML/DL approaches for automatic processing of seismograms? – Develop an effective repetitive workflow.

<figure><img src="image_9.png" /></figure>

**Methods & Approaches**

<figure><img src="image_10.png" /></figure>

**How** to assess and interpret signals using seismic data in a semi-automated and automated regimes?

<figure><img src="image_11.png" /></figure>

**Algorithms**

<figure><img src="image_12.png" /></figure>

**How** does seismic activity differs by years in Uccle station area (time-series analysis of large data 1950s+)?

<figure><img src="image_13.png" /></figure>

**Data Analysis**

<figure><img src="image_14.png" /></figure>

<figure><img src="image_15.png" /></figure>

<figure><img src="image_16.png" /></figure>

**Processing & Modelling**

<figure><img src="image_17.png" /></figure>

**How** to effectively process and model big datasets of atchived seismograms with minimised human workflow and maximised automatisation ?

**ML/DL**

<figure><img src="image_18.png" /></figure>

**How** to effectively train machine to identify timing for fully automated data processing (hours and minute marks/gaps)?
# Research Questions

**What** are the best ML/DL approaches for automatic processing of seismograms? – Develop an effective repetitive workflow.

## Methods & Approaches

<figure><img src="image_10.png" /></figure>

<figure><img src="image_11.png" /></figure>

**How** to assess and interpret signals using seismic data in a semi-automated and automated regimes?

## Algorithms

<figure><img src="image_12.png" /></figure>

<figure><img src="image_13.png" /></figure>

**How** does seismic activity differs by years in Uccle station area (time-series analysis of large data 1950s+)?

## Data Analysis

<figure><img src="image_14.png" /></figure>

<figure><img src="image_15.png" /></figure>

<figure><img src="image_16.png" /></figure>

<figure><img src="image_17.png" /></figure>

## Processing & Modelling

<figure><img src="image_18.png" /></figure>

<figure><img src="image_19.png" /></figure>

**How** to effectively process and model big datasets of atchived seismograms with minimised human workflow and maximised automatisation ?

## ML/DL

<figure><img src="image_20.png" /></figure>

**How** to effectively train machine to identify timing for fully automated data processing (hours and minute marks/gaps)?
Examples of the raw data: paper-based seismograms

<figure><img src="image_19.png" /></figure>

Empty records between the lines of seismic traces with enlarged fragment of seismogram. Here: UCC19540106Gal_N_0811.TIFF

<figure><img src="image_20.png" /></figure>

Continuous noise dark background with blurred traces => lack of contrast for image recognition. Here: UCC19540108Gal_N_0815.TIFF

<figure><img src="image_21.png" /></figure>

Partially spotted image caused by storage, with enlarged fragment of seismogram. Here: UCC19540107Gal_N_0815.TIFF

<figure><img src="image_22.png" /></figure>

Overlapped traces => problems for recognition of trace direction during vectorising. Here: UCC19540112Gal_E_0750.TIFF

PROBLEMS ARE CAUSED BY TECHNIQUES OF OLD SEISMOGRAM RECORDING + TIME (SPOTS, BLURS, BROKEN PAPER, ETC.)
# Examples of the raw data: paper-based seismograms

<figure><img src="image_21.png" /></figure>

Empty records between the lines of seismic traces with enlarged fragment of seismogram. Here: UCC19540106Gal_N_0811.TIFF

<figure><img src="image_22.png" /></figure>

Continuous noise dark background with blurred traces => lack of contrast for image recognition. Here: UCC19540108Gal_N_0815.TIFF

<figure><img src="image_23.png" /></figure>

Partially spotted image caused by storage, with enlarged fragment of seismogram. Here: UCC19540107Gal_N_0815.TIFF

<figure><img src="image_24.png" /></figure>

Overlapped traces => problems for recognition of trace direction during vectorising. Here: UCC19540112Gal_E_0750.TIFF

**PROBLEMS ARE CAUSED BY TECHNIQUES OF OLD SEISMOGRAM RECORDING + TIME (SPOTS, BLURS, BROKEN PAPER, ETC.)**
# Actuality, Importance and Research Tasks

* *Manual digitising cannot* provide accurate and rapid data processing for developing digitised big dataset of archived seismograms

* *Seismic data cannot be processed* manually and require *automatization and programming approaches*

* *We need to process big archives of seismic data from ROB* effectively and quickly but accurately and precisely

* *We need to analyse data with* minimised human labour to derive information on earthquakes and ground motion

<figure><img src="image_23.png" /></figure>

Example of the digitised seismograms using DigitSeis

So far there are no existing integrated studies of digitising seismograms in big data volumes by ML methods. Only selected software exist (e.g. DigitSeis, SKATE, Teseo)
# Actuality, Importance and Research Tasks

* *Manual digitising cannot* provide accurate and rapid data processing for developing digitised big dataset of archived seismograms

* *Seismic data cannot be processed* manually and require *automatization and programming approaches*

* *We need to process big archives of seismic data from ROB* effectively and quickly but accurately and precisely

* *We need to analyse data with* minimised human labour to derive information on earthquakes and ground motion

<figure><img src="image_25.png" /></figure>

Example of the digitised seismograms using DigitSeis

So far there are no existing integrated studies of digitising seismograms in big data volumes by ML methods. Only selected software exist (e.g. DigitSeis, SKATE, Teseo)
# Interdisciplinary Nature of Project

* Complexity of geophysical data processing requires integrated approaches

* The multi-disciplinary aspects of this PhD project consist of tight links between the two disciplines : **computer science** (software development, programming algorithms and tools) and **geophysics** (seismology).

* Applying ML to digitising seismograms brings new possibilities and benefits in seismology.

* Advantages of ML =>> accurate and rapid digitising of the scanned images, rapid processing of historical seismograms, improved techniques of automated recognition of signals and data interpreting.

<figure><img src="image_24.png" /></figure>
# Interdisciplinary Nature of Project

* Complexity of geophysical data processing requires integrated approaches

* The multi-disciplinary aspects of this PhD project consist of tight links between the two disciplines : **computer science** (software development, programming algorithms and tools) and **geophysics** (seismology).

* Applying ML to digitising seismograms brings new possibilities and benefits in seismology.

* Advantages of ML =>> accurate and rapid digitising of the scanned images, rapid processing of historical seismograms, improved techniques of automated recognition of signals and data interpreting.

<figure><img src="image_26.png" /></figure>
# Project Motivation, Strengths and Challenges

<figure><img src="image_25.png" /></figure>

## Strengths of Big Data

Large amount of
seismograms.
Ground motions can
be detected from
digital datasets

<figure><img src="image_26.png" /></figure>

## Why old seismograms ?

Old seismograms
provide valuable
information for
retrospective
geophysical modelling.

<figure><img src="image_27.png" /></figure>

## Needs

We need to digitise
seismograms
automatically,
effectively and
rapidly

<figure><img src="image_28.png" /></figure>

## Solutions

ML is a solution
to process old
scanned
seismograms as
big raster data

<figure><img src="image_29.png" /><figcaption>Old scanned raster seismogram (TIFF file)</figcaption></figure>

<figure><img src="image_30.png" /><figcaption>Fragment of the vectorised output (DigitSeis)</figcaption></figure>
# Project Motivation, Strengths and Challenges

<figure><img src="image_27.png" /></figure>

## Strengths of Big Data

Large amount of
seismograms.
Ground motions can
be detected from
digital datasets

<figure><img src="image_28.png" /></figure>

## Why old seismograms ?

Old seismograms
provide valuable
information for
retrospective
geophysical modelling.

<figure><img src="image_29.png" /></figure>

## Needs

We need to digitise
seismograms
automatically,
effectively and
rapidly

<figure><img src="image_30.png" /></figure>

## Solutions

ML is a solution
to process old
scanned
seismograms as
big raster data

<figure><img src="image_31.png" /><figcaption>Old scanned raster seismogram (TIFF file)</figcaption></figure>

<figure><img src="image_32.png" /><figcaption>Fragment of the vectorised output (DigitSeis)</figcaption></figure>
# Various Approaches in One Study: Overlapping Disciplines

Our project presents an interdisciplinary research combining overlapping scientific clusters and engineering disciplines (image processing, geophysics, ML and data science).

A multi-disciplinary project integrates 3 major scientific clusters and several disciplines as subsections for vectorising seismograms:

1. Image Processing, Pattern Recognition, Computer Science, Programming, ML

2. Earth Observation data (ROB, Uccle archive), Geophysics and Seismology, Geology, Earthquake Engineering

3. Data Science, Data Analysis, Signal Processing Algorithms of Digitising & Vectorising

<figure><img src="image_31.png" /></figure>
# Various Approaches in One Study: Overlapping Disciplines

Our project presents an interdisciplinary research combining overlapping scientific clusters and engineering disciplines (image processing, geophysics, ML and data science).

A multi-disciplinary project integrates 3 major scientific clusters and several disciplines as subsections for vectorising seismograms:

1. Image Processing, Pattern Recognition, Computer Science, Programming, ML

2. Earth Observation data (ROB, Uccle archive), Geophysics and Seismology, Geology, Earthquake Engineering

3. Data Science, Data Analysis, Signal Processing Algorithms of Digitising & Vectorising

<figure><img src="image_33.png" /></figure>
# Goals and Objectives of my PhD Project

## PhD Thesis

**Education**
PhD activities: 60 ETCS credits, thesis, presentations, conferences, seminars

<figure><img src="image_32.png" /></figure>

## Research

**Publications**
Writing journals articles with my supervisors (Drs. O.Debeir and T. Lecocq) to publish in journals

<figure><img src="image_33.png" /></figure>

## Methods

**Algorithms**
Developing and testing advanced approaches to automated vectorising

<figure><img src="image_34.png" /></figure>

## Datasets

**Data Analysis**
Data-driven techniques of ML to analyse large seismic archives of ROB (1950s+)

<figure><img src="image_35.png" /></figure>

## Vectorising

**Image Processing**
Automated recognition of seismic traces by R2V techniques applied for ROB archived data

<figure><img src="image_36.png" /></figure>

<figure><img src="image_37.png" /></figure>
# Goals and Objectives of my PhD Project

## PhD Thesis

**Education**
PhD activities: 60 ETCS credits, thesis, presentations, conferences, seminars

<figure><img src="image_34.png" /></figure>

## Research

**Publications**
Writing journals articles with my supervisors (Drs. O.Debeir and T. Lecocq) to publish in journals

<figure><img src="image_35.png" /></figure>

## Methods

**Algorithms**
Developing and testing advanced approaches to automated vectorising

<figure><img src="image_36.png" /></figure>

## Datasets

**Data Analysis**
Data-driven techniques of ML to analyse large seismic archives of ROB (1950s+)

<figure><img src="image_37.png" /></figure>

## Vectorising

**Image Processing**
Automated recognition of seismic traces by R2V techniques applied for ROB archived data

<figure><img src="image_38.png" /></figure>

<figure><img src="image_39.png" /></figure>
# Activities Towards Achieving Project Goals

<figure><img src="image_38.png" /></figure>
# Activities Towards Achieving Project Goals

<figure><img src="image_40.png" /></figure>
# Summary of Project Milestones and Approaches

<figure><img src="image_39.png" /></figure>

<figure><img src="image_40.png" /></figure>

<figure><img src="image_41.png" /></figure>

<figure><img src="image_42.png" /></figure>
# Summary of Project Milestones and Approaches

<figure><img src="image_41.png" /></figure>

<figure><img src="image_42.png" /></figure>

<figure><img src="image_43.png" /></figure>

<figure><img src="image_44.png" /></figure>
# Part 2.

## Data Management: Using Cytomine as a Workspace for Data Storage, Organising, and Control
# Part 2.

## Data Management:
Using Cytomine as a Workspace
for Data Storage,
Organising, and Control
# Why using Cytomine for Processing Seismostorm Project ?

<figure><img src="image_43.png" /></figure>
# Why using Cytomine for Processing Seismostorm Project ?

<figure><img src="image_45.png" /></figure>
# Cytomine for data storage, sharing and analysis

<figure><img src="image_44.png" /></figure>

* Data were placed on the Cytomine environment (Cytomine), developed by the ULiège team.

* We uploaded our TIFF images into our project.

* Originally designed as a tool for biomedical image processing, Cytomine is adopted in this study for geophysical data processing using seismograms.

* The dataset contains 145 files recorded in 1954 by Galitzine seismometer.

## View of the Seismostorm project and file browsing system

* The workspace containing seismic dataset is shared by users (collaborators of Seismostorm)

* Navigating in Cytomine => paths and hierarchical structure of the project

<figure><img src="image_45.png" /><figcaption>## Content of files in the Seismostorm project in Cytomine</figcaption></figure>

Cytomine is an image analysis workspace to contain, organise, visualise, annotate and analyse images.
# Cytomine for data storage, sharing and analysis

<figure><img src="image_46.png" /></figure>

* Data were placed on the Cytomine environment (Cytomine), developed by the ULiège team.

* We uploaded our TIFF images into our project.

* Originally designed as a tool for biomedical image processing, Cytomine is adopted in this study for geophysical data processing using seismograms.

* The dataset contains 145 files recorded in 1954 by Galitzine seismometer.

## View of the Seismostorm project and file browsing system

* The workspace containing seismic dataset is shared by users (collaborators of Seismostorm)

* Navigating in Cytomine => paths and hierarchical structure of the project

<figure><img src="image_47.png" /><figcaption>Content of files in the Seismostorm project in Cytomine</figcaption></figure>

Cytomine is an image analysis workspace to contain, organise, visualise, annotate and analyse images.
# Creating ontologies in Cytomine for objects recognition

* Ontologies generated in Seismostorm project in Cytomine enable to class shapes for automated recognition

* Segments, start hours ticks and flares detected as object classes on the scanned images

<figure><img src="image_46.png" /></figure>

Hour ticks, minute ticks and various categories detected as object classes on the images

Examples of the detected and annotated object classes on the scanned seismograms
# Creating ontologies in Cytomine for objects recognition

* Ontologies generated in Seismostorm project in Cytomine enable to class shapes for automated recognition

* Segments, start hours ticks and flares detected as object classes on the scanned images

<figure><img src="image_48.png" /></figure>

Hour ticks, minute ticks and various categories detected as object classes on the images

Examples of the detected and annotated object classes on the scanned seismograms
# Examples of detecting cases in seismograms in Cytomine

<figure><img src="image_47.png" /></figure>

Hour ticks on the seismograms recorded by the seismometer drum

Examples of the detected and annotated object classes on the scanned seismograms

Segments separated as fragments on the trace lines
# Examples of detecting cases in seismograms in Cytomine

<figure><img src="image_49.png" /></figure>

## Examples of the detected and annotated object classes on the scanned seismograms

## Segments separated as fragments on the trace lines
# Examples of marking time gaps (minutes/hours) on seismograms in Cytomine

<figure><img src="image_48.png" /></figure>

Manual hour marks for handwritten annotations on the old scanned image

Examples of the annotation classes on the raw data: scanned analog seismograms from the Uccle station.
# Examples of marking time gaps (minutes/hours) on seismograms in Cytomine

<figure><img src="image_50.png" /></figure>

Manual hour marks for handwritten annotations on the old scanned image

Examples of the annotation classes on the raw data: scanned analog seismograms from the Uccle station.
Examples of marking time gaps (minutes/hours) on seismograms in Cytomine

Minute marks detected, recognised and
classified using ‘ontologies’ of Cytomine
on the TIFF files

<figure><img src="image_49.png" /></figure>

Flares detected on the old scanned
raster images of the analog
seismograms

Examples of the annotation classes on the raw data: scanned analog seismograms from the Uccle station.
## Examples of marking time gaps (minutes/hours) on seismograms in Cytomine

<figure><img src="image_51.png" /></figure>

Flares detected on the old scanned raster images of the analog seismograms

Examples of the annotation classes on the raw data: scanned analog seismograms from the Uccle station.

Minute marks detected, recognised and classified using 'ontologies' of Cytomine on the TIFF files
# Part 2.
## Application of DigitSeis Software for Vectorising Seismograms
# Part 2.
## Application of DigitSeis Software for Vectorising Seismograms
<figure><img src="image_50.png" /></figure>

<figure><img src="image_51.png" /></figure>

**Abstract:** Archived seismograms recorded in the 20th century present a valuable source of information for monitoring earthquake activity. However, old data, which are only available as scanned paper-based images should be digitised and converted from raster to vector format prior to reuse for geophysical modelling. Seismograms have special characteristics and specific features recorded by a seismometer and encrypted in the images: signal trace lines, minute time gaps, timing and wave amplitudes. This information should be recognised and interpreted automatically when processing archives of seismograms containing large collections of data. The objective was to automatically digitise historical seismograms obtained from the archives of the Royal Observatory of Belgium (ROB). The images were originally recorded by the Galitzine seismometer in 1954 in Uccle seismic station, Belgium. A dataset included 145 TIFF images which required automatic approach of data processing. Software for digitising seismograms are limited and many have disadvantages. We applied the DigitSeis for machine-based vectorisation and reported here a full workflow of data processing. This included pattern recognition, classification, digitising, corrections and converting TIFFs to the digital vector format. The generated contours of signals were presented as time series and converted into digital format (mat files) which indicated information on ground motion signals contained in analog seismograms. We performed the quality control of the digitised traces in Python to evaluate the discriminating functionality of seismic signals by DigitSeis. We shown a robust approach of DigitSeis as a powerful toolset for processing analog seismic signals. The graphical visualisation of signal traces and analysis of the performed vectorisation results shown that the algorithms of data processing performed accurately and can be recommended in similar applications of seismic signal processing in future related works in geophysical research.

**Keywords:** seismology; Galitzine seismometer; horizontal component; analogue seismogram; digitising; earthquake recording; ground motions; historical seismograms; seismic waves

## 1. Introduction

### 1.1. Background

The seismicity of the Earth represents a physical phenomenon resulting from the tectonic processes of energy accumulation and release [1]. This fundamental concept of the Earth's physics is reflected in the movements on the surface that have a different intensity of the vibrations caused by the fluctuations of energy [2]. In geodynamics, the seismicity is the result of the self-organisation of the Earth which responds to the lithosphere movements [3]. Measuring seismic signals using seismometers enables to evaluate ground motions of the Earth associated with the earthquakes of various magnitude or ambient seismic noise [4]. Evaluating seismic ambient noise is effective in different contexts, including imaging and monitoring the Earth's interior, seismic mapping at a global or regional scale, environmental

<figure><img src="image_52.png" /></figure>

check for
updates

**Citation:** Lemenkova, P.; De Plaen, R.; Lecocq, T.; Debeir, O. Computer Vision Algorithms of DigitSeis for Building a Vectorised Dataset of Historical Seismograms from the Archive of Royal Observatory of Belgium. *Sensors* **2023**, *23*, 56. https://doi.org/10.3390/s23010056

Academic Editor: Marcin Woźniak

Received: 17 October 2022

Revised: 4 December 2022

Accepted: 15 December 2022

Published: 21 December 2022

<figure><img src="image_53.png" /></figure>

**Copyright:** © 2022 by the authors. Licensee MDPI, Basel, Switzerland. This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license (https://creativecommons.org/licenses/by/4.0/).

## Publication results of the Part 2 of the PhD project:

Lemenkova, P.; De Plaen, R.; Lecocq, T.; Debeir, O. Computer Vision Algorithms of DigitSeis for Building a Vectorised Dataset of Historical Seismograms from the Archive of Royal Observatory of Belgium. *Sensors* **2023**, *23*, 56. https://doi.org/10.3390/s23010056

### Journal metrics: Scopus, WoS, Journal Ranking in JCR: Q2 (Instruments & Instrumentation) / CiteScore - Q1 (Instrumentation)

<figure><img src="image_54.png" /></figure>

<footnote n="1">¹ Laboratory of Image Synthesis and Analysis (LISA), École Polytechnique de Bruxelles (Brussels Faculty of Engineering), Université Libre de Bruxelles (ULB), Building L, Campus de Solbosch, Avenue Franklin Roosevelt 50, BE-1050 Brussels, Belgium</footnote>

<footnote n="2">² Royal Observatory of Belgium, Seismology & Gravimetry (OD2), Avenue Circulaire 3, BE-1180 Uccle, Belgium</footnote>

<footnote>* Correspondence: polina.lemenkova@ulb.be; Tel.: +32-471-86-04-59</footnote>
<figure><img src="image_52.png" /></figure>

<figure><img src="image_53.png" /></figure>

**Abstract:** Archived seismograms recorded in the 20th century present a valuable source of information for monitoring earthquake activity. However, old data, which are only available as scanned paper-based images should be digitised and converted from raster to vector format prior to reuse for geophysical modelling. Seismograms have special characteristics and specific features recorded by a seismometer and encrypted in the images: signal trace lines, minute time gaps, timing and wave amplitudes. This information should be recognised and interpreted automatically when processing archives of seismograms containing large collections of data. The objective was to automatically digitise historical seismograms obtained from the archives of the Royal Observatory of Belgium (ROB). The images were originally recorded by the Galitzine seismometer in 1954 in Uccle seismic station, Belgium. A dataset included 145 TIFF images which required automatic approach of data processing. Software for digitising seismograms are limited and many have disadvantages. We applied the DigitSeis for machine-based vectorisation and reported here a full workflow of data processing. This included pattern recognition, classification, digitising, corrections and converting TIFFs to the digital vector format. The generated contours of signals were presented as time series and converted into digital format (mat files) which indicated information on ground motion signals contained in analog seismograms. We performed the quality control of the digitised traces in Python to evaluate the discriminating functionality of seismic signals by DigitSeis. We shown a robust approach of DigitSeis as a powerful toolset for processing analog seismic signals. The graphical visualisation of signal traces and analysis of the performed vectorisation results shown that the algorithms of data processing performed accurately and can be recommended in similar applications of seismic signal processing in future related works in geophysical research.

**Keywords:** seismology; Galitzine seismometer; horizontal component; analogue seismogram; digitising; earthquake recording; ground motions; historical seismograms; seismic waves

## 1. Introduction

### 1.1. Background

The seismicity of the Earth represents a physical phenomenon resulting from the tectonic processes of energy accumulation and release [1]. This fundamental concept of the Earth's physics is reflected in the movements on the surface that have a different intensity of the vibrations caused by the fluctuations of energy [2]. In geodynamics, the seismicity is the result of the self-organisation of the Earth which responds to the lithosphere movements [3]. Measuring seismic signals using seismometers enables to evaluate ground motions of the Earth associated with the earthquakes of various magnitude or ambient seismic noise [4]. Evaluating seismic ambient noise is effective in different contexts, including imaging and monitoring the Earth's interior, seismic mapping at a global or regional scale, environmental

<figure><img src="image_54.png" /></figure>

check for
updates

**Citation:** Lemenkova, P.; De Plen, R.; Lecocq, T.; Debeir, O. Computer Vision Algorithms of DigitSeis for Building a Vectorised Dataset of Historical Seismograms from the Archive of Royal Observatory of Belgium. *Sensors* **2023**, *23*, 56.

https://doi.org/10.3390/s23010056

Academic Editor: Marcin Woźniak

Received: 17 October 2022

Revised: 4 December 2022

Accepted: 15 December 2022

Published: 21 December 2022

<figure><img src="image_55.png" /></figure>

**Copyright:** © 2022 by the authors.
Licensee MDPI, Basel, Switzerland.
This article is an open access article
distributed under the terms and
conditions of the Creative Commons
Attribution (CC BY) license (https://
creativecommons.org/licenses/by/
4.0/).

## Publication results of the Part 2 of the PhD project:

Lemenkova, P.; De Plen, R.; Lecocq, T.; Debeir, O. Computer Vision Algorithms of DigitSeis for Building a Vectorised Dataset of Historical Seismograms from the Archive of Royal Observatory of Belgium. *Sensors* **2023**, *23*, 56. https://doi.org/10.3390/s23010056

### Journal metrics: Scopus, WoS, Journal Ranking in JCR: Q2 (Instruments & Instrumentation) / CiteScore - Q1 (Instrumentation)

<figure><img src="image_56.png" /></figure>

<footnote n="1">¹ Laboratory of Image Synthesis and Analysis (LISA), École Polytechnique de Bruxelles (Brussels Faculty of Engineering), Université Libre de Bruxelles (ULB), Building L, Campus de Solbosch, Avenue Franklin Roosevelt 50, BE-1050 Brussels, Belgium</footnote>

<footnote n="2">² Royal Observatory of Belgium, Seismology & Gravimetry (OD2), Avenue Circulaire 3, BE-1180 Uccle, Belgium</footnote>

<footnote>* Correspondence: polina.lemenkova@ulb.be; Tel.: +32-471-86-04-59</footnote>
# Research Approach of DigitSeis: Major Steps of Seismic Data Processing

## Pre-processing

Image loading (export TIFF files), Identifying time gaps (1 minute breaks of trace lines), often 12-20 pixels.

## Correcting

Manual corrections of the misclassified segments by enlarging small sections. Converting to .mat format.

<figure><img src="image_55.png" /></figure>

## Classification

Discriminating traces from time gaps and noise (handwritten annotations), object recognition by image analysis (thresholds).

## Vectorisation

Automatic discrimination of traces, noise, time gaps and background (algorithm of golden-section search).
# Research Approach of DigitSeis: Major Steps of Seismic Data Processing

## Pre-processing

Image loading (export TIFF files), Identifying time gaps (1 minute breaks of trace lines), often 12-20 pixels.

## Correcting

Manual corrections of the misclassified segments by enlarging small sections. Converting to .mat format.

<figure><img src="image_57.png" /></figure>

## Classification

Discriminating traces from time gaps and noise (handwritten annotations), object recognition by image analysis (thresholds).

## Vectorisation

Automatic discrimination of traces, noise, time gaps and background (algorithm of golden-section search).
# Workflow of DigitSeis Software for Vectorising

<figure><img src="image_56.png" /><figcaption>## Workflow for processing seismograms in DigitSeis software</figcaption></figure>

<figure><img src="image_57.png" /></figure>
# Workflow of DigitSeis Software for Vectorising

<figure><img src="image_58.png" /><figcaption>## Workflow for processing seismograms in DigitSeis software</figcaption></figure>

<figure><img src="image_59.png" /></figure>
# Examples of the identified time gaps on the raw TIFF images

<figure><img src="image_58.png" /></figure>

* Enlarged fragment of image

* Time gaps indicating minutes breaking the trace line

* Zoomed segment separating the trace line between each other (tiny white gaps breaking traces)
# Examples of the identified time gaps on the raw TIFF images

<figure><img src="image_60.png" /></figure>

* Enlarged fragment of image

* Time gaps indicating minutes breaking the trace line

* Zoomed segment separating the trace line between each other (tiny white gaps breaking traces)
## Examples of marking time gaps (minutes/hours) on seismograms in Cytomine

<figure><img src="image_59.png" /></figure>

Seismogram processed by DigitSeis

Fragment of the resulting digitised output (enlarged) showing seismic traces (horizontal curve lines) and 1-minute time gaps (small vertical dashed lines)

<figure><img src="image_60.png" /></figure>

<figure><img src="image_61.png" /></figure>

Examples of the annotation classes on the raw data: scanned analog seismograms from the Uccle station.
## Examples of marking time gaps (minutes/hours) on seismograms in Cytomine

<figure><img src="image_61.png" /></figure>

Seismogram processed by DigitSeis

Fragment of the resulting digitised output (enlarged) showing seismic traces (horizontal curve lines) and 1-minute time gaps (small vertical dashed lines)

<figure><img src="image_62.png" /></figure>

<figure><img src="image_63.png" /></figure>

Examples of the annotation classes on the raw data: scanned analog seismograms from the Uccle station.
Example of the digitised image with minute time gaps
Here: fragment of UCC19540311Gal_E_0727.mat)

<figure><img src="image_62.png" /></figure>
Example of the digitised image with minute time gaps
Here: fragment of UCC19540311Gal_E_0727.mat)

<figure><img src="image_64.png" /></figure>
Identifying time gaps on seismogram using DigitSeis

<figure><img src="image_63.png" /></figure>

Indicating time marks on seismograms
as -22 and preparing image for
classification
# Identifying time gaps on seismogram using DigitSeis

<figure><img src="image_65.png" /><figcaption>* Identifying time marks on seismograms by measuring time gap between records. Here: UCC19540119Gal_N_0825.tif</figcaption></figure>

Indicating time marks on seismograms as -22 and preparing image for classification
Identifying noise and annotations on seismogram using DigitSeis

<figure><img src="image_64.png" /><figcaption>Small region analysis used for
defining a smaller area of interest for
closer examination of a border
region of the seismogram</figcaption></figure>

* Results of the classified seismogram with shown identified object categories.

* Traces are vector white lines while noise is red-coloured objects, automatically recognised (here: handwritten annotations)
Identifying noise and annotations on seismogram using DigitSeis

<figure><img src="image_66.png" /><figcaption>* Results of the classified seismogram with shown identified object categories.</figcaption></figure>

<caption>* Traces are vector white lines while noise is red-coloured objects, automatically recognised (here: handwritten annotations)</caption>

Small region analysis used for defining a smaller area of interest for closer examination of a border region of the seismogram
# Digitised segments of the trace lines in DigitSeis

<figure><img src="image_65.png" /></figure>

* Results of the classified image with shown yellow segments of the identified trace (enlarged fragment).

* Here: example of the file UCC19540109Gal_E_0812.tif

* Classified seismogram with traces saved in binary format 0-1.

* Here: example of file UCC19540109Gal_E_0812.tif (January 9, 1954.)

<figure><img src="image_66.png" /></figure>
Digitised segments of the trace lines in DigitSeis

<figure><img src="image_67.png" /><figcaption>* Results of the classified image with shown yellow segments of the identified trace (enlarged fragment).</figcaption></figure>

* Here: example of the file UCC19540109Gal_E_0812.tif

* Classified seismogram with traces saved in binary format 0-1.

* Here: example of file UCC19540109Gal_E_0812.tif (January 9, 1954.)

<figure><img src="image_68.png" /></figure>
# Digitised traces after classification in DigitSeis

<figure><img src="image_67.png" /></figure>

* Some time gaps (upper left part of the image) were not identified and not recognised automatically between the trace and dark background.

* In these cases, gaps required manual correction to identify time intervals.

* Enlarged view of the automatically recognised digitised traces displayed by lines of various colours,

* Zero-lines for each trace are visualised as cyan-coloured dashed lines, numbered from top to bottom.

* Vertical yellow dashes are time gaps

<figure><img src="image_68.png" /></figure>
Digitised traces after classification in DigitSeis

* Enlarged view of the automatically recognised digitised traces displayed by lines of various colours,

* Zero-lines for each trace are visualised as cyan-coloured dashed lines, numbered from top to bottom.

* Vertical yellow dashes are time gaps

<figure><img src="image_69.png" /></figure>
## Identified traces for selective correction and re-digitising using Correct Trace mode

* Detected misclassifications caused erroneous digitising.

* The gaps on the zero-lines (small yellow boxes) show the gaps that existed in the old paper in the original image itself.

<figure><img src="image_69.png" /></figure>

* Identified wrong vector direction of line crossing individual traces
## Identified traces for selective correction and re-digitising using Correct Trace mode

<figure><img src="image_70.png" /></figure>

* Detected misclassifications caused erroneous digitising.

* The gaps on the zero-lines (small yellow boxes) show the gaps that existed in the old paper in the original image itself.

* Identified wrong vector direction of line crossing individual traces
## Identified traces for selective correction and re-digitising using Correct Trace mode

<figure><img src="image_70.png" /><figcaption>* Overlap of line traces unrecognised during digitising: one segment of trace went steeply downwards and merged with another trace</figcaption></figure>

<figure><img src="image_71.png" /><figcaption>* Enlarged view of the manually corrected entangled traces. Correcting misclassified traces with wrong direction based on colour and geometric pixel's characteristics.</figcaption></figure>

<figure><img src="image_72.png" /></figure>
## Identified traces for selective correction and re-digitising using Correct Trace mode

<figure><img src="image_71.png" /><figcaption>* Overlap of line traces unrecognised during digitising: one segment of trace went steeply downwards and merged with another trace</figcaption></figure>

<figure><img src="image_72.png" /><figcaption>* Enlarged view of the manually corrected entangled traces. Correcting misclassified traces with wrong direction based on colour and geometric pixel's characteristics.</figcaption></figure>

<figure><img src="image_73.png" /></figure>
## Identified traces for selective correction and re-digitising using Correct Trace mode

* Reclassification of the selected segment and digitising the centroid of the trace line (purple-coloured). Correcting trace for the selected segments

<figure><img src="image_73.png" /></figure>

* Merging the trace initially broken into the three separate parts (three small yellow boxes)
## Identified traces for selective correction and re-digitising using Correct Trace mode

* Reclassification of the selected segment and digitising the centroid of the trace line (purple-coloured). Correcting trace for the selected segments

<figure><img src="image_74.png" /></figure>

* Merging the trace initially broken into the three separate parts (three small yellow boxes)
Seismogram image with adjusted timing. Here: UCC19540311Gal_E_0727.mat

<figure><img src="image_74.png" /><figcaption>* Time markers at 1-minute intervals on each 30-minute trace.</figcaption></figure>

* Timing setup using time display increment

* Yellow vertical small dash lines - minute marks
Seismogram image with adjusted timing. Here: UCC19540311Gal_E_0727.mat

<figure><img src="image_75.png" /><figcaption>* Time markers at 1-minute intervals on each 30-minute trace.</figcaption></figure>

* Timing setup using time display increment

* Yellow vertical small dash lines - minute marks
# Validating Results of MATLAB File in Python: Post-Processing

<figure><img src="image_75.png" /></figure>

## DATA ANALYSIS

### Reasons

The misclassified pixels were induced by the distortions of paper => erroneous recognition of pixels in the edge (red dots)

<figure><img src="image_76.png" /></figure>

## IDENTIFYING TIME INTERVALS

Hours and minutes
Hours marks are aligned, as the rotation speed of drum (2/h). Second gaps are slanted due to the rotation of drum.

<figure><img src="image_77.png" /></figure>

## STATISTIC ANALYSIS

### Data analysis

Visualizing frequency of segment length: size of various segments in a trace per hours of recording

<figure><img src="image_78.png" /></figure>

## CHECK AND PLOTTING

### Quality check

The data were kept as valid the segment inside the range [.8 * Styp, 1.1 * Styp]. Green dots - starting position of segments

<figure><img src="image_79.png" /><figcaption>UCC19540109Gal_E_0812</figcaption></figure>

<figure><img src="image_80.png" /></figure>

Controlling digitising results using Python (Matplotlib library). Blue dots shown the starting position of the hours segments. Green dots show the minute marks. Red dots show the noise and edge dots. Correctly identified time gaps controlled by Python's Matplotlib Quality control for time gaps: missed marks in unrecognised segments.
# Validating Results of MATLAB File in Python: Post-Processing

<figure><img src="image_76.png" /></figure>

## DATA ANALYSIS

### Reasons

The misclassified pixels were induced by the distortions of paper => erroneous recognition of pixels in the edge (red dots)

<figure><img src="image_77.png" /></figure>

## IDENTIFYING TIME INTERVALS

Hours and minutes
Hours marks are aligned, as the rotation speed of drum (2/h). Second gaps are slanted due to the rotation of drum.

<figure><img src="image_78.png" /></figure>

## STATISTIC ANALYSIS

### Data analysis

Visualizing frequency of segment length: size of various segments in a trace per hours of recording

<figure><img src="image_79.png" /></figure>

## CHECK AND PLOTTING

### Quality check

The data were kept as valid the segment inside the range [.8 * Styp, 1.1 * Styp]. Green dots - starting position of segments

<figure><img src="image_80.png" /><figcaption>UCC19540109Gal_E_0812</figcaption></figure>

<figure><img src="image_81.png" /></figure>

Controlling digitising results using Python (Matplotlib library).

Blue dots shown the starting position of the hours segments.

Green dots show the minute marks.

Red dots show the noise and edge dots.

Correctly identified time gaps controlled by Python's Matplotlib

Quality control for time gaps: missed marks in unrecognised segments.
Publication in Sensors and continue to Python

Despite the endorsement of
our article published in
Sensors by DigitSeis
Developer (Dr. Petros
Bogiatzis and their team),
we need to develop more
advanced tools using
Python ML algorithms.

The ML Python-based part
of this project are
introduced in the following
section - Part 4.

<figure><img src="image_81.png" /></figure>
Publication in Sensors and continue to Python

Despite the endorsement of
our article published in
Sensors by DigitSeis
Developer (Dr. Petros
Bogiatzis and their team),
we need to develop more
advanced tools using
Python ML algorithms.

The ML Python-based part
of this project are
introduced in the following
section - Part 4.

<figure><img src="image_82.png" /></figure>
# Part 4.
Using Python for Automatic Data
Processing
Part 4.
Using Python for Automatic Data
Processing
Methodology of the Part 4 of the PhD project based on submitted publication:

**Journal article (2) - submitted:** Lemenkova, P.; De Plaen, R.; Lecocq, T.; Debeir, O.A Python-based framework for automated vectorisation of the analog seismograms recorded in Uccle seismic station, Belgium. **2023 (expected 10 ECTS)**

* Machine Learning (ML) in vectorising analog seismograms

* ML: Automatic and intelligent data analysis: detecting trace lines using threshold parameters by Python

* Image processing: segmentation, classification of seismograms (separating lines from noise)

* Data visualisation and plotting

* Data analysis and interpretation

* Advanced methods => solve problem of efficient processing of big massifs of old scanned files (TIFFs) for geophysical modelling and data interpretation for seismology research

* Developing new advanced ML algorithms by Python to digitise seismograms and convert them in vector format automatically

<figure><img src="image_82.png" /></figure>

<figure><img src="image_83.png" /></figure>

<figure><img src="image_84.png" /></figure>

<figure><img src="image_85.png" /></figure>
Methodology of the Part 4 of the PhD project based on submitted publication:

**Journal article (2) - submitted:** Lemenkova, P.; De Plaen, R.; Lecocq, T.; Debeir, O.A Python-based framework for automated vectorisation of the analog seismograms recorded in Uccle seismic station, Belgium. **2023 (expected 10 ECTS)**

* Machine Learning (ML) in vectorising analog seismograms

* ML: Automatic and intelligent data analysis: detecting trace lines using threshold parameters by Python

* Image processing: segmentation, classification of seismograms (separating lines from noise)

* Data visualisation and plotting

* Data analysis and interpretation

* Advanced methods => solve problem of efficient processing of big massifs of old scanned files (TIFFs) for geophysical modelling and data interpretation for seismology research

* Developing new advanced ML algorithms by Python to digitise seismograms and convert them in vector format automatically

<figure><img src="image_83.png" /></figure>

<figure><img src="image_84.png" /></figure>

<figure><img src="image_85.png" /></figure>

<figure><img src="image_86.png" /></figure>
# Why Python in Vectorising Seismograms?

<figure><img src="image_86.png" /></figure>
# Why Python in Vectorising Seismograms?

<figure><img src="image_87.png" /></figure>
# ML for Vectorising Seismograms: a Workflow in Python

The workflow for digitising seismograms in Python includes several steps:

* Defining Region of Interest (ROI)

* Selecting threshold parameters (radius of pixels, percentage of contrast)

* Sampling several approaches with varied parameters

* Processing full ROI after testing parameters and selecting the best and optimal parameters (e.g. pixel size 30, radius 85%)

* Vectorising (executing Python script)

* Exporting the results to the HDFS format

<figure><img src="image_87.png" /></figure>
# ML for Vectorising Seismograms: a Workflow in Python

The workflow for digitising seismograms in Python includes several steps:

* Defining Region of Interest (ROI)

* Selecting threshold parameters (radius of pixels, percentage of contrast)

* Sampling several approaches with varied parameters

* Processing full ROI after testing parameters and selecting the best and optimal parameters (e.g. pixel size 30, radius 85%)

* Vectorising (executing Python script)

* Exporting the results to the HDFS format

<figure><img src="image_88.png" /></figure>
# Python-based digitising of raster image (1)

<figure><img src="image_88.png" /></figure>

Automated vectorising of seismograms was
performed using several work steps.
First, the low-resolution images were grabbed by
Python script from the Cytomine and used in script.

Enlarged fragment of the vectorised
segments of the trace lines

<figure><img src="image_89.png" /></figure>
# Python-based digitising of raster image (1)

<figure><img src="image_89.png" /></figure>

Automated vectorising of seismograms was
performed using several work steps.
First, the low-resolution images were grabbed by
Python script from the Cytomine and used in script.

Enlarged fragment of the vectorised
segments of the trace lines

<figure><img src="image_90.png" /></figure>
# Structure of the seismo 0.1.0-alpha software developed by Olivier Debeir

The 'seismostorm' folder has main packages that actually process the data - *Models* and *archive*.

<figure><img src="image_90.png" /></figure>
# Structure of the seismo 0.1.0-alpha software developed by Olivier Debeir

The 'seismostorm' folder has main packages that actually process the data - *Models* and *archive*.

<figure><img src="image_91.png" /></figure>
## Workflow outline:

* ROB is the data source

* Cytomine workspace - storage place, management and editing system for a large dataset

* Python algorithms - processing and vectorising data

* MSEED files generated by Python as main outputs

* ObsPy - a Python library for visualization of the vectorised seismograms

<figure><img src="image_91.png" /></figure>
## Workflow outline:

* ROB is the data source

* Cytomine workspace - storage place, management and editing system for a large dataset

* Python algorithms - processing and vectorising data

* MSEED files generated by Python as main outputs

* ObsPy - a Python library for visualization of the vectorised seismograms

<figure><img src="image_92.png" /></figure>
Fragments of the original scanned seismograms used as reference images for machine-based training of vectorising. (a)-(f) Vertically oriented seismogram samples. Cytomine IDs from left to right: 7747, 7765, 9748, 10864, 10870, 12338. (g)-(l) Horizontally oriented seismograms. Cytomine IDs, left to right, up to bottom: 9456, 5660, 9469, 9730, 7795, 9365.

<figure><img src="image_92.png" /><figcaption>(a)</figcaption></figure>

<figure><img src="image_93.png" /><figcaption>(b)</figcaption></figure>

<figure><img src="image_94.png" /><figcaption>(c)</figcaption></figure>

<figure><img src="image_95.png" /><figcaption>(d)</figcaption></figure>

<figure><img src="image_96.png" /><figcaption>(e)</figcaption></figure>

<figure><img src="image_97.png" /><figcaption>(f)</figcaption></figure>

<figure><img src="image_98.png" /><figcaption>(g)</figcaption></figure>

<figure><img src="image_99.png" /><figcaption>(h)</figcaption></figure>

<figure><img src="image_100.png" /><figcaption>(i)</figcaption></figure>

<figure><img src="image_101.png" /><figcaption>(j)</figcaption></figure>

<figure><img src="image_102.png" /><figcaption>(k)</figcaption></figure>

<figure><img src="image_103.png" /><figcaption>(l)</figcaption></figure>

Examples of the fragment of the raster scanned paper-based seismograms used for Python processing
Fragments of the original scanned seismograms used as reference images for machine-based training of vectorising. (a)-(f) Vertically oriented seismogram samples.

Cytomine IDs from left to right: 7747, 7765, 9748, 10864, 10870, 12338.

(g)-(l) Horizontally oriented seismograms. Cytomine IDs, left to right, up to bottom: 9456, 5660, 9469, 9730, 7795, 9365.

<figure><img src="image_93.png" /><figcaption>(a)</figcaption></figure>

<figure><img src="image_94.png" /><figcaption>(b)</figcaption></figure>

<figure><img src="image_95.png" /><figcaption>(c)</figcaption></figure>

<figure><img src="image_96.png" /><figcaption>(d)</figcaption></figure>

<figure><img src="image_97.png" /><figcaption>(e)</figcaption></figure>

<figure><img src="image_98.png" /><figcaption>(f)</figcaption></figure>

<figure><img src="image_99.png" /><figcaption>(g)</figcaption></figure>

<figure><img src="image_100.png" /><figcaption>(h)</figcaption></figure>

<figure><img src="image_101.png" /><figcaption>(i)</figcaption></figure>

<figure><img src="image_102.png" /><figcaption>(j)</figcaption></figure>

<figure><img src="image_103.png" /><figcaption>(k)</figcaption></figure>

<figure><img src="image_104.png" /><figcaption>(l)</figcaption></figure>

Examples of the fragment of the raster scanned paper-based seismograms used for Python processing
## Workflow steps of the novel Python-based framework:

* The images were uploaded to Python by tiles; The tiles had width=4 min, height=1024 p, overlap between tiles =1.1% min. The horizontal gap of overlap (interline) is 200 pxl;

* The image was cropped to ROI to minimise the workflow: empty edges were subtracted from the image using threshold;

* Thinning of lines was done by threshold parameters: number of pixels (30), radius of target pixel's (101), intensity of grey in pixel's colour (30%);

* Vectorisation was performed as an iterative loop for each tile;

* Detecting timing gap intervals through buffering around hour and minute;

* Correcting errors for double-line vectorisation on the overlapping edges;

* Labelling time intervals.

* The comparison of the vector layer overlaid in Cytomine on the original raster image shown accurate vectorisation of the seismograms based on trace discrimination.

Examples of the fragment of the raster scanned paper-based seismograms used for Python processing
## Workflow steps of the novel Python-based framework:

* The images were uploaded to Python by tiles; The tiles had width=4 min, height=1024 p, overlap between tiles =1.1% min. The horizontal gap of overlap (interline) is 200 pxl;

* The image was cropped to ROI to minimise the workflow: empty edges were subtracted from the image using threshold;

* Thinning of lines was done by threshold parameters: number of pixels (30), radius of target pixel's (101), intensity of grey in pixel's colour (30%);

* Vectorisation was performed as an iterative loop for each tile;

* Detecting timing gap intervals through buffering around hour and minute;

* Correcting errors for double-line vectorisation on the overlapping edges;

* Labelling time intervals.

* The comparison of the vector layer overlaid in Cytomine on the original raster image shown accurate vectorisation of the seismograms based on trace discrimination.

Examples of the fragment of the raster scanned paper-based seismograms used for Python processing
Python code for defining

Tile class on seismograms (©
O.Debeir)

**Tiles** and **segments** are two important
class objects on the seismograms
defined using characteristics of time
start and end of the seismogram
recording via time gaps and marks.

**Segment** is a fragment of the
seismogram defined as the period of
records during one minute, i.e., it is
limited by two minute gaps indicating
the start and the end of the minute.

**Tile** is defined as a sequence of
records within the consecutive line on a
seismogram which is interrupted and

followed by the next tile and repeated
iteratively on the whole seismogram.

```python
class Tile():
    def __init__(self, param, x0, y0, w, h, sx, sy, params=None):
        self.param = param
        self.x0 = int(x0)
        self.y0 = int(y0)
        self.w = int(w)
        self.h = int(h)
        self.sx = sx  # full image size
        self.sy = sy
        self.processed = False
        self.th = None
        self.Segments = []
    if params:
        self.params = params
    else:
        self.params = {'radius': 50, 'percentile': .3}
    def __str__(self):
        return f'origin({self.x0},{self.y0} w x h ({self.w},{self.h})) #segments: {len(self.Segments)} proc. {self.processed}'

    def insert_ima_extent(self, ima, ax):
        # plot image at the Tile coordinates in axes
        ax.imshow(imma, extent=[self.x0, self.x0 + self.w, self.sy - self.y0 - self.h,
                                 self.sy - self.y0],
                  cmap= plt.cm_gray, alpha=.5)

    def plot(self, ax, display_th=True, display_seg=True, display_tile=True, txt=None):
        # plot Tile in gca (in wholeslide coordinates)
        if display_tile:
            if self.processed:
                alpha = .5
            else:
                alpha = .2
            ax.add_patch(Rectangle((self.x0, self.sy - self.y0 - self.h), self.w, self.h,
                                    alpha=alpha))
            if txt:
                ax.text(self.x0, self.sy - self.y0 - self.h, txt)
        if (self.th is not None) and display_th:
            ax.imshow(self.th, extent=[self.x0, self.x0 + self.w, self.sy - self.y0 - self.h,
                                          self.sy - self.y0], cmap= plt.cm_gray, alpha=.5)
        if display_seg:
            for s in self.Segments:
                s.plot(ax)
```
Python code for defining

Tile class on seismograms (©
O.Debeir)

**Tiles** and **segments** are two important
class objects on the seismograms
defined using characteristics of time
start and end of the seismogram
recording via time gaps and marks.

**Segment** is a fragment of the
seismogram defined as the period of
records during one minute, i.e., it is
limited by two minute gaps indicating
the start and the end of the minute.

**Tile** is defined as a sequence of
records within the consecutive line on a
seismogram which is interrupted and

followed by the next tile and repeated
iteratively on the whole seismogram.

```python
class Tile():
    def __init__(self, param, x0, y0, w, h, sx, sy, params=None):
        self.param = param
        self.x0 = int(x0)
        self.y0 = int(y0)
        self.w = int(w)
        self.h = int(h)
        self.sx = sx  # full image size
        self.sy = sy
        self.processed = False
        self.th = None
        self.Segments = []
        if params:
            self.params = params
        else:
            self.params = {'radius': 50, 'percentile': .3}
    def __str__(self):
        return f'origin({self.x0},{self.y0} w x h ({self.w},{self.h})) #segments: {len(self.Segments)} proc. {self.processed}'

    def insert_ima_extent(self, ima, ax):
        # plot image at the Tile coordinates in axes
        ax.imshow(imma, extent=[self.x0, self.x0 + self.w, self.sy - self.y0 - self.h, self.sy - self.y0],
                 cmap= plt.cm_gray, alpha=.5)

    def plot(self, ax, display_th=True, display_seg=True, display_tile=True, txt=None):
        # plot Tile in gca (in wholeslide coordinates)
        if display_tile:
            if self.processed:
                alpha = .5
            else:
                alpha = .2
            ax.add_patch(Rectangle((self.x0, self.sy - self.y0 - self.h), self.w, self.h,
                                    alpha=alpha))
            if txt:
                ax.text(self.x0, self.sy - self.y0 - self.h, txt)
        if (self.th is not None) and display_th:
            ax.imshow(self.th, extent=[self.x0, self.x0 + self.w, self.sy - self.y0 - self.h,
                                        self.sy - self.y0], cmap= plt.cm_gray, alpha=.5)
        if display_seg:
            for s in self.Segments:
                s.plot(ax)
```
# Python-based digitising of raster image (2)

<figure><img src="image_104.png" /></figure>

Second, the hour gaps have been detected using the indication of the repeatability of gaps (double gaps, close located next to the first minute of this hour).

Above: view of the seismogram with indicated hour gaps.

Right: enlarged fragment.
# Python-based digitising of raster image (2)

<figure><img src="image_105.png" /></figure>

Second, the hour gaps have been detected using the indication of the repeatability of gaps (double gaps, close located next to the first minute of this hour).

Above: view of the seismogram with indicated hour gaps.

Right: enlarged fragment.
Python-based digitising of raster image (3)

<figure><img src="image_105.png" /></figure>

Third, the line with double vectorisation (overlapping time periods) were processed.

<figure><img src="image_106.png" /></figure>

Workflow for vectorising in Python, Matplotlib library (slide 3/10)
# Python-based digitising of raster image (3)

<figure><img src="image_106.png" /></figure>

Third, the line with double vectorisation (overlapping time periods) were processed.

<figure><img src="image_107.png" /></figure>

## Workflow for vectorising in Python, Matplotlib library (slide 3/10)
# Python-based digitising of raster image (4)

<figure><img src="image_107.png" /></figure>

<figure><img src="image_108.png" /><figcaption>Left: Example of the digitised traces in Python. Above: Example of the misclassified line, which was vectorised several times as belonging to 'neighbor' hours segments (e.g. hour 1 and hour 2).</figcaption></figure>
# Python-based digitising of raster image (4)

<figure><img src="image_108.png" /></figure>

<figure><img src="image_109.png" /><figcaption>Left: Example of the digitised traces in Python. Above: Example of the misclassified line, which was vectorised several times as belonging to 'neighbor' hours segments (e.g. hour 1 and hour 2).</figcaption></figure>
# Snippet of the Python code (© O.Debeir)

```python
1 from utils.log_utils import get_logger
2 my_logger = get_logger(__name__)
3 my_logger.info("Start logging")
4 id_project = 451
5 image = {'name':'UCC19540311Gal_N_0727', 'cytomine_id':5713} # vert std
6 cmid = image['cytomine_id']
7 # ---------------------------------------------------------------------->
8 # Step 0- extract on single Tile
9 if False:
10     # create main Scan object
11     scan = Scan(cmid)
12     # analyse image/import lowres/find best parameters
13     scan.fetch_info()
14     scan.preproc.debug=False
15     sample = scan.sample_fullres(w=2048, h=1024)
16     print(sample)
17     plt.imshow('sample.png', sample, cmap= plt.cm .gray)
18 # ---------------------------------------------------------------------->
19 # Step 1- initialization of the Scan / build the grid
20 if False:
21     # create main Scan object
22     scan = Scan(cmid)
23     # analyse image/import lowres/find best parameters
24     scan.fetch_info()
25     scan.preproc.debug=True
26     print scan
27     sample = scan.sample_fullres()
28     scan.autoset_params(sample, debug=True)
29     print scan.tiles_param
30     # prepare grid
31     scan.prep_grid(max tiles = None)
32     # run analysis (width/ntiles)
33     scan.process(max tiles = 1, save_th = True)
34     # save Scan object
35     scan.save()
36     # display Scan object
37     fig, ax = plt.subplots()
38     scan.plot(ax, display_th = True, display tile = True, display seg = False)
39     plt.title scan.name
40     plt.show()
41 # ---------------------------------------------------------------------->
42 # Step 2- update of the scan / digitize each tile
43 if False:
44     # load Scan object
45     scan = Scan(cmid)
46     scan.read()
47     # scan.fetch_info()
48     # sample = scan.sample_fullres()
49     # scan.autoset_params(sample, debug = True)
50     for i in range(10):
```

```python
51 scan.process(max tiles=5)
52 # update file
53 scan.save()
54 (proc, tot) = scan.get tiles processed()
55 fig, ax = plt.subplots()
56 scan.plot(ax, display_th = True, display tile = True, display seg = True)
57 plt.title(f' {scan.name} \n [{proc} / {tot}] ')
58 plt.show()
59 # ---------------------------------------------------------------------->
60 # Step 3- Re-scan some tiles
61 if False:
62     scan3 = Scan(cmid)
63     scan3.read()
64     print scan3
65     # invalidate a specific tile for rework
66     invalid = [84,22,49]
67     for i in invalid:
68         scan3.tiles[i].processed = False
69         scan3.tiles[i].Segments = []
70     # reprocess tiles
71     # scan.fetch_info()
72     scan3.preproc.debug = True
73     sample = scan3.sample_fullres()
74     scan3.autoset_params(sample, debug=False)
75     scan3.process save_th = False
76     scan3.save()
77     (proc, tot) = scan3.get tiles processed()
78     fig,ax = plt.subplots()
79     scan3.plot(ax, display seg = True, display th = True, display tile = True)
80     plt.title scan3.name
81     plt.title(f' {scan3.name} \n [{proc} / {tot}] ')
82     plt.show()
83 # ---------------------------------------------------------------------->
84 # Step 4- display the Scan
85 if False:
86     scan3 = Scan(cmid)
87     scan3.read()
88     print scan3
89     # invalidate a specific tile for rework
90     # scan3.tiles[65].processed = False
91     # scan3.tiles[65].Segments = []
92     # scan3.save()
93     (proc, tot) = scan3.get tiles processed()
94     fig,ax = plt.subplots()
95     scan3.plot(ax, display seg = True, display th = True, display tile = True)
96     plt.title scan3.name
97     plt.title(f' {scan3.name} \n [{proc} / {tot}] ')
98     plt.show()
```

Python code used for vectorisation of the scanned seismograms
# Snippet of the Python code (© O.Debeir)

```python
1 from utils.log_utils import get_logger
2 my_logger = get_logger(__name__)
3 my_logger.info("Start logging")
4 id_project = 451
5 image = {'name':'UCC19540311Gal_N_0727', 'cytomine_id':5713} # vert std
6 cmid = image['cytomine_id']
7 # ---------------------------------------------------------------------->
8 # Step 0- extract on single Tile
9 if False:
10     # create main Scan object
11     scan = Scan(cmid)
12     # analyse image/import lowres/find best parameters
13     scan.fetch_info()
14     scan.preproc.debug=False
15     sample = scan.sample_fullres(w=2048, h=1024)
16     print(sample)
17     plt.imshow('sample.png', sample, cmap= plt.cm .gray)
18 # ---------------------------------------------------------------------->
19 # Step 1- initialization of the Scan / build the grid
20 if False:
21     # create main Scan object
22     scan = Scan(cmid)
23     # analyse image/import lowres/find best parameters
24     scan.fetch_info()
25     scan.preproc.debug=True
26     print scan
27     sample = scan.sample_fullres()
28     scan.autoset_params(sample, debug=True)
29     print scan.tiles_param
30     # prepare grid
31     scan.prep_grid(max tiles = None)
32     # run analysis (width/ntiles)
33     scan.process(max tiles = 1, save_th = True)
34     # save Scan object
35     scan.save()
36     # display Scan object
37     fig, ax = plt.subplots()
38     scan.plot(ax, display_th = True, display tile = True, display seg = False)
39     plt.title scan.name
40     plt.show()
41 # ---------------------------------------------------------------------->
42 # Step 2- update of the scan / digitize each tile
43 if False:
44     # load Scan object
45     scan = Scan(cmid)
46     scan.read()
47     # scan.fetch_info()
48     # sample = scan.sample_fullres()
49     # scan.autoset_params(sample, debug=True)
50     for i in range(10):
```

```python
51     scan.process(max tiles=5)
52     # update file
53     scan.save()
54     (proc, tot) = scan.get tiles processed()
55     fig, ax = plt.subplots()
56     scan.plot(ax, display_th=True, display_tile = True, display seg = True)
57     plt.title(f'{scan.name}
[{proc}/{tot}]')
58     plt.show()
59 # ---------------------------------------------------------------------->
60 # Step 3- Re-scan some tiles
61 if False:
62     scan3 = Scan(cmid)
63     scan3.read()
64     print scan3
65     # invalidate a specific tile for rework
66     invalid = [84,22,49]
67     for i in invalid:
68         scan3.tiles[i].processed = False
69         scan3.tiles[i].Segments = []
70     # reprocess tiles
71     # scan.fetch_info()
72     scan3.preproc.debug=True
73     sample = scan3.sample_fullres()
74     scan3.autoset_params(sample, debug=False)
75     scan3.process save_th = False
76     scan3.save()
77     (proc, tot) = scan3.get tiles processed()
78     fig,ax = plt.subplots()
79     scan3.plot(ax, display seg = True, display_th = True, display tile = True)
80     plt.title scan3.name)
81     plt.title(f'{scan3.name}
[{proc}/{tot}]')
82     plt.show()
83 # ---------------------------------------------------------------------->
84 # Step 4- display the Scan
85 if False:
86     scan3 = Scan(cmid)
87     scan3.read()
88     print scan3
89     # invalidate a specific tile for rework
90     # scan3.tiles[65].processed = False
91     # scan3.tiles[65].Segments = []
92     # scan3.save()
93     (proc, tot) = scan3.get tiles processed()
94     fig,ax = plt.subplots()
95     scan3.plot(ax, display seg = True, display_th = True, display tile = True)
96     plt.title scan3.name)
97     plt.title(f'{scan3.name}
[{proc}/{tot}]')
98     plt.show()
```

Python code used for vectorisation of the scanned seismograms
Region of Interest: Automatic Detection (slide 1/2)

<figure><img src="image_109.png" /></figure>

ROI detection was performed using setup of threshold for contrasting pixels on the images. As a result, the mask only included ROI between the red dashed lines (upper left image). The histograms show the value of pixels excluded from the ROI (those above the red line on the graphs).

It is possible to process images in Python both in horizontal and in vertical orientation (image on the right)

Workflow for vectorising in Python, Matplotlib library (slide 5/10)
Region of Interest: Automatic Detection (slide 1/2)

<figure><img src="image_110.png" /></figure>

ROI detection was performed using setup of threshold for contrasting pixels on the images. As a result, the mask only included ROI between the red dashed lines (upper left image). The histograms show the value of pixels excluded from the ROI (those above the red line on the graphs).

It is possible to process images in Python both in horizontal and in vertical orientation (image on the right)

Workflow for vectorising in Python, Matplotlib library (slide 5/10)
Region of Interest: Automatic Detection (slide 2/2)

<figure><img src="image_110.png" /><figcaption>Defining ROI (between the red dashed lines) and enlarged fragment. Below: 2 histograms showing the distribution of pixels and those deleted (above the red dashed line). Right: enlarged fragment of the digitised seismogram. Workflow for vectorising in Python, Matplotlib library (slide 6/10).</figcaption></figure>
Region of Interest: Automatic Detection (slide 2/2)

<figure><img src="image_111.png" /></figure>

Defining ROI (between the red dashed lines) and enlarged fragment. Below: 2 histograms showing the distribution of pixels and those deleted (above the red dashed line). Right: enlarged fragment of the digitised seismogram. Workflow for vectorising in Python, Matplotlib library (slide 6/10).
# Defining optimal parameters for the line thickness and radius of pixels (1)

<figure><img src="image_111.png" /></figure>

The thickness of the trace lines was defined by a series of trial tests with varied parameters.

Radius of 30 pixels was defined as the optimal for the given image (it may vary through in other cases).

Above: image with tested line thickness from 17 to 34 and radius of 50.

Below: image with tested thickness of the trace line from 14 to 26 pixels (upper row) and 20 to 38 pixels (lower row) and radius of 40, 50 and 60 for each corresponding row (downwards). Changed thickness of line is visible in all trial cases (yellow-coloured horizontal lines).

<figure><img src="image_112.png" /></figure>

## Workflow for vectorising in Python, Matplotlib library (slide 7/10)
# Defining optimal parameters for the line thickness and radius of pixels (1)

<figure><img src="image_112.png" /></figure>

The thickness of the trace lines was defined by a series of trial tests with varied parameters.

Radius of 30 pixels was defined as the optimal for the given image (it may vary through in other cases).

Above: image with tested line thickness from 17 to 34 and radius of 50.

Below: image with tested thickness of the trace line from 14 to 26 pixels (upper row) and 20 to 38 pixels (lower row) and radius of 40, 50 and 60 for each corresponding row (downwards). Changed thickness of line is visible in all trial cases (yellow-coloured horizontal lines).

<figure><img src="image_113.png" /></figure>

## Workflow for vectorising in Python, Matplotlib library (slide 7/10)
Defining optimal parameters for the line thickness and radius of pixels (2)

<figure><img src="image_113.png" /></figure>

Continue testing the parameters for the line with
spots and seismogram with blurred contrast of
lines against the background

Workflow for vectorising in Python, Matplotlib library (slide 8/10)
Defining optimal parameters for the line thickness and radius of pixels (2)

<figure><img src="image_114.png" /></figure>

Continue testing the parameters for the line with
spots and seismogram with blurred contrast of
lines against the background

Workflow for vectorising in Python, Matplotlib library (slide 8/10)
Buffering parameters for the time gaps

<figure><img src="image_114.png" /></figure>

<figure><img src="image_115.png" /></figure>

Buffering minute intervals for the
one-minute gaps completed for
the whole seismogram;

Buffering of missing data: minute
and hour gaps

Buffering minute intervals for the one-
minute gaps completed for the whole
seismogram

The vectorised minute segments in
seismograms were randomly coloured
for a better visual contrast.

<figure><img src="image_116.png" /></figure>
Buffering parameters for the time gaps

<figure><img src="image_115.png" /></figure>

<figure><img src="image_116.png" /></figure>

Buffering minute intervals for the
one-minute gaps completed for
the whole seismogram;

Buffering of missing data: minute
and hour gaps

Buffering minute intervals for the one-
minute gaps completed for the whole
seismogram

The vectorised minute segments in
seismograms were randomly coloured
for a better visual contrast.

<figure><img src="image_117.png" /></figure>
## Python code for defining hour and minute marks on the seismograms

```python
1 # select hour marks only (distant from the tile border)
2         valid_h = (length > self.param.HOUR_WIDTH * 0.8) * \
3                 (length < self.param.HOUR_WIDTH * 1.1) * \
4                 (props['bbox-0'] > 15) * \
5                 (props['bbox-1'] > 15) * \
6                 (props['bbox-2'] < m) * \
7                 (props['bbox-3'] < n)
8 # select minute marks only (distant from the tile border)
9         valid_m = (length > self.param.MINUTE_WIDTH * 0.9) * \
10                (length < self.param.MINUTE_WIDTH * 1.1) * \
11                (props['bbox-0'] > 15) * \
12                (props['bbox-1'] > 15) * \
13                (props['bbox-2'] < m) * \
14                (props['bbox-3'] < n)
15 # select minute complement marks only (distant from the tile border)
16         valid_c = (length > self.param.PARTIM_HOUR_WIDTH * 0.9) * \
17                (length < self.param.PARTIM_HOUR_WIDTH * 1.1) * \
18                (props['bbox-0'] > 15) * \
19                (props['bbox-1'] > 15) * \
20                (props['bbox-2'] < m) * \
21                (props['bbox-3'] < n)
```

The time gaps (hour and minute marks) were identified by dividing the line into repetitive segments with regular intervals.

These intervals of the time gaps are identified by the code presented left.

The shape of the line as a vector geometric structure is recognised and identified by the machine vision.

The approach is based on the assessment of the connectivity of pixels constituting the line, expect for the time gaps and marks breaking the trace by minute and hour marks.

Code snippet showing algorithm for identifying the time gaps in Python (© O.Debeir).
Python code for defining hour and minute marks on the seismograms

```python
1 # select hour marks only (distant from the tile border)
2         valid_h = (length > self.param.HOUR_WIDTH * 0.8) * \
3                 (length < self.param.HOUR_WIDTH * 1.1) * \
4                 (props['bbox-0'] > 15) * \
5                 (props['bbox-1'] > 15) * \
6                 (props['bbox-2'] < m) * \
7                 (props['bbox-3'] < n)
8 # select minute marks only (distant from the tile border)
9         valid_m = (length > self.param.MINUTE_WIDTH * 0.9) * \
10                (length < self.param.MINUTE_WIDTH * 1.1) * \
11                (props['bbox-0'] > 15) * \
12                (props['bbox-1'] > 15) * \
13                (props['bbox-2'] < m) * \
14                (props['bbox-3'] < n)
15 # select minute complement marks only (distant from the tile border)
16         valid_c = (length > self.param.PARTIM_HOUR_WIDTH * 0.9) * \
17                (length < self.param.PARTIM_HOUR_WIDTH * 1.1) * \
18                (props['bbox-0'] > 15) * \
19                (props['bbox-1'] > 15) * \
20                (props['bbox-2'] < m) * \
21                (props['bbox-3'] < n)
```

The time gaps (hour and minute marks) were identified by dividing the line into repetitive segments with regular intervals.

These intervals of the time gaps are identified by the code presented left.

The shape of the line as a vector geometric structure is recognised and identified by the machine vision.

The approach is based on the assessment of the connectivity of pixels constituting the line, expect for the time gaps and marks breaking the trace by minute and hour marks.

Code snippet showing algorithm for identifying the time gaps in Python (© O.Debeir).
Seismogram vectorised by Python overlain on the original image and uploaded in Cytomine

<figure><img src="image_117.png" /></figure>

Example of the
vectorised trace
segments (red
lines) overlaid on
the spotted
image

Enlarged
fragment with
visible distinct
traces;

Enlarged
fragment with
visible time gaps

Workflow for vectorising in Python, Matplotlib library (slide 10/10)
Seismogram vectorised by Python overlain on the original image and uploaded in Cytomine

<figure><img src="image_118.png" /></figure>

Example of the
vectorised trace
segments (red
lines) overlaid on
the spotted
image

Enlarged
fragment with
visible distinct
traces;

Enlarged
fragment with
visible time gaps

Workflow for vectorising in Python, Matplotlib library (slide 10/10)
<figure><img src="image_118.png" /><figcaption>(a)</figcaption></figure>

<figure><img src="image_119.png" /><figcaption>(e)</figcaption></figure>

<figure><img src="image_120.png" /><figcaption>(i)</figcaption></figure>

<figure><img src="image_121.png" /><figcaption>(b)</figcaption></figure>

<figure><img src="image_122.png" /><figcaption>(f)</figcaption></figure>

<figure><img src="image_123.png" /><figcaption>(j)</figcaption></figure>

<figure><img src="image_124.png" /><figcaption>(c)</figcaption></figure>

<figure><img src="image_125.png" /><figcaption>(g)</figcaption></figure>

<figure><img src="image_126.png" /><figcaption>(k)</figcaption></figure>

<figure><img src="image_127.png" /><figcaption>(d)</figcaption></figure>

<figure><img src="image_128.png" /><figcaption>(h)</figcaption></figure>

<figure><img src="image_129.png" /><figcaption>(l)</figcaption></figure>

Fragments of the images generated
by seismo 0.1.0-alpha software.

Timing of seismogram tiles with
buffer zone (slate gray colour), hour
marks (thick short lines coloured
randomly) and minute segments (thin
lines coloured randomly).

The hour marks and minutes are
annotated on the graphs, e.g.,
'h09m59' means hour 9 minute 59.

Cytomine IDs: a) 4433; b) 5765; c)
5779; d) 14485; e) 14391; f) 7759; g)
5673; h) 7765; i) 5660; j) 7795; k)
7747; l) 9417.

Processing image is possible both
horizontal and in vertical mode.
<figure><img src="image_119.png" /><figcaption>(a)</figcaption></figure>

<figure><img src="image_120.png" /><figcaption>(e)</figcaption></figure>

<figure><img src="image_121.png" /><figcaption>(i)</figcaption></figure>

<figure><img src="image_122.png" /><figcaption>(b)</figcaption></figure>

<figure><img src="image_123.png" /><figcaption>(f)</figcaption></figure>

<figure><img src="image_124.png" /><figcaption>(j)</figcaption></figure>

<figure><img src="image_125.png" /><figcaption>(c)</figcaption></figure>

<figure><img src="image_126.png" /><figcaption>(g)</figcaption></figure>

<figure><img src="image_127.png" /><figcaption>(k)</figcaption></figure>

<figure><img src="image_128.png" /><figcaption>(d)</figcaption></figure>

<figure><img src="image_129.png" /><figcaption>(h)</figcaption></figure>

<figure><img src="image_130.png" /><figcaption>(l)</figcaption></figure>

Fragments of the images generated by seismo 0.1.0-alpha software.

Timing of seismogram tiles with buffer zone (slate gray colour), hour marks (thick short lines coloured randomly) and minute segments (thin lines coloured randomly).

The hour marks and minutes are annotated on the graphs, e.g., 'h09m59' means hour 9 minute 59.

Cytomine IDs: a) 4433; b) 5765; c) 5779; d) 14485; e) 14391; f) 7759; g) 5673; h) 7765; i) 5660; j) 7795; k) 7747; l) 9417.

Processing image is possible both horizontal and in vertical mode.
Quality control of the seismogram processing (selected examples)

<figure><img src="image_130.png" /><figcaption>(a)</figcaption></figure>

<figure><img src="image_131.png" /><figcaption>(e)</figcaption></figure>

<figure><img src="image_132.png" /><figcaption>(i)</figcaption></figure>

<figure><img src="image_133.png" /><figcaption>(b)</figcaption></figure>

<figure><img src="image_134.png" /><figcaption>(f)</figcaption></figure>

<figure><img src="image_135.png" /><figcaption>(j)</figcaption></figure>

<figure><img src="image_136.png" /><figcaption>(c)</figcaption></figure>

<figure><img src="image_137.png" /><figcaption>(g)</figcaption></figure>

<figure><img src="image_138.png" /><figcaption>(k)</figcaption></figure>

<figure><img src="image_139.png" /><figcaption>(d)</figcaption></figure>

<figure><img src="image_140.png" /><figcaption>(h)</figcaption></figure>

<figure><img src="image_141.png" /><figcaption>(l)</figcaption></figure>

Dark purple colour signify the background with no data.

Navy blue (or aquamarine) colours in the middle of the images signify the successfully digitised traces.

Vertical slanted lines crossing the main image mean the hour marks.

Yellow occasional pixels signify the errors and noise.

Cytomine IDs of the images: a) 5765; b) 7801; c) 10864; d) 14418; e) 14485; f) 16297; g) 16353; h) 17014; i) 17028; j) 17036; k) 19054; l) 1245452.
Quality control of the seismogram processing (selected examples)

<figure><img src="image_131.png" /><figcaption>(a)</figcaption></figure>

<figure><img src="image_132.png" /><figcaption>(e)</figcaption></figure>

<figure><img src="image_133.png" /><figcaption>(i)</figcaption></figure>

<figure><img src="image_134.png" /><figcaption>(b)</figcaption></figure>

<figure><img src="image_135.png" /><figcaption>(f)</figcaption></figure>

<figure><img src="image_136.png" /><figcaption>(j)</figcaption></figure>

<figure><img src="image_137.png" /><figcaption>(c)</figcaption></figure>

<figure><img src="image_138.png" /><figcaption>(g)</figcaption></figure>

<figure><img src="image_139.png" /><figcaption>(k)</figcaption></figure>

<figure><img src="image_140.png" /><figcaption>(d)</figcaption></figure>

<figure><img src="image_141.png" /><figcaption>(h)</figcaption></figure>

<figure><img src="image_142.png" /><figcaption>(l)</figcaption></figure>

Dark purple colour signify the background with no data.

Navy blue (or aquamarine) colours in the middle of the images signify the successfully digitised traces.

Vertical slanted lines crossing the main image mean the hour marks.

Yellow occasional pixels signify the errors and noise.

Cytomine IDs of the images: a) 5765; b) 7801; c) 10864; d) 14418; e) 14485; f) 16297; g) 16353; h) 17014; i) 17028; j) 17036; k) 19054; l) 1245452.
<figure><img src="image_142.png" /><figcaption>(a) traces_UCC19540224Gal_E_0800.mseed
Time in seconds relative to 1954-02-13T01:42:00</figcaption></figure>

<figure><img src="image_143.png" /><figcaption>(c) traces_UCC19540212Gal_E_0758.mseed
Time in seconds relative to 1954-02-05T13:06:00</figcaption></figure>

<figure><img src="image_144.png" /><figcaption>(e) traces_UCC19540205Gal_N_0742.mseed
Time in seconds relative to 1954-03-02T09:10:00</figcaption></figure>

<figure><img src="image_145.png" /><figcaption>(g) traces_UCC19540302Gal_E_0805.mseed</figcaption></figure>

<figure><img src="image_146.png" /><figcaption>(b) traces_UCC19540310Gal_N_0907.mseed
Time in seconds relative to 1954-03-03T19:48:00</figcaption></figure>

<figure><img src="image_147.png" /><figcaption>(d) traces_UCC19540303Gal_N_0833.mseed
Time in seconds relative to 1954-02-03T11:56:00</figcaption></figure>

<figure><img src="image_148.png" /><figcaption>(f) traces_UCC19540203Gal_N_0821.mseed
Time in seconds relative to 1954-03-10T01:51:00</figcaption></figure>

<figure><img src="image_149.png" /><figcaption>(h) traces_UCC19540309Gal_E_0817.mseed</figcaption></figure>

## Results (1):

Examples of the
enlarged vectorised
seismogram 1-minute
traces processed and
digitised by the Python
algorithm of the *seismo
0.1.0-alpha* software
developed by O.
Debeir.
The vectorised data
are visualised in the
ObsPy library of
Python using the
MSEED files generated
by *seismo 0.1.0-alpha*.
<figure><img src="image_143.png" /><figcaption>(a) traces\_UCC19540224Gal_E_0800.mseed
Time in seconds relative to 1954-02-13T01:42:00</figcaption></figure>

<figure><img src="image_144.png" /><figcaption>(c) traces\_UCC19540212Gal_E_0758.mseed
Time in seconds relative to 1954-02-05T13:06:00</figcaption></figure>

<figure><img src="image_145.png" /><figcaption>(e) traces\_UCC19540205Gal_N_0742.mseed
Time in seconds relative to 1954-03-02T09:10:00</figcaption></figure>

<figure><img src="image_146.png" /><figcaption>(g) traces\_UCC19540302Gal_E_0805.mseed</figcaption></figure>

<figure><img src="image_147.png" /><figcaption>(b) traces\_UCC19540310Gal_N_0907.mseed
Time in seconds relative to 1954-03-03T19:48:00</figcaption></figure>

<figure><img src="image_148.png" /><figcaption>(d) traces\_UCC19540303Gal_N_0833.mseed
Time in seconds relative to 1954-02-03T11:56:00</figcaption></figure>

<figure><img src="image_149.png" /><figcaption>(f) traces\_UCC19540203Gal_N_0821.mseed
Time in seconds relative to 1954-03-10T01:51:00</figcaption></figure>

<figure><img src="image_150.png" /><figcaption>(h) traces\_UCC19540309Gal_E_0817.mseed</figcaption></figure>

## Results (1):

Examples of the
enlarged vectorised
seismogram 1-minute
traces processed and
digitised by the Python
algorithm of the *seismo
0.1.0-alpha* software
developed by O.
Debeir.
The vectorised data
are visualised in the
ObsPy library of
Python using the
MSEED files generated
by *seismo 0.1.0-alpha*.
<figure><img src="image_150.png" /></figure>

## Results (2):

Seismogram vectorised by Python using our novel approach (green lines) overlaid on the original raster image (grey lines) and uploaded into Cytomine workspace.

* (a) Image
  UCC19540130Gal_E_0808
  (Cytomine ID 14911).

* (b) Image
  UCC19540201Gal_E_0805,
  Cytomine ID 16297.
<figure><img src="image_151.png" /></figure>

cytomine.ulb.ovh/#/project/451/image/14911?viewer=jjhje5ayq

80%

<figure><img src="image_152.png" /></figure>

<figure><img src="image_153.png" /></figure>

Q Search

<figure><img src="image_154.png" /></figure>

<figure><img src="image_155.png" /></figure>

<figure><img src="image_156.png" /></figure>

<figure><img src="image_157.png" /></figure>

<figure><img src="image_158.png" /></figure>

<figure><img src="image_159.png" /></figure>

<figure><img src="image_160.png" /></figure>

<figure><img src="image_161.png" /></figure>

<figure><img src="image_162.png" /></figure>

<figure><img src="image_163.png" /></figure>

<figure><img src="image_164.png" /></figure>

<figure><img src="image_165.png" /></figure>

Storage

<figure><img src="image_166.png" /></figure>

Ontologies

<figure><img src="image_167.png" /></figure>

Algorithms

<figure><img src="image_168.png" /><figcaption>(a)</figcaption></figure>

<figure><img src="image_169.png" /><figcaption>(b)</figcaption></figure>

## Results (2):

Seismogram vectorised by Python using our novel approach (green lines) overlaid on the original raster image (grey lines) and uploaded into Cytomine workspace.

(a) Image

UCC19540130Gal_E_0808
(Cytomine ID 14911).

(b) Image

UCC19540201Gal_E_0805,
Cytomine ID 16297.
# Results (3):

The dataset of the raw TIFF seismograms is available in the shared repository in Zenodo https://doi.org/10.5281/zenodo.7245119 with samples openly available for download, processing and data reuse.

It includes selected scanned seismogram images for the period of 1954 and enables the access to seismic waveform data. The original images included vertically and horizontally oriented seismograms. The images are in TIFF format and contain the original scanned seismograms from ROB data collections.

The dataset contains 45 files of seismic recordings received from the Galitzin seismometer. Image can be used for vectorisation and detection of seismic signals using presented Python workflow model.

<figure><img src="image_151.png" /></figure>
## Results (3):

The dataset of the raw TIFF seismograms is available in the shared repository in Zenodo https://doi.org/10.5281/zenodo.7245119 with samples openly available for download, processing and data reuse.

It includes selected scanned seismogram images for the period of 1954 and enables the access to seismic waveform data. The original images included vertically and horizontally oriented seismograms. The images are in TIFF format and contain the original scanned seismograms from ROB data collections.

The dataset contains 45 files of seismic recordings received from the Galitzin seismometer. Image can be used for vectorisation and detection of seismic signals using presented Python workflow model.

<figure><img src="image_170.png" /></figure>
# Actuality and Application

**Motivation** Challenge of big data in seismic studies: massif volumes of historical seismograms from ROB exist and present a source of information. Archive old data must be processed, digitised and 'revitalised'.

**Contribution** This project addresses the challenges of vectorising the old seismograms which revitalise the existing archives by R2V algorithms using ML methods.

**Methods** Our project focuses on developing automated ML methods of vectorising seismograms with minimised human interaction and maximised programming approach in trace vectorisation.

**People** End-users (seismologists) will benefit from our project which includes archiving and processing data, developed Python-based algorithms and vectorised seismograms for interpreting the results.

<figure><img src="image_152.png" /></figure>

Data Processing

<figure><img src="image_153.png" /></figure>

ML Algorithms

<figure><img src="image_154.png" /></figure>

Users

<figure><img src="image_155.png" /></figure>
# Actuality and Application

**Motivation** Challenge of big data in seismic studies: massif volumes of historical seismograms from ROB exist and present a source of information. Archive old data must be processed, digitised and ‘revitalised’.

**Contribution** This project addresses the challenges of vectorising the old seismograms which revitalise the existing archives by R2V algorithms using ML methods.

**Methods** Our project focuses on developing automated ML methods of vectorising seismograms with minimised human interaction and maximised programming approach in trace vectorisation.

**People** End-users (seismologists) will benefit from our project which includes archiving and processing data, developed Python-based algorithms and vectorised seismograms for interpreting the results.

<figure><img src="image_171.png" /></figure>

Data Processing

<figure><img src="image_172.png" /></figure>

ML Algorithms

<figure><img src="image_173.png" /></figure>

Users

<figure><img src="image_174.png" /></figure>
Other activities during my research in ULB:

* Supervision of the dissertation of the Master of Science (MSc) student Alexandre Missenard with topic overlapping to mine: 'Exploitation of EQTransformer and application to Belgian seismic data' (10 ECTS).

* Presentation at LISA with report on current research progress on December 10, 2021.

* Attended two consecutive French in-class courses "French language for foreigners" in the ULB Langues Faculty:

1. **LANG-B909**, niveau B2.2, jan-may 2022 (5 ECTS);

2. **LANG-B910** niveau C1, sep-dec 2022 (5 ECTS).

<figure><img src="image_156.png" /></figure>

<figure><img src="image_157.png" /></figure>
Other activities during my research in ULB:

* Supervision of the dissertation of the Master of Science (MSc) student Alexandre Missenard with topic overlapping to mine: 'Exploitation of EQTransformer and application to Belgian seismic data' (10 ECTS).

* Presentation at LISA with report on current research progress on December 10, 2021.

* Attended two consecutive French in-class courses "French language for foreigners" in the ULB Langues Faculty:

1. **LANG-B909**, niveau B2.2, jan-may 2022 (5 ECTS);

2. **LANG-B910** niveau C1, sep-dec 2022 (5 ECTS).

UNIVERSITÉ LIBRE DE BRUXELLES

<figure><img src="image_175.png" /></figure>

<figure><img src="image_176.png" /></figure>

ULB Langues

<figure><img src="image_177.png" /></figure>

ULB LANGUES | Centre interfacultaire d'enseignement des langues

Université libre de Bruxelles - Campus du Solbosch | Av. F. Roosevelt, 50 [CP 110] 1050 Bruxelles (Belgique)

T : +32 (0)2 650 20 12

M : Langues@ulb.be

W : Langues@ulb.be

ATTESTATION DE FREQUENTATION

Bruxelles, le 13 janvier 2023

Polina LEMENKOVA a suivi le cours de français langue étrangère de 60h niveau PERFECTIONNEMENT (correspondant au niveau C1 du cadre européen de référence) organisé par ULB Langues de septembre à décembre 2022. Elle/Il a obtenu la note de 14/20 à l'issue de l'examen de fin de cours passé en Janvier 2023 comptabilisant ainsi 5 crédits.

ULB Langues

Av. F. Roosevelt, 50 (CP 110)
1050 Bruxelles

+32 2 650 20 12 | 20 08

Langues.ulb.be

Langues@ulb.be

Eric GALIANO

Maitre de Langue

Département de français langue étrangère

<figure><img src="image_178.png" /></figure>

UNIVERSITÉ LIBRE DE BRUXELLES

<figure><img src="image_179.png" /></figure>

<figure><img src="image_180.png" /></figure>

ULB Langues

<figure><img src="image_181.png" /></figure>

ULB LANGUES | Centre interfacultaire d'enseignement des langues

Université libre de Bruxelles - Campus du Solbosch | Av. F. Roosevelt, 50 [CP 110] 1050 Bruxelles (Belgique)

T : +32 (0)2 650 20 12

M : Langues@ulb.be

W : Langues@ulb.be

ATTESTATION DE FREQUENTATION

Bruxelles, le 3 juin 2022

Polina LEMENKOVA a suivi le cours de français langue étrangère de 60h niveau AVANCE2 (correspondant au niveau B2.2. du cadre européen de référence) organisé par ULB Langues de février à mai 2022. Elle/Il a obtenu la note de 11/20 à l'issue de l'examen de fin de cours passé en mai 2022 comptabilisant ainsi 5 crédits.

ULB Langues

Av. F. Roosevelt, 50 (CP 110)
1050 Bruxelles

+32 2 650 20 12 | 20 08

Langues.ulb.be

Langues@ulb.be

Murielle Uyterels

Premier Maitre de Langue

Département de français langue étrangère

<figure><img src="image_182.png" /></figure>
# Résumé

## My activities in ULB during 2021/2022 and 2022/2023 academic years:

* **Conference paper (1):** De Plaen, R. S. M.; Lecocq, T.; Lemenkova, P. ; Debeir, O.; Ardhuin, F.; De Carlo, M. Extracting Microseismic Ground Motion From Legacy Seismograms. In: *Proceedings of the Third European Conference on Earthquake Engineering and Seismology*, 2022-09-04: Bucharest, Romania. Conspress, Ed. 1, pp. 3507-3513. Publié, 2022-09-09. https://doi.org/10.5281/zenodo.7064711 (5 ECTS);

* **Journal article (1):** Lemenkova, P.; De Plaen, R.; Lecocq, T.; Debeir, O. Computer Vision Algorithms of DigitSeis for Building a Vectorised Dataset of Historical Seismograms from the Archive of Royal Observatory of Belgium. *Sensors* **2023**, *23*, 56. https://doi.org/10.3390/s23010056 (10 ECTS);

* **Journal article (2) — submitted:** Lemenkova, P.; De Plaen, R.; Lecocq, T.; Debeir, O.A Python-based framework for automated vectorisation of the analog seismograms recorded in Uccle seismic station, Belgium. **2023 (expected 10 ECTS);**

* **Presentation (1) at LISA, ULB** with report on current research progress on December 10, 2021: "Vectorising analog seismograms by techniques of machine learning for automated discriminating of seismic signal traces" (5 ECTS);

* **Course (1):** LANG-B909, niveau B2.2: spring semester 2022 (jan-may) (5 ECTS);

* **Course (2):** LANG-B910 niveau C1: autumn semester 2022 (sep-dec) (5 ECTS).

* **Teaching:** Supervision of the dissertation of the MSc student Alexandre Missenard (10 ECTS)

* **Reviews:** my Web of Science (WoS) profile: https://www.webofscience.com/wos/author/rid/R-8828-2018 (10 ECTS)
# Résumé

## My activities in ULB during 2021/2022 and 2022/2023 academic years:

* **Conference paper (1):** De Plaen, R. S. M.; Lecocq, T.; Lemenkova, P. ; Debeir, O.; Ardhuin, F.; De Carlo, M. Extracting Microseismic Ground Motion From Legacy Seismograms. In: Proceedings of the Third European Conference on Earthquake Engineering and Seismology, 2022-09-04: Bucharest, Romania. Conspress, Ed. 1, pp. 3507-3513. Publié, 2022-09-09. https://doi.org/10.5281/zenodo.7064711 (5 ECTS);

* **Journal article (1):** Lemenkova, P.; De Plaen, R.; Lecocq, T.; Debeir, O. Computer Vision Algorithms of DigitSeis for Building a Vectorised Dataset of Historical Seismograms from the Archive of Royal Observatory of Belgium. Sensors **2023**, 23, 56. https://doi.org/10.3390/s23010056 (10 ECTS);

* **Journal article (2) - submitted:** Lemenkova, P.; De Plaen, R.; Lecocq, T.; Debeir, O.A Python-based framework for automated vectorisation of the analog seismograms recorded in Uccle seismic station, Belgium. **2023** (expected 10 ECTS);

* **Presentation (1)** at LISA, ULB with report on current research progress on December 10, 2021: "Vectorising analog seismograms by techniques of machine learning for automated discriminating of seismic signal traces" (5 ECTS);

* **Course (1):** LANG-B909, niveau B2.2: spring semester 2022 (jan-may) (5 ECTS);

* **Course (2):** LANG-B910 niveau C1: autumn semester 2022 (sep-dec) (5 ECTS).

* **Teaching:** Supervision of the dissertation of the MSc student Alexandre Missenard (10 ECTS)

* **Reviews:** my Web of Science (WoS) profile: https://www.webofscience.com/wos/author/rid/R-8828-2018 (10 ECTS)
<figure><img src="image_158.png" /></figure>
<figure><img src="image_183.png" /></figure>