均值濾波算法及實現

均值濾波器的使用場景:

均值濾波器使用于處理一些如上述藍色線的高斯噪聲場景

紅色曲線是經過均值濾波處理后的數據。主要因為均值濾波設置數據緩沖區(也即延時周期),使得測量值經過緩沖不會出現特別大的變化。

黃色曲線為高斯噪聲,紅色曲線為經過均值濾波處理后的數據。

如果想要更好的濾波效果:

  • 增加濾波和,也即往后多取幾幀數據進行累加求和,再處以累加次數;
  • 嵌套使用均值濾波,也即用上一均值濾波輸出作為本次濾波輸入;

均值濾波不適合處理類似橙色曲線的脈沖噪聲的數據

藍色曲線為經過均值濾波處理后的數據,雖然整體幅值降低了,但是如61-69區間,實際測量只在61附近出現一次突變,但很快下降正常,但經過均值濾波處理,雖然幅值被降低,但其實也沒有達到理想,反而將突變脈沖以一個恒定的值持續了9s(累加次數,也即緩沖周期)。

目標脈沖值是0,未經過均值濾波處理在61s出現一較大突變,由于系統本身的阻尼等作用,系統實際不會產生太大的振蕩,可能由于來的比較快,系統會微微抖一下就穩定。但如果使用均值濾波處理后,在61s處的尖峰脈沖硬是被拉長了9幀才退出,系統穩定性必定太差。因此脈沖信號噪聲不適合用均值濾波,可以考慮使用低通濾波!


均值濾波作用

均值濾波是一種常見的圖像處理技術,用于平滑圖像中的噪聲或細節。它的主要用途包括:

  1. 去除噪聲:圖像中的噪聲是由于圖像采集過程中的各種因素引入的不希望的干擾。均值濾波可以通過計算像素周圍鄰域內像素的平均值來平滑圖像,并減少噪聲的影響。

  2. 平滑圖像:在某些情況下,圖像中的細節過多或變化過于劇烈,可能會導致視覺上的不連續或不平滑感覺。均值濾波可以通過平均周圍像素的值來減少這些細節,使圖像更加平滑。

  3. 降低圖像分辨率:在一些應用中,需要降低圖像的分辨率以減少計算或存儲的需求。均值濾波可以通過對圖像進行平滑來實現降低分辨率的效果。

  4. 圖像預處理:在某些圖像處理任務中,如圖像分割或邊緣檢測,均值濾波可以作為預處理步驟,幫助提取更準確的特征或邊緣。

需要注意的是,均值濾波是一種簡單且常用的濾波方法,但它可能會導致圖像細節的模糊或平滑化。對于某些應用場景,可能需要考慮其他更高級的濾波技術,以在平滑圖像的同時保留更多的細節信息。


均值濾波實現:

#include <stdio.h>
#include <stdlib.h>double* weightedMeanFilter(double* input, int length, int windowSize, double* weights) {double* output = (double*)malloc(length * sizeof(double)); // 創建新數組int halfWindowSize = windowSize / 2;for (int i = 0; i < length; i++) {double weightedSum = 0.0;double weightSum = 0.0;for (int j = i - halfWindowSize; j <= i + halfWindowSize; j++) {if (j >= 0 && j < length) {weightedSum += input[j] * weights[j - (i - halfWindowSize)];weightSum += weights[j - (i - halfWindowSize)];}}output[i] = weightedSum / weightSum; // 計算加權平均值}return output;
}int main() {double input[] = {1.2, 2.3, 3.4, 4.5, 5.6};int length = sizeof(input) / sizeof(input[0]);int windowSize = 3;double weights[] = {0.1, 0.6, 0.3}; // 示例權重系數數組double* output = weightedMeanFilter(input, length, windowSize, weights);printf("Input: ");for (int i = 0; i < length; i++) {printf("%.2f ", input[i]);}printf("\nOutput: ");for (int i = 0; i < length; i++) {printf("%.2f ", output[i]);}free(output); // 釋放動態分配的內存return 0;
}
/*
Input: 1.20 2.30 3.40 4.50 5.60 
Output: 1.57 2.52 3.62 4.72 5.44
*/

