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): [email protected]
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: https://emanuelhuber.github.io/RGPR).
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
Bibtex format
@INPROCEEDINGS{huber&hans:2018,
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,
GEOTEST AG
Bernstrasse 165
3052 Zollikofen
Switzerland
Instead of plot(x)
use plotFast(x)
!
- 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.
- Sensors & Software file format (*.dt1, *.hd).
- R internal format (*.rds).
- ASCII (*.txt):
- SEG-Y file format (*.sgy)
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!
Check the companion website for more info, tutorials, etc.
https://emanuelhuber.github.io/RGPR
You must first install R. Then, in R console, enter the following:
if(!require("devtools")) install.packages("devtools")
devtools::install_github("emanuelhuber/RGPR")
library(RGPR)
frenkeLine00 # data from the package
plot(frenkeLine00)
Alternatively, you can download the package as a zip file and install it in R following these instructions:
https://riptutorial.com/r/example/5556/install-package-from-local-source
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, https://emanuelhuber.github.io/RGPR and do not hesitate to contact me if you need addtional informations)
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 graphicexportDelineations()
: exports delineationsexportFID()
: exports fiducial markers as ASCII-fileexportCoord()
: exports coordinates as SpatialLines, SpatialPoints or ASCII-fileexportProc()
: exports the processing steps as ASCII-file
- GPR data
- 1D/2D:
plot()
,contour()
,lines()
,points()
- 3D (plot in openGL):
plot3DRGL()
- superposition of all traces:
trPlot()
- 1D/2D:
- Amplitude:
plotAmpl()
- Envelope:
plotEnvelope()
- Spectrum:
- 1D frequency spectrum:
spec()
- 2D frequency spectrum (frequency-wavenumber):
spec(x, type = "f-k")
- 1D frequency spectrum:
- Delineations
- 2D:
plotDelineations()
- 3D:
plot3DDelineations()
- 2D:
- Velocity layers:
plotVelocityLayers()
- Structure tensor:
plotTensor()
- Color palette:
plotPal()
- 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()
- 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()
- Trace interpolation at regularly spaced positions:
regInterpPos()
- Upsampling (time and position):
upsample()
- Relative position on the radargramm:
relPos()
- 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()
- Linear, power, exponential, ang agc gain:
gain()
(type = "power", "exp", "agc")
- 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()
andconv2D()
- Deconvolution:
deconv()
(type = "spiking", "wavelet", "min-phase", "mixed-phase") - Phase rotation
rotatePhase()
- Common-mid point analysis (CMP):
CMPAnalysis()
(method = "semblance", "winsemblance", "wincoherence") - Normal Move-Out correction (NMO):
NMOCor()
- Topography correction and topographic Kirchhoff migration:
migration()
(type = "static", "kirchhoff")
- Apply many processing steps:
papply()
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()
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()<-
library(RGPR)
mtext <- showMethods(class="GPR", printTo =FALSE )
i <- grepl('Function', mtext) & grepl('package RGPR', mtext)
fvec <- gsub( "Function(\\:\\s|\\s\\\")(.+)(\\s\\(|\\\")(.+$)", "\\2", mtext[i] )
fvec
library(RGPR)
mtext <- showMethods(class="GPRsurvey", printTo =FALSE )
i <- grepl('Function', mtext) & grepl('package RGPR', mtext)
gvec <- gsub( "Function(\\:\\s|\\s\\\")(.+)(\\s\\(|\\\")(.+$)", "\\2", mtext[i] )
gvec
?RGPR
Thanks to:
- @jmerc13