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