【问题标题】:Removing background using imagemagick, on a white product在白色产品上使用 imagemagick 去除背景
【发布时间】:2015-10-28 12:53:20
【问题描述】:

这是我试图从中删除背景的原始图像:

我正在尝试使用 imagemagick 从图像中删除背景。当图像具有白色产品时,我的脚本无法正常工作。它还可以去除产品内部的白色。简而言之,我正在尝试执行以下操作

  • 创建蒙版图像(用带有模糊和阈值的白色替换背景像素)
  • 在原始图像上应用蒙版以生成输出

如果我使用 0 的模糊因子,如下所示,我会移除背景,但会在其周围产生令人讨厌的光环。在这里可以做什么?

【问题讨论】:

  • 分享原图怎么样?
  • 做到了@MarkSetchell。你有什么线索吗?

标签: imagemagick


【解决方案1】:

我会利用 HSL 色彩空间,并从亮度通道创建一个 Alpha 蒙版。

convert tshirt.jpg \( \
        +clone -colorspace HSL -separate \
        -delete 0,1 -fx 'u>0.975?0:1' \) \
        -compose CopyOpacity -composite  \
        out.png

【讨论】:

    【解决方案2】:

    我会选择一个简单的阈值来挑选出白色,然后进行某种过滤以去除噪音/参差不齐的边缘。所以,例如

    convert shirt.jpg -threshold 99.99% -negate  result.jpg
    

    这给出了这个:

    然后应用一些中值滤波来平滑它:

    convert shirt.jpg -threshold 99.99% -median 5 -negate  result.jpg
    

    或者更大的过滤器:

    convert shirt.jpg -threshold 99.99% -median 11 -negate  result.jpg
    

    这给了这个

    或者,你可以通过腐蚀和膨胀来更好地相处......

    convert shirt.jpg -threshold 99.99% -negate  \
       -morphology erode  diamond:3              \
       -morphology dilate diamond:3 result.jpg
    

    您可能喜欢使用 Anthony Thyssen 的 flicker_compare 在输入和结果图像之间闪烁以查看您得到了什么,请参阅 here

    ./flickercompare -o flick.gif shirt.jpg result.jpg
    

    【讨论】:

    • 你好马克,虽然这种方法适用于白色产品。产品不是白色的图像,它会在其周围产生令人讨厌的锯齿状光晕。侵蚀过程可能就是这样做的。此外,它根本不适用于某些其他类型的图像.. 是否有一种可能适用于所有类型图像的背景去除方法?
    • 没有什么能阻止你使用我的方法来处理白色产品和不同的方法来处理有色产品。我没有那么多时间来为你的所有图像制定一个方法,也许你可以从 Eric 那里得到关于使用HSL 的想法以及我关于中值滤波和形态学的一些想法,并进行更多实验。另外,在这里查看 Anthony Thyssen 的优秀页面...imagemagick.org/Usage/masking/#bg_remove
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 2019-11-30
    • 2020-09-03
    • 1970-01-01
    相关资源
    最近更新 更多