Bonjour je voudrais comprendre, comment marche le lissage en x et y pour une image donné , ceci permettant d'utilisé un filtrage de deriche.

Je vous fait parvenir le code si vous pouvez m'éclaicir un peu.

Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
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
void HorizontalSmoothing (CImg<double> in, CImg<double> & out, double alpha)
{
	double a1,b1,c1,d1,a2,b2,c2,d2,ea,b;
	int dx=in.dimx(), dy=in.dimy();
	CImg<double> B1(dx);
	CImg<double> B2(dx);
 
	ea = exp(-alpha);
	b = (1-ea)*(1-ea)/(1+2*alpha*ea - ea*ea);
	a1 = b;
	a2 = b*ea * (alpha+1);
	b1 = b * ea * (alpha-1);
	b2 = -b *ea *ea;
	c1 = 2 * ea;
	c2 = c1;
	d1 = -ea * ea;
	d2 = d1;
 
	for (int j=0; j<dy; j++)
	{
		B1(0) = in(0,j) * (a1+b1) / (1-c1-d1);
		B1(1) = in(1,j) * a1 + b1 * in(0,j) + B1(0) * (c1+d1);
		for (int i=2; i<dx; i++)
			B1(i) = a1 * in(i,j) + b1 * in(i-1, j) + c1 * B1(i-1) + d1 * B1(i-2) ;
 
		B2(dx-1) = in(dx-1,j) * (a2+b2)/(1-c2-d2);
		B2(dx-2) = in(dx-2,j) * a2 + in(dx-1,j) * b2 + B2(dx-1) * (c2+d2);
		for (int i=dx-3; i>=0; i--)
			B2(i) = a2 * in(i,j) + b2 * in(i+1,j) + c2 * B2(i+1) + d2 * B2(i+2);
 
		for (int i=0; i<dx; i++)
			out(i,j) = B1(i) + B2(i);
	}
}

Merci encore.