ArcMap欧氏距离工具提取图像骨架线

来源:互联网 发布:微信载入数据失败 编辑:程序博客网 时间:2024/05/18 00:20

图像骨架线(Morphological skeleton)

图像骨架线在wiki中有两个术语,分别是Morphological skeleton和Topological skeleton。

  1. 形态骨架线(Morphological skeleton)在数字图像处理中,形态骨架是通过形态学算子计算的形状或二值图像的骨架(或中轴)表示。形态骨架有两种:那些通过形态开口定义的,可以重建原始形状的开口, 那些通过hit-or-miss变换来计算的,它保留了形状的拓扑结构。(谷歌翻译)
  2. 拓扑骨架线(Topological skeleton)在形状分析中,形状的骨架(或拓扑骨架)是与其边界等距的形状的薄形。骨架通常强调形状的几何和拓扑性质,如连通性,拓扑结构,长度,方向和宽度。连同它的点到形状边界的距离,骨架还可以作为形状的表示(它们包含重建形状所需的所有信息)。(谷歌翻译)

骨架线提取方法

根据上面图像骨架线的定义,即骨架线到边界等距,可知骨架线是与边界距离相等的点的集合。作为专业的GIS人员,很容易就想到了由边界向内部做缓冲区,就可以求出中心线,也可以提出骨架线。这里生成的缓冲区必须是连续的缓冲区,所以不能使用矢量缓冲区的Buffer,而应该使用欧氏距离向图形内部做缓冲区,原理和openCV中的距离变换一致。

欧式距离

直角坐标系中两点间的直线距离:

dist=(x1x2)2+(y1y2)2

ArcMap中的欧氏距离

Euclidean Distance gives the distance from each cell in the raster to the closest source. Example of usage: What is the distance to the closest town?
欧式距离

实验1

数据是随意生成的一个两个矩形
实验1数据

步骤

1. 图像取反

画一个更大的矩形包裹住这两个小矩形,然后使用这两个小矩形在上面抠出两个洞。有很多方法可以抠这个洞,不献丑我就不写了,如下图:
图像取反

2. 使用欧氏距离生成缓冲区/距离场

[Spatial Analysis]->[Distance]->[Euclidean Distance]

欧式距离结果图

3. 提取骨架线

这一步主要是提取距离场中的突变处,使用坡度或者曲率都可。下图因为宽度只有一两个像素而显示不出来,其实是连续的线。最后结果要重分类,将非骨架线区域转换成NoData。

[Spatial Analysis]->[Surface]->[Slope] or [Curvature]

坡度

4. 转换成矢量线

矢量骨架线

叠加显示

实验2

数据

数据

欧氏距离

欧氏距离图

骨架线

重分类的时候,因为阈值设置的不好,有断线,选取一个合适的阈值就可以处理断线了。
矢量骨架线

结果分析

是不是很像山脊线?
是不是很像山脊线


原创粉丝点击