平滑非二进制图像的边缘

时间:2018-08-21 09:06:28

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

我正在使用pythonPIL)在Python Imaging Library中制作一些照片编辑工具,而我正试图制作一个程序,将照片转换为“绘画”版本

我设法制作了一个程序,可以将照片转换为不同的颜色,但是问题是我使用的算法在每个像素上都起作用,这意味着所得图像在颜色之间存在非常参差不齐的差异。 / p>

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

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

我的起始图片: Starting Image

我的图像具有不同的颜色: Image with Distinct Colours

我想使上图中的边缘平滑。

使用不太有效的方法的结果: Results of using he method which doesn't quite work

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

我知道我应该提供示例输出,但是令人惊讶的是,我实际上没有得到它,因此我将尽其所能描述它。简而言之,我想使不同颜色之间的边缘平滑。

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

2 个答案:

答案 0 :(得分:1)

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

不幸的是,您几乎无能为力,因为边缘平滑确实可以使锯齿平滑,但也会破坏真实的边缘,从而导致图像模糊。保留边缘的平滑也是死胡同。

您应该看一下提取图像“卡通部分”的方法。关于该主题的文献很多,尽管通常都很复杂。

答案 1 :(得分:0)

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

如果要获得“类似漫画”的暗边缘,则可以使用sobel滤镜计算原始图像的边缘,将边缘图转换为灰度,然后将所得的边缘图乘以2,然后将图求逆,将边缘图的每个非白色像素添加到原始图像。这将导致:

Image after median filter with added edge pixels

这当然只是一个起点,因为结果有很多不足之处,但是应该可以使您对基本概念有所了解。