社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

一键抠图,毛发毕现:这个GitHub项目助你快速PS

我爱计算机视觉 • 5 年前 • 636 次点击  

点击我爱计算机视觉标星,更快获取CVML新技术



抠图是 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 trimapalpha = estimate_alpha_cf(image, trimap)
# make gray backgroundnew_background = np.zeros(image.shape)new_background[:, :] = [0.5, 0.5, 0.5]
# estimate foreground from image and alphaforeground, background = estimate_foreground_ml(image, alpha, return_background=True)
# blend foreground with background and alpha, less color bleedingnew_image = blend(foreground, new_background, alpha)

除了代码示例外,项目还提供了测试代码,可在主目录中运行:

python3 tests/download_images.pypip3 install -r requirements_tests.txtpytest
这一测试能够覆盖 89% 的代码。
除了项目外,作者还提供了不同的抠图算法的基准测试结果,如下所示:
不同算法在测试数据集上的均方误差大小。

可以看出,基于学习的算法和 Closed-Form 算法都能取得不错的效果。

完整的基准测试结果:https://pymatting.github.io/benchmark.html



图像分割交流群


欢迎加入语义分割、实例分割、全景分割群,扫码添加CV君拉你入群,如已为CV君其他账号好友请直接私信,

请务必注明比如: 分割

喜欢在QQ交流的童鞋,可以加52CV官方QQ群805388940

(不会时时在线,如果没能及时通过验证还请见谅)


长按关注我爱计算机视觉

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54601
 
636 次点击