先看看代码运行结果(红色部分表示河流中心线,黑色表示河流两岸!):

注:

1. 由于河流两岸的坐标不是等距采样,所以无法保证100%准确,只要按着要求处理河岸坐标数据Shape文件,能保证95%以上能和真正的中心线重合;

2. 一条河流计算一次,支流另行计算;

3.计算中心线同样适合公路,且效果更好。

本程序主要有两个难点:

1. 提取中心线

2. 两侧目标点对应匹配

解决方法:

1. 利用三角网格方法计算中心线(提示:三角形侧边中点连线平行于底边,因此只需要计算侧边中点);

2. 可以通过重采样的方式来实现;

部分matlab代码:

%==================================说明====================================
%   根据河流两岸的一些列点坐标(2D),计算中心线,计算河流蜿蜒度;
%   作用:根据河流两岸的一些列点坐标(2D),计算中心线,计算河流蜿蜒度;
%   作者:胡礼珍
%   单位:厦门大学联合遥感接收站
%   邮件:hulizhen@xmu.edu.cn
%   Q  Q:249***701
clear;close all;clc;
[FileName,PathName,index] = uigetfile({'*.shp'},'shp文件读取','MultiSelect','off');
if index == 0errordlg('Shape输入错误,请重新输入','输入错误');return;                         %终止运行程序
end
% 由于数据的原因,不建议批量处理
S = shaperead([PathName,FileName]);             % 读取Shape文件
if length(S) ==2                                % 若线段个数等于2%%  Result_Data= River_Shoreline(S)./1000;      % 计算首尾位移和路程line1 = [S(1).X',S(1).Y';];                 % 第一条岸线line2 = [S(2).X',S(2).Y';];                 % 第二条岸线% line1和line2必须首尾一直line2 = line2(end:-1:1,:);                  % line 翻转,根据实际而定% Centerline = Center_Line(line1,line2);    % 计算中心线[Centerline,line1,line2] = Center_Line(line1,line2);      % 计算中心线%% 计算路程和路径% 第一行表示位移长度,剩下的每行表示一条线段的长度Result_Data = sqrt(sum((Centerline-[Centerline(end,:);Centerline(1:end-1,:)]).^2,2));Result_Data = [Result_Data(1,:),sum(Result_Data(2:end,:))]./1000;  % [位移,路程]Meanderness = Result_Data(1,2)/Result_Data(1,1);         % 蜿蜒度
else                                            % 若线段个数不等于2errordlg('Shape输入错误,请重新处理Shape文件','输入错误');return;                                     % 终止运行程序
end%% 显示
figure('Name','位置')
plot(line1(:,1),line1(:,2),'k')
hold on
plot(line2(:,1),line2(:,2),'k')
plot(Centerline(:,1),Centerline(:,2),'r')
hold off

注:核心部分代码就不公布了,自行下载。

完整代码地址:matlab-计算河流蜿蜒度和提取中心线-其它文档类资源-CSDN下载

完整代码中有Word讲解,完整的程序,以及测试的代码!

也可以根据我的提示,自己编写代码,这样更能提高写代码能力。

路漫漫其修远兮,吾将上下而求索!

利用matlab提取中心线相关推荐

  1. matlab如何取对数坐标,利用Matlab提取图片中曲线数据(线性修正,支持对数坐标)

    利用Matlab提取图片中曲线数据 前一段时间看到一篇文章"利用Matlab提取图图片中的数据",觉得思路挺好,遂下载下来研究了一番,发现作者所编写的程序没有考虑原始图片非水平放置 ...

  2. matlab如何截取图像的中间部分_利用matlab提取并分割RGB图像中的某一个已知像素值的图像...

    已知一副RGB图像中的的像素值,利用matlab将其分割出来并以二进制图像形式显示: %extract.m clear all; I=imread('new_original.png'); figur ...

  3. 利用matlab提取水印,怎么在含有水印的图像中提取出水印

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 %水印嵌入代码 M = 256;%原始图像长度 N = 32; %水印图像长度 K = 8; I = zeros(M, M); J = zeros(N, ...

  4. 用Matlab提取图片中泰文,利用Matlab提取图片中的数据

    [实例简介] 从事科研或者工程的人员在文档撰写过程中,常需要将文献中的曲线与自己的结果对比,为获取原始数据,一种常用的办法是手动描点,即将原始曲线放大然后打印出来,选取一定数量的点,读出其横纵坐标,然 ...

  5. MATLAB 提取文件名中数字

    首先,利用dos,提取文件名为txt文件 % TXT文件输入如下代码,并将文件后缀改为 .bat dir *.*/b> list.txt. 然后,利用matlab提取数字 clc:clear: ...

  6. 利用matlab自带函数快速提取二值图像的图像边缘 bwperim函数

    clear all;close all;clc; I = imread('rice.png'); I = im2bw(I); J = bwperim(I); % 提取二值图像图像边缘 figure; ...

  7. 利用Matlab编程实现对NetCDF数据针对某一坐标按时间提取风、流、水蒸气等变量信息

    一.NetCDF数据介绍 NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmosph ...

  8. 利用matlab对rosbag数据,通过matlab提取rosbag数据

    通过matlab提取rosbag数据 代码如下: 最近在做AGV导航实验,导航小车是基于ROS实现的,判断小车导航是否运行稳定,可以直接通过rviz直观看出来.但是如何通过数据定性地分析数据,这就需要 ...

  9. matlab 提取极值,利用matlab 进行极值统计的一个例子——gev 方法.pdf

    利用matlab 进行极值统计的一个例子--gev 方法 利用 Matlab 进行极值统计的一个例子--GEV 方法 科研菜鸟 /u/sanshiphy 数据和例子均来自于 S. Coles, An ...

最新文章

  1. google ProtoBuf开发者指南
  2. 网页失去焦点事件 visibilitychange
  3. 病毒入侵的故事—BBC细胞的暗战The Hidden Life of the Cell
  4. linux指令笔试,Linux笔试常用命令
  5. Android --- 知识点记录
  6. 亲热接触Redis-第一天
  7. 11个实用的Apache .htaccess配置
  8. 通过saltapi接口安装实例(modules)
  9. openfire无法启动
  10. C/C++中最快、最简洁的read()快读(卡常数)方法
  11. python 扫描枪_使用Python和OpenCV在视频中实时监测条形码
  12. android 混淆报错记录
  13. FineReport新建数据连接
  14. Excel数字小写金额转换汉字大写金额公式的简单设置
  15. 360Replugin插件Activity横屏
  16. 3D艺术家推荐——4款最佳3D建模软件
  17. Oracle 错误代码详解及解决方式--ORA
  18. 3com - 美国设备提供商
  19. 通过面向对象实现猫狗大战案例
  20. Swift对接C++库

热门文章

  1. mysql出现can t_php运行提示Can't connect to MySQL server on 'localhost'的解决方法
  2. java ee io_JAVAEE细细看 进阶 14 - IO总结-Go语言中文社区
  3. find the nth digit(数学 思维)
  4. python使用redis教程 敲黑板划重点
  5. Ubuntu apt upgrade后黑屏问题
  6. 更改用户密码oracle,oracle数据库更改用户密码
  7. 计算机辅助初中数学教学,初中数学合作教学如何融入计算机辅助教学
  8. 上传失败 已保存至草稿_学霸的草稿纸火了,卷面整洁,网友调侃:作业都比不上这草稿本...
  9. 数学--数论--最小公倍数+最大公约数
  10. 数学--博弈论--巴什博奕(Bash Game)