1. 程式人生 > >傳統高斯模糊與優化演算法(附完整C++程式碼)

傳統高斯模糊與優化演算法(附完整C++程式碼)

高斯模糊(英語:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop、GIMP以及Paint.NET等影象處理軟體中廣泛使用的處理效果,通常用它來減少影象噪聲以及降低細節層次。這種模糊技術生成的影象,其視覺效果就像是經過一個半透明螢幕在觀察影象,這與鏡頭焦外成像效果散景以及普通照明陰影中的效果都明顯不同。高斯平滑也用於計算機視覺演算法中的預先處理階段,以增強影象在不同比例大小下的影象效果(參見尺度空間表示以及尺度空間實現)。 從數學的角度來看,影象的高斯模糊過程就是影象與正態分佈做卷積。由於正態分佈又叫作高斯分佈,所以這項技術就叫作高斯模糊。影象與圓形方框模糊做卷積將會生成更加精確的焦外成像效果。由於高斯函式的傅立葉變換是另外一個高斯函式,所以高斯模糊對於影象來說就是一個低通濾波器。

高斯模糊是一種影象模糊濾波器,它用正態分佈計算影象中每個畫素的變換。N維空間正態分佈方程為

G(r) = \frac{1}{\sqrt{2\pi \sigma^2}^N} e^{-r^2/(2 \sigma^2)}

在二維空間定義為

G(u,v) = \frac{1}{2\pi \sigma^2} e^{-(u^2 + v^2)/(2 \sigma^2)}

其中r是模糊半徑 (r^2 = u^2 + v^2),σ是正態分佈的標準偏差。在二維空間中,這個公式生成的曲面的等高線是從中心開始呈正態分佈的同心圓。分佈不為零的畫素組成的卷積矩陣與原始影象做變換。每個畫素的值都是周圍相鄰畫素值的加權平均。原始畫素的值有最大的高斯分佈值,所以有最大的權重,相鄰畫素隨著距離原始畫素越來越遠,其權重也越來越小。這樣進行模糊處理比其它的均衡模糊濾波器更高地保留了邊緣效果,參見尺度空間實現

理論上來講,影象中每點的分佈都不為零,這也就是說每個畫素的計算都需要包含整幅影象。在實際應用中,在計算

高斯函式的離散近似時,在大概3σ距離之外的畫素都可以看作不起作用,這些畫素的計算也就可以忽略。通常,影象處理程式只需要計算 (6 \sigma + 1) \times (6 \sigma + 1) 的矩陣就可以保證相關畫素影響。對於邊界上的點,通常採用複製周圍的點到另一面再進行加權平均運算。

除了圓形對稱之外,高斯模糊也可以在二維影象上對兩個獨立的一維空間分別進行計算,這叫作線性可分。這也就是說,使用二維矩陣變換得到的效果也可以通過在水平方向進行一維高斯矩陣變換加上豎直方向的一維高斯矩陣變換得到。從計算的角度來看,這是一項有用的特性,因為這樣只需要O(n \times M \times N) + O(m \times M \times N)次計算,而不可分的矩陣則需要O(m \times n \times M \times N)次計算,其中M,N是需要進行濾波的影象的維數,mn是濾波器的維數。

對一幅影象進行多次連續高斯模糊的效果與一次更大的高斯模糊可以產生同樣的效果,大的高斯模糊的半徑是所用多個高斯模糊半徑平方和的平方根。例如,使用半徑分別為6和8的兩次高斯模糊變換得到的效果等同於一次半徑為10的高斯模糊效果,\sqrt{6\times6 + 8\times8} = 10

。根據這個關係,使用多個連續較小的高斯模糊處理不會比單個高斯較大處理時間要少。

在減小影象尺寸的場合經常使用高斯模糊。在進行欠取樣的時候,通常在取樣之前對影象進行低通濾波處理。這樣就可以保證在取樣影象中不會出現虛假的高頻資訊。高斯模糊有很好的特性,如沒有明顯的邊界,這樣就不會在濾波影象中形成震盪。

以上資料摘自維基百科(高斯模糊詞條):

https://zh.wikipedia.org/wiki/%E9%AB%98%E6%96%AF%E6%A8%A1%E7%B3%8A

那麼具體如何實現呢?

程式碼獻上:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82

相關推薦

傳統模糊優化演算法(完整C++程式碼)

高斯模糊(英語:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop、GIMP以及Paint.NET等影象處理軟體中廣泛使用的處理效果,通常用它來減少影象噪聲以及降低細節層次。這種模糊技術生成的影象,其視覺效果就像是經過一個半透明螢幕在觀

基於RNN的音訊降噪演算法 (完整C程式碼)

本文轉載自部落格:https://cloud.tencent.com/developer/article/1094567 ---------------------------------------------------------------------------------------

磨皮美顏演算法 完整C程式碼

前言 2017年底時候寫了這篇《集 降噪 美顏 虛化 增強 為一體的極速影象潤色演算法 附Demo程式》 這也算是學習過程中比較有成就感的一個演算法。 自2015年做演算法開始到今天,還有個把月,就滿五年了。 歲月匆匆,人生能有多少個五年。 這五年裡,從音訊影象到視訊,從傳統演算法到深度學習,從2D到3D各種

OpenCV——模糊毛玻璃特效

// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include

PS理論:模糊反差保留

      目前很多教程都以例項為主,很多朋友看了教程也跟著教程做出了與教程相同或相似的效果,也有很多朋友有這樣一個疑問:為什麼要這樣做呢?   其實例項教程只說了操作步驟及思路,對於基礎的理論很少提及!所以難怪很多朋友就會有這種疑問。   理論的學習是相當枯燥的,但對日後用

模糊的簡單演算法

來自http://www.swageroo.com/wordpress/how-to-program-a-gaussian-blur-without-using-3rd-party-libraries/ What is a Gaussian Blur? Something

Vulkan移植GpuImage(一)模糊自適應閾值

## 自適應閾值效果圖 [demo](https://github.com/xxxzhou/aoce/tree/master/samples/vulkanextratest) ![avatar](https://pic2.zhimg.com/80/v2-ea3ec0303ba7c9d4f82ab4db0a3

音訊演算法之小黃人變聲 完整C程式碼

都稍微講過變聲的原理和具體實現。 大家都知道,演算法從實現到最後工程應用,中間的環節和問題特別多。 尤其是編碼的架構設計,好的資料結構和程式碼邏輯封裝肯定是可複用,元件化的。 我也提及到了。 會做一些演算法編碼優化相關的分享。 而有時候我總覺得文字表達很蒼白, 所以我儘可能地把程式碼寫得簡潔易懂, 一方面

SM2橢圓曲線公鑰密碼演算法完整c程式碼,前人栽樹,後人乘涼

某電信安資訊保安數學基礎實驗要求實現SM2橢圓曲線公鑰密碼演算法 這是基於mircal庫實現的,沒有mircal庫的下載我以前的部落格發的檔案,根據教程在vs上搭建。 一共四個檔案  SM2.c SM2.h SM3.c SM3.h SM2.c #include <st

紅黑樹(完整C程式碼

紅黑樹簡介 首先紅黑樹是一棵二叉搜尋樹,它在每個結點上增加了一個儲存位來表示結點的顏色,可以是RED或者BLACK。通過對一條從根節點到NIL葉節點(指空結點或者下面說的哨兵)的簡單路徑上各個結點在顏色進行約束,紅黑樹確保沒有一條路徑會比其他路徑長

模糊演算法的全面優化過程分享。

void ConvertBGR8U2BGRAF_SSE(unsigned char *Src, float *Dest, int Width, int Height, int Stride) { const int BlockSize = 4; int Block = (Width - 2)

模糊演算法的實現和優化

前兩年我發過一文:Win32下的C++高斯模糊演算法例項,裡面給出了一個高斯模糊的實現,並寫了粗略的簡介。 不過當時內容講得非常簡單,而且附帶的例子演算法是有缺陷的: 一是對圖片的邊角採用“跳過”的方式處理,導致模糊後的圖片有黑邊;二是演算法本身採用的是二維矩陣,效率上不如

模糊濾波)的原理演算法

通常,影象處理軟體會提供”模糊”(blur)濾鏡,使圖片產生模糊的效果。

最快速的“模糊演算法Android原始碼)

1:高斯模糊演算法(參考:http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html) 所謂的模糊演算法就是當前畫素點和周圍畫素點進行加權均值之後的結果替換當前畫素值。因此均值模糊是最簡單的,只要將周圍的畫素點

【CV】模糊演算法

高斯金字塔的作用:模擬人類的視覺,近處的東西看著大,並且能夠看到東西的細節所在,當把這東西從眼前拿到幾米外,雖然還是能看到東西,但也只能窺見它的輪廓了,對於細節無從得知。 高斯金字塔就是模擬了這樣的一種視覺特性,當對影象進行下采樣的時候,影象的解析度降低,就好比把東

淺談:過程貝葉優化

        高斯過程(Gaussian process)         高斯過程常在論文裡面簡寫為GP。定義:如果隨機過程的有限維分佈均為正態分佈,則稱此隨機過程為高斯過程或正態過程。         首先我們來解讀一下定義:         第一個問題:什麼是隨

基於正態分佈的圖片模糊演算法

前言:   先來看看下面這張圖,我把一張圖進行了二等份了,左邊是經過高斯模糊過的,右邊是原圖。    圖-1 高斯模糊效果對比圖 概述:   高斯模糊也叫做高斯平滑,是一種影象平滑處理的技術。高斯模糊演算法的原理是選取一箇中心點,以及一個半徑周圍的所有點,再計算這些畫素點

模糊演算法的理解】簡單易懂

通常,影象處理軟體會提供"模糊"(blur)濾鏡,使圖片產生模糊的效果。 "模糊"的演算法有很多種,其中有一種叫做"高斯模糊"(Gaussian Blur)。它將正態分佈(又名"高斯分佈")用於影象處理。 本文介紹"高斯模糊"的演算法,你會看到這是一個非常簡

Java實現模糊演算法處理影象

高斯模糊(英語:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop、GIMP以及Paint.NET等影象處理軟體中廣泛使用的處理效果,通常用它來減少影象噪聲以及降低細節層次。 簡介 高斯模糊(Gaussian Blur)是美國

Android 模糊效果從319ms到3ms的優化實現

之前做過高斯模糊的的效果,不過依賴一個三方庫,今天看到了一篇文章,一個類檔案就能解決,感覺竊喜,分享給大家。 使用: Glide.with(getActivity()).load(mUser.avatarUrl).asBitmap().into(ne