【问题标题】:Smoothen edges of a non-binary image平滑非二值图像的边缘
【发布时间】:2018-08-21 09:06:27
【问题描述】:

我正在使用PIL (Python Imaging Library) 在python 中制作一些照片编辑工具,并且我正在尝试制作一个将照片转换为其“绘画”版本的程序。

我已经设法制作了一个程序,可以将照片转换成不同的颜色,但问题是我使用的算法是在每个像素上运行,这意味着生成的图像在颜色之间有非常锯齿状的差异。

理想情况下,我想平滑这些边缘,但我不知道如何!

我已查看 this site 寻求帮助,但那里的方法产生的结果与我需要的完全不同。

我的起始图像:

我的图像具有不同的颜色:

我想平滑上图中的边缘。

使用不太奏效的方法的结果:

如您所见,使用该技术并不能将边缘平滑成看起来自然的曲线;相反,它会创建锯齿状边缘。

我知道我应该提供示例输出,但令人惊讶的是,我实际上并没有得到它,所以我会尽可能地描述它。简单地说,我想平滑不同颜色之间的边缘。

我见过一种叫做高斯模糊的东西,但我不太确定如何在这里应用它,因为我看到的答案总是提到某种阈值,通常与二值图像有关,所以我认为它不适用于这里。

【问题讨论】:

  • 我会说你的第一步是错误的。您应该对原始图片应用强大的非线性、边缘保持平滑。这将简化图像,减少您看到的颜色数量,但不会引入像这些不自然的边缘和颜色。在this answer 我展示了一个这样的过滤器。

标签: python algorithm image-processing python-imaging-library edges


【解决方案1】:

边缘增强与边缘平滑相反,所以这当然不是你应该使用的工具。

不幸的是,您无能为力,因为边缘平滑确实会平滑锯齿,但也会破坏真实边缘,从而导致图像模糊。保边平滑也是死路一条。

您应该了解提取图像“卡通部分”的方法。有很多关于这个主题的文献,虽然通常非常复杂。

【讨论】:

  • 关于第一部分,这对我来说有点愚蠢:) 但是第二部分,你说它会破坏真正的边缘,所以它不合适;您能否使用您所指的任何算法发布我的图像的边缘平滑版本,然后我可以查看它是否符合我的需求?
  • @Adi219:应用高斯模糊并查看。你会失望的。
【解决方案2】:

您可以通过应用半径为 2 的中值过滤器来提高“具有不同颜色的图像”的质量:

如果你想获得“漫画般”的暗边,可以使用sobel滤波器计算原始图像的边缘,将边缘图转换为灰度图,然后将得到的边缘图乘以2,将图反转并将边缘图的每个非白色像素添加到原始图像。这将导致:

这当然只是一个起点,因为结果还有很多不足之处,但它应该让您对基本概念有一个很好的了解。

【讨论】:

    猜你喜欢
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 2019-11-12
    • 2019-04-30
    • 1970-01-01
    • 2014-01-06
    相关资源
    最近更新 更多