A free and open-source software package for ground-penetrating radar (GPR) data processing
Branch: master
Clone or download
Latest commit 7ab62e3 Feb 15, 2019


RGPR: a free and open-source software package for ground-penetrating radar (GPR) data processing

RGPR is a free and open-source software package to read, export, analyse, process and visualise ground-penetrating radar (GPR) data. RGPR is written in R, a high-level programming language for statistical computing and graphics that is freely available under the GNU General Public License and runs on Linux, Windows and MacOS. R is a interpreted scripting language (not compiled) in the same veine as python or matlab.

RGPR was initially developed to compensate for shortcomings of commercial GPR data processing applications. The ultimate goal of RGPR is to promote GPR related research by providing access to the flexible and rich R environment. RGPR has also a didactic vocation by encouraging students and researchers to learn about GPR signal processing through various tutorials available on the RGPR GitHub repository and the R documentation.

Table of content

How to cite

E. Huber and G. Hans (2018) RGPR — An open-source package to process and visualize GPR data. 17th International Conference on Ground Penetrating Radar (GPR), Switzerland, Rapperswil, 18-21 June 2018, pp. 1-4. doi: 10.1109/ICGPR.2018.8441658

PDF Poster

Bibtex format

author    = {Emanuel Huber and Guillaume Hans},
booktitle = {2018 17th International Conference on Ground Penetrating Radar (GPR)},
title     = {RGPR — An open-source package to process and visualize GPR data},
year      = {2018},
pages     = {1--4},
doi       = {10.1109/ICGPR.2018.8441658},
ISSN      = {2474-3844}}


Supported file formats:

  • Sensors & Software file format (*.dt1, *.hd).
  • MALA file format (*.rd3, *.rad).
  • RadSys Zond GPR file format (*.sgy). WARNING: it is not like the usual SEG-Y file format).
  • ImpulseRadar format (*.iprb, *iprh).
  • GSSI file format (*.dtz).
  • ASCII (*.txt):
    • either 3-column format (x, t, amplitude)
    • or matrix-format (without header/rownames)
  • R internal format (*.rds).
  • SEG-Y -> we are working on it

Do you miss your preferred file format? Send me the file format description with a test file and I will adapt the RGPR-package to support this file format.

Current limitations

RGPR only support reflection data such as surface-based GPR data (no support for cross-borehole GPR data)

Yes, you can contribute

This is an ongoing project.

To report bugs, contribute to the development of RGPR, see how to contribute.

If you have any questions, comments or suggestions, feel free to contact me (in english, french or german): emanuel.huber@alumni.ethz.ch

Thank you!

Online tutorials

Check the companion website for more info, tutorials, etc.


How to install

You must first install R. Then, in R console, enter the following:

if(!require("devtools")) install.packages("devtools")

frenkeLine00  # data from the package


Function overview

