我在哪里可以找到有关线增长算法的信息?

时间:2009-03-30 01:01:12

标签: math image-processing

我正在进行一些图像处理,我需要找到关于线增长算法的一些信息 - 不确定我是否在这里使用了正确的术语,所以请在这个问题上打电话给我。

想象一下,我的输入图像只是黑色背景上的一个圆圈。我基本上喜欢提取坐标,这样我就可以根据坐标在其他地方画出这个圆圈。

注意:我已经在使用边缘检测图像过滤器,但我认为最好用一个简单的例子来解释。

基本上我要做的是检测图像中的线条,并将结果存储在数据类型中,其中我说一个名为Line的类,以及各种不同的Point对象(包含X / Y坐标)。 / p>

class Line
{
    Point points[];
}

class Point
{
    int X, Y;
}

这就是我想用它的方式......

Line line;

for each pixel in image
{
    if pixel should be added to line
    {
        add pixel coordinates to line;
    }
}

我不知道如何处理这个问题,因为你可以建立,所以非常感谢任何主题的指针。

5 个答案:

答案 0 :(得分:3)

我不确定我是否正确解释你,但标准方法是使用Hough transform。这是一个两步过程:

  1. 从给定图像中确定每个像素是否为边缘像素(此过程创建新的“二进制”图像)。执行此操作的标准方法是Canny edge-detection

  2. 使用边缘像素的二进制图像,应用Hough变换。基本思想是:对于每个边缘像素,计算通过它的所有线,然后获取通过最边缘像素的线。

  3. 编辑:显然你正在寻找边界。这是你如何做到的。

    回想一下,Canny边缘探测器实际上也给你一个渐变(不仅仅是幅度)。因此,如果您选择一个边缘像素并沿着(或反对)该向量,您将找到下一个边缘像素。继续前进,直到你不再碰到边缘像素,这就是你的边界。

答案 1 :(得分:1)

你所说的不是一个容易的问题!我发现这个网站在图像处理方面非常有用:http://homepages.inf.ed.ac.uk/rbf/HIPR2/wksheets.htm

要尝试的一件事是Hough Transform,它会检测图像中的形状。请注意,要想出来并不容易。

对于边缘检测,最好的是Canny edge detection,这也是一项非常重要的任务。

答案 2 :(得分:1)

假设以下情况属实:

  • 您的图片在背景上包含单一形状
  • 您可以确定哪些像素是背景,哪些像素是形状
  • 你只想抓住形状外部的边界(这不包括你想跟踪内圈的甜甜圈形状)

您可以使用轮廓跟踪算法,例如 Moore-neighbor 算法。

<强>步骤:

  1. 查找初始边界像素。要做到这一点,从图像的左下角开始,一直向上移动,如果到达顶部,从底部开始向右移动一个像素并重复,直到找到形状像素。确保在找到形状像素之前跟踪您所在像素的位置。

  2. 查找下一个边界像素。顺时针绕最后访问的边界像素移动,从您上次访问的背景像素开始,然后找到当前边界像素。

  3. 重复步骤2,直到重新访问第一个边界像素。第二次访问第一个边界像素后,您已经跟踪了整个形状边界并可以停止。

答案 3 :(得分:0)

您可以查看创建项目的http://processing.org/,以便在视觉上下文中教授计算机编程的基础知识。有一种基于java的语言和一个用于制作“草图”的IDE。它是一个非常好的包,可以快速处理可视对象,并且有很好的例子,比如edge detection对你有用。

答案 4 :(得分:0)

只是为了回应上面的答案,你想做边缘检测和Hough变换 请注意,圆形的Hough变换有点棘手(您要解决3个参数,x,y,radius),您可能只想使用像openCV这样的库