使用PHP创建图像的“卡通”轮廓

时间:2012-01-15 20:01:21

标签: php image-processing

使用此图片作为参考:

enter image description here

如何使用PHP并给出原始图像,输出大纲版本,如下所示?我可能会使用GD。

我能满足自己要求的最佳形象是下面的Christopher Walken。第1列,第3列。

2 个答案:

答案 0 :(得分:1)

Blender的评论很重要:根据您想要的“卡通”图像的类型,需要不同类型的处理。自动确定需要什么类型的图像处理可能是不可行的。

通过实施3种或4种不同的图像处理技术,在每张图像上运行所有技术,然后允许用户选择看起来最佳的处理图像,您可以省去很多麻烦。

一些处理技术包括以下内容:

  1. Sobel边缘发现者。简单的概念,易于实现。 (参见下面的“卷积”)
  2. 灰度图像的二值化。将图像转换为灰度(8位黑白),找到阈值,然后转换图像,使高于阈值的所有像素都是白色,低于阈值的所有像素都是黑色。
  3. 二进制化转换为黑色&白色,然后区域标记以找到图像中的最大对象,然后填充填充以填充该最大对象中的任何“洞”。
  4. 如果您的图像看起来与Christopher Walken样本最相似,那么某种形式的二值化应该可行。要修补此问题,请使用Photoshop或GIMP中的“Posterize”过滤器。二值化是海报化的一个极端情况,所有颜色(或“灰度”图像,所有亮度)都压缩到两个:纯黑色和纯白色。自动选择正确的阈值可能会非常棘手,因此可以为用户提供调整阈值的方法。

    你可能会发现简单的二值化不会像你想的那样工作,但我建议先让代码工作,找出它的弱点,然后再进一步修补。

    要了解有关阈值处理,二值化,区域标记等的更多信息,请查看最常用的图像处理教科书之一:

    Gonzalez and Woods(第3版)

    数字图像处理

    http://www.amazon.com/Digital-Image-Processing-Rafael-Gonzalez/dp/013168728X

    (零售价格很高。请查看addall.com以寻找更便宜的国际版本,价格可低至35美元。)

    只要您可以访问单个像素,编写单个像素,使用矩阵等,就可以实现图像处理。在GD中,您需要查看内置函数来执行卷积:

    http://www.php.net/manual/en/function.imageconvolution.php

    要使用Sobel查找垂直线,3x3内核将如下所示:

    |-1  0  1|
    |-2  0  2|
    |-1  0  1|
    

    将内核旋转90度,你有一个内核来查找水平线。您可以在维基百科上阅读有关Sobel内核的更多信息:

    http://en.wikipedia.org/wiki/Sobel_operator

答案 1 :(得分:1)

Jaguar图书馆支持超过30种边缘检测类型,包括 Sobel

您可以轻松地查看Edge Detection