Pregunta

Estoy seguro de que muchas personas ya han visto demostraciones del uso de algoritmos genéticos para generar una imagen que coincida con una imagen de muestra. Comienzas con ruido, y gradualmente se asemeja más a la imagen de destino, hasta que tengas un duplicado más o menos exacto.

Todos los ejemplos que he visto, sin embargo, utilizan una comparación de píxel por píxel bastante sencilla, lo que resulta en un "desvanecimiento" bastante predecible de la imagen final. Lo que busco es algo más novedoso: una medida de aptitud que se acerque más a lo que consideramos "similar" que el enfoque ingenuo.

No tengo un resultado específico en mente, solo estoy buscando algo más 'interesante' que el predeterminado. ¿Sugerencias?

¿Fue útil?

Solución

Supongo que estás hablando de algo como El programa de Roger Alsing .

Implementé una versión de esto, por lo que también me interesan las funciones de acondicionamiento físico alternativas, aunque lo estoy abordando desde la perspectiva de mejorar el rendimiento en lugar de la estética. Espero que siempre haya algún elemento de "fundido de entrada" debido a la naturaleza del proceso evolutivo (aunque ajustar los operadores evolutivos puede afectar la forma en que se ve).

Una comparación píxel por píxel puede ser costosa para cualquier cosa que no sean imágenes pequeñas. Por ejemplo, la imagen de 200x200 píxeles que uso tiene 40,000 píxeles. Con tres valores por píxel (R, G y B), son 120,000 valores que deben incorporarse en el cálculo de aptitud para una sola imagen. En mi implementación, reduzco la imagen antes de hacer la comparación para que haya menos píxeles. La compensación es una precisión ligeramente reducida de la imagen evolucionada.

Al investigar funciones de acondicionamiento físico alternativas, encontré algunas sugerencias para utilizar el espacio de color YUV de RGB ya que esto está más estrechamente alineado con la percepción humana.

Otra idea que tuve fue comparar solo una muestra de píxeles seleccionada al azar. No estoy seguro de qué tan bien funcionaría esto sin intentarlo. Dado que los píxeles comparados serían diferentes para cada evaluación, tendría el efecto de mantener la diversidad dentro de la población.

Más allá de eso, estás en los reinos de la visión por computadora. Espero que estas técnicas, que se basan en la extracción de características, sean más caras por imagen, pero pueden ser más rápidas en general si se requieren menos generaciones para lograr un resultado aceptable. Es posible que desee investigar la biblioteca PerceptualDiff . Además, esta página muestra algo de Java Código que se puede usar para comparar similitudes de imágenes en función de las características en lugar de los píxeles.

Otros consejos

  

Una medida de aptitud que se acerca más a lo que consideramos "similar" que el enfoque ingenuo.

La implementación de tal medida en el software definitivamente no es trivial. Google 'Modelo de visión humana', 'Métrica de error perceptivo' para algunos puntos de partida. Puede evitar el problema: solo presente las imágenes candidatas a un humano para seleccionar las mejores, aunque podría ser un poco aburrido para el humano.

No he visto una demostración de este tipo (quizás puedas vincular una). Pero un par de proto-ideas de su descripción que pueden desencadenar una interesante:

  • Tres algoritmos diferentes que se ejecutan en paralelo, quizás RGB o HSV.
  • Mueve, rota o cambia la imagen de destino ligeramente durante la ejecución.
  • Fitness basado en diferencias de contraste / valor entre píxeles, pero sin saber el color real.
  • ... luego " cebar " ¿Un solo píxel con el color correcto?

Estoy de acuerdo con otros colaboradores en que esto no es trivial. También agregaría que sería muy valioso comercialmente; por ejemplo, las empresas que desean proteger su IP visual estarán extremadamente felices de poder rastrear Internet buscando imágenes similares a sus logotipos.

Mi enfoque ingenuo para esto sería entrenar a un reconocedor de patrones en una serie de imágenes, cada una generada a partir de la imagen objetivo con una o más transformaciones aplicadas: por ejemplo. girado unos pocos grados de cualquier manera; una traducción de unos pocos píxeles de cualquier manera; diferentes escalas de la misma imagen; varios borrones y efectos (las máscaras de convolución son buenas aquí). También agregaría algo de ruido aleatorio a cada una de las imágenes. Cuantas más muestras, mejor.

La capacitación puede realizarse sin conexión, por lo que no debería causar problemas con el rendimiento en tiempo de ejecución.

Una vez que haya capacitado a un reconocedor de patrones, puede apuntar a las imágenes de la población de GA y obtener una puntuación escalar de los reconocedores.

Personalmente, me gusta Redes de base radial . Rápido para entrenar. Empezaría con demasiados aportes y los reduciría con el análisis de componentes principales (IIRC). Los resultados podrían ser simplemente una medida de similitud y una medida de disimilitud.

Una última cosa; sea ??cual sea el enfoque al que se dirija, podría publicar un blog, publicar la demo, lo que sea; déjanos saber cómo te fue.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top