失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 黑白图像自动上色(颜色迁移版)

黑白图像自动上色(颜色迁移版)

时间:2021-03-06 13:37:23

相关推荐

黑白图像自动上色(颜色迁移版)

在《一篇关于如何用深度学习完成自动上色(Automatic Image Colorization)的论文浅析》看到这个模型也可以作颜色风格迁移,这里也来试试,先换另一个模型:colornet_imagenet.t7。

看图:

这个模型和前面的哪个除了训练集不同外,着色输入层核大小已经换成了1x1了,总体来说基本相同。

RGB 和 Lab 互换 按《opencv2,RGB转Lab色彩空间》一文操作

主函数:

void PsColor(char * savefilename,PsColor模型 & sr){//1。加边(8的倍数)// 2。分类部分// 3。编码部分// 4。融合// 5。着色(解码)部分 生成Lab中的ab//去边(回到原图大小)// 6。y,y,y->L(ab)// 7。L+ab= Lab// 8。Lab->rgb->YUV// 9。替换Y,并->rgbint wid=bmp.width;int hei=bmp.height;int wh=wid * hei;cout<<"输入图像宽度:"<<wid<<endl;cout<<" 高度:"<<hei<<endl;//卷积层 Y(wid,hei);//亮度Y.data=new float[wid * hei ]; bmp2YUV(&Y);卷积层 si(wid,hei);//亮度si.data=new float[wid * hei ]; 卷积层复制(&Y,&si);卷积层加以(si,-0.445f);//1。加边(8的倍数)//伸缩零头:使宽,高保证为8的倍数而设,即 宽(高)除8的余数 + x0(y0) = 8int x0=0, y0=0;伸缩边(si, x0, y0);//卷积层 si备份(si.width,si.height);//亮度//si备份.data=new float[si.width * si.height ]; //卷积层复制(&si,&si备份);// 2。分类部分if (读取风格名(Style_Name)==false)return;//载入风格图if (Resizeloadjpg(Style_Name)==false){cout<<"可能需要在'风格图路径和名称.txt'文件中写上一个正确的文件名!!!"<<endl;return;}int swid=bmp.width;int shei=bmp.height;int swh=wid * hei;//卷积层 sY(swid,shei);//亮度sY.data=new float[swid * shei ]; bmp2YUV(&sY);卷积层加以(sY,-0.445f);cout<<"分类部分..."<<endl;//缩放到 224x224卷积层 di(224,224);di.data=new float[224*224];卷积层双三次插值(sY,di);卷积层* low = 低级特征前传f(di,sr);cout<<low->width<<","<<low->height<<","<<low->depth<<endl;卷积层* glo = 全局特征前传(*low,sr);cout<<glo->width<<","<<glo->height<<","<<glo->depth<<endl;del卷积层(*low);// 3。编码部分cout<<"编码部分..."<<endl;low = 低级特征前传e(si,sr);cout<<low->width<<","<<low->height<<","<<low->depth<<endl;卷积层 *mid = 中级特征前传(*low,sr);cout<<mid->width<<","<<mid->height<<","<<mid->depth<<endl;del卷积层(*low);// 4。融合cout<<"融合..."<<endl;卷积层 * fusion = 融合(*glo,*mid);cout<<fusion->width<<","<<fusion->height<<","<<fusion->depth<<endl;del卷积层(*glo);del卷积层(*mid);// 5。着色(解码)部分cout<<"解码-生成彩色..."<<endl;卷积层 * 源 = 着色前传(*fusion,sr);cout<<源->width<<","<<源->height<<","<<源->depth<<endl;伸缩边(*源, x0, y0,false);del卷积层(*fusion);//save_卷积层2txt(源,"ab.txt");// 6。y,y,y->L(ab), L+ab= Lab卷积层 rgb(wid,hei,3);rgb.data=new float[wid*hei*3];Resizeloadjpg(jpgname);//重新载入bmp2RGB(rgb);//rgbrgb2lab(rgb);//lab// 7。L+ab= Lab卷积层 ab(wid,hei,2);ab.data=rgb.data+wh;卷积层复制(源,&ab);lab2rgb(rgb);//rgb// 8。Lab->rgb->YUVRGB2bmp(rgb);卷积层 U(wid,hei);U.data=源->data; 卷积层 V(wid,hei);V.data=源->data+wid * hei ; bmp2YUV(&U,&V);// 9。替换Y,并->rgbYUV2bmp(&Y,&U,&V);del卷积层(*源);cout<<"图像转换成jpg格式... "<<endl;savejpg(savefilename);//保存bmp中的数据cout<<"转换文件已经保存为: "<<savefilename<<endl;}

两个灰度图:

分别上色:

互为风格图:

可以看出有对方的颜色了(前提是类型相似)。

再来看一个例子

两个灰度图:

分别上色:

互为风格图:

下载:

给黑白图像自动上色并可以作颜色迁移的win程序

可以给黑白图像上彩色的程序(win下),也可以做颜色迁移。由《siggraph_colorization-master》中的 colornet_imagenet.t7 模型改编而来。

/download/juebai123/11194075

如果觉得《黑白图像自动上色(颜色迁移版)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。