计算机视觉
图像处理

二维卷积

这里直接给出参考代码:

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

转载注明来源:CV视觉网 » 二维卷积

分享到:更多 ()
扫描二维码,给作者 打赏
pay_weixinpay_weixin

请选择你看完该文章的感受:

0不错 0超赞 0无聊 0扯淡 0不解 0路过

评论 5

评论前必须登录!