当前位置:文档之家› 图像处理,图像滤波,边缘处理

图像处理,图像滤波,边缘处理

课程设计姓名:学号:学院:专业:课目:数字图像处理图像处理实验部分此次实验在MATLAB中实现:打开MATLAB,“file”—“new”—“script”,则创建新文件即完成,在新建的“Editor-Untitled”即可编程。

下面简单介绍此次实验中主要应用到的函数:1、imread该函数用于读入各种图像文件。

如:a=imread(‘rice.tif’),其中图像rice.tif在MATLAB安装目录“matlab”-“toolbox”-“images”-“imdemos”下,若图片不在该目录下,则读入图像格式如下:a=imread(‘D:\Demo4.bmp’)。

2、imshow该函数用于图像文件得显示。

如a=imshow(‘rice.tif’)。

3、rgb2gray该函数用于将彩色转为黑白图像。

如:I=rgb2gray[I]。

4、subplot该函数一般格式为:subplot(m,n,p),用于在同一窗口中绘制多个子图,把图形窗口分割为m*n个子图,然后再第P个小窗口中创建坐标轴。

5、fspecial利用该函数可生成滤波时所用的模板。

其调用格式如下:(1)h=fspecial(type)(2)h=fspecial(type,parameters)参数type指定滤波器的类型,parameters是与滤波器类型有关的具体参数。

6、medfilt2该函数用于实现中值滤波。

其调用格式如下:B= medfilt2(A,[m,n]):对图像A执行二维中值滤波。

每个输出像素为m*n领域的中值。

在图像边界用0填充,所以边缘的中值为[m,n]/2,区域的中值,可能失真。

7、imfilter该函数对任意类型数组或多维图像进行滤波。

调用法如下:B=imfilter(A,H)B=imfilter(A,H,option1,option2,…)或g=imfilter(f,w,filtering_mode,boundary_options,size_options)其中,f为输入图像,w为滤波掩膜,g为滤波后图像。

filtering_mode用于指定在滤波过程中使用“相关”还是“卷积”。

boundary_options用于处理的边界充零问题,边界的大小由滤波器的大小确定。

一、图像滤波:1、均值滤波基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度值g(x,y)。

3*3,5*5,7*7窗口下均值滤波实验程序如下:clear allI=imread('D:\A.jpg');J=imnoise(I,'gaussian',0,0.02); %加入均值为0,差为0.01的高斯噪声w1=fspecial('average',[3 3]); %% 先定义3*3窗口的滤波器w2=fspecial('average',[5 5]); %% 先定义5*5窗口的滤波器w3=fspecial('average',[7 7]); %% 先定义7*7窗口的滤波器a=imfilter(J,w1,'replicate'); %%让图像通过滤波器b=imfilter(J,w2,'replicate');c=imfilter(J,w3,'replicate');subplot(2,3,1);imshow(I);title('原始图像');subplot(2,3,2);imshow(J);title('加入高斯噪声后图像');subplot(2,3,3);imshow(a);title('3*3均值滤波图像');subplot(2,3,4);imshow(b);title('5*5均值滤波图像');subplot(2,3,5);imshow(c);title('7*7均值滤波图像'); 运行结果:MATLAB中实现的均值滤波结果(包括3*3,5*5,7*7窗口)2、中值滤波中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让围的像素值接近的真实值,从而消除孤立的噪声点。

法是去某种结构的二维滑动模板,将板像素按照像素值的大小进行排序,生成单调上升的二维数据序列,并取出序列中位于中间位置的灰度作为中心像素的灰度。

对一个滑动窗口的诸像素灰度值排序,用中值代替窗口中心像素的原来灰度值(非线性)。

中值滤波法能有效削弱椒盐噪声,且比邻域、超限像素平均法更有效3*3,5*5,7*7中值滤波实验程序:clear allI=imread('D:\shu.bmp');I=rgb2gray(I);J=imnoise(I,'salt& pepper',0.02);subplot(2,3,1);imshow(I);title('原图像');subplot(2,3,2);imshow(J);title('添加椒盐噪声图像');k1=medfilt2(J); %进行3*3模板中值滤波k2=medfilt2(J,[5,5]); %进行5*5模板中值滤波k3=medfilt2(J,[7,7]); %进行7*7模板中值滤波subplot(2,3,3);imshow(k1);title('3*3模板中值滤波');subplot(2,3,4);imshow(k2);title('5*5模板中值滤波');subplot(2,3,5);imshow(k3);title('7*7模板中值滤波');结果:MATLAB中实现的中值滤波结果(包括3*3,5*5,7*7窗口)3、试验比较:由上面两种滤波的结果可以得出以下结论:均值滤波算法简单,计算速度快,平滑后噪声差为处理前的1/m。

