Clutter detection using the Gabella approach#
[1]:
import matplotlib.pyplot as plt
import numpy as np
import wradlib as wrl
import warnings
warnings.filterwarnings("ignore")
try:
get_ipython().run_line_magic("matplotlib inline")
except:
plt.ion()
import numpy as np
Read the data#
[2]:
filename = wrl.util.get_wradlib_data_file("misc/polar_dBZ_fbg.gz")
data = np.loadtxt(filename)
data = wrl.georef.create_xarray_dataarray(data, rf=0.001).wrl.georef.georeference()
data
Downloading file 'misc/polar_dBZ_fbg.gz' from 'https://github.com/wradlib/wradlib-data/raw/pooch/data/misc/polar_dBZ_fbg.gz' to '/home/runner/work/wradlib/wradlib/wradlib-data'.
[2]:
<xarray.DataArray (azimuth: 360, range: 128)> array([[ 7.01, 8.28, 5.46, ..., -10. , -10. , -10. ], [ 7.01, 7.01, 7.01, ..., -10. , -10. , -10. ], [ 7.01, 7.67, 5.46, ..., -10. , -10. , -10. ], ..., [ 7.01, 8.28, 5.46, ..., 14.87, 17.76, 15.51], [ 7.67, 7.67, 5.46, ..., 0.64, 8.83, 4.53], [ 8.83, 7.67, 4.53, ..., -8.99, -4.17, -8.99]]) Coordinates: (12/14) * azimuth (azimuth) float64 0.5 1.5 2.5 3.5 ... 356.5 357.5 358.5 359.5 * range (range) float64 500.0 1.5e+03 2.5e+03 ... 1.265e+05 1.275e+05 elevation (azimuth) float64 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 longitude float64 0.0 latitude float64 0.0 altitude float64 0.0 ... ... y (azimuth, range) float64 500.0 1.5e+03 ... 1.265e+05 1.275e+05 z (azimuth, range) float64 0.0147 0.1323 0.3675 ... 940.8 955.7 gr (azimuth, range) float64 500.0 1.5e+03 ... 1.265e+05 1.275e+05 rays (azimuth, range) float64 0.5 0.5 0.5 0.5 ... 359.5 359.5 359.5 bins (azimuth, range) float64 500.0 1.5e+03 ... 1.265e+05 1.275e+05 spatial_ref int64 0
Apply filter#
[3]:
clmap = data.wrl.classify.filter_gabella(
wsize=5, thrsnorain=0.0, tr1=6.0, n_p=8, tr2=1.3
)
clmap
[3]:
<xarray.DataArray 'filter_gabella' (azimuth: 360, range: 128)> array([[False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], ..., [False, False, False, ..., True, True, True], [False, False, False, ..., True, True, True], [False, False, False, ..., False, False, False]]) Coordinates: (12/14) * azimuth (azimuth) float64 0.5 1.5 2.5 3.5 ... 356.5 357.5 358.5 359.5 * range (range) float64 500.0 1.5e+03 2.5e+03 ... 1.265e+05 1.275e+05 elevation (azimuth) float64 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 longitude float64 0.0 latitude float64 0.0 altitude float64 0.0 ... ... y (azimuth, range) float64 500.0 1.5e+03 ... 1.265e+05 1.275e+05 z (azimuth, range) float64 0.0147 0.1323 0.3675 ... 940.8 955.7 gr (azimuth, range) float64 500.0 1.5e+03 ... 1.265e+05 1.275e+05 rays (azimuth, range) float64 0.5 0.5 0.5 0.5 ... 359.5 359.5 359.5 bins (azimuth, range) float64 500.0 1.5e+03 ... 1.265e+05 1.275e+05 spatial_ref int64 0
Plot results#
[4]:
fig = plt.figure(figsize=(12, 8))
ax1 = fig.add_subplot(121)
pm = data.wrl.vis.plot(ax=ax1)
ax1.set_title("Reflectivity")
ax2 = fig.add_subplot(122)
pm = clmap.wrl.vis.plot(ax=ax2)
ax2.set_title("Cluttermap")
[4]:
Text(0.5, 1.0, 'Cluttermap')
