gpt4 book ai didi

matlab - 不定大小-试图了解双三次插值

转载 作者:太空宇宙 更新时间:2023-11-03 19:37:30 26 4
gpt4 key购买 nike

我正在尝试了解该功能:

function [weights, indices] = contributions(in_length, out_length, ...
scale, kernel, ...
kernel_width, antialiasing)


if (scale < 1) && (antialiasing)
% Use a modified kernel to simultaneously interpolate and
% antialias.
h = @(x) scale * kernel(scale * x);
kernel_width = kernel_width / scale;
else
% No antialiasing; use unmodified kernel.
h = kernel;
end

我不太明白这行是什么意思
 h = @(x) scale * kernel(scale * x);

我的分数是0.5
核是立方的。

但是除此之外,这还意味着什么呢?
我认为这就像创建一个稍后要调用的函数一样?

最佳答案

imresize通过简单地扩展三次核而不是离散的预处理步骤来缩小图像尺寸时实现抗锯齿。

对于4像素的kernel_width(重新缩放后为8),其中contributions函数为每个像素使用10个邻居,则kernelh(缩放后的内核)看起来像(未归一化,忽略x轴):

这比在单独的预处理步骤中先执行低通滤波器或高斯卷积要容易得多。

三次内核在imresize.m的底部定义为:

function f = cubic(x)
% See Keys, "Cubic Convolution Interpolation for Digital Image
% Processing," IEEE Transactions on Acoustics, Speech, and Signal
% Processing, Vol. ASSP-29, No. 6, December 1981, p. 1155.

absx = abs(x);
absx2 = absx.^2;
absx3 = absx.^3;

f = (1.5*absx3 - 2.5*absx2 + 1) .* (absx <= 1) + ...
(-0.5*absx3 + 2.5*absx2 - 4*absx + 2) .* ...
((1 < absx) & (absx <= 2));

PDF of the referenced paper.

相关部分是公式(15):

这是以下方程式中 a = -0.5的通用插值方程式的特定版本:
a通常设置为-0.5或-0.75。请注意, a = -0.5对应于 Cubic Hermite spline,它将是连续的并具有连续的一阶导数。 OpenCV seems to use -0.75

但是,如果您编辑[OPENCV_SRC]\modules\imgproc\src\imgwarp.cpp并更改代码:
static inline void interpolateCubic( float x, float* coeffs )
{
const float A = -0.75f;
...

至:
static inline void interpolateCubic( float x, float* coeffs )
{
const float A = -0.50f;
...

并重建OpenCV(提示:在较短的编译时间内禁用CUDA和gpu模块),那么您将获得相同的结果。请参见 my other answer中与OP相关问题的匹配输出。

关于matlab - 不定大小-试图了解双三次插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26823140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com