gimp bicubic与标准bicubic之间的区别问题

时间:2018-06-27 14:47:51

标签: image-processing gimp bicubic

我进行了三次三次插值,即引用here 但是我发现GIMP和我自己的代码结果之间有很大的不同。 这是original image

Difference images

如您所见,上面的两个图像(A)是Gimp的图像(B)是我自己的引用代码。

我很困惑我有什么问题吗?我应该更改算法吗?

请问您有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您是下采样,而不是上采样。上采样(增加像素数)时,插值本身效果很好。

在进行下采样时,如果使用不带插值的采样率,则会浪费信息,并且会产生混叠。这就是您在结果中看到的效果。

向下采样时,Gimp首先使图像平滑。平滑消除了否则会混叠的较高频率。

要获得与Gimp相似的结果,请在下采样之前应用低通滤波器。


以下是使用和不使用低通滤波进行下采样的示例。我将DIPimage与MATLAB一起使用,因为它对我来说很容易,并且您没有指定编程语言。无论如何只是为了说明原理。

我在这里使用整数因子进行直接下采样,您已经有了对非整数因子进行相同处理的代码,我不希望这会分散注意力。

s1只是下采样,而没有平滑。看起来像您的结果。这是别名。

s2s3使用大小不同的高斯低通滤波器。我在这里使用8*0.58*0.8的和。下采样后,它们分别对应于0.5和0.8的西格玛。第一个太小了,它仍然显示出一些混叠,但是少了很多。它仍然很锋利。第二个是正确的大小,以防止出现锯齿(锯齿的能量大约不到锯齿的1%)。

s4使用理想的低通滤波(在傅立叶域中)。我不推荐这种方法,因为它会导致很多振铃。只是为了比较。输出中有0%的锯齿,结果在此大小下会尽可能清晰。

a = readim('https://i.stack.imgur.com/1TyGI.jpg');
a = a{1};

f = 8; % subsample by a factor 8

s1 = a(0:f:end,0:f:end);

s2 = gaussf(a,f*0.5);
s2 = s2(0:f:end,0:f:end);

s3 = gaussf(a,f*0.8);
s3 = s3(0:f:end,0:f:end);

s4 = ft(a);
s4 = cut(s4,imsize(s1));
s4 = real(ift(s4) / numel(a) * numel(s4));

the 4 images computed above