双线性过滤近似高斯模糊

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

假设4个像素分别为

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

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

M w b = [ A B C D ] [ x y − x − y + 1 − x y + x − x y + y x y ] 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
w b = [ x y − x − y + 1 − x y + x − x y + y x y ] ( 1 ) w_b = \begin{bmatrix} xy-x-y+1 \\ -xy+x \\ -xy+y \\ xy \end{bmatrix} \quad (1) wb=xyxy+1xy+xxy+yxy(1)
这里有 ∑ w b i = 1 \sum {w_b}_i = 1 wbi=1,且 w b i ⩾ 0 {w_b}_i \geqslant 0 wbi0即双线性插值是convex combination。

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

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

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

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

w = [ 0.0133 0.0596 0.003 0.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 ) m i n = 1.276 × 1 0 − 7 P=(0.8174,0.1826) \\ min = 1.276 \times 10^{-7} P=(0.8174,0.1826)min=1.276×107

最后,我们还需要将 w b w_b wb乘以 ∑ w i \sum w_i wi,这样得到的权值才是最终结果。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值