天天看點

FPGA圖像處理10_常用算法_圖像銳化

銳化

銳化即在圖像上增強顯示圖像内容的邊緣成分。

根據邊緣成分的計算方法,常用的方法有高斯濾波銳化和拉普拉斯濾波銳化。

高斯濾波銳化将原始圖像 x 減去高斯濾波(相當于低通濾波)後得到的平滑圖像 gaussian(x),計算得到邊緣圖像 z:

z = x − g a u s s i a n ( x ) z=x-gaussian(x) z=x−gaussian(x)

拉普拉斯濾波銳化直接使用拉普拉斯濾波(相當于高通濾波)得到邊緣成分,典型的拉普拉斯濾波系數如下:

( 0 − 1 0 − 1 4 − 1 0 − 1 0 ) \left( \begin{array} {ccc} 0&-1&0\\ -1&4&-1\\ 0&-1&0 \end{array} \right) ⎝⎛​0−10​−14−1​0−10​⎠⎞​

( − 1 − 1 − 1 − 1 8 − 1 − 1 − 1 − 1 ) \left( \begin{array} {ccc} -1&-1&-1\\ -1&8&-1\\ -1&-1&-1 \end{array} \right) ⎝⎛​−1−1−1​−18−1​−1−1−1​⎠⎞​

銳化圖像的計算公式如下:

y = { x + a × z ∣ z ∣ > T x ∣ z ∣ ≤ T y=\begin{cases} x+a\times z & \lvert z\rvert>T\\ x&\lvert z\rvert\leq T \end{cases} y={x+a×zx​∣z∣>T∣z∣≤T​

上式中 a 值為銳化強度,一般選擇範圍是 0 ≤ a ≤ 1.5 0\leq a \leq 1.5 0≤a≤1.5,為防止出現過度銳化,可以将 a 值取為0.5(經驗值,根據圖像場景調節)。

上式中 T 值為銳化門限,控制算法隻對邊緣強度大于 T 值的部分進行銳化,對于平滑區域保持不變,像素位寬為 8 的情況下,可以将 T 值取為8(經驗值,根據圖像場景調節)。

使用灰階圖像,以 3 × 3 3\times 3 3×3 的高斯濾波器為例,說明 FPGA 實作方法,典型的高斯濾波系數如下:

1 16 × ( 1 2 1 2 4 2 1 2 1 ) \frac{1}{16}\times\left( \begin{array} {ccc} 1&2&1\\ 2&4&2\\ 1&2&1 \end{array} \right) 161​×⎝⎛​121​242​121​⎠⎞​

系數矩陣中心的 4 對應的是目前像素點的權重值,則 z 值計算對應的二維卷積核:

1 16 × ( − 1 − 2 − 1 − 2 ( 16 − 4 ) − 2 − 1 − 2 − 1 ) \frac{1}{16}\times\left( \begin{array} {ccc} -1&-2&-1\\ -2&(16-4)&-2\\ -1&-2&-1 \end{array} \right) 161​×⎝⎛​−1−2−1​−2(16−4)−2​−1−2−1​⎠⎞​

在計算 z 值時,即可以使用上方公式直接用二維卷積計算,也可以根據其原理先計算 gaussian(x),再計算 x-gaussian(x)。濾波系數中 2、4 值的乘法可以分别通過低位補 1 位 0 和低位補 2 位 0 的方法實作,第一種方法濾波系數中心的 12,如果不使用乘法器,則需要分解為 × 4 \times 4 ×4和 × 8 \times 8 ×8,再将 2 個積值相加,計算麻煩;先濾波再計算減法的方法則更為簡便。

PS:在其它卷積算法中,如果卷積系數比較複雜(不能使用加減或者移位計算),必須使用乘法(甚至除法)的情況下,将卷積計算前後其它的算法合并至卷積系數,用一次卷積完成多個計算步驟,可以減少計算量。

在後續的銳化強度計算中,由于 a=0.5,則 × a \times a ×a 的計算可以用截去低位的辦法實作除以 2。

具體的 sysgen 設計如下:

輸入圖像資料首先進入 3 × 3 3\times 3 3×3二維緩沖:

FPGA圖像處理10_常用算法_圖像銳化

用移位方法實作卷積系數的乘法計算:

FPGA圖像處理10_常用算法_圖像銳化

将卷積系數乘法結果相加,并用截去低位的辦法實作 × 1 16 \times\frac{1}{16} ×161​:

FPGA圖像處理10_常用算法_圖像銳化

銳化計算:

FPGA圖像處理10_常用算法_圖像銳化

上圖中紅色高亮區域中實作 a × z a\times z a×z的計算,但是将 a 值通過低位補 0 的方式設定為 4,用于增強視覺效果。

如果使用前文所述的 a 值為 0.5 的邊緣增強系數,則使用如下所示的子產品:

FPGA圖像處理10_常用算法_圖像銳化

銳化門限控制,T 值為 8,由于是有符号整數補碼的絕對值比較,是以分别比較 +8與 -8,再用 or 合并比較結果:

FPGA圖像處理10_常用算法_圖像銳化

高斯濾波後完整的銳化設計:

FPGA圖像處理10_常用算法_圖像銳化

仿真結果如下。

試驗圖檔來源于:https://unsplash.com/

輸入原始圖像:

FPGA圖像處理10_常用算法_圖像銳化

銳化,參數 a=1,T=0:

FPGA圖像處理10_常用算法_圖像銳化

銳化,參數 a=16,T=0(為加強銳化效果選擇該參數):

FPGA圖像處理10_常用算法_圖像銳化

最後附上拉普拉斯濾波銳化的輸出圖像,參數 a=1,T=0,供參考比較:

FPGA圖像處理10_常用算法_圖像銳化