减少曲线上的象素数目的算法?
大概是这样的:我有一条连续的闭合曲线,每个点是一个象素,这条曲线上一共有大概几百到几千个点,我需要最多保留其中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肯定是可以做到的,但是缺乏理论根据。而且坦率讲,我希望能在数学上稍微复杂一点:)
接下来就按每个点的弯曲程度删除其中不那么重要的点了,统计出方向变化为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肯定是可以做到的,但是缺乏理论根据。而且坦率讲,我希望能在数学上稍微复杂一点:)
...全文
相关推荐
编写算法,由依次输入的顶点数目、弧的数目、各顶点信息和各条弧信息建立有向图的邻接表。
在这个任务中,我们需要编写一个算法,根据输入的顶点数目、弧的数目以及各自的顶点和弧信息来构建有向图的邻接表。首先,我们需要理解输入格式。通常,这种问题会通过标准输入或者读取文件来获取数据。
贝塞尔曲线函数 曲线平滑算法
]在实际应用中,贝塞尔曲线的平滑算法主要关注如何通过调整控制点来获得平滑的过渡效果。
编写递归算法,计算二叉树中叶子结点的数目
编写递归算法,计算二叉树中叶子结点的数目
用OpenCV实现Photoshop曲线算法源码
曲线通常显示为图像直方图上方的一个图形界面,用户可以通过拖动曲线上的点来调整像素的亮度分布。在OpenCV中实现曲线算法,主要涉及以下几个步骤:1.
Douglas-Peucker 算法:Douglas-Peucker 算法减少曲线中的点数。-matlab开发
% Ramer-Douglas-Peucker 算法 (RDP) 是一种减少% 曲线中由一系列近似的点数% 点。 该算法的初始形式是独立提出的% 于 1972 年由 Urs Ramer 和 1973


