我目前正在编写一个程序来检测低分辨率二进制图像中的边缘(在Matlab中。
由于霍夫变换在边缘很多的图片中效果不佳,因此我尝试了另一种方法
遵循对象区域的边界。
确定每个边界像素a_i
的斜率/角度i
(使用特定数量的邻居来确定它)。
确定每个像素(a_ort)_i
的角度i
,与[2]中计算的斜率正交。
按照(a_ort)_i
的方向确定像素w_i
位置处的潜在边缘的宽度i
(假设我沿正确的方向而不是与(a_ort)_i
呈180°移开)。 >
最后我得到了两个地块
a)在x轴上具有边界像素索引i
而在y轴上具有边界像素索引(a_ort)_i
的图。
b)在x轴上具有边界像素索引i
,在y轴上具有w_i
的图。
我想检测边缘可能在哪里。因此,对于图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)。
我有图a)的数据和图b)的数据,我想在其中找到平稳段(常数值的线)(忽略并过滤其他所有内容)。在a)中,确定x轴上从一个平台到另一个平台的“跳跃”值,而平台之间相差180°。在b)中,我想确定一个高原之间存在一个“缺口”,理想情况下,该缺口应该与我在图a)中搜索的两个高原一样长。
三张图片:
我目前正在编写一个程序来检测低分辨率二进制图像中的边缘(在Matlab中)。由于Hough变换在边缘很多的图片中效果不佳,因此我尝试了另一种方法...
[三个“高原”的情况似乎对应于本文第14-16页处理的情况:https://fr.scribd.com/document/380941024/Regression-par-morceaux-Piecewise-Regression-pdf
以下,从上述参考文献中复制(翻译)。希望对您有所帮助。