1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
public static void main(String[] args) {
Image source = new Image(new File("droit.jpg"));
// 4 points qui definissent un carré/rectangle dans l'image
// (ici les 4 coins de la route)
Point P1 = new Point(10,71);
Point P2 = new Point(134,71);
Point P3 = new Point(71,24);
Point P4 = new Point(62,24);
// resolution du systeme
double[] system = getSystem(P1,P2,P3,P4);
System.out.println(Arrays.toString(system));
// creation de l'image corrigée (ici avec un ratio 1/8)
int W=100,H=800;
Image target = new Image(W,H);
// pour chaque pixel (x,y) de l'image corrigée
for(int y=0;y<H;y++) {
for(int x=0;x<W;x++) {
// conversion dans le repère orthonormé (u,v) [0,1]x[0,1]
double u = (double)x/W;
double v = (double)y/H;
// passage dans le repère perspective
double[] P = invert(u, v, system);
// copie du pixel (px,py) correspondant de l'image source
// TODO: faire une interpolation
int px=(int)Math.round(P[0]);
int py=(int)Math.round(P[1]);
target.setrgb(x, y, source.getrgb(px, py) );
}
}
} |
Partager