【问题标题】:MATLAB imresize with a custom interpolation kernel带有自定义插值内核的 MATLAB imresize
【发布时间】:2011-12-23 13:48:25
【问题描述】:

如何在 MATLAB 中将我的函数用作 imresize 函数的插值方法?

我阅读了 MATLAB 关于使用自定义函数进行插值方法的帮助,但没有任何明确的示例。我试着为ma写一个代码

【问题讨论】:

  • 如果答案不符合您的预期,请编辑并发布一些代码。如果某个答案对您有帮助,请单击“向上”箭头以通知该问题已得到解答。

标签: image-processing matlab


【解决方案1】:

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 行您可以找到其他内置内核的实现,这可能会给您一些关于如何实现自己的提示的提示。

【讨论】:

  • 为您的向导提供了很多帮助,它很有用,我可以解决我的问题。
【解决方案2】:

对于想要调整大小为 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 中实现 我认为您的问题与用于引用函数的“@”有关。

【讨论】:

  • 为您的向导提供了很多帮助,它很有用,我可以解决我的问题。
猜你喜欢
  • 2017-06-16
  • 1970-01-01
  • 2014-08-28
  • 2018-12-24
  • 2021-01-11
  • 2015-08-06
  • 1970-01-01
  • 2017-06-20
  • 1970-01-01
相关资源
最近更新 更多