中值滤波(资料整理,持续更新)

中值滤波(Median Filter),用于图像的中值滤波最早是由美国普林斯顿大学的John Wilder Tukey教授提出来的。常见的线性滤波器,用于图像处理时,有可能导致细节模糊或破坏边缘,更关键的是无法滤除脉冲干扰,而中值滤波,作为一种典型的非线性滤波器,则可以较好地解决此类问题。

中值滤波的基本工作原理是基于排序统计理论,把数字图像或数字序列中某一点的值用该点的一个邻域中各点值的中值代替,从而使周围的像素值更接近真实值,达到消除孤立噪声点的目的。实际操作中,中值滤波会选取数字图像或数字序列中像素点及其周围临近像素点(要求奇数个像素点,例如3*3,5*5等)的像素值,将这些像素值排序,然后将位于中间位置的像素值作为当前像素点的像素值,使周围的像素值接近真实值,从而消除孤立的噪声点。下图中取像素点79(红色标示),该像素及邻近像素点3*3,即绿色区域内的像素点。将这些像素点的像素值进行排序,按升序排序后得到序列值为:[68,79,86,89,93,93,93,98,102]。在该序列中,处于中心位置(也叫中心点或中值点)的值是93,以该值替换原来的像素值 79,作为操作点的新像素值。

55723522359
1232064347966
471998939326
7063937986175
70986889102199
9787884339120

在OpenCV中,实现中值滤波的函数是cv2.medianBlur(),其语法格式如下:

         dst=cv2.medianBlur(src,ksize)

        dst:返回值,中值滤波结果

        src: 源图像,即需要处理的图像。可以有任意数量的通道,对各个通道独立处理

        ksize:滤波核。滤波核大小是指在滤波处理过程中其邻域图像的高度和宽度,核大小必须是比1大的奇数,比如3、5、7等。

对上图进行中值滤波,核为3,结果为:

202352345259
474752645959
636464867979
7070899393102
7087878689120
9788876889120

代码如下:

import cv2
im=cv2.imread("test_m.bmp",0)
im
dst=cv2.medianBlur(im,3)
dst

test_m.bmp文件,即上述原始图像:用于测试中值滤波的demo文件资源-优快云文库

中值滤波在滤除高斯噪声、随机噪声、“椒盐”噪声及冲击噪声中表现突出。通常中值滤波中的数据排序费时较多,特别在大窗口下,需要进行大量的数据比较工作,不利于图像快速实时的处理。中值滤波算法的复杂度是O(r2logr),其中r为核的半径。当像素的可能取值是个常数时,比如对于8位图像,可以使用桶排序(Bucker sort),该排序使得算法的复杂度降低为O(r2)。但是除了小半径的情况外,这样的改进任然是不可接受的。

传统中值滤波(Standard Median Filter,SM),是通过快速排序寻找像素点集合的中值,该方法对滤波窗口形状和像素灰度级没有限制,具有更加广泛的运用范围。由算法原理可知,传统中值滤波算法的执行效率由快速排序算法的时间复杂度决定, 其基本思想是通过每次排序将像素点集合划分为相互独立的两个子集合, 其中一个子集合中所有像素值都比另一个子集合中所有像素值小, 然后分别对这两个子集合继续进行排序, 直到滤波窗口中所有像素点有序。SM算法最后选取位于序列中间位置的元素作为中值滤波的输出。

加权中值滤波(Weight Median Filter),将窗口内的每一个像素都乘上一个相应的权值,然后利用乘上权值后的值进行排序,取中值替换中心元素的灰度值即可。传统中值滤波可以看做是每个像素的权值都是1的加权中值滤波。加权中值滤波比较耗时,基本是O(r2)的复杂度,在实时性要求比较高的项目中是难以应用的。

自适应中值滤波器(Adaptive Median Filter),在噪声密度不是很大的情况下(根据报道,噪声出现的概率小于20%),使用中值滤波的效果不错。但是当噪声出现的概率比较高时,原来的中值滤波算法就不是很有效了。只有增大滤波器窗口尺寸,尽管会使图像变得模糊。使用自适应中值滤波器的目的就是,根据预设好的条件,动态地改变中值滤波器的窗口尺寸,以同时兼顾去噪声作用和保护细节的效果。
 

