Python-初學openCV——圖像預處理(四)——濾波器

目錄

一、圖像噪點消除噪聲:

1、概念

2、均值濾波

3、方框濾波

4 、高斯濾波

5、中值濾波

6、雙邊濾波

7、總結


一、圖像噪點消除噪聲:

? ? ? ? 1、概念

????????指圖像中的一些干擾因素,通常是由圖像采集設備、傳輸信道等因素造成的,表現為圖像中隨機的亮度,也可以理解為有那么一些點的像素值與周圍的像素值格格不入。常見的噪聲類型包括高斯噪聲和椒鹽噪聲。高斯噪聲是一種分布符合正態分布的噪聲,會使圖像變得模糊或有噪點。椒鹽噪聲則是一些黑白色的像素值分布在原圖像中

????????濾波器:也可以叫做卷積核,與自適應二值化中的核一樣,本身是一個小的區域,有著特定的核值,并且工作原理也是在原圖上進行滑動并計算中心像素點的像素值。濾波器可分為線性濾波和非線性濾波,線性濾波對鄰域中的像素進行線性運算,如在核的范圍內進行加權求和,常見的線性濾波器有均值濾波、方框濾波、高斯濾波等。非線性濾波則是利用原始圖像與模板之間的一種邏輯關系得到結果,常見的非線性濾波器中有中值濾波器、雙邊濾波器

濾波與模糊聯系與區別:

????????它們都屬于卷積,不同濾波方法之間只是卷積核不同(對線性濾波而言)

????????低通濾波器是模糊,高通濾波器是銳化

????????低通濾波器就是允許低頻信號通過,在圖像中邊緣和噪點都相當于高頻部分,所以低通濾波? ? ? ? ?器用于去除噪點、平滑和模糊圖像。高通濾波器則反之,用來增強圖像邊緣,進行銳化處理。

(注意:椒鹽噪聲可以理解為斑點,隨機出現在圖像中的黑點或白點;高斯噪聲可以理解為拍攝圖片時由于光照等原因造成的噪聲)

? ? ? ? 2、均值濾波

????????????????均值濾波是一種最簡單的濾波處理,它取的是卷積核區域內元素的均值,3×3的濾波核如下:

? ? ? ? 3、方框濾波

方框濾波跟均值濾波很像,如3×3的濾波核如下:

cv2.boxFilter(img, ddepth, ksize, normalize)

ddepth:輸出圖像的深度,-1代表使用原圖像的深度

????????圖像深度是指在數字圖像處理和計算機視覺領域中,每個像素點所使用的位數,圖像深度決? ? ? ? ? ? 定了圖像能夠表達的顏色數量或灰度級

ksize:代表卷積核的大小,(ksize=3,則代表使用3×3的卷積核)

normalize:當normalize為True的時候,方框濾波就是均值濾波,上式中的a就等于1/9;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?normalize為False的時候,a=1,相當于求區域內的像素和

(其濾波的過程與均值濾波一模一樣,都采用卷積核從圖像左上角開始,逐個計算對應位置的像素值,并從左至右、從上至下滑動卷積核,直至到達圖像右下角,唯一的區別就是核值可能會不同 )

? ? ? ?4 、高斯濾波

高斯濾波是一種常用的圖像處理技術,主要用于平滑圖像、去除噪聲。它通過使用高斯函數(正態分布)作為卷積核來對圖像進行模糊處理

前面兩種濾波方式,卷積核內的每個值都一樣,也就是說圖像區域中每個像素的權重也就一樣。高斯濾波的卷積核權重并不相同:中間像素點權重最高,越遠離中心的像素權重越小

我們還是以3*3的卷積核為例,其核值如下所示:

得到了卷積核的核值之后,其濾波過程與上面兩種濾波方式的濾波過程一樣,都是用卷積核從圖像左上角開始,逐個計算對應位置的像素值,并從左至右、從上至下滑動卷積核,直至到達圖像右下角,唯一的區別就是核值不同

cv2.GaussianBlur(img, ksize, sigmaX)

ksize:代表卷積核的大小,(ksize=3,則代表使用3×3的卷積核

sigmaX:就是高斯函數里的值,σx值越大,模糊效果越明顯。高斯濾波相比均值濾波效率要慢,但可以有效消除高斯噪聲,能保留更多的圖像細節,所以經常被稱為最有用的濾波器

? ? ? ? 5、中值濾波

中值又叫中位數,是所有數排序后取中間的值。中值濾波沒有核值,而是在原圖中從左上角開始,將卷積核區域內的像素值進行排序,并選取中值作為卷積核的中點的像素值

中值濾波就是用區域內的中值來代替本像素值,所以那種孤立的斑點,如0或255很容易消除掉,適用于去除椒鹽噪聲和斑點噪聲。中值是一種非線性操作,效率相比前面幾種線性濾波要慢

?

? ? ? ? 6、雙邊濾波

?模糊操作基本都會損失掉圖像細節信息,尤其前面介紹的線性濾波器,圖像的邊緣信息很難保留下來。然而,邊緣(edge)信息是圖像中很重要的一個特征,所以這才有了雙邊濾波

雙邊濾波的基本思路是同時考慮將要被濾波的像素點的空域信息(周圍像素點的位置的權重)和值域信息(周圍像素點的像素值的權重)。為什么要添加值域信息呢?是因為假設圖像在空間中是緩慢變化的話,那么臨近的像素點會更相近,但是這個假設在圖像的邊緣處會不成立,因為圖像的邊緣處的像素點必不會相近。因此在邊緣處如果只是使用空域信息來進行濾波的話,得到的結果必然是邊緣被模糊了,這樣我們就丟掉了邊緣信息,因此添加了值域信息。

雙邊濾波采用了兩個高斯濾波的結合,一個負責計算空間鄰近度的權值(也就是空域信息),也就是上面的高斯濾波器,另一個負責計算像素值相似度的權值(也就是值域信息),也是一個高斯濾波器

cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace)

