Question

Algorithme pour un robot de dessin et de peinture -

Bonjour

Je veux écrire un logiciel qui analyse une image, puis produit une image qui capture ce qu'un œil humain perçoit dans l'image originale, en utilisant un minimum d'objets de chemin de Bézier de couleur et d'opacité variables.

Contrairement au récent concours de super compression sur Twitter (voir:stackoverflow.com/questions/891643/twitter-image-encoding-challenge), mon objectif n'est pas de créer une réplique fidèle à l'image, mais plutôt de reproduire l'expérience humaine du regard de l'image.

A titre d'exemple, si l'image originale montre un ballon rouge dans le coin supérieur gauche et que la reproduction a quelque chose qui ressemble à un ballon rouge dans le coin supérieur gauche, alors j'aurai atteint mon objectif, même si le ballon dans la reproduction est pas tout à fait dans la même position et pas tout à fait de la même taille ou couleur.

Quand je dis « tel que perçu par un humain », j'entends cela dans un sens très limité.je n'essaie pas d'analyser la signification d'une image, je n'ai pas besoin de savoir de quoi il s'agit, je m'intéresse uniquement aux caractéristiques visuelles clés qu'un œil humain remarquerait, dans la mesure où cela peut être automatisé par un algorithme qui n’a pas la capacité de conceptualiser ce qu’il observe réellement.

Pourquoi ce critère inhabituel de perception humaine plutôt que la précision photographique ?

Ce logiciel serait utilisé pour piloter un robot de dessin et de peinture, qui collaborerait avec un artiste humain (voir:video.google.com/videosearch?q=mr%20squiggle).

Plutôt que de traiter les marques faites par l'humain qui ne sont pas photographiquement parfaites comme étant nécessairement des erreurs, l'algorithme devrait chercher à incorporer ce qui est déjà sur la toile dans l'image finale.

Ainsi, la luminosité relative, la teinte, la saturation, la taille et la position sont bien plus importantes que le fait d'être photographiquement identique à l'original.Le maintien de la topologie des éléments, du bloc de couleur, des dégradés, des courbes convexes et concaves sera plus important que la taille exacte, la forme et la couleur de ces éléments.

Encore avec moi?

Mon problème c'est que je souffre un peu du syndrome "quand on a un marteau tout ressemble à un clou".Pour moi, il semble que la façon de procéder consiste à utiliser un algorithme génétique avec quelque chose comme la comparaison des transformations en ondelettes. (voir: grail.cs.washington.edu/projects/query/) utilisé par le récupérateur (voir: labs.systemone.at/retrievr/) pour sélectionner des solutions adaptées.

Mais la principale raison pour laquelle je vois cela comme la réponse, c'est que ce sont les techniques que je connais, il existe probablement des solutions beaucoup plus élégantes utilisant des techniques dont je ne connais rien pour le moment.

Il serait particulièrement intéressant de prendre en compte la manière dont le système de vision humaine analyse une image. Il faudra donc peut-être accorder une attention particulière aux lignes droites et aux angles, aux bordures à contraste élevé et aux grands blocs de couleurs similaires.

Avez-vous des suggestions de choses que je devrais lire sur la vision, les algorithmes d'image, les algorithmes génétiques ou des projets similaires ?

Merci

Tapis

PS.Certaines orthographes ci-dessus peuvent sembler incorrectes à vous et à votre correcteur orthographique.Il s'agit simplement de variations orthographiques internationales qui peuvent différer de la norme dans votre pays :par exemple.Norme australienne :couleur par rapport à la norme américaine :couleur

Était-ce utile?

La solution

Il existe un modèle qui peut être implémenté sous forme d'algorithme pour calculer une carte de saillance pour une image, déterminant quelles parties de l'image attireraient le plus l'attention d'un humain.

Le modèle s'appelle le modèle itti koch
Vous pouvez trouver un document de départ ici
Et plus de ressources et de code source C++ ici

Autres conseils

Je ne peux pas répondre directement à votre question, mais vous devriez vraiment jeter un œil à l'artiste/programmeur (Lisp) Harold Cohenla machine à peindre Aaron.

C'est une tâche assez importante.Vous pourriez être intéressé par la vectorisation d'images (je ne sais pas comment elle s'appelle officiellement), qui est utilisée pour prendre des images pixellisées (telles que des photos que vous prenez avec un appareil photo) et génère un ensemble de lignes de Bézier (je pense) qui se rapprochent de la l'image que vous avez insérée.Puisque les bons algorithmes produisent souvent une très haute qualité (lire :complexes), vous seriez également intéressé par les algorithmes de simplification qui peuvent énormément aider.

Malheureusement, je ne suis pas à côté de ma bibliothèque, ou je pourrais vous recommander un certain nombre de livres sur la psychologie perceptuelle.

La première chose à considérer est que la physiologie de l’œil humain est telle que lorsque nous examinons une image ou une scène, nous ne capturons que de très petits morceaux à la fois, car nos yeux se déplacent rapidement.Notre esprit rassemble les différentes parties pour essayer de former un tout.

Vous pourriez commencer par trouver un algorithme pour déterminer la trajectoire d’un globe oculaire lorsqu’il se déplace.Peut-être est-il attiré par le contraste ?

Ensuite, nos yeux ajustent « l’exposition » en fonction du contexte.C'est comme ces images à plage dynamique élevée, si elles étaient assemblées non pas par de multiples expositions d'une scène entière, mais par de nombreuses petites images, chacune équilibrée par elle-même, mais mélangées à son environnement pour former une plage dynamique élevée.

On a découvert dans le cerveau d'un singe qu'il existe un seul neurone qui s'allume s'il y a une ligne diagonale dans le coin supérieur gauche de son champ de vision.Des neurones similaires peuvent être trouvés pour les lignes verticales et les lignes horizontales dans diverses zones du champ de vision de ce singe.La « diagonale » détermine la fréquence à laquelle ce neurone se déclenche.

on pourrait spéculer que d’autres neurones pourraient être trouvés et mappés à d’autres qualités telles que la rougeur ou la texture, etc.

Il y a quelque chose que les humains peuvent faire que je n'ai jamais vu un programme informatique capable de faire.c'est quelque chose appelé « fermeture », où un humain est capable de remplir des informations sur quelque chose qu'il voit, qui n'existe pas réellement dans l'image.un exemple:

          *






*                    *

c'est un triangle ?Si vous saviez que c’était le cas à l’avance, vous pourriez probablement créer un programme pour relier les points.Mais et si ce n’était que des points ?Comment peux-tu savoir?Je n'essaierais pas celui-ci à moins d'avoir un moyen vraiment intelligent de gérer celui-là.

Il existe de nombreux autres faits sur la perception humaine que vous pourriez utiliser.Bonne chance, vous n'avez pas choisi une tâche simple.

je pense qu'une chose qui pourrait vous aider dans cette énorme tâche est l'implication humaine.je veux dire les données.comme si vous pouviez avoir de nombreuses personnes assises regardant des points aléatoires (comme dans le post précédent) et les connecter comme elles le voient correctement.vous pourriez exploiter ces données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top