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
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
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 .
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];