Corrigé CCINP 2025 Modélisation PC — Partie III.2 (Q42 à Q45) : Mesure du diamètre d'une armature sur une image : contour et plus grande distance en Python
Sujet officiel du concours CCINP, session 2025, épreuve Modélisation PC. Corrigé rédigé par Ibrahim Alame.
Sujet officiel (PDF, site du concours)
Énoncé
Pour valider la loi de Q41c, on photographie à intervalles réguliers des coupes du béton (figure 8) ; et sont les diamètres de l'armature aux instants et .
{Figure 8 — Vue du béton et coupe}
Après traitement, l'image d'une armature, centrée, est un tableau carré image de pixels : (noir) pour l'armature, (blanc) pour le béton. Le contour est l'ensemble des pixels noirs ayant au moins un voisin blanc (figure 9) ; ses coordonnées sont stockées dans la liste Contour.
{Figure 9 — Définition du contour (en gris : pixels du contour)}
Script de la figure 10 : instruction 1 ; for i in range(instruction 2) ; for j in range(instruction 3) ; I = image[i,j] ; test if I==0 and (… or … or …) (instruction 4) ; instruction 5.
Q42. a. Instruction 1 : initialiser Contour. b. Instructions 2 et 3 : parcourir image. c. Instruction 4 : reconnaître un pixel du contour. d. Instruction 5 : le stocker dans Contour.
Le diamètre est la plus grande distance entre deux points distincts du contour.
Q43. Fonction Distance(CoordA, CoordB) renvoyant la distance euclidienne entre deux points donnés par leurs listes de coordonnées.
Q44. Valeur d'initialisation du diamètre.
Q45. Instructions calculant le diamètre de l'armature.
Corrigé
Extraction du contour.
Q42. Un pixel appartient au contour s'il est noir et si l'un au moins de ses quatre voisins (haut, bas, gauche, droite) est blanc : d'où les trois or du test. On parcourt les indices de à : les voisins , existent alors toujours (en Python, image[-1, j] ne déclencherait pas d'erreur mais désignerait la dernière ligne, ce qui fausserait le test). Ce n'est pas une perte, puisque l'armature est au centre de la photo et que les bords sont du béton.
Contour = [] # Instruction 1 : liste vide
for i in range(1, Np-1): # Instruction 2 : lignes intérieures
for j in range(1, Np-1): # Instruction 3 : colonnes intérieures
I = image[i,j]
if I==0 and (image[i-1,j]==1 or image[i+1,j]==1 or
image[i,j-1]==1 or image[i,j+1]==1): # Instruction 4
Contour.append([i, j]) # Instruction 5 : coordonnées du pixel
Ce que le correcteur attend : des bornes de range cohérentes avec les accès i-1 et i+1 (range(Np) provoque une erreur d'indice en i+1 = Np).
100 % gratuit
La suite du corrigé est sur Adloun
Le corrigé rédigé en entier, question par question, et le tuteur pour poser des questions sur ce sujet.
Voir le corrigé complet, gratuitementInscription gratuite en 30 secondes (e-mail, nom d'utilisateur, mot de passe, classe ou profil), sans carte bancaire : arrivée directe sur le corrigé.