【发布时间】:2011-12-23 13:48:25
【问题描述】:
如何在 MATLAB 中将我的函数用作 imresize 函数的插值方法?
我阅读了 MATLAB 关于使用自定义函数进行插值方法的帮助,但没有任何明确的示例。我试着为ma写一个代码
【问题讨论】:
-
如果答案不符合您的预期,请编辑并发布一些代码。如果某个答案对您有帮助,请单击“向上”箭头以通知该问题已得到解答。
如何在 MATLAB 中将我的函数用作 imresize 函数的插值方法?
我阅读了 MATLAB 关于使用自定义函数进行插值方法的帮助,但没有任何明确的示例。我试着为ma写一个代码
【问题讨论】:
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 行您可以找到其他内置内核的实现,这可能会给您一些关于如何实现自己的提示的提示。
【讨论】:
对于想要调整大小为 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 中实现 我认为您的问题与用于引用函数的“@”有关。
【讨论】: