也许,取决于所需的边缘质量:
img = Import@"http://i.stack.imgur.com/k7E1F.png";
mask = ChanVeseBinarize[img, TargetColor -> {1., 1., 1.}, "LengthPenalty" -> 10]
mask1 = Blur[Erosion[ColorNegate[mask], 2], 5]
Rasterize[SetAlphaChannel[img, mask1], Background -> None]
编辑
img2 = Import@"http://i.stack.imgur.com/k7E1F.png";
(*key point:scale up image to smooth the edges*)
img = ImageResize[img2, 4 ImageDimensions[img2]];
mask = ChanVeseBinarize[img, TargetColor -> {1., 1., 1.}, "LengthPenalty" -> 10];
mask1 = Blur[Erosion[ColorNegate[mask], 8], 10];
f[col_] := Rasterize[SetAlphaChannel[img, mask1], Background -> col,
ImageSize -> ImageDimensions@img2]
GraphicsGrid[{{f@Red, f@Blue, f@Green}}]
点击放大
编辑2
只是为了了解图像中光环和背景缺陷的程度:
img = Import@"http://i.stack.imgur.com/k7E1F.png";
Join[{img}, MapThread[Binarize, {ColorSeparate[img, "HSB"], {.01, .01, .99}}]]
ColorNegate@ImageAdd[EntropyFilter[img, 1] // ImageAdjust, ColorNegate@img]
0
我们试图在Mathematica中执行以下操作-RMagick从图像中删除白色背景并使其透明 。
但是对于实际照片,它最终看起来很糟糕(就像图像周围有光晕)。
到目前为止,我们已经尝试过以下方法:
这是一个例子。
原始图片:
带有白色背景的图像被替换为没有背景(或者,为演示起见,为粉红色背景):
有什么想法摆脱那个光环吗?调整诸如LevelPenalty之类的东西时,我只能以失去一些图像为代价来消除光环。
编辑:所以我可以比较赏金的解决方案,请像上面那样构造您的解决方案,即一个名为unground-something的自包含函数,该函数会获取图像并返回具有透明背景的图像。