Skip to content

Ground-penetrating radar (GPR) data processing and visualisation: a free and open-source software package (R language)

Notifications You must be signed in to change notification settings


Folders and files

Last commit message
Last commit date

Latest commit


Repository files navigation

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

If you have any questions, comments or suggestions, feel free to contact me (in english, french or german):

I am developing this package on my free time as a gift to the GPR community. Any support will be appreciated!

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 (companion website with tutorials:

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}}

My current affiliation:

Emanuel Huber,
Bernstrasse 165
3052 Zollikofen 


Faster plot function

Instead of plot(x) use plotFast(x)!

Supported file formats (read only):

  • Sensors & Software file format (*.dt1, *.hd, *.gps).
  • MALA file format (*.rd3, *.rd7, *.rad, *.cor).
  • ImpulseRadar file format (*.iprb, *.iprh, *.cor, *.time, *.mrk).
  • GSSI file format (*.dzt, *.dzx).
  • Geomatrix Earth Science Ltd file format (Utsi Electronics format) for the GroundVue 3, 7, 100, 250 and 400 as well as for the TriVue devices (*.dat, *.hdr, *.gpt, *.gps).
  • Radar Systems, Inc. Zond file format (*.sgy). WARNING: it is not a version of the SEG-Y file format.
  • IDS file format (*.dt, *.gec).
  • Transient Technologies file format (*.sgpr).
  • US Radar file format (*.RA1, *.RA2 or *.RAD)
  • SEG-Y file format developed by the Society of Exploration Geophysicists (SEG) for storing geophysical data (*.sgy), also used by Easy Radar USA
  • SEG-2 Pullan, S.E., 1990, Recommended standard for seismic (/radar) files in the personal computer environment: Geophysics, 55, no. 9, 1260–1271(*.sg2). Also used by US Radar with extensions *.RA1, *.RA2, *. RAD.
  • GPRmax: hdf5 file format with extension *.out (not well tested)
  • 3dradar: the manufacturer does not want to reveal the binary file format *.3dra. Workaround: export the GPR data in binary VOL format (*.vol) with the examiner software -> still experimental
  • R internal format (*.rds).
  • serialized Python object (*.pkl).
  • ENVI band sequential file format (*.dat, *.hdr).
  • ASCII (*.txt):
    • either 3-column format (x, t, amplitude)
    • or matrix-format (without header/rownames)
  • Terra Zond binary file format (*.trz) -> we are working on it

See tutorial Import GPR data.

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.

Supported export file formats

  • Sensors & Software file format (*.dt1, *.hd).
  • R internal format (*.rds).
  • ASCII (*.txt):
  • SEG-Y file format (*.sgy)

Yes, you can contribute

This is an ongoing project.

To report bugs and 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):

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


Alternatively, you can download the package as a zip file and install it in R following these instructions:

Function overview

NOTE: this overview is not up to date!! More functions than those listed below are available!

The documentation is still incomplete (but check the tutorials, and do not hesitate to contact me if you need addtional informations)

Input/output functions

  • readGPR(): reads various GPR file formats (Sensors & Software, MALA, SEG-Y, ImpulseRadar, GSSI, Utsi Electronic, IDS, Tansient technology, serialized Python object, ENVI band sequential file format, ASCII, etc.)
  • writeGPR(): writes various GPR file format (Sensors & Software, R-format, ASCII, 'xyz')
  • exportPDF(): exports high quality pdf graphic
  • exportDelineations(): exports delineations
  • exportFID(): exports fiducial markers as ASCII-file
  • exportCoord(): exports coordinates as SpatialLines, SpatialPoints or ASCII-file
  • exportProc(): exports the processing steps as ASCII-file

Plot functions

  • GPR data
    • 1D/2D: plot(), plotFast(), contour(), lines(), points()`
    • 3D (plot in openGL): plot3DRGL()
    • superposition of all traces: trPlot()
  • Amplitude: plotAmpl()
  • Spectrum:
    • 1D frequency spectrum: spec()
    • 2D frequency spectrum (frequency-wavenumber): spec(x, type = "f-k")
  • Delineations
    • 2D: plotDelineations()
    • 3D: plot3DDelineations()
  • Velocity layers: plotVelocityLayers()
  • Structure tensor: plotTensor()
  • Color palette: plotPal()

3D GPR data (interpolation to slices

  • interpSlices(

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