Je voudrais implémenter le morphing d'image, pour lequel j'ai besoin de pouvoir déformer l'image avec un ensemble donné de points et leurs positions de destination (où ils seront "traînés"). Je suis à la recherche d'une solution simple et facile qui fait le travail, il ne doit pas être beau ou être extrêmement rapide.Qu'est-ce qu'un moyen simple de déformer une image avec un ensemble donné de points?
Voici un exemple ce que je dois:
Disons que j'ai une image et un ensemble d'un seul point de déformante [0.5,0.5] qui aura sa destination à [0.6,0.5] (ou nous pouvons disons que son vecteur de mouvement est [0.1,0.0]). Cela signifie que je veux déplacer le pixel très central de l'image de 0,1 vers la droite. Les pixels voisins d'un rayon donné r doivent bien sûr être "traînés" un peu avec ce pixel.
Mon idée était de le faire comme ceci:
- Je vais faire une fonction cartographie des positions d'image source à des postes de destination en fonction de l'ensemble de points de déformation prévu.
- Je devrai alors trouver la fonction inverse de cette fonction, car je dois effectuer la transformation en passant par les pixels de destination et en voyant "d'où le point devait venir pour arriver à cette position".
Ma fonction de l'étape 1 ressemblait à ceci:
p2 = p1 + (1/((distance(p1,p0)/r)^2 + 1)) * s
où
- p0 (vecteur [x, y]) est la position du point de déformation.
- p1 (vecteur [x, y]) est un point donné dans l'image source.
- p2 (vecteur [x, y]) est la position où p1 sera déplacée. (Vecteur [x, y]) est un vecteur de mouvement du point de déformation et indique dans quelle direction et dans quelle mesure p0 sera traîné.
- r (scalaire) est le rayon, juste un nombre.
J'ai problème avec le numéro de l'étape 2. Le calcul de la fonction inverse semble un peu trop complexe pour moi et je me demande donc:
- S'il y a une solution facile pour trouver la fonction inverse, ou
- s'il y a une meilleure fonction pour laquelle trouver la fonction inverse est simple, ou
- s'il y a une manière entièrement différente de faire tout cela qui est simple?