Problème des caméras

Problèmes des caméras et solutions

Filtrage

Les caméras CMOS, comme toutes les caméras, ont des problèmes de bruit. Il y a plusieurs sources de bruit possibles (cf google pour la liste complète), qui se manifestent différemment :

  • un même pixel peut avoir une valeur légèrement différente sur deux trames consécutives
  • des pixels peuvent prendre aléatoirement des valeurs complètement fausses
  • ....

Le mécanisme de coefficient de confiance se charge du deuxième cas. Il reste le premier à régler. De plus, pour séparer plus facilement deux balises, on peut en prendre une verte et une rouge (ou comme nous, une jaune avec un point vert au centre en opposition de phase). Une étape de filtrage de l'image reçue (avant traitement) est donc bienvenue :

  • première possibilité, filtrage effectué au vol : on ne garde que les pixels dont l'intensité est supérieure à un certain seuil. Ce filtrage pose un problème pour les objets faiblement illuminées, qui tombent pile à la limite. A cause du bruit, ils peuvent être vus au dessus du seuil lors d'une trame, et en dessous à la suivante, simulant un clignotement. Par contre, il est plus simple à implémenter que le deuxième (ci-dessous), et nécessite moins de RAM. C'est celui que nous avons choisi, les effets négatifs étant en pratique inexistants.
  • deuxième possibilité, filtrage effectué aussi au vol : pour savoir si un point clignote au pas, il faut qu'il ait changé "beaucoup" (deuxième seuil). On garde donc en mémoire la valeur du pixel en question à la trame précédente, et pour le définir comme clignotant il faut qu'il ait varié de plus qu'un certain seuil en valeur absolue. Inconvénient : nécessite de garder la trame précédente en mémoire...
  • troisième possibilité, filtrage effectué par la caméra : comme la balise crache bien, on ne garde que les éléments les plus puissants. Autrement dit, on règle le gain au minimum (0). Ainsi on ne garde que les projecteurs, les flashs, les lampes, et les balises.

La caméra dispose de plusieurs moyens de régler l'intensité reçue : des registres de gain (0x01, 0x02, 0x03, 0x0C, 0x0D, ...) et un registre de contrôle d'exposition (0x10). Le fonctionnement des registres de gain est évident, celui d'exposition l'est moins. Il va falloir entrer dans le fonctionnement des caméras CMOS (en plus, ça expliquera beaucoup de problèmes de certaines équipes).

Exposition glissante

Le principe de fonctionnement des caméras peut être résumé ainsi : chaque pixel de la matrice photo-sensible est pré-chargé. Puis il est exposé à la lumière pendant un temps fixe (appelé temps d'exposition, généralement exprimé en fraction de secondes ou en lignes). Au bout de ce temps, l'exposition est terminée (voir après comment), et les pixels sont transmis à l'extérieur.

Il existe deux principaux moyens pour faire en sorte que les pixels soient tous exposés le même temps :

  • les obturateurs mécaniques ou synchrones (généralement mécaniques)
  • les obturateurs glissants, électroniques (rolling shutter).

La plupart des caméras CMOS bas prix sont équipées d'obturateurs glissants. Leur principe est simple : imaginons que le temps d'exposition soit de 10 lignes [dans la suite, on part du principe qu'on lit toutes les lignes les unes après les autres (progressif), alors qu'en mode entrelacé on ne lit en fait qu'une ligne sur deux (les impaires puis les paires)] : chaque ligne, avant d'être lue, est remise à zéro (pré-chargée) 10 lignes auparavant. 10 lignes après (soit le temps d'exposition) elle est lue et transmise à l'extérieur. Autrement dit :

  • pendant qu'on lit la ligne 34, on expose les lignes 35 à 44, et la ligne 45 est remise à zéro,
  • une ligne plus tard, on lit la ligne 35, on expose 36 à 45, et la ligne 46 est remise à zéro,
  • une ligne plus tard, on lit la ligne 36, on expose 37 à 46, et la ligne 47 est remise à zéro,
  • etc...

On a donc une fenêtre glissante d'exposition qui parcourt l'image. Chaque ligne entrant dans la fenêtre est remise à zéro, et lue lorsqu'elle en sort.

Le temps d'exposition (délai entre la remise à zéro et la lecture) peut varier entre 1 ligne et 1 image. Ce mécanisme a comme avantage de ne pas nécessiter de pièce mécanique en mouvement (obturateurs mécaniques), et une architecture des pixels photo-sensibles simple (3 transistors contre 4 pour les obturateurs électroniques synchrones). Leur inconvénient est que chaque ligne fournit une information décalée dans le temps : une barre verticale se déplaçant horizontalement sera vue de biais (car le bas de l'objet sera vu plus tard que le haut).

Ce mécanisme d'exposition a une importance pour nous : rappelons-nous que les fréquences caméra et balise sont légèrement décalées. Autrement dit, l'instant où la balise change d'état (s'allume ou s'éteint) se décale lentement dans l'image. Imaginons que la balise soit vue d'assez loin pour qu'elle entre entièrement dans la fenêtre d'exposition.

  • Si la frontière est au milieu de la fenêtre d'exposition, la balise sera vue à moitié allumée et à moitié éteinte, soit une intensité de 50% sur une trame, 50% sur la trame suivante.
  • Si la frontière est au tiers de la fenêtre d'exposition, la balise sera vue avec une intensité de 33% (et 66% sur la trame suivante).
  • Si la frontière est au dixième de la fenêtre d'exposition, la balise sera vue avec une intensité de 10% (90% sur la trame suivante).

Autrement dit, au fur et à mesure du décalage de la frontière, la balise va être vue allumée, puis lentement décroissante, puis éteinte, puis lentement croissante. Plus la fenêtre d'exposition sera grande, plus le temps de transition (de allumée à éteinte) sera grand. Et pendant ce temps de transition, la balise est vue allumée sur plusieurs trames successives, mettant notre algorithme par terre...

You are missing some Flash content that should appear here! Perhaps your browser cannot display it, or maybe it did not initialise correctly.

Cette vidéo illustre bien ce phénomène : on a filmé une balise avec différents temps d'exposition, et on a capturé le flux vidéo en séparant les images paires et impaires. On voit bien que plus l'exposition dure longtemps, plus la balise clignote de façon molle... Il nous faut absolument une balise qui clignote franchement, soit un temps d'exposition le plus faible possible. On prendra donc le minimum : 1 ligne (0x00 dans le registre 0x10, en ayant désactivé le contrôle automatique d'exposition bien sûr). Sur la vidéo, la balise devient presque invisible car les gains sont en plus mis au minimum (0x00 dans 0x00, 0x01, 0x02 et 0x06).

Au passage : une durée d'exposition faible assombrit la scène. C'est pour cela que la balise dispose de LED haute-luminosité !..