博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
空间滤波
阅读量:5108 次
发布时间:2019-06-13

本文共 2801 字,大约阅读时间需要 9 分钟。

1.线性空间滤波

1 clear,clc; 2 close all; 3 f = imread('test.tif'); %读入原图像 4 subplot(321),imshow(f); %显示原图像 5  6 w = ones(31); 7 gd = imfilter(f,w); 8 subplot(322),imshow(gd,[ ]);        % 9 10 gr = imfilter(f,w,'replicate');11 subplot(323), imshow(gr,[ ])        %12 13 gs = imfilter(f,w,'symmetric');14 subplot(324),imshow(gs,[ ])         %15 16 gc = imfilter(f,w,'circular');17 subplot(325),imshow(gc,[ ]);        %18 19 f8 = im2uint8(f);20 g8r = imfilter(f8,w,'replicate');21 subplot(326),imshow(g8r,[ ]);       %
View Code

执行结果如下:

     

2.非线性空间滤波

{

colfilt()函数:

 功能:以列方法进行邻域处理,也可执行常规非线性滤波。

用法:B = colfilt(A,[m n],block_type,fun)
   该函数生成了一幅图像A,在A中,每一列对应于其中心位于图像内某个位置的邻域所包围的像素。然后将函数应用于该矩阵中。[m n]表示大小为m行n列的邻域。block_type表示了一个字符串,包括'distinct','sliding'两种,其中'sliding'是在输入图像中逐个像素地滑动该m乘n的区域。fun表示引用了一个函数进行处理,函数返回值的大小必须和原图像大小相同。
举例:I = imread('tire.tif');
           imshow(I)
           I2 = uint8(colfilt(I,[5 5],'sliding',@mean));     %额,这里要说明一点:@mean,有的MATLAB需要加@,有的就不需要加了
           figure, imshow(I2)

}

eg:

1 clear,clc;2 close all;3 f = imread('test.tif'); %读入原图像4 subplot(121),imshow(f); %显示原图像5 6 gmean = @(A)prod(A,1).^1/size(A,1);      %定义好非线性滤波器函数7 gf = padarray(f,[5,5],'replicate');      %用replicate填充输入图像8 g = colfilt(gf,[5,5],'sliding', gmean ); %对每个像素都执行这样的滤波操作9 subplot(122),imshow(g);
非线性滤波

执行结果为:    (显然也看不出什么结果,不过确实有这种方法)

3.线性空间滤波器

工具箱支持许多预定义的二维线性空间滤波器,这些滤波器可通过fspecial得到。该函数的模板为w = fspecial('type', parameters );  type用来指示滤波器的类型,parameters用来进一步规定滤波器。

这里只显示用这个函数实现“拉普拉斯滤波器”的效果:

1 clear;clc; 2 close all; 3 f = imread('test.tif'); 4 figure(1),imshow(f); 5 w = fspecial('laplacian',0 );     %0是拉普拉斯滤波器的“阿尔法”值,取值区间[0,1],默认值是0.2 6 res = imfilter(f,w,'replicate');   7 figure(2),imshow(res,[]);      %显示用w滤波器的滤波结果 8  9 f2 = im2double(f);                %将f中的整数数值转化为浮点数10 g2 = imfilter(f2,w,'replicate');  11 figure(3),imshow(g2,[]);       %同样用w滤波器进行滤波12 13 g = f2 - g2;14 figure(4),imshow(g);
拉普拉斯滤波器

执行结果如下:

 

手工指定的滤波器有时候会出现好效果:

eg:

1 clear;clc; 2 close all; 3 f = imread('test.tif'); 4 w4 = fspecial('laplacian',0 );  5 w8 = [1,1,1;1,-8,1;1,1,1]; 6 f = im2double(f); 7 g4 = f - imfilter(f,w4,'replicate'); 8 g8 = f - imfilter(f,w8,'replicate'); 9 imshow(f)10 figure,imshow(g4);11 figure,imshow(g8);
View Code

执行结果为:第一张是原图,显然第三张的滤波效果比第二张好

4.非线性空间滤波器

medfilt2()函数课用来进行中值滤波:

1 clear;clc; 2 close all; 3 f = imread('test.tif'); 4 figure,imshow(f); 5 fn = imnoise(f,'salt & pepper',0.2 ); 6 figure,imshow(fn); 7  8 gm = medfilt2(fn); 9 figure,imshow(gm);10 11 gms = medfilt2(fn,'symmetric');12 figure,imshow(gms);
medfilt2函数中值滤波

执行结果为:   第一张为原图,第二张是加上盐椒噪声之后的图,第三张是使用medfilt2()进行中值滤波之后的图,第四张是为了消除第三张中边缘部分的黑边而加上'symmetric'之后的效果图。

最后总括一下:1.均值滤波可以去掉突然变化的点噪声,从而滤除一定的噪声,但是会有一定程度的模糊。

       中值滤波容易去除一些孤立的点、线噪声,同时保持图像的边缘。

          中值滤波的公式为:

 2.假设一副数字图像上带有随机加性噪声,请设计一个方案用例判断噪声模型:在图像的平坦区域取一小块图像做直方图,与已有的噪声模型作对比。

 

转载于:https://www.cnblogs.com/liugl7/p/5294864.html

你可能感兴趣的文章
新手算法学习之路----二叉树(在一个二叉查找树中插入一个节点)
查看>>
autopep8
查看>>
GIT在Linux上的安装和使用简介
查看>>
java 类型转型
查看>>
基于C#编程语言的Mysql常用操作
查看>>
【转】Java反射 之 反射基础
查看>>
mysql数据库备份和还原的常用命令
查看>>
s3c2440实验---定时器
查看>>
HBase配置性能调优(转)
查看>>
MyEclipse10安装SVN插件
查看>>
[转]: 视图和表的区别和联系
查看>>
Regular Experssion
查看>>
python中的字符编码
查看>>
图论例题1——NOIP2015信息传递
查看>>
uCOS-II中的任务切换-图解多种任务调度时机与问题
查看>>
CocoaPods的安装和使用那些事(Xcode 7.2,iOS 9.2,Swift)
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
UseIIS
查看>>
为什么int型最大的数是2147483647
查看>>