精华内容
下载资源
问答
  • MATLAB中值滤波器

    千次阅读 2019-05-23 21:27:29
    对于中值滤波器MATLAB也有自带的函数medfilt2(),中值滤波器对椒盐噪声的处理效果很好。 close all clc i=7; % filename='D:\Matlab2018a\work\meanfilter\Set12\08.png'; %图片路径 imgGray = im2double(imread...

    对于中值滤波器,MATLAB也有自带的函数medfilt2(),中值滤波器对椒盐噪声的处理效果很好。

    close all
    clc
    i=7;  %
    filename='D:\Matlab2018a\work\meanfilter\Set12\08.png'; %图片路径,改成你自己的
    imgGray = im2double(imread(filename)); %读入图片
    % imgnoise=imnoise(imgGray,'gaussian',0,0.01); %添加椒盐噪声
     imgnoise=imnoise(imgGray,'salt & pepper',0.2);
    %imgnoise=imnoise(imgGray,'speckle',0.04);
     output = medfilt2(imgnoise,[i,i],'symmetric' );%symmetric:边缘采用镜像反射外边界的方式来扩展,这种方式对边缘的处理效果最好
    imwrite(output,'D:\Matlab2018a\work\meanfilter\median\result\res_c_median7.png')%写出处理后的图片到指定目录
    imshow ([imgGray,imgnoise,doutput]);%分别显示原图,含噪图像,去噪图像
    PSNR = psnr(imgGray,output);% 计算PSNR 
    
    展开全文
  • MATLAB 自适应中值滤波函数adpmedian参考 冈萨雷斯 《数字图像处理》MATLAB版function f = adpmedian(g,Smax)if (Smax<=1)||(Smax/2==round(Smax/2))||(Smax~=round(Smax))error('Smax must be an odd integer &...

    MATLAB  自适应中值滤波函数adpmedian

    参考 冈萨雷斯 《数字图像处理》MATLAB版

    function f = adpmedian(g,Smax)

    if (Smax<=1)||(Smax/2==round(Smax/2))||(Smax~=round(Smax))

    error('Smax must be an odd integer >1.')

    end

    f=g;

    f(:)=0;

    alreadyProcessed=false(size(g));

    for k=3:2:Smax

    zmin=ordfilt2(g,1,ones(k,k),'symmetric');

    zmax=ordfilt2(g,k*k,ones(k,k),'symmetric');

    zmed=medfilt2(g,[k k],'symmetric');

    processUsingLevelB=(zmed>zmin)&(zmax>zmed)&...

    ~alreadyProcessed;

    zB=(g>zmin)&(zmax>g);

    outputZxy=processUsingLevelB & zB;

    outputZmed=processUsingLevelB&~zB;

    f(outputZxy)=g(outputZxy);

    f(outputZmed)=zmed(outputZmed);

    alreadyProcessed=alreadyProcessed | processUsingLevelB;

    if all(alreadyProcessed(:))

    break;

    end

    end

    f(~alreadyProcessed)=zmed(~alreadyProcessed);

    end

    展开全文
  • 将结果与文献中其他众所周知的噪声去除方法,如标准中值滤波器 (SMF) 和自适应中值滤波器 (AMF) 进行比较,获得了更好的结果。 例如,SMF 和 AMF 滤波器的结果以及峰值信噪比 (PSNR) 是通过向 Lena 图像添加 0.1 的...
  • 中值滤波器函数
  • 这是加权中值滤波器,感谢 Sajid Khan 在之前版本的代码中进行更正。
  • 加权中值滤波器: 它与中值滤波器相同,唯一的区别是掩码不为空。 它将具有一些权重(或值)并取平均值。 进行加权中值滤波的步骤如下: 1) 假设一个 3x3 加权掩码。 2) 将面罩放在左手角。 3)卷积(乘法)后,将9...
  • 中值滤波是一种非线性过程,可用于减少脉冲噪声或椒盐噪声。 它也可用于保留图像中的边缘。与其他中值滤波器相比,此滤波器可提供更好的结果
  • 用于高密度噪声的基于决策的中值滤波器
  • 用于高密度脉冲噪声的基于未修剪决策的中值滤波器
  • 中值过滤代码matlab 中值过滤器 用于MATLAB的快速中值滤波器 用于MATLAB中深度帧中值滤波的C ++兼容代码。 RGBD相机会收集一个深度框,该深度框可能包含缺少的像素值。
  • 在本次提交中,5x5 中值滤波器已使用 HDL 编码器实现。
  • 这里中值滤波器是在 hdlcoder 的帮助下实现的。与 matlab Hdl 编码器演示中提供的已实现的中值滤波器相比,该实现提供了更好的结果。此外,通过这种实现,仿真时间更短,因此代码更有效速度和输出效率方面。
  • 用于密集视差图估计的中值滤波器和 k 均值 MATLAB 函数来填充稀疏视差图,从而创建密集视差图。 DEMO.m 包含三个带有 Tsukuba、Middlebury 和 KITTI 立体数据集的示例。 作为输入,稀疏视差图必须具有用于遮挡值的 ...
  • 中值过滤器Matlab 使用中值滤波器进行图像处理
  • MATLAB的.m文件,开关型矢量中值滤波器的实现,需要在标准CIELAB空间下使用,具体的开关型矢量中值滤波器的原理可以参考论文
  • 这个算法不是很好,尤其是当图片很大或太彩色时。 无论如何希望它会帮助你。
  • matlab编写的中值滤波器,欢迎下载。
  • 这是一个性能分析。 使用 MATLAB Ver 6.1 进行分析。 我已尽最大努力进行最佳分析。
  • 该工具箱包含用于对单位圆上具有值的信号和图像进行中值滤波的快速算法,例如相位或方向数据。
  • 简单的中值滤波器,用Matlab实现的。
  • medfilt1(一维中值滤波器)——matlab自带 medfilt2(二维中值滤波器)——matlab自带 medfilt3(三维中值滤波器)——matlab自带 以上很容易使用,把对应信号或矩阵的变量作为参数即可。 很奇怪,直接在matlab...

    前记

    一直想利用中值滤波器消除一些突然出现的幅值忽然变大的噪声,结果想到了用周围的点来代替该点突变的值,但是不知道用啥来做,现在终于找到了…

    中值滤波器

    • medfilt1(一维中值滤波器)——matlab自带
    • medfilt2(二维中值滤波器)——matlab自带
    • medfilt3(三维中值滤波器)——matlab自带
      • 以上很容易使用,把对应信号或矩阵的变量作为参数即可。
      • 很奇怪,直接在matlab官网搜“中值滤波”没匹配到有效的,搜medfilt就出来函数介绍了…

    均值滤波器

    • stdfilt(图像局部标准差)——可能主要是用于图像处理的吧,不是这个方向不太了解。

    参考文献

    stdfilt
    medfilt1
    MATLAB–数字图像处理 中值滤波
    Matlab实现图像滤波(贰):中值滤波、高效的中值滤波、带权重的中值滤波

    展开全文
  • 中值滤波器是一种非线性数字滤波技术,常用于通过拉普拉斯分布去除噪声。 中值滤波器的主要思想是逐个条目遍历信号条目,用相邻条目的中值替换每个条目。 邻居的模式称为“窗口”,它在整个信号上逐项滑动。
  • 设计中值滤波器并计算信噪比值
  • 中值滤波器

    2014-06-10 19:56:01
    一个简单的中值滤波器,基于matlab所编写的。比较入门
  • 中值过滤代码matlab 使用均值和中值滤波器进行图像降噪 使用均值和中值滤波器的图像去噪Matlab代码
  • %基于修改决策的灰度图像的非对称修剪中值滤波器% im = 输入图像% K = 计算窗口的长度 win=(2*l)+1 % n = 椒盐噪声的噪声密度% out = 输出图像% 代码开发者:Suraj Kamya % kamyasuraj@yahoo.com % 其他使用过的...
  • 要求是:自适应中值滤波器和自适应均值滤波器的设计,分别使用python和matlab去实现 一.原理 1.自适应中值滤波器

    要求是:自适应中值滤波器和自适应均值滤波器的设计,分别使用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(i:i+k-1,j:j+k-1); 
                 pattern3=imaged3(i:i+k-1,j:j+k-1); 
                 patterns1=reshape(pattern1,1,length(pattern1(:)));  %将n*n矩阵转换为行向量
                 patterns2=reshape(pattern2,1,length(pattern2(:)));
                 patterns3=reshape(pattern3,1,length(pattern3(:)));
                 middle1=median(patterns1); %对行向量取中位数
                 middle2=median(patterns2);
                 middle3=median(patterns3);
                 mini1=min(patterns1);
                 mini2=min(patterns2);
                 mini3=min(patterns3);
                 maxi1=max(patterns1);
                 maxi2=max(patterns2);
                 maxi3=max(patterns3);
                 imagemid1(i+(k-1)/2,j+(k-1)/2)=middle1;
                 imagemid2(i+(k-1)/2,j+(k-1)/2)=middle2;
                 imagemid3(i+(k-1)/2,j+(k-1)/2)=middle3;
                 imagemin1(i+(k-1)/2,j+(k-1)/2)=mini1;
                 imagemin2(i+(k-1)/2,j+(k-1)/2)=mini2;
                 imagemin3(i+(k-1)/2,j+(k-1)/2)=mini3;
                 imagemax1(i+(k-1)/2,j+(k-1)/2)=maxi1;
                 imagemax2(i+(k-1)/2,j+(k-1)/2)=maxi2;
                 imagemax3(i+(k-1)/2,j+(k-1)/2)=maxi3;
            end
        end
        pa1=(imagemax1>imagemid1)&(imagemid1>imagemin1)&(~alreadyProcessed1);
        pa2=(imagemax2>imagemid2)&(imagemid2>imagemin2)&(~alreadyProcessed2);
        pa3=(imagemax3>imagemid3)&(imagemid3>imagemin3)&(~alreadyProcessed3);
        pb1=(imaged1>imagemin1)&(imagemax1>imaged1);
        pb2=(imaged2>imagemin2)&(imagemax2>imaged2);
        pb3=(imaged3>imagemin3)&(imagemax3>imaged3);
        zxy1=pa1&pb1;
        zxy2=pa2&pb2;
        zxy3=pa3&pb3;
        zmed1=pa1&~pb1;
        zmed2=pa2&~pb2;
        zmed3=pa3&~pb3;
        imagedd1(zxy1)=imaged1(zxy1);
        imagedd2(zxy2)=imaged2(zxy2);
        imagedd3(zxy3)=imaged3(zxy3);
        imagedd1(zmed1)=imagemid1(zmed1);
        imagedd2(zmed2)=imagemid2(zmed2);
        imagedd3(zmed3)=imagemid3(zmed3);
        
        alreadyProcessed1=alreadyProcessed1|pa1;%处理过的像素
        alreadyProcessed2=alreadyProcessed2|pa2;
        alreadyProcessed3=alreadyProcessed2|pa3;
        if all(alreadyProcessed1(:)&alreadyProcessed2(:)&alreadyProcessed3(:))
            break;
        end
    end
    imagedd1(~alreadyProcessed1) = imagemid1(~alreadyProcessed1);
    imagedd2(~alreadyProcessed2) = imagemid2(~alreadyProcessed2);
    imagedd3(~alreadyProcessed3) = imagemid3(~alreadyProcessed3);
    imagedd=cat(3,imagedd1,imagedd2,imagedd3);
    imagedd=uint8(imagedd);
     
    output=imagedd;
    

    ③自适应均值滤波器,对灰度图进行处理

    clear;clc;
    %% 导入原图像,并添加高斯噪声
    image=imread('whl.jpg');
    [width,height,~]=size(image);
    imagen=rgb2gray(image);
    mu=0;  %均值
    sigma=0.1;  %标准差
    u1=rand(width,height);  %生成图像大小的均匀(0,1)分布的u1,u2
    u2=rand(width,height);
    x=sigma*sqrt(-2*log(u1)).*cos(2*pi*u2)+mu;  %box-muller方法的公式书写,生成的是标准正态分布,再乘上标准差,加上均值,为最终的高斯分布
    k=double(imagen)/255;
    imagen=k+x;  %将图像变为double型,且数值区间在(0,1),再加上高斯分布形成的噪声
    imagen=uint8(255*imagen);   %将double类型的灰度值变回为图像
    %% 自适应均值滤波器的设计
    imagenn=double(imagen);
    iamgee=rgb2gray(image); %取未加噪声的原图像的灰度
    iamgee=double(iamgee);
    %初始化
    imagedd=imagenn;
    imagemean=imagenn;
    imagevar=imagenn;
    n=7;%滤波器阶数为7
     
    sigma=(imagenn-iamgee).^2; %干扰f形成在gxy上的噪声方差
     
    for i=1:width-n+1
            for j=1:height-n+1
                pattern=imagenn(i:i+n-1,j:j+n-1);
                patterns=reshape(pattern,1,length(pattern(:)));
                means=mean(patterns);%求均值
                imagemean(i+(n-1)/2,j+(n-1)/2)=means;
                vars=var(patterns,1);%求方差
                imagevar(i+(n-1)/2,j+(n-1)/2)=vars;
            end
    end
    %对自适应局部滤波的各项条件作了修改
    da=(sigma<1);%噪声方差小于1的返回原像素值
    dc=~da&(abs(sigma-imagevar)<=100); %噪声方差与局部方差高度相关时,返回一个近似值
    db=~dc; %略有调整,剩下的像素位置设置为均值
    %da,db,dc为逻辑值
    imagedd(da)=imagenn(da);
    imagedd(db)=imagemean(db);  
    imagedd(dc)=imagenn(dc)-(sigma(dc)./imagevar(dc).*(imagenn(dc)-imagemean(dc)));   
    imagedd=uint8(imagedd);
    %% 画图
    subplot(1,3,1);
    imshow(imagen);
    title('原图像');
    output=mean_filter(imagen,3);
    subplot(1,3,2);
    imshow(output);
    title('均值滤波处理后结果');
    subplot(1,3,3);
    imshow(imagedd);
    title('自适应均值滤波处理后结果');
    

    其他程序:
    ④中值滤波器

    %自编写中值滤波器
    function output=mid_filter(image,n)
    %输入image为原始图像,n为滤波器规模n*n,输出为滤波后的图像output
    [h,w]=size(image);
    imaged=double(image); %转换为double类型
    imagedd=imaged;  %初始化滤波结果的规模
    for i=1:h-n+1
        for j=1:w-n+1
            pattern=imaged(i:i+n-1,j:j+n-1);   %取出n*n的像素点值
            patterns=reshape(pattern,1,length(pattern(:)));  %将n*n矩阵转换为行向量
            middle=median(patterns); %对行向量取中位数
            imagedd(i+(n-1)/2,j+(n-1)/2)=middle;  %该值储存在滤波结果的对应位置上
        end
    end
    output=uint8(imagedd);
    end
    

    ⑤均值滤波器

    %自编写均值滤波器
    function output=mean_filter(image,n)
    %输入image为原始图像,n为滤波器规模n*n,输出为滤波后的图像output
    [h,w]=size(image);
    imaged=double(image); %转换为double类型
    imagedd=imaged;  %初始化滤波结果的规模
    a=ones(n,n);
    for i=1:h-n+1
        for j=1:w-n+1
            pattern=imaged(i:i+n-1,j:j+n-1).*a;
            means=sum(sum(pattern));
            imagedd(i+(n-1)/2,j+(n-1)/2)=means/(n*n);
        end
    end
    output=uint8(imagedd);
    end
    

    ⑥椒盐噪声

    %自编写添加椒盐噪声
    function output=salt_noise(image,n)
    %输入image为原图像,n为椒盐噪声的密度,输出为添加椒盐噪声后的图像
    [width,height,~]=size(image);
    result2=image;
     
    %k1、k2作为判断临界点
    k1=n;
    k2=n;
    %小于k的元素在矩阵中为1,反之为0(逻辑值)
    a1=rand(width,height)<k1;
    a2=rand(width,height)<k2;
    b1=rand(width,height)<k1;
    b2=rand(width,height)<k2;
    c1=rand(width,height)<k1;
    c2=rand(width,height)<k2;
    %合成彩色图像,RGB三通道分开添加
    t1=result2(:,:,1);
    t2=result2(:,:,2);
    t3=result2(:,:,3);
    %分成黑点,白点
    % a1&a2:a1,a2均为1时,结果为逻辑1
    t1(a1&a2)=0;
    t2(b1&b2)=0;
    t3(c1&c2)=0;
    % a1&~a2:a1为1,a2为0时,结果为逻辑1
    t1(a1& ~a2)=255;
    t2(b1& ~b2)=255;
    t3(c1& ~c2)=255;
    result2(:,:,1)=t1;
    result2(:,:,2)=t2;
    result2(:,:,3)=t3;
     
    output=result2;
    end
    

    ⑦主程序:显示各个子图

    clear;clc;
    image=imread('whl.jpg');
    subplot(2,4,1),imshow(image),title('原图');
    k1=salt_noise(image,0.5);
    subplot(2,4,2),imshow(k1),title('加入椒盐噪声');
    output11=mid_filter(k1,3);
    subplot(2,4,3),imshow(output11),title('中值滤波处理后');
    output22=mean_filter(k1,3);
    subplot(2,4,4),imshow(output22),title('均值滤波处理后');
     
    imagen=rgb2gray(image);
    imagen=imnoise(imagen,'salt & pepper',0.5);
    subplot(2,4,5),imshow(imagen),title('灰度图');
    imagedd=adp_median(imagen,3,9);
    subplot(2,4,6),imshow(imagedd),title('自适应中值滤波处理后');
     
    imagenn=salt_noise(image,0.5);
    subplot(2,4,7),imshow(imagenn),title('0.5椒盐噪声图');
    imagekk=adpmedian(imagenn,3,21);
    subplot(2,4,8),imshow(imagekk),title('自适应中值滤波处理后的彩色图像');
    

    四.运行结果

    ①自适应中值滤波器的程序运行结果:
    该图包括有:加入椒盐噪声的原图像显示,中值滤波与均值滤波的处理结果图显示,自适应中值滤波的灰度图结果显示,自适应中值滤波的彩色图结果显示。以子图的形式显示,是方便了进行原图与处理结果的比较,以及各种方法的效果比较总结。
    结果分析:当椒盐噪声的密度较大时,中值滤波的处理结果不理想,仍存在较多噪声点,而自适应中值滤波的处理结果较好,灰度图和彩色图的结果都能较为清晰。
    在这里插入图片描述

    ②自适应均值滤波器的程序运行结果:
    该图包括有:添加了高斯噪声的原图像,均值滤波处理后的结果显示,自适应均值滤波处理后的结果,均是以灰度图的形式显示。
    结果分析:均值滤波的处理结果仍是较模糊,自适应的效果更好,能让局部的像素点更加的清晰,但实现起来较复杂。
    在这里插入图片描述

    五.python版本代码

    自适应局部滤波器

    # 自适应均值滤波器
    # 即,自适应局部滤波器
    
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    
    def ada_mean_m(image):
        [width, height] = image.shape[:2]
        imagen = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        mu = 0  # 均值
        sigma = 0.1  # 标准差
        u1 = np.random.rand(width, height)  # 生成图像大小的均匀(0,1)分布的u1,u2
        u2 = np.random.rand(width, height)
        x = sigma * np.sqrt(-2 * np.log(u1)) * np.cos(
            2 * np.pi * u2) + mu  # box-muller方法的公式书写,生成的是标准正态分布,再乘上标准差,加上均值,为最终的高斯分布
        k = imagen / 255
        imagen = k + x  # 将图像变为double型,且数值区间在(0,1),再加上高斯分布形成的噪声
        imagen = np.uint8(255 * imagen)  # 将double类型的灰度值变回为图像
        # 自适应均值滤波器的设计
        imagenn = imagen
        iamgee = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 取未加噪声的原图像的灰度
        iamgee = iamgee
        # 初始化
        imagecc = imagenn
        imagedd = imagenn
        imagemean = imagenn
        imagevar = imagenn
        n = 7  # 滤波器阶数为7
    
        sigma0 = (imagenn - iamgee) ^ 2  # 干扰f形成在gxy上的噪声方差
    
        for i in range(width - n + 1):
            for j in range(height - n + 1):
                pattern = imagenn[i:i + n - 1, j:j + n - 1]
                height = int(pattern.shape[0])
                width = int(pattern.shape[1])
                dim = width * height
                patterns = cv2.resize(pattern, (dim, 1), interpolation=cv2.INTER_AREA)
                means = np.mean(patterns)  # 求均值
                imagemean[int(i + (n - 1) / 2), int(j + (n - 1) / 2)] = means
                Vars = np.var(patterns, 1)  # 求方差
                imagevar[int(i + (n - 1) / 2), int(j + (n - 1) / 2)] = Vars
    
        da = (sigma0 < 1)  # 噪声方差小于1的返回原像素值
        dc = ~da & (abs(sigma0 - imagevar) <= 100)  # 噪声方差与局部方差高度相关时,返回一个近似值
        db = ~dc  # 略有调整,剩下的像素位置设置为均值
        # da,db,dc为逻辑值
        imagedd[da] = imagenn[da]
        imagedd[db] = imagemean[db]
        imagedd[dc] = imagenn[dc] - (sigma0[dc] / imagevar[dc] * (imagenn[dc] - imagemean[dc]))
        where_are_nan = np.isnan(imagedd)
        where_are_inf = np.isinf(imagedd)
        imagedd[where_are_nan] = 0
        imagedd[where_are_inf] = 0
        imagedd = np.uint8(imagedd)
        return imagedd
    
    
    # 导入原图像,并添加高斯噪声
    image = cv2.imread('whl.jpg', 1)
    
    # 画图
    plt.subplot(1, 3, 1)
    plt.imshow(image)
    plt.title('original')
    '''
    output=mean_filter(imagen,3)
    plt.subplot(1,3,2)
    plt.imshow(output)
    plt.title('均值滤波处理后结果')
    '''
    imagedd = ada_mean_m(image)
    plt.subplot(1, 3, 3)
    plt.imshow(imagedd)
    plt.title('adapt_mean_filter')
    plt.show()
    
    

    自适应中值滤波器

    # 自适应中值滤波器
    
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    
    def AdaptProcess(src, i, j, minSize, maxSize):
    
        filter_size = minSize
    
        kernelSize = filter_size // 2
        rio = src[i-kernelSize:i+kernelSize+1, j-kernelSize:j+kernelSize+1]
        minPix = np.min(rio)
        maxPix = np.max(rio)
        medPix = np.median(rio)
        zxy = src[i, j]
    
        if (medPix > minPix) and (medPix < maxPix):
            if (zxy > minPix) and (zxy < maxPix):
                return zxy
            else:
                return medPix
        else:
            filter_size = filter_size + 2
            if filter_size <= maxSize:
                return AdaptProcess(src, i, j, filter_size, maxSize)
            else:
                return medPix
    
    
    def adapt_meadian_filter(img, minsize, maxsize):
    
        borderSize = maxsize // 2
    
        src = cv2.copyMakeBorder(img, borderSize, borderSize, borderSize, borderSize, cv2.BORDER_REFLECT)
    
        for m in range(borderSize, src.shape[0] - borderSize):
            for n in range(borderSize, src.shape[1] - borderSize):
                src[m, n] = AdaptProcess(src, m, n, minsize, maxsize)
    
        dst = src[borderSize:borderSize+img.shape[0], borderSize:borderSize+img.shape[1]]
        return dst
    
    
    # 导入原图像,并添加高斯噪声
    image = cv2.imread('whl.jpg')
    imagen = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 画图
    plt.subplot(1, 3, 1)
    plt.imshow(image)
    plt.title('original')
    '''
    output=mean_filter(imagen,3)
    plt.subplot(1,3,2)
    plt.imshow(output)
    plt.title('均值滤波处理后结果')
    '''
    imagedd = adapt_meadian_filter(imagen, 3, 9)
    plt.subplot(1, 3, 3)
    plt.imshow(imagedd)
    plt.title('adapt_meadian_filter')
    plt.show()
    
    
    展开全文
  • 中值滤波器函数

    2014-10-18 17:37:56
    资源是针对图像处理中MATLAB学习,代码是中值滤波器函数文件,可用于实验练习
  • 自适应中值滤波器去噪 它是根据研究论文完成的。 在这里,我们开发了两种算法: 基于MODPA的原纸。 优点是计算速度快 基于原纸的MOD2PA改进算法。 优点-PSNR比MODPA更好,但计算量很大(使用中位数和均值的组合) ...
  • 中值滤波器,与matlab(2010a)的一样.上传的文件是utf-8编码.

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 288
精华内容 115
关键字:

matlab中值滤波器

matlab 订阅