圖像的雙線性插值放大算法中,目標(biāo)圖像中新創(chuàng)造的象素值,是由源圖像位置在它附近的2*2區(qū)域4個鄰近象素的值通過加權(quán)平均計算得出的。雙線性內(nèi)插值算法放大后的圖像質(zhì)量較高,不會出現(xiàn)像素值不連續(xù)的的情況。然而次算法具有低通濾波器的性質(zhì),使高頻分量受損,所以可能會使圖像輪廓在一定程度上變得模糊。
頁摘要\雙線性插值圖像放大-縮小算法 - 楓路 - CSDNBlog.mht!http://p.blog.csdn.net/images/p_blog_csdn_net/Breathomn/EntryImages/20090306/image002.jpg)
圖1
X方向的線性插值
對于標(biāo)準(zhǔn)的雙線性差值算法,X方向的線性插值:
[通用1]
[通用2]
具體到我們所實現(xiàn)的算法中,我們使Q11、Q12、Q21、Q22為光柵上相鄰的四點,即P只能落于這四點其中一點上。Δcol是當(dāng)前像素離像素所屬區(qū)域原點的水平距離,比如圖2,各種不同的顏色代表一個區(qū)域,區(qū)域原點為區(qū)域左上角的像素。
δ R2 = Color Q22 −Color Q12 ?Δcol+Color Q12 ?256 (1)
δ R1 = Color Q21 −Color Q11 ?Δcol+Color Q11 ?256 (2)
其中:Δcol=(DestColNumber?((SrcWidth?8)/DestWidth))&255, Color(X)表示點X的顏色,具體算法使用的是24位真彩色格式。
Y方向的線性插值
做完X方向的插值后再做Y方向的插值,對于一般情況,有:
[通用3]
而我們的具體算法中,Y方向的線性插值方法如(3)所示。Δrow是當(dāng)前像素離像素所屬區(qū)域原點的垂直距離,比如圖2,各種不同的顏色代表一個區(qū)域,區(qū)域原點為區(qū)域左上角的像素。
Color P = δ R2 ?256+ δ R2 −δ R1 ?Δrow ?16 (3)
其中:Δrow=(DestRowNumber?((SrcHeight?8)/DestHeight))&255,由于前面為了便于計算左移了16位,因此最后需要右移16位保持匹配。
算法描述
類 C 偽碼如下:
- for (目標(biāo)圖像第一行的像素++)
- {
- // 源圖像上Q12, Q22, Q11, Q21的選取見下一節(jié)
- 獲取源圖像Q12, Q22, Q11, Q21的顏色;
-
- // X 方向的插值
- δ(R2) = (Color(Q22) - Color(Q12)) * δcol+ Color(Q12) * 256;
- δ(R1) = (Color(Q21) - Color(Q11)) * δcol+ Color(Q11) * 256;
-
- // 保存 δ(R1)到一個臨時數(shù)組,因為下一行的δ(R2)等于這一行的δ(R1)
- temp[i++] = δ(R1);
-
- // Y 方向的插值
- Color(P) = (δ(R2) * 256 + (δ(R2) - δ(R1)) *δrow) >> 16;
-
- 將 P 輸出到目標(biāo)位圖中。
- }
-
- for (目標(biāo)圖像第二行到最末行)
- {
- for (行上的像素++)
- {
- // 源圖像上Q12, Q22, Q11, Q21的選取見下一節(jié)
- 獲取源圖像Q12, Q22, Q11, Q21的顏色;
-
- // X 方向的插值
- δ(R2) = temp[i++]; // 下一行的δ(R2)等于上一行的δ(R1)
- δ(R1) = (Color(Q21) - Color(Q11)) *δcol+ Color(Q11) * 256;
-
- // 保存 δ(R1)到一個臨時數(shù)組,因為下一行的δ(R2)等于這一行的δ(R1)
- temp[i++] = δ(R1);
-
- // Y 方向的插值
- Color(P) = (δ(R2) * 256 + (δ(R2) - δ(R1)) * δrow) >> 16;
-
- 將 P 輸出到目標(biāo)位圖中。
- }
- }
算法中Q12, Q22, Q11, Q21的選取
我們以放大兩倍為例,說明選取Q12, Q22, Q11, Q21的過程。源圖像3*3區(qū)域放大為目標(biāo)區(qū)域6*6區(qū)域。設(shè)以下為目標(biāo)圖像:
A
|
A
|
B
|
B
|
|
|
A
|
A
|
B
|
B
|
|
|
|
|
C
|
C
|
|
|
|
|
C
|
C
|
|
|
|
|
|
|
D
|
D
|
|
|
|
|
D
|
D
|
圖2
目標(biāo)圖像A像素區(qū)域?qū)?yīng)的Q21,Q22,Q11,Q12,以紅色區(qū)域為原點向右下方擴展的2*2區(qū)域。
圖3
目標(biāo)圖像B像素區(qū)域?qū)?yīng)的Q21,Q22,Q11,Q12,以藍(lán)色區(qū)域為原點向右下方擴展的2*2區(qū)域。
圖4
目標(biāo)圖像C像素區(qū)域?qū)?yīng)的Q21,Q22,Q11,Q12,以綠色區(qū)域為原點向右下方擴展的2*2區(qū)域。
圖5
目標(biāo)圖像D像素區(qū)域?qū)?yīng)的Q21,Q22,Q11,Q12,目標(biāo)圖像處于最后兩行的邊界情況,將Q21,Q22,Q11,Q12這四個點的值設(shè)為一樣。
圖6
頁摘要\雙線性插值圖像放大-縮小算法 - 楓路 - CSDNBlog.mht!http://p.blog.csdn.net/images/p_blog_csdn_net/Breathomn/EntryImages/20090306/flow1.jpg)
頁摘要\雙線性插值圖像放大-縮小算法 - 楓路 - CSDNBlog.mht!http://p.blog.csdn.net/images/p_blog_csdn_net/Breathomn/EntryImages/20090306/flow2.jpg)
程序流程圖
流程圖右邊虛線框中為相關(guān)過程的注解。