我正在尝试实现一张纸,但我被困在一个名为高程过滤器的部分! 这是本文的一部分:
有谁知道如何在MATLAB中编写它?
答案 0 :(得分:1)
您所询问的内容与图像处理中的内容watershed transform(或wikipedia)密切相关。
根据分水岭方法,灰度图像被视为地形浮雕,并且充满了水。这样,图像的不同区域可以根据不同盆地加入水中的方式分开。
如果分水岭是您的最终目标,图像处理工具箱就有了它的实现。 Here
原则上,在您的问题中,给定q
height(p)
的本地最小值,p
接近q
,可以解决最小化问题
height(p) = inf_{g} \int_g ||grad I (g) || dg
其中g
是加入p
和q
的曲线,I
是你的形象。
有关更多数学详细信息,您可以考虑使用this paper。
对于实现细节,例如,matlab应该有mex代码。
答案 1 :(得分:0)
您可以使用Image Processing Toolbox函数watershed
来计算提升。我将从一个简单的示例300-by-300矩阵开始,以表示您的 height 数据,如下图第一行所示:
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;