d:過濾時周圍每個像素領域的直徑

sigmaColor:在color space(色彩空間)中過濾sigma。參數越大,那些顏色足夠相近的的顏色的影響越大。較大的sigmaColor值意味著更大的顏色差異將被允許參與到加權平均中,從而使得顏色相近但不完全相同的像素也能夠相互影響

sigmaSpace:在coordinate space(坐標空間)中過濾sigma。這個參數是坐標空間中的標準差,決定了像素位置對濾波結果的影響程度。它定義了在圖像的空間域中,一個像素可以影響周圍像素的最大距離

關于2個sigma參數:

簡單起見,可以令2個sigma的值相等;

如果他們很小(小于10),那么濾波器幾乎沒有什么效果;

如果他們很大(大于150),那么濾波器的效果會很強,使圖像顯得非常卡通化。

關于參數d:

過大的濾波器(d>5)執行效率低。

對于實時應用,建議取d=5;

對于需要過濾嚴重噪聲的離線應用,可取d=9;

????????7、總結

????????????????在不知道用什么濾波器好的時候,優先高斯濾波,然后均值濾波。

????????????????斑點和椒鹽噪聲優先使用中值濾波。

????????????????要去除噪點的同時盡可能保留更多的邊緣信息,使用雙邊濾波。

????????????????線性濾波方式:均值濾波、方框濾波、高斯濾波(速度相對快)。

????????????????非線性濾波方式:中值濾波、雙邊濾波(速度相對慢)。

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

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

相關文章

嵌入式系統可靠性設計

嵌入式系統可靠性設計硬件件可靠性設計1. 硬件設計原則2. 硬件設計注意問題2.1 引腳布局和走線2.2 元器件選擇和布局2.3 電源和地線分離2.4 EMI/EMC設計2.5 系統可靠性2.6 資源利用和擴展性軟件可靠性設計1. 設計原則1.1 模塊化設計1.2 冗余設計1.3 容錯設計1.4 實時性保障1.5 …

cJSON在STM32單片機上使用遇到解析數據失敗問題

我們在單片機上解析JSON格式時(比如在用云平臺物聯網開發時),可以直接使用cJson庫來完成自己的操作,而不需要單獨實現,具體使用方法可以搜一下。 cJson:一個基于 C 語言的 Json 庫,它是一個開源…

python3基礎語法梳理(三)

接上一篇博客 🎮 猜數字小游戲 - Python版 🧠 游戲規則: 系統隨機生成一個 1 到 10 的整數玩家輸入猜測的數字使用 if 語句判斷玩家猜得是否正確提示“猜對了”或“太大/太小了” import randomsecret_number random.randint(1, 10) att…

【docker】將已有mysql腳本導入鏡像內使用

準備SQL腳本將SQL腳本(如init.sql)放在宿主機目錄下,例如:/path/to/sql-scripts/init.sql啟動MySQL容器并掛載腳本使用 -v 參數將SQL腳本掛載到容器的初始化目錄:docker run --name mysql-container \-e MYSQL_ROOT_PA…

【機器學習深度學習】LLamaFactory微調效果與vllm部署效果不一致如何解決

目錄 前言 一、問題本質 1.1 問題說明 1.2 問題本質示意 二、常見原因 LLaMAFactory對話模板規則定義 模型對話模板定義規則 三、解決方法 提取代碼myset.py 創建jinja文件 安裝VLLM 運行VLLM 安裝運行open webui流程 四、流程梳理 前言 本文主要講述的主要內容…

Python入門構建網頁

用純 Python 構建 Web 應用 本教程將帶你從零開始,構建一個交互式的待辦事項清單。 fasthtml 的核心哲學是“回歸初心,大道至簡”。在當今復雜的前后端分離技術棧中 ,它提供了一條返璞歸真的路徑,旨在讓你能用純粹的 Python 構建從…

開源 Arkts 鴻蒙應用 開發(九)通訊--tcp客戶端

文章的目的為了記錄使用Arkts 進行Harmony app 開發學習的經歷。本職為嵌入式軟件開發,公司安排開發app,臨時學習,完成app的開發。開發流程和要點有些記憶模糊,趕緊記錄,防止忘記。 相關鏈接: 開源 Arkts …

