Bonsoir/Bonjour,
Je suis en train de m'essayer à l'implémentation des filtres de Sobel (horizontal et vertical) sur un flux vidéo (une webcam pour l'instant). J'ai cependant un petit problème que je viens de découvrir fortuitement : je code sur mon ordinateur portable avec une caméra sur le haut de mon écran et surtout, dans mon dos, à 2m, un drapeau () constitué de bandes noires et blanches alternées, la pièce étant éclairée convenablement (j'ai essayé en braquant ma lampe de bureau sur moi ou bien vers le mur blanc en face de moi (pour la diffusion "quasi-uniforme") et il n'y a pas de changement). Et bien, devant ce fond le filtre semble "omettre" deux côtés du contour : devant une bande blanche seuls les côtés "bas" et "gauche" (du point de vue de la caméra) d'un objet apparaissent alors que seuls les côtés "haut" et "droit" sont visibles devant une bande noire...
En résulte une alternance en créneau lorsqu'un objet est disposé de façon à couvrir à la fois une partie d'une bande claire puis d'une bande sombre etc...
Est-ce normal?
Voici en pseudocode, mon implémentation :
(Note : j'avais mixé les deux opérations, mais ça me semble plus lisible comme ça et ça n'a pas l'air de changer grand chose)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 sx = taille_pixel_X sy = taille_pixel_Y couleur11 = image_en_entree(position_courante + (-sx,-sy)) couleur12 = image_en_entree(position_courante + (-sx,0.0)) couleur13 = image_en_entree(position_courante + (-sx, sy)) couleur21 = image_en_entree(position_courante + ( 0, -sy)) couleur23 = image_en_entree(position_courante + ( 0, sy)) couleur31 = image_en_entree(position_courante + ( sx,-sy)) couleur32 = image_en_entree(position_courante + ( sx,0.0)) couleur33 = image_en_entree(position_courante + ( sx, sy)) couleurH = (-1.0*col11-2.0*col12-1.0*col13+1.0*col31+2.0*col32+1.0*col33)/2.0 couleurV = (-1.0*col11-2.0*col21-1.0*col31+1.0*col13+2.0*col23+1.0*col33)/2.0 couleur_finale = (couleurV + couleurH)/2.0 intensite = (couleur_finale.rouge + couleur_finale.vert + couleur_finale.bleu)/3.0 Ecrire( Couleur(intensite, intensite, intensite), position_courante )
Merci de votre aide,
Cordialement
Partager