0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

中值滤波的原理和C代码

撞上电子 2023-12-05 08:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

中值滤波是一种非线性数字滤波技术,主要应用于信号处理和图像处理领域,用于减小信号中的噪声和离群值。中值滤波的核心思想是通过计算一组数据点的中间值,以抑制脉冲噪声等离群值的影响,从而实现信号的平滑处理。

1,中值滤波的操作步骤如下:

窗口设置:中值滤波使用一个固定大小的窗口覆盖信号中的数据点。这个窗口的大小是根据具体应用需求事先确定的,通常是奇数,例如3x3、5x5等。

数据排序:在每个窗口位置,将窗口内的数据点按照大小进行排序。这样,窗口中的数据就被排列成一个有序序列。


中值计算:选择排序后序列的中间位置的值作为滤波结果。如果窗口大小是奇数,中值就是排序序列的正中间的值;如果窗口大小是偶数,中值通常是中间两个值的平均值。

2,中值滤波的原理可通过以下几个关键概念来理解:

排序特性: 中值滤波的核心在于对数据进行排序。排序后,中间值处于排序序列的中间位置,因此能够较好地反映数据的趋势

非线性特性: 与线性滤波器不同,中值滤波是一种非线性滤波方法。它对噪声和离群值的敏感性相对较低,因为中值主要受窗口中排序序列的中间位置的影响,而不受其他数值的大小影响。


适用于离散信号: 中值滤波通常适用于处理离散信号,例如时间序列中的测量数据。在图像处理中,中值滤波也常被用于去除图像中的噪声。

中值滤波的优点在于它能够有效抑制离群值,同时保持信号边缘信息,不引入额外的相位变化。然而,中值滤波也有一些缺点,比如在处理高斯噪声等均值为零的噪声时效果相对较差,因为中值滤波并不是最优的线性估计器。

3,示例代码:

#include #define WINDOW_SIZE 3// 函数原型float medianFilter(float data[], int dataSize);int main() {// 输入数据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]);// 创建输出数组floatoutputData[dataSize];// 对每个数据点应用中值滤波for (int i = 0; i < dataSize; ++i) { outputData[i] = medianFilter(inputData, dataSize); }// 打印结果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;}// 计算中值滤波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]; } }// 对窗口内数据进行排序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; } } }// 选择中间值作为滤波结果float median = window[WINDOW_SIZE / 2];return median; }}

