自适应中值滤波器和自适应局部(均值)滤波器的设计 python+matlab各实现

本文介绍了自适应中值滤波器和自适应均值滤波器的设计原理与实现流程,包括在Python和MATLAB中的代码实现。针对椒盐噪声和高斯噪声,自适应中值滤波器能有效去除噪声,而自适应均值滤波器则考虑了噪声方差与局部方差,提高了图像处理效果。提供了从噪声生成到滤波处理的完整代码示例,展示了处理前后的图像对比,验证了两种滤波器在不同场景下的性能。
摘要由CSDN通过智能技术生成

要求是:自适应中值滤波器和自适应均值滤波器的设计,分别使用python和matlab去实现

一.原理

1.自适应中值滤波器
在这里插入图片描述在这里插入图片描述

2.自适应局部滤波器,也叫自适应均值滤波器
在这里插入图片描述在这里插入图片描述

二.设计流程

1.自适应中值滤波器
①生成椒盐噪声
利用rand()函数生成[0,1]的随机数,将随机数作逻辑判断,小于n值(n为椒盐密度)的为逻辑1,其余为逻辑0,再将这些逻辑值通过逻辑与、非等操作赋予像素点0或255值,得到椒盐噪声。

②设计中值滤波
中值滤波器的设计过程为:取出当前n*n阶滤波器对应的像素点,对其中像素作排序,取出中位数,赋予当前的中间位置像素点,放至结果矩阵中,输出。

③设计自适应中值滤波器
设计过程:以整个矩阵为整体进行操作。取出当前的n阶像素点,取出中位数、最小值、最大值并存储到新矩阵。将这三个新矩阵进行自适应中值滤波器的A、B过程的比较,并按照要求将符合的结果放至结果矩阵中,输出。
在这里插入图片描述

2.自适应局部滤波器
①生成高斯噪声
按照上次作业的原理设计出高斯噪声,并添加到原图像中。

②设计均值滤波器
设计过程为:取出当前n*n阶滤波器对应的像素点,求其均值,并将结果放至结果矩阵中,输出。

③设计自适应均值滤波器
设计过程为:求噪声方差;以矩阵为整体运算,求出n阶滤波器对应的像素点像素的均值,方差;将局部方差与噪声方差进行比较,按照规则计算新的像素,并存在结果矩阵中,输出。

在这里插入图片描述

三.MATLAB代码

①自适应中值滤波器,对灰度图像进行处理

%自适应中值滤波器,对灰度图像进行处理
function output=adp_median(image,nmin,nmax)
%输入为:image原图像,nmin滤波器的最小阶数,nmax滤波器的最大阶数
%image=rgb2gray(image); %灰度图像
%image=imnoise(image,'salt & pepper',0.5);
[h,w,~]=size(image);
imaged=double(image);
imagedd=imaged;
imagemid=imaged;
imagemin=imaged;
imagemax=imaged;
for k=nmin:2:nmax
    for i=1:h-k+1
        for j=1:w-k+1
             pattern=imaged(i:i+k-1,j:j+k-1);   %取出n*n的像素点值
             patterns=reshape(pattern,1,length(pattern(:)));  %将n*n矩阵转换为行向量
             middle=median(patterns); %对行向量取中位数
             mini=min(patterns); %对行向量取最小值
             maxi=max(patterns);%对行向量取最大值
             imagemid(i+(k-1)/2,j+(k-1)/2)=middle;
             imagemin(i+(k-1)/2,j+(k-1)/2)=mini;
             imagemax(i+(k-1)/2,j+(k-1)/2)=maxi;
        end
    end
    pa=(imagemax>imagemid)&(imagemid>imagemin);%A步骤的判断(对整个矩阵判断)
    pb=(image>imagemin)&(imagemax>image);%B步骤的判断
    zxy=pa&pb; %满足A,B条件的记在zxy位置
    zmed=pa&~pb;%满足A条件,不满足B条件的记在zmed位置
    imagedd(zxy)=image(zxy);%输出zxy
    imagedd(zmed)=imagemid(zmed);%输出zmed
    if k==nmax  %超过最大窗口尺寸的,输出zmed
        zmedd=~pa;
        imagedd(zmedd)=imagemid(zmedd);
    end
end
imagedd=uint8(imagedd); %转换为图片格式
output=imagedd;%输出
End

②自适应中值滤波器,对彩图进行处理

%自编写自适应中值滤波器处理三通道彩色图像
function output=adpmedian(image,nmin,nmax)
[h,w,~]=size(image);
imaged=double(image);
imaged1=imaged(:,:,1);
imaged2=imaged(:,:,2);
imaged3=imaged(:,:,3);
imagedd=imaged;
imagedd1=imaged(:,:,1);
imagedd2=imaged(:,:,2);
imagedd3=imaged(:,:,3);
imagemid=imaged;
imagemid1=imaged(:,:,1);
imagemid2=imaged(:,:,2);
imagemid3=imaged(:,:,3);
imagemin=imaged;
imagemin1=imaged(:,:,1);
imagemin2=imaged(:,:,2);
imagemin3=imaged(:,:,3);
imagemax=imaged;
imagemax1=imaged(:,:,1);
imagemax2=imaged(:,:,2);
imagemax3=imaged(:,:,3);
alreadyProcessed1=false(size(imaged1));
alreadyProcessed2=false(size(imaged2));
alreadyProcessed3=false(size(imaged3));
 
for k=nmin:2:nmax
    for i=1:h-k+1
        for j=1:w-k+1
             pattern1=imaged1(i:i+k-1,j:j+k-1);   %取出n*n的像素点值
             pattern2=imaged2
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值