日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

图像处理之快速均值模糊(Box Blur)

發布時間:2025/7/25 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图像处理之快速均值模糊(Box Blur) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

from:http://blog.csdn.net/jia20003/article/details/7201069

圖像模糊的本質, 從數字信號處理的角度看,圖像模糊就要壓制高頻信號保留低頻信號,

壓制高頻的信號的一個可選擇的方法就是卷積濾波。選擇一個低頻濾波器,對圖像上的

每個像素實現低頻濾波,這樣整體效果就是一張數字圖像更加的模糊,顯示更少的細節信息。

?傳統的卷積模糊計算量巨大,程序效率比較低,基于滑動窗口的Box Blur是一種快速模糊方法,

其結果近似于卷積模糊的結果。我沒證明過!

?

一:Box Blur數學原理

根據輸入的半徑R,計算起始2*R +1個像素的平均值, 作為第一個輸出像素的結果,

公式可以表示為

像素 X0 = ?其中K代表輸入像素集合, i的取值范圍為 i∈[-R, R]

然后計算每一行輸出像素的值根據Xi = X0 + (K[index + R + 1] – K[index - R])

?

二:Box Blur的特征

Box Blur是一種快速的圖像模糊技術, 相比于傳統的卷積模糊,Box Blur可以更有效率的

完成對圖像模糊, 模糊的程度取決一下三個輸入參數,

1.??????X方向上半徑 H Radius

2.??????Y方向上半徑 V Radius

3.??????迭代次數 Iteration number

在半徑相同的情況下, 迭代次數越多,輸出的圖像就越模糊

在迭代次數相同的情況下, 像素半徑越大, 輸出的圖像就越模糊

上述兩者之間的不同是對圖像的拉伸效果, 半徑越大,對圖像的拉伸效果越顯著

?

Box模糊利用滑動窗口算法,從而簡化了每次計算平均值帶來額外開銷。

?

從數字圖像和信號處理的角度看, Box Blur是一種不折不扣的低通濾波, 但是它并不

是真正的高斯低通濾波, 不是卷積實現, 因而速度更快。

?當水平和垂直半徑分別為1 時,是典型的3*3 的矩陣卷積

1, 1, 1

1, 1, 1

1, 1, 1

計算, 相比于傳統的卷積計算之后,要進行歸一化處理,box計算過程中已經完成像素平均,

無需歸一化處理。


三:基于滑動窗口算法的Box模糊效果

?

水平和垂直方向

?

垂直方向:

?

?

水平方向:

?

四:程序關鍵代碼解析

注釋已經很詳細的寫在代碼中,最重要的一個步驟是提前建立index,根據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];??
  • ??
  • ????????//?the?value?scope?will?be?0?to?255,?and?number?of?0?is?table?size??
  • ????????//?will?get?means?from?index?not?calculate?result?again?since???
  • ????????//?color?value?must?be??between?0?and?255.??
  • ????????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;?//?ARGB?->?prepare?for?the?alpha,?red,?green,?blue?color?value.??
  • ??
  • ????????????for?(?int?i?=?-radius;?i?<=?radius;?i++?)?{??
  • ????????????????int?rgb?=?in[inIndex?+?ImageMath.clamp(i,?0,?width-1)];?//?read?input?pixel?data?here.?table?size?data.??
  • ????????????????ta?+=?(rgb?>>?24)?&?0xff;??
  • ????????????????tr?+=?(rgb?>>?16)?&?0xff;??
  • ????????????????tg?+=?(rgb?>>?8)?&?0xff;??
  • ????????????????tb?+=?rgb?&?0xff;??
  • ????????????}??
  • ??
  • ????????????for?(?int?x?=?0;?x?<?width;?x++?)?{?//?get?output?pixel?data.??
  • ????????????????out[?outIndex?]?=?(divide[ta]?<<?24)?|?(divide[tr]?<<?16)?|?(divide[tg]?<<?8)?|?divide[tb];?//?calculate?the?output?data.??
  • ??
  • ????????????????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;?//?per?column?or?per?row?as?cycle...??
  • ????????????}??
  • ????????????inIndex?+=?width;?//?next?(i+?column?number?*?n,?n=1....n-1)??
  • ????????}??
  • ????}</span>??


  • 版權聲明:本文為博主原創文章,未經博主允許不得轉載。

    總結

    以上是生活随笔為你收集整理的图像处理之快速均值模糊(Box Blur)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。