几种常见空间滤波器MATLAB实现

本文链接:https://blog.csdn.net/LYduring/article/details/80443573

一、目的
实现算术均值滤波器、几何均值滤波器、中值滤波器、修正的阿尔法均值滤波器、自适应中值滤波器,并比较不同滤波器的降噪结果。

二、代码
代码的思路如下:

(1)先对原始的电路图先后进行加高斯噪声和椒盐噪声;之后设置滤波器的模板大小为5*5,分别对被噪声污染的图像进行算术均值、几何均值、中值、修正的阿尔法滤波,并输出图像,方便结果比较。

(2)为了比较中值滤波器和自适应中值滤波器的滤波结果,先对原始电路图添加椒盐噪声;接着对噪声图像进行模板大小为5*5的中值滤波;最后对噪声图像进行最大模板为5*5的自适应中值滤波,分别输出滤波后的图像,比较结果。

代码具体实现如下:

%******************************************************%
%目的:比较几种不同均值滤波器和自适应中值滤波器的去噪声效果
%日期:2018.5.18
%******************************************************%

%读入图像
img = imread(‘img.tif‘);
figure;
subplot(1,3,1);
imshow(img);
title(‘原始图像‘);
%分别添加加入高斯噪声和椒盐噪声
f1 = imnoise(img,‘gaussian‘);
subplot(1,3,2)
imshow(f1);
title(‘添加高斯噪声‘);
f2 = imnoise(f1,‘salt & pepper‘);
subplot(1,3,3)
imshow(f2);
title(‘再添加椒盐噪声‘);
f2 = double(f2);
[M,N] = size(f2);

%%%%比较几种均值滤波器及中值滤波器的滤波结果%%%%%%
%算术均值滤波器
n = 5; %模板大小
f11 = f2;
for i = 1:M-n+1
for j = 1:N-n+1
g1 = f2(i:i+n-1,j:j+n-1);
s1 = sum(sum(g1));
%中心点的值用子图像的算术均值代替
f11(i+(n-1)/2,j+(n-1)/2) = s1/(n*n);
end
end
img1 = uint8(f11);
figure;
subplot(1,2,1);
imshow(img1);
title(‘算术均值滤波结果‘);

%几何均值滤波器
n = 5; %模板大小
f21 = f2 + ones(M,N); %防止有个像素点为0而导致乘积为0
f12 = f21;
for i = 1:M-n+1
for j = 1:N-n+1
g2 = f21(i:i+n-1,j:j+n-1);
s2 = prod(g2(:));
%中心点的值用子图像的几何均值代替
f12(i+(n-1)/2,j+(n-1)/2) = s2.^(1/numel(g2));
end
end
img2 = uint8(f12);
subplot(1,2,2);
imshow(img2);
title(‘几何均值滤波结果‘);

%中值滤波器
img3 = uint8(medfilt2(f2,[5 5]));
figure;
subplot(1,2,1);
imshow(img3);
title(‘中值滤波结果‘);

%修正的阿尔法均值滤波器
n = 5; %模板大小
d = 5; %去掉最值灰度值的个数
f13 = f2;
for i = 1:M-n+1
for j = 1:N-n+1
g3 = f2(i:i+n-1,j:j+n-1);
g3 = sort(g3(:)); %对邻域内的像素点进行排序
min_num = ceil(d/2); %去掉最小灰度值的个数
max_num = floor(d/2); %去掉最大灰度值的个数
%去掉d个最值灰度级后求算术均值
g3(1:min_num) = zeros(min_num,1);
g3(n-max_num+1:n) = zeros(max_num,1);
s3 = sum(g3);
%中心点的值用子图像的算术均值代替
f13(i+(n-1)/2,j+(n-1)/2) = s3/(n*n-d);
end
end
img4 = uint8(f13);
subplot(1,2,2);
imshow(img4);
title(‘修正的阿尔法均值滤波结果‘);

%%%%%%%比较中值滤波器及自适应中值滤波器的滤波结果%%%%%%%
f2 = imnoise(img,‘salt & pepper‘);
figure;
subplot(1,4,1);
imshow(img);
title(‘原图‘);
subplot(1,4,2);
imshow(f2);
title(‘添加椒盐噪声的图像‘);

%中值滤波器
img5 = uint8(medfilt2(f2,[5 5]));
subplot(1,4,3);
imshow(img5);
title(‘中值滤波结果‘);

%自适应中值滤波器
f14 = f2;
alreadyPro = false(size(f2)); %看是否完成进程
Smax=5; %最大窗口尺寸
for s = 3:2:Smax %起始窗口尺寸设为3
%得到特定的灰度值
zmin = ordfilt2(f2, 1, ones(s, s), ‘symmetric‘);
zmax = ordfilt2(f2, s * s, ones(s, s), ‘symmetric‘);
zmed = medfilt2(f2, [s s], ‘symmetric‘);
%进程B
processB = (zmed > zmin) & (zmax > zmed) & ~alreadyPro;
%进程A
processA = (f2 > zmin) & (zmax > f2);
outZxy = processB & processA;
outZmed = processB & ~processA;
f14(outZxy) = f2(outZxy);
f14(outZmed) = zmed(outZmed);
alreadyPro = alreadyPro | processB;
if all(alreadyPro(:))
break;
end
end
f14(~alreadyPro) = zmed(~alreadyPro);
img6 = uint8(f14);
subplot(1,4,4);
imshow(img6);
title(‘自适应中值滤波结果‘);

