一、圖像噪聲
由于圖像采集、處理、傳輸等過程不可避免的會受到噪聲的污染,妨礙人們對圖像了解及分析處理。常見的圖像噪聲有高斯噪聲、椒鹽噪聲等。
1、椒鹽噪聲

2、高斯噪聲
高斯噪聲是指噪聲的密度服從高斯分布的一類噪聲,由于高斯噪聲在空間和頻域中數學上的易處理性,這種噪聲(也稱為正态噪聲)模型經常被用于實踐中。高斯噪聲随機變量Z的機率密度函數由下式給出:![]()
[圖像平滑]——圖像噪聲、均值濾波、高斯濾波、中值濾波一、圖像噪聲二、圖像平滑三、簡單總結
加入高斯噪聲後的效果:
二、圖像平滑
圖像平滑從信号處理的角度看就是去除其中的高頻資訊,保留低頻資訊。是以我們可以對圖像實施低通濾波。低通濾波可以去除圖像中的噪聲,對圖像進行平滑。
- 根據濾波器的不同可以分為:均值濾波、高斯濾波、中值濾波、雙邊濾波
- 我們認為高頻資訊就是噪聲,低頻資訊就是有用的内容。
1、均值濾波
(1)API介紹
(2)執行個體分析
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager
#字型設定
my_font = font_manager.FontProperties(fname="C:/Windows/Fonts/STHUPO.TTF")
#1、讀取圖像
img = cv.imread("./images/girl.jpg")
#2、均值濾波
blur = cv.blur(img, (5,5))
#3、圖像顯示
plt.figure(figsize=(10,8), dpi=100)
# subplot中的121代表[1,2,1],表示在本區域裡顯示1行2列個圖像,最後的1表示本圖像顯示在第一個位置。
plt.subplot(121)
plt.imshow(img[:,:,::-1])
plt.title("原圖", fontproperties=my_font)
plt.xticks([]), plt.yticks([])
plt.subplot(122)
plt.imshow(blur[:,:,::-1])
plt.title("均值濾波後的結果", fontproperties=my_font)
plt.xticks([]), plt.yticks([])
plt.show()
2、高斯濾波
圖像是二維的,是以使用二維高斯分布。![]()
[圖像平滑]——圖像噪聲、均值濾波、高斯濾波、中值濾波一、圖像噪聲二、圖像平滑三、簡單總結
(1)高斯平滑的流程
<1> 首先确定權重矩陣
更遠的點以此類推。為了計算權重矩陣,需要設定 σ 的值。假定 σ = 1.5,則模糊半徑為1的權重矩陣如下:
這9個點的權重總和等于0.4787147,如果隻計算這9個點的權重平均,還必須讓他們的權重之和等于1,是以上面9個值還要分别除以0.4787147(相當于做了一個歸一化),得到最終的權重矩陣。
<2> 進行高斯模糊
每個點乘以對應的權重值:
将這9個值加起來,就是中心點的高斯模糊的值。對所有的點重複上述過程,就得到了高斯模糊後的圖像,如果原圖像是彩色圖檔,可以對RGB三個通道分别做高斯平滑。
(2)API介紹
(3)簡單案例
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from matplotlib import font_manager
#字型設定
my_font = font_manager.FontProperties(fname="C:/Windows/Fonts/STHUPO.TTF")
#1、讀取圖像
img = cv.imread("images/opencv-logo-white.png")
#2、高斯濾波
blur = cv.GaussianBlur(img, (3,3), 1)
#3、圖像顯示
plt.figure(figsize=(10, 8), dpi=100)
plt.subplot(121)
plt.imshow(img[:,:,::-1])
plt.title("原圖", fontproperties=my_font)
plt.xticks([]), plt.yticks([])
plt.subplot(122)
plt.imshow(blur[:,:,::-1])
plt.title("高斯濾波後的結果", fontproperties=my_font)
plt.xticks([]), plt.yticks([])
plt.show()
3、中值濾波
中值濾波是一種典型的非線性濾波技術,基本思想是用像素點鄰域灰階值的中值來代替該像素點的灰階值。
中值濾波對椒鹽噪聲(salt-and-pepper noise)來說尤其有用,因為他不依賴于鄰域内那些與典型值差别很大的值。
(1)API介紹
顧名思義,函數 cv.medianBlur() 取卷積核區域下所有像素的中值,并用該中值替換中心元素。這對去除圖像中的椒鹽噪聲非常有效。有趣的是,在上述濾波器中,中心元素是新計算的值,其可以是圖像中的像素值或新值。但在中值模糊中,中心元素總是被圖像中的某個像素值替換,它有效地降低了噪音。 其卷積核大小應為正整數。
(2)案例分析
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from matplotlib import font_manager
#字型設定
my_font = font_manager.FontProperties(fname="C:/Windows/Fonts/STHUPO.TTF")
#1、讀取圖檔
img = cv.imread('images/board.tif')
img = cv.cvtColor(img, cv.COLOR_BGR2RGBA)
#中值濾波
median = cv.medianBlur(img,5)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(median),plt.title('Median')
plt.xticks([]), plt.yticks([])
plt.show()