Python 平滑非二值图像的边缘

Python 平滑非二值图像的边缘,python,algorithm,image-processing,python-imaging-library,edges,Python,Algorithm,Image Processing,Python Imaging Library,Edges,我正在使用PIL(python图像库)在python中制作一些照片编辑工具,并试图制作一个程序,将照片转换为“绘制”版本 我已经成功地制作了一个程序,将照片转换成不同的颜色,但问题是我使用的算法对每个像素都进行操作,这意味着生成的图像在颜色之间有非常参差不齐的差异 理想情况下,我想平滑这些边缘,但我不知道如何 我已经检查了一些帮助,但是那里的方法产生了与我需要的完全不同的结果 我的起始图像: 我的图像具有鲜明的色彩: 我想平滑上面图像中的边缘 使用不太有效的方法的结果: 正如您所看到的,使

我正在使用
PIL
python图像库
)在
python
中制作一些照片编辑工具,并试图制作一个程序,将照片转换为“绘制”版本

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

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

我已经检查了一些帮助,但是那里的方法产生了与我需要的完全不同的结果

我的起始图像:

我的图像具有鲜明的色彩:

我想平滑上面图像中的边缘

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

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

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


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

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

不幸的是,您所能做的很少,因为边缘平滑确实会平滑锯齿,但它也会破坏真实的边缘,导致图像模糊。边缘保持平滑也是一个死胡同


您应该看看提取图像“卡通部分”的方法。关于这一主题的文献很多,但往往非常复杂。

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

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


这当然只是一个起点,因为结果还有很多需要改进的地方,但它应该会让你对基本概念有一个很好的了解。

关于第一部分,我觉得有点愚蠢:)但是第二部分,你说它会破坏真实的边缘,所以它不合适;你能用你所指的任何一种算法发布我的图像的边缘平滑版本吗,然后我就能看到它是否符合我的需要了?@Adi219:应用高斯模糊,然后看。你会失望的。我会说你的第一步错了。您应该对原始图片应用强非线性、保留边缘的平滑处理。这将简化图像,减少您看到的颜色数量,但不会引入像这样不自然的边缘和颜色。在本文中,我展示了一个这样的过滤器。