ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数字图像处理-空间滤波

2021-11-27 22:02:49  阅读:166  来源: 互联网

标签:滤波器 f2 imshow title 数字图像处理 均值 滤波 空间


一、实验原理

空间滤波是一种采用滤波处理的影像增强方法。其理论基础是空间卷积和空间相关。目的是改善影像质量,包括去除高频噪声与干扰,及影像边缘增强、线性增强以及去模糊等。分为低通滤波(平滑化)、高通滤波(锐化)和带通滤波。处理方法有计算机处理(数字滤波)和光学信息处理两种。

空间滤波器由一个领域(通常是较小的矩形)和对该邻域所包围图像像素执行的预定义操作组成。滤波产生一个新像素,新像素的坐标等于邻域中心的坐标,像素的值是滤波操作的结果。如果图像像素上执行的是线性操作,则称该滤波器为线性空间滤波器,否则,滤波器就称为非线性空间滤波器。

二、实验代码

%空间滤波

function text2_kongjianlvbo(I)

img=imread(I);%读入图片

img=rgb2gray(img);%改为二维灰度

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;%模板大小

AI=ones(M,N);

f21=f2 + 1;%防止有个像素点为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('几何均值滤波结果');

figure;

%中值滤波器

img3=uint8(medfilt2(f2,[5,5]));%中值滤波函数

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,2,1);

imshow(img);title('原图');

subplot(1,2,2);

imshow(f2);title('添加椒盐噪声的图像');

figure;

%中值滤波器

img5=uint8(medfilt2(f2,[5,5]));%中值滤波函数

subplot(1,2,1);

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,2,2);

imshow(img6);title('自适应中值滤波结果');

end 

三、实验结果及分析

 

 

 

 

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

标签:滤波器,f2,imshow,title,数字图像处理,均值,滤波,空间
来源: https://blog.csdn.net/qq_42368382/article/details/121584113

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有