Explication du déroulement de notre algorithme

Dans tout ce qui suit (sauf indications contraires), les images de gauche se rapportent à l'image dice1 et les images de droite à dice5.

1. Prétraitement général

1.1. Seuillage

Après avoir examiné les histogrammes de chacune des deux images, nous avons vu que ces images étaient aisément seuillables car on distinguait bien deux zones dans l'histogramme : les dés blancs et les points blancs des dés noirs d'un côté, et le fond des images de l'autre. Nous avons donc seuillé les deux images avec le même seuil, ne gardant que les valeurs de niveaux de gris comprises entre 200 et 255 (inclus).
Après ce seuillage, ne restent que les dés blancs, les points blancs des dés noirs ainsi que quelques reflets sur les bords des dés noirs.

1.2. Erosion

Une érosion de taille 3 nous permet d'enlever toutes les zones blanches plus petites que l'élément structurant, à savoir ici les points blancs des dés noirs ainsi que les éventuels reflets . Ne restent donc à la fin de cette érosion que des portions de dés blancs .

1.3. Reconstruction

Le but de l'opération précédente était de nous fournir une image de marqueurs pour ne reconstruire que les dés blancs. Cette dernière opération va alors nous permettre de nous intéresser d'abord aux dés blancs, puis ensuite aux dés noirs.

2. Comptage des dés blancs et de leurs points noirs

2.1. Comptage des dés blancs

La première étape est de compter simplement les dés blancs. Pour cela, il suffit de compter les composantes connexes des images obtenues après reconstruction (étape 1.2.). On obtient ainsi le nombre de dés blancs dans chaque image.

Dans dice1, Nombre de dés blancs = 3
Dans dice5, Nombre de dés blancs = 3

2.2. Etiquetage

Ensuite, afin de pouvoir compter les points noirs pour chaque dé, on étiquette l'image pour obtenir un niveau de gris différent pour chaque dé, ce qui donne la possibilité de pouvoir les examiner un par un. Dans les images qui suivent, chaque couleur correspond à une étiquette particulière.

2.3. Comptage des points noirs pour chaque dé blanc

La première étape est de seuiller successivement les images étiquetées pour obtenir une image binaire pour chaque dé. Ensuite, l'idée est d'inverser l'image binaire obtenue (en faisant un XOR avec une image à 1 partout) et de compter les objets de l'image obtenue (ce sont les images ci-dessous pour chaque dé). Dans cette image se trouvent à 1 le fond et les points noirs du dé concerné. On en déduit facilement le nombre de points noirs en enlevant 1 (pour déduire le fond du décompte) au nombre d'objets trouvés dans l'image.

On obtient ainsi le nombre de points noirs pour chaque dé blanc.
(les dés sont numérotés dans l'ordre de leur apparition dans le sens haut->bas).
Pour dice1 :
Nombre de points noirs du dé blanc 1 = 4
Nombre de points noirs du dé blanc 2 = 6
Nombre de points noirs du dé blanc 3 = 2

Pour dice5 :
Nombre de points noirs du dé blanc 1 = 3
Nombre de points noirs du dé blanc 2 = 1
Nombre de points noirs du dé blanc 3 = 4

3. Comptage des dés noirs et de leurs points blancs

3.1. Soustraction

Pour obtenir les points blancs des dés noirs, il suffit de faire la différence entre l'image seuillée de départ (étape 1.1.) et l'image reconstruite des seuls dés blancs (étape 1.3.). Le problème est que certains reflets génants subsistent sur l'image obtenue...


(dans toute cette partie, nous ne présentons les images que pour dice5. En effet, dice1 ne contient pas de dés noirs et les images que nous aurions pu présenter ci-dessous seraient toutes noires...et donc sans intérêts).

3.2. Ouverture

Une petite ouverture de taille 2 (donc avec un élément structurant plus petit que les points blancs mais plus grand que les reflets) va nous permettre d'enlever ces reflets génants sans pour autant enlever les points blancs. Ainsi ne restent que les parties intéressantes des dés noirs: les points blancs.

3.2. Fermeture

Nous avons voulu construire une composante connexe par dés noirs à partir des points blancs que nous avions précédemment isolés. Pour cela, nous avons appliqué une fermeture de taille 15 pour connecter les points blancs entre eux, en prenant garde de ne pas connecter deux dés trop proches l'un de l'autre. La valeur 15 semble fonctionner correctement, même dans le cas (non présent ici) où il n'y aurait que deux points blancs sur un dé (configuration où les points blancs sont le plus éloignés les uns des autres).

3.3. Comptage des dés noirs

On compte les composantes connexes de l'image précédente pour avoir le nombre de dés noirs de l'image.

Pour dice1, Nombre de dés noirs = 0
Pour dice5, Nombre de dés noirs = 2

3.4. Squelette par zone d'influence

Pour pouvoir séparer les points blancs et déterminer leur appartenance à un dé noir, on fait un squelette par zone d'influence de l'image obtenue à l'étape 3.2 (dans le cas où l'image contient au moins un dé noir). En superposant cette image à l'image des points blancs, on pourra alors regrouper les points blancs par dés noirs.

3.5. Comptage des points blancs pour chaque dés noirs

Dans un premier temps, on seuille le skiz pour avoir autant de régions que de dés noirs. Ensuite, dans chaque région, on fait un AND logique avec l'image des points blancs (étape 3.2.) pour n'avoir que les points blancs correspondants à un seul dé (voir images ci-dessous). Enfin, sur cette image, on compte le nombre d'objets, ce qui nous donne le nombre de points blancs du dé noir correspondant. Et le tour est joué !

(les dés sont numérotés dans l'ordre de leur apparition dans le sens haut->bas).
Pour dice5 :
Nombre de points blancs du dé noir 1 = 6
Nombre de points blancs du dé noir 2 = 5

Sommaire
© Sebastien Cantet / Cedric Bourgoin - Mars 1997