Python----OpenCV(圖像増強——圖像平滑、均值濾波、高斯濾波、中值濾波、雙邊濾波)

Python----計算機視覺處理(Opencv:圖像噪點消除:濾波算法,噪點消除)

一、圖像平滑

????????圖像平滑處理(Smoothing Images),也稱為圖像模糊處理、圖像濾波(Images Filtering),就是在保留圖像原有信息的情況下,過濾掉圖像內部的噪聲,所得到的圖像稱 為平滑圖像。

圖像處理中平滑操作就是一種預處理的手段,目的是為后續的處理工作做鋪墊。

平滑的目的是什么

  • 噪聲去除:圖像在采集過程中可能會受到各種噪聲的影響,平滑操作能夠有效減小噪聲對圖像質量的影響。

  • 特征提取:通過平滑去除細節,有助于在后續處理(如邊緣檢測、形態學處理等)中更好地提取關鍵特征。

  • 圖像壓縮:某些壓縮算法依賴于圖像的平滑化,以降低數據冗余。

常見濾波

  • 均值濾波

  • 高斯濾波

  • 中值濾波

  • 雙邊濾波

二、均值濾波

????????均值濾波是一種常用的線性濾波技術,主要用于平滑信號,從而減少噪聲。這種方法通過將信號中某個點的值替換為其鄰域內所有點的平均值,來消除噪聲波動。

????????但需要注意的是,由于它取的是“平均”,所以在消除噪聲的同時,也會不可避免地模糊掉一些信號的細節

2.1、均值濾波核心思想

????????均值濾波是一種簡單的平滑技術,通過將圖像中某個像素與其鄰域像素的平均值替換,從而使圖像變得模糊。它的核心思想是用一個固定大小的窗口(例如 3x3 或 5x5)在圖像上滑動,然后將窗口內的所有像素值的平均值賦給當前像素。

1、選擇窗口大小

均值濾波的第一步是選擇一個滑動窗口的大小,通常為3x3、5x5等。窗口的大小決定了參與平均計算的像素點數量。一般選擇奇數大小的窗口,以便有一個明確的中心點。

2、窗口移動

均值濾波的窗口需要在信號或圖像上逐步移動。窗口通常從信號或圖像的左上角開始,一步一步地向右移動,然后再向下移動,直到覆蓋整個信號或圖像。

如果步長加大,會使得計算結果的精度下降,導致濾波效果不佳。

3、計算平均值

在窗口確定的位置,將窗口中的所有數值相加,然后除以窗口中的數值個數,得到均值。這個均值將作為窗口中心點的新的數值。這就像我們做菜時,將所有食材切碎、混合,然后嘗一嘗,確定一個統一的“味道”。

2.2、適用場景

  • 椒鹽噪聲:均值濾波對隨機的黑白噪聲(如椒鹽噪聲)有較好的去除效果,因為它可以通過鄰域平均將這些極端值抹去。
  • 圖像處理和分析:在圖像預處理階段,均值濾波常常作為去噪步驟,用于準備更清晰的圖像以供進一步處理,例如邊緣檢測、圖像分割等。

?

import cv2 # 導入OpenCV庫img = cv2.imread('./images/jiaoyan_pands.jpg')# 對圖像進行均值模糊
# (5, 5) 是模糊核的大小,它決定了模糊的程度。
# 數字越大,模糊效果越明顯。
res = cv2.blur(img, (5, 5))# 顯示原始圖像
cv2.imshow('img', img)# 顯示模糊后的圖像
cv2.imshow('res', res)# 等待按鍵
# 0 表示無限等待,直到用戶按下任意按鍵。
# 如果設置為正整數,則表示等待的毫秒數。
cv2.waitKey(0)# 銷毀所有OpenCV窗口
cv2.destroyAllWindows()

三、高斯濾波

3.1、概念

????????高斯濾波(Gaussian filter) 包含許多種,包括低通、帶通和高通等,我們通常圖像上說的高斯濾波,指的是高斯模糊(Gaussian Blur) ,是一種高斯低通濾波 ,其過濾調圖像高頻成分(圖像細節部分),保留圖像低頻成分(圖像平滑區域),所以對圖像進行 ‘高斯模糊’ 后,圖像會變得模糊。

高斯模糊對于抑制?高斯噪聲?(服從正態分布的噪聲) 非常有效。

????????這個矩陣的每個數字表示該位置上像素點的權重。中間的數字權重大,表示圖像中心的 像素影響較大,而周圍像素的影響較小。?

