How do I complete my matlab code for a given formula.?

19 vues (au cours des 30 derniers jours)
Devendra
Devendra le 14 Mar 2024
Modifié(e) : Devendra le 14 Avr 2024 à 11:06
% This is done through k-Means clustering and binarization to derive a
% binary classification of each parcel for cropland and non-cropland pixels.
% This process results in 2 clusters per parcel object for which the
% mean values are calculated. Herein, a threshold for pixels higher
% than 0.4 was defined for the derivation of CAF:
% 𝐶𝐴𝐹 = Σ𝑝 > 0 . 4 / Σ𝑝
% where Σp is the sum of all pixels and Σ𝑝 > 0 . 4 the sum of pixels
% which are located within the cluster with a mean NDVI higher than 0.4.
% open NDVI file
img = imread('ndvi.tif');
% pickup the shape files of parcels
d = uigetdir(pwd, 'Select a folder');
shapefiles = dir(fullfile(d, '*.shp'));
for m = 1:length(shapefiles)
shapefile = shapefiles(m);
disp(shapefile.name);
S = shaperead(shapefile.name);
polygon = polyshape([S.X], [S.Y]);
% Create a logical mask
logical_mask = inpolygon(lon, lat, polygon.Vertices(:, 1), polygon.Vertices(:, 2));
% Use the logical mask to extract data from ndvi image for parcel
parcel_ndvi = img(logical_mask);
% Apply k-means clustering with k=2
k = 2;
[idx, centroids] = kmeans(parcel_ndvi, k);
X = mean(idx(:,1));
Y = mean(idx(:,2));
end
I would appreciate any help to complete above code as per comments given at the top of this code.
Deve
  5 commentaires
Devendra
Devendra le 14 Mar 2024
Modifié(e) : Devendra le 15 Mar 2024
if mean(parcel_ndvi(idx == 1)) > mean(parcel_ndvi(idx == 2)) then
cropland = idx(1)
noncropland = idx(2)
otherwise
cropland = idx(2)
noncropland = idx(1)
endif
How do I write above lines in matlab code ?
Thanks a lot for your kind help.
Dave
Walter Roberson
Walter Roberson le 15 Mar 2024
if mean(parcel_ndvi(idx == 1)) > mean(parcel_ndvi(idx == 2))
cropland = 1;
noncropland = 2;
else
cropland = 2;
noncropland = 1;
end

Connectez-vous pour commenter.

Réponse acceptée

Walter Roberson
Walter Roberson le 14 Mar 2024
The first thing you have to do is figure out which of the two clusters corresponds to which condition.
kmeans() clustering with two clusters can return either index being the one of interest -- even if you give it options for initial cluster centers, because of the way that cluster updates go, it is possible for the two clusters to effectively exchange identities.
Once you have figured out which is which, you would
mask = idx == CLUSTER_OF_INTEREST;
CAF = nnz(parcel_ndvi(mask) > 0.4) / (size(img,1)*size(img,2))
  3 commentaires
Walter Roberson
Walter Roberson le 15 Mar 2024
size(img,2)*size(img,2) is the number of pixels covered by img
Devendra
Devendra le 14 Avr 2024 à 6:47
Modifié(e) : Devendra le 14 Avr 2024 à 11:06
Thank you very much for your kind help. I am using following matlab lines to create mask over cropland.
if mean(parcel_ndvi(idx == 1)) > mean(parcel_ndvi(idx == 2))
cropland = 1;
noncropland = 2;
else
cropland = 2;
noncropland = 1;
end
mask = idx == cropland
I want to mask only those pixels under cropland whose ndvi values are greater than 0.4. I request you to please suggest me how to create the said mask using matlab code. I would appreciate your kind help.
Devendra

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Statistics and Machine Learning Toolbox dans Help Center et File Exchange

Produits


Version

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by