2010-10-17 27 views
8

¿Alguien sabe que podemos traducir desde una imagen real capturada usando cámaras para convertirla al espacio de dibujos animados?dibujos animados de imágenes reales

Tenga en cuenta que mi objetivo no es crear animaciones o los gustos, sino simplemente traducir a "colores de dibujos animados" si es posible.

requantización simple a un espacio donde funcionan menos niveles de cuantificación O algunas otras transformaciones específicas son mejores?

cualquier ayuda será útil, ya que no pude encontrar ningún material sobre esto.

Thnx por adelantado.

Respuesta

4

Lo que estás tratando de hacer es más comúnmente hecho desde modelos 3D y se llama cel-shading, o "toon-shading". Básicamente, intenta forzar colores uniformes y forzar transiciones abruptas en ciertos ángulos con respecto a la fuente de luz.

Obviamente, esto no se traduce bien en imágenes de entrada 2D. Lo que puede hacer es, pero debe asegurarse de rellenar uniformemente las regiones y romper donde el gradiente de la imagen es alto.

Non-linear diffusion es una técnica de eliminación de ruido que obliga a las regiones a uniformarse para eliminar el ruido. Si deja que se repita demasiadas iteraciones, obtendrá una imagen de aspecto caricatura.

Lo he implementado hace unos 2-3 años y funcionó sorprendentemente bien, teniendo en cuenta que no fue tan difícil de implementar. Sin embargo, va a querer una implementación de GPGPU porque es lento!

+0

¿Hay alguna forma de conseguir el mismo en un teléfono inteligente? Sé que la restitución será decentemente rápida, digamos O (n * m) si la imagen es n-by-m. en el peor de los casos, n y m son del orden de 2000. – Egon

+0

La restitución no le dará resultados de la misma calidad. Si está dispuesto a cambiar la calidad por la velocidad, ¡esa es su dicisión! Honestamente, debe implementar más de un método, analizar las compensaciones y * luego * implementarlo en un teléfono inteligente. Eche un vistazo a MATLAB, Scilab u Octave para prototipos si es necesario. –

+0

é La difusión no lineal exige una gran cantidad de potencia de procesamiento. – karlphillip

2

También puede ver la segmentación de cambio promedio. Una aplicación está disponible aquí: EDISON

2

tiro 'en la oscuridad:

  1. convertir al espacio de color HSV (cvtColor usando CV_BGR2HSV)
  2. Dejar H (ue) solo, o cuantizar abajo a algunos más pequeños set si desea
  3. umbral binario S (aturation) con un umbral bajo para que los pasteles empujan a blanco
  4. binario umbral V (alor) con un umbral bajo para que la materia oscura se vuelve negro

Absolutamente no probado. Probablemente hablando fuera de mi sombrero ... Pero debería ser bastante bajo el uso de la CPU si funcionara. Esto me parece el tipo de cosa para encender con controles deslizantes para los valores necesarios en los pasos 2 a 4 y simplemente jugar con él.

EDITAR: Un amigo señaló que también podría querer líneas alrededor de los objetos. Lo primero que pensé fue usar cvCanny para seleccionar los bordes (se requiere una imagen en escala de grises ... No estoy seguro de si sería mejor hacer esto antes o después de la caricatura HSV. Probablemente antes). Esos serán de un solo píxel de ancho, lo que puede no ser suficiente, por lo que es posible que desee dilate un poco para ampliarlos. Estarán blancos sobre un fondo negro, por lo que puede restarlos de su imagen de color de dibujos animados, que extraerá los píxeles donde las líneas están abajo a 0 (aritmética de saturación para el rescate) pero deje los otros píxeles solo.

2

Su término "espacio de la historieta" me hizo pensar que tal vez debería empezar a partir de esa idea:

  1. Crear un espacio de color dibujos animados que te gusta con quizás 20-30 agradables colores brillantes que cubren la mayor parte del RGB regulares espacio, pero tiene un tema brillante/brillante (o cualquier tema de color caricaturesco que desee).
  2. Oblite su imagen, no a un subconjunto de los colores disponibles en la imagen, sino a los colores en su espacio de color de dibujos animados (es decir, haga coincidir cada color con el color más cercano en el espacio de color de dibujos animados).
  3. Puntos de bonificación: elimine las pequeñas regiones de color para obtener un aspecto de un solo color más uniforme.
  4. Más puntos de bonificación: agregue contornos negros a cada región de un solo color para obtener dibujos animados adicionales. Quizás varíe el grosor de línea con el degradado en la imagen original.
  5. Ajustes opcionales: Convierta todos sus colores en HSV colourspace, realice el paso 2 solo en el canal Hue para obtener inmunidad a las sombras adicionales.
4

Cambio de media de la pirámide + contorno de los bordes detectados parece que hace el trabajo.

El código:

cv::Mat segmented, gray, edges; 
cv::pyrMeanShiftFiltering(input, segmented, 15, 40); 
cv::cvtColor(segmented, gray); 
cv::Canny(gray, edges, 150, 150); 
cv::cvtColor(edges, edgesBgr, CV_GRAY2BGR); 
cv::Mat result = bgr - edgesBgr; 

Aquí es un resultado que obtuve: Church after cartoon filter

Detalles: OpenCV Tutorial Part 6

+0

¡Agradable, muy agradable! – Royi

Cuestiones relacionadas