二维卷积c代码

二维信号的卷积原理请参考另外一篇文章:http://blog.csdn.net/carson2005/article/details/43702241

这里直接给出参考代码:

 

 

[cpp] view plaincopy二维卷积c代码二维卷积c代码

 
  1. void Conv2(int** filter, int** arr, int** res, int filterW, int filterH, int arrW, int arrH)  
  2. {  
  3.     int temp;  
  4.   
  5.     for (int i=0; i<filterH+arrH-1; i++)  
  6.     {  
  7.         for (int j=0; j<filterW+arrW-1; j++)  
  8.         {  
  9.             temp = 0;  
  10.             for (int m=0; m<filterH; m++)  
  11.             {  
  12.                 for (int n=0; n<filterW; n++)  
  13.                 {  
  14.                     if ((i-m)>=0 && (i-m)<arrH && (j-n)>=0 && (j-n)<arrW)  
  15.                     {  
  16.                         temp += filter[m][n]*arr[i-m][j-n];  
  17.                     }  
  18.                 }  
  19.             }  
  20.             res[i][j] = temp;  
  21.         }  
  22.     }  
  23. }  
  24.   
  25. void Conv2Test()  
  26. {  
  27.     int filterW = 3;  
  28.     int filterH = 3;  
  29.     int arrW = 5;  
  30.     int arrH = 5;  
  31.     int resW = filterW + arrW - 1;  
  32.     int resH = filterH + arrH - 1;  
  33.   
  34.     int** pFilter = new int*[filterH];  
  35.     for (int i=0; i<filterH; i++)  
  36.     {  
  37.         pFilter[i] = new int[filterW];  
  38.     }  
  39.   
  40.     int** arr = new int*[arrH];  
  41.     for (int i=0; i<arrH; i++)  
  42.     {  
  43.         arr[i] = new int[arrW];  
  44.     }  
  45.   
  46.     int** res = new int*[resH];  
  47.     for (int i=0; i<resH; i++)  
  48.     {  
  49.         res[i] = new int[resW];  
  50.     }  
  51.   
  52.     pFilter[0][0] = 1;  
  53.     pFilter[0][1] = 3;  
  54.     pFilter[0][2] = 1;  
  55.     pFilter[1][0] = 0;  
  56.     pFilter[1][1] = 5;  
  57.     pFilter[1][2] = 0;  
  58.     pFilter[2][0] = 2;  
  59.     pFilter[2][1] = 1;  
  60.     pFilter[2][2] = 2;  
  61.   
  62.     arr[0][0] = 17;  
  63.     arr[0][1] = 24;  
  64.     arr[0][2] = 1;  
  65.     arr[0][3] = 8;  
  66.     arr[0][4] = 15;  
  67.     arr[1][0] = 23;  
  68.     arr[1][1] = 5;  
  69.     arr[1][2] = 7;  
  70.     arr[1][3] = 14;  
  71.     arr[1][4] = 16;  
  72.     arr[2][0] = 4;  
  73.     arr[2][1] = 6;  
  74.     arr[2][2] = 13;  
  75.     arr[2][3] = 20;  
  76.     arr[2][4] = 22;  
  77.     arr[3][0] = 10;  
  78.     arr[3][1] = 12;  
  79.     arr[3][2] = 19;  
  80.     arr[3][3] = 21;  
  81.     arr[3][4] = 3;  
  82.     arr[4][0] = 11;  
  83.     arr[4][1] = 18;  
  84.     arr[4][2] = 25;  
  85.     arr[4][3] = 2;  
  86.     arr[4][4] = 9;  
  87.   
  88.     printf("pFilter: n");  
  89.     for (int i=0; i<filterH; i++)  
  90.     {  
  91.         for (int j=0; j<filterW; j++)  
  92.         {  
  93.             printf("%d ", pFilter[i][j]);  
  94.         }  
  95.         printf("n");  
  96.     }  
  97.     printf("*********************************************** n");  
  98.   
  99.     printf("arr: n");  
  100.     for (int i=0; i<arrH; i++)  
  101.     {  
  102.         for (int j=0; j<arrW; j++)  
  103.         {  
  104.             printf("%d ", arr[i][j]);  
  105.         }  
  106.         printf("n");  
  107.     }  
  108.     printf("*********************************************** n");  
  109.   
  110.   
  111.     Conv2(pFilter, arr, res, filterW, filterH, arrW, arrH);  
  112.   
  113.     printf("res: n");  
  114.     for (int i=0; i<resH; i++)  
  115.     {  
  116.         for (int j=0; j<resW; j++)  
  117.         {  
  118.             printf("%d ", res[i][j]);  
  119.         }  
  120.         printf("n");  
  121.     }  
  122.     printf("*********************************************** n");  
  123. }