Résumé

On résume tout ?

Deux possibilités d'algorithmes, selon le filtrage qu'on souhaite effectuer. Pour chaque algorithme, l'indice de confiance sera pris sur 6 bits.

Algorithme 1 (avec seuillage absolu)

  1. La caméra est réglée (en I2C) à un gain faible, temps d'exposition minimum, mode QVGA, 60 images/seconde (trames impaires seulement)
  2. pour chaque pixel :
    1. s'il est supérieur à un seuil, on le déclare allumé, sinon on le déclare éteint
    2. on stocke sa valeur quelque part ("allumé" ou "éteint", donc sur 1 bit)
    3. on compare cette valeur à celle de la trame précédente (XOR)
      1. si le point clignote : indice[pixel] += a1;
      2. s'il s'arrête de clignoter, indice[pixel] -= a2;
      3. si indice[pixel] > seuil_confiance, alors le pixel appartient à la balise et on le stocke quelque part

Cet algorithme nécessite de stocker pour chaque pixel son indice de confiance (6 bits), sa valeur (allumé ou éteint, sur 1 bit), et s'il appartient à la balise ou non, soit 8 bits/pixel.

Algorithme 2 (avec seuillage différentiel)

  1. La caméra est réglée (en I2C) à un gain faible, temps d'exposition minimum, mode QVGA, 60 images/seconde (trames impaires seulement)
  2. pour chaque pixel :
    1. on stocke ce pixel
    2. on le compare à sa valeur à la trame précédente. Si la valeur absolue de la comparaison est plus grande qu'un seuil, le pixel a clignoté.
      1. s'il a clignoté : indice[pixel] += a1;
      2. s'il n'a pas clignoté, indice[pixel] -= a2;
      3. si indice[pixel] > seuil_confiance, alors le pixel appartient à la balise et on le stocke quelque part

Cet algorithme nécessite de stocker pour chaque pixel son indice de confiance (6 bits), son intensité (5 bits significatifs), et s'il appartient à la balise ou non (1 bit), soit 12 bits / pixel.

Il ne reste plus qu'à les implémenter dans le FPGA (Stratix d'Altera). On présente ici le deuxième algorithme, le premier est laissé en exercice au lecteur :)