The documentation is still incomplete (but check the tutorials, http://emanuelhuber.github.io/RGPR)

Input/output functions

  • readGPR(), formats: Sensors & Software (.d11, .hd), MALA (.rd3, .rad), SEG-Y for RadSys Zond GPR device (.sgy), R (rds)
  • writeGPR(): format DT1 (Sensors&Software), rds (R-format), ASCII, 'xyz'
  • exportPDF(): high quality pdf graphic
  • exportDelineations()
  • exportFID(): ASCII-file
  • exportCoord(): SpatialLines, SpatialPoints or ASCII-file
  • exportProc(): ASCII-file

Plot functions

  • plot():
    • type = "raster"
    • type = "wiggles"
  • lines()
  • plot3D()

GPR data positioning and referencing

  • Trace position reversal: reverse()
  • Vertical trace shift: traceShift()
  • Georeference coordinates (based on center and rotation angle): georef()
  • Interpolate trace position (x, y, z) from known positions: interpPos()
  • Estimate shift between two parallel profiles: shiftEst()

GPR data analysis and processing

GPR data analysis and transforms

  • Trace amplitude: ampl(), plot trace amplitude: plotAmpl()
  • Average trace: traceAverage()
  • Spectrum (f-x and f-k): spec(x, type = c("f-x", "f-k"))
  • Structure tensor: strTensor(), plot structure tensor: plotTensor()

GPR data interpolation

  • Trace interpolation at regularly spaced positions: regInterpPos()
  • Upsampling (time and position): upsample()
  • Relative position on the radargramm: relPos()

GPR signal correction

  • DC-shift correction: dcshift()
  • Low-frequency ('wow') component removal: dewow() (type = "MAD", "Gaussian")
  • First-break picking: firstBreak() (method = "coppens", "threshold", "MER")
  • Shift the traces vertically such that they start at time zero: time0Cor()
  • Constant offset time correction: timeCorOffset()

GPR signal attenuation compensation (gain)

  • Linear, power, exponential, ang agc gain: gain() (type = "power", "exp", "agc")

GPR signal enhancement

  • Clip the GPR signal values: clip()
  • Gamma correction of the GPR signal values: gammaCorrection()
  • Trace scaling: traceScaling()
  • Trace filters (1D): filter1D(): type = "median", "hampel", "Gaussian"
  • Radargramm filters (2D): filter2D(): type = "median3x3", "adimpro"
  • Trace frequency filter (1D): fFilter(): freqency filter, type = 'low','high','bandpass'
  • Frequency-wavenumber filter (2D): fkFilter()
  • Trace (1D) and radargramm (2D) convolution: conv1D() and conv2D()
  • Deconvolution: deconv() (type = "spiking", "wavelet", "min-phase", "mixed-phase")
  • Phase rotation rotatePhase()

GPR signal velocity

  • Common-mid point analysis (CMP): CMPAnalysis() (method = "semblance", "winsemblance", "wincoherence")
  • Normal Move-Out correction (NMO): NMOCor()

GPR data topographic correction and migration

  • Topography correction and topographic Kirchhoff migration: migration() (type = "static", "kirchhoff")

Generic processing functions

  • Apply many processing steps: papply()

GPR data delineation and mapping

  • delineate()
  • rmDelineations()<-
  • delineations()
  • addDelineation()
  • plotDelineations3D()
  • plotDelineations()
  • identifyDelineation()


  • Operators: +, -, *, /, ^
  • Mathematical functions: max(), min(), mean(), median(), summary(), range(), abs(), sign(), sqrt(), ceiling(), ...
  • Matrix functions: length(), nrow(), ncol(), dim()
  • Coercion: as.matrix(), as.numeric(), as.double(), as.list(), as.SpatialLines(), as.SpatialPoints()

Setter/getter functions

  • depthunit() & depthunit()<-
  • description() & description()<-
  • ann() & ann()<-
  • coord() & coord()<-
  • crs() & crs()<-
  • fid() & fid()<-
  • filepath() & filepath()<-
  • pos() & pos()<-
  • posunit() & posunit()<-
  • proc<-() & processing
  • name() & name()<-
  • values() & values()<-
  • vel() & vel()<-
  • gethd()
  • svDate() & svDate()<-

List of the functions from the class GPR

mtext <-  showMethods(class="GPR", printTo =FALSE )
i <- grepl('Function', mtext) & grepl('package RGPR', mtext) 
fvec <- gsub( "Function(\\:\\s|\\s\\\")(.+)(\\s\\(|\\\")(.+$)", "\\2", mtext[i] )

List of the functions from the class GPRsurvey

mtext <-  showMethods(class="GPRsurvey", printTo =FALSE )
i <- grepl('Function', mtext) & grepl('package RGPR', mtext) 
gvec <- gsub( "Function(\\:\\s|\\s\\\")(.+)(\\s\\(|\\\")(.+$)", "\\2", mtext[i] )

Incomplete overview of the RGPR-package



Thanks to:

  • @jmerc13