【图像处理】——图像滤波(Python+opencv实现三种方法:均值滤波、中值滤波、高斯滤波等)
目錄
一、什么是濾波以及濾波的目的?
二、均值濾波(cv2.blur())
1、原理
2、關鍵代碼
3、封裝代碼
二、中值濾波(cv2.medianBlur())
1、原理
2、關鍵代碼
3、封裝代碼
三、高斯濾波(cv2.GasussBlur())
1、原理
2、核模板(權值)
核大小3x3
核大小5x5
3、關鍵代碼
4、封裝代碼
四、核相同的情況下三種濾波方法對椒鹽噪聲和高斯噪聲的濾波效果比較
1、對椒鹽噪聲的濾波效果
2、對高斯噪聲的濾波效果
五、其他濾波方法
一、什么是濾波以及濾波的目的?
圖像濾波也就是圖像平滑化,?圖像平滑是一種區(qū)域增強的算法,平滑算法有鄰域平均法、中指濾波、邊界保持類濾波等。在圖像產(chǎn)生、傳輸和復制過程中,常常會因為多方面原因而被噪聲干擾或出現(xiàn)數(shù)據(jù)丟失,降低了圖像的質(zhì)量(某一像素,如果它與周圍像素點相比有明顯的不同,則該點被噪聲所感染)。這就需要對圖像進行一定的增強處理以減小這些缺陷帶來的影響。圖像平滑 有均值濾波、方框濾波、中值濾波和高斯濾波等.
在opencv中都是通過一個搜索窗口即核來對圖像進行掃描,將掃描后的結果經(jīng)過處理作為新的像素值,最終實現(xiàn)濾波
?
二、均值濾波(cv2.blur())
1、原理
將單個像素及其指定鄰域內(nèi)的所有像素按某種規(guī)則計算平均灰度值,再作為新圖像中的對應像素值,可以達到濾波去噪的目的。圖像邊緣一般集中了圖像的細節(jié)和高頻信息,如果通過鄰域平均法去噪,往往會引起圖像邊緣模糊
2、關鍵代碼
dst = cv2.blur(src, (kernalsize,kernalsize))其中,參數(shù):src 表示源圖像;ksize 表示核大小。核必須是大于1的奇數(shù),如3、5、7等。這里是以元祖的形式進行賦值3、封裝代碼
def mean_denoise(image,kernal_size=3):'''對噪聲圖像進行均值去噪:param image: 噪聲圖像:param kernal_size: 進行均值計算的區(qū)域尺寸大小,為奇數(shù),稱為核,默認為3:return: 返回的是去噪后的圖像矩陣'''noise_img = cv2.imread(image)md_img = cv2.blur(noise_img,(kernal_size,kernal_size))return md_img二、中值濾波(cv2.medianBlur())
常用于處理椒鹽噪聲
1、原理
在使用鄰域平均法去噪的同時也使得邊界變得模糊。而中值濾波是非線性的圖像處理方法,在去噪的同時可以兼顧到邊界信息的保留。選一個含有奇數(shù)點的窗口W,將這個窗口在圖像上掃描,把窗口中所含的像素點按灰度級的升或降序排列,取位于中間的灰度值來代替該點的灰度值。計算過程如下圖所示:
2、關鍵代碼
dst = cv2.medianBlur(src, ksize)其中,參數(shù):src 表示源圖像;ksize 表示核大小。核必須是大于1的奇數(shù),如3、5、7等。3、封裝代碼
def medium_denoise(image,kernal_size=3):'''對噪聲圖像進行中值去噪:param image: 噪聲圖像:param kernal_size: 進行中值計算的區(qū)域尺寸大小,為奇數(shù),稱為核,默認為3:return: 返回的是去噪后的圖像矩陣'''noise_img = cv2.imread(image)memd_img = cv2.medianBlur(noise_img,kernal_size)return memd_img三、高斯濾波(cv2.GasussBlur())
1、原理
????為了克服簡單局部平均法的弊端(圖像模糊),目前已提出許多保持邊緣、細節(jié)的局部平滑算法。它們的出發(fā)點都集中在如何選擇鄰域的大小、形狀和方向、參數(shù)加平均及鄰域各店的權重系數(shù)等。
?????圖像高斯平滑也是鄰域平均的思想對圖像進行平滑的一種方法,在圖像高斯平滑中,對圖像進行平均時,不同位置的像素被賦予了不同的權重。高斯平滑與簡單平滑不同,它在對鄰域內(nèi)像素進行平均時,給予不同位置的像素不同的權值,下圖的所示的 3\times3 和 5\times5 鄰域的高斯模板。
?????? 常用的非線性濾波方法,具有處理能力強、運算簡單、能快速去除脈沖噪聲的特點。在去除噪聲的同時也能很好地保護圖像的邊緣信息
2、核模板(權值)
核大小3x3
核大小5x5
3、關鍵代碼
dst = cv2.GaussianBlur(src, ksize, sigmaX)其中,參數(shù):src 表示原始圖像;ksize 表示核大小;sigmaX 表示X方向方差。注:核大小(N, N)必須是奇數(shù),X方向方差主要控制權重。4、封裝代碼
def gasuss_denoise(image,kernal_size=3,sigmaX=0):'''對噪聲圖像進行高斯去噪:param image: 噪聲圖像:param kernal_size: 進行均值計算的區(qū)域尺寸大小,為奇數(shù),稱為核,默認為3:param sigmaX:在x方向上的方差分布,默認為0:return: 返回去噪后的圖像矩陣'''noise_img = cv2.imread(image)gasd_img = cv2.GaussianBlur(noise_img, (kernal_size, kernal_size), sigmaX)return gasd_img四、核相同的情況下三種濾波方法對椒鹽噪聲和高斯噪聲的濾波效果比較
核越大,平滑效果越好,但是圖像模糊,失真
1、對椒鹽噪聲的濾波效果
def main():denoise_img1 =mean_denoise("sp_noise.jpg",kernal_size=3)denoise_img2 = medium_denoise("sp_noise.jpg", kernal_size=3)denoise_img3 =gasuss_denoise("sp_noise.jpg",kernal_size=3)noise_img = cv2.imread('sp_noise.jpg')cv2.imshow('sp_noise',noise_img)cv2.imshow('mean_denoise',denoise_img1)cv2.imshow('medium_denoise',denoise_img2)cv2.imshow('gasuss_denoise',denoise_img3)cv2.waitKey(0)if __name__ == '__main__':main()中值濾波對椒鹽噪聲的濾波效果比起其他兩種好得多
2、對高斯噪聲的濾波效果
def main():denoise_img1 =mean_denoise("gasuss_noise.jpg",kernal_size=3)denoise_img2 = medium_denoise("gasuss_noise.jpg", kernal_size=3)denoise_img3 =gasuss_denoise("gasuss_noise.jpg",kernal_size=3)noise_img = gasuss_noise=cv2.imread('gasuss_noise.jpg')cv2.imshow('gasuss_noise',noise_img)cv2.imshow('mean_denoise',denoise_img1)cv2.imshow('medium_denoise',denoise_img2)cv2.imshow('gasuss_denoise',denoise_img3)cv2.waitKey(0)if __name__ == '__main__':main()濾波效果誰濾波效果誰優(yōu)誰劣還得看指標參數(shù),可參考下一篇文章:《【圖像處理】——圖像質(zhì)量評價指標信噪比(PSNR)和結構相似性(SSIM)》
五、其他濾波方法
參考:《圖像濾波》
非局部均值濾波
????? 參考:《OpenCV3學習(5.2)——圖像修復inpaint函數(shù)和圖像去噪fastNlMeansDenoising系列函數(shù)》
????? 適用于濾除高斯噪點
在一個圖像中,在包含目標像素(噪點)目標區(qū)域的附近會存在與之相似的區(qū)域,我們將其所有相似的區(qū)域的像素值的平均值作為該目標像素點去噪后的像素值。只是這里是通過權重來進行均值的求得。
雙邊濾波
高通濾波
高通濾波就是去掉低頻信號,留下高頻信號,這就是高通濾波。
低通濾波
低通濾波就是去掉高頻信號,留下低頻信號,這就是低通濾波
?
總結
以上是生活随笔為你收集整理的【图像处理】——图像滤波(Python+opencv实现三种方法:均值滤波、中值滤波、高斯滤波等)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uds协议之can总线程序升级
- 下一篇: 【图像处理】——图像质量评价指标信噪比(