<think>嗯,用户想了解第15届蓝桥杯单片机比赛中超频和测距相关的项目资料和解决方案。首先,我需要确认蓝桥杯单片机比赛的官方资料和往届题目是否有涉及这两个模块。根据提供的引用[1]和[2],用户提到了资源包、教程和客观题知识点汇总,可能这些资料里有相关内容。 超频通常指让单片机运行在高于标称频率,这可能涉及到时钟配置和稳定性处理。在比赛中,可能需要通过修改时钟源或分频系数来实现。例如,使用STC15系列单片机的话,可能需要配置IRC时钟源,调整寄存器如CLK_DIV来改变主频。但需要注意稳定性,超频可能导致外设如定时器、串口的工作异常,需要测试和调整。 测距模块常用的是超声波模块,比如HC-SR04。其工作原理是发送触发信号,接收回波,计算时间差。代码部分需要配置定时器测量高电平持续时间,然后转换成距离。同时,温度补偿可能影响精度,需要用DS18B20等传感器进行校正。另外,软件滤波算法如中值滤波或滑动平均滤波可以提升数据稳定性。 然后,用户可能需要具体的代码示例和硬件连接方法。比如触发信号和回波引脚的连接,定时器的配置,以及如何避免测量误差。此外,模块化编程和代码结构优化也是重点,引用[1]提到的模块化编程和代码整合可能有帮助。 需要提醒用户注意官方资料中的考点大纲,是否有明确提到超频和测距的要求。引用[2]中的客观题知识点可能包含相关理论,如超声波测距原理、时钟系统配置等。建议用户结合教程和资源包进行实践,同时参考往届优秀代码的结构和实现方式。 可能用户在实际操作中会遇到问题,比如超频后系统不稳定,或者测距数据波动大。这时候需要排查硬件连接,检查代码中的定时器配置,以及加入适当的滤波处理。同时,注意比赛中的时间管理,优先保证基础功能稳定,再考虑优化和提升精度。 最后,生成相关问题时要围绕用户的需求,可能涉及实现细节、优化方法、调试技巧以及资料获取途径。确保回答结构清晰,分点列出解决方案,并引用提供的资料作为参考,帮助用户高效备赛。</think>针对第15届蓝桥杯单片机竞赛中与超频及测距相关的内容,结合官方资料和往届参赛经验,整理解决方案如下: --- ### 一、超频实现方案 1. **时钟系统配置** - 使用STC15系列单片机的内部IRC时钟源(11.0592MHz/22.1184MHz/33.1776MHz) - 通过修改CLK_DIV寄存器实现分频/倍频 ```c CLK_DIV = 0x00; // 主频 = IRC频率 / (CLK_DIV+1) ``` - 注意超频后需调整定时器参数和外设时序[^1] 2. **稳定性处理** - 添加电源滤波电容(0.1μF贴片电容) - 优化PCB走线减少高频干扰 - 使用示波器验证关键信号时序 --- ### 二、测距模块实现 1. **硬件选型** - 推荐HC-SR04超声波模块(2cm-400cm量程) - 温度补偿建议使用DS18B20传感器 - 硬件连接: ``` Trig -> P1.0 Echo -> P1.1 DS18B20 -> P1.2 ``` 2. **核心代码实现** ```c // 超声波触发函数 void Trig_Pulse() { Trig = 1; Timer_Delay12T(20); // 20μs触发脉冲 Trig = 0; } // 回波时间测量 uint Get_EchoTime() { while(!Echo); // 等待高电平 TH0 = TL0 = 0; // 定时器清零 TR0 = 1; // 启动定时器 while(Echo); // 等待低电平 TR0 = 0; // 停止定时器 return (TH0<<8)|TL0; // 返回计数值 } // 温度补偿公式 float Distance_Compensation(uint time, float temp) { float vs = 331.4 + 0.6*temp; // 声速计算 return (time * 1.085) / (vs * 2); // 1.085为定时器微秒系数 } ``` --- ### 三、关键优化技巧 1. **软件滤波算法** ```c #define FILTER_LEN 5 uint median_filter(uint new_val) { static uint buffer[FILTER_LEN]; // 滑动窗口更新与排序处理... return buffer[FILTER_LEN/2]; } ``` 2. **资源管理** - 使用PCA模块实现PWM输出,释放定时器资源 - 采用状态机编程模式提升系统响应速度 --- ### 四、备赛资料推荐 1. **官方资源** - 蓝桥杯单片机资源包(含超频配置案例) - 考点大纲中"时钟系统"和"传感器应用"章节 2. **进阶教程** - 蚂蚁工厂科技《高频信号处理专题》 - 小蜜蜂教程《超声波测距的21个优化点》 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SDAU2005

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值