栅格一矢量数据转换是数据转换的一种方法,即矢量与栅格两种数据形式之间的转换技术。空间数据表示的两种方法各有优缺点和适用场合,因此需要根据使用目的进行栅格一矢量数据的转换。
矢量数据向栅格数据的转换一般比较方便;对于点、线目标,由其所在的栅格行、列数表示,对于面状目标,则需判定落人该面积内的像元.通常栅格(像元)尺寸均大于原来坐标表示的分辨率,所以若将栅格化数据再反转回去,则不可能达到原来矢量数据的精度.将矢量数据转化为栅格数据,主要用于空间分析、多边形叠置等。
栅格数据矢量化较为复杂,如果由一幅扫描的数字化地图来建立矢量数据库,则需要经过数字图象处理,如边缘增强、细化、二值化、特征提取及模式识别才能获得矢量数据。人们通常将多色地图分色后逐个元素(如等高线地貌、水系、道路网、地物、符号与注记等)加以识别和提取。如果将数字影像矢量化,则需要事先做好重采样、图象处理、影像匹配和影像理解等过程,才能将影像上的语义和非语义信息提取出来,并形成矢量形式的数据。
说明:栅格数据矢量化流程参考:GIS中栅格数据转换矢量数据算法 | 麻辣GIS
由于扫描后的图像是以不同灰度级存储的,为了进行栅格数据矢量化的转换,需压缩为两级(0和1),称为二值化。
对于扫描输入的图幅,由于原稿不干净等原因,总是会出现一些飞白、污点、线划边缘凹凸不平等。
所谓细化就是将二值图像象元阵列逐步剥除轮廓边缘的点,使之成为线划宽度只有一个象元的骨架图形。细化后的图形骨架既保留了原图形的绝大部分特征,又便于下一步的跟踪处理。
细化的基本过程是:
如果是对扫描后的地图图像进行细化处理,应符合下列基本要求:
细化后的二值图像形成了骨架图,追踪就是把骨架转换为矢量图形的坐标序列。其基本步骤为:
从左向右,从上向下搜索线划起始点,并记下坐标;
朝该点的8个方向追踪点,若没有,则本条线的追踪结束,转(1)进行下条线的追踪;否则记下坐标;
把搜索点移到新取的点上,转(2);
注意的是,已追踪点应作标记,防止重复追踪。
为了进拓扑化,需找出线的端点和结点,以及孤立点。
说明:由于代码有点多,如果全部贴上去的话会造成博客有些卡顿(上一篇博客就是放太多代码造成打开时卡顿),所以下面三个源文件都是只放了部分代码,如果需要完整工程,见底部链接!!!
(1)myVector.h
因涉及一些执行语句,禁止写入,请联系客服获取
(2)myVector.cpp
因涉及一些执行语句,禁止写入,请联系客服获取
(3)main.cpp
因涉及一些执行语句,禁止写入,请联系客服获取
(1)输入二值图
(2) 细化、矢量化结果
说明:左图是细化结果,右图是矢量化结果;
(3)配置说明
vs2019 + opencv4.4.0 + Qt5.12.5 + gdal2.3.2 + Debug x64
vs2019、opencv4.4.0 和 Qt5.12.5 的配置过程比较简单这里就不过多阐述了;
gdal2.3.2 的配置流程见:https://blog.csdn.net/weixin_47156401/article/details/120648970?spm=1001.2014.3001.5502
上述环境配置完成后使用该工程的过程中,若出现以下问题:
如果出现无法打开 Qt 源文件,解决方案见:https://blog.csdn.net/weixin_47156401/article/details/120626400?spm=1001.2014.3001.5502
说明:上述环境配置、问题解决方案都是通过亲测验证,真实有效!!!
代码工程文件中包含二值图细化、矢量化和矢量化简化等工程,且代码注释非常详细,由上述给出的部分代码也可以看出,在使用的过程中如有疑问,可留言!
工程链接:栅格数据矢量化代码实现-C/C++文档类资源-CSDN下载
Copyright © 2023 leiyu.cn. All Rights Reserved. 磊宇云计算 版权所有 许可证编号:B1-20233142/B2-20230630 山东磊宇云计算有限公司 鲁ICP备2020045424号
磊宇云计算致力于以最 “绿色节能” 的方式,让每一位上云的客户成为全球绿色节能和降低碳排放的贡献者