0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

中值濾波的原理和C代碼

撞上電子 ? 2023-12-05 08:00 ? 次閱讀

中值濾波是一種非線性數(shù)字濾波技術(shù),主要應(yīng)用于信號(hào)處理和圖像處理領(lǐng)域,用于減小信號(hào)中的噪聲和離群值。中值濾波的核心思想是通過計(jì)算一組數(shù)據(jù)點(diǎn)的中間值,以抑制脈沖噪聲等離群值的影響,從而實(shí)現(xiàn)信號(hào)的平滑處理。

1,中值濾波的操作步驟如下:

窗口設(shè)置:中值濾波使用一個(gè)固定大小的窗口覆蓋信號(hào)中的數(shù)據(jù)點(diǎn)。這個(gè)窗口的大小是根據(jù)具體應(yīng)用需求事先確定的,通常是奇數(shù),例如3x3、5x5等。

數(shù)據(jù)排序:在每個(gè)窗口位置,將窗口內(nèi)的數(shù)據(jù)點(diǎn)按照大小進(jìn)行排序。這樣,窗口中的數(shù)據(jù)就被排列成一個(gè)有序序列。


中值計(jì)算:選擇排序后序列的中間位置的值作為濾波結(jié)果。如果窗口大小是奇數(shù),中值就是排序序列的正中間的值;如果窗口大小是偶數(shù),中值通常是中間兩個(gè)值的平均值。

2,中值濾波的原理可通過以下幾個(gè)關(guān)鍵概念來理解:

排序特性: 中值濾波的核心在于對(duì)數(shù)據(jù)進(jìn)行排序。排序后,中間值處于排序序列的中間位置,因此能夠較好地反映數(shù)據(jù)的趨勢(shì)

非線性特性: 與線性濾波器不同,中值濾波是一種非線性濾波方法。它對(duì)噪聲和離群值的敏感性相對(duì)較低,因?yàn)橹兄抵饕艽翱谥信判蛐蛄械闹虚g位置的影響,而不受其他數(shù)值的大小影響。


適用于離散信號(hào): 中值濾波通常適用于處理離散信號(hào),例如時(shí)間序列中的測(cè)量數(shù)據(jù)。在圖像處理中,中值濾波也常被用于去除圖像中的噪聲。

中值濾波的優(yōu)點(diǎn)在于它能夠有效抑制離群值,同時(shí)保持信號(hào)邊緣信息,不引入額外的相位變化。然而,中值濾波也有一些缺點(diǎn),比如在處理高斯噪聲等均值為零的噪聲時(shí)效果相對(duì)較差,因?yàn)橹兄禐V波并不是最優(yōu)的線性估計(jì)器。

3,示例代碼:

#include #define WINDOW_SIZE 3// 函數(shù)原型float medianFilter(float data[], int dataSize);int main() {// 輸入數(shù)據(jù)float inputData[] = {1.0, 3.0, 5.0, 2.0, 8.0, 6.0, 4.0, 7.0, 9.0, 10.0};int dataSize = sizeof(inputData) / sizeof(inputData[0]);// 創(chuàng)建輸出數(shù)組floatoutputData[dataSize];// 對(duì)每個(gè)數(shù)據(jù)點(diǎn)應(yīng)用中值濾波for (int i = 0; i < dataSize; ++i) { outputData[i] = medianFilter(inputData, dataSize); }// 打印結(jié)果printf("Original Data:\n");for (int i = 0; i < dataSize; ++i) {printf("%f ", inputData[i]); }printf("\nFiltered Data:\n");for (int i = 0; i < dataSize; ++i) {printf("%f ", outputData[i]);????}return 0;}// 計(jì)算中值濾波float medianFilter(float data[], int dataSize) {float window[WINDOW_SIZE];for (int i = 0; i < dataSize; ++i) {// 填充窗口for (int j = 0; j < WINDOW_SIZE; ++j) {int index = i - (WINDOW_SIZE / 2) + j;// 處理窗口邊界情況if (index < 0) { window[j] = data[0]; } else if (index >= dataSize) { window[j] = data[dataSize - 1]; } else { window[j] = data[index]; } }// 對(duì)窗口內(nèi)數(shù)據(jù)進(jìn)行排序for (int j = 0; j < WINDOW_SIZE - 1; ++j) {for (int k = 0; k < WINDOW_SIZE - j - 1; ++k) {if (window[k] > window[k + 1]) {// 交換float temp = window[k]; window[k] = window[k + 1]; window[k + 1] = temp; } } }// 選擇中間值作為濾波結(jié)果float median = window[WINDOW_SIZE / 2];return median; }}

