我正在进行一些图像处理,我需要找到关于线增长算法的一些信息 - 不确定我是否在这里使用了正确的术语,所以请在这个问题上打电话给我。
想象一下,我的输入图像只是黑色背景上的一个圆圈。我基本上喜欢提取坐标,这样我就可以根据坐标在其他地方画出这个圆圈。
注意:我已经在使用边缘检测图像过滤器,但我认为最好用一个简单的例子来解释。
基本上我要做的是检测图像中的线条,并将结果存储在数据类型中,其中我说一个名为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;
}
}
我不知道如何处理这个问题,因为你可以建立,所以非常感谢任何主题的指针。
答案 0 :(得分:3)
我不确定我是否正确解释你,但标准方法是使用Hough transform。这是一个两步过程:
从给定图像中确定每个像素是否为边缘像素(此过程创建新的“二进制”图像)。执行此操作的标准方法是Canny edge-detection。
使用边缘像素的二进制图像,应用Hough变换。基本思想是:对于每个边缘像素,计算通过它的所有线,然后获取通过最边缘像素的线。
编辑:显然你正在寻找边界。这是你如何做到的。
回想一下,Canny边缘探测器实际上也给你一个渐变(不仅仅是幅度)。因此,如果您选择一个边缘像素并沿着(或反对)该向量,您将找到下一个边缘像素。继续前进,直到你不再碰到边缘像素,这就是你的边界。
答案 1 :(得分:1)
你所说的不是一个容易的问题!我发现这个网站在图像处理方面非常有用:http://homepages.inf.ed.ac.uk/rbf/HIPR2/wksheets.htm
要尝试的一件事是Hough Transform,它会检测图像中的形状。请注意,要想出来并不容易。
对于边缘检测,最好的是Canny edge detection,这也是一项非常重要的任务。
答案 2 :(得分:1)
假设以下情况属实:
您可以使用轮廓跟踪算法,例如 Moore-neighbor 算法。
<强>步骤:强>
查找初始边界像素。要做到这一点,从图像的左下角开始,一直向上移动,如果到达顶部,从底部开始向右移动一个像素并重复,直到找到形状像素。确保在找到形状像素之前跟踪您所在像素的位置。
查找下一个边界像素。顺时针绕最后访问的边界像素移动,从您上次访问的背景像素开始,然后找到当前边界像素。
重复步骤2,直到重新访问第一个边界像素。第二次访问第一个边界像素后,您已经跟踪了整个形状边界并可以停止。
答案 3 :(得分:0)
您可以查看创建项目的http://processing.org/,以便在视觉上下文中教授计算机编程的基础知识。有一种基于java的语言和一个用于制作“草图”的IDE。它是一个非常好的包,可以快速处理可视对象,并且有很好的例子,比如edge detection对你有用。
答案 4 :(得分:0)
只是为了回应上面的答案,你想做边缘检测和Hough变换 请注意,圆形的Hough变换有点棘手(您要解决3个参数,x,y,radius),您可能只想使用像openCV这样的库