三、结果分析
得到的结果如下:

由滤波结果,我们可以看出,对于添加了高斯噪声和椒盐噪声的图像,算术均值和几何均值滤波器的效果比较差,尤其是几何均值滤波器;而中值滤波器和修正后的阿尔法均值滤波器的降噪效果比前面两种滤波器的效果要好很多,修正的阿尔法均值滤波器的效果最好,使图像变得更平滑。中值滤波器和自适应中值滤波器进行比较,两者的降噪效果都不错,不过中值滤波器导致了原始图像细节的丢失,而自适应中值滤波器则很好地保持了原始图像的清晰度和细节。

原文地址:https://www.cnblogs.com/Ph-one/p/11604362.html

时间: 2024-10-08 03:36:58

几种常见空间滤波器MATLAB实现的相关文章

【图像处理笔记】平滑空间滤波器

平滑空间滤波器是低频增强的空间滤波技术.它的目的有两类:一是模糊处理,二是降低噪声.本文介绍的平滑空间滤波器也分为两类,一类是线性滤波器,比如最简单的简单平均法:另一类是统计排序滤波器. 下面我们先来说说平滑线性滤波器. 平滑线性空间滤波器的输出(响应)是包含在滤波器模板邻域内的像素的简单平均值.这些滤波器有时也称为均值滤波器.也可以把它们归入低通滤波器. 这种处理的结果降低了图像灰度的尖锐变化.由于典型的随机噪声由灰度级的急剧变化组成,因此常见的平滑处理的应用就是降噪. 然而,由于图像边缘(几

推荐系统的几种常见模型概述

某个选修课的论文,这里贴过来,之所以贴过来,是因为我认为自己写的确实非常有意义,网上对这个东西确实没有很系统的中文介绍,我自己也是看了许多论文自己也动手做了很多很多实践才领悟的. 这个只是概论,以后有时间再加上具体的模型.算法. ----------------------------------------------------------------------------- 总的来说,推荐系统的目标可以分为预测评分和物品推荐两种,目前对前者的研究也更多,因为前者更适合建复杂的模型,所以这

java之 ------ 几种常见的简单设计模式

前言: 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.用于解决特定环境下.重复出现的特定问题的解决方案.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的

几种常见的app推广形式

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; text-decoration: none; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: poin

数字图像处理- 3.6 锐化空间滤波器

Reference Link : http://blog.csdn.net/xz_rabbit/article/details/17999315 Reference Link : http://www.cnblogs.com/salan668/p/3560197.html 3.6 锐化空间滤波器 锐化处理的主要目的是突出图像中的细节或者增强被模糊了的细节,这种模糊不是由于错误操作,就是特殊图像获取方法的固有印象.总的来说,微分算子的响应强度与图像在该店(应用了算子)的突变程度有关.这样一来,图像

Java几种常见的编码方式

Java综合 几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言.由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解.我们可以把计算机能够理解的语言假定为英语,其它语言要能够在计算机中使用必须经过一次翻译,把它翻译成英语.这个翻译的过程就是编

10种常见的软件架构模式

架构模式 架构模式是一个通用的.可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题.架构模式与软件设计模式类似,但具有更广泛的范围.在本文中,将简要地解释以下10种常见的体系架构模式,以及它们的用法.优缺点. 分层模式 客户端-服务器模式 主从设备模式 管道-过滤器模式 代理模式 点对点模式 事件总线模式 模型-视图-控制器模式 黑板模式 解释器模式 一. 分层模式 这种模式也称为多层体系架构模式.它可以用来构造可以分解为子任务组的程序,每个子任务都处于一个特定的抽象级别.每个层

分库分表的几种常见形式以及可能遇到的难

在谈论数据库架构和数据库优化的时候,我们经常会听到"分库分表"."分片"."Sharding"-这样的关键词.让人感到高兴的是,这些朋友所服务的公司业务量正在(或者即将面临)高速增长,技术方面也面临着一些挑战.让人感到担忧的是,他们系统真的就需要"分库分表"了吗?"分库分表"有那么容易实践吗?为此,笔者整理了分库分表中可能遇到的一些问题,并结合以往经验介绍了对应的解决思路和建议. 垂直分表 垂直分表在日常开

几种常见排序算法

几种常见排序算法 几种常见排序算法 写在前面 基础介绍 初级排序算法 selection sort选择排序 insertion sort插入排序 ShellSort希尔排序 shuffing不是排序算法 merge sort归并排序 Abstract in-place merge原地归并的抽象方法 Top-down mergesort自顶向下的归并排序 Bottom-up mergesort自底向上的归并排序 quicksort 三向切分的快速排序 Heapsort堆排序 总结和比较 命题 本文