亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python OpenCV圖像處理之圖像濾波特效詳解

 更新時間:2022年02月23日 16:15:02   作者:FrigidWinter  
圖像濾波按圖像域可分為兩種類型:鄰域濾波和頻域濾波。按圖像頻率濾除效果主要分為兩種類型:低通濾波和高通濾波。本文將通過案例為大家詳細介紹一下OpenCV中的圖像濾波特效,需要的可以參考一下

1 分類

圖像濾波按圖像域可分為兩種類型:

  • 鄰域濾波(Spatial Domain Filter),其本質是數(shù)字窗口上的數(shù)學運算。一般用于圖像平滑、圖像銳化、特征提取(如紋理測量、邊緣檢測)等,鄰域濾波使用鄰域算子——利用給定像素周圍像素值以決定此像素最終輸出的一種算子
  • 頻域濾波(Frequency Domain Filter),其本質是對像素頻率的修改。一般用于降噪、重采樣、圖像壓縮等。

按圖像頻率濾除效果主要分為兩種類型:

  • 低通濾波。濾除原圖像的高頻成分,即模糊圖像邊緣與細節(jié)。
  • 高通濾波。濾除原圖像的低頻成分,即圖像銳化。

導入原圖和噪圖

import cv2,skimage
import numpy as np
?
# 原圖
srcImg = cv2.imread("test.jpg")
cv2.imshow("src image", srcImg)

# 給圖像增加高斯噪聲
noiseImg = skimage.util.random_noise(srcImg, mode='gaussian')
cv2.imshow("image with noise", noiseImg)

其中噪聲可選

  1. gaussian:高斯加性噪聲
  2. localvar:高斯加性噪聲,每點具有特定局部方差
  3. poisson: 泊松分布噪聲
  4. salt:鹽噪聲,隨機用1替換像素
  5. pepper:胡椒噪聲,隨機用0或-1替換像素
  6. s&p:椒鹽噪聲,呈現(xiàn)出黑白雜點

2 鄰域濾波

2.1 線性濾波

線性鄰域濾波,指像素的輸出值取決于輸入?yún)^(qū)域像素的加權和,下面介紹常見的線性濾波算子。

2.1.1 方框濾波

方框濾波(Box Filter),其核函數(shù)為:

非歸一化的方框濾波用于計算每個像素鄰域內的積分特性,比如密集光流算法(Dense Optical Flow Algorithms)中用到的圖像倒數(shù)的協(xié)方差矩陣。

歸一化的方框濾波則為均值濾波(Blur),即鄰域平均法——用一片圖像區(qū)域各個像素的均值來代替原圖像中的各個像素值。均值濾波用于圖像平滑,但其在降噪的同時也破壞了圖像的邊緣細節(jié),從而使圖像變得模糊,降噪能力較差。

進行方框濾波

# 方框濾波
boxImg = cv2.boxFilter(noiseImg, ddepth = -1, ksize = (2, 2), normalize = False)
cv2.imshow("box Image", boxImg)
# 均值濾波
blurImg = cv2.blur(noiseImg, (6, 5))
cv2.imshow("blur image", blurImg)

若將方框濾波核設為(6,5)且歸一化,則效果與均值濾波相同。

2.1.2 高斯濾波

高斯濾波(Gauss Filter)基于二維高斯核函數(shù)

具有在保持細節(jié)的條件下進行噪聲濾波的能力,因此廣泛應用于圖像降噪中,但其效率比均值濾波低。

高斯濾波器有兩個特征量:

  • 核大小,其決定了圖像的平滑范圍。理論上,高斯核函數(shù)應該無窮大,以達到最佳的平滑效果,但過大的卷積核會導致運算效率驟降。根據(jù)高斯函數(shù)3σ規(guī)則,可以取高斯核大小為(6σ+1)×(6σ+1);
  • 離散程度σ,其決定了對高頻成分的抑制程度。σ越大,像素加權半徑越大,平滑程度越強。

# 高斯濾波
gaussImg = cv2.GaussianBlur(noiseImg, (5, 5), 0)
cv2.namedWindow("gaussain image")
cv2.imshow("gaussain image", gaussImg)

2.2 非線性濾波

雖然線性濾波器易于構造且計算效率高,但有些情況下,使用鄰域像素的非線性濾波效果更好。例如,若圖像具有椒鹽噪聲而非高斯噪聲,此時對圖像高斯濾波并不會去除噪聲像素,只是把噪聲轉換為更為柔和但仍然可見的顆粒。

中值濾波(Median filter)是一種基于排序統(tǒng)計理論的典型非線性濾波技術,核心原理是用像素點鄰域灰度值中值代替該像素點的灰度值。中值濾波對脈沖噪聲、椒鹽噪聲尤為有效,且具有邊緣保護特性。中值濾波器本質上是數(shù)字窗口內的非線性取中值運算,而非線性濾波器的加權運算,因此中值濾波沒有卷積核,運算效率僅有線性濾波的1/5左右。

# 原圖
srcImg = cv2.imread("test.jpg")
cv2.imshow("src image", srcImg)

# 給圖像增加椒鹽噪聲
noiseImg = skimage.util.random_noise(srcImg, mode='s&p')
cv2.imshow("image with noise", noiseImg)

medImg = cv2.medianBlur(np.uint8(noiseImg * 255), 3)
cv2.namedWindow("median image")
cv2.imshow("median image", medImg)

中值濾波對椒鹽噪聲效果

3 頻域濾波

