機器之心報導
參與:一鳴
快速摳圖不留痕,設計看了都精神。
摳圖是 PS 中的一項常用技術。但是要做到完美地將圖像中的目標選取出來往往費時費力。近日,一個名為 PyMatting 的項目無疑能夠幫助你。
項目地址:https://github.com/pymatting/pymatting
無需手動,一鍵摳圖
摳圖的 AI 應用場景是這樣的:給定一張圖像,通過劃定一個區域,AI 應當能夠估計到劃定區域內的前景圖目標,並將這個前景完整地抽取出來,用來替換到其他背景的圖像中去。
因此,摳圖需要兩個 AI 能力:首先,AI 需要能夠在劃定的區域內識別目標。其次,AI 要能夠完整地將目標抽取出來,沒有劃定錯誤的邊緣、模糊的圖像等問題。
上圖為項目作者提供的示例。給定一隻動物的圖像(左上),以及人劃定的區域(右上),算法應當能夠獲得劃定區域內目標的阿爾法通道,即區分前景和背景的黑白輪廓(左下)。有了這一數據,就可以從原圖中摳去目標,並移動到新的圖像中去(右下)。
據項目介紹,PyMatting 具有以下特性。
首先,項目能夠完成阿爾法摳圖(Alpha Matting),其中包括 Closed-Form 摳圖、大核摳圖(Large Kernel Matting)、KNN 摳圖、基於學習的數字摳圖(Learning Based Digital Matting)、隨機遊走(Random Walk)摳圖等算法。
同時,項目也能完成前景預估,包括 Clos Form 前景預估和多級別前景預估(基於 CPU、CUDA 和 OpenCL 等)算法。
該項目還可以進行快速多線程 KNN 搜索、不完全閾值化楚列斯基分解(incomplete thresholded Cholesky decomposition)、V 輪幾何多網格預條件子(V-Cycle Geometric Multigrid preconditioner)等。
使用方法
在使用前,你需要保證電腦安裝相應的 Python 環境(Python 3),同時需要以下安裝包:
numpy>=1.16.0pillow>=5.2.0numba>=0.47.0scipy>=1.1.0由於項目需要 GPU,因此也需要 GPU 相關支持:
cupy-cuda90>=6.5.0 or similarpyopencl>=2019.1.2除此之外,為了進行測試,也需要:
pytest>=5.3.4為了方便使用,作者提供了一些示例代碼。例如,如下代碼中,給定原始圖像和摳圖框,可以抽取出阿爾法前景:
frompymattingimportcutoutcutout(#inputimagepath"data/lemur.png",#inputtrimappath"data/lemur_trimap.png",#outputcutoutpath"lemur_cutout.png")
作者還提供了高級代碼,直接進行摳圖,生成新圖像:
image=load_image("../data/lemur/lemur.png","RGB",scale,"box")trimap=load_image("../data/lemur/lemur_trimap.png","GRAY",scale,"nearest")#estimatealphafromimageandtrimapalpha=estimate_alpha_cf(image,trimap)#makegraybackgroundnew_background=np.zeros(image.shape)new_background[:,:]=[0.5,0.5,0.5]#estimateforegroundfromimageandalphaforeground,background=estimate_foreground_ml(image,alpha,return_background=True)#blendforegroundwithbackgroundandalpha,lesscolorbleedingnew_image=blend(foreground,new_background,alpha)
除了代碼示例外,項目還提供了測試代碼,可在主目錄中運行:
python3tests/download_images.pypip3install-rrequirements_tests.txtpytest
這一測試能夠覆蓋 89% 的代碼。
除了項目外,作者還提供了不同的摳圖算法的基準測試結果,如下所示:
不同算法在測試數據集上的均方誤差大小。
可以看出,基於學習的算法和 Closed-Form 算法都能取得不錯的效果。
完整的基準測試結果:https://pymatting.github.io/benchmark.html