【发布时间】:2019-12-28 09:31:03
【问题描述】:
我目前正在编写一个程序来检测低分辨率二进制图像中的边缘(在 Matlab 中)。
由于霍夫变换在边缘较多的图片中效果不佳,我尝试了另一种方法
跟随对象区域的边界。
确定每个边界像素
i的斜率/角度a_i(使用特定数量的邻居来确定)。确定每个像素
i的角度(a_ort)_i与2)中计算的斜率正交。按照
(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_B和w_B对应的角度和宽度的计算由于误差非常大而几乎没有用,我可以完全忽略它们。我基本上只需要找到板块 A 和 C 以及哪里有一些“断点”。实际上,我只需要绘制 a) 或 b) 来确定我想要的(边缘可能所在的像素),但由于数据非常糟糕,有很多异常值,我想同时包含并使用它们。
问题:(TL:DR)。
我有来自 plot a) 的数据和来自 plot b) 的数据,我想在其中找到高原(常数值线)(忽略并过滤其他所有内容)。在 a) 中确定 x 轴上的值,其中存在从一个高原到另一个高原的“跳跃”,而高原在 180° 上不同。在 b) 中,我想确定一个高原之间的“差距”在哪里,理想情况下,应该与我在情节 a) 中寻找的两个高原一样长。
三张图:
【问题讨论】:
标签: matlab plot data-fitting