matlab中多边形滤波器,几种常见空间滤波器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('自适应中值滤波结果');

三、结果分析

得到的结果如下:

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

标签:subplot,滤波器,f2,title,均值,滤波,几种,MATLAB

来源: https://www.cnblogs.com/Ph-one/p/11604362.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab fminimax 例子,Matlab应用实例(8)—fminimax

说明:fminimax用来求最小的最大值,比如城市建设消防站点时,考虑到最主要的因素是到最远的地方的用时(可换算为距离)最小,比如A方案到6个区域的用时为(1,1,1,1,1,12)&…

错误请联系管理员文件 index.php,帝国CMS订单、反馈信息、投稿与留言发邮件通知管理员的方法...

本文将为关注织梦者的朋友提供的是的帝国CMS订单、反馈信息、投稿与留言发邮件通知管理员的方法相关教程,具体实例代码请看下文:本文实例讲述了帝国CMS订单、反馈信息、投稿与留言发邮件通知管理员的方法。分享给大家供大家参考。具体实现方法如下:一、设…

php://filter利用条件,浅谈php://filter技巧

php://filterphp://filter可以作为一个中间流来处理其他流,具有四个参数:名称描述备注resource指定了你要筛选过滤的数据流必选read可以设定一个或多个过滤器名称,以管道符(|)分隔。可选write可以设定一个或多个过滤器名称,以管道符(|)分隔。…

mplayer-php,mplayer+smplayer 前后端播放器安装

环境:f8模式:mplayer做后端,smplayer做前端说明:如果是自己编译mplayer,后面所讲到的codecs路径就可能发生变化,做适当修改即可!以下省略一些解压缩之类的操作步骤!安装livna.org的第…

oracle昨日时间,。。今日,昨日,上周,本月,本年,按时间统计总金额

”本月 102“, 这是错的你少加了“10 7 41 2009-1-5 16:26:39”这条数据!结果具体如下:SQL> select A_ID, PAYMONEY, to_char(A_TIME, YYYY-MM-DD HH24:MI:SS) A_TIME from aa;A_ID PAYMONEY A_TIME---------- ---…

php验证卡号,PHP验证信用卡卡号是否正确函数

