2011-11-07 100 views
4

如何使用我的函数作为MATLAB中imresize函数的插值方法?MATLAB自定义插值内核

我读了MATLAB的关于如何使用自定义函数插值方法的帮助,但没有任何明确的例子。我试图编写一个代码ma

+0

如果答案不符合您的预期,请编辑并发布一些代码。如果一个答案对您有帮助,请点击“向上”箭头通知问题已被回答。 –

+0

相关问题:[调整在MATLAB瓦特/不同的过滤器](http://stackoverflow.com/questions/7758078/resizing-in-matlab-w-different-filters) – Amro

回答

4

这里是你如何调用大小调整功能,对于将要调整到64x52的图像A,有一个特殊的内核“lanczos2”:

B = imresize(A, [64 52], {@lanczos2,4.0}); 

这里是一个插核的一个例子你会保存为lanczos2.m

function f = lanczos2(x) 
f = (sin(pi*x) .* sin(pi*x/2) + eps) ./ ((pi^2 * x.^2/2) + eps); 
f = f .* (abs(x) < 2); 
end 

注意这个特殊的内核在imresize.m 已经实现了我觉得你的问题必须以“@”,它可用于引用函数来完成。

+1

坦克很多为您的指导,这是有用的,我可以解决我的问题。 – user1033629

4

imresize命令将默认使用bicubic方法。你可以另外指定的其他几个内置插值方法或内核之一,如

imNewSize = imresize(imOldSize, sizeFactor, 'box') 

一个箱形的内核。如果你想指定你自己的定制内核,你可以将它作为一个函数句柄,连同内核宽度一起传递给一个单元格数组。例如,为了实现自己的箱形核(不使用内置一)与4核宽度,尝试:

boxKernel = @(x)(-0.5 <= x) & (x < 0.5); 
imNewSize = imresize(imOldSize, sizeFactor, {boxKernel, 4}); 

如果键入edit imresize看看里面的功能,约行893你可以找到其他内置内核的实现,这可能会给你一些关于你如何实现自己的提示。

+0

坦克很多为您的指南,它是有用的,我可以解决我的问题。 – user1033629

+0

你可以让它升级吗? –