生活随笔
收集整理的這篇文章主要介紹了
图像处理之快速均值模糊(Box Blur)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
from:http://blog.csdn.net/jia20003/article/details/7201069
圖像模糊的本質(zhì), 從數(shù)字信號處理的角度看,圖像模糊就要壓制高頻信號保留低頻信號,
壓制高頻的信號的一個可選擇的方法就是卷積濾波。選擇一個低頻濾波器,對圖像上的
每個像素實現(xiàn)低頻濾波,這樣整體效果就是一張數(shù)字圖像更加的模糊,顯示更少的細節(jié)信息。
?傳統(tǒng)的卷積模糊計算量巨大,程序效率比較低,基于滑動窗口的Box Blur是一種快速模糊方法,
其結(jié)果近似于卷積模糊的結(jié)果。我沒證明過!
?
一:Box Blur數(shù)學原理
根據(jù)輸入的半徑R,計算起始2*R +1個像素的平均值, 作為第一個輸出像素的結(jié)果,
公式可以表示為
像素 X0 = ?其中K代表輸入像素集合, i的取值范圍為 i∈[-R, R]
然后計算每一行輸出像素的值根據(jù)Xi = X0 + (K[index + R + 1] – K[index - R])
?
二:Box Blur的特征
Box Blur是一種快速的圖像模糊技術(shù), 相比于傳統(tǒng)的卷積模糊,Box Blur可以更有效率的
完成對圖像模糊, 模糊的程度取決一下三個輸入?yún)?shù),
1.??????X方向上半徑 H Radius
2.??????Y方向上半徑 V Radius
3.??????迭代次數(shù) Iteration number
在半徑相同的情況下, 迭代次數(shù)越多,輸出的圖像就越模糊
在迭代次數(shù)相同的情況下, 像素半徑越大, 輸出的圖像就越模糊
上述兩者之間的不同是對圖像的拉伸效果, 半徑越大,對圖像的拉伸效果越顯著
?
Box模糊利用滑動窗口算法,從而簡化了每次計算平均值帶來額外開銷。
?
從數(shù)字圖像和信號處理的角度看, Box Blur是一種不折不扣的低通濾波, 但是它并不
是真正的高斯低通濾波, 不是卷積實現(xiàn), 因而速度更快。
?當水平和垂直半徑分別為1 時,是典型的3*3 的矩陣卷積
1, 1, 1
1, 1, 1
1, 1, 1
計算, 相比于傳統(tǒng)的卷積計算之后,要進行歸一化處理,box計算過程中已經(jīng)完成像素平均,
無需歸一化處理。
三:基于滑動窗口算法的Box模糊效果
?
水平和垂直方向
?
垂直方向:
?
?
水平方向:
?
四:程序關(guān)鍵代碼解析
注釋已經(jīng)很詳細的寫在代碼中,最重要的一個步驟是提前建立index,根據(jù)index來找到平均值。
[java] view plaincopy
<span?style="font-weight:?normal;">????public?static?void?blur(?int[]?in,?int[]?out,?int?width,?int?height,?int?radius?)?{??????????int?widthMinus1?=?width-1;??????????int?tableSize?=?2*radius+1;??????????int?divide[]?=?new?int[256*tableSize];??????????????????????????????????????????for?(?int?i?=?0;?i?<?256*tableSize;?i++?)??????????????divide[i]?=?i/tableSize;?????????????int?inIndex?=?0;??????????????????????????????for?(?int?y?=?0;?y?<?height;?y++?)?{??????????????int?outIndex?=?y;??????????????int?ta?=?0,?tr?=?0,?tg?=?0,?tb?=?0;?????????????????for?(?int?i?=?-radius;?i?<=?radius;?i++?)?{??????????????????int?rgb?=?in[inIndex?+?ImageMath.clamp(i,?0,?width-1)];???????????????????ta?+=?(rgb?>>?24)?&?0xff;??????????????????tr?+=?(rgb?>>?16)?&?0xff;??????????????????tg?+=?(rgb?>>?8)?&?0xff;??????????????????tb?+=?rgb?&?0xff;??????????????}????????????????for?(?int?x?=?0;?x?<?width;?x++?)?{???????????????????out[?outIndex?]?=?(divide[ta]?<<?24)?|?(divide[tr]?<<?16)?|?(divide[tg]?<<?8)?|?divide[tb];?????????????????????int?i1?=?x+radius+1;??????????????????if?(?i1?>?widthMinus1?)??????????????????????i1?=?widthMinus1;??????????????????int?i2?=?x-radius;??????????????????if?(?i2?<?0?)??????????????????????i2?=?0;??????????????????int?rgb1?=?in[inIndex+i1];??????????????????int?rgb2?=?in[inIndex+i2];????????????????????????????????????ta?+=?((rgb1?>>?24)?&?0xff)-((rgb2?>>?24)?&?0xff);??????????????????tr?+=?((rgb1?&?0xff0000)-(rgb2?&?0xff0000))?>>?16;??????????????????tg?+=?((rgb1?&?0xff00)-(rgb2?&?0xff00))?>>?8;??????????????????tb?+=?(rgb1?&?0xff)-(rgb2?&?0xff);??????????????????outIndex?+=?height;???????????????}??????????????inIndex?+=?width;???????????}??????}</span>??
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的图像处理之快速均值模糊(Box Blur)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。