基于阈值分解的多级中值滤波-附代码
基于阈值分解的多级中值滤波的结构如下所示:

首先对整个图像统计,得到均值m,和标准差δ,并进行阈值的分解,阈值分解函数Ti()为:

从图1中,噪灰度图像首先在(m-kδ)和(m+kδ),两个阈值上分解为2个二值图像。k为参数,适当选择k可以使这2个二值图像反映大部分脉冲噪声所处位置的信息。2幅二值图像经过中值滤波后再分别于滤波之前的二值图像作“异或Xor”运算,其目的是得到已被滤除的脉冲噪声位置。然后再对2幅图做“或or”运算,就可以得到总体脉冲噪声位置分布矩阵。最后在噪声位置处滤波,这样可以在去除噪声的同时尽可能地保留细节。
代码如下:

#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;void YZmedian(Mat& I, Mat& Iout, int n=3, double k=1.6)
{cvtColor(I,I,COLOR_BGR2GRAY);//灰度图转换Mat temp_m,temp_std;   //定义均值方差矩阵meanStdDev(I,temp_m,temp_std);//求均值方差矩阵double Im_m=temp_m.at<double>(0,0);//均值double Im_std=temp_std.at<double>(0,0);//方差double t1=Im_m-k*Im_std;//阈值1double t2=Im_m+k*Im_std;//阈值2Mat I1=I.clone();Mat I2=I.clone();int width=I.cols;int height=I.rows;for (int i = 0; i < height; i++){     uchar* data1 =I1.ptr<uchar>(i);uchar* data2=I2.ptr<uchar>(i);for (int j = 0; j < width; j++){if (data1[j]>=t1){data1[j]=1;}else{data1[j]=0;}if (data2[j]>=t2){data2[j]=1;}else{data2[j]=0;}}}Mat I11,I22;medianBlur(I1,I11,n);//中值滤波medianBlur(I2,I22,n);//中值滤波Mat I111,I222;bitwise_xor(I1,I11,I111);bitwise_xor(I2,I22,I222);Mat I3;bitwise_or(I111,I222,I3);/*扩展边界方便滤波*/Mat I4(Size(I3.rows+(n-1),I3.cols+(n-1)),CV_8U,Scalar(0));Mat I5(Size(I3.rows+(n-1),I3.cols+(n-1)),CV_8U,Scalar(0));I.copyTo(I4(Range((n-1)/2,I4.rows-(n-1)/2),Range((n-1)/2,I4.cols-(n-1)/2)));I3.copyTo(I5(Range((n-1)/2,I4.rows-(n-1)/2),Range((n-1)/2,I4.cols-(n-1)/2)));//在噪声处滤波for (int i = 0; i < I4.rows; i++){uchar* data1=I4.ptr<uchar>(i);uchar* data2=I5.ptr<uchar>(i);for (int j = 0; j < I4.cols; j++){if(data2[j]==1){Mat roi=I4(Range(i-(n-1)/2,i+(n-1)/2),Range(j-(n-1)/2,j+(n-1)/2));resize(roi,roi,Size(1,n*n));Mat index;sortIdx(roi,index,SORT_EVERY_COLUMN+SORT_ASCENDING);int x=index.at<int>((n*n-1)/2);data1[j]=roi.at<uchar>(x);}}}Iout=I4(Range((n-1)/2,I4.rows-(n-1)/2),Range((n-1)/2,I4.cols-(n-1)/2)).clone();
}int main()
{  Mat I=imread("Nimg.png");//读取原始图片Mat Iout;Mat Imdian;medianBlur(I,Imdian,7);YZmedian(I,Iout,7,1.6);imshow("原始图像",I);imshow("基于阈值分解的多级中值滤波后的图像",Iout);
imshow("传统中值滤波",Imdian);waitKey(0);return 0;
}

结果如下图所示:

个人资料介绍

