转载:数字图像去噪典型算法及matlab实现 (http://gaochaojs.blog.51cto.com/812546/243961)

2023-11-14

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://gaochaojs.blog.51cto.com/812546/243961
数字图像去噪典型算法及matlab实现
希望得到大家的指点和帮助
图像去噪是数字图像处理中的重要环节和步骤。去噪效果的好坏直接影响到后续的图像处理工作如图像分割、边缘检测等。图像信号在产生、传输过程中都可能会受到噪声的污染,一般数字图像系统中的常见噪声主要有:高斯噪声(主要由阻性元器件内部产生)、椒盐噪声(主要是图像切割引起的黑图像上的白点噪声或光电转换过程中产生的泊松噪声)等;
目前比较经典的图像去噪算法主要有以下三种:
均值滤波算法:也称线性滤波,主要思想为邻域平均法,即用几个像素灰度的平均值来代替每个像素的灰度。有效抑制加性噪声,但容易引起图像模糊,可以对其进行改进,主要避开对景物边缘的平滑处理。
中值滤波:基于排序统计理论的一种能有效抑制噪声的非线性平滑滤波信号处理技术。中值滤波的特点即是首先确定一个以某个像素为中心点的邻域,一般为方形邻域,也可以为圆形、十字形等等,然后将邻域中各像素的灰度值排序,取其中间值作为中心像素灰度的新值,这里领域被称为窗口,当窗口移动时,利用中值滤波可以对图像进行平滑处理。其算法简单,时间复杂度低,但其对点、线和尖顶多的图像不宜采用中值滤波。很容易自适应化。
Wiener维纳滤波:使原始图像和其恢复图像之间的均方误差最小的复原方法,是一种自适应滤波器,根据局部方差来调整滤波器效果。对于去除高斯噪声效果明显。
实验一:均值滤波对高斯噪声的效果
I=imread('C:/Documents and Settings/Administrator/桌面/1.gif');%读取图像

J=imnoise(I,'gaussian',0,0.005);%加入均值为0,方差为0.005的高斯噪声

subplot(2,3,1);imshow(I);

title('原始图像');

subplot(2,3,2); imshow(J);

title('加入高斯噪声之后的图像');

%采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波

K1=filter2(fspecial('average',3),J)/255; %模板尺寸为3

K2=filter2(fspecial('average',5),J)/255;% 模板尺寸为5

K3=filter2(fspecial('average',7),J)/255; %模板尺寸为7

K4= filter2(fspecial('average',9),J)/255; %模板尺寸为9

subplot(2,3,3);imshow(K1);

title('改进后的图像1');

subplot(2,3,4); imshow(K2);

title('改进后的图像2');

subplot(2,3,5);imshow(K3);

title('改进后的图像3');

subplot(2,3,6);imshow(K4);

title('改进后的图像4');

PS
filter2用法
filter2用法
fspecial函数用于创建预定义的滤波算子,其语法格式为:
h = fspecial(type)
h = fspecial(type,parameters)
参数type制定算子类型,parameters指定相应的参数,具体格式为:
type='average'
,为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]
type= 'gaussian'
,为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3]sigma表示滤波器的标准差,单位为像素,默认值为
0.5
type= 'laplacian'
,为拉普拉斯算子,参数为alpha,用于控制拉普拉斯算子的形状,取值范围为[0,1],默认值为0.2
type= 'log'
,为拉普拉斯高斯算子,参数有两个,n表示模版尺寸,默认值为[3,3]sigma为滤波器的标准差,单位为像素,默认值为 0.5
type= 'prewitt'
,为prewitt算子,用于边缘增强,无参数。

