IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Squelettisation d'une image en php [PHP 7]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2018
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Squelettisation d'une image en php
    Bonsoir la famille, je travail sur un systeme de reconnaissance d'empreinte digitale et actuellemenet je bloque sur la phase de squelettisation de l'image de l'empreinte digitale. Je realise cet application en php
    J'aimerai que vous m'aidiez a resoudre cela

    Ceci est le fichier ou je stocke les fonction de condition

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    <?php
     
    	function pixel_est_noir($Tableau, $x, $y)
    	{
    		if($Tableau[$x][$y] == 1)
    			return true;
    		else
    			return false;
    	}
     
    	function pixel_a_2_a_6_voisin_noir($Tableau, $x, $y)
    	{
     
    		$voisin = ($Tableau[$x][$y-1] + $Tableau[$x+1][$y-1] + $Tableau[$x+1][$y] + $Tableau[$x+1][$y+1] + $Tableau[$x][$y-1] + $Tableau[$x-1][$y+1] + $Tableau[$x+1][$y] + $Tableau[$x-1][$y-1]);
     
    		if ( $voisin >= 2 && $voisin <= 6) {
     
    			return true;
    		}
     
    		else
    			return false;
    	}
     
     
    	function pixel_a_au_moins_une_transition_blanc_noir($Tableau, $x, $y)
    	{
    		$Tableau2 = array();
    		$transition = 0;
     
    		$Tableau2 = [ $Tableau[$x][$y-1],$Tableau[$x+1][$y+1],$Tableau[$x+1][$y],$Tableau[$x+1][$y-1],$Tableau[$x][$y-1],$Tableau[$x-1][$y-1],$Tableau[$x-1][$y],$Tableau[$x-1][$y+1],$Tableau[$x][$y+1] ];
     
    		for ($i=0; $i <= (count($Tableau2)-1) ; $i++) { 
     
    			if ($Tableau2[$i] == false && $Tableau2[$i+1] == true) {
     
    				$transition = $transition+1;
    			}
     
    		}
     
    		if ($transition == 1) {
     
    			return true;
    		}
     
    		else
     
    			return false;
     
    	}
     
    	function au_moins_p2_p4_p6_est_blanc($Tableau, $x, $y)
    	{
    		if (($Tableau[$x][$y-1] && $Tableau[$x+1][$y] && $Tableau[$x][$y+1]) == false) {
     
    			return true;
    		}
    		else
    			return false;
    	}
     
    	function au_moins_p4_p6_p8_est_blanc($Tableau, $x, $y)
    	{
    		if (($Tableau[$x+1][$y] && $Tableau[$x][$y+1] && $Tableau[$x-1][$y]) == false) {
     
    			return true;
    		}
    		else
    			return false;
    	}
     
    	function au_moins_p2_p4_p8_est_blanc($Tableau, $x, $y)
    	{
    		if (($Tableau[$x][$y-1] && $Tableau[$x+1][$y] && $Tableau[$x-1][$y]) == false) {
     
    			return true;
    		}
    		else
    			return false;
     
    	}
     
    	function au_moins_p2_p6_p8_est_blanc($Tableau, $x, $y)
    	{
    		if (($Tableau[$x][$y-1] && $Tableau[$x][$y+1] && $Tableau[$x-1][$y]) == false) {
     
    			 return true;
    		}
     
    		else 
    			return false;
    	}
    ?>
    Et ici je teste ces fonctions la
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    <?php
     
    	require 'FonctionSquelettisation.php';
    	$image = imagecreatefromjpeg('resultat.jpg');
    	$width = imagesx($image);
    	$heigth = imagesy($image);
    	$imgFinal = imagecreatetruecolor($width, $heigth);
     
    	$Tableau = array(array());
    	$TableauCopie = array(array());
    	$TableauCopie1 = array(array());
     
    	for ($y=0; $y <$heigth ; $y++) { 
    		for ($x=0; $x <$width ; $x++) { 
    			$pixel = imagecolorat($image, $x, $y);
    			$black = imagecolorallocate($image, 0, 0, 0); // Couleur noir
                $white = imagecolorallocate($image, 255, 255, 255); // couleur blanche
     
                $black2 = imagecolorallocate($imgFinal, 0, 0, 0); // Couleur noir
                $white2 = imagecolorallocate($imgFinal, 255, 255, 255); // couleur blanche
     
                    if ($pixel == $black) {
     
                		$Tableau[$x][$y] = 0;
                	}
     
                	elseif ($pixel == $white) {
     
                		$Tableau[$x][$y]=1;
                	}
            }
     
    		$TableauCopie = $Tableau;
    	}
     
    	while ($pixel == false) {
     
     
    		for ($y=0; $y < $heigth ; $y++) { 
    			for ($x=0; $x <$width ; $x++){
     
    				if (pixel_est_noir($TableauCopie,$x,$y) && pixel_a_2_a_6_voisin_noir($TableauCopie, $x, $y) && pixel_a_au_moins_une_transition_blanc_noir($TableauCopie, $x, $y) && au_moins_p2_p4_p6_est_blanc($TableauCopie, $x, $y) && au_moins_p4_p6_p8_est_blanc($TableauCopie, $x, $y)){
     
    						$TableauCopie1[$x][$y] = $TableauCopie[$x][$y];
    				}
     
    			}
    		}
     
    		for ($y=0; $y <$heigth ; $y++) { 
    			for ($x=0; $x<$width ; $x++) { 
     
    				if (pixel_est_noir($TableauCopie,$x,$y) && pixel_a_2_a_6_voisin_noir($TableauCopie,$x,$y) && pixel_a_au_moins_une_transition_blanc_noir($TableauCopie,$x,$y) && au_moins_p2_p4_p8_est_blanc($TableauCopie,$x,$y) && au_moins_p2_p6_p8_est_blanc($TableauCopie,$x,$y)) {
     
    						$TableauCopie1[$x][$y] = $TableauCopie[$x][$y];
    				}
    			}
    		}
     
    			if (array_diff($TableauCopie1, $TableauCopie) == true) {
     
    				break;
    			}
    	}
     
    	for ($y=0; $y <$heigth ; $y++) { 
     
    		for ($x=0; $x <$width ; $x++) { 
     
    			if ($TableauCopie1[$x][$y] == 0) {
    				imagesetpixel($imgFinal, $x, $y, $black2);
    			}
     
    			else
    				imagesetpixel($imgFinal, $x, $y, $white2);
    		}
    	}
     
    	imagejpeg($imgFinal,'Image/resultat.jpg');
    	imagedestroy($imgFinal);
     
    ?>
    Mais ca ne marche pas je ne sais pas pourquoi.
    J'utilise une image binarisée et j'essaie de la convertir en tableau

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    "ça ne marche pas", ça ne nous aide pas beaucoup à t'aider Tu as un résultat différent de l'attendu, pas de résultat, un message d'erreur, ton écran implose ?

    Au passage, quelques remarques sur ton code :

    tu peux définir les couleurs de base à l'extérieur des boucles, inutile de les redéfinir à chaque fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $black = imagecolorallocate($image, 0, 0, 0); // Couleur noir
    $white = imagecolorallocate($image, 255, 255, 255); // couleur blanche
     
    $black2 = imagecolorallocate($imgFinal, 0, 0, 0); // Couleur noir
    $white2 = imagecolorallocate($imgFinal, 255, 255, 255); // couleur blanche
    for ($y=0; $y <$heigth ; $y++) { 
    	for ($x=0; $x <$width ; $x++) { 
    		$pixel = imagecolorat($image, $x, $y);
    Tu as un while ($pixel == false) {, qui sort un peu de nulle part, surtout que $pixel est défini dans la boucle précédente et que le while est à l'extérieur

    Je te conseille aussi de renommer tes variables parce $TableauCopie et $TableauCopie1, et $white2 et $black2 ce n'est pas super explicite.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2018
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Bonsoir Celira
    Merci pour les rectifications, j'ai modifier un peu le code et voici:

    Ceci est le fichier ou je stocke les fonction de condition

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    <?php
     
    	function pixel_est_noir($Tableau, $x, $y)
    	{
    		if($Tableau[$x][$y] == 1)
    			return true;
    		else
    			return false;
    	}
     
    	function pixel_a_2_a_6_voisin_noir($Tableau, $x, $y)
    	{
     
    		$voisin = ($Tableau[$x][$y-1] + $Tableau[$x+1][$y-1] + $Tableau[$x+1][$y] + $Tableau[$x+1][$y+1] + $Tableau[$x][$y-1] + $Tableau[$x-1][$y+1] + $Tableau[$x+1][$y] + $Tableau[$x-1][$y-1]);
     
    		if ( $voisin >= 2 && $voisin <= 6) {
     
    			return true;
    		}
     
    		else
    			return false;
    	}
     
     
    	function pixel_a_au_moins_une_transition_blanc_noir($Tableau, $x, $y)
    	{
    		$Tableau2 = array();
    		$transition = 0;
     
    		$Tableau2 = [ $Tableau[$x][$y-1],$Tableau[$x+1][$y+1],$Tableau[$x+1][$y],$Tableau[$x+1][$y-1],$Tableau[$x][$y-1],$Tableau[$x-1][$y-1],$Tableau[$x-1][$y],$Tableau[$x-1][$y+1],$Tableau[$x][$y+1] ];
     
    		for ($i=0; $i <= (count($Tableau2)-1) ; $i++) { 
     
    			if ($Tableau2[$i] == false && $Tableau2[$i+1] == true) {
     
    				$transition = $transition+1;
    			}
     
    		}
     
    		if ($transition == 1) {
     
    			return true;
    		}
     
    		else
     
    			return false;
     
    	}
     
    	function au_moins_p2_p4_p6_est_blanc($Tableau, $x, $y)
    	{
    		if (($Tableau[$x][$y-1] && $Tableau[$x+1][$y] && $Tableau[$x][$y+1]) == false) {
     
    			return true;
    		}
    		else
    			return false;
    	}
     
    	function au_moins_p4_p6_p8_est_blanc($Tableau, $x, $y)
    	{
    		if (($Tableau[$x+1][$y] && $Tableau[$x][$y+1] && $Tableau[$x-1][$y]) == false) {
     
    			return true;
    		}
    		else
    			return false;
    	}
     
    	function au_moins_p2_p4_p8_est_blanc($Tableau, $x, $y)
    	{
    		if (($Tableau[$x][$y-1] && $Tableau[$x+1][$y] && $Tableau[$x-1][$y]) == false) {
     
    			return true;
    		}
    		else
    			return false;
     
    	}
     
    	function au_moins_p2_p6_p8_est_blanc($Tableau, $x, $y)
    	{
    		if (($Tableau[$x][$y-1] && $Tableau[$x][$y+1] && $Tableau[$x-1][$y]) == false) {
     
    			 return true;
    		}
     
    		else 
    			return false;
    	}
    ?>
    Et je teste ici :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    <?php
     
    	require 'FonctionSquelettisation.php';
    	$image = imagecreatefromjpeg('resultat.jpg');
    	$width = imagesx($image);
    	$heigth = imagesy($image);
    	$imgFinal = imagecreatetruecolor($width, $heigth);
     
    	$Tableau = array(array());
    	$TableauCopie = array(array());
     
    	for ($y=0; $y <$heigth ; $y++) { 
     
    		for ($x=0; $x <$width ; $x++) { 
     
    				$pixel = imagecolorat($image, $x, $y);
     
    				$black = imagecolorallocate($imgFinal, 0, 0, 0); // Couleur noir
        			$white = imagecolorallocate($imgFinal, 255, 255, 255); // couleur blanche
     
                    if ($pixel == $black) {
     
                		$Tableau[$x][$y] = 0;
                	}
     
                	elseif ($pixel == $white) {
     
                		$Tableau[$x][$y]=1;
                	}
            }
     
    		$TableauCopie = $Tableau;
    	}
     
    	while ($pixel == 1) {
     
    		$TableauRecopie = array(array());
     
    		for ($y=0; $y < $heigth-1 ; $y++) { 
    			for ($x=0; $x <$width-1 ; $x++){
     
    				if (pixel_est_noir($TableauCopie,$x,$y) && pixel_a_2_a_6_voisin_noir($TableauCopie, $x, $y) && pixel_a_au_moins_une_transition_blanc_noir($TableauCopie, $x, $y) && au_moins_p2_p4_p6_est_blanc($TableauCopie, $x, $y) && au_moins_p4_p6_p8_est_blanc($TableauCopie, $x, $y)){
     
    						$TableauRecopie[$x][$y] = $TableauCopie[$x][$y];
    				}
     
    			}
    		}
     
    		for ($y=1; $y <$heigth-1; $y++) { 
    			for ($x=1; $x<$width-1 ; $x++) { 
     
    					$TableauRecopie[$x][$y]=0;
    			}
    		}
     
    		$TableauRecopie = array(array());
     
    		for ($y=1; $y <$heigth-1 ; $y++) { 
    			for ($x=1; $x<$width-1 ; $x++) { 
     
    				if (pixel_est_noir($TableauCopie,$x,$y) && pixel_a_2_a_6_voisin_noir($TableauCopie,$x,$y) && pixel_a_au_moins_une_transition_blanc_noir($TableauCopie,$x,$y) && au_moins_p2_p4_p8_est_blanc($TableauCopie,$x,$y) && au_moins_p2_p6_p8_est_blanc($TableauCopie,$x,$y)) {
     
    						$TableauRecopie[$x][$y] = $TableauCopie[$x][$y];
    				}
    			}
    		}
     
    		for ($y=1; $y <$heigth-1 ; $y++) { 
    			for ($x=1; $x<$width-1 ; $x++) { 
     
    					$TableauRecopie[$x][$y]=0;
    			}
    		}
     
    			if ($pixel== true) {
     
    				break;
    			}
    	}
     
    	for ($y=1; $y <$heigth-1 ; $y++) { 
     
    		for ($x=1; $x <$width-1 ; $x++) { 
     
    			if ($TableauCopie[$x][$y] == 0) {
    				imagesetpixel($imgFinal, $x, $y, $black); 
    			}
     
    			else
    				imagesetpixel($imgFinal, $x, $y, $white);
    		}
    	}
     
    	imagejpeg($imgFinal,'Image/resultat.jpg');
    	imagedestroy($imgFinal);
     
    ?>
    En fait c'est comme tu l'as dit je n'obtiens pasun resultat voulu...
    J'obtiens l'image ci

    Nom : resultat.jpg
Affichages : 77
Taille : 28,3 Ko

    Au lieu d'une image comme celle ci

    Nom : uti.PNG
Affichages : 75
Taille : 10,4 Ko

    Et aussi a la ligne 86 du fichier ou je teste le code j'obtiens "Notice: Undefined offset: 1" je ne comprends pas

    S'il vous plait priere de regarde mon code et me dire ce qui ne va pas

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    La ligne 86 étant if ($TableauCopie[$x][$y] == 0) {, "undefined offset" signifie que l'index 1 n'existe pas soit dans le tableau principal, soit dans le tableau imbriqué.
    Donc il ne peut pas déterminer la valeur à comparer et utilise la valeur par défaut (null)
    Et comme les comparaisons font des conversions automatiques, tu te retrouves avec une condition validée (parce que en PHP null == 0 )

    La question maintenant est de trouver pourquoi tu n'as de valeur pour l'index 1.
    Au passage, à quoi te sert le tableau $TableauRecopie, vu que c'est $TableauCopie qui est utilisé pour écrire l'image N'ya-t-il pas une coquille à cet endroit ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2018
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Bonsoir Celira, j'ai pu avance avec mon probleme et j'ai resolu les probleme lier au Undefined Offset.

    Maintenant je suis bloquer, j'ai appliquer normalement l'algorithme de Zhang et Suen d'ailleurs voici les conditions necessaires la

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     
     
    <?php
     
    	function pixel_est_noir($Tab, $x, $y)
    	{
    		if($Tab[$x][$y] == 1)
    			return true;
     
    		return false;
    	}
     
    	function pixel_a_2_a_6_voisin_noir($Tab, $x, $y)
    	{
     
    		$voisin = ($Tab[$x][$y-1] + $Tab[$x+1][$y-1] + $Tab[$x+1][$y] + $Tab[$x+1][$y+1] + $Tab[$x][$y-1] + $Tab[$x-1][$y+1] + $Tab[$x+1][$y] + $Tab[$x-1][$y-1]);
     
    		if ( $voisin >= 2 && $voisin <= 6) {
     
    			return true;
    		}
     
    		else
    			return false;
    	}
     
     
    	function pixel_a_au_moins_une_transition_blanc_noir($Tab, $x, $y)
    	{
    		$Tab2 = array();
    		$transition = 0;
     
    		$Tab2 = [$Tab[$x][$y+1],$Tab[$x+1][$y+1],$Tab[$x+1][$y],$Tab[$x+1][$y-1],$Tab[$x][$y-1],$Tab[$x-1][$y-1],$Tab[$x-1][$y],$Tab[$x-1][$y+1],$Tab[$x][$y+1]];
     
    		for ($i=0; $i <= (count($Tab2)-2) ; $i++) { 
     
     
    				if ($Tab2[$i] == 0 && $Tab2[$i+1] == 1) {
     
    					$transition = $transition+1;
    				}
    			}
     
     
    		if ($transition == 1) {
     
    			return true;
    		}
     
    		else
     
    			return false;
     
    	}
     
    	function au_moins_p2_p4_p6_est_blanc($Tab, $x, $y)
    	{
    		if (($Tab[$x][$y+1] * $Tab[$x+1][$y] * $Tab[$x][$y-1] )== 0) {
     
    			return true;
    		}
    		else
    			return false;
    	}
     
    	function au_moins_p4_p6_p8_est_blanc($Tab, $x, $y)
    	{
    		if (($Tab[$x+1][$y]  * $Tab[$x][$y-1] * $Tab[$x-1][$y]) == 0) {
     
    			return true;
    		}
    		else
    			return false;
    	}
     
    	function au_moins_p2_p4_p8_est_blanc($Tab, $x, $y)
    	{
    		if (($Tab[$x][$y+1] * $Tab[$x+1][$y] * $Tab[$x-1][$y]) == 0) {
     
    			return true;
    		}
    		else
    			return false;
     
    	}
     
    	function au_moins_p2_p6_p8_est_blanc($Tab, $x, $y)
    	{
    		if (($Tab[$x][$y+1] * $Tab[$x][$y-1] * $Tab[$x-1][$y]) == 0) {
     
    			 return true;
    		}
     
    		else 
    			return false;
    	}
     
    	//retournes true si les tableaux sont differents
    	function compareTableau($Tab,$Tab2,$width,$heigth)
    	{
    		for ($x=1; $x <$width - 1 ; $x++) { 
    			for ($y=1; $y <$heigth - 1 ; $y++) {
     
    				if ($Tab[$x][$y] != $Tab2[$x][$y]) {
     
    					return true;
    				}
    			}
    		}
     
    		return false;
    	}
    ?>
    Et j'applique cesconditions ici

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
     
    <?php
     
    	require '../salut/FonctionSquelettisation.php';
     
    	$image = imagecreatefromjpeg('resultat1.jpg');
    	$width = imagesx($image);
    	$heigth = imagesy($image);
    	$imgFinal = imagecreatetruecolor($width, $heigth);
     
    	$Tableau = array(array());
    	$TableauCopie = array(array());
     
     
     
    	for ($x=0; $x <$width ; $x++) { 
    		for ($y=0; $y <$heigth ; $y++) { 
     
    				$pixel = imagecolorat($image, $x, $y);
     
     
    				$black = imagecolorallocate($imgFinal, 0, 0, 0); // Couleur noir
        			$white = imagecolorallocate($imgFinal, 255, 255, 255); // couleur blanche
     
                    if ($pixel == $black) {
     
                		$Tableau[$x][$y] = 1;
                	}
     
                	else {
     
                		$Tableau[$x][$y]=0;
                	}
            }
    	}
     
    	$TableauCopie = $Tableau;
     
    	while (1) {
     
    		$Tableau = $TableauCopie;
     
    		$TableauRecopie = array();
     
    		for ($x=1; $x <$width - 1 ; $x++) { 
    			for ($y=1; $y <$heigth - 1 ; $y++) { 
     
    				if (pixel_est_noir($TableauCopie,$x,$y) && pixel_a_2_a_6_voisin_noir($TableauCopie, $x, $y) && pixel_a_au_moins_une_transition_blanc_noir($TableauCopie, $x, $y) && au_moins_p2_p4_p6_est_blanc($TableauCopie, $x, $y) && au_moins_p4_p6_p8_est_blanc($TableauCopie, $x, $y)){
     
    						$TableauRecopie[$x][$y]  = $TableauCopie[$x][$y];
    				}
     
    			}
    		}
     
    		 for ($x=1; $x <$width - 1 ; $x++) { 
    		 	for ($y=1; $y <$heigth - 1 ; $y++) {
     
    		 		if (isset($TableauRecopie[$x][$y])) {
     
    		 			$TableauCopie[$x][$y] = 0;
    		 		}
     
    		 	}
    		 }
     
    		 $TableauRecopie = array();
     
    		for ($x=1; $x <$width - 1 ; $x++) { 
    			for ($y=1; $y <$heigth - 1 ; $y++) {
     
    				if (pixel_est_noir($TableauCopie,$x,$y) && pixel_a_2_a_6_voisin_noir($TableauCopie,$x,$y) && pixel_a_au_moins_une_transition_blanc_noir($TableauCopie,$x,$y) && au_moins_p2_p4_p8_est_blanc($TableauCopie,$x,$y) && au_moins_p2_p6_p8_est_blanc($TableauCopie,$x,$y)) {
     
    						$TableauRecopie[$x][$y]  = $TableauCopie[$x][$y];
    				}
    			}
    		}
     
    		 for ($x=1; $x <$width - 1 ; $x++) { 
    		 	for ($y=1; $y <$heigth - 1 ; $y++) {
     
    		 		if (isset($TableauRecopie[$x][$y])) {
     
    		 			$TableauCopie[$x][$y] = 0;
    		 		}
     
    		 	}
    		 }
     
    		if (compareTableau($Tableau,$TableauCopie,$width,$heigth) == false) {
    			break;
    		}
     
    	}
     
     
     
    	for ($x=0; $x <$width ; $x++) { 
    		for ($y=0; $y <$heigth; $y++) { 
     
    			if ($TableauCopie[$x][$y] == 1) {
     
    				imagesetpixel($imgFinal, $x, $y, $black);
     
    			}
     
    			else  {
    				imagesetpixel($imgFinal, $x, $y, $white);
    		}
    	}
     
    }
     
    	imagejpeg($imgFinal,'Image/bi1.jpg');
    	imagedestroy($imgFinal);
     
     
    ?>
    Apres execution je n'obtiens aucune erreurs ou notice ce qui est plutot bien . Mais je me pose les questions de savoir si l'algorithme est bon quand je vois le resultat
    puisque j'obtiens a partir de l'image ci
    Pièce jointe 485248

    Ce resultat

    Pièce jointe 485256

    Au lieu d'un resultat comme celui ci

    Pièce jointe 485261

    Je me pose la question de savoir si l'erreur viens de ma traduction de l'algorithme en php ou alors si l'algorithme est mauvais, chose dont je doute fortement !

    Raison pour laquelle je poste mon code ici afin que vous voyez si l'erreur est plutot dans mon code.

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Niveau algorithme, je ne peux pas vraiment t'aider, mais tu peux essayer de tester avec une petite image (genre 5x5 pixels) que tu crées à la main via Paint (ou équivalent) de façon à pouvoir faire des debugs des différentes valeurs.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2018
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Probleme resolu avec succes
    Merci pour ton attention,j'ai pu resoudre mon probleme et il se trouvais au niveau de l'algorithme de binairisation de l'image, je l'ai modifier et tout marche parfaitement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Insérer une image en PHP
    Par ®om dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 07/08/2006, 15h53
  2. [ImageMagick] Apposer un logo à une image en PHP - Problème de couleurs
    Par Saiyan dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 25/07/2006, 18h17
  3. Réponses: 6
    Dernier message: 14/06/2006, 22h31
  4. Afficher une image avec PHP
    Par a_zouggari dans le forum Langage
    Réponses: 2
    Dernier message: 22/04/2006, 18h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo