一种扫描纸质海图水深点自动矢量化及信息提取的改进方法与流程

文档序号:11216933阅读:639来源:国知局
一种扫描纸质海图水深点自动矢量化及信息提取的改进方法与流程

本发明涉及河口海岸科学、港口及航道工程等应用领域,具体地说是一种扫描纸质海图水深点自动矢量化及信息提取的改进方法。



背景技术:

海图是精确测绘海洋水域和沿岸地物信息的专门地图形式,主要内容包括:岸线、岛屿、礁石、水深、航标和无线电导航台等,是航海必不可少的参考数据。同时,也是河口海岸科学研究,海岸工程、港口及航道工程应用获取基础数据的重要数据源,在航海、河口海岸及海洋科学研究领域有着广泛的应用。长期以来,人们只能够从有关部门购买纸质海图,再扫描成数字化的图像通过手工矢量化的方式将其转变为便于计算机处理的形式加以应用。尽管近些年已经可以直接获得矢量格式的海图,但历史上积存的大量纸质海图对于认识近岸海洋环境的发展演变是不可替代的数据源,在科研和工程应用中具有重要意义。每张海图上都有数以千计的点要素、线要素信息及大量的其它信息,常规的手工矢量化方式需要通过不断重复性的劳动来完成,工作极其枯燥乏味,而且强度大、效率低、易出错、一致性差,极大地制约了纸质海图在科研和工程领域的应用。因此,迫切需要提高扫描纸质海图矢量化的效率。



技术实现要素:

本发明根据海图制图规范,提出一种扫描纸质海图水深点自动矢量化及信息提取的改进方法,实现了海图水深点要素自动精确定位和矢量化、水深数据自动提取的功能,以提升纸质海图矢量化的效率,挖掘历史海图数据的价值,为科研和工程应用提供便利。

本发明的技术方案是:

一种扫描纸质海图水深点自动矢量化及信息提取的改进方法,它包括以下步骤:

s1、扫描纸质海图;

s2、对扫描的海图图像文件进行几何校正(海图属于地理数据的一种,而地理数据要与实际空间位置对应起来才有意义,利用扫描仪扫描进电脑之后仅仅是一个普通的图片,因此在使用之前需要对其进行几何校正);创建点矢量文件,文件参考坐标系与已校正的扫描海图图像文件一致;

s3、框选海图图像中任一包含单个或多个水深点的图像区域,并获取框选的图像区域左上角的空间坐标(x,y)及x、y方向的像元大小sx、sy;

s4、读取框选区域的图像数据,识别区域中的数字,将识别结果中多个数字序列合并为1个数字序列numstr,该数字序列中有n个数字,m为序列中的数字索引,m=0,...,n-1,获得数字序列以及数字序列中各数字上边到框顶边的顶边距离top、下边到框顶边的底边距离bottom、左边到框左边的左边距离left、右边到框左边的右边距离right;

s5、声明字符变量depstr用来存放提取的单个水深点数字序列,并将数字序列numstr中第一个数字即numstr0赋值给depstr,同时获取其左上角的坐标位置(x,y);(depstr是一个临时变量,用来存储通过判断从数字序列中分离得到的单个水深点读数,每得到一个完整的水深点读数,depstr就被转换为数值型并存入一个用来存储所选全部水深点读数的数组变量,然后将被重新赋值用来存储下一个水深点读数);

s6、判断数字序列numstr是否只包含一个数字:

如果是一个数字,则仅有一个水深点且数值为1位整数,将depstr转变为数值型即得到正确的水深点读数,同时获取其宽度w和高度h;

如果包含多于一个数字,则依次将numstrm-1与numstrm的空间位置进行比较,m=1,...,n-1,直到所有数字比较完毕结束,得到所有水深点的正确读数,获取其整数数字的宽度w和高度h;

s7、依次计算各个水深点的空间坐标;

s8、根据所获取的水深点空间坐标在步骤s2创建的点矢量文件中生成点要素并将水深数据写入属性表,在图上显示获取的水深读数和空间位置以便判断正确与否;

s9、目视判断所获取的水深点读数和空间位置是否正确,若不正确,进行修正,若正确,则重复s2至s9步,完成整幅海图的矢量化。

进一步地,步骤s2中,采用gis软件工具进行几何校正,如arcgis。

进一步地,步骤s4中,采用ocr引擎识别所选图像区域中的数字。

进一步地,步骤s6中,空间位置比较步骤具体为:

如果numstrm-1与numstrm的左边距离left满足下述情况,则进行相应处理:

