跳转到主要内容

使用多个遮罩图像组合两张图像的Python工具

项目描述

maskilayer

maskilayer是一个Python工具,用于使用一个或多个遮罩图像组合两张图像。

  • 使用一个或多个遮罩图像组合两张图像(背景 + 图层)
  • 提供正遮罩(遮罩的明亮区域中首选图层)或负遮罩(遮罩的暗区域中首选图层)
  • 使用可调节级别的遮罩归一化(0-5)

1. 安装

使用pip安装maskilayer

pip install --upgrade maskilayer

或在特定的Python中安装开发版本

python3.11 -m pip install --upgrade git+https://github.com/twardoch/maskilayer

2. 理由

2.1. 选择性图像锐化

使用分割遮罩将锐化图像与其原始版本组合

  1. 使用自动锐化方法处理原始图像。
  2. 使用分割模型生成一个分割遮罩,以隔离特定主题。
  3. 使用maskilayer进行组合
    • 背景:原始图像
    • 图层:锐化版本
    • 遮罩:分割遮罩

maskilayer将保存一个结果,这将是一个组合图像,其中只有主题被锐化,其余保持原始状态。

2.2. 基于深度组合的创意放大

使用深度遮罩混合图像的两个不同放大版本

  1. 使用保守型上采样器(如 Codeformer)对图像进行上采样,以获取图像背景区域的可预测细节。将保守型上采样作为背景提供给 maskilayer
  2. 使用创意型上采样器(如 Ultimate SD Upscale)对同一图像进行上采样,以获取图像前景(主题)区域的额外细节。将创意型上采样作为叠加(合成图像)提供给 maskilayer
  3. 使用 Depth AnythingMidas(远处的区域较暗,近处的区域较亮)生成深度蒙版。将结果作为(正)蒙版提供给 maskilayer。或者使用类似 Marigold 的模型(近处的主题较暗),并将生成的蒙版作为反转(负)蒙版。
  4. 使用maskilayer进行组合
    • 背景:保守型上采样
    • 叠加:创意型上采样
    • 蒙版:深度蒙版(如果近处区域较暗则为反转蒙版)

maskilayer 将保存一个结果,这将是一个具有创意细节的近处主题的合成图像,以及远处区域更为保守的渲染。

3. 使用方法

3.1. 命令行界面

3.1.1. 基本用法

maskilayer -b background.png -c overlay.png -o output.png

3.1.2. 选择性图像锐化示例

maskilayer --back original.png --comp sharpened.png --out sharpened_subject.png --masks segmentation_mask.png --norm 3 --verbose

3.1.3. 基于深度合成的创意上采样示例

maskilayer --back conservative_upscale.png --comp creative_upscale.png --out composite_upscale.png --masks "depth_mask1.png;depth_mask2.png" --imasks "inverted_depth_mask3.png" --norm 2 --verbose

3.1.4. CLI 文档

NAME
    maskilayer - Composite two images using mask(s).

SYNOPSIS
    maskilayer <flags>

DESCRIPTION
    Composite two images using mask(s).

FLAGS
    -b, --back=BACK
        Type: str
        Default: ''
        layer 0 (background image path)
    -c, --comp=COMP
        Type: str
        Default: ''
        layer 1 (overlay image path that will be composited via masks)
    -o, --out=OUT
        Type: str
        Default: ''
        output composite image
    -s, --smask=SMASK
        Type: str
        Default: ''
        path to save the final mask (optional)
    -m, --masks=MASKS
        Type: Optional
        Default: None
        ;-separated mask image paths (optional)
    -i, --imasks=IMASKS
        Type: Optional
        Default: None
        ;-separated negative mask image paths (optional)
    -n, --norm=NORM
        Type: int
        Default: 0
        perform mask normalization with level 0-5
    -v, --verbose=VERBOSE
        Type: bool
        Default: False
        print additional output
    -f, --fast=FAST
        Type: bool
        Default: False
        save fast but larger files

3.2. Python API

3.2.1. 基本用法

from pathlib import Path
from maskilayer import comp_images

comp_images(
    background=Path("background.png"),
    overlay=Path("overlay.png"),
    output=Path("output.png")
)

3.2.2. 选择性图像锐化示例

from pathlib import Path
from maskilayer import comp_images

comp_images(
    background=Path("original.png"),
    overlay=Path("sharpened.png"),
    output=Path("sharpened_subject.png"),
    masks=[Path("segmentation_mask.png")],
    normalize_level=3,
    verbose=True
)

3.2.3. 基于深度合成的创意上采样示例

from pathlib import Path
from maskilayer import comp_images

comp_images(
    background=Path("conservative_upscale.png"),
    overlay=Path("creative_upscale.png"),
    output=Path("composite_upscale.png"),
    masks=[Path("depth_mask1.png"), Path("depth_mask2.png")],
    invert_masks=[Path("inverted_depth_mask3.png")],
    normalize_level=2,
    verbose=True
)

4. 蒙版处理

  • 如果您提供多个蒙版,maskilayer 将对最终组合进行平均。
  • maskilayer 总是将蒙版图像转换为灰度图。
  • 如果您提供归一化级别,maskilayer 将调整蒙版对比度
    • 级别 0 使用原始蒙版
    • 级别 1 将灰度范围拉伸到全黑到全白
    • 级别 2-5 逐步增加对比度,以便在亮暗之间有更突然的过渡(级别值高于 5 是允许的,但不受支持)

4.1. 处理多个蒙版路径的提示

4.1.1. 在 CLI 中

  • 使用分号(;)分隔多个蒙版路径(您也可以使用逗号)
    maskilayer --masks mask1.png;mask2.png;mask3.png
    
  • 对于反转蒙版,使用 --imasks 标志
    maskilayer --imasks inverted_mask1.png;inverted_mask2.png
    
  • 您可以在同一命令中使用正蒙版和负蒙版
    maskilayer --masks positive_mask.png --imasks negative_mask.png
    

4.1.2. 在 Python 中

  • 使用列表提供多个蒙版路径
    masks=[Path("mask1.png"), Path("mask2.png"), Path("mask3.png")]
    
  • 对于反转蒙版,使用 invert_masks 参数
    invert_masks=[Path("inverted_mask1.png"), Path("inverted_mask2.png")]
    
  • 您可以在同一函数调用中使用正蒙版和负蒙版
    comp_images(
        ...,
        masks=[Path("positive_mask.png")],
        invert_masks=[Path("negative_mask.png")]
    )
    

5. 许可证

项目详情


下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解有关 安装软件包 的更多信息。

源分布

maskilayer-1.0.6.tar.gz (23.9 kB 查看哈希)

上传时间

构建分布

maskilayer-1.0.6-py3-none-any.whl (11.8 kB 查看哈希值)

上传时间 Python 3

支持者