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
/home/runner/micromamba/envs/wradlib-tests/lib/python3.11/site-packages/h5py/__init__.py:36: UserWarning: h5py is running against HDF5 1.14.3 when it was built against 1.14.2, this may cause problems
_warn(("h5py is running against HDF5 {0} when it was built against {1}, "
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) * range (range) float64 500.0 1.5e+03 2.5e+03 ... 1.265e+05 1.275e+05 * azimuth (azimuth) float64 0.5 1.5 2.5 3.5 ... 356.5 357.5 358.5 359.5 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 crs_wkt 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) * range (range) float64 500.0 1.5e+03 2.5e+03 ... 1.265e+05 1.275e+05 * azimuth (azimuth) float64 0.5 1.5 2.5 3.5 ... 356.5 357.5 358.5 359.5 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 crs_wkt 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')