我必须将给定的像素矩阵(系数在0到255范围内,因为矩阵对应于黑白图像)转换成两个列表。它们都可以由列表组成,一个包含点的横坐标,另一个包含纵坐标。
正如您在附图中所注意到的那样,第一种情况对应于单条曲线,而其他情况则涉及多条曲线,彼此相交。算法应该能够区分两条或三条曲线(在最后两个例子中),因此在两个主列表中,给定的子列表对应于给定的曲线。
我完全不知道从什么开始...
最后一件事:我正在寻找关于如何编程这个算法的想法,所以这就是为什么我没有添加任何特定的编程语言(如果代码可以帮助任何解释,请随意说任何语言。)
提前致谢> ^。^<
答案 0 :(得分:1)
查看Hough transform
。这是一种简单的投票算法,可以在图像中找到简单的几何形状。一个复杂因素可能是你的线条并不严格直线。但是它会在你找到的线上给出方程式。由于您的案例有点不规范,我尝试了解算法本身并编写自己的实现。
在我的第一个实现中(在我拍摄的长焦深度图像中以圆形为中心)我开始使用一个非常简单的Python示例,我在网上找到它,为了我的目的重写它,然后为了速度转移到C#,因为我需要比这个简单案例所需的更多参数(更高维度的搜索空间)。
在你的情况下,我将从简单的直线假设开始。然后霍夫变换将分别为你的三个案例分别给出1,2和3个最大值。
霍夫变换的想法得到了很好的描述on wikipedia。
这里只是这个想法的要点:
直线思考给每个黑色像素赋予投票权 180个可能的线路可以通过它(每个角度一个 单度步骤),然后将投票作为直方图绘制在2d空间中,其中一个 维度是线的角度,另一个是距离 起源(出于实际原因使用Hesse正常形式的线 而不是常见的y = m x + b)和z维度是投票数。由黑色形成的实际线 像素将比任何其他可能的线获得更多的选票,所以你是 只需在转换中查找最大投票位置即可 空间(比如Python / numpy,它将是
argmax
)。
如果有两行,你会发现两个明确的最大值,较高的一行有较长或较粗的行(更多的票数)。然后,您可以开始在图像中使用灰度,对像素进行非整数投票。您还可以根据问题的内容使用角度分辨率。