|
23 | 23 | import numpy as np |
24 | 24 | from scipy.ndimage import generic_filter |
25 | 25 | import matplotlib.pyplot as plt |
| 26 | +from openpiv.windef import PIVSettings |
26 | 27 |
|
27 | 28 |
|
28 | 29 |
|
@@ -165,7 +166,13 @@ def sig2noise_val( |
165 | 166 | return ind |
166 | 167 |
|
167 | 168 |
|
168 | | -def local_median_val(u, v, u_threshold, v_threshold, size=1): |
| 169 | +def local_median_val( |
| 170 | + u: np.ndarray, |
| 171 | + v: np.ndarray, |
| 172 | + u_threshold: float, |
| 173 | + v_threshold: float, |
| 174 | + size: int=1 |
| 175 | + )->np.ndarray: |
169 | 176 | """Eliminate spurious vectors with a local median threshold. |
170 | 177 |
|
171 | 178 | This validation method tests for the spatial consistency of the data. |
@@ -201,16 +208,20 @@ def local_median_val(u, v, u_threshold, v_threshold, size=1): |
201 | 208 | """ |
202 | 209 |
|
203 | 210 | # kernel footprint |
204 | | - f = np.ones((2*size+1, 2*size+1)) |
205 | | - f[size,size] = 0 |
206 | | - |
207 | | - masked_u = np.where(~u.mask, u.data, np.nan) |
208 | | - masked_v = np.where(~v.mask, v.data, np.nan) |
| 211 | + # f = np.ones((2*size+1, 2*size+1)) |
| 212 | + # f[size,size] = 0 |
| 213 | + |
| 214 | + if np.ma.is_masked(u): |
| 215 | + masked_u = np.where(~u.mask, u.data, np.nan) |
| 216 | + masked_v = np.where(~v.mask, v.data, np.nan) |
| 217 | + else: |
| 218 | + masked_u = u |
| 219 | + masked_v = v |
209 | 220 |
|
210 | 221 | um = generic_filter(masked_u, np.nanmedian, mode='constant', |
211 | | - cval=np.nan, footprint=f) |
| 222 | + cval=np.nan, size=(2*size+1, 2*size+1)) |
212 | 223 | vm = generic_filter(masked_v, np.nanmedian, mode='constant', |
213 | | - cval=np.nan, footprint=f) |
| 224 | + cval=np.nan, size=(2*size+1, 2*size+1)) |
214 | 225 |
|
215 | 226 | ind = (np.abs((u - um)) > u_threshold) | (np.abs((v - vm)) > v_threshold) |
216 | 227 |
|
|
0 commit comments