高斯模糊本質上就是利用高斯函數生成的高斯核(高斯模板)對圖像進行卷積操作。

應用場景

  1. 噪聲去除:在圖像預處理階段,常用于去除高斯噪聲。
  2. 邊緣檢測前處理:在邊緣檢測算法(如Canny算法)之前,通常會先應用高斯濾波來去除噪聲,提高邊緣檢測的效果。

import cv2 # 導入OpenCV庫img = cv2.imread('./images/jiaoyan_pands.jpg')# 對圖像進行高斯模糊
# (5, 5) 是高斯核的大小,它決定了模糊的程度。
# sigmaX=0 表示OpenCV會根據核的大小自動計算X方向的標準差。
# 高斯模糊相比均值模糊,在平滑圖像的同時更能保留圖像的邊緣信息。
gres = cv2.GaussianBlur(img, (5, 5), sigmaX=0)# 顯示原始圖像
cv2.imshow('img', img)# 顯示高斯模糊后的圖像
cv2.imshow('gres', gres)# 等待按鍵
# 0 表示無限等待,直到用戶按下任意按鍵。
cv2.waitKey(0)# 銷毀所有OpenCV窗口
cv2.destroyAllWindows()

四、中值濾波

????????中值濾波是一種常用的圖像處理技術,特別用于去除圖像中的噪聲。其基本原理是通過替換每個像素的值為其鄰域內像素的中值來平滑圖像,減少噪聲。

中值濾波的步驟

  1. 對于圖像中的每個像素點,選取一個鄰域窗口(通常是3x3、5x5或7x7的窗口)。
  2. 將窗口內的所有像素值排序。
  3. 用排序后的中間值替代當前像素的值。

這種濾波方法尤其對椒鹽噪聲(即圖像中有白點和黑點)效果顯著,因為它能有效去除這些異常值,而不影響圖像的整體結構。

中值濾波的優缺點

  • 優點:能有效去除椒鹽噪聲,保留圖像邊緣信息。
  • 缺點:處理速度較慢,尤其在窗口較大時,計算量會增加。

import cv2 # 導入OpenCV庫img = cv2.imread('./images/jiaoyan_pands.jpg')# 對圖像進行中值模糊
# 5 是模糊核的大小(必須是奇數)。
# 中值模糊對于去除椒鹽噪聲(salt-and-pepper noise)特別有效,
# 因為它用像素鄰域內的中值來替代中心像素的值,
# 從而有效地消除離群的噪聲點,同時又能較好地保留圖像邊緣。
medres = cv2.medianBlur(img, 5)# 顯示原始圖像
cv2.imshow('img', img)# 顯示中值模糊后的圖像
cv2.imshow('medres', medres)# 等待按鍵
# 0 表示無限等待,直到用戶按下任意按鍵。
cv2.waitKey(0)# 銷毀所有OpenCV窗口
cv2.destroyAllWindows()

五、雙邊濾波

????????雙邊濾波(Bilateral Filtering)是一種在保持邊緣的同時去除噪聲的圖像平滑技術。與傳統的高斯濾波不同,雙邊濾波在空間上進行平滑的同時,也考慮像素值的差異,從而有效地保護邊緣信息。????????

????????雙邊濾波的核心思想是:在濾波時,不僅考慮像素之間的空間距離,還考慮像素值的相似性。具體來說,雙邊濾波的權重由兩部分組成

雙邊濾波主要用于以下幾個領域:

  1. 去噪:適用于去除圖像中的噪聲,特別是圖像中包含大量高頻噪聲時。

  2. 圖像平滑:在保持邊緣的同時平滑圖像,常用于圖像美化。

  3. 圖像增強:增強圖像中的特征,突出重要部分,尤其是在邊緣部分。

cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace)
參數描述
src輸入圖像,可以是灰度圖或彩色圖。
d鄰域直徑。若為負值,函數會根據?sigmaSpace?自動計算。
sigmaColor顏色空間的標準差,控制顏色相似度的影響。較大的值意味著更多的像素會被平滑處理。
sigmaSpace空間坐標的標準差,控制像素的空間鄰域影響。較大的值意味著濾波效果覆蓋更大范圍。

