二维卷积c代码
2015-06-19 19:30
337 查看
二维卷积c代码
二维信号的卷积原理请参考另外一篇文章:http://blog.csdn.net/carson2005/article/details/43702241
这里直接给出参考代码:
[cpp] view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
void Conv2(int** filter, int** arr, int** res, int filterW, int filterH, int arrW, int arrH)
{
int temp;
for (int i=0; i<filterH+arrH-1; i++)
{
for (int j=0; j<filterW+arrW-1; j++)
{
temp = 0;
for (int m=0; m<filterH; m++)
{
for (int n=0; n<filterW; n++)
{
if ((i-m)>=0 && (i-m)<arrH && (j-n)>=0 && (j-n)<arrW)
{
temp += filter[m]
*arr[i-m][j-n];
}
}
}
res[i][j] = temp;
}
}
}
void Conv2Test()
{
int filterW = 3;
int filterH = 3;
int arrW = 5;
int arrH = 5;
int resW = filterW + arrW - 1;
int resH = filterH + arrH - 1;
int** pFilter = new int*[filterH];
for (int i=0; i<filterH; i++)
{
pFilter[i] = new int[filterW];
}
int** arr = new int*[arrH];
for (int i=0; i<arrH; i++)
{
arr[i] = new int[arrW];
}
int** res = new int*[resH];
for (int i=0; i<resH; i++)
{
res[i] = new int[resW];
}
pFilter[0][0] = 1;
pFilter[0][1] = 3;
pFilter[0][2] = 1;
pFilter[1][0] = 0;
pFilter[1][1] = 5;
pFilter[1][2] = 0;
pFilter[2][0] = 2;
pFilter[2][1] = 1;
pFilter[2][2] = 2;
arr[0][0] = 17;
arr[0][1] = 24;
arr[0][2] = 1;
arr[0][3] = 8;
arr[0][4] = 15;
arr[1][0] = 23;
arr[1][1] = 5;
arr[1][2] = 7;
arr[1][3] = 14;
arr[1][4] = 16;
arr[2][0] = 4;
arr[2][1] = 6;
arr[2][2] = 13;
arr[2][3] = 20;
arr[2][4] = 22;
arr[3][0] = 10;
arr[3][1] = 12;
arr[3][2] = 19;
arr[3][3] = 21;
arr[3][4] = 3;
arr[4][0] = 11;
arr[4][1] = 18;
arr[4][2] = 25;
arr[4][3] = 2;
arr[4][4] = 9;
printf("pFilter: \n");
for (int i=0; i<filterH; i++)
{
for (int j=0; j<filterW; j++)
{
printf("%d ", pFilter[i][j]);
}
printf("\n");
}
printf("*********************************************** \n");
printf("arr: \n");
for (int i=0; i<arrH; i++)
{
for (int j=0; j<arrW; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
printf("*********************************************** \n");
Conv2(pFilter, arr, res, filterW, filterH, arrW, arrH);
printf("res: \n");
for (int i=0; i<resH; i++)
{
for (int j=0; j<resW; j++)
{
printf("%d ", res[i][j]);
}
printf("\n");
}
printf("*********************************************** \n");
}
二维信号的卷积原理请参考另外一篇文章:http://blog.csdn.net/carson2005/article/details/43702241
这里直接给出参考代码:
[cpp] view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
void Conv2(int** filter, int** arr, int** res, int filterW, int filterH, int arrW, int arrH)
{
int temp;
for (int i=0; i<filterH+arrH-1; i++)
{
for (int j=0; j<filterW+arrW-1; j++)
{
temp = 0;
for (int m=0; m<filterH; m++)
{
for (int n=0; n<filterW; n++)
{
if ((i-m)>=0 && (i-m)<arrH && (j-n)>=0 && (j-n)<arrW)
{
temp += filter[m]
*arr[i-m][j-n];
}
}
}
res[i][j] = temp;
}
}
}
void Conv2Test()
{
int filterW = 3;
int filterH = 3;
int arrW = 5;
int arrH = 5;
int resW = filterW + arrW - 1;
int resH = filterH + arrH - 1;
int** pFilter = new int*[filterH];
for (int i=0; i<filterH; i++)
{
pFilter[i] = new int[filterW];
}
int** arr = new int*[arrH];
for (int i=0; i<arrH; i++)
{
arr[i] = new int[arrW];
}
int** res = new int*[resH];
for (int i=0; i<resH; i++)
{
res[i] = new int[resW];
}
pFilter[0][0] = 1;
pFilter[0][1] = 3;
pFilter[0][2] = 1;
pFilter[1][0] = 0;
pFilter[1][1] = 5;
pFilter[1][2] = 0;
pFilter[2][0] = 2;
pFilter[2][1] = 1;
pFilter[2][2] = 2;
arr[0][0] = 17;
arr[0][1] = 24;
arr[0][2] = 1;
arr[0][3] = 8;
arr[0][4] = 15;
arr[1][0] = 23;
arr[1][1] = 5;
arr[1][2] = 7;
arr[1][3] = 14;
arr[1][4] = 16;
arr[2][0] = 4;
arr[2][1] = 6;
arr[2][2] = 13;
arr[2][3] = 20;
arr[2][4] = 22;
arr[3][0] = 10;
arr[3][1] = 12;
arr[3][2] = 19;
arr[3][3] = 21;
arr[3][4] = 3;
arr[4][0] = 11;
arr[4][1] = 18;
arr[4][2] = 25;
arr[4][3] = 2;
arr[4][4] = 9;
printf("pFilter: \n");
for (int i=0; i<filterH; i++)
{
for (int j=0; j<filterW; j++)
{
printf("%d ", pFilter[i][j]);
}
printf("\n");
}
printf("*********************************************** \n");
printf("arr: \n");
for (int i=0; i<arrH; i++)
{
for (int j=0; j<arrW; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
printf("*********************************************** \n");
Conv2(pFilter, arr, res, filterW, filterH, arrW, arrH);
printf("res: \n");
for (int i=0; i<resH; i++)
{
for (int j=0; j<resW; j++)
{
printf("%d ", res[i][j]);
}
printf("\n");
}
printf("*********************************************** \n");
}
相关文章推荐
- python函数式编程――偏函数
- JAVA推箱子游戏(一)
- Java学习日记之掌控硬盘(1)
- qt和MySQL连接验证
- Windows下,Netbeans使用C++的配置方法
- ruby脚本,随机生成复杂密码
- php中\r \r\n \t的区别
- Eclipse各种抓狂问题集锦(一)
- MATLAB conv2卷积的实现
- OC2_ARC MRC混合编程
- 基本语法 protocols Category extension
- 练习代码(一)初始化与清理
- Java小白手记:SSH
- Java小白手记:SSH
- JAVA判断文件编码类型
- 《梦断代码》阅读笔记3
- Category和Extension
- Java环境变量设置
- [置顶] java版多线程下载
- [置顶] 自动更具数据库表来生成.java文件的小工具