Bonjour,

Envoyé par
black_hole
... Je ne sais pas comment pondérer la valeur en coordonnée polaire vers la grille en cordoonée XY. Par exemple si pour la coordonnée polaire p = (r,theta) j'obtiens un point pg = (10.66,1.88) quel est la pondération que je dois appliquer au 4 pixels au alentour?
En notant P00, P10, P01 et P11 les pixels de
coordonnées respectives (10, 1), (11, 1), (10, 2) et (11, 2),
le pixel "moyen" résultera de la combinaison linéaire:
Pm = (1-0.66)*(1-0.88).P00 + 0.66*(1-0.88).P10 + (1-0.66)*0.88.P10 + 0.66*0.88.P11 .
Si l'on veut rationaliser cela,il faut décomposer toute coordonnée réelle en deux parties entière et décimale:
x = Ex + Dx , avec Ex = Trunc(x) , Dc = Frac(x);
y = Ey + Dy, avec Ey = Trunc(y) , Dc = Frac(y);
chaque composante couleur (j = 1, 2 ou 3) du pixel moyen pourra ainsi s'exprimer en fonction des 4 pixels concernés:
P00 = P(Ex, Ey) , P10 = P(Ex+1, Ey) , P01 = P(Ex, Ey+1) et P11 = P(Ex+1, Ey+1)
(et en tenant compte de la nécessité de revenir à un résultat entier) par la combinaison linéaire:
P(x, y)[j] = Round((1-Dx)(1-Dy)*P00[i] + Dx(1-Dy)*P10[j] + (1-Dx)Dy*P01[j] + Dx*Dy*P11[j]) .
La formule d'interpolation peut se réduire à des sommes de deux termes, mais elle comporte alors deux stades impliquant des vecteurs de R3; il suffit d'écrire dans ce cas:
Wx0[j] = (1-Dx)*P00[i] + Dx*P10[j] ,
Wx1[j] = (1-Dx)*P01[j] + Dx*P11[j] ,
P(x, y)[j] = Round((1-Dy)*Wx0[j] + Dy*Wx1[j]) .
Formules à vérifier.
Partager