import cv2 # 導入OpenCV庫img = cv2.imread('./images/nezha.png')# 對圖像進行雙邊濾波
# 雙邊濾波是一種非線性的平滑濾波方法,它在平滑圖像的同時能夠很好地保留邊緣。
# 參數解釋:
# 1. img: 輸入圖像。
# 2. 15: 濾波器核的直徑。該值越大,參與計算的像素越多,去噪效果越明顯,但計算量也越大。
# 3. 30: 顏色空間標準差 (sigmaColor)。該值越大,在顏色相差較大的像素之間進行模糊的可能性越大。
#        較大的值意味著更多的顏色會被混合在一起。
# 4. 75: 坐標空間標準差 (sigmaSpace)。該值越大,越遠的像素會相互影響,模糊效果越明顯。
#        它決定了在多大的空間范圍內進行模糊。
# 雙邊濾波的優點在于它結合了空間距離和像素顏色相似度來決定像素的權重,
# 從而實現了在去除噪聲的同時保留圖像的邊緣細節。
biltblur = cv2.bilateralFilter(img, 15, 30, 75) # 修正了sigmaSpace參數為75,使其更常見且避免過大的模糊# 顯示原始圖像
cv2.imshow('img', img)# 顯示雙邊濾波后的圖像
cv2.imshow('biltblur', biltblur)# 等待按鍵
# 0 表示無限等待,直到用戶按下任意按鍵。
cv2.waitKey(0)# 銷毀所有OpenCV窗口
cv2.destroyAllWindows()

Python----計算機視覺處理(Opencv:圖像噪點消除:濾波算法,噪點消除)?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/86545.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/86545.shtml
英文地址,請注明出處:http://en.pswp.cn/web/86545.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

筆記:使用EasyExcel導入csv文件出現編碼問題,導致導入數據全為null的解決方法

筆記:使用EasyExcel導入csv文件出現編碼問題,導致導入數據全為null的解決方法 通常情況下,我們使用excel導入,但是部分情況下或者領導要求,我們需要使用csv導入文件,但是csv文件模板下載之后會變成系統當前…

NL2SQL(Natural Language to SQL)優化之道:提升準確率與復雜查詢能力

