在实时图像采集中,不可避免的会引入噪声,尤其是干扰噪声和椒盐噪声,噪声的存在严重影响边缘检测的效果,中值滤波是一种基于排序统计理论的非线性平滑计数,能有效平滑噪声,且能有效保护图像的边缘信息,所以被广泛用于数字图像处理的边缘提取,其基本原理是把数字图像或数字序列中的一点的值用该点邻域内所有的点排序后的中值来代替。

中值滤波对椒盐噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。这些优良特性是线性滤波方法所不具有的。而且,中值滤波的算法比较简单,也易于用硬件实现。这篇我们先用MATLAB来实现中值滤波。

中值滤波方法是,对待处理的当前像素,选择一个模板3x3、5x5或其他,这里选择3x3矩阵,该模板为其邻近的若干个像素组成,对模板的像素由小到大进行排序,再用模板的中值来替代原像素的值的方法。

排序算法示意图

当我们使用3x3窗口后获取领域中的9个像素,就需要对9个像素值进行排序,为了提高排序效率,排序算法思想如图所示。

(1)对窗内的每行像素按降序排序,得到最大值、中间值和最小值。

(2)把三行的最小值即第三列相比较,取其中的最大值。

(3)把三行的最大值即第一列相比较,取其中的最小值。

(4)把三行的中间值即第二列相比较,再取一次中间值。

(5)把前面的到的三个值再做一次排序,获得的中值即该窗口的中值。

sort排序函数

sort(A)若A可以使矩阵或行列向量,默认都是对A进行升序排列。

sort(A)是默认的升序,而sort(A,'descend')是降序排序。

sort(A)若A是矩阵,默认对A的各列进行升序排列

sort(A,dim)

dim=1时相当于sort(A)

dim=2时表示对矩阵A中的各行元素升序排列

