平均フィルターを使用して画像を滑らかにするプログラムを書いています。現在、実際の画像を使用しておらず、整数のみを使用しています。問題は、左隅の数値の平均、左側の数値の平均、および中央の数値の平均を取得できることですが、結果を出力するとき、マトリックスに出力しません。
元。ユーザーは行と列の番号を求められます:入力は5と5で、5x5の行列が出力されます
しかし、私は上から下への方法で平均のためにこれらの結果を得ています
50
50
71
65
61
48 64 57
59 26 61
43 63 20
私が達成しようとしている出力は
50
71 48 64 57
65 59 26 61
61 43 63 20
明らかに、これは、マトリックスの残りの部分の平均をまだプログラムしていないことを考えると、完成品ではありませんが、このフォーマットの問題が私を悩ませています。
ここにコードがあります:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
// function that randomly generates numbers
void fillArray(int a[10][20], int m, int n)
{
int random;
int i,j;
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
random=rand()%100;
a[i][j]=random;
}
}
}
// function that prints the first matrix of random numbers
void printarray (int a[10][20], int m, int n)
{
int i,j;
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
}
// function that finds the mean for any number and its 4 nieghbors
void corner1 (int a[10][20], int n, int m)
{
int c[10][20];
int i,j;
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
if (i<=0 && j<=0)
{
c[i][j]=(a[i+1][j]+a[i][j+1])/2;
printf("%4d",c[i][j]);
}
}
}
printf("\n");
}
void middle(int a[10][20], int n, int m)
{
int c[10][20];
int i,j;
for (i=1;i<m-1;i++)
{
for (j=1;j<n-1;j++)
{
c[i][j]=(a[i-1][j]+a[i][j-1]+a[i+1][j]+a[i][j+1])/4;
printf("%4d",c[i][j]);
}
printf("\n");
}
}
void side1 (int a[10][20], int n, int m)
{
int c[10][20];
int i,j;
for (i=1;i<m;i++)
{
for (j=0;j<n-1;j++)
{
if (i<=1&&j>=0)
{
c[i][j]=(0+0+a[i-1][j]+a[i+1][j]+a[i][j+1])/3;
printf("%4d",c[i][j]);
printf("\n");
}
}
}
}
int main()
{
int a[10][20];
int m,n;
srand(time(NULL));
//User input
printf("please enter number of rows and columns\n");
scanf("%d %d", &m,&n);
fillArray(a,m,n);
printarray (a,m,n);
printf("The smoothed image is\n");
side1(a,m,n);
corner1(a,m,n);
middle (a,m,n);
getch();
return 0;
}