## 2 Materials and Methods
### Sowing and Harvest Dates Estimation
#### 2.4.1 Time-Series Smoothing  
Even though most of the noise data were removed during the pre-processing steps, the VI time series required further steps such as filtering [3]. Different methodologies were used for each dataset after evaluating various noise removal methods (see Supplementary Materials--Section S1, Figures S1 and S2). Briefly, for MODIS data that already had the maximum-value composite procedure (MVC), each time series was interpolated to fill existing gaps, filtered with Savitzky-Golay (SG) [3] to remove residuals, and interpolated for daily values. Each time series in the Sentinel-2 dataset was first interpolated daily to fill in gaps and null data (days without images). The Best Index Slope Extraction (BISE) algorithm [49] was then used to remove the remaining noise/outliers from the set of time series. Subsequently, the SG filtering procedure was used to smooth the time series VI curve and reduce residual noise in the time series VI datasets. The SG filter was applied to all datasets with a window size of 5 and a polynomial degree of 2. As each extraction algorithm had different functions for noise removal and time series smoothing, this processing was performed separately before LSP extraction in order to provide the algorithms with the best time series for each product. These processes reflect standard procedures when analyzing VI time series [3]. contained in the dea_tools.temporal script that is a part of the DEA big data platform that provides both the analytical tools and the high-performance computing infrastructure needed to facilitate the analysis of multi-decadal time series data [50]. The package was developed in Python and had two possible parameter values for estimating each of the SOS and EOS metrics, as follows [27]: If 'first', then SOS is estimated as the first positive slope on the greening side of the curve. If'median', then SOS is estimated as the median value of the curve's positive slopes on the greening side. If 'last', then EOS is estimated as the last negative slope on the senescing side of the curve. If'median', then EOS is estimated as the'median' value of the negative slopes on the senescing side of the curve. Greenbrown  
The greenbrown package (GB) is a collection of functions developed to analyze trends, trend changes, and phenology events from satellite observations or climate model simulations [25]. In this package, phenology events can be estimated from the daily interpolated, gap-filled, and smoothed time series using two different methodologies, thresholds (PhenoTras and PhenoWhite), or extreme values of the derivative of the seasonal cycle (PhenoDeriv) [25]. Both approaches are based on the definition of SOS and EOS as the mid-points of green-up and senescence, respectively [51]. Phenofit  
The phenofit (PF) package was developed in the R language and had several built-in functionalities, from noise minimization to metric extraction [21]. The input supports evenly and unequally spaced time series and can handle missing input values. It combines methods of growing season splitting, 7 curve fitting methods, and four phenology extraction methods and provides flexible input and output routines [21]. In this package, the threshold and derivative method were also selected, which defines SOS and EOS as the first day on which the VI value exceeds the threshold and mid-points of green-up and senescence, respectively. Phenex  
The phenex (PX) package is implemented in the R language and provides a collection of functions for the temporal analysis of phenological data [24]. Besides having methods for extracting phenological metrics, the package has functions such as BISE [49] for correcting time series and methods such as linear interpolation, fast Fourier transform (FFT), and SG filter for fitting time series [24]. The function modelValues allows for these corrections to be performed while the function phenoPhase extracts the phenological metrics from the time series based on the threshold method [24].