1. 程式人生 > 其它 >opencv摳人像_一鍵摳圖,毛髮畢現:這個GitHub專案助你快速PS

opencv摳人像_一鍵摳圖,毛髮畢現:這個GitHub專案助你快速PS

技術標籤:opencv摳人像

eeb19f8a-6d28-eb11-8da9-e4434bdf6706.png
快速摳圖不留痕,設計看了都精神。

機器之心報道,參與:一鳴。

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

專案地址:https://github.com/pymatting/pymatting

無需手動,一鍵摳圖

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

因此,摳圖需要兩個 AI 能力:首先,AI 需要能夠在劃定的區域內識別目標。其次,AI 要能夠完整地將目標抽取出來,沒有劃定錯誤的邊緣、模糊的影象等問題。

f2b19f8a-6d28-eb11-8da9-e4434bdf6706.png

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

據專案介紹,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% 的程式碼。

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

f3b19f8a-6d28-eb11-8da9-e4434bdf6706.png

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

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

完整的基準測試結果:https://pymatting.github.io/benchmark.html