像素矩阵到坐标

时间:2016-05-20 16:56:44

标签: algorithm hough-transform

我必须将给定的像素矩阵(系数在0到255范围内,因为矩阵对应于黑白图像)转换成两个列表。它们都可以由列表组成,一个包含点的横坐标,另一个包含纵坐标。

正如您在附图中所注意到的那样,第一种情况对应于单条曲线,而其他情况则涉及多条曲线,彼此相交。算法应该能够区分两条或三条曲线(在最后两个例子中),因此在两个主列表中,给定的子列表对应于给定的曲线。

Types of curves

我完全不知道从什么开始...

最后一件事:我正在寻找关于如何编程这个算法的想法,所以这就是为什么我没有添加任何特定的编程语言(如果代码可以帮助任何解释,请随意说任何语言。)

提前致谢> ^。^<

1 个答案:

答案 0 :(得分:1)

查看Hough transform。这是一种简单的投票算法,可以在图像中找到简单的几何形状。一个复杂因素可能是你的线条并不严格直线。但是它会在你找到的线上给出方程式。由于您的案例有点不规范,我尝试了解算法本身并编写自己的实现。

在我的第一个实现中(在我拍摄的长焦深度图像中以圆形为中心)我开始使用一个非常简单的Python示例,我在网上找到它,为了我的目的重写它,然后为了速度转移到C#,因为我需要比这个简单案例所需的更多参数(更高维度的搜索空间)。

在你的情况下,我将从简单的直线假设开始。然后霍夫变换将分别为你的三个案例分别给出1,2和3个最大值。

霍夫变换的想法得到了很好的描述on wikipedia

这里只是这个想法的要点:

  

直线思考给每个黑色像素赋予投票权   180个可能的线路可以通过它(每个角度一个   单度步骤),然后将投票作为直方图绘制在2d空间中,其中一个   维度是线的角度,另一个是距离   起源(出于实际原因使用Hesse正常形式的线   而不是常见的y = m x + b)和z维度是投票数。由黑色形成的实际线   像素将比任何其他可能的线获得更多的选票,所以你是   只需在转换中查找最大投票位置即可   空间(比如Python / numpy,它将是argmax)。

如果有两行,你会发现两个明确的最大值,较高的一行有较长或较粗的行(更多的票数)。然后,您可以开始在图像中使用灰度,对像素进行非整数投票。您还可以根据问题的内容使用角度分辨率。