一鍵摳圖,毛發(fā)畢現(xiàn):這個(gè)GitHub項(xiàng)目助你快速PS
摳圖是 PS 中的一項(xiàng)常用技術(shù)。但是要做到完美地將圖像中的目標(biāo)選取出來往往費(fèi)時(shí)費(fèi)力。近日,一個(gè)名為 PyMatting 的項(xiàng)目無疑能夠幫助你。
項(xiàng)目地址:https://github.com/pymatting/pymatting
無需手動,一鍵摳圖
摳圖的 AI 應(yīng)用場景是這樣的:給定一張圖像,通過劃定一個(gè)區(qū)域,AI 應(yīng)當(dāng)能夠估計(jì)到劃定區(qū)域內(nèi)的前景圖目標(biāo),并將這個(gè)前景完整地抽取出來,用來替換到其他背景的圖像中去。
因此,摳圖需要兩個(gè) AI 能力:首先,AI 需要能夠在劃定的區(qū)域內(nèi)識別目標(biāo)。其次,AI 要能夠完整地將目標(biāo)抽取出來,沒有劃定錯(cuò)誤的邊緣、模糊的圖像等問題。
上圖為項(xiàng)目作者提供的示例。給定一只動物的圖像(左上),以及人劃定的區(qū)域(右上),算法應(yīng)當(dāng)能夠獲得劃定區(qū)域內(nèi)目標(biāo)的阿爾法通道,即區(qū)分前景和背景的黑白輪廓(左下)。有了這一數(shù)據(jù),就可以從原圖中摳去目標(biāo),并移動到新的圖像中去(右下)。
據(jù)項(xiàng)目介紹,PyMatting 具有以下特性。
首先,項(xiàng)目能夠完成阿爾法摳圖(Alpha Matting),其中包括 Closed-Form 摳圖、大核摳圖(Large Kernel Matting)、KNN 摳圖、基于學(xué)習(xí)的數(shù)字摳圖(Learning Based Digital Matting)、隨機(jī)游走(Random Walk)摳圖等算法。
同時(shí),項(xiàng)目也能完成前景預(yù)估,包括 Clos Form 前景預(yù)估和多級別前景預(yù)估(基于 CPU、CUDA 和 OpenCL 等)算法。
該項(xiàng)目還可以進(jìn)行快速多線程 KNN 搜索、不完全閾值化楚列斯基分解(incomplete thresholded Cholesky decomposition)、V 輪幾何多網(wǎng)格預(yù)條件子(V-Cycle Geometric Multigrid preconditioner)等。
使用方法
在使用前,你需要保證電腦安裝相應(yīng)的 Python 環(huán)境(Python 3),同時(shí)需要以下安裝包:
- numpy>=1.16.0
- pillow>=5.2.0
- numba>=0.47.0
- scipy>=1.1.0
由于項(xiàng)目需要 GPU,因此也需要 GPU 相關(guān)支持:
- cupy-cuda90>=6.5.0 or similar
- pyopencl>=2019.1.2
除此之外,為了進(jìn)行測試,也需要:
- pytest>=5.3.4
為了方便使用,作者提供了一些示例代碼。例如,如下代碼中,給定原始圖像和摳圖框,可以抽取出阿爾法前景:
- from pymatting import cutout
- cutout(
- # input image path"data/lemur.png",
- # input trimap path"data/lemur_trimap.png",
- # output cutout path"lemur_cutout.png")
作者還提供了高級代碼,直接進(jìn)行摳圖,生成新圖像:
- image = load_image("../data/lemur/lemur.png", "RGB", scale, "box")
- trimap = load_image("../data/lemur/lemur_trimap.png", "GRAY", scale, "nearest")
- # estimate alpha from image and trimap
- alpha = estimate_alpha_cf(image, trimap)
- # make gray background
- new_background = np.zeros(image.shape)
- new_background[:, :] = [0.5, 0.5, 0.5]
- # estimate foreground from image and alpha
- foreground, background = estimate_foreground_ml(image, alpha, return_background=True)
- # blend foreground with background and alpha, less color bleeding
- new_image = blend(foreground, new_background, alpha)
除了代碼示例外,項(xiàng)目還提供了測試代碼,可在主目錄中運(yùn)行:
- python3 tests/download_images.py
- pip3 install -r requirements_tests.txt
- pytest
這一測試能夠覆蓋 89% 的代碼。
除了項(xiàng)目外,作者還提供了不同的摳圖算法的基準(zhǔn)測試結(jié)果,如下所示:pytest>=5.3.4
不同算法在測試數(shù)據(jù)集上的均方誤差大小。
可以看出,基于學(xué)習(xí)的算法和 Closed-Form 算法都能取得不錯(cuò)的效果。
完整的基準(zhǔn)測試結(jié)果:https://pymatting.github.io/benchmark.html