Produit de convolution [Résolu]

alka - 12 mai 2016 à 15:58 - Dernière réponse : cs_louis14 789 Messages postés mardi 8 juillet 2003Date d'inscription 8 mars 2017 Dernière intervention
- 23 mai 2016 à 10:40
Bonjour,
j'ai voulu faire le produit de convolution d'une image par une matrice carrée d'ordre 3 voici la procédure. j'ai besoins de votre coup de main pourqu'il marche

Mat produit(Mat im ,int tab[3][3])
{
 Mat dset;
 int somme = 0;
 for (int i =1; i <= im.rows; i++)
 {
  for (int j = 1; j <= im.cols; j++)
  {
   for (int x = 1; x <= 3; x++)
   {
    for (int y = 1; y <= 3; y++)
    {
   somme = somme + (int)im.at<uchar>[i][j] * tab[y + i][x + j];
    }
   }
   dset = somme;
  }
 }
 return dset;
}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 

3 réponses

Répondre au sujet
cs_louis14 789 Messages postés mardi 8 juillet 2003Date d'inscription 8 mars 2017 Dernière intervention - 18 mai 2016 à 08:34
0
Utile
Bonjour,
Il faut déjà revoir les points suivants
1. il faudrait commencer à utiliser les bons indices des tableaux en sachant qu'ils commencent toujours à 0.
Remplace déjà toutes les instructions "for" par
for (int x = 0; x < Taille_tableau; i++)
{

}

2.Ensuite il y a la déclaration de dset qui doit prendre la même taille que l'image. L'allocation dynamique du tableau avec les paramètres de l'image est nécessaire.
3.En dernier lieu ,il faut affecter la somme à la case dset traitée
dset[i][j] = somme;

4. il faut normaliser la somme par rapport au nombre de points de la matrice de convolution , ici 9 .
dset[i][j] = somme/9;


Bonne suite de codage.
Commenter la réponse de cs_louis14
0
Utile
merci de votre réponse cs_Louis mais j'ai pas compris la méthode de remplacement de toutes les boucles " for " par
for (int x = 0; x < Taille_tableau; i++)
{

}si possible corrigé moi le code afin de bien marché. aussi j'ai réfléchi pour une autre méthode elle aussi elle a de lacune là voila
void produit2(int A[100][100] ,int tab[3][3])
{
int som = 0 ,mm,nn,ii,jj;
for (int i =0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
for (int x = 0; x < 3; x++)
{
xx = 3-1-x;
for (int y = 0; y < 3; y++)
{
yy = 3-1-y;
ii = i+(x - 3/2);
jj = j+(y - 3/2);
if( ii>=0 && ii<5 && jj >= 0 && jj <5)
som += A[ii][jj] * tab[xx][yy];

}
}
P[i][j] = som;
}
}
}
Commenter la réponse de alka
cs_louis14 789 Messages postés mardi 8 juillet 2003Date d'inscription 8 mars 2017 Dernière intervention - 23 mai 2016 à 10:40
0
Utile
Rebonjour,
Ton premier problème vient du fait que dans tes boucles, tu ne commences pas à l'indice 0. Les indices des tableaux sont toujours de 0 à taille-1.
Je pense qu'il faut que tu fasses ton code tout seul, sinon il suffit d'utiliser notre ami Google pour trouver le code qui existe sur pas mal de site de traitement d'image.
Bonne continuation
Commenter la réponse de cs_louis14

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.