⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 二维卷积运算之c语言实现.txt

📁 c语言的一些常见的算法以及思考和改进的文章,写的很不错,花费了很大的精力从网络了搜罗的,希望大家喜欢.
💻 TXT
字号:
二维卷积运算之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<N1+N2-1;i++)
     for(j=0;j<M1+M2-1;j++)
     {
         int temp=0;
         for(m=0;m<N1;m++)
               for(n=0;n<M1;n++)
                     if((i-m)>=0&&(i-m)<N2&&(j-n)>=0&&(j-n)<M2)
                                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<n;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);
}
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -