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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
| CONST Npas = 360;
TYPE LstR = ARRAY[-Npas..Npas] OF Reel;
VAR Liste: LstR;
PROCEDURE Aff_Min(J1, J2: Z_32);
CONST C1 = 4; C2 = C1 + 26; C3 = C1 + 32; C4 = C1 + 43;
L1 = 54; v = 3; w = 803;
VAR Kt, T1, T2: Reel;
BEGIN
Kt:= 90 / Npas; T1:= Kt * J1; T2:= Kt * J2;
E(0015); Wt(C1, L1, 'Inclinaison des droites:');
Wt(C2, L1 - 1, 'J1 = T1 = ');
Wt(C2, L1 + 1, 'J2 = T2 = ');
E(0012); We(C3, L1 - 1, J1, v); We(C3, L1 + 1, J2, v);
E(0010); Wr(C4, L1 - 1, T1, w); Wr(C4, L1 + 1, T2, w)
END;
PROCEDURE Trace_Minima(Ha, Xm: Z_32; Lim: Reel; Li: LstR;
VAR J_1, J_2: Z_32; VAR Ma2: Tab_Pix);
CONST P100: Pixel = (255, 0, 0);
VAR j, J1, J2: Z_32; s, Sa, Sb: Reel;
BEGIN
J1:= 2 * Npas; J2:= 2 * Npas;
FOR j:= (1 - Npas) TO (Npas - 1) DO
BEGIN
s:= Li[j];
IF (s<Lim) THEN BEGIN
Sa:= Li[j - 1]; Sb:= Li[j + 1];
IF ((Sa>s) AND (s<Sb)) THEN
IF (J1>Npas) THEN J1:= j
ELSE J2:= j
END
END;
FOR j:= 0 TO (Ha DIV 2) DO BEGIN
Ma2[Xm + J1, j]:= P100;
Ma2[Xm + J2, j]:= P100
END;
J_1:= J1; J_2:= J2
END;
PROCEDURE Fond_Graphique(La, Ha, X_1, X_2, X_m, Y_1, Y_2: Z_32;
VAR Ma2: Tab_Pix);
CONST m = 255;
P000: Pixel = (0, 0, 0);
P010: Pixel = (0, m, 0);
P101: Pixel = (180, 000, 180);
P111: Pixel = (m, m, m);
VAR x, y: Z_32; TestX, TestY: Bool; Px: Pixel;
BEGIN
FOR x:= 0 TO (La - 1) DO
FOR y:= 0 TO (Ha - 1) DO
BEGIN
TestX:= ((x<X_1) OR (x>X_2));
TestY:= ((y<Y_1) OR (y>Y_2));
IF (TestX OR TestY) THEN Px:= P101 ELSE Px:= P000;
Ma2[x, y]:= Px
END;
FOR y:= 0 TO (Ha - 1) DO BEGIN
Ma2[X_1, y]:= P111; Ma2[X_2, y]:= P111;
Ma2[X_m, y]:= P111
END;
END;
PROCEDURE Calc_Mat_Im2(La, Ha: Z_32; Li: LstR; VAR Ma2: Tab_Pix);
CONST P010: Pixel = (0, 255, 0);
VAR h, Hmax, i, I1, I2, x, X1, X2, Xmed, y, Y1, Y2: Z_32;
Ds, Kh, s, Slim, Smax, Smin: Reel; Px: Pixel;
BEGIN
Smax:= 0; Smin:= Li[1];
FOR i:= -Npas TO Npas DO
BEGIN
s:= Li[i]; IF (Smax<s) THEN Smax:= s;
IF (Smin>s) THEN Smin:= s
END;
Xmed:= La DIV 2; X1:= Xmed - Npas; X2:= Xmed + Npas;
Hmax:= Round(0.9 * Ha); Y1:= Round(0.05 * Ha); Y2:= Y1 + Hmax;
Kh:= Hmax / (Smax - Smin);
Fond_Graphique(Larg_Image, Haut_Image, X1, X2, Xmed, Y1, Y2, Matrice_2);
FOR i:= -Npas TO Npas DO
BEGIN
Ds:= Li[i] - Smin; h:= Round(Kh * Ds); x:= Xmed + i;
FOR y:= Y1 TO (Y1 + h) DO Ma2[x, y]:= P010
END;
Slim:= Som_2R(0.8 * Smin, 0.2 * Smax);
Trace_Minima(Haut_Image, Xmed, Slim, Liste,
Jmin_1, Jmin_2, Matrice_2);
Aff_Min(Jmin_1, Jmin_2)
END;
FUNCTION CoefVarR(Dx, Dy, R2: Reel): Reel;
VAR Dx2, Dy2, s, v, w: Reel; // C = (1 - dý/Dý)^4
BEGIN
Dx2:= Sqr(Dx); Dy2:= Sqr(Dy); s:= Dx2 + Dy2;
IF (s>R2) THEN w:= 0
ELSE BEGIN
v:= s / R2; w:= Sqr(1 - v)
END;
Result:= Sqr(w)
END;
PROCEDURE Calc_Liste(Ym, Yc: Z_32;
VAR L_: LstR; VAR Ma0: Tab_Pix);
CONST Jmax = 200;
VAR i, j, Rmax, SIc, u, v, X1, X2, Y1, Y2, Zm: Z_32;
Ct, Dr, g, r, s, St, t, x, y: Reel; Px: Pixel;
BEGIN
IF ((2 * Yc)<Ym) THEN Rmax:= Yc ELSE Rmax:= Ym - Yc;
Dec(Rmax, D1); Dr:= Rmax / Jmax;
FOR i:= -Npas TO Npas DO
BEGIN
r:= i / Npas; t:= H_Pi * r;
SinCos(t, St, Ct); s:= 0;
FOR j:= 1 TO Jmax DO
BEGIN
r:= Dr * j;
x:= Som_2R(Xcen, r * Ct); y:= Som_2R(Ycen, r * St);
Zm:= Trunc(x); X1:= Zm - D1; X2:= Zm + (D1 + 1);
Zm:= Trunc(y); Y1:= Zm - D1; Y2:= Zm + (D1 + 1);
FOR u:= X1 TO X2 DO
FOR v:= Y1 TO Y2 DO BEGIN
Px:= Ma0[u, v]; SIc:= Px[1];
Inc(SIc, Px[2]); Inc(SIc, Px[3]);
g:= CoefVarR(u - x, v - y, D2);
IncR(s, g * SIc)
END
END;
Liste[i]:= s
END
END; |
Partager