type= 'sobel'
,为著名的sobel算子,用于边缘提取,无参数。
type= 'unsharp'
,为对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为[0,1],默认值为0.2
运行效果见图1
据我目测,使用均值滤波去噪(高斯噪声)效果选用的邻域半径越大效果越好,当然其代价也会更大,另外确切的去噪效果的好坏还需要用SNR等数据来度量。
实验二:二维自适应维纳滤波对高斯噪声的滤除效果
I=imread('C:/Documents and Settings/Administrator/桌面/1.gif'); %读取图像

J=imnoise(I,'gaussian',0,0.005); %加入均值为0,方差为0.005的高斯噪声

K2=wiener2(J,[3 3]); %对加噪图像进行二维自适应维纳滤波

K2=wiener2(J,[5 5]); %对加噪图像进行二维自适应维纳滤波

K2=wiener2(J,[7 7]); %对加噪图像进行二维自适应维纳滤波

K2=wiener2(J,[9 9]); %对加噪图像进行二维自适应维纳滤波

subplot(2,3,1);imshow(I);

title('原始图像');

subplot(2,3,2);imshow(J);

title('加噪图像');

subplot(2,3,3);imshow(K1);

title('恢复图像1');

subplot(2,3,4);imshow(K2);

title('恢复图像2');

subplot(2,3,5);imshow(K3);

title('恢复图像3');

subplot(2,3,6);imshow(K4);

title('恢复图像3');

PS
维纳滤波的两个函数wiener2deconvwnr都能够完成维纳滤波的功能, deconvwnr强调图象复原方面,wiener2强调图象空间域锐化的作用,其中J=wiener2(I,[m,n])返回有噪声图像I经过wierner(维纳)滤波后的图像,[m,n]指定滤波器窗口大小为m*n,默认值为3*3J=wiener2(I,[m,n],noise)指定噪声的功率,[J,noise]=wiener2(I,[m,n])在图像滤波的同时,返回噪声功率的估计值noise
维纳滤波的两个函数wiener2deconvwnr都能够完成维纳滤波的功能, deconvwnr强调图象复原方面,wiener2强调图象空间域锐化的作用,其中J=wiener2(I,[m,n])返回有噪声图像I经过wierner(维纳)滤波后的图像,[m,n]指定滤波器窗口大小为m*n,默认值为3*3J=wiener2(I,[m,n],noise)指定噪声的功率,[J,noise]=wiener2(I,[m,n])在图像滤波的同时,返回噪声功率的估计值noise
imnoise的语法格式为
J = imnoise(I,type)
J = imnoise(I,type,parameters)
其中J = imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J
参数typeparameters用于确定噪声的类型和相应的参数。
下面的命令是对图像1.gif分别加入高斯噪声、椒盐噪声和乘性噪声,其结果如图所示:

实验三:对加入椒盐噪声的图像分别作均值、中值和维纳滤波

