- https://www.mathworks.com/help/matlab/ref/nat.html
- https://www.mathworks.com/help/matlab/ref/datenum.html
How do I extract the specific values from NDVI time serie?
2 views (last 30 days)
Show older comments
I have generated ndvi input file time series over crop season(1 year period) and want to extract the following; POS value;MAX sum;AVG sum;SOS;POS;EOS The discription of above mentioned parameters are as follows; (a) Phenological markers • Start of season (SOS): the date of growth start and crop emergence • Peak of season (POS): the date of the maximum NDVI value in the time series • End of season (EOS): the date of the harvesting and chlorophyll ab- sence • POS value: maximum NDVI value in the time series •
Average sum: sum of average NDVI values in the time series
• Maximum sum: sum of maximum NDVI values in the time series
• Base: the range between minimum and maximum NDVI
I am attaching input ndvi file as excel csv file. I am also attaching the output file as a sample it has not been derived from the above mentioned two input files. This is just sample output file. I am requesting to matlab signal processing comunity to please suggest me how to write this code. I would be highly obliged for any kind help.
Jyoti
0 Comments
Answers (1)
Suraj Kumar
on 9 Sep 2024
Hi Devendra,
From what I understand, you are trying to extract specific phenological values from an NDVI time series using MATLAB.
For this you can refer to the following steps and the attached code snippets:
You can start by importing your NDVI data from the CSV file into MATLAB and then extract the dates and the NDVI values from the dataset.
% Load NDVI data from CSV
data = readtable('ndvi_time_series_input.csv');
% Extract dates and NDVI values
dates = data.Properties.VariableNames(2:end);
ndvi_values = data{:, 2:end};
Initialize the arrays using ‘NaT’ function in MATLAB, to store the desired results.
sos = zeros(size(ndvi_values, 1), 1);
pos = zeros(size(ndvi_values, 1), 1);
eos = zeros(size(ndvi_values, 1), 1);
pos_value = zeros(size(ndvi_values, 1), 1);
avg_sum = zeros(size(ndvi_values, 1), 1);
max_sum = zeros(size(ndvi_values, 1), 1);
base = zeros(size(ndvi_values, 1), 1);
Calculate the phenological markers by looping through each row of the NDVI data.
% Loop through each row in the NDVI data
for i = 1:size(ndvi_values, 1)
[pos_value(i), pos_idx] = max(ndvi_values(i, :));
pos(i) = datenum(dates{pos_idx}, 'yyyymmdd');
sos_idx = find(ndvi_values(i, :) > (min(ndvi_values(i, :)) + 0.1 * (pos_value(i) - min(ndvi_values(i, :)))), 1);
if ~isempty(sos_idx)
sos(i) = datenum(dates{sos_idx}, 'yyyymmdd');
end
eos_idx = find(ndvi_values(i, pos_idx:end) < (min(ndvi_values(i, :)) + 0.1 * (pos_value(i) - min(ndvi_values(i, :)))), 1);
if ~isempty(eos_idx)
eos(i) = datenum(dates{pos_idx + eos_idx - 1}, 'yyyymmdd');
end
avg_sum(i) = sum(ndvi_values(i, :)) / length(ndvi_values(i, :));
max_sum(i) = sum(max(ndvi_values(i, :)));
base(i) = range(ndvi_values(i, :));
end
Compile these calculations into a table for easy analysis and interpretation and display the results.
results = table(data{:, 1}, sos, pos, eos, pos_value, avg_sum, max_sum, base, ...
'VariableNames', {'Location', 'SOS', 'POS', 'EOS', 'POS_Value', 'Avg_Sum', 'Max_Sum', 'Base'});
disp(results);
You can look at the output for a better understanding:
For more details on the ‘NaT’ or ‘datenum’ functions in MATLAB, you can refer to the following links:
Happy coding!
0 Comments
See Also
Categories
Find more on Calendar in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!