由于风格转换在图像边缘处效果会差一点,所以先在四周加上10个像数的边,完成后再去掉。
并且,图像在后面有两次缩小2倍的操作,顺便使宽,高成为4的倍数,也到后面还原
伸缩边函数:
//x0, y0 为补齐4的倍数的零头
void 伸缩边(卷积层 & di,int & x0,int & y0,bool 伸缩=true) //扩展到(0,1)间
{
int w边=10;
if(伸缩==true)//加
{
x0=4-(di.width+w边*2) % 4;if(x0==4)x0=0;
y0=4-(di.height+w边*2) % 4;if(y0==4)y0=0;
int w=di.width+w边*2+x0;
int h=di.height+w边*2+y0;
卷积层 t(w,h,di.depth);
t.data=new float[w*h*di.depth];
int wc=di.width;
//复制内容
float *s=di.data;
float *d=t.data;
for(int j=0;j<di.depth;j++)
{
d+=w*w边;//跳过上边
for(int i=0;i<di.height;i++)
{
//复制一行
cblas_scopy(wc,s , 1, d+w边, 1);
//下一行
s+=wc;
d+=w;
}
d+=w*(w边+y0);//跳过下边
}
//删除原来的,设置新的
delete []di.data; di.data=NULL;
di.data=t.data;
di.width=w;di.height=h;
}else //减
{
int w=di.width-w边*2-x0;
int h=di.height-w边*2-y0;
卷积层 t(w,h,di.depth);
t.data=new float[w*h*di.depth];
int wc=di.width;
//复制内容
float *s=di.data;
float *d=t.data;
for(int j=0;j<di.depth;j++)
{
s +=wc*w边;//跳过上边
for(int i=0;i<h;i++)
{
cblas_scopy(w,s+w边 , 1, d, 1);
//下一位置
s+=wc;
d+=w;
}
s +=wc*(w边+y0);//跳过下边
}
//删除原来的,设置新的
delete []di.data; di.data=NULL;
di.data=t.data;
di.width=w;di.height=h;
}
}
在主函数分别能 true false调用两次
该部分结束。
本文介绍了一种在图像处理中边缘增强的技巧,通过在图像边缘增加像素并进行后续处理,改善了风格转换在边缘处的效果。文章详细描述了如何通过增加和去除边缘像素来确保图像尺寸为4的倍数,以便于后续的图像缩放操作。
图像加边扩展和减边剪裁&spm=1001.2101.3001.5002&articleId=84841488&d=1&t=3&u=010a135cec5546efb1f3bf99257cd57e)





