减少曲线上的象素数目的算法?

iamredeye iamredeye 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
大概是这样的:我有一条连续的闭合曲线,每个点是一个象素,这条曲线上一共有大概几百到几千个点,我需要最多保留其中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肯定是可以做到的,但是缺乏理论根据。而且坦率讲,我希望能在数学上稍微复杂一点:)
...全文

相关推荐

评论 21
收藏 已收藏
分享
返回顶部
iamredeye
机器视觉 4,514 成员 15,347 内容