Bonjour,
Je vais vous donner l'algorithme pour appliquer un filtre de choc de base.
C'est à dire le filtre de choc de Osher et Rudin qui consiste à déterminer l'état stationnaire de l'équation suivante :
dI/dt = - sign( Dnn(I)) * || grad I ||
(ou Dnn est la dérivée directionnelle selon le gradient et grad est le gradient) (et I l'image).
Il y a d'autres filtres de chocs (qui font par exemple intervenir un arctang ou des complexes, ou encore une convolution avec une gaussienne). Ces autres méthodes sont souvent de meilleur qualité car elles peuvent être appliquées à des images ayant de bruit.
Le filtre de choc de base a tendance à ne pas trop aimer le bruit.
La méthode de base qui est souvent choisi pour résoudre et de calculer :
Il suffit d'itérer cette équation (une 20 ou 100 aines de fois), mais attention la discrétisation de grad et de Dnn demande quelques précautions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
Tout d'abord :
Voici les fonctions permettant de calculer la différentielle en un point dans un canal particulier (je suis désolé d'avoir choisi une notation C++ mais ça me donne moins de boulot à traduire. J'espère en tout cas que vous comprendrez la sémantique des opérateurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
Avec la fonction minmod qui est définie par (il existe d'autres formulations) :
Et si vous saviez pas, sign est défini par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
Et l'algorithme s'écrit donc :
Voici avec : nbiter = 100 et dt = 0.1
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
Lenna :
Correction :
Ca, c'est une version avec l'application d'une gaussienne (rayon 2, sigma = 10) avec Inn (je n'ai pas noté l'algorithme) : c'est la méthode d'Alvarez et de Mazorra


 

 
		
		 
         
			
			

 
  
  
 
 
 
 
			 
   


 Filtre de choc de Osher et Rudin
 Filtre de choc de Osher et Rudin
				

 Répondre avec citation
  Répondre avec citation

 
			 
  Envoyé par factis
 Envoyé par factis
					
 
						

 OUT OF FOCUS BLUR PSF
 OUT OF FOCUS BLUR PSF
						
Partager