日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【OpenCV 例程 300 篇】101. 自适应中值滤波器

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OpenCV 例程 300 篇】101. 自适应中值滤波器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

專欄地址:『youcans 的 OpenCV 例程 300篇 - 總目錄』

【第 7 章:圖像復原與重建】
100. 自適應局部降噪濾波器
101. 自適應中值濾波器
102. 陷波帶阻濾波器的傳遞函數

【youcans 的 OpenCV 例程 300 篇】101. 自適應中值濾波器


3.8 自適應中值濾波器(Adaptive median filter)

中值濾波器的窗口尺寸是固定大小不變的,不能同時兼顧去噪和保護圖像的細節,在噪聲的密度較小時的性能較好,當噪聲概率較高時的性能就會劣化。

自適應中值濾波器根據預先設定的條件,在濾波的過程中動態改變濾波器的窗口尺寸大小;進一步地,根據條件判斷當前像素是否噪聲,由此決定是否用鄰域中值替換當前像素。

自適應中值濾波器可以處理較大概率的脈沖噪聲,平滑非脈沖噪聲,盡可能保護圖像細節信息,避免圖像邊緣的細化或者粗化。

SxySxySxy 表示中心在點 (x,y)(x,y)(x,y) 、大小為 m?nm*nm?n 的矩形子窗口(鄰域),濾波器在由 SxySxySxy 定義的鄰域操作。

Zmin、Zmax、ZmedZmin、Zmax、ZmedZminZmaxZmed 表示 SxySxySxy 中的最小灰度值、最大灰度值和灰度值的中值,ZxyZxyZxy 是點 (x,y)(x,y)(x,y) 的灰度值,SmaxSmaxSmax 是允許的最大窗口尺寸。

自適應中值濾波器分為兩個過程:

  • Step A:

    • A1 = Zmed - Zmin
    • A2 = Zmed - Zmax
    • 如果 A1>0 且 A2<0,則跳轉到 Step B;否則,增大窗口尺寸
    • 如果增大后的尺寸 ≤ Smax,則重復 A;否則,輸出 Zmed
  • Step B:

    • B1 = Zxy - Zmin
    • B2 = Zxy - Zmax
    • 如果 B1>0 且 B2<0,則輸出 Zxy;否則,輸出 Zmed

StepA 的目的是確定當前窗口內得到的中值 Zmed 是否是噪聲。如果 Zmin<Zmed<Zmax,則中值 Zmed 不是噪聲,轉到StepB。如果Zmin<Zxy<Zmax,則 Zxy 不是噪聲,濾波器輸出 Zxy。如果不滿足上述條件,則判定 Zxy 是噪聲,輸出中值 Zmed。

如果在StepA中,Zmed 不滿足條件 Zmin<Zmed<Zmax,則可判斷得到的中值 Zmed 是噪聲。這時要增大濾波器的窗口尺寸,在更大的范圍內尋找一個非噪聲點的中值。

因此,如果圖像中噪聲的概率較低,自適應中值濾波器可以使用較小的窗口尺寸,以提高計算速度;反之,如果噪聲的概率較高,則需要增大濾波器的窗口尺寸,以改善濾波效果。


例程 9.15:自適應中值濾波器

# # 9.15: 自適應中值濾波器 (Adaptive median filter)img = cv2.imread("../images/Fig0514a.tif", 0) # flags=0 讀取為灰度圖像hImg = img.shape[0]wImg = img.shape[1]smax = 7 # 允許最大窗口尺寸m, n = smax, smaximgAriMean = cv2.boxFilter(img, -1, (m, n)) # 算術平均濾波# 邊緣填充hPad = int((m-1) / 2)wPad = int((n-1) / 2)imgPad = np.pad(img.copy(), ((hPad, m-hPad-1), (wPad, n-wPad-1)), mode="edge")imgMedianFilter = np.zeros(img.shape) # 中值濾波器imgAdaMedFilter = np.zeros(img.shape) # 自適應中值濾波器for i in range(hPad, hPad+hImg):for j in range(wPad, wPad+wImg):# 1. 中值濾波器 (Median filter)ksize = 3k = int(ksize/2)pad = imgPad[i-k:i+k+1, j-k:j+k+1] # 鄰域 Sxy, m*nimgMedianFilter[i-hPad, j-wPad] = np.median(pad)# 2. 自適應中值濾波器 (Adaptive median filter)ksize = 3k = int(ksize/2)pad = imgPad[i-k:i+k+1, j-k:j+k+1]zxy = img[i-hPad][j-wPad]zmin = np.min(pad)zmed = np.median(pad)zmax = np.max(pad)if zmin < zmed < zmax:if zmin < zxy < zmax:imgAdaMedFilter[i-hPad, j-wPad] = zxyelse:imgAdaMedFilter[i-hPad, j-wPad] = zmedelse:while True:ksize = ksize + 2if zmin < zmed < zmax or ksize > smax:breakk = int(ksize / 2)pad = imgPad[i-k:i+k+1, j-k:j+k+1]zmed = np.median(pad)zmin = np.min(pad)zmax = np.max(pad)if zmin < zmed < zmax or ksize > smax:if zmin < zxy < zmax:imgAdaMedFilter[i-hPad, j-wPad] = zxyelse:imgAdaMedFilter[i-hPad, j-wPad] = zmedplt.figure(figsize=(9, 6))plt.subplot(131), plt.axis('off'), plt.title("Original")plt.imshow(img, cmap='gray', vmin=0, vmax=255)plt.subplot(132), plt.axis('off'), plt.title("Median filter")plt.imshow(imgMedianFilter, cmap='gray', vmin=0, vmax=255)plt.subplot(133), plt.axis('off'), plt.title("Adaptive median filter")plt.imshow(imgAdaMedFilter, cmap='gray', vmin=0, vmax=255)plt.tight_layout()plt.show()


(本節完)


版權聲明:
youcans@xupt 原創作品,轉載必須標注原文鏈接:(https://blog.csdn.net/youcans/article/details/122839526)
Copyright 2022 youcans, XUPT
Crated:2022-2-1


總結

以上是生活随笔為你收集整理的【OpenCV 例程 300 篇】101. 自适应中值滤波器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。