在這個(gè)簡單的示例中,WINDOW_SIZE 定義了中值濾波的窗口大小。medianFilter 函數(shù)對(duì)每個(gè)數(shù)據(jù)點(diǎn)應(yīng)用中值濾波,處理窗口邊界情況以確保濾波窗口不越界。請(qǐng)注意,這只是一個(gè)基本的實(shí)現(xiàn),實(shí)際應(yīng)用中可能需要根據(jù)具體需求進(jìn)行調(diào)整和優(yōu)化。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 濾波
    +關(guān)注

    關(guān)注

    10

    文章

    667

    瀏覽量

    56647
  • 信號(hào)處理
    +關(guān)注

    關(guān)注

    48

    文章

    1029

    瀏覽量

    103286
  • C代碼
    +關(guān)注

    關(guān)注

    1

    文章

    89

    瀏覽量

    14302
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于FPGA的中值濾波器設(shè)計(jì)

    在圖像采集、轉(zhuǎn)換和傳輸?shù)倪^程中,由于成像系統(tǒng)、傳輸介質(zhì)和工作環(huán)境等固有的缺陷,不可避免地產(chǎn)生各種類型的噪聲,導(dǎo)致獲取的圖像往往與實(shí)際圖像有差異。
    的頭像 發(fā)表于 12-24 16:34 ?480次閱讀
    基于FPGA的<b class='flag-5'>中值</b><b class='flag-5'>濾波</b>器設(shè)計(jì)

    I2C噪聲毛刺濾波

    電子發(fā)燒友網(wǎng)站提供《I2C噪聲毛刺濾波.pdf》資料免費(fèi)下載
    發(fā)表于 10-08 14:39 ?5次下載
    I2<b class='flag-5'>C</b>噪聲毛刺<b class='flag-5'>濾波</b>

    中性點(diǎn)經(jīng)中值電阻接地的作用

    在電力系統(tǒng)的設(shè)計(jì)中,中性點(diǎn)的處理方式對(duì)整個(gè)系統(tǒng)的穩(wěn)定性和安全性有著深遠(yuǎn)的影響。中性點(diǎn)經(jīng)中值電阻接地是一種常見的處理方式,它通過在中性點(diǎn)與地之間接入一個(gè)適當(dāng)阻值的電阻來達(dá)到預(yù)期的效果。本文將探討中性點(diǎn)
    的頭像 發(fā)表于 10-04 11:17 ?307次閱讀

    rc濾波電路對(duì)電壓波形的影響

    RC濾波器是一種常見的電子濾波器,它使用電阻(R)和電容(C)的組合來減少信號(hào)中的高頻成分,同時(shí)允許低頻成分通過。這種濾波器在模擬信號(hào)處理、電源管理和數(shù)字信號(hào)處理中都有廣泛的應(yīng)用。 R
    的頭像 發(fā)表于 09-18 15:14 ?641次閱讀

    hex文件如何查看原c語言代碼

    直接將 .hex 文件轉(zhuǎn)換回原始的 C 語言代碼是不可能的,因?yàn)?.hex 文件是二進(jìn)制文件,它包含了單片機(jī)程序編譯后的機(jī)器碼,這些機(jī)器碼與原始的 C 語言代碼在結(jié)構(gòu)和表達(dá)上存在巨大的
    的頭像 發(fā)表于 09-02 10:37 ?2307次閱讀

    C2000 DCSM ROM代碼片段/ROP漏洞

    電子發(fā)燒友網(wǎng)站提供《C2000 DCSM ROM代碼片段/ROP漏洞.pdf》資料免費(fèi)下載
    發(fā)表于 08-28 09:39 ?0次下載
    <b class='flag-5'>C</b>2000 DCSM ROM<b class='flag-5'>代碼</b>片段/ROP漏洞

    中值濾波窗口大小對(duì)結(jié)果影響有哪些

    中值濾波是一種常用的數(shù)字濾波技術(shù),它通過將信號(hào)中的每個(gè)點(diǎn)用其鄰域內(nèi)的中值替換來實(shí)現(xiàn)信號(hào)的平滑和去噪。中值
    的頭像 發(fā)表于 07-29 09:10 ?1068次閱讀

    ModusToolbox 3.2在c代碼中包含c++代碼的正確步驟是什么?

    使用 ModusToolbox 3.2 我有一個(gè)用純 C 語言編寫的 XMC4700 項(xiàng)目。 我正在嘗試添加一些 C++ 函數(shù),并將其合并到我的原始代碼中。 我可以構(gòu)建獨(dú)立的 .cpp/.hpp
    發(fā)表于 07-23 08:21

    OpenCV圖像識(shí)別C++代碼

    的頭文件 在您的C++代碼中,包含以下必要的頭文件: # include # include # include # include # include # include # include 讀取圖像
    的頭像 發(fā)表于 07-16 10:42 ?2010次閱讀

    FPGA verilog HDL實(shí)現(xiàn)中值濾波

    的設(shè)計(jì),也有一些代碼可以下載,也有一片講解的,只是感覺講解的比較模糊而且不完整,最后看了幾篇碩士論文,論文竟然主要做了中值濾波的工作,發(fā)現(xiàn)了一些設(shè)計(jì)思路,然后就按照自己的想法進(jìn)行設(shè)計(jì)。 2、按照某篇
    發(fā)表于 06-18 18:50

    OpenCV圖像降噪算法的中值濾波與高斯濾波詳解

    圖像噪聲是指圖像中不希望出現(xiàn)的隨機(jī)亮度或顏色變化,通常會(huì)降低圖像的清晰度和可辨識(shí)度,以及會(huì)降低圖像的質(zhì)量并使圖像分析和理解更加困難。
    的頭像 發(fā)表于 04-03 14:58 ?6436次閱讀
    OpenCV圖像降噪算法的<b class='flag-5'>中值</b><b class='flag-5'>濾波</b>與高斯<b class='flag-5'>濾波</b>詳解

    中值濾波去除噪聲的原理

    中值濾波去除噪聲的原理? 中值濾波是一種數(shù)字圖像處理中常用的去噪方法,其原理是通過將每個(gè)像素周圍鄰域內(nèi)的像素值按照大小排序,然后將排序后的中間值作為該像素的新值。
    的頭像 發(fā)表于 03-14 16:54 ?1824次閱讀

    BQ3588C_代碼下載

    BQ3588C_代碼下載
    的頭像 發(fā)表于 01-10 15:09 ?520次閱讀

    使用Moku自定義實(shí)時(shí)數(shù)字濾波器實(shí)現(xiàn)降噪與去尖峰

    開發(fā)、部署和檢測(cè)五點(diǎn)中值濾波器。以這種方式組合線性和非線性濾波器,可用于抑制許多控制或傳感應(yīng)用中的尖峰并降低噪聲。Moku云編譯Moku云編譯(MokuCloudC
    的頭像 發(fā)表于 01-04 08:15 ?658次閱讀
    使用Moku自定義實(shí)時(shí)數(shù)字<b class='flag-5'>濾波</b>器實(shí)現(xiàn)降噪與去尖峰