二维卷积运算C语言实现过程
二维卷积运算之C 语言实现
若x 为N1*M1的二维信号,y 为N2*M2的二维信号,则卷积为(N1+N2-1)*(M1+M2-1)的信号 z(i,j)=∑ ∑ x(m,n)y(i-m,j-n)
........m n
#define N1 8 信号1的行
#define M1 10 信号1的列
#define N2 2 信号2的行
#define M2 3 信号2的列
void juanji(int x[N1][M1],int y[N2][M2],int z[N1+N2-1][M1+M2-1])
{
int i,j;
int n,m;
for(i=0;i
for(j=0;j
{
int temp=0;
for(m=0;m
for(n=0;n
if((i-m)>=0&&(i-m)=0&&(j-n)
temp+=x[m][n]*y[i-m][j-n];
z[i][j]=temp;
}
}
void output(int array[],int n,int m)
{
int i;
for(i=0;i
{
if(i%m==0)
printf("\n\n");
printf("%4d",array[i]);
}
}
void main()
{
int x[N1][M1]={{1,2,3,4,5,6,7,8,9,0} ,{2,3,4,5,6,7,8,9,0,1}
,{3,4,5,6,7,8,9,0,1,2}
,{4,5,6,7,8,9,0,1,2,3}
,{5,6,7,8,9,0,1,2,3,4}
,{6,7,8,9,0,1,2,3,4,5}
,{7,8,9,0,1,2,3,4,5,6}
,{8,9,0,1,2,3,4,5,6,7}};
int y[N2][M2]={{1,2,3}
,{2,3,1}};
int z[N1+N2-1][M1+M2-1]={0};
juanji(x,y,z);
output(x,N1*M1,M1);
output(y,N2*M2,M2);
output(z,(N1+N2-1)*(M1+M2-1),M1+M2-1); }