c1、abs(leftm-leftm-1)<20且abs(topm-topm-1)<5,则numstrm为该水深点的一个整数位数字,将numstrm连接到depstr:(字符串连接,例如,字符串变量str现在=“1”,把一个新的字符串“6”连接到str,则str就变成了“16”;再把一个新的字符串“3”连接到str,则str就变成了“163”。因为选了多个水深点,ocr识别后结果可能比较乱,一个水深点的数可能识别成两个对象,也可能多个水深点的数字识别成一个对象,所以首先把识别出的所有数字合成为一个水深点序列,然后通过这里的算法来把各个水深点正确分开。这里depstr是用来存放分开后的单个水深点数值的变量。)

进而,判断numstrm是否为numstr的最后一个数字,即判断m=n-1是否成立,如果成立,则depstr为该水深点的完整数字序列,且无小数位,将depstr转变为数值型即得到正确的水深点读数,同时获取其宽度w和高度h,比较结束,否则继续比较;

c2、abs(leftm-leftm-1)<20且5<abs(topm-topm-1)<15,则numstrm为小数位,将numstrm连接到depstr,depstr作为该水深点的完整数字序列,将depstr转变为数值型并除以10即得到正确的水深点读数,同时获取其整数位宽度w和高度h;

判断m<n-1是否成立,如果成立,则对depstr重新赋值为numstrm+1,并令m=m+1,同时获取numstrm+1的坐标位置,否则继续比较;

进而,判断numstrm是否为numstr的最后一个数字,即判断m=n-1是否成立,如果成立,则depstr为该水深点的完整数字序列且数值为1位整数,将depstr转变为数值型即得到正确的水深点读数,同时获取其宽度w和高度h,比较结束,否则继续比较;

c3、如果不满足c1、c2的两个初始判断条件,则depstr为该水深点的完整数字序列,且无小数位,将depstr转变为数值型即得到正确的水深点读数,同时获取其宽度w和高度h,获取numstrm的坐标位置,对depstr重新赋值为numstrm;

进而,判断numstrm是否为numstr的最后一个数字,即判断m=n-1是否成立,如果成立,则depstr为该水深点的完整数字序列,且无小数位,将depstr转变为数值型即得到正确的水深点读数,获取其宽度w和高度h,比较结束,否则继续比较。

进一步地,获取宽度w和高度h时,采用下述步骤:

若存在小数位,宽度w通过数字序列中倒数第二个数字的右边距离right减去第一个数字的左边距离left得到宽度w,高度h通过排除数字序列最后一个数字之后的全部数字中最大底边距离bottom减去最小顶边距离top得到;

若不存在小数位,宽度w通过数字序列中最后一个数字的右边距离right减去第一个数字的左边距离left得到,高度h通过数字序列中所有数字中最大底边距离bottom减去最小顶边距离top得到。

进一步地,步骤s7具体包括:

s7.1、首先根据数字识别结果获取数字序列第一个数字左上角在所选图像区域中的坐标(x,y);

s7.2、采用下述公式计算整数位中心点在整幅海图中的坐标(cx,cy),即水深点的空间坐标:

cx=x+(x+w/2)×sx

cy=y-(y+h/2)×sy

其中:x,y表示框选的图像区域左上角的空间坐标;x,y表示数字序列第一个数字左上角在所选图像区域中的坐标,sx、sy表示x、y方向的像元大小,w表示水深点数值整数位宽度,h表示水深点数值整数位高度。

进一步地,步骤s2中,事先依照几何校正后的海图数字格式创建的0至9十个数字模板图像。

进一步地,步骤s9中,修正步骤为:

s9.1、用户在地图窗口中点击待修正的水深点,获取用户点击位置的空间坐标,比较用户点击位置的空间坐标与所有水深点的空间坐标之间的距离,距离最小者为待修正的水深点;

s9.2、操作人员手动录入水深点正确读数,根据所录入数字整数位,从0至9数字模板中读取相应的数字,若整数位只有1位只需读取其中一个数字模板图像,否则需要读取相应位数的数字模板图像,并合成为一个图像,获取整数位的宽度w和高度h;

s9.3、分别对所选图像区域和前述步骤获取的数字模板图像执行傅里叶变换得到各自的频谱图;

s9.4、对两个频谱图执行相关操作(correlation),然后对相关操作(correlation)所得到的图像执行傅里叶逆变换,在用户点击位置附近搜索极大值点(x,y)即为待修正水深点整数位左上角在所选图像区域中的坐标(x,y);

s9.5、采用下述公式计算整数位中心点在整幅海图中的坐标(cx,cy),即水深点的空间坐标:

cx=x+(x+w/2)×sx

