像素矩阵到坐标
Matrix of pixels to coordinates
我必须将给定的像素矩阵(系数在 0 到 255 的范围内,因为矩阵对应于黑白图像)转换为两个列表。两者都可能由列表组成,一个是点的横坐标,一个是纵坐标。
正如您在附带的图片中注意到的那样,第一种情况对应于一条曲线,而其他两种情况都涉及多条曲线,相互交叉。该算法应该能够区分两条或三条曲线(在最后两个示例中),因此在两个主列表中,给定的子列表对应给定的曲线。
我完全不知道从什么开始...
最后一件事:我正在寻找关于如何对该算法进行编程的想法,所以这就是为什么我没有添加任何特定的编程语言(如果代码可能有帮助的话)解释,随便说什么语言)。
提前致谢>^.^<
查看 Hough transform
。这是一个简单的投票算法,允许在图像中找到简单的几何形状。一个并发症可能是你的线条不是严格直的。但它会在它找到的直线上给你方程式。由于您的案例有点不标准,我会尝试理解算法本身并编写我自己的实现。
在我的第一个实现中(在我拍摄的长焦深度图像中以一个正方形为中心的圆圈),我从一个非常简单的 Python 例子开始,我在网上找到了这个例子,为了我的目的重写了它,然后转移到C# 提高速度,因为我需要的参数(更高维搜索 space)比您在这个简单案例中需要的更多。
在你的情况下,我将从直线的简单假设开始。然后霍夫变换将分别为您的三种情况给出 1、2 和 3 最大值。
霍夫变换的思想得到了很好的描述on wikipedia。
这里只是想法的要点:
For a straight line think of giving each black pixel the right to vote
for 180 possible lines that could go through it (one for each angle in
single degree steps), then plotting the vote as histogram over a 2d space, where one
dimension is the angle of the line, another is the distance from
origin (using the Hesse normal form of the line for practical reasons
rather than the common y= m x +b) and the z-dimension is the number of votes. The actual line formed by the black
pixels will get more votes than any other possible line, so you are
simply looking for the Maximum vote location in the transformation
space (say in Python/numpy it would be argmax
).
如果有两条线,您会发现两个明显的最大值,较高的线较长或较粗(票数较多)。然后你可以开始在你的图像中玩灰度,给像素非整数投票。也可以玩转角度的分辨率,看你问题的内容。
我必须将给定的像素矩阵(系数在 0 到 255 的范围内,因为矩阵对应于黑白图像)转换为两个列表。两者都可能由列表组成,一个是点的横坐标,一个是纵坐标。
正如您在附带的图片中注意到的那样,第一种情况对应于一条曲线,而其他两种情况都涉及多条曲线,相互交叉。该算法应该能够区分两条或三条曲线(在最后两个示例中),因此在两个主列表中,给定的子列表对应给定的曲线。
我完全不知道从什么开始...
最后一件事:我正在寻找关于如何对该算法进行编程的想法,所以这就是为什么我没有添加任何特定的编程语言(如果代码可能有帮助的话)解释,随便说什么语言)。
提前致谢>^.^<
查看 Hough transform
。这是一个简单的投票算法,允许在图像中找到简单的几何形状。一个并发症可能是你的线条不是严格直的。但它会在它找到的直线上给你方程式。由于您的案例有点不标准,我会尝试理解算法本身并编写我自己的实现。
在我的第一个实现中(在我拍摄的长焦深度图像中以一个正方形为中心的圆圈),我从一个非常简单的 Python 例子开始,我在网上找到了这个例子,为了我的目的重写了它,然后转移到C# 提高速度,因为我需要的参数(更高维搜索 space)比您在这个简单案例中需要的更多。
在你的情况下,我将从直线的简单假设开始。然后霍夫变换将分别为您的三种情况给出 1、2 和 3 最大值。
霍夫变换的思想得到了很好的描述on wikipedia。
这里只是想法的要点:
For a straight line think of giving each black pixel the right to vote for 180 possible lines that could go through it (one for each angle in single degree steps), then plotting the vote as histogram over a 2d space, where one dimension is the angle of the line, another is the distance from origin (using the Hesse normal form of the line for practical reasons rather than the common y= m x +b) and the z-dimension is the number of votes. The actual line formed by the black pixels will get more votes than any other possible line, so you are simply looking for the Maximum vote location in the transformation space (say in Python/numpy it would be
argmax
).
如果有两条线,您会发现两个明显的最大值,较高的线较长或较粗(票数较多)。然后你可以开始在你的图像中玩灰度,给像素非整数投票。也可以玩转角度的分辨率,看你问题的内容。