天天看點

[圖像平滑]——圖像噪聲、均值濾波、高斯濾波、中值濾波一、圖像噪聲二、圖像平滑三、簡單總結

一、圖像噪聲

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

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()
           
[圖像平滑]——圖像噪聲、均值濾波、高斯濾波、中值濾波一、圖像噪聲二、圖像平滑三、簡單總結

三、簡單總結

[圖像平滑]——圖像噪聲、均值濾波、高斯濾波、中值濾波一、圖像噪聲二、圖像平滑三、簡單總結

繼續閱讀