已知:经过轮廓跟踪后的坐标连续的n组点列,点列中相邻点即坐标平面中八邻域点。
目标:将每一组点列进行曲线拟合。就是修改这些点的x,y坐标值,存入新点列,使其显示出来的时候是一条很光滑的曲线。我知道有很多的拟合算法,但感觉很多都是必须知道了控制点才进行拟合的。那么现在我的点很密集,是需要先进行离散化再拟合么?怎么确定控制点呢?希望不进行人手工操作,自动拟合的。能不能直接拟合出光滑曲线呢?什么算法比较适合这种情况呢?我刚刚接触这个,老师又催的比较急,这两天看的头都大了。很迫切的的希望大牛们能够指点一下。如果有相关的源码更好了。不胜感激!!

解决方案 »

  1.   

    啊?不太明白问题是我的点列本身就是单线的,我用CArray<CPoint,CPoint>存了一组点的坐标,是连续的坐标点,经过边界跟踪得到的。比如第一个点(10,11)第二个点(11,12)三(12,12)四(13,13)五(12,14)六(11,15)七(10,14)……就是一个交点跟踪到了另一个交点,具体一个点列有多少点不确定,有可能成百上千,但是都是连续的,每个点的关系都是八邻域的关系。
    虽然这样是连续的,但是肯定是有毛刺的。我希望修改这些点的坐标值,重新存入一个新的点列中,使之连起来是一个平滑的曲线。而不是拿moveto,lineto画的。。
    额,我对于计算机图形学很不了解啊。。
      

  2.   

    那你的点序号会不会存在双线,也就是类似于(0,0)(0,1)(1,0)(1,1)这样的出现,
    如果不会出现这样的情况,你要完成的任务就是相当于剔除短小的分支,只保留一个主干,也就是搜索出一条最长的点序列。如果上面我的理解正确的话,一些基本的算法也许可以帮你完成任务,建议使用递归。这与你之前点的存储结构有很大关系,如果存在分支你之前的节点是如何存储的,一个ARREY总不能存储所有分支吧,
    欢迎继续讨论