是否可以使用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
答案 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过滤器。
关于阅读和撰写视频,请查看VideoReader
和VideoWriter