在白色产品上使用 imagemagick 删除背景

Removing background using imagemagick, on a white product

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

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

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

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

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

我会选择一个简单的阈值来挑选白色,然后进行某种过滤以去除 noise/ragged 边缘。所以,例如

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