How do I extract the multiband data using shape file?

4 views (last 30 days)
I am using my matlab code to extract the multiband data from envi format using shape file. Code is working without any error but it is not extracting multiband data. I am attaching the code and providing the link for data file and shape file and request you to please have a look on it and suggest me how to extract the multiband data. data link is as follows;
  3 Comments
gauri
gauri on 9 May 2024
The link mentioned above also have shape file along with data file.
gauri
gauri on 9 May 2024
Moved: Cris LaPierre on 10 May 2024
the extracted data should have
number of sample = 1315
number of lines = 1153
number of bands = 7

Sign in to comment.

Answers (1)

Jacob Mathew
Jacob Mathew on 10 May 2024
After going through the query and downloading the data and the code, I was able to run the code without any error. However, there are few discrepancies that I noticed which may be the reason why you are not getting the output that you expected.
Non unique data across some bands
You have tried to plot multiple bands simultaneously using the code:
mapshow(rescale(Z(:,:,[3 2 1])),R)
Plotting only one band at a time and comparing them side by side shows that there isn’t much variation between them:
Further investigation shows that there are only 3 unique bands:
  • Band 1 (corresponding to index 1)
  • Band 2, 3 4 and 5 (corresponding to index 2, 3, 4 & 5)
  • Ban 6 and 7 (corresponding to index 6 & 7)
Possibly incorrect logical mask
The 5490x5490 matrix logical mask has a rank of 3 and the sum of all its elements is 5. This shows that that mask matrix is overwhelmingly empty.
Fixing these two discrepancies might yield better result.
  1 Comment
gauri
gauri on 10 May 2024
Edited: gauri on 13 May 2024
I have modified the code as follows;
% Get image info:
DataFile='C:\working_bpt\bands\Bagpat_7Bands.dat'
[Z,R] = readgeoraster(DataFile);
disp(size(Z));
p = R.ProjectedCRS;
[x,y] = worldGrid(R);
[lon,lat] = projinv(p,x,y);
ShapeFile='C:\working_bpt\bands\BAGHPAT.shp'
S = shaperead(ShapeFile);
info = shapeinfo(ShapeFile);
crs = info.CoordinateReferenceSystem;
[S(1).lon,S(1).lat] = projinv(crs,S(1).X,S(1).Y);
% Remove trailing nan from shapefile
rx = S(1).lon(1:end-1);
ry = S(1).lat(1:end-1);
logical_mask = inpolygon(S(1).lon,S(1).lat,rx,ry);
% Use the logical mask to extract data
extracted_data = Z(logical_mask);
disp(extracted_data);
it is giving following informations
DataFile =
'C:\working_bpt\bands\Bagpat_7Bands.dat'
5490 5490 7
ShapeFile =
'C:\working_bpt\bands\BAGHPAT.shp'
1 9
>>
I request you to kindly look on it and suggest me how to get seven band data using shape file.

Sign in to comment.

Products


Release

R2024a

Community Treasure Hunt

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

Start Hunting!