Clear Filters
Clear Filters

Mean Composite of netcdf images

3 views (last 30 days)
Arnab Paul
Arnab Paul on 11 Mar 2024
Answered: Udit06 on 18 Mar 2024
I am stuck with a problem. I want to create a mean composite of multiple georeferenced .nc satelllite images. 1st problem is findling the study area. The images have my AOI in different position because of swath. Although I cropped the images based on desired lat and lon. Which cuased the 2nd problem. The cropped images have different dimensions. Someone suggested me to use meshgrid. Can someone give a clear vision how to create composite of multiple images
the code I have written so far is here.
fileDirectory = "input folder";
filename = dir(fullfile(fileDirectory, '*_reprojected_chl.nc'));
nFileDirectory = length(filename);
outputFolder = "output folder";
for i=1:nFileDirectory
nFileRrs = filename(i).name;
% Crop the data
min_lat = 26.5;
max_lat = 30.5;
min_lon = -95;
max_lon = -88.5;
data = ncread(fullfile(fileDirectory, nFileRrs), 'latitude'); % Replace with your actual variable name
latitude = double(data);
data = ncread(fullfile(fileDirectory, nFileRrs), 'longitude'); % Replace with your actual variable name
longitude = double(data);
data = ncread(fullfile(fileDirectory, nFileRrs), 'chl_image'); % Replace with your actual variable name
chl_image = double(data);
% Print lat/lon ranges
fprintf('File: %s, Latitude Range: %f to %f, Longitude Range: %f to %f\n', nFileRrs, min(latitude(:)), max(latitude(:)), min(longitude(:)), max(longitude(:)));
% Find row and column indices
[row_indices, col_indices] = find(latitude >= min_lat & latitude <= max_lat & ...
longitude >= min_lon & longitude <= max_lon);
clipped_chl_data = chl_image(min(row_indices):max(row_indices), min(col_indices):max(col_indices));
clipped_latitude = latitude(min(row_indices):max(row_indices), min(col_indices):max(col_indices));
clipped_longitude = longitude(min(row_indices):max(row_indices), min(col_indices):max(col_indices));
clipped_chl_data = clipped_chl_data';
clipped_latitude = clipped_latitude';
clipped_longitude = clipped_longitude';
% Get the dimensions of the clipped data
[r, c] = size(clipped_chl_data);
end

Answers (1)

Udit06
Udit06 on 18 Mar 2024
Hi Arnab,
Based on the code you have provided above, you've successfully looped through your .nc files, read the relevant data (latitude, longitude, and chl_image), and cropped the data to your Area of Interest (AOI). The next step would be to interpolate these cropped images to a common grid and then calculate the mean composite of these images.
You can follow the following steps for the same
1) Define a common grid
min_lat = 26.5;
max_lat = 30.5;
min_lon = -95;
max_lon = -88.5;
% Define the common grid's latitude and longitude boundaries and resolution
resolution_lat = 0.1; % adjust as per your requirement
resolution_lon = 0.1; % adjust as per your requirement
common_lat = min_lat:resolution_lat:max_lat;
common_lon = min_lon:resolution_lon:max_lon;
% Create the meshgrid for the common grid
[common_lon_grid, common_lat_grid] = meshgrid(common_lon, common_lat);
2) Interpolate each cropped image to the common grid
% Interpolate the current image to the common grid
interpolated_image = interp2(clipped_longitude, clipped_latitude, clipped_chl_data, common_lon_grid, common_lat_grid, 'linear'
You can refer to the following MathWorks documentation to understand more about meshgrid and interp2 functions.
I hope it helps.

Products


Release

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!