在matlab中将处理结果输出为shp文件

发布时间 2023-12-19 10:48:37作者: listjjjclove
clc;clear;close all;
[pic, R] = geotiffread('boston.tif'); %读取tif图像
gray=rgb2gray(pic);
bw=im2bw(gray,0.1); %阈值分割
bw=1-bw;
bw1 = bwareaopen(bw,30000); %删除面积小于500000的区域
bw2=imfill(bw1,'holes');  %填充孔洞
figure(1),imshow(bw2);
bw3=bwboundaries(bw2);  %得到边缘轮廓,一个轮廓为一个Line
num=size(bw3,1); %行数
STR = 'struct(''Geometry'',values ,''X'', values,''Y'', values,''ID'',values)';
values = cell(num, 1);  %为结构体赋初值
S = eval(STR);
clear values;  
for i=1:num
    data=bw3{i,1};   %得到轮廓线的坐标,一个N*2的矩阵,此坐标为本地图像坐标
    S(i).Geometry='Line';
    S(i).ID=i;
    [x,y]=pix2map(R,data(:,1),data(:,2)); %将本地图像坐标转换为地理坐标
    S(i).X=[x;NaN]';
    S(i).Y=[y;NaN]';
end
figure(2),axis off;
mapshow('boston.tif');   %绘制遥感影像
mapshow([S.X], [S.Y],'Color','r');  %绘制轮廓线
shapewrite(S,'water.shp');  %输出shp文件,会生成后缀名为shp,shx和dbf的三个文件