单核通道单卷积

yummy 阅读:385 2022-03-30 22:12:28 评论:0
#include<stdio.h>

/*输入图像5*5
   1 1 1 0 0
   0 1 1 1 0
   0 0 1 1 1
   0 0 1 1 0
   0 1 1 0 0 
*/
/*卷积核大小3*3
   1 0 1
   0 1 0
   1 0 1
*/
//padding :0 不填充 
//step :1 步长 

//单通道 单卷积 
#define  CONV_IMG_IN_SIZE 5
#define  CONV_W_SIZE 3
#define  CONV_IMG_OUT_SIZE 3
int conv(float img_in[CONV_IMG_IN_SIZE][CONV_IMG_IN_SIZE],float w[CONV_W_SIZE][CONV_W_SIZE],float img_out[CONV_IMG_OUT_SIZE][CONV_IMG_OUT_SIZE]) 
{
	int i,j,k,r; 
	float temp;
	
	//滑动卷积
	for(k=0;k<CONV_IMG_OUT_SIZE;k++)//行 
	{
		for(r=0;r<CONV_IMG_OUT_SIZE;r++)//列 
		{
			//平面卷积计算 
			temp = 0.0;
	        for(i=0;i<CONV_W_SIZE;i++)//行 
	        {
		       for(j=0;j<CONV_W_SIZE;j++)//列 
		       {
			    temp += img_in[i+k][j+r] * w[i][j];
		        }
	        }
	    img_out[k][r] = temp ;
        }
	} 
	return 0 ;
}
	
void conv_test()
{
	float img_in[CONV_IMG_IN_SIZE][CONV_IMG_IN_SIZE]={1,1,1,0,0,
                                                      0,1,1,1,0,
                                                      0,0,1,1,1,
                                                      0,0,1,1,0,
                                                      0,1,1,0,0};
    float w[CONV_W_SIZE][CONV_W_SIZE]={1,0,1,
                                       0,1,0,
                                       1,0,1};
	float img_out[CONV_IMG_OUT_SIZE][CONV_IMG_OUT_SIZE]	={0};
	int i,j;
	conv(img_in,w,img_out);
	printf("输入图片:\n");
	for(i=0;i<5;i++)
	{
	   for(j=0;j<5;j++)
	   {
	   	   printf("%.1f ",img_in[i][j]);
	   }
	   printf("\n");	
	}
   printf("输出图片:\n");
   for(i=0;i<3;i++)
   {
   	   for(j=0;j<3;j++)
   	   {
   	   	    printf("%.1f ",img_out[i][j]);
	   }
	   printf("\n");
   }  								                                                     
}

int main()
{
	conv_test();
	return 0;
 }

image.png

本文 zblog模板 原创,转载保留链接!网址:http://xn--zqqs03dbu6a.cn/?id=10

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。