sort(A, dim, 'descend’)则对矩阵的每行进行降序排列

MATLAB代码实现

Median Filter

1 %RGB_YCbCr 2 clc; 3 clear all; 4 close all; 5  6 RGB_data = imread('lena.jpg');% 7  8 R_data =    RGB_data(:,:,1); 9 G_data =    RGB_data(:,:,2);10 B_data =    RGB_data(:,:,3);11 12 %imshow(RGB_data);13 14 [ROW,COL, DIM] = size(RGB_data);

15 16 Y_data = zeros(ROW,COL);17 Cb_data = zeros(ROW,COL);18 Cr_data = zeros(ROW,COL);19 Gray_data = RGB_data;20 21 for r = 1:ROW

22     for c = 1:COL23         Y_data(r, c) = 0.299*R_data(r, c) + 0.587*G_data(r, c) + 0.114*B_data(r, c);24         Cb_data(r, c) = -0.172*R_data(r, c) - 0.339*G_data(r, c) + 0.511*B_data(r, c) + 128;25         Cr_data(r, c) = 0.511*R_data(r, c) - 0.428*G_data(r, c) - 0.083*B_data(r, c) + 128;26     end27 end

28 29 Gray_data(:,:,1)=Y_data;30 Gray_data(:,:,2)=Y_data;31 Gray_data(:,:,3)=Y_data;32 33 figure;34 imshow(Gray_data);35 36 %Median Filter37 imgn = imnoise(Gray_data,'salt & pepper',0.02);

38 39 figure;40 imshow(imgn);41 42 43 for r = 2:ROW-144     for c = 2:COL-145         median3x3 =[imgn(r-1,c-1)    imgn(r-1,c) imgn(r-1,c+1)46                     imgn(r,c-1)      imgn(r,c)      imgn(r,c+1)47                     imgn(r+1,c-1)      imgn(r+1,c) imgn(r+1,c+1)];48         sort1 = sort(median3x3, 2, 'descend');49         sort2 = sort([sort1(1), sort1(4), sort1(7)], 'descend');50         sort3 = sort([sort1(2), sort1(5), sort1(8)], 'descend');51         sort4 = sort([sort1(3), sort1(6), sort1(9)], 'descend');52         mid_num = sort([sort2(3), sort3(2), sort4(1)], 'descend');53         Median_Img(r,c) = mid_num(2);54     end55 end56 57 figure;58 imshow(Median_Img);

处理前后比较

Gray lena

加入椒盐噪声后的lena

对加入椒盐噪声后进行中值滤波的lena

可以看出,中值滤波对椒盐噪声的滤除效果真是非常的好。光看我处理后图图片可能看不出太明显对比,有兴趣的朋友可以自己尝试下。这里MTALAB的排序部分基本是是按照排序算法一步步来的,完全符合FPGA实现的思路,所以说掌握算法的基础原理和Verilog自己就可以尝试用FPGA实现了。

这里需要强调的一下是这样的滤波对图像的边缘没有进行处理,这是因为我们在求取均值或中值时,生成的3x3矩阵,第一行的像素并没有处理,同样的图像最外层边缘的像素都没有处理,不过这个对整体影响不大,所以后面再弄,下一篇来实现Sobel边缘检测。

原文出处:https://www.cnblogs.com/ninghechuan/p/9527915.html

matlab55中值滤波,基于MATLAB的中值滤波算法实现相关推荐

  1. 【图像去噪】基于matlab自适应中值滤波图像去噪【含Matlab 1156期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像去噪]基于matlab自适应中值滤波图像去噪[含Matlab 1156期] (https://download.csdn.net/d ...

  2. matlab中电压幅值不对,基于MATLAB的SPWM电压型逆变器的仿真与分析

    龙源期刊网 http://www.doczj.com/doc/b1455622f6ec4afe04a1b0717fd5360cba1a8da1.html 基于MATLAB的SPWM电压型逆变器的仿真与 ...

  3. 基于matlab的语音信号滤波处理

    基于matlab的语音信号滤波处理 摘要:本课程设计的主要目的是在MATLAB环境下,使用窗口设计法设计一个滤波器,并对语音信号进行滤波去噪.开发平台为MATLAB,设计方法为窗口设计法.用麦克风采集 ...

  4. 【图像去噪】基于matlab多种自适应均值滤波图像去噪【含Matlab 1843期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像去噪]基于matlab多种自适应均值滤波图像去噪[含Matlab 1843期] (https://download.csdn.net ...

  5. 转载:基于MATLAB的几种图像分割算法

    基于MATLAB的几种图像分割算法 转载自:https://blog.csdn.net/bentleydelll/article/details/82456150 最大类间方差法 基本思路是根据直方图 ...

  6. matlab 压缩感知矩阵_【精读】基于MATLAB的钢筋下料优化算法

    基于MATLAB的钢筋下料优化算法 摘要:运用MATLAB软件求解实际工程中一维钢筋下料优化的问题,提出了首先列举出单根原料分割的所有可行解,其次采用线性规划的方法求出理想条件下最优方案,最后通过整数 ...

  7. matlab人工选择阈值进行分割,基于MATLAB的图像阈值分割算法的研究

    [摘要]:图像分割是一种重要的数字图像处理技术.本文首先介绍了图像分割技术,其次总结了目前图像分割技术中所用到的阈值.边缘检测.区域提取等方法以及分水岭算法.针对各种阈值分割算法,本文在最后做了详细的 ...

  8. 【聚类算法】基于matlab划分法k-means聚类算法【含Matlab源码 1941期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[聚类算法]基于matlab划分法k-means聚类算法[含Matlab源码 1941期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  9. 基于matlab GUI Powell+蚁群算法图像配准

    基于matlab GUI Powell+蚁群算法图像配准 一.简介 1 蚁群算法(ant colony algorithm,ACA)起源和发展历程 Marco Dorigo等人在研究新型算法的过程中, ...

  10. 虹膜识别算法 matlab,基于MATLAB GUI 的虹膜识别算法测试平台

    基于MATLAB GUI 的虹膜识别算法测试平台 田启川;潘泉;程咏梅;张洪才 [期刊名称]<计算机仿真> [年(卷),期]2006(023)002 [摘要]虹膜识别是一种重要的利用生物学 ...

最新文章

  1. poj1422(最小路径覆盖问题)
  2. ibatis报错:There is no READABLE property named
  3. aaynctask控制多个下载进度_苍穹数码的“三调”全方位质量控制产品体系怎么样?...
  4. php有意思知识分享,分享几个有意思的数组方法
  5. can通道采样频率_CAN总线基础(上)
  6. 如何上传本地文件到github又如何删除自己的github仓库
  7. 下载 infoq 网站视频
  8. 【前端面试】字节跳动2019校招面经 - 前端开发岗(二)
  9. 日语输入法 android8.0,讯飞输入法发布 AndroidV8.0.6855 专注提升输入效率
  10. Python如何创建装饰器时保留函数元信息
  11. 高性能地图服务器,电子地图的背后—超速海量Xeon5500机架服务器
  12. 使用GDB调试产生多进程的程序
  13. 拓端tecdat|R语言用综合信息准则比较随机波动率(SV)模型对股票价格时间序列建模
  14. 服务器怎么识别swf文件,服务器架设swf支持播放flv格式 swf格式
  15. 视频教程-oracle入门到大神(备mysql、java基础、javaee必经之路)-Oracle
  16. 操作系统实验·字符设备驱动程序
  17. momentum梯度下降法
  18. 【赖世雄音标】——元音
  19. conda安装tensorflow2.x和pytorch1.8.0的一些常用命令
  20. firefox正在安装组件,以便播放此页面上的音频或视频

热门文章

  1. activiti6超详细教程
  2. 8 9区别 endnote7_EndNote_9__简明教程_中文版
  3. 最有效的Safari的广告拦截插件
  4. 恩智浦智能车摄像头循迹部分
  5. Smart Panels精彩系列面板_备份和恢复的具体步骤(2种方法)
  6. turbo码书籍推荐
  7. 时间复杂度为O(n)的排序(JAVA)
  8. 机器学习之数据预处理——降噪
  9. Kettle使用教程之数据同步
  10. Python实现PDF复制自动去除换行及空格