opencv摳人像_一鍵摳圖,毛髮畢現:這個GitHub專案助你快速PS
技術標籤:opencv摳人像
快速摳圖不留痕,設計看了都精神。
機器之心報道,參與:一鳴。
摳圖是 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.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% 的程式碼。
除了專案外,作者還提供了不同的摳圖演算法的基準測試結果,如下所示:
不同演算法在測試資料集上的均方誤差大小。
可以看出,基於學習的演算法和 Closed-Form 演算法都能取得不錯的效果。
完整的基準測試結果:https://pymatting.github.io/benchmark.html