数字图像处理 空域滤波 实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.将模板在图中漫游,并将模板中心与图中某个象素位置重合;
2.读取模板下各对应象素的灰度值;
3.将这些灰度值从小到大排成一列;
4.找出这些值中排在中间的1个;
5.将这个中间值赋给对应模板中心位置的象素。
非线性中值滤波步骤
对图象添加胡椒盐噪声(salt&pepper),然后分别用前面的均值滤波器和中值滤波器medfilt2( )进行去噪声处理,并给出比较结果。
一般的模板为3×3或5×5大小,其权值分布如下图:
若使用3×3模板,则计算公式如下:
g(x,y)={f(x-1,y-1)+f(x-1,y+1)+f(x+1,y-1)+f(x+1,y+1)+[f(x-1,y)+f(x,y-1)+f(x+1,y)+f(x,y+1)]*2+f(x,y)*4}/16;
其中,f(x,y)为图像中(x,y)点的灰度值,g(x,y)为该点经过高斯滤波后的值。
用mesh函数直观观察模板
h1=fspecial('gaussian',100,3);
[x y]=meshgrid(1:100);
mesh(x,y,h1);
h2=fspecial('gaussian',100,10);
figure
mesh(x,y,h2)

中值(median)滤波器是非线性滤波器的一种,它工作原理如下:
subplot(1,2,1)
imshow(x)
subplot(1,2,2)
imshow(y)
Canny算子
Help edge
‘canny’、sobel、Prewitt、LOG等
Canny边缘检测算子是John F. Canny于1986年开发出来的一个多级边缘检测算法。
Sobel算子主要用作边缘检测。在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量
Prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到
极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用。其原理是在图像空间利用两个方向模板与图
像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。
四、
本次实验重点增强了一些关于滤波的认识,对于滤波器的用法也有了入门,对各种滤波器的性能特性有了更深的了解。感谢老师给我们带来了一次生动有趣的实验课。
%h=fspecial(‘average’);
h=fspecial('average',[7,7]);
y=imfilter(x,h);
figure(1);
imshow(x)
figure(2);
imshow(y)
来自百度文库原图:
处理效果:
Gaussian平滑
改变fspecial( )的参数为高斯函数,再进行同样的平滑处理,观察其结果。
subplot(2,2,3)
imshow(x)
subplot(2,2,4)
imshow(y1)
椒盐噪声大小是0.02,左侧两图是原图,右上是中值滤波,右下是均值滤波
椒盐噪声大小是0.10,左侧两图是原图,右上是中值滤波,右下是均值滤波
发现中值滤波对图像边缘的噪声无能为力,而均值滤波则可以较好地去除边缘噪声。
imshow(x)
subplot(1,2,2)
imshow(y)
sobel算子
索贝尔(sobel)算子h1=[ -1 0 1;-2 0 2;-1 0 1;]
h2=[ 1 2 1; 0 0 0;-1 -2 -1;]
分别使用以上算子对图象进行处理可以得到图象的边缘。
x=imread('cameraman.tif');
数字图像处理
一、
•了解空域滤波的方法;
•掌握几种模板的基本原理。
二、实验内容
•使用函数fspecial( )生成几种特定的模板;
•使用函数imfilter( )配合模板对图象数据进行二维卷积;
•比较各种滤波器的效果。
三、实验步骤及结果

1.用h=fspecial(‘average’)得到的h为3×3的邻域平均模板,然后用h进行平滑处理。
x=imread(‘cameraman.tif’);
h=fspecial(‘average’);
%h=fspecial(‘average’,[7,7]);
y=imfilter(x,h);
figure(1);
imshow(x)
figure(2);
imshow(y)
原图:
滤波效果:
2.改变模板大小重试
x=imread('cameraman.tif');
中值滤波和均值滤波代码:
x=imread('eight.tif');
h=imnoise(x,'salt & pepper',0.02);%改变噪声的大小试一试?
y=medfilt2(h);
subplot(2,2,1)
imshow(x)
subplot(2,2,2)
imshow(y)
y1=fspecial(‘average’);
x=imread(‘cameraman.tif’);
h=fspecial(‘gaussian’)
//3×3的邻域平均模板(7×7的邻域平均模板h=fspecial(‘gaussian’,[7,7]))
y=imfilter(x,h);
实际程序:
x=imread('cameraman.tif');
h=fspecial('gaussian')
模板大小为[11,11],左为原图,右为处理后效果
改变模板大小为[7,7]、[9,9]、[11,11],观察实验得到的结构有何变化?
结果:高斯模板对结果影响较小,为什么?
答:简单地说,这是由于高斯滤波中越靠近中心点的点的权重越大,在很大程度上减弱了较远点的干扰,所以即使模版大小较大,其效果仍远远好过“不知亲疏远近变化”的邻域平均模板。
h1=[ -1 0 1; -2 0 2;-1 0 1;]
y=imfilter(x,h);
subplot(1,2,1)
imshow(x)
subplot(1,2,2)
imshow(y)
x=imread('cameraman.tif');
h2=[ 1 2 1; 0 0 0;-1 -2 -1;]
y=imfilter(x,h2);
具体地说,
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。
通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
subplot(1,2,1)
imshow(x)
subplot(1,2,2)
imshow(y)
也可以fspecial('laplacian')函数得到锐化模板;
代码:
x=imread('cameraman.tif');
h= fspecial('laplacian')
y=imfilter(x,h);
subplot(1,2,1)
对图像的清晰度,只能说差别不大,半斤八两,都勉强及格吧。

线性锐化滤波器的模板为h=[ -1 -1 -1; -1 8 -1;-1 -1 -1;]
用该模板对图象进行锐化处理;
代码:
x=imread('cameraman.tif');
h=[ -1 -1 -1; -1 8 -1; -1 -1 -1]
y=imfilter(x,h);
%%3×3的邻域平均模板(7×7的邻域平均模板h=fspecial(‘gaussian’,[7,7]))
y=imfilter(x,h);
subplot(121);
imshow(x);
subplot(122);
imshow(y);
模板大小为[3,3],左为原图,右为处理后效果
模板大小为[7,7],左为原图,右为处理后效果
相关文档
最新文档