在知乎上看到一個(gè)比較有意思的話題,卷積為什么叫”卷“積?哈哈哈哈哈
其中有個(gè)動(dòng)圖用卷毛巾生動(dòng)形象的比喻了卷積的過程。
帶著好奇心先看一下我們最熟悉的卷積公式:
還可以改寫成:
其中a,b表示a+b=n這條直線上所有的點(diǎn)。y(n)就表示這條直線上所有點(diǎn)對(duì)應(yīng)的函數(shù)值x(a)h(b)的累加。
以下圖卷毛巾為例,將毛巾沿紅色虛線方向卷起來,設(shè)這條紅色虛線為a+b=5,卷起來后這條紅線上的所有函數(shù)值都累加到n=5這一點(diǎn)上,即是y(5)的值。
1.一維信號(hào)的卷積
上面只是從數(shù)學(xué)公式解釋了卷積是如何計(jì)算的,但卷積物理意義是什么呢?
學(xué)習(xí)信號(hào)與系統(tǒng)的時(shí)候總是聽老師說信號(hào)經(jīng)過一個(gè)系統(tǒng)就是與這個(gè)系統(tǒng)進(jìn)行卷積。所以我們先從一維信號(hào)來解釋一下。
(1)表示信號(hào)δ(t)經(jīng)過某系統(tǒng)產(chǎn)生了輸出h(t)。
(2)將信號(hào)δ(t)延時(shí)τ后,輸出也延時(shí)了τ,為h(t-τ)。
(3)將1,2中信號(hào)疊加輸入系統(tǒng)后,產(chǎn)生輸出y(t)也進(jìn)行了一個(gè)疊加,輸出等于h(t)+h(t-τ)。
再假如有這樣一個(gè)x(t),由很多個(gè)δ(t)組成,這個(gè)δ(t)不正是沖激函數(shù)嘛。它經(jīng)過系統(tǒng)會(huì)輸出什么?
由δ(t)沖激函數(shù)的性質(zhì)
帶入便得到了卷積公式。
所以卷積的意義就是累加唄,得到的結(jié)果y(t)就表示在t這點(diǎn)的沖激響應(yīng)和t之前所有沖激響應(yīng)的”余波“的累加值。(這里累加下限τ=0是因?yàn)榧僭O(shè)t《0時(shí)沒有信號(hào)的,不會(huì)對(duì)t這點(diǎn)產(chǎn)生影響)
2.二維圖像卷積
上升到二維空間,卷積公式變?yōu)?/p>
以高斯濾波為例,w(x,y)是二維高斯函數(shù)。
圖像f與w卷積,可以同樣理解為圖像經(jīng)過系統(tǒng)w所產(chǎn)生的輸出,而圖像中每個(gè)像素點(diǎn)可以理解為一維卷積中的信號(hào)δ(t),最終的輸出也是每個(gè)像素點(diǎn)沖激響應(yīng)累加的結(jié)果。
累加的上下標(biāo)a,b代表著能對(duì)中心像素產(chǎn)生影響的周圍像素的范圍,而影響的大小取決于①它對(duì)中心像素的“余波”;②周圍像素點(diǎn)本身的像素值(相當(dāng)于一維中的a0,a1 ,a2 。 。 。 。)。
舉個(gè)例子,當(dāng)a,b都為2時(shí),表示以某像素為中心3×3的矩陣內(nèi),所有像素都對(duì)此像素有影響。
想象一下這個(gè)3×3的矩陣中每個(gè)像素上都對(duì)高斯濾波器產(chǎn)生了沖激響應(yīng),可以想象成每個(gè)像素上有座山,山坡會(huì)延伸到周圍像素上,山的高度可以疊加,那中心點(diǎn)像素的山就是最高的了。
那中間山的高度是多少呢? 取決于:
①周圍像素對(duì)中心像素的“余波”;
f(x-1,y-1)在中心像素的“余波”為1,f(x-1,y)在中心像素的“余波”為2,f(x-1,y+1)在中心像素的“余波”為1,f(x,y-1)在中心像素的“余波”為2,f(x,y)自己貢獻(xiàn)了4,f(x,y+1)在中心像素的“余波”為2,f(x+1,y-1)在中心像素的“余波”為1,f(x+1,y)在中心像素的“余波”為2,f(x+1,y+1) 在中心像素的“余波”為1。
②周圍像素點(diǎn)本身的像素值
最終山的高度等于∑(某點(diǎn)像素值 × 其對(duì)中心點(diǎn)”余波“)。而“余波”不就是所用的模板嗎。
還有一點(diǎn)需要注意,這個(gè)模板并不是我們的w,而是將w翻轉(zhuǎn)了180度,方便與相同位置像素對(duì)應(yīng)。
由卷積公式得下式,對(duì)應(yīng)圖中相同顏色的相乘。
3.FPGA實(shí)現(xiàn)
理解了高斯濾波模板的意義,接下來就考慮如何用FPGA來實(shí)現(xiàn)了。由于圖像是一個(gè)像素一個(gè)像素流入FPGA的,所以怎樣將一個(gè)個(gè)像素流變成3×3的方塊與我們的模板相乘是一個(gè)問題。
還好altera ip核中有個(gè)shift_ram,可以將數(shù)據(jù)緩存后分行輸出。下圖就比較直觀的展現(xiàn)了它的功能。
所以我們需要將數(shù)據(jù)緩存兩行,每行640個(gè)像素,加上當(dāng)前流入的像素,就可以構(gòu)成需要的3×3的矩陣了。
最后行場(chǎng)同步需要打兩拍是由于輸入數(shù)據(jù)的時(shí)候數(shù)據(jù)打了一拍,上圖構(gòu)建矩陣時(shí)打了一拍,詳見完整代碼。
仿真結(jié)果
可以看出shift_ram在緩存兩行數(shù)據(jù)后,就可以三行數(shù)據(jù)同時(shí)輸出。就可以構(gòu)成3×3的矩陣了。
接下來對(duì)這個(gè)3×3矩陣進(jìn)行乘上對(duì)應(yīng)系數(shù)再累加,便得到濾波后的像素啦。
編輯:jq
-
FPGA
+關(guān)注
關(guān)注
1645文章
22033瀏覽量
617742 -
濾波
+關(guān)注
關(guān)注
10文章
681瀏覽量
57268 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7253瀏覽量
91754 -
代碼
+關(guān)注
關(guān)注
30文章
4898瀏覽量
70590
原文標(biāo)題:基于FPGA的圖像高斯濾波
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于Matlab與FPGA的雙邊濾波算法實(shí)現(xiàn)

FPGA上的圖像處理算法集成與優(yōu)化

FPGA圖像處理基礎(chǔ)----實(shí)現(xiàn)緩存卷積窗口

基于FPGA實(shí)現(xiàn)圖像直方圖設(shè)計(jì)

評(píng)論