通過傅里葉變換將圖像變換到頻域,即可在頻域進行圖像處理。根據(jù)傅里葉變換的對稱性以及從低頻到高頻的排列規(guī)則,圖像原始頻域圖像會在四角形成低頻分量區(qū),而形成高頻中心。通常為了觀察方便,變換算法(例如Matlab中的fftshift)會將低頻分量移動到圖像中心形成低頻中心

圖像傅里葉變換代碼如下

# 傅里葉變換
dft = cv2.dft(np.float32(grayImg), flags = cv2.DFT_COMPLEX_OUTPUT)
# 將圖像中的低頻部分移動到圖像的中心
dftShift = np.fft.fftshift(dft)
# 計算幅頻特性
magnitude = 20 * np.log(cv2.magnitude(dftShift[:, :, 0], dftShift[:, :, 1]))
plt.subplot(121), plt.imshow(grayImg, cmap = 'gray')
plt.title('原圖'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(magnitude, cmap = 'gray')
plt.title('頻譜圖'), plt.xticks([]), plt.yticks([])
plt.show()

3.1 低通濾波

# 定義濾波掩碼
def mask(img, ftype):
    crow, ccol = int(img.shape[0] / 2), int(img.shape[1] / 2) # 求得圖像的中心點位置
    # 低通
    if ftype == 'low':
        mask = np.zeros((img.shape[0], img.shape[1], 2), np.uint8)
        mask[crow-30:crow+30, ccol-30:ccol+30] = 1
    # 高通
    if ftype == 'high':
        mask = np.ones((img.shape[0], img.shape[1], 2), np.uint8)
        mask[crow-30:crow+30, ccol-30:ccol+30] = 0
    return mask

lowImg = dftShift * mask(grayImg, 'low')
lowImg = np.fft.ifftshift(lowImg)
lowImg = cv2.idft(lowImg)
lowImg = cv2.magnitude(lowImg[:, :, 0], lowImg[:, :, 1])

3.2 高通濾波

# 定義濾波掩碼
def mask(img, ftype):
    crow, ccol = int(img.shape[0] / 2), int(img.shape[1] / 2) # 求得圖像的中心點位置
    # 低通
    if ftype == 'low':
        mask = np.zeros((img.shape[0], img.shape[1], 2), np.uint8)
        mask[crow-30:crow+30, ccol-30:ccol+30] = 1
    # 高通
    if ftype == 'high':
        mask = np.ones((img.shape[0], img.shape[1], 2), np.uint8)
        mask[crow-30:crow+30, ccol-30:ccol+30] = 0
    return mask

highImg = dftShift * mask(grayImg, 'high')
highImg = np.fft.ifftshift(highImg)
highImg = cv2.idft(highImg)
highImg = cv2.magnitude(highImg[:, :, 0], highImg[:, :, 1])

以上就是Python OpenCV圖像處理之圖像濾波特效詳解的詳細內容,更多關于Python OpenCV圖像濾波特效的資料請關注腳本之家其它相關文章!

相關文章

  • Python常見錯誤:IndexError:?list?index?out?of?range解決

    Python常見錯誤:IndexError:?list?index?out?of?range解決

    最近在寫一個爬蟲程序,但是卻出現(xiàn)了錯誤提示IndexError:?list?index?out?of?range,所以下面這篇文章主要給大家介紹了關于Python常見錯誤:IndexError:?list?index?out?of?range的解決方法,需要的朋友可以參考下
    2023-01-01
  • Python減肥小工具輕松幫你瘦

    Python減肥小工具輕松幫你瘦

    今天小編就為大家分享一篇使用Python彈窗時刻提醒你減肥的小程序代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-09-09
  • python tkinter制作用戶登錄界面的簡單實現(xiàn)

    python tkinter制作用戶登錄界面的簡單實現(xiàn)

    這篇文章主要介紹了python tkinter制作用戶登錄界面的簡單實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • python數(shù)據(jù)結構之線性表的順序存儲結構

    python數(shù)據(jù)結構之線性表的順序存儲結構

    這篇文章主要為大家詳細介紹了python數(shù)據(jù)結構之線性表的順序存儲結構,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • python 中的命名空間,你真的了解嗎?

    python 中的命名空間,你真的了解嗎?

    這篇文章主要介紹了python 中命名空間的相關資料,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-08-08
  • Jupyter Notebook讀取csv文件出現(xiàn)的問題及解決

    Jupyter Notebook讀取csv文件出現(xiàn)的問題及解決

    這篇文章主要介紹了Jupyter Notebook讀取csv文件出現(xiàn)的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 解決更改AUTH_USER_MODEL后出現(xiàn)的問題

    解決更改AUTH_USER_MODEL后出現(xiàn)的問題

    這篇文章主要介紹了解決更改AUTH_USER_MODEL后出現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 使用Python編寫基于DHT協(xié)議的BT資源爬蟲

    使用Python編寫基于DHT協(xié)議的BT資源爬蟲

    這篇文章主要介紹了使用Python編寫基于DHT協(xié)議的BT資源爬蟲的方法,文中對于DHT協(xié)議的相關知識也作了補充說明,需要的朋友可以參考下
    2016-03-03
  • python實現(xiàn)跨年煙花動態(tài)效果

    python實現(xiàn)跨年煙花動態(tài)效果

    這篇文章主要介紹了python實現(xiàn)跨年煙花的動態(tài)效果,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-01-01
  • Python繪制趨勢線的示例代碼

    Python繪制趨勢線的示例代碼

    趨勢線是用來顯示數(shù)據(jù)趨勢或者預測未來發(fā)展方向的一種圖形表示方法,這篇文章主要為大家詳細介紹了如何使用Python繪制趨勢線,需要的可以了解下
    2024-03-03

最新評論