Opencv中常見的濾波方法


濾波(模糊)的概念和作用:
    圖像濾波增強處理實質上就是運用濾波技術來增強圖像的某些空間頻率特征,以改善地物目標與領域或背景之間的灰度反差。
  遙感系統成像過程中可能產生的”模糊”作用,常使遙感圖像上某些用戶感興趣的線性形跡、紋理與地物邊界等信息顯示得不夠清晰,
  不易識別。需要通過采用領域處理方法來分析、比較和調整像元與其周圍相鄰像元間的對比度關系,圖像才能得到增加,也就是說
  需要采用濾波增加技術處理。

一、空域濾波:使用空域卷積模板進行的圖像處理,模板本身被稱為空域濾波器
  1.線性濾波器:
    是線性系統和頻域濾波概念在空域的自然延伸。
    它包括:低通濾波器(低頻的通過):平滑圖像,去除噪音
        高通濾波器:邊緣增強,邊緣提取
        帶通濾波器:刪除特定頻率

  2.非線性濾波器:使用模板進行結果像素值的計算時,結果值直接取決於像素領域的值,而不使用加權和的計算方式
    它包括:中值濾波:平滑圖像,去除噪音
        最大值濾波:尋找最亮點
        最小值濾波:尋找最暗點

    平滑濾波器的主要用途:降低噪音,對大圖像處理前,刪去無用的細小細節,平滑處理,恢復過分的銳化的圖像,圖像創藝
    幾種簡單的低通濾波器:
      均值濾波器:待處理像素點的值,等於其一定大小的領域內全體像素的平均值
      加權平均濾波器:待處理像素點的輸出值,等於其周圍相鄰像素的全體像素的加權平均值
      中值濾波器:用模板區域內象素的中值,作為結果值。消除孤立的亮點(暗點),抑制噪聲,可以比較好地保留邊緣輪廓信息和圖像的細節

    銳化濾波器:增強圖像中景物的邊緣和輪廓,印刷中的細微層次強調,軍事目標識別、定位等
    它包括:
        基本高通濾波器:在增強了邊緣的同時,丟失了圖像的層次和背景亮度。能夠增強圖像中的小尺度地物特征。
        高增益濾波器:在增強圖像的邊緣和細節的同時,保持了原圖像的低頻成分。即增強了邊緣又保留了層次,但在增強了邊緣的同時也增強了噪音。

    微分濾波器:直接使用,與高通類似。有兩種特殊應用:梯度大於25,賦255,否則賦原值,圖象中的邊緣信息被突出,
          背景保留。大於25,賦最大值255,否則為零,圖像中的邊緣信息被突出,同時圖像也被二值化。

二、頻域濾波:
    低通濾波:
      理想低通濾波器(ILPF)
      Butterworth低通濾波器(BLPF)
      指數抵通濾波器(ELPF)
      梯形低通濾波器(TLPF)

    高通濾波:
      理想高通濾波器(IHPF)
      Butterworth高通濾波器(BHPF)
      指數高通濾波器(EHPF)
      梯形高通濾波器(THPF)

帶通/帶阻濾波器:帶通允許一定頻率范圍內的信號通過而阻止其他頻率范圍內的信號通過。

代碼如下:

#!usr/bin/python
# coding=utf-8

import cv2
import random
import copy

import numpy as np
path = r"C:\Users\Administrator\Desktop\00001.jpg"

or_img = cv2.imread(path)
re_img = cv2.resize(or_img, (500, 300))
width = re_img.shape[0]
height = re_img.shape[1]
channel = re_img.shape[2]
cv2.imshow("re_img...",re_img)
cv2.waitKey(2000)

# 加噪聲
per = 0.1 # 噪聲占比
N_img = re_img.copy()
N_num = int(per * width * height)
print("N_num",N_num)
for i in range(N_num):
  rows = np.random.randint(0, width-1)
  cols = np.random.randint(0, height -1)
  channel = np.random.randint(0,3)
  if np.random.randint(0,2) == 0:
    N_img[rows,cols,channel] = 0
  else:
    N_img[rows, cols, channel] = 255

cv2.imshow("N_img",N_img)
cv2.waitKey(3000)

# 中值濾波
medianBlur = cv2.medianBlur(N_img, 5)
# medianBlur(src, ksize[, dst]) -> dst
cv2.imshow("medianBlur",medianBlur)
cv2.waitKey(3000)
cv2.imwrite("./medianBlur.jpg",medianBlur)

# 均值濾波
Blur = cv2.blur(N_img, (5, 5))
# blur(src, ksize[, dst[, anchor[, borderType]]]) -> dst
cv2.imshow("Blur",Blur)
cv2.waitKey(3000)
cv2.imwrite("./Blur.jpg",Blur)

# 高斯濾波
GaussianBlur = cv2.GaussianBlur(N_img, (5, 5), 0)
# GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) -> dst
cv2.imshow("GaussianBlur",GaussianBlur)
cv2.waitKey(3000)
cv2.imwrite("./GaussianBlur.jpg",GaussianBlur)


# 高斯雙邊濾波
GaussianbilateralFilter = cv2.bilateralFilter(N_img, 40, 75, 75)
# bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]]) -> dst
cv2.imshow("GaussianbilateralFilter",GaussianbilateralFilter)
cv2.waitKey(3000)
cv2.imwrite("./GaussianbilateralFilter.jpg",GaussianbilateralFilter)

# boxFilter
boxFilter = cv2.boxFilter(N_img, -1, (5,5), normalize=1)
# boxFilter(src, ddepth, ksize[, dst[, anchor[, normalize[, borderType]]]]) -> dst
cv2.imshow("boxFilter",boxFilter)
cv2.waitKey(3000)
cv2.imwrite("./boxFilter.jpg",boxFilter)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM