双线性过滤近似高斯模糊

博客介绍了高斯模糊计算像素值的方法,包括两遍算法结合双线性过滤,以及《Real - Time Rendering》提到的一遍算法。详细阐述了一遍算法中用双线性插值近似4个像素加权值,通过最小化函数求解插值系数,还指出该方法相比两遍算法需更多texture调用,对动态kernel大小可事先计算近似插值系数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果使用两遍算法,再结合双线性过滤,那么对于kernel大小为5x5的高斯模糊而言,我们可以用6个texture调用来计算像素的值。但是在《Real-Time Rendering》上还提到一种方法,即采用一遍算法,最多使用9个texture调用来计算像素值,这需要用双线性过滤来近似4个像素的加权值。

假设4个像素分别为

C---D
|   |
A---B

且插值系数为(x,y)(x,y)(x,y),那么插值的结果为

Mwb=[ABCD][xy−x−y+1−xy+x−xy+yxy] Mw_b = \begin{bmatrix} A& B & C & D \end{bmatrix} \begin{bmatrix} xy-x-y+1 \\ -xy+x \\ -xy+y \\ xy \end{bmatrix} Mwb=[ABCD]xyxy+1xy+xxy+yxy
wb=[xy−x−y+1−xy+x−xy+yxy](1) w_b = \begin{bmatrix} xy-x-y+1 \\ -xy+x \\ -xy+y \\ xy \end{bmatrix} \quad (1) wb=xyxy+1xy+xxy+yxy(1)
这里有∑wbi=1\sum {w_b}_i = 1wbi=1,且wbi⩾0{w_b}_i \geqslant 0wbi0即双线性插值是convex combination。

假设4个像素的高斯权值为w=(w0,w1,w2,w3)w=(w_0,w_1,w_2,w_3)w=(w0,w1,w2,w3),为了使得双线性插值的结果尽可能与MwMwMw的结果近似,我们可以最小化下面的函数的值

f(x,y)=∥wb−w∑wi∥2(2) f(x,y) = \|w_b - \frac{w}{\sum w_i}\|^2 \quad (2) f(x,y)=wbwiw2(2)

注意,这里我们先对www进行了归一化,因为∑wi\sum {w_i}wi不是1。

取《Real-Time Rendering》中的5x5 kernel的例子,左上角4个像素的权值为

w=[0.01330.05960.0030.0133] w = \begin{bmatrix}0.0133& 0.0596& 0.003& 0.0133\end{bmatrix} w=[0.01330.05960.0030.0133]

利用maple的minimize函数,我们可以解得(2)(2)(2)在P点处取得最小值

P=(0.8174,0.1826)min=1.276×10−7 P=(0.8174,0.1826) \\ min = 1.276 \times 10^{-7} P=(0.8174,0.1826)min=1.276×107

最后,我们还需要将wbw_bwb乘以∑wi\sum w_iwi,这样得到的权值才是最终结果。

这种方法相比两遍算法而言,需要更多的texture调用(9个)。如果kernel大小动态变化,那么我们可以事先计算出所有的近似插值系数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值