如何平滑宽阶梯图?

问题描述

我有2D数据,具有不同高度,不同间距的台阶。我想反转量化并重新创建原始表面的近似值。

Example of heavily stepped data,and desired smooth result

我不介意是否存在伪影并且形状变化,但是我确实希望在可能的情况下在整个表面上具有C1连续性,并且新的量化应该产生相同的步进数据(可能有点有损,但这是理想的选择) )

我尝试了三次插值和高斯模糊。它们要么在本地产生太大影响,要么破坏原始文档中的细节。

理想情况下,无论是1像素宽的步长还是100像素的步长,都应产生一条直线。而大小不同的后续步骤应产生一条平滑,连续的线。

实际上,我想将其用作8位浮点转换器,以消除像127 ... 128这样的单个强度阶跃上的条带。如果值的变化幅度大于小公差(1?),则应将其保持为尖锐边缘

一个想法是分离出具有相同值的岛,限制其边界高度并放松内部。这将删除这些步骤,但边界仍然是具有不连续渐变的折痕。

扩展固定边界的想法-我可以在值和梯度上放松-同时在图像上将一组边界点的值保持固定。

我想知道是否有更好的角度来解决这个问题,或者是否有任何好的先前工作。

***更新 我尝试了双边平滑,但发现它在平滑半径与步长相差很大的区域中留下了伪像。尽管“双边关系”作为与范围无关的平滑计算的后处理很有用。

我尝试了反向mipmap方法-无效。

当前的最佳尝试是多方向二次方高度估计-加权质量投票决定要在每个像素上使用的最佳方向。

解决方法

当前的最佳尝试是多方向二次方高度估计-加权质量投票决定要在每个像素上使用的最佳方向。

速度慢,但结果不够好。主要伪像是在非常陡峭的边缘锐化。可以在升级版本上运行,然后再次降级为抗锯齿。

Current step smooth

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...