天天看點

一鍵摳圖,毛發畢現:這個GitHub項目助你快速PS

摳圖是 PS 中的一項常用技術。但是要做到完美地将圖像中的目标選取出來往往費時費力。近日,一個名為 PyMatting 的項目無疑能夠幫助你。

項目位址:

https://github.com/pymatting/pymatting

無需手動,一鍵摳圖

摳圖的 AI 應用場景是這樣的:給定一張圖像,通過劃定一個區域,AI 應當能夠估計到劃定區域内的前景圖目标,并将這個前景完整地抽取出來,用來替換到其他背景的圖像中去。

是以,摳圖需要兩個 AI 能力:首先,AI 需要能夠在劃定的區域内識别目标。其次,AI 要能夠完整地将目标抽取出來,沒有劃定錯誤的邊緣、模糊的圖像等問題。

一鍵摳圖,毛發畢現:這個GitHub項目助你快速PS

上圖為項目作者提供的示例。給定一隻動物的圖像(左上),以及人劃定的區域(右上),算法應當能夠獲得劃定區域内目标的阿爾法通道,即區分前景和背景的黑白輪廓(左下)。有了這一資料,就可以從原圖中摳去目标,并移動到新的圖像中去(右下)。

據項目介紹,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.0

pillow>=5.2.0

numba>=0.47.0

scipy>=1.1.0

由于項目需要 GPU,是以也需要 GPU 相關支援:

cupy-cuda90>=6.5.0 or similar

pyopencl>=2019.1.2

除此之外,為了進行測試,也需要:

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")

作者還提供了進階代碼,直接進行摳圖,生成新圖像:

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)

除了代碼示例外,項目還提供了測試代碼,可在主目錄中運作:

python3 tests/download_images.py

pip3 install -r requirements_tests.txt

pytest

這一測試能夠覆寫 89% 的代碼。

除了項目外,作者還提供了不同的摳圖算法的基準測試結果,如下所示:

一鍵摳圖,毛發畢現:這個GitHub項目助你快速PS

不同算法在測試資料集上的均方誤差大小。

可以看出,基于學習的算法和 Closed-Form 算法都能取得不錯的效果。

完整的基準測試結果:

https://pymatting.github.io/benchmark.html