Daha çox

Python / Numpy ilə Savitzky-Golay Filtrini tətbiq edən MODIS zaman seriyasının yenidən qurulması


Məlumatlarımdakı səs-küyü (yəni bulud piksellərini və s.) Silmək üçün 'Savitzky-Golay' (savgol) filtrini vaxt seriyam olan MODIS verilənlər bazasına tətbiq etmək istəyirəm. MODİS-də hər piksel dəyərinin etibarlılığını və ya pikselin buludlardan təsirləndiyini göstərən keyfiyyətli bayraqları vardır. Buna görə daha az çəki qoyaraq və ya bu piksel dəyərlərinə məhəl qoymadan bu keyfiyyət bayraqlarını filtrimə daxil etmək istəyirəm və savgol filtrinin optimal piksel dəyərini proqnozlaşdırmasına icazə verin. Test edirəmnp.NaN/np.nan/boşdurancaq görünür ki, massivdəki elementi silir və nəticədə savgol filtri də bu dəyərləri atlayır. Nəticədə əldə etdiyim məlumatların əlavə olunmuş şəkildəki kimi olmasını istərdim.

(https://matinbrandt.wordpress.com/2014/12/02/smoothingfiltering-a-ndvi-time-series-using-a-savitzky-golay-filter-and-r/)


Savitzky-Golay filtrini tətbiq etməzdən əvvəl itkin məlumatları interpolasiya etməlisiniz. TIMESAT bu iş üçün ən çox istifadə olunan vasitədir və Savitzky-Golay filtrini tətbiq etməzdən əvvəl eksik məlumatları xətti interpolasiya ilə idarə edirlər. Buludlu və digər pis müşahidələri onsuz da maskaladığınızı düşünsəknp.nanburada bir zaman seriyasını necə interpolasiya edə bilərsiniz pandas.interpolate () və sonra Savitzky-Golay filtrini tətbiq edin scipy.signal.savgol_filter ().

scpy.signal-dən pdas kimi pdas kimi idxal numpy, idxal savgol_filter # təsadüfi bir zaman seriyası yaradın time_series = np.random.random (50) time_series [time_series <0.1] = np.nan time_series = pd.Series (time_series) # interpolate itkin məlumat time_series_interp = time_series.interpolate (metod = "lineer") # tətbiq edin SavGol filter time_series_savgol = savgol_filter (time_series_interp, window_length = 7, polyorder = 2)

Əlbəttə ki, itkin məlumatları interpolasiya etmək üçün başqa yollar var, lakin pandalar bunu etmək üçün ən əlverişli yollardan biridir, xüsusən də müxtəlif interpolasiya alqoritmlərinin təsirlərini yoxlamaq istəyirsinizsə.


SG filtrinə əsasənhiyləgər.siqnalTəklif olunan NDVI dəfə istehsal olunan hamarlaşdırma alqoritmini qurdum:

Savitzky-Golay filtrinə əsaslanan yüksək keyfiyyətli NDVI zaman seriyası məlumat dəstinin yenidən qurulması üçün sadə bir metod ", Jin Chen et al. 2004

pandaları pd olaraq idxal edin, scipy.signal-dən np kimi idpy savgol_filter def savitzky_golay_filtering (timeseries, wnds = [11, 7], orders = [2, 4], debug = True): interp_ts = pd.Series (timeseries) interp_ts = interp_ts.interpolate (metod = 'xətti', limit = 14) smooth_ts = interp_ts wnd, order = wnds [0], order [0] F = 1e8 W = Heç it = 0 while True: smoother_ts = savgol_filter (smooth_ts, window_length = wnd, polyorder = order) diff = smoother_ts - interp_ts işarəsi = diff> 0, əgər W yoxdursa: W = 1 - np.abs (diff) / np.max (np.abs (diff)) * işarəsi wnd, order = wnds [1], sifarişlər [1] fitting_score = np.sum (np.abs (diff) * W) yazdır, ':', fitting_score if fitting_score> F: break else: F = fitting_score it + = 1 smooth_ts = smoother_ts * işarəsi + interp_ts * (1 - işarəsi) əgər debug: return smooth_ts, interp_ts return smooth_ts

Doğru yoldasınız, xahiş edirəm sualınızın şərhlərinə qoyduğum kağızı oxuyun.

Həmin kağızdan atacağınız addımlarla bir keçid sxemi (girişiniz olmadığı təqdirdə):

Gördüyünüz kimi, addım 1 üçün buludları zaman seriyasından kənarlaşdırardınız; və sonra boşluqları doldurmaq üçün interpolasiya üsullarını tətbiq edin.

Chen və digərləri kimi bir üsul olardı. cavabında Kersten tərəfindən təsvir olunan üsullarla xətti interpolasiya təklif edin.


Videoya baxın: What does numpy reshape-1 1 mean? (Oktyabr 2021).