Bonjour,
j'essaie de coder un filtre médian dans une DLL, pour ensuite appeler celui ci via LabVIEW
Voici le code ma DLL *tab etant le pointeur sur l'image à filtrer, et *imli le pointeur sur l'image filtrée.
Code : 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
35
36
37
38
39
40
41
42
43 extern "C" __declspec(dllexport) int filtre_median (float *tab, float *imli) { int i,j,p,k; float L; float donnees[9]; for (j=1;j<478;j++) // défilement des lignes { for (i=1;i<750;i++)// défilement des colonnes { p= i+ j*752; // on commence par la colonne numéro 1 (non la 0) et par la ligne numéro 1 (idem) // ainsi je n'ai pas de soucis pour appliquer le filtre médian 3*3 et on s'arrete a l'avant derniere colonne et ligne donnees[0]=tab[p-752-1]; donnees[1]=tab[p-752]; donnees[2]=tab[p-752+1]; donnees[3]=tab[p-1]; donnees[4]=tab[p]; donnees[5]=tab[p+1]; donnees[6]=tab[p+752-1]; donnees[7]=tab[p+752]; donnees[8]=tab[p+752+1]; // Tri du tableau donnees for (j=0;j<=8;j++) { for (k=j+1;k<=8;k++) { if (donnees[j]>donnees[k]) { L=donnees[j]; donnees[j]=donnees[k]; donnees[k]=L; } } } imli[p]=donnees[4]; // on attribue la valeur médiane } } return 1; }
Cette fonction ne marche pas, et LabVIEW bloque. Cependant si je mets en commentaire la partie "tri du tableau donnees", LabVIEW ne bloque plus.
Si quelqu'un comprend ce plantage, il m'enleverait une épine du pied (en ce moment j'en ai un paquet !)
Merci !!
Jérôme.
Partager