【问题标题】:How to extract plateaus within clouded data (Matlab)如何在云数据中提取高原(Matlab)
【发布时间】:2019-12-28 09:31:03
【问题描述】:

我目前正在编写一个程序来检测低分辨率二进制图像中的边缘(在 Matlab 中)。

由于霍夫变换在边缘较多的图片中效果不佳,我尝试了另一种方法

  1. 跟随对象区域的边界。

  2. 确定每个边界像素i 的斜率/角度a_i(使用特定数量的邻居来确定)。

  3. 确定每个像素i的角度(a_ort)_i与2)中计算的斜率正交。

  4. 按照(a_ort)_i 的方向确定像素i 位置处潜在边缘的宽度w_i(假设我朝正确的方向前进,而不是与(a_ort)_i 成180°) .

最后我得到了两个地块

a) 边界像素索引 i 在 x 轴上和 (a_ort)_i 在 y 轴上的绘图。

b) 边界像素索引 i 位于 x 轴,w_i 位于 y 轴的绘图。

我想检测边缘可能在哪里。因此,对于绘图 a) 可能会出现一条边缘,其中 x 轴上的某个范围 A 有一个平台(假设角度几乎恒定a_A),然后范围 B 有一个非常小的平台(大部分只有大约 3- 5 像素),角度为a_B,其后是范围为 C 且角度为 a_C 的区域。

当我用我想象中的汽车“绕过”边界时,边缘将转换为 w_A-w_C=180°w_B=w_A-90° - 听起来既公平又简单。同样(但不同!)适用于图 b),其中 w_A 对应于宽度w_A,它应该与范围 C 和w_C 相同(所以w_C=w_A)。 范围 B 将有一些不同的值w_B。现在到有问题的部分: 我得到的图非常模糊,难以读取和提取数据。由于范围B大多非常小(只有几个像素),而a_Bw_B对应的角度和宽度的计算由于误差非常大而几乎没有用,我可以完全忽略它们。我基本上只需要找到板块 A 和 C 以及哪里有一些“断点”。实际上,我只需要绘制 a) 或 b) 来确定我想要的(边缘可能所在的像素),但由于数据非常糟糕,有很多异常值,我想同时包含并使用它们。

问题:(TL:DR)。

我有来自 plot a) 的数据和来自 plot b) 的数据,我想在其中找到高原(常数值线)(忽略并过滤其他所有内容)。在 a) 中确定 x 轴上的值,其中存在从一个高原到另一个高原的“跳跃”,而高原在 180° 上不同。在 b) 中,我想确定一个高原之间的“差距”在哪里,理想情况下,应该与我在情节 a) 中寻找的两个高原一样长。

三张图:

【问题讨论】:

    标签: matlab plot data-fitting


    【解决方案1】:

    三个“高原”的案例似乎对应于论文第 14-16 页的案例处理:https://fr.scribd.com/document/380941024/Regression-par-morceaux-Piecewise-Regression-pdf

    下面,从上面的参考资料中复制(翻译)。我希望这会有所帮助。

    有关变体(全局而不是分段回归),请参阅参考论文。

    这是一个非常简单的算法,不是迭代的。我想在 Matlab 中实现它很容易。

    注意:如果 a1 和\或 a2 不是实数,或者其中一个在 [x1,xn] 范围之外,这意味着由三个高原组成的模型与数据不一致。在这种情况下,人们必须尝试一些其他算法来获得更少或更多的高原或非水平段,如参考论文中所示。

    【讨论】:

    • 非常感谢 :) 可悲的是,我得到的高原数量更高而且不是恒定的(甚至是未知的)......
    猜你喜欢
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2011-02-27
    相关资源
    最近更新 更多