增加權重系數可以使均值濾波更加靈活,以更好地適應不同的應用場景和需求。具體來說,增加權重系數的意義包括:

  1. 強調重要區域:通過調整權重系數,可以使某些像素在計算均值時具有更大的貢獻。這樣可以使均值濾波更加關注重要的區域,從而保留或突出這些區域的細節。例如,在人臉識別中,可以增加權重系數以突出人臉區域,以便更好地提取人臉特征。

  2. 抑制噪聲或異常值:某些像素可能受到噪聲或異常值的干擾,導致它們的值與周圍像素明顯不同。通過降低這些像素的權重系數,可以減少它們對均值的影響,從而抑制噪聲或異常值的影響。

  3. 考慮空間相關性:在一些情況下,像素之間的空間關系對濾波結果的影響很大。通過調整權重系數以考慮像素之間的空間相關性,可以更好地保留圖像的結構信息。例如,可以使用高斯加權系數來加權計算均值,以便更好地平滑圖像并保留邊緣。

  4. 自適應濾波:通過根據像素的特征或屬性來動態調整權重系數,可以實現自適應濾波。這意味著不同的像素可以具有不同的權重,從而使濾波更加適應圖像的局部特征。例如,可以根據像素的梯度值或紋理信息來調整權重系數,以實現更好的平滑效果。

總之,增加權重系數可以提供更多的靈活性和控制力,使均值濾波能夠更好地適應不同的圖像處理需求,并在平滑圖像的同時保留重要的細節。

#include <stdio.h>
#include <stdlib.h>double* weightedMeanFilter(double* input, int length, int windowSize, double* weights) {double* output = (double*)malloc(length * sizeof(double)); // 創建新數組int halfWindowSize = windowSize / 2;for (int i = 0; i < length; i++) {double weightedSum = 0.0;double weightSum = 0.0;for (int j = i - halfWindowSize; j <= i + halfWindowSize; j++) {if (j >= 0 && j < length) {weightedSum += input[j] * weights[j - (i - halfWindowSize)];weightSum += weights[j - (i - halfWindowSize)];}}output[i] = weightedSum / weightSum; // 計算加權平均值}return output;
}int main() {double input[] = {1.2, 2.3, 3.4, 4.5, 5.6};int length = sizeof(input) / sizeof(input[0]);int windowSize = 3;double weights[] = {0.1, 0.6, 0.3}; // 示例權重系數數組double* output = weightedMeanFilter(input, length, windowSize, weights);printf("Input: ");for (int i = 0; i < length; i++) {printf("%.2f ", input[i]);}printf("\nOutput: ");for (int i = 0; i < length; i++) {printf("%.2f ", output[i]);}free(output); // 釋放動態分配的內存return 0;
}
/*
Input: 1.20 2.30 3.40 4.50 5.60 
Output: 1.57 2.52 3.62 4.72 5.44
*/


結果對比:


參考:

1、簡單的均值濾波講解(附代碼)_嗶哩嗶哩_bilibili

2、https://www.cnblogs.com/faithlocus/p/17532226.html

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

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

相關文章

【iOS】—— 消息傳遞和消息轉發

【iOS】—— 消息傳遞和消息轉發 1. 消息傳遞SEL選擇子IMP快速查找匯編代碼查找過程總結消息轉送快速查找IMP 慢速查找總結消息傳遞慢速查找IMP 2. 消息轉發動態決議動態解析添加方法 快速轉發慢速轉發 總結動態決議消息轉發消息的三次拯救 1. 消息傳遞 在iOS中&#xff0c;消…

一、單例模式

