- Write geographic vector data structure to shapefile - MATLAB shapewrite - MathWorks
- Convert cell array to structure array - MATLAB cell2struct - MathWorks
how to write a shapefile from the array resulted from "bwboundaries"
    7 ビュー (過去 30 日間)
  
       古いコメントを表示
    
Hi! I am a new user of Matlab and not very skilled with the syntax yet, so sorry if it sounds silly... 
I would like to extract the boundaries of an image and export it as a shapefile for example.
I successfully plotted the boundaries following the tutorial (https://se.mathworks.com/help/images/boundary-tracing-in-images.html) but don't know how to write this cell object (boundaries) as a shapefile. Can I please use some help here? Thanks! 
im = imread('E:\Hyytiala\ses\Canon 1730\s10\painted_IMG_3538_binarized.bmp.bmp');
imshow(im);
BW = im2bw(im);
imshow(BW);
dim = size(BW);
col = round(dim(2)/2)-90;
row = min(find(BW(:,col)));
% To trace the boundaries of all the coins in the image, use the bwboundaries function.
BW_filled = imfill(BW,'holes');
boundaries = bwboundaries(BW_filled);
% Display the original grayscale image and use the coordinates returned by bwtraceboundary to plot the border on the image.
imshow(im)
hold on;
for k=1:length(boundaries)
   b = boundaries{k};
   plot(b(:,2),b(:,1),'g','LineWidth',3);
end
0 件のコメント
回答 (1 件)
  Suman Sahu
    
 2023 年 3 月 10 日
        Hi Shaohui, 
You have extracted the boundaries of the image and stored them in the “boundaries” cell array. In order to write the cell array into a Shapefile, the cell array first needs to be converted into a geospatial structure (geo struct). A geo struct is essentially a MATLAB struct that contains specific fields related to geographic information, such as Geometry, X, Y, and so on. To learn more about geographic data structures, refer to this documentation: Geographic Data Structures - MATLAB & Simulink - MathWorks 
To write the Geo struct into a Shapefile, you can use a function shapewrite, below is the syntax for that: 
shapewrite(geo_struct_obj, '<shapefilename.shp>');
The following code should help you in writing the boundaries cell array into a shapefile.  
im = imread('E:\Hyytiala\ses\Canon 1730\s10\painted_IMG_3538_binarized.bmp.bmp');
imshow(im); 
BW = im2bw(im); 
imshow(BW); 
dim = size(BW); 
col = round(dim(2)/2)-90; 
row = min(find(BW(:,col))); 
% To trace the boundaries of all the coins in the image, use the bwboundaries function. 
BW_filled = imfill(BW,'holes'); 
boundaries = bwboundaries(BW_filled); 
% Display the original grayscale image and use the coordinates returned by bwtraceboundary to plot the border on the image. 
imshow(im) 
hold on; 
for k=1:length(boundaries) 
    b = boundaries{k}; 
    plot(b(:,2),b(:,1),'g','LineWidth',3); 
end
%Extract the x and y coordinates of the boundary points into vectors 
column1=[] 
column2=[] 
l=length(boundaries) 
for i=1:l 
    column1=[column1; boundaries{i}(:,1)]; 
    column2=[column2; boundaries{i}(:,2)]; 
end
column1=column1';
column2=column2';
%Create a struct 
Boundaries_struct = struct(); 
Boundaries_struct.Geometry =  'MultiPoint'; 
Boundaries_struct.X = column1; 
Boundaries_struct.Y = column2; 
%Geometry, X and Y are required fields, you can add more fields to store any necessary data. 
%write the struct into the shapefile 
shapewrite(Boundaries_struct, 'boundaries_shapefile.shp');
Refer to following documentations to learn more: 
Hope it was helpful. 
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

