轻点鼠标即可将黑白图片变为彩色的神经网络工具

原文:Interactive Deep Colorization
作者:junyanz
译者:雁惊寒

1.gif

2.jpg

(0) 软硬件要求

  • Linux 或者 OSX
  • Caffe
  • CPU 或者 NVIDIA GPU + CUDA CuDNN.

(1) 入门

  • Clone仓库:
git clone https://github.com/junyanz/interactive-deep-colorization ideepcolor
cd ideepcolor
  • 下载参考模型:
bash ./models/fetch_models.sh

(2) 交互式着色

3.jpg

我们在IPython Notebook中提供了一个“准系统”演示,并且无需QT。我们还提供了完整的图形界面演示。

(2a) 交互式着色演示

如果你要将Notebook转换为更老的版本,请执行jupyter nbconvert --to notebook --nbformat 3 ./DemoInteractiveColorization.ipynb

(2b) 完整的图形界面演示
  • 安装 Qt4QDarkStyle。 (详情请参见下文的“安装”)

  • 启动图形界面: python ideepcolor.py --gpu [GPU_ID]。 包含以下参数:

--win_size    [512] GUI window size
--gpu         [0] GPU number
--image_file  ['./test_imgs/mortar_pestle.jpg'] path to the image file
  • 用户交互

5.jpg

  • 添加点: 在输入面板中左键单击任意位置。
  • 移动点: 在输入面板中用左键点击某个点,并按住不放,然后拖到所需的位置,松开左键。
  • 改变颜色: 对于当前已经选择的那个点,选择一个推荐的颜色(左侧中间的地方),或者在AB色域上选择一种颜色(左侧的上方)。
  • 删除点: 在输入面板中对着某个点右键单击。
  • 改变补丁大小: 滚动鼠标滚轮可以调节补丁大小,范围是从 1x1 到 9x9。
  • 载入图片: 点击载入图片按钮,选择要着色的图片。
  • 重新开始: 点击重新开始按钮。输入面板上所有的点都会删除掉。
  • 保存结果: 点击保存按钮。着色结果图片会保存在image_file目录下(包含用户输入的ab色域值)。
  • 退出: 点击退出按钮。

(3) 全局提示网络

4.jpg

我们提供了一个使用全局提示网络的例子,可用于全局直方图转换。我们在IPython Notebook中展示了它的用法。

安装

  • 安装 Caffe: 查看 Caffe 安装指南 和 Ubuntu 安装 文档。 请在编译Caffe的时候添加python层支持 (在 Makefile.config 中设置 WITH_PYTHON_LAYER=1) 然后通过 make pycaffe 编译Caffe python库。
    同时,你需要添加pycaffePYTHONPATH中。执行vi ~/.bashrc来编辑环境变量。
PYTHONPATH=/path/to/caffe/python:$PYTHONPATH
  • Scikit-image 和 scikit-learn 包:
sudo pip install scikit-image
sudo pip install scikit-learn
  • OpenCV
sudo apt-get install python-opencv
  • Qt4
sudo apt-get install python-qt4
  • QDarkStyle
sudo pip install qdarkstyle

对于 Conda 用户,需执行如下命令:

conda install -c anaconda protobuf=3.2.0  ## photobuf
conda install -c anaconda scikit-learn=0.18.1  ## scikit-learn
conda install -c anaconda scikit-image=0.13.0  ## scikit-image
conda install -c menpo opencv=2.4.11   ## opencv
conda install pyqt=4.11 ## qt4
conda install -c auto qdarkstyle=1.9  ## qdarkstyle

引用

如果你想在自己的研究中使用本代码,请增加对我们这篇论文的引用:

@article{zhang2017real,
  title={Real-Time User-Guided Image Colorization with Learned Deep Priors},
  author={Zhang, Richard and Zhu, Jun-Yan and Isola, Phillip and Geng, Xinyang and Lin, Angela S and Yu, Tianhe and Efros, Alexei A},
  journal={ACM Transactions on Graphics (TOG)},
  volume={9},
  number={4},
  year={2017},
  publisher={ACM}
}

相关链接

if(strPathName == "") return false; BITMAPFILEHEADER * pBFH; BITMAPINFOHEADER * pBIH; CFile file(strPathName,CFile::modeCreate | CFile::modeNoTruncate | CFile::modeRead); DWORD filelength = file.GetLength(); // 分配一块内存用于装入图象数据 if(m_hDib!=NULL) ::GlobalFree(m_hDib); m_hDib = :: GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,filelength); if(m_hDib==NULL) { return (FALSE); } m_pDib = (BYTE *)::GlobalLock(m_hDib); if(m_pDib==NULL) { ::GlobalFree(m_hDib); return (FALSE); } // 将图象数据读入内存 file.Read(m_pDib,(UINT)filelength); file.Close(); // 读入头信息 pBFH = (BITMAPFILEHEADER *) m_pDib; pBIH = (BITMAPINFOHEADER *) (m_pDib+sizeof(BITMAPFILEHEADER)); WORD bfType = pBFH->bfType; if(bfType!=19778) // "BM"标志 { AfxMessageBox("Not a valid BMP image!"); return FALSE; } //得到位图信息 m_nWidth = (int)pBIH->biWidth; m_nHeight = (int)pBIH->biHeight; m_nBits = (int)pBIH->biBitCount; m_nColors = (int)pBIH->biClrUsed; if(m_nColors == 0) { if(m_nBits <= 8) m_nColors = 1 << m_nBits; } m_strPathName = strPathName; // 载入调色板 m_Palette.DeleteObject(); if( m_nBits <= 8 ) m_nPaletteInBytes = m_nColors * sizeof( RGBQUAD ); if( m_nBits <= 8 ) { RGBQUAD *pRGBPalette; pRGBPalette = ( RGBQUAD * )&m_pDib[ sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER ) ]; LOGPALETTE *pLogPalette; pLogPalette = ( LOGPALETTE * )new char[ sizeof( LOGPALETTE ) + m_nColors * sizeof( PALETTEENTRY ) ]; pLogPalette->palVersion = 0x300; pLogPalette->palNumEntries = ( unsigned short )m_nColors; for(int i=0; i<m_nColors; i++ ) { pLogPalette->palPalEntry[ i ].peRed = pRGBPalette[ i ].rgbRed; pLogPalette->palPalEntry[ i ].peGreen = pRGBPalette[ i ].rgbGreen; pLogPalette->palPalEntry[ i ].peBlue = pRGBPalette[ i ].rgbBlue; pLogPalette->palPalEntry[ i ].peFlags = 0; } if( pLogPalette == NULL ) { ::GlobalUnlock( m_hDib ); return FALSE; } m_Palette.CreatePalette( pLogPalette ); delete[] pLogPalette; }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值