cy=y-(y+h/2)×sy

其中:x,y表示框选的图像区域左上角的空间坐标;x,y表示数字序列第一个数字左上角在所选图像区域中的坐标,sx、sy表示x、y方向的像元大小,w表示水深点数值整数位宽度,h表示水深点数值整数位高度;

s9.6、根据计算得到的(cx,cy)和操作人员录入的水深点读数,修改点矢量文件中对应的记录。

本发明的有益效果:

本发明能够大幅度提高海图水深点矢量化工作的效率。对于一幅1:150,000的海图,一个熟练的矢量化操作员通常需要半天至一天的不间断工作方能完成全部水深点的矢量化,利用本方法仅需要30分钟至1小时即可实现,显著提高了识别的效率。

附图说明

图1是本发明的流程图。

图2是局部海图。

其中:数字即水深点,点的位置在整数位的中心,有多于1位的整数位,也有不带小数位的,所有小数位只有1位。

图3是数字在框选图像区域中的位置示意图。

图4是同时获取多个水深点读数和坐标算法流程图。

其中:numstr为数字序列,numstrm为数字序列中第m个数字,leftm、topm分别为第m个数字的left和top数值;depstr为单个水深点的数字收集器,dep为数值型水深点变量、w、h分别为单个水深点整数位的宽度和高度,coord为水深点左上角坐标。abs为绝对值操作:depstr+=numstr_为连接字符串操作:depstr→dep我字符串转数值型操作。

具体实施方式

下面结合附图和实施例对本发明作进一步的说明。

如图1所示,一种扫描纸质海图水深点自动矢量化及信息提取的改进方法,它包括以下步骤:

s1、扫描纸质海图;

s2、对扫描的海图图像文件进行几何校正(采用gis软件工具进行几何校正,如arcgis)(海图属于地理数据的一种,而地理数据要与实际空间位置对应起来才有意义,利用扫描仪扫描进电脑之后仅仅是一个普通的图片,因此在使用之前需要对其进行几何校正);创建点矢量文件,文件参考坐标系与已校正的扫描海图图像文件一致,事先依照几何校正后的海图数字格式创建的0至9十个数字模板图像。

s3、框选海图图像中任一包含单个或多个水深点的图像区域,并获取框选的图像区域左上角的空间坐标(x,y)及x、y方向的像元大小sx、sy;

s4、读取框选区域的图像数据,识别区域中的数字,将识别结果中多个数字序列合并为1个数字序列numstr,该数字序列中有n个数字,m为序列中的数字索引,m=0,...,n-1,获得数字序列以及数字序列中各数字上边到框顶边的顶边距离top、下边到框顶边的底边距离bottom、左边到框左边的左边距离left、右边到框左边的右边距离right;

s5、声明字符变量depstr用来存放提取的单个水深点数字序列,并将数字序列numstr中第一个数字即numstr0赋值给depstr,同时获取其左上角的坐标位置(x,y);

s6、判断数字序列numstr是否只包含一个数字:

如果是一个数字,则仅有一个水深点且数值为1位整数,将depstr转变为数值型即得到正确的水深点读数,同时获取其宽度w和高度h;

如果包含多于一个数字,则依次将numstrm-1与numstrm的空间位置进行比较,m=1,...,n-1,直到所有数字比较完毕结束,得到所有水深点的正确读数,获取其整数数字的宽度w和高度h,采用下述步骤:

若存在小数位,宽度w通过数字序列中倒数第二个数字的右边距离right减去第一个数字的左边距离left得到宽度w,高度h通过排除数字序列最后一个数字之后的全部数字中最大底边距离bottom减去最小顶边距离top得到;

若不存在小数位,宽度w通过数字序列中最后一个数字的右边距离right减去第一个数字的左边距离left得到,高度h通过数字序列中所有数字中最大底边距离bottom减去最小顶边距离top得到。

其中,空间位置比较步骤具体为:

如果numstrm-1与numstrm的左边距离left满足下述情况,则进行相应处理:

c1、abs(leftm-leftm-1)<20且abs(topm-topm-1)<5,则numstrm为该水深点的一个整数位数字,将numstrm连接到depstr:(字符串连接,例如,字符串变量str现在=“1”,把一个新的字符串“6”连接到str,则str就变成了“16”;再把一个新的字符串“3”连接到str,则str就变成了“163”。因为选了多个水深点,ocr识别后结果可能比较乱,一个水深点的数可能识别成两个对象,有可能多个水深点的数字识别成一个对象,所以首先把识别出的所有数字合成为一个水深点序列,然后通过这里的算法来把各个水深点正确分开。这里depstr是用来存放分开后的单个水深点数值的变量。)

