图像处理与图像识别笔记(五)图像增强2
上一節中我們講解了灰度變換的原理以及實現方法,本節我們講解空域濾波增強,與灰度變換相同,空域濾波增強是一種空域處理的方法,不過空域濾波不是一種對點做處理的方法,而是利用相鄰像素間的關系進行增強。空域濾波可以按照增強效果的不同分為平滑與銳化兩類,又都可分為線性與非線性方法,線性濾波利用空域卷積來實現。接下來我們對平滑與銳化一一進行講解。
一、圖像平滑
圖像平滑的目的是抑制和消除噪聲,我們首先介紹一種線性平滑方法—鄰域平均,平滑算子為
AAA表示已以(i,j)(i,j)(i,j)為中心的鄰域點的集合,MMM是AAA中像素點的總數,鄰域平均的實現代碼如下:
import cv2 import numpy as np import matplotlib.pyplot as plt import pylabimg = cv2.imread('Lena.jpg',1) kernel = np.ones((5,5),np.float32)/25 #5×5卷積核,鄰域平均 res = cv2.filter2D(img,-1,kernel) cv2.imshow('res',res) cv2.waitKey(0)opencv提供cv2.filter2D()函數來對圖像進行卷積操作
dst = cv2.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]) #dst:輸出圖像 #src:輸入圖像 #ddepth:輸出圖像深度,-1為與原圖相同 #kernel:卷積核 #anchor:錨點,默認為(-1, -1),指卷積核的中心點 #delta:輸出結果時的附加值,默認為0 #borderType:邊界模式,默認為BORDER_DEFAULT我們采用不同大小的卷積核,依次對源圖像進行卷積操作,結果如下,
卷積核半徑越大,圖像平滑的效果越明顯,圖像越來越模糊。
除了上述線性平滑方法之外,還有非線性平滑濾波器,包括中值濾波、百分比濾波、最大值濾波、最小值濾波,我們特別講解一下中值濾波,中值濾波是將選定的奇數像素窗口內的各像素灰度按大小排隊,用中間的灰度值代替窗口中原圖像中間位置的像素,因此是一種非線性濾波。中值濾波對既保留邊緣又要求去噪的任務很有用,尤其對椒鹽噪聲。
我們為Lena添加椒鹽噪聲,分別對其進行鄰域平均與中值濾波,實現代碼如下,
結果如下,
經過對比發現,中值濾波的去噪效果好,且能夠較好的保留圖像邊緣,鄰域平均的平滑效果更好但去噪效果相對較差。
二、圖像銳化
對正常的圖像,通過銳化提取邊緣、輪廓、線條等信息,供進一步識別。通過加重圖像輪廓克服降質,以達到更好的視覺效果。常見的銳化算法包括Roberts算子、Sobel算子、Prewitt算子、拉普拉斯算子。
(1)基于一階微分的圖像增強—梯度法
我們把圖像看成二維離散函數,為了提取圖像的邊緣,我們需要計算圖像的梯度,梯度是方向導數取最大值的方向的向量 ,圖像的邊緣即為圖像梯度較大的地方。
梯度用一個二維列向量來定義,
對于離散的二維圖像,為計算方便,用絕對值代替幅值,用差分代替微分:
(1)(1)(1)
為了更好的理解,我們考慮一個3×3的圖像區域,
zzz代表灰度級,由式(1)(1)(1),在點z5z_5z5?的▽f=∣z6?z5∣+∣z8?z5∣▽f=|z_6-z_5|+|z_8-z_5|▽f=∣z6??z5?∣+∣z8??z5?∣
接下來我們來看Roberts交叉梯度,z5z_5z5?的▽f=∣z9?z5∣+∣z8?z6∣▽f=|z_9-z_5|+|z_8-z_6|▽f=∣z9??z5?∣+∣z8??z6?∣,我們發現計算方法發生了改變,可以理解為各種梯度算子就是不同的梯度計算方法,由于上述的梯度公式本來就是近似的,因此沒有絕對的衡量方法,每種梯度算子的功效各不相同,像第一種方式關注的是圖像水平方向和垂直方向上的梯度,而Roberts交叉梯度則關注的是斜對角方向上的梯度。
Roberts交叉梯度的計算由兩個模板組成,第一個模板求得梯度的第一項,第二個模板求得梯度的第二項,然后求和,得到梯度。兩個模板稱為Roberts交叉梯度算子。
利用Roberts交叉梯度算子對圖像進行處理,實現代碼如下,
實驗結果如下,
接下來我們學習Sobel梯度算子,Sobel是一種3×3的梯度模板,▽f=∣(z7+2z8+z9)?(z1+2z2+z3)∣+∣(z3+2z6+z9)?(z1+2z4+z7)∣▽f=|(z_7+2z_8+z_9)-(z_1+2z_2+z_3)|+|(z_3+2z_6+z_9)-(z_1+2z_4+z_7)|▽f=∣(z7?+2z8?+z9?)?(z1?+2z2?+z3?)∣+∣(z3?+2z6?+z9?)?(z1?+2z4?+z7?)∣,
Sobel關注的是水平方向上與垂直方向上的梯度,這點與Roberts不同,Sobel實現代碼如下,
實驗結果如下,
(2)基于二階微分的圖像增強—拉普拉斯算子
對圖像求二階微分(近似),
在xxx方向上,
在yyy方向上,
則二階微分為
▽2f=[f(x+1,y)+f(x?1,y)+f(x,y+1)+f(x,y?1)]?4f(x,y)▽^2f = [f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)]-4f(x,y)▽2f=[f(x+1,y)+f(x?1,y)+f(x,y+1)+f(x,y?1)]?4f(x,y)
拉普拉斯算子模板為
由于拉普拉斯是一種微分算子,它的應用可增強圖像中灰度突變的區域,減弱灰度的緩慢變化區域。
我們通常的做法是把原圖像和拉普拉斯圖像疊加在一起,這樣既能保護拉式銳化效果,同時又能復原背景信息,具體的做法是:
當然,上述過程也可一步完成,更改拉普拉斯模板即可,如下(注意,此處模板中心只能為正,在以后的應用中,模板中心最好設為正值),
拉普拉斯算子實現代碼如下,
實驗結果如下,
總結一下,我們詳細講解了三種算子,Roberts算子、Sobel算子和拉式算子,前兩種屬于一階算子,拉式算子屬于二階算子。通常我們在處理圖像時,先會用拉式算子突出圖像中的小細節,后用梯度法突出圖像的邊緣。
本節我們所講屬于圖像增強技術中的空域濾波技術,即利用各種各樣的模板(算子)對圖像進行處理,后邊我們會講到基于頻域的圖像處理技術。
未完待續
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的图像处理与图像识别笔记(五)图像增强2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样修改MFC中应用程序标题的图标?
- 下一篇: dos部分命令