Addition des images

L'addition des images se fait en différenciant deux cas: la première image qui sert de base et les autres qui sont additionnées à la première.

La première

Le principe est de créer trois tableaux en mémoire : R G et B. Ils représentent les valeurs des pixels pour chaque couleur, et ont une précision de 16 bits.

Les pixels de l'image sont alors recopiés dans ces trois tableaux.

Pourquoi faire comme ca ? Je ne sais pas !!! On aurait pu directement travailler dans un buffer image classique. Le seul réel avantage est de clarifier le code.

Les autres

La première étape est de charger l'image B à additionner en mémoire.

Ensuite nous parcourons chaque pixel de cette image.

Pour chaque pixel nous appliquons la fonction affine pour trouver la position du pixel dans l'image A.

Après vérification que le point est bien dans l'image A, nous allons ventiler le pixel sur les quatre points juxtaposés. En effet, le calcul de la nouvelle position se fait en nombre réel. Nous allons distribuer la valeur du pixel sur les quatre pixel (en nombre entier) qui entoure le point.

Par exemple, un point dont l'intensité dans le rouge est 300 doit être positionné aux coordonnes réelles (12.6, 4512.78). Nous allons distribuer les 300 sur les pixels suivant:

12 13
4512 54 40
4513 66 140

Dans le code suivant, j'ai laissé que le calcul du Rouge mais il faut le faire également sur le vert et le bleu.

xp et xi sont les coordonnées du points en nombre réel (float) xi et yi sont les coordonnées du points arrondis à l'entier inférieur.

coefx et coefy donne le pourcentage (la partie après la virgule). Si on multiplie ces deux chiffres on obtient le poids du pixel (+1,+1) par rapport à (xi,yi)

 
 // On ventile sur les quatres entiers
	    count = yi*im.width+ xi;
 
	    coefx=1-(xp-xi);
	    coefy=1-(yp-yi);
 
	    R[count]+=(int)(Rv*coefx*coefy);
 
	    count = yi*im.width+ xi+1;
	    R[count]+=(int)(Rv*(1-coefx)*coefy);
 
	    count = (yi+1)*im.width+ xi;
	    R[count]+=(int)(Rv*coefx*(1-coefy));
 
	    count = (yi+1)*im.width+ xi+1;
	    R[count]+=(int)(Rv*(1-coefx)*(1-coefy));

La fin

Une fois l'ensemble des images additionnées, nous pouvons multiplier l'ensemble des points par un coefficient pour effectuer une première balance des blancs.

En effet, pour mon 350D, je dois multiplier les rouges par 2.5, les verts par 1.25 et les bleus par 2 pour avoir une balance correcte. Ce calcul ne coute pas bien chère alors pourquoi ne pas le faire …

 
apa/theorie/nouvelle_image.txt · Dernière modification: 2007/08/27 17:49 par davidl
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki