基于图像处理的海岸线自动提取算法研究
2020-06-08米硕
米 硕
(四川大学水力学与山区河流开发保护国家重点实验室,四川 成都 610065)
准确快速地测定海岸线的时空变化,对于海域使用管理具有十分重要的意义[1]。海岸线会在河口泥沙淤积、海平面上升等自然现象的影响下产生缓慢的变化。人类的填海造地工程、港口建设等人为活动会造成自然岸线的急剧变化。传统获取海岸线的时空变化信息的方法多为野外实地调查。但该方法效率低、周期长,并且数据统计处理难度较大[2]。
基于卫星图像,采用图像处理的方法,可以较为方便的对海岸线进行数据统计。与传统多波段或超光谱遥感图像相比,Google Earth卫星图像更新快,易获取且历史信息全。但是Google Earth卫星图像为普通彩色图像,可提供波段信息较少,因此需要设计合适的算法才能对海岸线进行准确有效的提取。
1 算法原理及实现
基于Google Earth卫星图像进行海岸线的识别与提取,要求待处理的图像中包含海洋区域与岸上区域,因此待识别海岸线为两区域分界线。图像上海洋与陆地两区域颜色、纹理等特性存在较大差异,分界线比较明显,可针对海陆二者特征的差异,基于图像处理的方式设计处理算法,将海陆边界像素点分离,进而通过搜索方法找寻海岸线像素点坐标。再根据比例尺换算出实际距离,将海岸线数据量化,从而进行后续的分析。本文海岸线的提取算法流程见图1。
图1 海岸线提取算法流程图
1.1 图像降噪
对于单独的一张Google Earth卫星图像,需要对图像进行降噪处理[3],否则图像中无关噪点的存在有可能会对海岸线数据的提取造成干扰。因此本文算法需要在尽可能的保持原始信息即海陆边缘特征的完整性的同时,又能够去除信号中无用的信息如海上波浪、船舶等带来的干扰。
本文采用了双边滤波来进行图像降噪。双边滤波是一种可以保留边缘信息同时降噪的滤波器。它是基于空间分布的高斯滤波函数,可以使得离边缘较远的像素不会对边缘像素产生较大的影响,这样就避免了边缘的模糊[4]。
1.2 边缘检测
图像的边缘检测[5]是图像处理的常用算法之一。边缘检测强调的是图像对比度。检测对比度也就是检测亮度上的差别,由此可以增强图像中的边界特征,这些边界出现正是图像亮度上的差别。因此基于卫星图像中海洋与陆地亮度的显著差异,边缘检测算法可以得到较为良好的效果。常见的边界算子有Canny算子、Sobel算子、Laplace算子等,本文综合考虑图像处理效果及算法复杂度的影响,采用Sobel算子对Google Earth图像进行边缘检测。Sobel算子主要用作边缘检测,它是一种离散型差分算子,用来计算图像亮度函数灰度的近似值。
1.3 二值化
对图像进行二值化操作可以将图像上的像素点的灰度值设置为0或255,因此二值化后的图像会呈现出明显的黑白效果。图像的二值化有利于对图像进行进一步处理,使得图像特征变得简单且数据存储量减少,能强化感兴趣的目标的轮廓即海洋与陆地两部分的图像特征。将经过边缘检测的灰度图进行二值化处理后,海洋部分会以黑色像素点的形式呈现,而陆地主体为白色像素点,黑白像素点的交界处即为需要提取的海岸线。因此基于黑白二值图,就可以从一个种子点开始进行搜索,在遍历全图后,可以找到完整的黑白交界处的像素点,其连接起来即为需要提取的海岸线。
1.4 形态学操作
图像形态学操作是基于形状的一系列图像处理操作的合集,主要有四个操作:膨胀、腐蚀、开运算、闭运算。
膨胀操作可以将图像的轮廓加以膨胀;腐蚀操作即将图像外围的突出点加以腐蚀;开运算可以放大裂缝和低密度区域,消除小物体,在平滑较大物体的边界时,不改变其面积,消除物体表面的突起;闭运算可以排除二值化图像中的小型黑洞,突出比原图轮廓区域更暗的区域,将两个区域连接起来,形成连通域。
本文采用的算法先使用腐蚀操作分割出独立的图像元素,将不属于海岸线的像素点独立成个体,进而可以采取闭运算填充小的孔洞,填补海岸线像素点,使得代表海岸线的像素点平滑而连续。最后采用膨胀操作填补腐蚀操作时被蚕食的高亮区域。经过这一系列的形态学操作,可以在分离出海岸线像素区域与无关像素区域的同时增强海岸线的特征,减少无关噪点,有利于后续海岸线数据点的提取。
1.5 海岸线数据点提取方法
经过预处理及形态学操作后的图像,在计算机中被存储为一个大小为图像像素长宽的矩阵,矩阵中的每个数据均代表一组像素点坐标。为了提取出海岸线像素点的坐标数据,本文采用八方向搜索的方式进行海岸线数据点的提取,见图2,首先在图像矩阵从海洋黑色像素区域查找到第一个陆地像素即白色像素点作为种子点,坐标为(x,y),然后以(x-1,y),(x-1,y+1),(x,y+1),(x+1,y+1),(x+1,y),(x+1,y-1),(x,y-1),(x-1,y-1)的顺序在八个方向查找下一个海岸线像素点位置,直到所有海岸线边界点被标记。
图2 八方向搜索提取海岸线数据点
2 试验结果
图3展示了本文海岸线提取流程的一个示例,从图中可以看出经过滤波、边缘检测、形态学操作,二值化等图像操作后,海岸线能够准确地被识别并被提取。具有了海岸线的散点数据后,可以计算出陆地面积等信息,为海岸线的管理建设等提供数据支持。
图3 辽宁省菊花岛海岸线提取过程
3 结论
本文选取杭州湾为研究地点,提取了1986年~2016年间22个年份的海岸线,以1996年杭州湾地区Google Earth图像为底图,在1996年~2014年间选取了五个年份进行海岸线的提取,见图4。
图4 杭州湾海岸线提取结果
在获取到提取的海岸线数据后,可以计算出所研究区域海岸线所包围陆地面积,进而可以计算出陆地面积的变化趋势,从而分析港口海岸地区的时空变化趋势。提取出的海岸线数据为一系列像素点的散点坐标,把图像边界像素点添加进散点数据集,所有像素点连接即为任意形状的多边形,因此可采用任意多边形面积公式[6]计算陆地的像素面积,公式如下:
其中,(xi,yi)代表海岸线散点的坐标且x1=xN+1,y1=yN+1,计算出陆地的像素面积后,则需要由图像比例尺换算出真实的陆地面积。可以通过将Google地图卫星图像的比例尺距离除以其所占像素,进而获得每像素代表的实际长度,进而可以计算得出真实的陆地面积。
图5 1986年~2016年杭州湾的面积变化
经过图像处理并提取数据后,计算出杭州湾在1986年~2016年间的面积变化,见图5。图5数据表明,自1996年以来,杭州湾沿岸的陆地面积增长开始加快。从1996年到2014年,杭州湾沿岸陆地面积年均增长率为38.1 km2/a,是1986年~1996年期间杭州湾沿岸陆地面积年均增长面积(17.7 km2/a)的两倍多。自2014年以来,杭州湾沿岸土地面积趋于稳定,并略微呈现出侵蚀的趋势。经过此例可以看出,本文提出的海岸线数据提取算法可以基于Google Earth卫星图像对海岸线数据进行提取,并进行后续的计算和分析,避免了传统野外实地调查方法效率低、周期长及卫星遥感方法时效性不强的弊端,证实了该方法在港口海岸工程方面应用的可行性及有效性。