这篇文章主要介绍了PHP验证信用卡卡号是否正确函数,本文直接给出实现代码,需要的朋友可以参考下可以使用以下PHP函数,,验证一个卡号是否是信用卡:function validateCard ( $cardnumber ){$cardnumber preg_replace ( " /\D|\s/ " …

ssh远程执行oracle命令,ssh远程执行命令技巧

ssh可以直接在本地显示远程计算机所执行的命令远程ip:192.168.4.36本地:local5[rootlocal5 ~] # ssh 192.168.4.36 df && lsroot192.168.4.36s password:Filesystem 1K-blocks Used Available Use% Mounted on/dev/mapper/VolGro…

小米笔记本装linux教程视频教程,Archlinux安装指南~小米笔记本Air 13.3英寸版本

小米笔记本Air 13.3英寸版本,配置为:Intel Core i5-6200U处理器、8GB内存、256GB固态硬盘、NVIDIA GeForce 940MX独立显卡,13.3英寸1920X1080分辨率的IPS屏幕。1.制作U盘启动盘在Windows下使用USBWiter制作U盘启动盘,ISO为tuna源下…

Elasticsearch的分片平衡问题解决

2023年11月份在某电商系统生产中的Elasticsearch(以下简称ES)集群突然,出现了大量慢查询告警,导致请求堆积。经过几天的排查发现了ES节点主分片和副本分片分布存在不均匀的问题。当然了暂未有定论是由于分片不均衡导致了性能下降&…

linux卸载nomachine,NoMachine 安装与配置及使用

对Linux管理员们来说,远程办公不是什么新鲜事。如果管理员不在服务器跟前,远程办公更是家常便饭。一般而言,图形用户界面(GUI)默认情况下并不安装在Linux服务器上。但是可能有一些Linux管理员还是决定将GUI安装在Linux服务器上。如果你的服务…

linux系统之间无密传输,scp采用无密码在两台linux服务器之间传输数据(示例代码)...

一、root用户:1. 在主机A上执行如下命令来生成配对密钥:ssh-keygen -t rsa按照提示操作,注意,不要输入passphrase。提示信息如下Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa…

linux中top和ps的内存区别,linux - top与ps间的区别

背景在linux系统中提供了2个查询系统负荷值的命令,一个是 ps -o THREAD 一个是 top ,这两个命令都能够查询当前进程的CPU使用率情况,但是所代表的含义确实不一样的,ps -o THREAD 偏向与整个进程周期所占的CPU使用率,而 top 更偏向…

linux登录界面输入密码时卡住6,centos6.8(虚拟机VNC)输入正确用户名和密码仍跳回登录界面...

1)CentOS自动更新到6.8后root无法登陆问题解决虚拟机CentOS服务器不知道被谁更新系统到6.8后,发现在本机上即使输入正确的密码也无法登陆,发现有一些人也碰见过同样的问题,但是他们是因为系统变为64位后,无法找到pam_limits.so的正…

linux内核功能关闭透明大页 功能,redhat linux 7.4关闭透明大页

每一步:在GRUB_CMDLINE_LINUX加入选项 transparent_hugepageneverecho GRUB_CMDLINE_LINUX"transparent_hugepagenever" >> /etc/default/grub第二步:重新生成grub配置文件grub2-mkconfig -o /boot/grub2/grub.cfgGenerating grub confi…

linux获取ip地址的接口,获取Linux上接口的IP地址

sjsam..23如果您正在寻找特定接口的地址(IPv4),请说wlan0然后尝试使用getifaddrs()的代码:#include #include #include #include #include #include #include #include int main(int argc, char *argv[]){struct ifaddrs *ifaddr, *ifa;int family, s;char host[NI_MAXHOST];if…

linux yum 安装widget,CentOS 7安装Qt5.12.1过程

默认下载在Downloads目录下预安装sudo yum -y install mesa-libGL-devel mesa-libGLU-devel freeglut-devel给下载的文件赋予可执行的权限chmod x qt-opensource-linux-x64-5.12.1.run执行文件,进行安装./qt-opensource-linux-x64-5.12.1.run接下来会进行界面化的安…

usb otg vnc linux,20131126版本后,可以从PC通过USB-OTG VNC到pcDuino

为什么80%的码农都做不了架构师?>>>有些玩家购买pcDuino到手后发现自己没有显示器,没有鼠标键盘,有的只有手机的充电器和数据线。pcDuino开发者了解到粉丝们的郁闷之后,在软件上帮忙大家解决了这个问题。下面就给大家介绍…

linux 镜像错误,VituralBox 使用已有镜像文件报错:E_INVALIDARG (0x80070057)

VituralBox 使用已有镜像文件报错:E_INVALIDARG (0x80070057):问题描述:UUID已经存在Cannot register the hard disk E:\system_iso\CentOS6.8.vdi {05f096aa-67fc-4191-983d-1ed00fc6cce9}because a hard disk E:\system_iso\centos68_02\centos6.8.vdi…

c语言中123 234 345 456,如何在C中将数字从1123456789格式化为1,123,456,789?

宝慕林4294392您可以按以下方式递归执行此操作(请注意&#xff0c;INT_MIN如果使用二进制补码&#xff0c;则需要额外的代码来管理它)&#xff1a;void printfcomma2 (int n) { if (n < 1000) { printf ("%d", n); return; } printfcomma2…

dos c语言显示符号图案,在DOS命令行窗口中显示出用各种字符拼凑出来的各种图案的实现方法,如本人头像...

注&#xff1a;文中例子是本人刚学C编程语言的时候制作的&#xff0c;实现方法很简单&#xff0c;主要使用for循环语句&#xff0c;无需什么复杂烧脑的算法。由于经常看到各种符号拼成的图案&#xff0c;感觉很有意思&#xff0c;所以自己也弄了个&#xff0c;纯属好玩。(作品-…