1

我正在尝试实现一张纸,但我陷入了一个称为高程过滤器的部分!这是本文的那部分:

高程算法

有谁知道如何在 MATLAB 中编写它?

4

2 回答 2

1

您要问的内容与图像处理中称为分水岭变换(或维基百科)的内容密切相关。

根据分水岭方法,灰度图像被视为地形浮雕并且充满水。这样做,图像的不同区域可以分开,根据不同盆地一旦充满水后的连接方式。

如果分水岭是您的最终目标,那么图像处理工具箱有一个实现。在这里


原则上,在您的问题中,给定一个局部最小值qheight(p),对于p接近q,解决了最小化问题

     height(p) = inf_{g} \int_g ||grad I (g) || dg

g连接的曲线在哪里pq并且I是您的图像。

有关更多数学细节,您可以考虑,例如,这篇论文

例如,对于实现细节,matlab 应该有 mex 代码。

于 2013-05-25T13:52:05.447 回答
0

您可以使用图像处理工具箱功能watershed来计算您的海拔。我将从一个简单的示例 300×300 矩阵开始来表示您的身高数据,如下图的第一行所示:

height = repmat(uint8([1:100 99:-1:50 51:1:150 149:-1:100]), 300, 1);

在这种情况下,每一行都有相同的配置文件。我们可以使用 计算盆地矩阵watershed

basin = watershed(height)+1;

如下图的第二行所示。请注意,有些波峰被指定为默认值 1,因为它们位于盆地的边缘。你必须自己决定如何处理这些,因为在这里我最终只是将所有边缘集中在一起形成一个伪盆地。

接下来,我们可以使用accumarray计算一个最小值矩阵(如下图第三行所示),将每个盆地的最小值映射到该盆地中的所有点:

minValues = accumarray(basin(:), height(:), [], @min);
minima = minValues(basin);

最后,可以像这样计算高程(结果如下图最后一行所示):

elevation = height - minima;

数字:

在此处输入图像描述

于 2017-06-14T18:45:25.183 回答