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.
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}}
- Sensors & Software file format (*.dt1, *.hd).
- MALA file format (*.rd3, *.rd7, *.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).
- ENVI band sequential file format (*.dat, *.hdr).
- SEG-Y -> 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.
RGPR only support reflection data such as surface-based GPR data (no support for cross-borehole GPR data)
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!
Check the companion website for more info, tutorials, etc.
http://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)
The documentation is still incomplete (but check the tutorials, http://emanuelhuber.github.io/RGPR)
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 graphicexportDelineations()
exportFID()
: ASCII-fileexportCoord()
: SpatialLines, SpatialPoints or ASCII-fileexportProc()
: ASCII-file
plot()
:type = "raster"
type = "wiggles"
lines()
plot3D()
- 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