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