进而,判断numstrm是否为numstr的最后一个数字,即判断m=n-1是否成立,如果成立,则depstr为该水深点的完整数字序列,且无小数位,将depstr转变为数值型即得到正确的水深点读数,同时获取其宽度w和高度h,比较结束,否则继续比较;

c2、abs(leftm-leftm-1)<20且5<abs(topm-topm-1)<15,则numstrm为小数位,将numstrm连接到depstr,depstr作为该水深点的完整数字序列,将depstr转变为数值型并除以10即得到正确的水深点读数,同时获取其整数位宽度w和高度h;

判断m<n-1是否成立,如果成立,则对depstr重新赋值为numstrm+1,并令m=m+1,同时获取numstrm+1的坐标位置,否则继续比较;

进而,判断numstrm是否为numstr的最后一个数字,即判断m=n-1是否成立,如果成立,则depstr为该水深点的完整数字序列且数值为1位整数,将depstr转变为数值型即得到正确的水深点读数,同时获取其宽度w和高度h,比较结束,否则继续比较;

c3、如果不满足c1、c2的两个初始判断条件,则depstr为该水深点的完整数字序列,且无小数位,将depstr转变为数值型即得到正确的水深点读数,同时获取其宽度w和高度h,获取numstrm的坐标位置,对depstr重新赋值为numstrm;(depstr是一个临时变量,用来存储通过判断从数字序列中分离得到的单个水深点读数,每得到一个完整的水深点读数,depstr就被转换为数值型并存入一个用来存储所选全部水深点读数的数组变量,然后将被重新赋值用来存储下一个水深点读数。)

进而,判断numstrm是否为numstr的最后一个数字,即判断m=n-1是否成立,如果成立,则depstr为该水深点的完整数字序列,且无小数位,将depstr转变为数值型即得到正确的水深点读数,获取其宽度w和高度h,比较结束,否则继续比较。

s7、依次计算各个水深点的空间坐标,进一步地,步骤s7具体包括:

s7.1、首先根据数字识别结果获取数字序列第一个数字左上角在所选图像区域中的坐标(x,y);

s7.2、采用下述公式计算整数位中心点在整幅海图中的坐标(cx,cy),即水深点的空间坐标:

cx=x+(x+w/2)×sx

cy=y-(y+h/2)×sy

其中:x,y表示框选的图像区域左上角的空间坐标;x,y表示数字序列第一个数字左上角在所选图像区域中的坐标,sx、sy表示x、y方向的像元大小,w表示水深点数值整数位宽度,h表示水深点数值整数位高度。

s8、根据所获取的水深点空间坐标在步骤s2创建的点矢量文件中生成点要素并将水深数据写入属性表,在图上显示获取的水深读数和空间位置以便判断正确与否;

s9、目视判断所获取的水深点读数和空间位置是否正确,若不正确,进行修正,若正确,则重复s2至s9步,完成整幅海图的矢量化,修正步骤为:

s9.1、用户在地图窗口中点击待修正的水深点,获取用户点击位置的空间坐标,比较用户点击位置的空间坐标与所有水深点的空间坐标之间的距离,距离最小者为待修正的水深点;

s9.2、操作人员手动录入水深点正确读数,根据所录入数字整数位,从0至9数字模板中读取相应的数字,若整数位只有1位只需读取其中一个数字模板图像,否则需要读取相应位数的数字模板图像,并合成为一个图像,获取整数位的宽度w和高度h;

s9.3、分别对所选图像区域和前述步骤获取的数字模板图像执行傅里叶变换得到各自的频谱图;

s9.4、对两个频谱图执行相关操作(correlation),然后对相关操作(correlation)所得到的图像执行傅里叶逆变换,在用户点击位置附近搜索极大值点(x,y)即为待修正水深点整数位左上角在所选图像区域中的坐标(x,y);

s9.5、采用下述公式计算整数位中心点在整幅海图中的坐标(cx,cy),即水深点的空间坐标:

cx=x+(x+w/2)×sx

cy=y-(y+h/2)×sy

其中:x,y表示框选的图像区域左上角的空间坐标;x,y表示数字序列第一个数字左上角在所选图像区域中的坐标,sx、sy表示x、y方向的像元大小,w表示水深点数值整数位宽度,h表示水深点数值整数位高度;

s9.6、根据计算得到的(cx,cy)和操作人员录入的水深点读数,修改点矢量文件中对应的记录。

本发明未涉及部分均与现有技术相同或可采用现有技术加以实现。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1