减少曲线上的象素数目的算法?
大概是这样的:我有一条连续的闭合曲线,每个点是一个象素,这条曲线上一共有大概几百到几千个点,我需要最多保留其中200个点(更少也可),要求这些保留下来的点尽可能描绘出原来的形状,也就是说曲率大的地方就多保留一些点,较平坦的地方就少保留一些点,直线则可以完全省略中间各点。我有每两个点之间的方向值,从0到7共8个方向(其实就是Freeman链码),那么每个点的弯曲程度可以用前后方向的差的绝对值来表示,最大差为7,最小为0,为0的地方就是方向不变的点,可以直接去掉,为7的点则最需要保留,因为它可能对图象的形状影响最大(另:需要的话是不是也可以求2阶的差呢?有点类似于二阶导数)。
接下来就按每个点的弯曲程度删除其中不那么重要的点了,统计出方向变化为0的点的个数C0,方向变化为1的点的个数C1,...,方向变化为7的点的个数C7,假设未简化前的点共T个,这样问题就变成C0+C1+C2+...+C7=T,C0*X0 + C1*X1 + C2*X2 + ... + C7*X7 < =200,其中Xi为Ci应该保留下来的比例系数,(X0肯定为0,它是直线中间的点),我现在不知道怎样确定Xi才最合理并有理论根据,如何让每个Xi都和所有其他参数有关呢?就是说计算X7的时候要考虑到T和200以及其他Ci的关系?随便找几个Xi肯定是可以做到的,但是缺乏理论根据。而且坦率讲,我希望能在数学上稍微复杂一点:)