how to generate correct logical mask of the size of shape file?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
i am using following code to generate logical mask
function croppedimg = cropimage(data, R, shapefile)
% Load the shapefile and retrieve its info
S = shaperead(shapefile);
% Shapefile projections
info = shapeinfo(shapefile);
crs = info.CoordinateReferenceSystem;
[S.lon,S.lat] = projinv(crs,S.X,S.Y);
% read and reproject image file
p = R.ProjectedCRS;
[x,y] = worldGrid(R);
[lon,lat] = projinv(p,x,y);
% Create a logical mask
% Approach 1: Using 'inpolygon' function
xq = lon(:);
yq = lat(:);
in = inpolygon(xq,yq,S.lon,S.lat);
logical_mask = reshape(in,size(lon));
% Debugging: Display the logical mask summary
disp(['Total number of pixels inside polygon: ', num2str(numel(logical_mask))]);
disp(['Total number of pixels inside image: ', num2str(numel(data))]);
However it is showing the
Total number of pixels inside polygon: 16982229
Total number of pixels inside image: 16982229
please suggest me how to create correct logical mask of the size of shape file.
kuldeep
0 comentarios
Respuestas (1)
DGM
el 25 de Sept. de 2024
Editada: DGM
el 25 de Sept. de 2024
I don't have everything to run your example, but the last lines are a problem at the least.a
Use numel() to return the total number of elements regardless of their value.
A = magic(5);
mask = A>15
numel(mask)
nnz(mask)
5 comentarios
DGM
el 26 de Sept. de 2024
If you're trying to crop out blobs from a logical mask, then you can use the 'Image' property from regionprops(), or you can use the 'BoundingBox' property and pass it to imcrop() instead.
That said, there's obviously something wrong because none of your query points are in the polygon. Without the inputs to this code, it's not apparent why that is.
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!