平滑非二进制图像的边缘

Smoothen edges of a non-binary image

我正在使用 PIL (Python Imaging Library) 在 python 中制作一些照片编辑工具,并且我试图制作一个程序将照片转换为 'painted'版本。

我已经设法制作了一个程序,可以将照片转换成不同的颜色,但问题是我使用的算法是对每个像素进行操作,这意味着生成的图像在颜色之间存在非常参差不齐的差异.

理想情况下,我想平滑这些边缘,但我不知道该怎么做!

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

我的起始图片:

我的色彩鲜明的形象:

我想平滑上图中的边缘。

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

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

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

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

边缘增强与边缘平滑相反,因此这当然不是您应该使用的工具。

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

您应该看看提取图像 "cartoon part" 的方法。有很多关于这个主题的文献,但通常非常复杂。

您可以通过应用半径为 2 的中值过滤器来提高 "Image with Distinct Colours" 的质量:

如果想得到"comic-like"暗边缘,可以用sobel滤波器计算原图的边缘,将边缘图转为灰度图,然后将得到的边缘图乘以2,取反映射并将边缘图的每个非白色像素添加到原始图像。这将导致:

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