#include<stdio.h>
#define IN_SIZE 4
#define OUT_SIZE 2
/******************单次池化,最大池化 ********************************************/
int pool_max(float in_img[IN_SIZE][IN_SIZE],float out_img[OUT_SIZE][OUT_SIZE])
{
int i,j;
float temp1,temp2,temp3;
for(i=0;i<IN_SIZE;i+=2)
{
for(j=0;j<IN_SIZE;j+=2)
{
temp1=in_img[i][j] > in_img[i][j+1] ? in_img[i][j] : in_img[i][j+1];//2 4 10 12
temp2=in_img[i][j] > in_img[i+1][j] ? in_img[i][j] : in_img[i+1][j];//5 7 13 15
temp3=temp1>temp2?temp1:temp2;//5 7 13 15
out_img[i/2][j/2]=temp3;//5 7 13 15
}
}
}
/************************单次池化,平均池化 ******************************************/
int pool_min(float in_img[IN_SIZE][IN_SIZE],float out_img[OUT_SIZE][OUT_SIZE])
{
int i,j;
float temp1,temp2,temp3;
for(i=0;i<IN_SIZE;i+=2)
{
for(j=0;j<IN_SIZE;j+=2)
{
temp1=in_img[i][j] + in_img[i][j+1] ;
temp2=in_img[i+1][j] + in_img[i+1][j+1];
temp3=(temp1+temp2)/4;
out_img[i/2][j/2]=temp3;
}
}
}
/****************测试*************************************************/
int pool_test()
{
int i,j;
float in_img[IN_SIZE][IN_SIZE]={1,2,3,4,
5,6,7,8,
9,10,11,12,
13,14,15,16};
float out_img[OUT_SIZE][OUT_SIZE]={0};
/***************最大池化******************************/
pool_max(in_img,out_img) ;
printf("最大池化\n");
printf("输入图片\n");
for(i=0;i<IN_SIZE;i++)
{
for(j=0;j<IN_SIZE;j++)
{
printf("%.1f\t",in_img[i][j]);
}
printf("\n");
}
printf("输出图片\n");
for(i=0;i<OUT_SIZE;i++)
{
for(j=0;j<OUT_SIZE;j++)
{
printf("%.1f\t",out_img[i][j]);
}
printf("\n");
}
/***************平均池化****************************/
pool_min(in_img,out_img) ;
printf("平均池化\n");
printf("输入图片\n");
for(i=0;i<IN_SIZE;i++)
{
for(j=0;j<IN_SIZE;j++)
{
printf("%.1f\t",in_img[i][j]);
}
printf("\n");
}
printf("输出图片\n");
for(i=0;i<OUT_SIZE;i++)
{
for(j=0;j<OUT_SIZE;j++)
{
printf("%.1f\t",out_img[i][j]);
}
printf("\n");
}
return 0 ;
}
int main()
{
pool_test();
return 0;
}