【问题标题】:How to make the smoothing effect look more natural如何让平滑效果看起来更自然
【发布时间】:2021-04-15 18:22:21
【问题描述】:

我用 C# 编写了一个程序,它以程序方式生成地图。

生成地图后,我需要以某种方式平滑边缘,但是当我通过软件执行此操作时,输出看起来并不自然。

这是原图:

这是原始的软件平滑地图:

这是我手动平滑的地图。

我想创建一个算法,以更自然的方式平滑地图的边缘,其预期结果类似于我上面所做的手动平滑。

【问题讨论】:

  • 我现在没有时间花很多时间来回答这个问题,但我的第一个想法是尝试抗锯齿。如果您想要更平滑的外观,您可以沿着岛屿的边缘运行贝塞尔曲线。我可能有时间在今天晚些时候或明天尝试这个。希望这可以帮助您进行潜在有用的研究。
  • 您需要放大原始地图。如果你真的很聪明,你可以实现一个平滑升级器。而不是多次通过。

标签: c# image-processing procedural cellular-automata


【解决方案1】:

如果我正确解释了您的数字,原始地图是 64x64 二进制值图像,而软件平滑地图是 256x256,并且平滑地图似乎是通过 4 倍放大和/或平滑然后阈值处理生成的.

要获得更平滑的边缘,您需要在阈值处理之前进行更强的平滑处理。也就是抗锯齿,正如 Ian Chu 在 cmets 中暗示的那样。

这是一个简单的方法:

  1. 生成 64x64 地图。

  2. 按最近邻将地图放大 4 倍至 256x256,即在每个维度上复制每个像素 4 次。

  3. 应用高斯平滑滤波器。高斯的标准偏差或 sigma 参数决定了平滑强度。 4 像素的 sigma 似乎是正确的。

  4. 对过滤后的图像设置阈值以获得二进制值结果。

这是我在您提供的示例地图上得到的:

要实现高斯滤波步骤,您可以在this SO post useful 中找到提示。

或者,如果您更愿意自己实现过滤,获得类似于高斯平滑的简单方法是沿每个维度重复应用 5 抽头平滑过滤器 [0.2, 0.2, 0.2, 0.2, 0.2]。应用过滤器,然后获取生成的图像并再次对其应用过滤器,依此类推。重复过滤器应用 5 次或更多次以获得更强的平滑度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2013-03-14
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多