Résoudre la question de la limite dans c
Question
J'écris un programme de lissage de l'image qui utilise des filtres moyens, mais je ne peux pas sembler corriger les deux derniers problèmes de limites.J'utilise des entiers au lieu d'une image.J'ai pour les 1 coins de la main gauche retourner les valeurs appropriées, ainsi que les entiers moyens, les entiers latéraux gauche et les entiers supérieurs et inférieurs.Actuellement, je suis coincé sur le côté droit des entiers causant des problèmes de limites.
void side2(int a[10][20], int c[10][20], int m, int n)
{
int i,j;
for (i=1;i<m-1;i++) {
for (j=0;j<n-1;j++) {
c[i][j]=(0+0+a[i-1][j]+a[i+1][j]+a[i][j+1])/3;
}
}
}
Ceci est juste la fonction qui calcule le côté droit et non ni des coins.
Voici la sortie que je reçois.L'utilisateur est invité à entrer un numéro pour les colonnes et les lignes, ceci génère une matrice de nombres aléatoires suivie de l'image lissée avec les résultats du filtre moyen.Comme vous pouvez le voir, le côté droit est louficiel, et je ne peux pas sembler trouver les bonnes valeurs pour les frontières.Peut-on peut-être m'aider à trouver les limites appropriées afin que je puisse arrêter de recevoir ces numéros farfelu.
please enter number of columns and rows
5 5
66 49 74 73 44
47 73 69 27 97
96 63 79 68 35
82 86 28 22 14
59 3 24 5 22
The smoothed image is
48 71 63 482009141880
78 60 60 79764514
64 79 55 28696626048
80 31 41 29 19
42 56 12 222009815
La solution
Vous devez écrire quelque chose à la frontière où vous ne pouvez pas faire le filtre.Actuellement, vous n'écrivez rien à, par exemple, c[1][n-1]
, vous obtenez donc simplement une indemnisation ininitialisée.