Go的defer和recover

在 Go 語言中,defer 和 recover 是兩個緊密相關的關鍵字,主要用于錯誤處理和資源清理。它們通常一起使用,特別是在處理panic(運行時崩潰)時,確保程序不會直接崩潰,而是能夠優雅地恢復并繼續執行…

Spring Boot 配置文件常用配置屬性詳解(application.properties / application.yml)

前言 Spring Boot 的一大優勢就是通過簡單的配置文件即可快速定制應用行為,而無需編寫大量 XML 配置或 Java 代碼。Spring Boot 使用 application.properties 或 application.yml 作為核心配置文件,支持豐富的配置屬性。 本文將詳細介紹 Spring Boot 常用…

uni-appDay02

1.首頁-通用輪播組件 輪播圖組件需要再首頁和分類頁使用&#xff0c;封裝成通用組件 準備組件自動導入組件 <script setup lang"ts"> import XtxSwiper from /components/XtxSwiper.vue import CustomNavbar from ./components/CustomNavbar.vue </scrip…

FastAPI入門:請求體、查詢參數和字符串校驗、路徑參數和數值校驗

請求體 FastAPI 使用請求體從客戶端&#xff08;例如瀏覽器&#xff09;向 API 發送數據。請求體是客戶端發送給 API 的數據。響應體是 API 發送給客戶端的數據。 使用 Pydantic 模型聲明請求體&#xff0c;能充分利用它的功能和優點 from fastapi import FastAPI from pydanti…

Docker的docker-compose類比Spring的ApplicationContext

總一句話是&#xff1a;Docker Compose&#xff1a;集中化管理多個容器及其依賴的資源環境&#xff1b;ApplicationContext&#xff1a;集中化管理 多個Bean 及其運行所需的資源和依賴關系。 1. 整體概念 Docker Compose&#xff1a;用于定義和運行多容器 Docker 應用程序&…

Reason-before-Retrieve(CVPR 2025)

研究方向&#xff1a;Image Captioning論文全名&#xff1a;《Reason-before-Retrieve: One-Stage Reflective Chain-of-Thoughts for Training-Free Zero-Shot Composed Image Retrieval》1. 論文介紹組合圖像檢索&#xff08;CIR&#xff09;旨在檢索與參考圖像密切相似的目標…

Idefics2:構建視覺-語言模型時,什么是重要的

溫馨提示&#xff1a; 本篇文章已同步至"AI專題精講" Idefics2&#xff1a;構建視覺-語言模型時&#xff0c;什么是重要的 摘要 隨著large language models和vision transformers的進步&#xff0c;視覺-語言模型&#xff08;VLMs&#xff09;受到了越來越多的關注…

再談fpga開發(fpga調試方法)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】我們之前在學校學習c、c的時候&#xff0c;其實學校漏掉了很重要的一個教學環節&#xff0c;那就是調試、測試。很多時候我們代碼寫出來了&#xff…

C語言中的數據結構--棧和隊列(1)

前言本屆開始我們將對數據結構中棧的內容進行講解,那么廢話不多說,我們正式進入今天的學習棧棧是一種很特殊的線性表&#xff0c;它只能在固定的一端進行插入和刪除操作&#xff0c;進行數據的插入和刪除的一端叫做棧頂&#xff0c;另外一端叫做棧底&#xff0c;棧中的元素遵守…

字符串是數據結構還是數據類型?

比較糾結的一個問題&#xff0c;以下是在網上查到后總結的&#xff0c;不知道對不對&#xff0c;歡迎討論。這是個觸及計算機科學核心概念的精妙問題&#xff01;字符串既可以被視為一種數據類型&#xff0c;也可以被視為一種數據結構&#xff0c;這取決于你觀察的視角和討論的…

Cline與Cursor深度實戰指南:AI編程助手的革命性應用

引言 在AI編程工具快速發展的今天&#xff0c;Cline和Cursor作為兩款備受矚目的AI編程助手&#xff0c;正在重新定義開發者的工作方式。作為一名深度使用這兩款工具的開發者&#xff0c;我在過去一年的實踐中積累了豐富的經驗和獨到的見解。本文將從技術角度深入分析Cline和Cur…

根本是什么

根本是什么 根本沒有了&#xff0c;枝葉還在么&#xff1f; 沒有了內涵&#xff0c;外延還有么&#xff1f; 丟棄了根本&#xff0c;再嗨也是無意義&#xff0c;無根據空虛之樂罷了。 人之所行所言所思所想所念皆欲念、歷程感懷&#xff0c;情思。所謂得失過往&#xff0c;時空…

springboot基于Java的人力資源管理系統設計與實現

管理員&#xff1a;登錄&#xff0c;個人中心&#xff0c;部門管理&#xff0c;員工管理&#xff0c;培訓信息管理&#xff0c;員工獎勵管理&#xff0c;員工懲罰管理員工考核管理&#xff0c;調薪信息管理&#xff0c;員工調動管理&#xff0c;員工工資管理員工&#xff1a;注…