二维卷积c代码

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

这里直接给出参考代码:

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][n]*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");
}
时间: 2024-11-09 04:35:50

二维卷积c代码的相关文章

图像处理之基础---二维卷积运算原理剖析

卷积运算(Convolution)是通过两个函数f 和g 生成第三个函数的一种数学算子,表示函数f 与经过翻转和平移与g 的重叠部分的累积.如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是“滑动平均”的推广.假设: f(x),g(x)是R1上的两个可积函数,并且积分是存在的.这样,随着 x 的不同取值,这个积分就定义了一个新函数h(x),称为函数f 与g 的卷积,记为h(x)=(f*g)(x). 两个向量卷积,说白了就是多项式乘法.下面用个矩阵例子说明其工作原理: a和d的卷积就是

二维卷积的基本原理

二维卷积的基本原理

css控制右侧二维码浮动代码

<!--请将以下这段代码放到网页中您想要显示固定图标的位置--> <div id="FloatDIV" style="position: absolute;top: 0px; border-right: activeborder 1px solid; border-top: activeborder 1px solid; border-left: activeborder 1px solid; border-bottom: activeborder 1px

卷积神经网络(CNN)之一维卷积、二维卷积、三维卷积详解

由于计算机视觉的大红大紫,二维卷积的用处范围最广.因此本文首先介绍二维卷积,之后再介绍一维卷积与三维卷积的具体流程,并描述其各自的具体应用. 二维卷积 一维卷积 三维卷积 原文地址:https://www.cnblogs.com/szxspark/p/8445327.html

二维卷积层

from mxnet import gluon,init from mxnet.gluon import nn,loss as gloss from mxnet.gluon import data as gdata from mxnet import autograd,nd # 二维互相关运算 def corr2d(X, K): h, w = K.shape Y = nd.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1)) for i in range

网页嵌入自动生成当前网页二维码图片代码

利用谷歌api的代码可以方便的嵌入:支持静动态网页 魅力网络整理代码如下: <script type="text/javascript">   thisURL = document.URL;   strwrite =  "<img src='https://chart.googleapis.com/chart?cht=qr&chs=150x150&choe=UTF-8&chld=L|4&chl="  + thisUR

MVC二维码生成代码

第一步:下载ThoughtWorks.QRCode.dll   建议用这个版本的:1.0.2774.19990 下载路径:https://dl.pconline.com.cn/download/1407628-1.html 第二部封装一个类:引用 ThoughtWorks.QRCode.dll  控件 /// <summary> /// 二维码生成 /// </summary> public class QrCodeHelper { #region 保存图片 /// <sum

JAVA生成二维码图片代码

首先需要导入 QRCode.jar 包 下载地址看这里   http://pan.baidu.com/s/1o6qRFqM import java.awt.Color;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.UnsupportedEncoding

二维卷积运算工作原理剖析(转载)

卷积运算(Convolution)是通过两个函数f 和g 生成第三个函数的一种数学算子,表示函数f 与经过翻转和平移与g 的重叠部分的累积.如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是"滑动平均"的推广.假设: f(x),g(x)是R1上的两个可积函数,并且积分是存在的.这样,随着 x 的不同取值,这个积分就定义了一个新函数h(x),称为函数f 与g 的卷积,记为h(x)=(f*g)(x). 两个向量卷积,说白了就是多项式乘法.下面用个矩阵例子说明其工作原理: a和d