基于阈值分解的多级中值滤波-附代码相关推荐

  1. 噪点检测matlab,基于噪点检测的中值滤波图像去噪方法

    摘  要: 图像去噪是图像处理中一个非常重要的环节.针对传统中值滤波方法存在的不足,提出一种新的基于噪点检测的自适应中值滤波图像去噪方法.该方法通过自适应地改变滤波窗口的大小,局部检测并判断极值点是否 ...

  2. NR基础篇下——中值滤波、多级中值滤波、多级中值混合滤波、加权中值滤波、中值有理滤波

    上一篇分享了一些均值滤波相关的算法,均值滤波作为一种线性滤波器,在滤除噪声的同时也会导致边缘模糊问题.而且均值滤波对高斯噪声的效果很好,但是对于椒盐噪声的效果就很一般.但是中值滤波作为一种顺序滤波器, ...

  3. 图像中值滤波python代码_图像中值滤波FPGA实现

    C语言实用数字图像处理.pdf6.34 MB05-11-13|19:30 FPGA实验报告-李炎东.doc633.66 kB16-01-14|10:28 中值滤波在红外成像引信中的应用及硬件实现.ca ...

  4. 【地震波滤波】保边滤波、傅氏变换干扰波去噪滤波、基于小波分解和重建的干扰波去噪、基于维纳滤波的去噪、中值滤波、视速度滤波

    1.保边滤波 保护边缘滤波器,通常有四种类型,其中性能较为优良的是双边滤波器,其主要原理为: 双边滤波方法(Bilateral filtering)是基于Gsuss滤波方法提出的,主要是针对Gauss ...

  5. matlab中基于十字形窗口的滤波算法,#215;字形滤波窗口在Matlab自适应中值滤波算法中的应用 - 21ic中国电子网...

    由于种种原因,图像在生成.传输.变换等过程中往往会受到各种噪声的污染,从而导致图像质量退化.噪声信号的滤波是图像处理的基本任务之一,主要有线性滤波和非线性滤波两种方法.线性滤波方法一般具有低通特性,而 ...

  6. [Python从零到壹] 五十六.图像增强及运算篇之图像平滑(中值滤波、双边滤波)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  7. 实时高速实现改进型中值滤波算法_爱学术_免费下载

    [摘要]在图像采集和处理过程中会引入噪声,必须先对图像进行预处理.本文介绍一种快速中值滤波算法,该算法在硬件平台上实现实时处理功能.综合考虑,选择现场可编程门阵列(FPGA)作为硬件平台,采用硬件描述 ...

  8. [图像]中值滤波(Matlab实现)

    原创文章,欢迎转载.转载请注明:转载自 祥的博客 原文链接:http://blog.csdn.net/humanking7/article/details/46826009 原理简述 中值滤波是基于排 ...

  9. 【老生谈算法】matlab实现车牌识别中值滤波算法——车牌识别中值滤波算法

    基于Matlab的车牌识别中值滤波算法的研究与实现 1.原文下载: 本算法原文如下,有需要的朋友可以点击进行下载 序号 原文(点击下载) 本项目原文 [老生谈算法]基于Matlab的车牌识别中值滤波算 ...

  10. 快速中值滤波——Python实现

    原理 中值滤波是空域中常用的一种滤波方式,是一种非线性的滤波.它的原理就是将窗口像素排序,取中值,然后移动窗口,不断重复取中值的过程. 但是,可以发现,每次移动窗口,都需要对像素点进行排序,从而选取中 ...

最新文章

  1. v$memory_resize_ops 记录内存变更的视图
  2. oracle 查看表所占用的空间大小
  3. Failed to install DroidIPCam.apk on device 'emulator-5554': timeout
  4. html5 接东西游戏,html5手机触屏接红包小游戏代码
  5. 第五周软件工程作业-每周例行报告
  6. ckeditor回显带标签_Spring Boot中带有CKEditor的AJAX
  7. hibernate jpa_使用Hibernate(JPA)一键式删除
  8. 前端学习(537):多列布局4横跨多列
  9. 恒大和小米双双否认外界谣言,此前有人宣称小米将接手恒大造车
  10. 编程范式之栈的抽象操作
  11. Forward团队-爬虫豆瓣top250项目-设计文档
  12. HTML 日期格式转换
  13. CR blocks 创建
  14. 社区新闻舆情报道收集工作怎么做好的方法
  15. java给word表格追加行_Java 使用Spire.Cloud.Word给Word文档添加表格
  16. Noya批量加解密工具使用方法
  17. mysql2016安装和配置_SQL Server2016正式版安装配置方法图文教程
  18. OBS录屏软件无法打开的问题,无法捕获到游戏画面的问题
  19. 软件测试面试常见问题及答案(发散思维、接口、性能、概念、)
  20. 标准日本语第二十三课

热门文章

  1. 类成员变量初始化总结
  2. 微信公众号开发 ----微信网页开发config接口注入(3)
  3. 用python画椭圆解释_怎么用python画椭圆?
  4. html 设置自动检测编码格式,CSS代码检查工具stylelint的使用方法详解
  5. pyqt5优秀项目python_Python优秀开源项目Rich源码解析
  6. Node:正则验证手机号和身份证号
  7. JavaWeb:Filter和Listener
  8. React:引入echarts绘制图表
  9. 实战JavaScript:实现像素鸟小游戏
  10. 3D视觉(二)四元数简要说明