自然語言 → SQL 的轉譯(NL2SQL)技術,是讓非技術用戶與數據庫“對話”的橋梁。而在實際應用中,我們不僅需要“能轉”,更要“轉得準、轉得全、轉得快”。 一、什么是 NL2SQL? NL2SQL(Natural La…

java中map的循環方式

什么是Map集合? Map是Java中的一個接口,它用于存儲鍵-值對,并且鍵和值都可以是任意對象。它是Java集合框架中的一部分,并提供了一些方法來操作和訪問Map中的元素。 Map中的每個鍵都是唯一的,這意味著不能使用相同的鍵…

python學習筆記(深度學習)

文章目錄 1、概述2、學習內容2.1、pytorch 常見語法2.1.1、sum2.1.2、廣播機制2.1.3、張量2.1.4、DataLoader 2.2、普通語法2.2.1、迭代器 1、概述 本篇博客用來記錄,在深度學習過程中,常用的 python 語法內容 2、學習內容 2.1、pytorch 常見語法 2.…

力扣網C語言編程題:搜索二維矩陣(右上角->左下角解法)

一. 簡介 上一篇文章關于"在二維數組中查找某個元素"的問題,提供了兩種解題思路,文章如下: 力扣網C語言編程題:搜索二維矩陣的普通解法與二分查找法-CSDN博客 本文提供第三種解題思路:從左下角->右上角…

AI大模型流式輸出,OkHttp Log攔截打印方案

背景: 使用okhttp框架進行網絡訪問時,一般會使用 HttpLoggingInterceptor 打印請求和響應的log。在使用okhttp訪問AI大模型時,如果選擇流式輸出,那么響應的body數據使用的SSE技術,服務異步發送大模型生成的增量token&…

看數據世界的歷史:全面梳理從關系庫、大數據到AI時代的數據發展及展望

序章 在數據庫不斷發展的時代里,我們看到了關系型數據庫(RDB)在一次次的數據演變過程中的占據王位,捍衛了勝利,像一個王朝更替下的“王權”的故事,精彩有趣。 本篇就來探討下數據庫的發展興衰史&#xff0…

元宇宙與人工智能的融合:從虛擬世界到智能生態的IT新革命

文章目錄 引言:前沿技術重塑數字交互體驗一、元宇宙與AI融合的本質:虛擬空間與智能交互的交匯元宇宙賦能AI:AI賦能元宇宙: 二、元宇宙與AI融合的演進:從概念到產業熱潮三、核心技術:元宇宙與AI融合的基石與…

問卷調查[mqtt dht]

任務 this code uses esp32-wroom-32 and dht11 to read the humidty and temperature, besieds, it will send the meassage to the cloud platform. All communication is conducted through MQTT. 打分標準 您應該對以下代碼進行評級,并且必須遵守如…

swift 對象轉Json

在 Swift 中將對象轉換為 JSON 可以通過以下方法實現: 使用 Codable 協議 Swift 的 Codable 協議(Encodable 和 Decodable 的組合)是處理 JSON 編碼和解碼的推薦方式。 struct Person: Codable {var name: Stringvar age: Int }let person…

Python學習Day43

學習來源:浙大疏錦行 import torch import torch.nn as nn import torch.nn.functional as F import torchvision import torchvision.transforms as transforms import numpy as np import matplotlib.pyplot as plt from PIL import Image import os # 設置隨機…

了解一下Unity AssetBundle 的幾種加載方式

Unity 的 AssetBundle 系統提供了多種加載方式,以滿足不同場景下的資源管理和性能需求。 同步加載(LoadFromFile) 同步加載使用 AssetBundle.LoadFromFile 方法從文件系統中直接加載 AssetBundle。這種方式會阻塞主線程,直到加載…

鴻蒙邊緣智能計算架構實戰:多線程圖像采集與高可靠緩沖設計

目錄 一、技術背景與挑戰二、鴻蒙邊緣計算架構的核心特性1. 分布式軟總線:打破設備孤島2. 輕量化多線程模型 三、多線程圖像采集的穩定性設計1. 分層緩沖隊列架構2. 線程優先級策略 四、邊緣側高可靠緩沖機制1. 基于分布式數據管理的容錯設計2. 動態帶寬調節 五、實…

excel中vba開發工具

1、支持單元格點擊出現彈框進行選擇 支持模多次模糊查詢 Private Sub CommandButton1_Click() Call vehicle_查詢 End SubPrivate Sub Worksheet_Activate()Call vehicle_取出車架號和公司名稱 取出不重復的車架號Sheet13.ComboBox1.Visible False 車架號顯示Sheet13.ComboB…

CatBoost:征服類別型特征的梯度提升王者

基于有序提升與對稱樹的下一代GBDT框架,重塑高維分類數據處理范式 一、CatBoost的誕生:解決類別特征的終極挑戰 2017年由俄羅斯Yandex團隊開源,CatBoost(Categorical Boosting)直指機器學習中的核心痛點:類…

使用 WSL 啟動ubuntu.tar文件

使用 WSL 啟動ubuntu.tar文件,可按以下步驟進行3: 檢查 WSL 版本:確保你的 WSL 版本為 2.4.8 或更高版本。可以在命令行中輸入wsl --update來更新 WSL 到最新版本。 設置默認 WSL 版本:如果還沒有將 WSL 2 設置為默認版本&#x…

vue-23(創建用于邏輯提取的可重用組合組件)

創建用于邏輯提取的可重用組合組件 可重用的組合式是 Vue 組合式 API 的基石,它使你能夠在多個組件中提取和重用有狀態邏輯。這有助于編寫更清晰的代碼,減少冗余,并提高可維護性。通過將特定功能封裝到組合式中,你可以輕松地共享…

數據透視表學習筆記

學習視頻:Excel數據透視表大全,3小時從小白到大神!_嗶哩嗶哩_bilibili 合并行標簽 初始數據透視表 不顯示分類匯總 以大綱形式顯示 在組的底部顯示所有分類匯總 以表格形式顯示 合并單元格-右鍵-數據透視表選項 選中-合并并劇中排列帶…

吃透 Golang 基礎:測試

文章目錄 go test測試函數隨機測試測試一個命令白盒測試外部測試包 測試覆蓋率基準測試剖析示例函數 go test go test命令是一個按照一定的約定和組織來測試代碼的程序。在包目錄內,所有以xxx_test.go為后綴名的源文件在執行go build時不會被構建為包的一部分&#…

酒店服務配置無門檻優惠券

1.查看酒店綁定的是那個倉庫; 凱里亞德酒店(深圳北站壹城中心店),綁定的是“龍華民治倉(睿嘀購” 2.“門店列表”選擇“龍華民治倉(睿嘀購””中的“綁定場所” 3.通過酒店名字查找綁定的商品模板; 凱里亞德酒店(深圳…