Precisa fazer uma versão em quadrinhos de desenho animado de uma imagem com Python e OpenCV

Estou tentando criar uma função que faça com que qualquer imagem pareça uma história em quadrinhos de cartooney. Aqui esta o meu codigo ate agora:

import numpy
import cv2

__author__ = "Michael Beyeler"
__license__ = "GNU GPL 3.0 or later"

class Cartoonizer:

    def __init__(self):
        self.numDownSamples = 1
        self.numBilateralFilters = 7

    def render(self, img_rgb):

        # downsample image using Gaussian pyramid
        img_color = img_rgb
        for _ in range(self.numDownSamples):
            img_color = cv2.pyrDown(img_color)
        # repeatedly apply small bilateral filter instead of applying
        # one large filter
        for _ in range(self.numBilateralFilters):
            img_color = cv2.bilateralFilter(img_color, 9, 9, 7)
        # upsample image to original size
        for _ in range(self.numDownSamples):
            img_color = cv2.pyrUp(img_color)
        # convert to grayscale and apply bilateral blur
        img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2GRAY)
        for _ in range(self.numBilateralFilters):
            img_gray_blur = cv2.bilateralFilter(img_gray, 9, 9, 7)
        # detect and enhance edges
        img_edge = cv2.adaptiveThreshold(img_gray_blur, 255,
                                         cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                                         cv2.THRESH_BINARY, 9, 5)
        # convert back to color so that it can be bit-ANDed with color image
        img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2RGB)
        #Ensure that img_color and img_edge are the same size, otherwise bitwise_and will not work
        height = min(len(img_color), len(img_edge))
        width = min(len(img_color[0]), len(img_edge[0]))
        img_color = img_color[0:height, 0:width]
        img_edge = img_edge[0:height, 0:width]
        return cv2.bitwise_and(img_color, img_edge)

Eu tirei daqui, licença preservada e modifiquei levemente:http://www.askaswiss.com/2016/01/how-to-create-cartoon-effect-opencv-python.html

O que eu tenho originalmente é o seguinte:

Aqui está o que meu script gera:

E aqui está o que eu preciso:

O que eu notei até agora é:

Meu código para desfocar a imagem tem muitas cores, preciso de uma transição menos suave das cores claras para as escuras.A imagem de destino possui bordas suaves, que são linhas, quando meu código cria muito ruído (pontos pretos "solitários") e divide as linhas. Tentei alterar alguns parâmetros, adicionei alguns filtros aleatórios, mas não tenho idéia do que fazer a seguir.

Qualquer ajuda é muito apreciada.

questionAnswers(1)

yourAnswerToTheQuestion