应用MagickFloodfillPaintImage后,柔化图像上的边缘

时间:2013-05-17 11:18:49

标签: ios imagemagick

我正在尝试删除UIImage的背景,最后使用了MagicWand的iOS端口。

通过调用MagickFloodfillPaintImage方法,我能够使用泛洪填充算法成功删除所选像素。然而,现在的挑战是软化填充物去除过程留下的锋利边缘。

我正在使用以下代码删除背景。

PixelIterator* iterator = NULL;
    PixelWand** pixels = NULL;
    size_t x;
    iterator = NewPixelRegionIterator(magick_wand, _touchCoords.x*scale, _touchCoords.y*scale, 1, 1);
    pixels = PixelGetNextIteratorRow(iterator,&x);
    bc_wand = pixels[0];

    channel = ParseChannelOption("rgba");
    status = MagickFloodfillPaintImage(magick_wand, channel, fc_wand, _tolerance, bc_wand, _touchCoords.x*scale, _touchCoords.y*scale, MagickFalse);
    if (status == MagickFalse) {
        ThrowWandException(magick_wand);
    }

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

听起来你需要MagickFloodfillPaintImage中的抗锯齿功能。但是MagickFloodfillPaintImage不支持它。

但幸运的是,您可以使用传统的多重采样技术来模拟它。 这很简单:

  1. 将图像调整为更大的分辨率(例如100x100 - > 200x200)(向上采样)。
  2. 应用MagickFloodfillPaintImage
  3. 将图像尺寸调整为原始尺寸(向下采样)。
  4. 质量取决于调整比例。

    考虑这个例子(删除白色背景):

    before

    原始算法会产生硬边:

    after1

    通过调整大小,可能会更好:

    enter image description here