在这个简单的示例中,WINDOW_SIZE 定义了中值滤波的窗口大小。medianFilter 函数对每个数据点应用中值滤波,处理窗口边界情况以确保滤波窗口不越界。请注意,这只是一个基本的实现,实际应用中可能需要根据具体需求进行调整和优化。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 滤波
    +关注

    关注

    10

    文章

    711

    浏览量

    58071
  • 信号处理
    +关注

    关注

    49

    文章

    1160

    浏览量

    105252
  • C代码
    +关注

    关注

    1

    文章

    90

    浏览量

    15237
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于FPGA的低照度条件下EBAPS图像混合噪声去除算法

    本文提出了基于可编程逻辑门阵列(field programmable gate array,FPGA)的开关融合中值-高斯(open and close mix-median-Gaussian,OCMMG)滤波算法。
    的头像 发表于 03-11 09:24 7042次阅读
    基于FPGA的低照度条件下EBAPS图像混合噪声去除算法

    二阶滤波C代码的实现

    [*]{ [*] sample_t a0, a1, a2, a3, a4; [*] sample_t x1, x2, y1, y2; [*]}biquad_state; [*] [*]// 计算滤波器的系数,2nd-order
    发表于 01-27 07:09

    TDK多层低通滤波器DEA162025LT - 5003C3的详细解析

    TDK多层低通滤波器DEA162025LT - 5003C3的详细解析 作为电子工程师,在射频电路设计中,滤波器的选择至关重要。今天就为大家详细介绍TDK的一款多层低通滤波器DEA16
    的头像 发表于 01-23 15:45 237次阅读

    在Keil中进行C代码与汇编代码的混合编程

    1. 在 C 代码中调用汇编程序代码C 代码中调用汇编程序中函数的方法: 第一步,在 C
    发表于 01-23 06:36

    TDK多层带通滤波器DEA202450BT - 1213C1:2400 - 2500MHz频段的理想之选

    TDK多层带通滤波器DEA202450BT - 1213C1:2400 - 2500MHz频段的理想之选 作为电子工程师,在射频电路设计中,选择合适的滤波器至关重要。今天来和大家分享TDK推出的一款
    的头像 发表于 01-15 17:50 1176次阅读

    通信设备滤波器选型指南:Murata多层LC滤波器详解

    通信设备滤波器选型指南:Murata多层LC滤波器详解 在通信设备的设计中,滤波器是至关重要的组件,它能有效过滤掉不需要的信号,确保设备的正常运行。今天,我们就来详细了解一下村田(Murata
    的头像 发表于 01-05 17:20 841次阅读

    TDK多层低通滤波器DEA160960LT - 5044C1:电子工程师的实用之选

    TDK多层低通滤波器DEA160960LT - 5044C1:电子工程师的实用之选 在电子设备的设计中,滤波器是不可或缺的关键元件,它能够有效过滤特定频率的信号,确保设备的正常运行和性能稳定。今天
    的头像 发表于 12-17 16:30 414次阅读

    用于单片机几种C语言算法

    ,必要时可通过实验得到 中值滤波算法 该运算的过程是对某一参数连续采样N次(N一般为奇数),然后把N次采样的值按从小到大排列,再取中间值作为本次采样值,整个过程实际上是一个序列排序的过程。算法的程序代码
    发表于 11-27 06:00

    EMC共模滤波器Layout设计

    一共模滤波器的等效电路与工作原理共模滤波器是抑制电磁干扰(EMI)的核心器件,其性能高度依赖PCB布局设计。从等效电路模型(图1)可以看出,共模滤波器(L3)与寄生参数(C1/
    的头像 发表于 10-21 11:33 1167次阅读
    EMC共模<b class='flag-5'>滤波</b>器Layout设计

    基美通用贴片电容C0603C系列在电源滤波中的效果怎么样?

    于旁路、耦合和滤波等高频电路。那么,基美通用贴片电容C0603C系列在电源滤波中的效果怎么样?其实,基美代理商南山电子认为,其通用贴片电容C0603C系列在电源
    的头像 发表于 09-11 17:07 1431次阅读
    基美通用贴片电容<b class='flag-5'>C0603C</b>系列在电源<b class='flag-5'>滤波</b>中的效果怎么样?

    TPSF12C1单相交流电源系统有源EMI滤波器技术解析

    Texas Instruments TPSF12C1/TPSF12C1-Q1 独立的 有源滤波器 IC是为减少单相交流 共模(CM)电磁干扰(EMI)系统中的 功率 。配置了 电压 感应和电流
    的头像 发表于 08-25 10:38 1090次阅读
    TPSF12<b class='flag-5'>C</b>1单相交流电源系统有源EMI<b class='flag-5'>滤波</b>器技术解析

    TPSF12C1独立式有源EMI滤波器技术解析

    Texas Instruments TPSF12C1/TPSF12C1-Q1 独立的 有源滤波器 IC是为减少单相交流 共模(CM)电磁干扰(EMI)系统中的 功率 。配置了 电压 感应和电流
    的头像 发表于 08-22 15:35 1101次阅读
    TPSF12<b class='flag-5'>C</b>1独立式有源EMI<b class='flag-5'>滤波</b>器技术解析

    高压SVG 高压无功补偿滤波装置

    滤波
    jf_31141196
    发布于 :2025年07月31日 15:01:57

    Perforce QAC产品简介:面向C/C++的静态代码分析工具(已通过SO 26262认证)

    Perforce QAC专为C/C++开发者打造,支持多种编码规范、功能安全标准(ISO 26262)等,广泛用于汽车、医疗、嵌入式开发领域,可帮助快速识别关键缺陷、提升代码质量、实现合规交付。
    的头像 发表于 07-10 15:57 1464次阅读
    Perforce QAC产品简介:面向<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++的静态<b class='flag-5'>代码</b>分析工具(已通过SO 26262认证)

    基于Matlab与FPGA的双边滤波算法实现

    前面发过中值、均值、高斯滤波的文章,这些只考虑了位置,并没有考虑相似度。那么双边滤波来了,既考虑了位置,有考虑了相似度,对边缘的保持比前几个好很多,当然实现上也是复杂很多。本文将从原理入手,采用Matlab与FPGA设计实现双边
    的头像 发表于 07-10 11:28 4830次阅读
    基于Matlab与FPGA的双边<b class='flag-5'>滤波</b>算法实现