文章目錄 1 基本介紹2 實現方式2.1 餓漢式2.1.1 代碼2.1.2 特性 2.2 懶漢式 ( 線程不安全 )2.2.1 代碼2.2.2 特性 2.3 懶漢式 ( 線程安全 )2.3.1 代碼2.3.2 特性 2.4 雙重檢查2.4.1 代碼2.4.2 特性 2.5 靜態內部類2.5.1 代碼2.5.2 特性 2.6 枚舉2.6.1 代碼2.6.2 特性 3 實現的要…

【樂吾樂2D可視化組態編輯器】快捷鍵

快捷鍵 樂吾樂2D可視化組態編輯器demo&#xff1a;https://2d.le5le.com/ 快捷鍵描述空格 鼠標拖拽移動畫布鼠標右鍵拖拽移動畫布Ctrl 滾輪縮放畫布Ctrl 點擊 Pen多選Ctrl A全選Ctrl C復制Ctrl X剪切Ctrl V粘貼&#xff0c;alt視圖中心粘貼&#xff0c;shift原位粘貼…

查詢優化 -- UNION 用法

union 不返回重復行&#xff08;所有字段值相同的行&#xff09; union all 返回所有行 // 每類最多統計100條 select server_id,count(1) as logs from ( SELECT server_id FROM log WHERE log.type "a" AND server_id1 limit 100 ) UNION select server_id,coun…

谷粒商城-全文檢索-ElasticSearch

1.簡介 一個分布式的開源搜索和分析引擎,可以 秒 級的從海量數據中檢索 主要功能:做數據的檢索和分析(MySQL專攻于數據的持久化存儲與管理CRUD達到百萬以上的數據MSQL就會很慢,海量數據的檢索和分析還是要用ElasticSearch) 用途:我們電商項目里的所有的檢索功能都是由Elasti…

Java中為什么不能直接創建泛型數組

在Java中&#xff0c;不能直接創建泛型數組的主要原因是類型擦除和類型安全問題。 類型擦除 Java中的泛型是通過類型擦除&#xff08;Type Erasure&#xff09;實現的&#xff0c;這意味著在編譯時&#xff0c;泛型類型會被轉換成原始類型&#xff08;如 List<T> 會被轉…

網絡安全-網絡安全及其防護措施9

41.網絡故障排除 網絡故障排除的定義和重要性 網絡故障排除是指通過系統化的方法和工具&#xff0c;識別、診斷和解決網絡中出現的問題&#xff0c;以恢復正常的網絡服務和性能。有效的故障排除可以減少停機時間&#xff0c;提升網絡的穩定性和可靠性。 故障排除的步驟 問題…

基于X86+FPGA+AI數字化醫療設備:全自動尿沉渣檢測儀

助力數字醫療發展&#xff0c;信邁可提供全自動尿沉渣檢測儀專用計算機 隨著信息技術的不斷進步&#xff0c;醫療也進入了一個全新的數字化時代。首先是醫療設備的數字化&#xff0c;大大豐富了醫療信息的內涵和容量&#xff0c;具有廣闊的市場發展前景。 數字化醫療設備&…

使用Redis的SETNX命令實現分布式鎖

什么是分布式鎖 分布式鎖是一種用于在分布式系統中控制多個節點對共享資源進行訪問的機制。在分布式系統中&#xff0c;由于多個節點可能同時訪問和修改同一個資源&#xff0c;因此需要一種方法來確保在任意時刻只有一個節點能夠對資源進行操作&#xff0c;以避免數據不一致或…

白騎士的C++教學高級篇 3.1 文件操作

系列目錄 上一篇&#xff1a;白騎士的C教學進階篇 2.4 標準模板庫&#xff08;STL&#xff09; 文件操作是C編程中的一個重要部分&#xff0c;允許程序與外部存儲設備進行交互&#xff0c;從而實現數據的持久化存儲和讀取。C標準庫提供了豐富的文件操作功能&#xff0c;包括文…

