当前位置: 首页 > 科技观察

一键抠图,满头发:这个GitHub项目帮你快速PS

时间:2023-03-12 09:34:12 科技观察

抠图是PS中常用的技巧。然而,完美地选择图像中的目标往往是费时费力的。最近,一个叫PyMatting的项目无疑能帮到你。项目地址:https://github.com/pymatting/pymatting无需手动,一键抠图的AI应用场景如下:给定一张图片,通过划定一个区域,AI应该可以估计所划定的区域中前景图像的目标,前景被完全提取出来,用其他背景图像代替。因此,抠图需要两个AI能力:首先,AI需要能够识别定义区域内的目标。其次,AI必须能够完整地提取目标,不会出现边缘错误、图像模糊等问题。上图是项目作者提供的示例。给定一张动物的图像(左上)和一个人划定的区域(右上),该算法应该能够获得划定区域内物体的alpha通道,即区分物体的黑白轮廓来自背景的前景(左下角)。使用此数据,可以从原始图像中切出对象并将其移动到新图像中(右下)。根据项目介绍,PyMatting具有以下特点。首先,项目可以完成AlphaMatting,包括Closed-Formmatting、LargeKernelMatting、KNNmatting、LearningBasedDigitalMatting、随机围棋(RandomWalk)抠图等算法。同时,该项目还可以完成勘探,包括ClosForm勘探和多级勘探(基于CPU、CUDA、OpenCL等)算法。该项目还可以执行快速多线程KNN搜索、不完全阈值Cholesky分解、V-CycleGeometricMultigrid预条件器等。使用方法使用前需要确保电脑上安装了相应的Python环境(Python3),需要安装包如下:numpy>=1.16.0pillow>=5.2.0numba>=0.47。0scipy>=1.1.0由于项目需要GPU,所以还需要GPU相关的支持:cupy-cuda90>=6.5.0或者类似的pyopencl>=2019.1.2另外为了测试,还需要:pytest>=5.3.4为方便起见,作者提供了一些示例代码。例如,在下面的代码中,可以在给定原始图像和剪切帧的情况下提取alpha前景:png")作者还提供了直接裁剪图片生成新图片的高级代码:image=load_image("../data/lemur/lemur.png","RGB",scale,"box")trimap=load_image("../data/lemur/lemur_trimap.png","GRAY",scale,"nearest")#estimatealphafromimageandtrimapalpha=estimate_alpha_cf(image,trimap)#makegraybackgroundnew_background=np.zeros(image.shape)new_background[:,:]=[0.5,0.5,0.5]#estimateforegroundfromimageandalphaforeground,background=estimate_foreground_ml(image,alpha,return_background=True)#blendforegroundwithbackgroundandalpha,lesscolorbleedingnew_image=blend(foreground,new_background,alpha)除了代码示例,项目还提供测试代码,可以在主目录中找到运行:python3tests/download_images.pypip3install-rrequirements_tests.txtpytest这个测试可以覆盖89%的代码。除了项目之外,作者还提供了不同抠图算法的benchmark测试结果,如下:pytest>=5.3.4不同算法在测试数据集上的均方误差。可以看出,基于学习的算法和Closed-Form算法都可以取得很好的效果。完整的基准测试结果:https://pymatting.github.io/benchmark.html