bonsoir tous le monde

j'ai suivi l'algorithme suivant pour la détection de premier plan

Dn(x,y) = 0 si Sn(x,y)<= Th

Dn(x,y) = 1 sinon

Sn(x,y)= abs( In(x,y) - Bn(x,y))

et Th= MED + 3* 1.4826* MAD avec MED = median(Sn(x,y)) et MAD=median(Sn(x,y)-MED)

1- j'aimerais bien vérifier si la valeur de seuil est déterminé comme suivant:
emm forte probabilité que mon implementation est fausse puisque le type de retour de th est une matrice et il faut que th soit une valeur (double) pour appliquer la fonction threshold alors quelle est la fonction utilisé pour calculer MED et MAD??. pour plus d'information MED est le parametre median qui correspond à la valeur typique de bruit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Mat MED, MAD;
    medianBlur(fg_mask, MED, 3);
    medianBlur((fg_mask-MED), MAD,3);
    Mat th=MED+ 3* 1.4826*MAD;
2- j'ai fait cet algorithme comme une fonction qui dépend de deux entrées et retourne une image (Mat)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Mat foreground(Mat background, Mat current)
alors dans la fonction main () j'ai fait un appel de cette fonction, le code est comme suivant ici j'aimerais verifier aussi si les instructions sont justes ou pas avec In(x,y) et Bn(x,y) correspond a un instant n (emmm j'initialise le background par la premiere frame puis je bloque: background sera inchangé). comment peux je resoudre ca?
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
int main()
{
        Mat background, frame1;
        VideoCapture capture;
while(1)
{
    //while permet le rouvrant la capture à chaque fois la vidéo atteint sa dernière image
      capture.open("C:/Users/sbi/Documents/Visual Studio 2010/Projects/FireDetection/clips/9.avi");
      if (!capture.isOpened())
      {
         cout <<"ERROR\n";
      }
      capture.read(background);
      //vérifier si la video atteint la derniere image
     //nous ajoutons -1 parce que nous lisons deux cadres de la vidéo à la fois
    //si cela ne est pas inclus, nous obtenons une erreur de mémoire
      while(capture.get(CV_CAP_PROP_POS_FRAMES)<capture.get(CV_CAP_PROP_FRAME_COUNT)-1)
        {
            //lecture du premiere image
            capture.read(frame1);
            foreground(background, frame1);
            imshow ("Frame1", frame1);
        }
    capture.release();
}
        return 0;
}
merci pour vos aide