GEMINIGHT 警告:您的浏览器不支持JavaScript将无法正常浏览!
Warning: Your browser does not support JavaScript!
注册(Register) | 登录(Login)
看随机帖

主站(Home) »  论坛(Forum)  » 程序编写(Program)
GEMINIGHT

自称:发贴器2号
等级:发贴器
帖子数:4906
积分:9179
阅读权限:99
双三次卷积插值 1樓
Tags引力关联贴

来源:GameRes 作者:bigbook2000

\N

最近研究图像插值,可惜不在学校了,找不到资料看,胡乱搞了一个大家帮我看看

\N
\N

我的理解是这样的,对像素周围16个点进行采样

\N

(P11,P12,P13,P14)
(P21,P22,P23,P24)
(P31,P32,P33,P34)
(P41,P42,P43,P44)

\N

先对每行的4个点进行采样一次,

\N

为了方便,我用SIGMA(1,4)表示∑1-4

\N

那么Pi = SIGMA(j=1,4)(S(dxj) * Pij);
其中S(dxj)是一个三角函数的近似值
当|dxj|<1时为1 - 2 * dxj * dxj + | dxj | * | dxj | * | dxj |;
当|dxj|>=1并且|dxj|<2时为4 - 8 * | dxj | + 5 * dxj * dxj - | dxj | * | dxj | * | dxj |;
当|dxj|>=2时为0

\N

又由于dxj = xj - (int)x;
那么我估计上面的公式简化合并后应该是这样的

\N

Pi = dx * (dx * (dx * (Pi4 - Pi3 + Pi2 - Pi1) - Pi4 + Pi3 - 2 * ( Pi2 - Pi1) ) + Pi3 - Pi1) + Pi2;

\N

16个点经过第一次采样后得到4个点

\N

再经过一次采样,把4个点代入上面的公式,得到插值。

\N


不知道我的理解是不是这样

\N

这样只能算是一种双三次插值方法,不知道如何实现双三次锐化和双三次模糊?

\N

欢迎大家指教

\N

static float4x4 tco =
{
0, A, -2*A, A,
1, 0, -A-3, A+2,
0, -A, 2*A+3, -A-2,
0, 0, A, -A
};

\N

\N

float4 taps(float x)
{
return mul(tco, float4(1, x, x*x, x*x*x));
}

\N

float4 c3sample(float4 taps, float2 t)
{
return
mul(taps,
float4x4(
tex2D(s0, t-dx),
tex2D(s0, t),
tex2D(s0, t+dx),
tex2D(s0, t+dx+dx)
)
);
}

\N

float4 main_bicubic(float2 tex : TEXCOORD0) : COLOR
{
// not usable for 1:1 mapping!
// tex * size won't be 0, 1, 2, 3, .. as you might expect, but something like 0, 0.999, 2.001, 2.999, ...
// this means when the fractional part becomes 0.999 we will be interpolating with the wrong value!!!

tex -= 0.5*dxdy;

float2 dd = frac(tex * size);

\N

float4 tx = taps(dd.x);
float4 c = mul(
taps(dd.y),
float4x4(
c3sample(tx, tex-dy),
c3sample(tx, tex),
c3sample(tx, tex+dy),
c3sample(tx, tex+dy+dy)
)
);

\N

return c;
}
引自media player classic中的bi-cubic interpolation shader。
其中,-A即为cardinal spline中的tension parameter

发表于:2006-1-14 09:22(约18年前)  访问量:980
longgun
注册于:2005年9月18日
等级:注册会员
帖子数:25
积分:217
阅读权限:20
2樓

看不明白插值指的是什么。

\N

不过 锐化和钝化倒是学过, 都有两种方式: 空间域 和 频域。

\N

看楼主用的方式似乎是用的空间域 (其实就是量化矩阵)。

\N

空间域为了便于计算一般用的矩阵的宽度为奇数,例如3X3 , 5X5。

\N

锐化用的 3X3 矩阵一般形式为

\N

1 1 1

\N

1 -8 1

\N

1 1 1

\N

钝化矩阵为

\N

1 1 1

\N

1 1 1

\N

1 1 1

发表于:2006-1-15 21:28(约18年前)

标题(Title):
关键字标签(Tags):
路人:回贴可以不必登录