MagickWand C的MagickUnsharpMaskImage方法有错误吗?

时间:2017-05-25 12:16:51

标签: c imagemagick magickwand

我有一个以下的CLI,并尝试使用magickwand c获得相同的结果。 一切似乎都很完美,或者我不知道我错过了什么,但是MagickUnsharpMaskImage并不适合我。检查我的源代码。我还附加了CLI和C API生成的源和两个输出图像。

CLI

convert testsharp.jpg -unsharp 0x1 unsharpC.jpg

C代码

int main(int argc, char const *argv[]) {
    MagickWand * wand;
    wand = NewMagickWand();
    MagickReadImage(wand, "testsharp.jpg");
    MagickUnsharpMaskImage(wand, 0.0, 1.0, 0.0, 0.0);
    MagickWriteImage(wand, "unsharpW.jpg");
    return 0;
}

源图片

enter image description here

使用CLI输出图像

enter image description here

使用C

输出图像

enter image description here

ImageMagick版

版本:ImageMagick 7.0.5-5 Q16 x86_64 2017-05-23 http://www.imagemagick.org

1 个答案:

答案 0 :(得分:2)

来自the man

  

MagickUnsharpMaskImage()锐化图像。我们用给定半径和标准偏差(sigma)的高斯算子对图像进行卷积。 为获得合理的结果,radius应大于sigma 。使用半径0,UnsharpMaskImage()为您选择合适的半径。

强调我的

您称之为radius=0 sigma=1.0

此外default value for those parameters are

  1. 半径高斯半径(以像素为单位),不计算中心像素(默认为0)。
  2. sigma 高斯的标准差,以像素为单位(默认为1.0)
  3. 增益原始图像和添加回原始(默认1.0)的模糊图像之间的差异部分。
  4. 阈值阈值(作为QuantumRange的一部分)需要应用差异量(默认值为0.05)
  5. 代码更正为

    MagickUnsharpMaskImage(wand, 0.0, 1.0, 1.0, 0.05);