在matlab中自定义高级过滤器

时间:2014-02-25 15:20:19

标签: matlab video image-processing filter video-processing

是否可以使用matlab中的自定义滤镜将960x540原始视频放大到1920x1080?

我想要使用的过滤器是[1 2 3 3 2 1] 1/12

imresize有自定义插值内核,但我不知道如何使用我的过滤器而不是lanczos2过滤器。

B = imresize(A, [1920 1080], {@lanczos2,4.0} )

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

1 个答案:

答案 0 :(得分:1)

您没有像imresize那样考虑插值内核。它需要实数值x的函数,而不是离散时间滤波器。所以你可以做一个这样的功能,'mykern.m':

function f = mykern(x)
f = (3 - floor(abs(x)))/12 .* double(abs(x) <= 3);

并在每个框架上调用imresize(x, 2, {@mykern,6})

如果您对这些内核的工作原理感到困惑,那么绘制它们很有用:

n = -5:.1:5;
figure; plot(n, lanczos2(n));
figure; plot(n, mykern(n));

或者,您可以通过对图像进行上采样然后对其进行过滤来避免使用imresize。但在这种情况下,您可能希望使用2D过滤器。

关于阅读和撰写视频,请查看VideoReaderVideoWriter

的示例