嵌入式香橙派人工智能AI開發板詳細操作與遠程聊天實現

大家好&#xff0c;今天給大分享一個OrangePi AIpro&#xff08;20T&#xff09;采用昇騰作為主控芯片的開發板&#xff0c;開箱以及對應功能的詳細實現。 第一&#xff1a;板子基本介紹 接通電源給對應的開發板上電&#xff0c;觀察其中的現象&#xff0c;如下&#xff1a; 注…

基于HAL庫的stm32的OLED顯示屏顯示(IIC)

OLED OLED&#xff0c;即有機發光二極管( Organic Light Emitting Diode )。OLED由于同時具備自發光&#xff0c;不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用于撓曲性面板、使用溫度范圍廣、構造及制程較簡單等優異之特性&#xff0c;被認為是下一代的平面顯示器…

龍國專利局瑞數6

聲明(lianxi a15018601872) 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 前言(lianxi a…

富文本中提取信息并去除其中的HTML或XML標簽

要從富文本中提取信息并去除其中的HTML或XML標簽&#xff0c;可以使用不同的編程語言和庫。以下是一些流行語言中的示例方法&#xff1a; 1. Python&#xff08;使用BeautifulSoup&#xff09; BeautifulSoup是一個強大的Python庫&#xff0c;用于從HTML或XML文件中提取數據。…

巨魔商店(TrollStore)介紹與使用指南

iOS巨魔商店&#xff08;TrollStore&#xff09;介紹與使用指南 引言 在iOS系統中&#xff0c;App Store是官方唯一的應用下載渠道&#xff0c;但這也限制了用戶獲取非官方或破解版應用的可能性。然而&#xff0c;巨魔商店&#xff08;TrollStore&#xff09;的出現打破了這一…

配置和保護SSH

使用SSH訪問遠程命令行 描述Secure Shell SSH&#xff08;Secure Shell&#xff09; 是一種網絡協議&#xff0c;用于在不安全的網絡上安全地進行系統管理和數據傳輸。它最初由 Tatu Ylnen 于1995年設計&#xff0c;并成為保護網絡服務免受攻擊的標準。SSH提供了多種功能&…

開始構建我們自己的大語言模型:數據處理部分

關注本專欄&#xff08;NLP簡論&#xff1a;手搓大語言模型實踐&#xff09; 繼續學習從頭編寫、訓練自己的大語言模型。 接上集&#xff0c;本章我們將深入說一下大語言模型數據處理部分的細節&#xff0c;并直接提供本部分的完整代碼。 【配套資源】 暫時的詞匯表&#xff1…

GNN論文粗讀

論文 文章目錄 論文基于異構圖的GNN論文GNN領域論文環境領域GNN論文 隨緣更新 基于異構圖的GNN論文 Distance Information Improves Heterogeneous Graph Neural Networks:DOI: 10.1109/TKDE.2023.3300879 轉導和歸納任務&#xff0c;創新點&#xff1a;異構距離編碼HDE提高GN…

關于Vue中涉及到大量數據的級聯菜單樹狀結構的數據多選勾選頁面卡頓卡死問題

項目場景&#xff1a;如題 提示&#xff1a;有個需求&#xff0c;級聯菜單樹狀結構的數據高達3萬多條&#xff0c;多選&#xff0c;只需要最后一層級value 原因分析&#xff1a;頁面一下子渲染大量數據會導致瀏覽器內存暴漲100%&#xff0c;導致頁面卡死&#xff0c;而且eleme…

常見Linux目錄和配置文件

目錄 /boot/&#xff1a;開機配置文件&#xff0c;也是存放核心vmlinuz的地方 /bin/&#xff1a;系統可執行文件目錄&#xff0c;CentOS7后合并到/usr/bin中&#xff0c;并鏈接過去 /sbin/&#xff1a;系統管理員常用指令存放目錄&#xff0c;例如開關機、磁盤分區等指令&am…