I=imread(1.gif');
J1=imnoise(I,'gaussian',0,0.02);
J2=imnoise(I,'salt & pepper',0.02);
J3=imnoise(I,'speckle',0.02);

运行效果见图2

I=imread('C:/Documents and Settings/Administrator/桌面/1.gif');

J=imnoise(I,'salt & pepper',0.02);

%h=ones(3,3)/9;%产生3*3的全1数组

%B=conv2(J,h);%卷积运算

K2=filter2(fspecial('average',3),J)/255; %均值滤波模板尺寸为3

K= medfilt2(J);%采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波

K1=wiener2(J,[3 3]); %对加噪图像进行二维自适应维纳滤波    

subplot(2,3,1);imshow(I);

title('原始图像');

subplot(2,3,2);imshow(J);

title('加噪图像');

subplot(2,3,3);imshow(K2);

title('均值滤波后的图像');

subplot(2,3,4);imshow(K);

title('中值滤波后的图像');

subplot(2,3,5);imshow(K1);

title('维纳滤波后的图像');

PS
MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:
MATLAB
中提供了卷积运算的函数命令conv2,其语法格式为:

   C = conv2(A,B)
C = conv2(A,B)
返回矩阵AB的二维卷积C。若Ama×na的矩阵,Bmb×nb的矩阵,则C的大小为(ma+mb+1)×(na+nb+1)
MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2filter2的语法格式为:
Y = filter2(h,X)
其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:
其实filter2conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。
Fspecial
函数用于创建预定义的滤波算子,其语法格式为:
h = fspecial(type)
h = fspecial(type,parameters)
参数type制定算子类型,parameters指定相应的参数,具体格式为前文已有叙述。
ones产生全1数组,zeros产生全零数组。
ones(a,b)
产生ab列全1数组
ones(a)
产生aa列全1数
运行效果见图3
   通过图3我们也可得出结论,即中值滤波对于去除椒盐噪声效果最好,而维纳滤波去除效果则较差。中值滤波对于去除椒盐噪声效果明显,是因为椒盐噪声只在画面上的部分点随机出现,而中值滤波根据数据排序,将未被污染的点代替噪声点的值的概率较大,所以抑制效果好。对点、线和尖顶较多的图像不宜采用中值滤波,因为一些细节点可能被当成噪声点。
实验四: 分别使用二维统计滤波对椒盐噪声和高斯噪声进行滤波
I=imread('C:/Documents and Settings/Administrator/桌面/1.gif');

J1=imnoise(I,'salt & pepper',0.004);

subplot(2,3,1);imshow(I);

title('原始图像');

subplot(2,3,2);imshow(J1);

title('加椒盐噪声后的图像');

J= ordfilt2(J1,5,ones(3,4));% 进行二维统计顺序过滤

subplot(2,3,3);imshow(J);

title('椒盐噪声滤波后的图像');

J2=imnoise(I,'gaussian',0,0.004);

subplot(2,3,4);imshow(J2);

title('加高斯噪声后的图像');

J3= ordfilt2(J2,5,ones(3,4));

subplot(2,3,5);imshow(J3);

title('高斯噪声滤波后的图像');

PS:
效果见图4
 
PSMATLAB小波分析工具箱提供的用于图像去噪的函数有wrcoef2wpdencmp,其语法格式分别为:
X=wrcoef2(‘type’,C,S,’wname’)
[xd,treed,datad,perf0,perfl2]=wpdencmp(x,sorh,N,’wname’,crit,par,keepapp)
其中,X=wrcoef2(‘type’,C,S,’wname’)返回基于小波分解结构[C,S]的小波重构图像X。参数“type”等于a表示重构近似系数;等于h表示重构水平细节系数;等于v表示重构垂直细节系数,等于d表示重构对角细节系数。
[xd,treed,datad,perf0,perfl2]=wpdencmp(x,sorh,N,’wname’,crit,par,keepapp)是通过小波包定限(阈值化),返回输入信号或图像X的除噪结果xd。输入参数中,[treed,datad]为xd的最佳小波包分解结构;perfl2perf0表示L^2复原和压缩百分数;perf12=100*(xd的小波包系数向量范数/X的小波包系数向量范数) ^2Keepapp=1表示近似系数不能阈值化,否则可以阈值化;sorh=’s’为软阈值化,h为硬阈值化。
 
实验五:利用wrcoef2函数进行图像去噪
其程序代码如下:
I=imread('C:/Documents and Settings/Administrator/桌面/1.gif');

J=imnoise(I,'gaussian',0,0.005);

[c,l]=wavedec2(J,2,'sym4');

J1= wrcoef2('a',c,l,'sym4',1);

J2= wrcoef2('a',c,l,'sym4',2);

subplot(2,2,1);imshow(I);

title('原始图像');

subplot(2,2,2);imshow(J);

title('含噪图像');

subplot(2,2,3);imshow(J1,[]);

title('第一次去噪图像');

subplot(2,2,4);imshow(J2,[]);

title('第二次去噪图像');

运行结果如图
5
实验六:利用wpdencmp函数进行图像去噪
其程序代码如下:
PS: MATLAB 图像处理工具箱中,提供了 medfilt2 函数用于实现中值滤波。
Medfilt2
函数的语法格式为:
B = medfilt2(A)
       3×3的滤波窗口对图像A进行中值滤波。
B = medfilt2(A,[m n])
   用指定大小为m×n的窗口对图像A进行中值滤波。  
效果如图6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转载:数字图像去噪典型算法及matlab实现 (http://gaochaojs.blog.51cto.com/812546/243961) 的相关文章

  • 从 imread 返回的 ndims

    我正在从文件夹中选取图像 尺寸为128 128 为此 我使用以下代码行 FileName PathName uigetfile jpg Select the Cover Image file fullfile PathName FileNa
  • 如何每次使用按钮将数据添加到 MATLAB 中的现有 XLSX 文件?

    我有一个函数可以生成一些变量 例如分数 对 错 未回答 使用按钮调用此功能 问题是如何每次将函数生成的这些值添加 附加到 XLSX 文件中 或者 如何创建 MAT 文件以便可以添加它 可能的解决方案是什么 附加到 xls 文件所涉及的挑战是
  • 为什么 mex 文件中的 OpenMP 仅产生 1 个线程?

    我是 OpenMP 新手 我有以下代码 使用配置了 MSVS2010 的 Matlab mex 可以正常编译 计算机有 8 个可用处理器 我也使用 matlabpool 检查过 include mex h include
  • 使用 R2010b 中的符号工具箱来求解和/或 linsolve

    我前几天问了一个问题here https stackoverflow com questions 20317038 matlab linear congruence solver that supports a non prime modu
  • 垂直子图的单一颜色条

    我想让下面的 MATLAB 图有一个沿着两个子图延伸的颜色条 像这样的事情 使用图形编辑器手动完成 Note 这与提出的问题不同here https stackoverflow com questions 39950229 matlab t
  • 从筛查乳腺 X 光检查数字数据库 (DDSM) 获取数据

    我正在尝试以可读格式获取 DDSM 数据集 有谁有 DDSM heathusf 程序的工作版本 可以在 Linux 或 Windows 上正常运行吗 我知道 DDSM 的 jpeg 程序有一个适用于 linux 的工作版本 位于http w
  • 根据传递的参数覆盖 Javascript 函数

    是否可以根据传递给函数的参数数量来重写函数 例如 function abc name document write My name is name function abc name friend document write My nam
  • 在数组列表中过滤 Filterable 不取消之前的过滤

    我看过过滤器方法文档 其中显示调用过滤器会取消所有先前未执行的过滤请求 并发布一个稍后将执行的新过滤请求 但我收到的实际回调有些不同 在我的实现中 它不会取消先前的过滤器请求并调用publishResults 最近一次搜索条件后的上一次搜索
  • 预期的 ProductField,出现数组问题

    我有一个 Rails 4 应用程序 它有一个如下所示的 params 块 def store params params require store permit name description user id products attr
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • Matlab 图像数据的 hist 函数

    我是 Matlab 新手 我想制作自己的函数 与 imhist 显示图像数据的直方图 完成相同的工作 但我对此完全是新手 我不知道如何做开发这样的功能 我开始做一些东西 但它非常不完整 function output args myhist
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • Matlab:条形图中缺少标签

    使用 Matlab 2012 和 2013 我发现设置XTickLabel on a bar图表最多只能使用 15 个柱 如果条形较多 则标签会丢失 如下所示 绘制 15 个条形图 N 15 x 1 N labels num2str x d
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt
  • 在matlab中不使用for循环检查数组中的成员资格

    我想简化这段代码 使其无需 for 循环即可工作 for i 1 N for j 1 N if ismember j A PID i i TFP i j PID i i end end end 其中A是一个包含一些标签的矩阵 我之前存储的T
  • FMINCON 的替代方案

    除了 fmincon 之外还有其他更快 更高效的求解器吗 我正在使用 fmincon 来解决特定问题 但对于中等大小的向量变量来说 我的内存不足 我也没有任何超级计算机或云计算选项可供使用 我知道任何替代解决方案仍然会耗尽内存 但我只是想看
  • 需要从数组中删除字符串[重复]

    这个问题在这里已经有答案了 我在 for 循环中有一个数组 如下所示 var arr abc 5 city 2 area 2 max choice 我只需要这样的数字 var arr 5 2 2 有人可以在这里帮忙吗 另一种方法是使用转换后
  • 通过 cuFFT 进行逆 FFT 缩放

    每当我使用 cuFFT 绘制程序获得的值并将结果与 Matlab 的结果进行比较时 我都会得到相同形状的图形 并且最大值和最小值位于相同的点 然而 cuFFT 得到的值比 Matlab 得到的值大得多 Matlab代码是 fs 1000 s
  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得
  • 如何将 Hudson/Jenkins 参数传递给 Windows 批处理命令

    好吧 我需要在我的 Hudson 作业中执行一个批处理文件 我有一个参数 Jenkis 参数 我需要将这个值 如参数 传递给批处理文件 我尝试了以下操作 Deploy cmd configuration DEPLOYCONFIGURATIO

随机推荐

  • Linux用nohup后台运行python程序及停止

    在Ubuntu上用python flask写了一个后端代码 每次运行要CMD先远程连上服务器 然后python xxx py启动 这样操作会让cmd窗口被占用 没办法进行其他操作 ls cd这种 如果把窗口关了 程序就停止了 看了网上的例子
  • CTFSHOW【萌新计划】Writeup

    CTFSHOW 萌新计划 web1 萌新计划 web2 萌新计划 web3 萌新计划 web4 萌新计划 web5 萌新计划 web6 萌新计划 web7 萌新计划 web8 萌新计划 web9 萌新计划 web10 萌新计划 web11
  • 《我的眼睛--图灵识别》第五章:基础:形状识别

    我的眼睛 图灵识别 第五章 基础 形状识别 1 图形认识 三角形 三角形是由同一平面内不在同一直线上的三条线段 首尾 顺次连接所组成的封闭图形 三角形按边分有不等边三角形 等腰三角和等边三角形 按角分有直角三角形 锐角三角形 钝角三角形等
  • antd的Form表单控制实例的使用

    Form表单的控制实例 一 业务常景 二 使用Form表单的实例来解决 一 业务常景 遇到一种业务场景 即一个简单的Modal框 Form的一个组合 仔细思考了一下 和我们平时直接使用Form表单还是有一定的区别 我们通常是通过给Form表
  • springcloudAlibaba 链路追踪SkyWalking

    一 链路追踪SkyWalking简介 在大型系统的微服务化构建中 一个系统被拆分成了许多模块 这些模块负责不同的功能 组合成系统 最终可以提供丰富的功能 在这种架构中 一次请求往往要涉及到多个服务 互联网应用构建在不同的软件模块集上 这些软
  • 关调度与关中断

    关调度与关中断 关中断与关调度是两种进入临界区的方式 它们有各自的使用环境 最近在研究 ucos III 的源代码时发现 ucos III 中有对临界区的优化 以关调度来代替关中断的方式工作 系统可以在特定的情况下用关调度的方式来替代关中断
  • 数据可视化之Seaborn(1)

    文章目录 什么是Seaborn seaborn提供的一些特点 Seaborn的基本使用 1 安装seaborn 2 导入seaborn库并导入Seaborn内置数据集 3 设置画图空间风格 4 设置子图风格 5 去除图脊 边框 6 设置内容
  • 设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。

    分数 题目内容 设计一个表示分数的类Fraction 这个类用两个int类型的变量分别表示分子和分母 这个类的构造函数是 Fraction int a int b 构造一个a b的分数 这个类要提供以下的功能 double toDouble
  • 第五章:数据库完整性

    数据库完整性 文章目录 5 1参照完整性 5 1 1实体完整性定义 5 1 2实体完整性的违约处理和检查 5 2参照完整性 5 2 1参照完整性定义 5 2 2参照完整性的违约处理和检查 5 3用户自定义的完整性 5 3 1属性上的约束条件
  • Python - OpenCV实现摄像头人脸识别(亲测版)

    要使用Python 3和OpenCV进行摄像头人脸识别 您可以按照以下步骤进行操作 0 安装OpenCV软件 去官网直接下载安装即可 如果是C 使用OpenCV 需要使用编译源码并配置环境变量 1 安装OpenCV库 在命令行中输入以下命令
  • 【bug记录】This attempt to set a cookie via a Set-Cookie header was blocked because it had the “Secure“

    问题出现场景 最近在使用浏览器访问一个登录页面时会一直发生302重定向请求 然后f12看到浏览器的访问页面上有如下警告 错误原因 错误原因为 尝试通过Set Cookie头设置具有 secure 属性的cookie 但未通过安全连接接收 因
  • gurobi安装

    gurobi安装 先去官网下载 Gurobi Optimizer 同时申请一个免费的license 学术用途的 土豪随意买 以最新的6 5版本为例进行解说 解压下载的gurobi6 0 5 linux64 tar gz 命令 tar zxv
  • web端引入高德地图

    1 安装 amap amap jsapi loader 依赖 高德地图加载器 npm i amap amap jsapi loader S 2 在对应的文件引入依赖或者全局引入 注意 由于高德api文档提示 您在2021年12月02日申请以
  • centos7设置账号密码复杂度、密码有效期、账号锁定、会话超时等策略

    目录 一 设置密码复杂度 二 设置密码有效期 三 设置登陆会话超时 四 设置登陆失败锁定 一 设置密码复杂度 CentOS7 RHEL7 开始使用pam pwquality模块进行密码复杂度策略的控制管理 pam pwquality替换了原
  • html制作动态八卦图源码

    动态八卦图 自动旋转的八卦图 一个html文件就行 如下动态图所示 taijitu html div div
  • 看甲骨文如何在云端一路高歌猛进!

    甲骨文喜欢并购这事儿不假 但更根植于创新 过去的十几年中 甲骨文始终坚持将完整并颇具创新性的云服务提供给用户 所谓完整 也就是需要覆盖端到端的全流程 提及创新 如今的大环境下怎能不将区块链 IoT 甚至是机器学习统统收入囊中 一起植入软件
  • 《大白AI周报》精华内容整理汇总

    在人工智能学习中 大家或多或少都会关注一些公众号 但随着每天信息量的暴增 碎片化的内容让大家应接不暇 如何挖掘有价值的内容 如何快速查阅自己需要的内容 是一个头疼的问题 因此大白每周都会将人工智能领域 几十个公众号每周发布的精华内容汇总起来
  • 带你认识 MySQL 之 MySQL 体系结构

    序 最近一直在忙项目 各种加班加点 项目上线 渐渐的没有了学习的时间 这不 刚这几天才能抽出点时间 忙里偷闲 正在看一本数据库的书籍 相信很多小伙伴们也都看过 MySQL 技术内幕 InnoDB 存储引擎 这本书很详细的讲述了 MySQL
  • 水墨Shader解析

    Chinese Ink wash Painting II Shader 简介 本文尝试对Chinese Ink wash Painting II 来源 https www shadertoy com view DdSyDW 的代码部分进行解
  • 转载:数字图像去噪典型算法及matlab实现 (http://gaochaojs.blog.51cto.com/812546/243961)

    版权声明 原创作品 允许转载 转载时请务必以超链接形式标明文章 原始出处 作者信息和本声明 否则将追究法律责任 http gaochaojs blog 51cto com 812546 243961 数字图像去噪典型算法及matlab实现