本发明涉及地形坐标数据处理技术领域,具体是一种受损地形坐标数据的修复方法。
背景技术:
三维地形坐标数据(平面x表示精度,y坐标表示维度,高程z坐标表示海拔高度)是测绘测量领域最基础的研究对象。比如在地理信息系统中要建立数字高程模型,需要从原始的地形测绘图中获取三维地形坐标数据,然后导入到gis软件中生成。在河道演变分析过程中,要从河道的地形测绘图中提取三维坐标数据,然后导入到surfer等软件中生成数字高程模型。由此可见,作为基础的研究对象,地形坐标数据的精度对于保证研究成果的质量至关重要。
在实际的操作中,以河道地形测绘图为例,测绘部门提供的图纸一般是cad电子文件,地形坐标数据一般存储在cad的某一图层(比如实测点层)上的text文字对象中。操作人员通过vba,objectarx等cad二次开发手段可以提取文字的位置(text对象的位置属性)和内容(z坐标,比如字符串“-15.73”),通过把文字的内容转成数字(比如c语言提供的strtod函数),就可以得到地形坐标数据的三个标量数据。但是在实际操作中,经常会遇到损坏的图纸,具体表现为实测点层中一个原本完整的高程文字(比如“-15.73”),在实际获取中返回三个文字对象,分别是整数部分(“-15”),小数点部分(“.”)和小数部分(“73”).在这种情况下,如果按原来的方法简单的获取文字,就会获得高程值为-15和73的两个坐标数据,与真实的高程值-15.73相去甚远,给后续的工作带来隐患。有的情况下,原始完整的高程文字比如“-15.73”,在实际获取中,会返回更多的文字对象,分别是“-”,“1”,“5”,“.”,“7”,“3”,离真实的高程值相差更远。
目前遇到这种情况的解决办法有几种。一,将图纸转成图片格式,然后用ocr方式识别里面的文字,然后转成数字,最后再人工在图纸上修改。这种方法有很大的不确定性,ocr在不同的图层叠加下很难转成正确的文字。二,人工在cad图纸上直接修改。比如删除上述实例中三个文字对象中的后面两个,直接将第一个文字对象的内容修改为“-15.73”。上述两种办法都需要很大的人工成本,特别是图纸问题数据成千上万的时候,可能要花费数天之久。
中国发明专利《一种受损地形坐标数据的自动化匹配及高精度修复方法》(申请号:202010009076.6)提出了一种自动化匹配和修复方法,但是其存在一定局限性。第一,处理对象范围有限。以原始高程文字为“-15.73”为例,如果拆分成“-15”,“.”,“73”三个文本对象可以处理,但是如果拆分成“-”,“1”,“5”,“.”,“7”,“3”五个文本对象,则无法处理。第二,处理条件比较简单,只是按照文字和点之间的平面距离作为判断标准。如图1所示,在处理“2014.5896”和“2015.1234”两个高程文字中的小数点时,两个高程文字拆分的文字对象互相干扰,会重复选取“2015”和“1234”两个文本对象,忽视掉“2014”和“5896”两个文本对象。第三,要求选择集至少有五个文本对象,对于损坏数据小于5的图纸无法处理;有时候图纸数量很多,但是单个图纸的损坏数据并不多。
技术实现要素:
为解决上述现有技术中的缺陷,本发明提供一种受损地形坐标数据的修复方法。
本发明是采用如下技术方案实现的:
一种受损地形坐标数据的修复方法,其特征在于:包括如下步骤:首先在图纸上遍历找到所有的文本对象,对每个文本对象生成特征向量,形成样本集合;然后根据定义的样本特征距离规则,对所有样本进行聚类,将类间距离小的类合并,成为一个新的类,重复此操作,直到满足停止条件,最终获得若干个样本类;针对样本类中的若干个样本,根据特征值进行排序,然后合并成一个文本对象,用这个文本对象替换原始的若干个文本对象。
进一步的,所述方法具体步骤如下:
步骤一、创建文本对象集合:遍历图纸的所有文本对象,如果文本对象的内容可以生成数字或者小数点,则添加到文本对象集合中;
步骤二、遍历文本对象集合中的所有文本对象,对每个文本对象,创建一个样本i,取属性位置
步骤三、对样本集合进行聚类:针对给定的样本,根据特征的距离,将其归并到若干个类,一个类是样本的一个子集;
步骤四、遍历类的集合,对每个类中所有样本进行排序,排序规则基于方向向量和位置,对排序后的样本进行合并,最终得到结果类的集合,每个类中含有一个样本,删除输入的文本对象集合,根据结果生成新的文本对象集合。
进一步的,所述步骤三对样本集合进行聚类的具体过程为:
(1)输入n个样本组成的样本集合;
(2)计算n个样本之间的样本距离dij,得到矩阵d=[dij]n×n;
(3)构造n个类,每个类只包含一个样本,这样得到类的集合;
(4)定义类间距离为两个类之间所有样本的样本距离中最短距离,定义类间距离的阈值,计算类集合中所有类互相之间的类间距离,假如两个类的类间距离小于阈值,则将这两个类合并成一个新的类;
(5)重复执行步骤(4),直至没有新的类合并发生,最终得到类的集合。
进一步的,所述步骤(4)中的阈值设为0.25。
进一步的,步骤四中排序的比较值为方向向量和位置xy向量的点积,用公式表达为:
ci=cosα*xi sinα*yi
其中,α是文本对象的旋转角度,xi是文本对象位置在x轴上的值,yi是文本对象i位置在y轴上的值。
进一步的,所述步骤三中求样本i和样本j之间的样本距离,具体步骤为:
(1)获取样本i和样本j包围框的各四个点,从样本i的包围框的四个点中取一个点,再从样本j的包围框四个点中取一个点,组成一对,即获得16对点的集合;
(2)在上述点的集合中寻找距离最近的一对点,分别为点pi(xpi,ypi)和pj(xpj,ypj),xpi是点pi在x轴上的值,ypi是点pi在y轴上的值,xpj是点pj在x轴上的值,ypj是点pj在y轴上的值;
(3)由样本i的旋转角度α,定义样本i的轴线为经过点pi,旋转角度为α的直线,直线公式为:
y=tgα*(x-xpi) ypi
(4)获得pj到轴线的纵向距离为dvertical=|sinα*xpj-cosα*ypj-sinα*xpi cosα*ypi|;
(5)点pi到pj的直线距离
(6)定义样本距离为:
其中khor是计算沿着轴线横向距离的经验因子,kv是计算沿着轴线纵向距离的经验因子,kr是计算旋转角度之间差值的经验因子,dr是两个样本旋转角度之间的差值,kh是计算样本高度差的经验因子,dh是两个样本高度之间的差值。
进一步的,khor、kr、kh均设为1,kv设为10。
本发明可以正确处理高程文字拆分成多个,包括三个以上文本对象的场景,也可以处理多个不同的文本对象相互干扰的情况,也能处理含有少量损坏数据的图纸,并且能快速实现大量受损地形坐标数据的修复,提高工作效率。
附图说明
图1为本发明实施例中含有受损地形坐标数据的图纸;
图2为本发明实施例中部分示例代码截图;
图3为本发明实施例中部分示例代码截图;
图4为本发明实施例中部分示例代码截图;
图5为本发明实施例中文本对象包围框和轴线的示意图;
图6为本发明实施例的运行效果图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种受损地形坐标数据的修复方法,其是在cad二次开发平台上完成的。一般主流的cad都支持二次开发,比如autocad可以通过lisp,vba,或者activex接口进行二次开发。本次实例是在国产cadzwcad的平台上演示,采用的编程语言是c#。所述方法具体包括如下步骤:
首先在图纸上遍历找到所有的文本对象,对每个文本对象生成特征向量,形成样本集合;然后根据定义的样本特征距离规则,对所有样本进行聚类,将类间距离小的类合并,成为一个新的类,重复此操作,直到满足停止条件,最终获得若干个样本类;针对样本类中的若干个样本,根据特征值进行排序,然后合并成一个文本对象,用这个文本对象替换原始的若干个文本对象。具体流程是:
步骤一、创建文本对象集合。遍历图纸的所有文本对象,如果文本对象的内容可以生成数字,或者是小数点的,则添加到文本对象集合中。如图1所示,原本有三个文本对象,分别是“2016.4321”,“2014.5896”和“2015.1234”。但因为某种原因,变成了11个文本对象,“2016.4321”拆分成了“2016”,“.”,“4321”三个文本对象。“2014.5896”拆分成了“2014”,“.”,“5”,“8”,“9”,“6”六个文本对象,“2015.1234”拆分成了“2015”,“.”,“1234”三个文本对象。一共有12个文本对象。
步骤二、遍历文本对象集合中的所有文本对象,对每个文本对象,创建一个样本i,取属性位置
步骤三、对样本集合进行聚类。聚类是针对给定的样本,根据特征的距离,将其归并到若干个类,一个类是样本的一个子集。聚类算法的具体流程是:
(1)输入n个样本组成的样本集合;
(2)计算n个样本之间的样本距离dij,如图3所示,得到矩阵d=[dij]n×n;
(3)构造n个类,每个类只包含一个样本,这样得到类的集合;
(4)定义类间距离为两个类之间所有样本的样本距离中最短距离,定义类间距离的阈值,计算类集合中所有类互相之间的类间距离,假如两个类的类间距离小于阈值,则将这两个类合并成一个新的类,如图4所示。这里的阈值设为0.25。
(5)重复执行步骤(4),直至没有新的类合并发生,最终得到类的集合。类中每个样本之间的欧氏距离都小于阈值,但是类和类之间的类间距离大于阈值。
步骤四、遍历类的集合,在每个类中对所有样本进行排序,排序规则基于方向向量和位置,对排序后的若干个样本进行合并,最终得到一个文本对象。特别的,排序的比较值为方向向量和位置xy向量的点积,用公式表达为
ci=cosα*xi sinα*yi
其中,α是文本对象的旋转角度,可以从文本对象的属性中得到。xi是文本对象位置在x轴上的值,yi是文本对象i位置在y轴上的值。
所述步骤三中求样本i和样本j之间的样本距离的方法是:
(1)获取样本i和样本j包围框的各四个点,从样本i的包围框的四个点中取一个点,再从样本j的包围框四个点中取一个点,组成一对,这样获得16对点的集合;
(2)在上述点的集合中寻找距离最近的一对点,分别为点pi(xpi,ypi)和pj(xpj,ypj),xpi是点pi在x轴上的值,ypi是点pi在y轴上的值,xpj是点pj在x轴上的值,ypj是点pj在y轴上的值;
(3)由样本i的旋转角度α,定义样本i的轴线为经过点pi,旋转角度为α的直线,直线公式为:
y=tgα*(x-xpi) ypi
(4)获得pj到轴线的纵向距离为dvertical=|sinα*xpj-cosα*ypj-sinα*xpi cosα*ypi|;
(5)点pi到pj的直线距离
(6)定义样本距离为
其中khor是计算沿着轴线横向距离的经验因子,kv是计算沿着轴线纵向距离的经验因子,kr是计算旋转角度之间差值的经验因子,dr是两个样本旋转角度之间的差值,kh是计算样本高度差的经验因子,dh是两个样本高度之间的差值。dhorizon需要做归一化,可以除于所有样本的包围盒的长度或宽度。dvertical的归一化和dhorizon一样处理。dr的归一化可以除以2*pi。dh的归一化可以除以所有样本的最大高度。
在实例中,为了突出纵向上的距离,khor,kr,kh都设为1,kv设为10。虽然“2014.5896”的小数点p的距离离“2015.1234”拆分的几个文本对象毕竟近,但是“2015.1234”并不在点p的轴线上,并且高度也不一致。所以最终计算样本距离的时候,“2015.1234”与点p的样本距离,比“2014”或者“5”的样本距离要小。
最终程序仿真结果如图6所示,可见成功的将拆分的文本对象按照上述算法合并起来。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何属于本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
1.一种受损地形坐标数据的修复方法,其特征在于:包括如下步骤:首先在图纸上遍历找到所有的文本对象,对每个文本对象生成特征向量,形成样本集合;然后根据定义的样本特征距离规则,对所有样本进行聚类,将类间距离小的类合并,成为一个新的类,重复此操作,直到满足停止条件,最终获得若干个样本类;针对样本类中的若干个样本,根据特征值进行排序,然后合并成一个文本对象,用这个文本对象替换原始的若干个文本对象。
2.如权利要求1所述的受损地形坐标数据的修复方法,其特征在于:所述方法具体步骤如下:
步骤一、创建文本对象集合:遍历图纸的所有文本对象,如果文本对象的内容可以生成数字或者小数点,则添加到文本对象集合中;
步骤二、遍历文本对象集合中的所有文本对象,对每个文本对象,创建一个样本i,取属性位置
步骤三、对样本集合进行聚类:针对给定的样本,根据特征的距离,将其归并到若干个类,一个类是样本的一个子集;
步骤四、遍历类的集合,对每个类中所有样本进行排序,排序规则基于方向向量和位置,对排序后的样本进行合并,最终得到结果类的集合,每个类中含有一个样本,删除输入的文本对象集合,根据结果生成新的文本对象集合。
3.如权利要求2所述的受损地形坐标数据的修复方法,其特征在于:所述步骤三对样本集合进行聚类的具体过程为:
(1)输入n个样本组成的样本集合;
(2)计算n个样本之间的样本距离dij,得到矩阵d=[dij]n×n;
(3)构造n个类,每个类只包含一个样本,这样得到类的集合;
(4)定义类间距离为两个类之间所有样本的样本距离中最短距离,定义类间距离的阈值,计算类集合中所有类互相之间的类间距离,假如两个类的类间距离小于阈值,则将这两个类合并成一个新的类;
(5)重复执行步骤(4),直至没有新的类合并发生,最终得到类的集合。
4.如权利要求3所述的受损地形坐标数据的修复方法,其特征在于:所述步骤(4)中的阈值设为0.25。
5.如权利要求2所述的受损地形坐标数据的修复方法,其特征在于:步骤四中排序的比较值为方向向量和位置xy向量的点积,用公式表达为:
ci=cosα*xi sinα*yi
其中,α是文本对象的旋转角度,xi是文本对象位置在x轴上的值,yi是文本对象i位置在y轴上的值。
6.如权利要求3所述的受损地形坐标数据的修复方法,其特征在于:所述步骤三中求样本i和样本j之间的样本距离,具体步骤为:
(1)获取样本i和样本j包围框的各四个点,从样本i的包围框的四个点中取一个点,再从样本j的包围框(如图5所示)四个点中取一个点,组成一对,即获得16对点的集合;
(2)在上述点的集合中寻找距离最近的一对点,分别为点pi(xpi,ypi)和pj(xpj,ypj),xpi是点pi在x轴上的值,ypi是点pi在y轴上的值,xpj是点pj在x轴上的值,ypj是点pj在y轴上的值;
(3)由样本i的旋转角度α,定义样本i的轴线(如图5所示)为经过点pi,旋转角度为α的直线,直线公式为:
y=tgα*(x-xpi) ypi
(4)获得pj到轴线的纵向距离为dvertical=|sinα*xpj-cosα*ypj-sinα*xpi cosα*ypi|;
(5)点pi到pj的直线距离
(6)定义样本距离为:
其中khor是计算沿着轴线横向距离的经验因子,kv是计算沿着轴线纵向距离的经验因子,kr是计算旋转角度之间差值的经验因子,dr是两个样本旋转角度之间的差值,kh是计算样本高度差的经验因子,dh是两个样本高度之间的差值。
7.如权利要求6所述的受损地形坐标数据的修复方法,其特征在于:khor、kr、kh均设为1,kv设为10。
技术总结