但是图像产生模糊,特别在边缘和细节处;而且邻域越大,模糊程度越重,由图可以看出,即3*3模板去噪能力没有5*5模板强,但5*5模板的处理室图像更模糊。

与均值滤波相比,中值滤波对脉冲干扰及椒盐噪声的抑制效果好,在抑制随机噪声的同时能有效保护边缘少受模糊。

且运算速度快,可硬化,便于实时处理,但是对点、线等细节较多的图像却不太合适。

由图可以看出,在三个窗口中实现的中值滤波,7*7窗口滤波后的图像最模糊。

二、边缘检测1. Roberts算子Roberts算子是最古老的算子之一,是一种交差差分算子。

由于它只使用当前像素的2*2邻域,是最简单的梯度算子,所以计算非常简单。

Roberts算子计算时利用的像素数一共有4个,可以用模板对应4个像素与模板相应的元素相乘相加得到。

Roberts算子边缘定位准,主要缺点是其对噪声的高度敏感性,原因在于仅使用了很少几个像素来近似梯度。

实用于边缘明显而且噪声较少的图像分割。

2、Sobel的原理:Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。

对噪声具有平滑作用,提供较为精确的边缘向信息,边缘定位精度不够高。

当对精度要求不是很高时,是一种较为常用的边缘检测法。

在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值。

在图像的任一点使用此算子,将会产生对应的梯度矢量或是其法矢量.该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。

在边沿检测中,常用的一种模板是Sobel算子。

由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数,简单有效,因此应用广泛。

美中不足的是,Sobel算子并没有将图像的主体与背景格地区分开来,换言之就是Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。

在观测一幅图像的时候,我们往往首先注意的是图像与背景不同的部分,正是这个部分将主体突出显示,基于该理论,我们给出了下面阈值化轮廓提取算法,该算法已在数学上证明当像素点满足正态分布时所求解是最优的。

3、Laplacian算子这是二阶微分算子,对噪声比较敏感,所以,图像一般先经过平滑处理,因为平滑处理也是用模板进行的,所以,通常的分割算法都是把Laplacian算子和平滑算子结合起来生成一个新的模板。

Laplacian算子一般不以其原始形式用于边缘检测,因为其作为一个二阶导数,Laplacian算子对噪声具有无法接受的敏感性;同时其幅值产生算边缘,这是复杂的分割不希望有的结果;最后Laplacian算子不能检测边缘的向;所以Laplacian在分割中所起的作用包括:(1)利用它的零交叉性质进行边缘定位;(2)确定一个像素是在一条边缘暗的一面还是亮的一面;一般使用的是高斯型拉普拉斯算子(Laplacian of a Gaussian,LoG),由于二阶导数是线性运算,利用LoG卷积一幅图像与首先使用高斯型平滑函数卷积改图像,然后计算所得结果的拉普拉斯是一样的。

所以在LoG公式中使用高斯函数的目的就是对图像进行平滑处理,使用Laplacian算子的目的是提供一幅用零交叉确定边缘位置的图像;图像的平滑处理减少了噪声的影响并且它的主要作用还是抵消由Laplacian算子的二阶导数引起的逐渐增加的噪声影响。

4、实验程序:clear allI=imread('D:\Demo4.bmp');BW1=edge(I,'roberts');%采用roberts算子进行边缘检测BW2=edge(I,'sobel');%采用sobel算子进行边缘检测BW3=edge(I,'log');%采用log算子进行边缘检测subplot(2,2,1);imshow(I);title('原始图像');subplot(2,2,2);imshow(BW1);title('Roberts边缘检测');subplot(2,2,3);imshow(BW2);title('sobel边缘检测');subplot(2,2,4);imshow(BW3);title('log边缘检测')5、实验结果:6、算法比较:算子加法运算PN 乘法运算MNRoberts 3*N2 0Sobel 11*N2 2*N2从加法的角度来看,Roberts算子的运算速度较快,从乘法的角度看Laplacian算子的运算速度较快。

相关主题