数字图像处理实验指导书zqd.docx

上传人:b****5 文档编号:3961786 上传时间:2022-11-26 格式:DOCX 页数:13 大小:37.13KB
下载 相关 举报
数字图像处理实验指导书zqd.docx_第1页
第1页 / 共13页
数字图像处理实验指导书zqd.docx_第2页
第2页 / 共13页
数字图像处理实验指导书zqd.docx_第3页
第3页 / 共13页
数字图像处理实验指导书zqd.docx_第4页
第4页 / 共13页
数字图像处理实验指导书zqd.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数字图像处理实验指导书zqd.docx

《数字图像处理实验指导书zqd.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验指导书zqd.docx(13页珍藏版)》请在冰豆网上搜索。

数字图像处理实验指导书zqd.docx

数字图像处理实验指导书zqd

 

《数字图像处理》

实验指导书

张启东

 

实验一MATLAB图像及其操作

一、实验目的

1、熟练使用各种常用MATLAB命令

2、了解MATLAB图像文件格式;

3、了解MATLAB图像类型;

4、了解MATLAB图像文件的读写;

5、了解MATLAB标准的图像显示技术;

二、实验原理及内容

首先,数字图像以一定的格式存放在计算机的存储器中(如磁盘),常见的格式有BMP,TIF,PCX等等,因此我们要进行数字图像处理,需要完成的第一项工作就是把图像读到计算机的内存中,以便进行进一步的处理。

在Matlab中,函数imread()完成此项工作。

我们用下面一小段Matlab语句即可实现将图像“rice.tif”显示在一个图像窗口的左边,将其轮廓图显示在该窗口的右边。

I=imread('rice.tif');

subplot(1,2,1);

imshow(I)

subplot(1,2,2);

imcontour(I);

这里,imread(‘rice.tif’)将磁盘上的图像文件rice.tif读入内存变量I中,subplot(1,2,1)生成一个可以横向放置2幅图像的窗口,并设置下一显示位置在左边,imshow(I)显示图像I,subplot(1,2,2)准备下一图像的显示位置,imcontour(I)生成图像I的轮廓并显示在窗口的右边。

数字图像一般可分为二值图、灰度图和真彩图等几类。

我们再看下面一段程序:

bw=imread('text.tif');

bw2=imcomplement(bw);

subplot(1,2,1),imshow(bw)

subplot(1,2,2),imshow(bw2)

这里函数imcomplement(bw)完成对二值图像text.tif(bw)的求补运算,(即原来黑的变白的,原来白的变黑的。

各种常用MATLAB命令:

clc:

清理窗口内容

     clear:

清空变量

     cd:

进入当前目录

     cd('..'):

退出当前目录

     help,helpwin,helpdesk:

帮助

     who,whos:

显示变量情况

     imfinfo:

显示文件基本情况,用法:

imfinfo('文件名')

     save,load:

存贮,读取文件(变量)

     pwd:

显示当前工作目录

     mkdir('文件名'):

新建文件夹

 

     zeros(m,n):

生成m行n列零矩阵

     ones(m,n):

生成m行n列1矩阵

     eye(m,m):

生成m阶单位矩阵

     rand(m,n):

生成m行n列随机均匀分布矩阵

     randn(m,n):

生成m行n列随机正态分布矩阵

     

     length(a):

向量长度

     [m,n]=size(A):

求取矩阵行列

     norm(A,2):

矩阵二范数,最大奇异值

     norm(A,'fro'):

矩阵F范数

     trace(A):

矩阵迹

     sum:

求和

     prod(a):

向量所有元素求积

     cumsum(a):

向量累和

     cumprod:

向量累积

     mean(a):

求平均值

     min(a),max(a):

求向量最大最小

     min(a(:

)),max(a(:

)):

求矩阵中最大最小值

     abs(a):

绝对值、模、频谱

     var(a):

方差

     std(a):

标准差

     sort(a):

向量升序排序

     diag(A):

对角元素

     det(A):

行列式

     rank(A):

 

     gcd():

最大公因子

     lcm():

最小公倍数

     mod(m,n),rem(m,n):

求余数

     fix(x):

往0方向取整

     floor(x):

往负方向取整

     ceil(x):

往正方向取整

     round(x):

四舍五入取整

     conj(z):

复共轭

     real(z),imag(a):

实(虚)部

 

     imread:

读取数字图像为矩阵

     double(A):

转换成双精度

     uint8(A):

转换成8位表示

     imwrite:

存取或者压缩文件

     rgb2gray:

彩色转换成灰度

     im2bw:

灰度转换成二值

     imshow:

显示图像

     subplot:

按阵列显示

     figure:

显示图像,且保留前面图像

     stem:

用竖画线显示向量

     imcrop:

剪切图像

     imresize:

重新设定图像大小

     imrotate:

旋转图像

     imnoise:

加噪

 

     svd:

奇异值分解

     gsvd:

广义奇异值分解

     fft:

一维傅立叶变换

     fft2:

二维傅立叶变换

     fftshift:

交换傅立叶变换的1,3象限和2,4象限

     dwt(idwt):

小波变换(小波逆变换)

     dct:

余弦变换

     dualtree:

二元树复小波变换

 

实验二灰度图像直方图统计实验

一、实验目的

1、了解空域变换增强变换及实现;

2、掌握直方图处理方法

二、实验原理及内容

1、直方图均衡化处理。

这里有一幅图像,其动态范围较小,而且较暗,反映在直方图上,直方图所占据的灰度值范围比较窄,而且集中在低灰度值一边。

为了使图像更清晰,我们采用直方图均衡化的方法来增加图像灰度动态范围,增强对比度。

在MATLAB中,可以直接调用J=histeq(I,n)函数来完成这项工作,其中I是原始图像矩阵,J是变换后所得的图像矩阵;用户可以指定均衡化

%后的灰度级数n,默认值为64。

I=imread('tire.tif');

J=histeq(I);

imshow(I)

figure,imshow(J)

figure,imhist(I,64)

figure,imhist(J,64)

2、直方图规定化处理。

I=imread('tire.tif');

hgram=0:

255

J=histeq(I,hgram);

imshow(I)

figure,imshow(J)

figure,imhist(I,64)

figure,imhist(J,64)

实验三空域图像增强实验

一、实验目的

1、了解空域滤波增强变换及实现;

二、实验原理及内容

1、线性平滑滤波器处理。

常用均值滤波器、维纳滤波器、高斯滤波器。

%以saturn.tif为例,加入椒盐噪声,并在MATLAB中调用B=filter2(h,A)实现均值过滤器

I=imread('saturn.tif');

J=imnoise(I,'salt&pepper',0.02);

imshow(I)

figure,imshow(J)

K1=filter2(fspecial('average',3),J)/255;

K2=filter2(fspecial('average',5),J)/255;

K3=filter2(fspecial('average',7),J)/255;

figure,imshow(K1)

figure,imshow(K2)

figure,imshow(K3)

实现维纳滤波器

I=imread('saturn.tif');

J=imnoise(I,'gaussian',0,0.005);

K1=wiener2(J,[5,5]);

figure,imshow(K1)

实现高斯滤波器

I=imread('saturn.tif');

J=imnoise(I,'gaussian',0,0.005);

figure,imshow(J)

h=fspecial('gaussian');

K=filter2(h,J)/255;

figure,imshow(K)

2、非线性平滑滤波器处理。

常用中值滤波器

%下面仍以saturn.tif为例,加入椒盐噪声,并采用中值过滤器

I=imread('saturn.tif');

J=imnoise(I,'salt&pepper',0.02);

K1=medfilt2(J,[3,3]);

figure,imshow(K1)

3、线性锐化滤波器处理。

常用拉普拉斯算子。

I=imread('saturn.tif');

h=fspecial('laplacian');

I2=filter2(h,J);

imshow(I)

figure,imshow(I2)

4、非线性锐化滤波器处理。

常用sobel算子、prewitt算子等。

I1=imread('blood1.tif');

figure,imshow(I1)

h1=fspecial('sobel');

I2=filter2(h1,I1);

figure,imshow(I2)

I3=conv2(I1,h1);

figure,imshow(I3)

h2=fspecial('prewitt');

I4=filter2(h2,I1);

figure,imshow(I4)

h3=fspecial('log');

I5=filter2(h3,I1);

figure,imshow(I5)

实验四频域图像增强实验

一、实验目的

1、了解低通滤波;

2、了解高通通滤波;

二、实验原理及内容

1、一般来说,图像的边缘和噪声都对应于傅立叶变换中的高频部分,所以能够让低频信息畅通无阻而同时滤掉高频分量的低通滤波器能够平滑图像,去除噪声。

常用的几种频域低通滤波器有理想低通滤波器、巴特沃斯低通滤波器、指数低通滤波器。

巴特沃斯低通滤波器(Butterworth)实现

I1=imread('Saturn.tif');

figure,imshow(I1)

I2=imnoise(I1,'salt&pepper');

figure,imshow(I2)

f=double(I2);

%傅里叶变换

g=fft2(f);

%转换数据矩阵

g=fftshift(g);

[N1,N2]=size(g);

n=2;

d0=50;

n1=fix(N1/2);

n2=fix(N2/2);

fori=1:

N1

forj=1:

N2

d=sqrt((i-n1)^2+(j-n2)^2);

%计算Butterworth低通转换函数

h=1/(1+0.414*(d/d0)^(2*n));

result(i,j)=h*g(i,j);

end

end

result=ifftshift(result);

X2=ifft2(result);

X3=uint8(real(X2));

figure,imshow(X3)`

2、由于图像中灰度发生骤变的部分与其频谱的高频分量相对应,所以采用高通滤波器衰减或抑制低频分量,使高频分量畅通并能够对图像进行锐化处理。

常用的高通滤波器有理想高通滤波器、巴持沃斯高通滤波器、指数高通滤波器.

巴特沃斯高通滤波器(Butterworth)实现

I1=imread('blood1.tif');

figure,imshow(I1)

f=double(I1);

g=fft2(f);%傅里叶变换

g=fftshift(g);%转换数据矩阵

[N1,N2]=size(g);

n=2;

d0=5;

n1=fix(N1/2);

n2=fix(N2/2);

fori=1:

N1

forj=1:

N2

d=sqrt((i-n1)^2+(j-n2)^2);

ifd==0

h=0;

else

h=1/(1+(d0/d)^(2*n));

end

result(i,j)=h*g(i,j);

end

end

result=ifftshift(result);

X2=ifft2(result);

X3=uint8(real(X2));

figure,imshow(X3)

实验五边缘检测

一、实验目的

1、对图像进行边缘检测;

2、了解常用的边缘检测算子

二、实验原理及内容

1、边缘检测的基本原理及处理函数

常用的边缘检测算于有Robert算子、Sobel算了、Prewitt以算子、LOG算子和Canny算子,以下分别进行介绍。

(1)Robert算子

Robert算于是一种利用局部差分算子寻找边缘的算子,其模板如图1所示。

Robert算子对具有陡峭的低噪声的图像效果较好。

图1Robert算子

在MATLAB中可以由edge函数实现,语法路式如下:

Bw=edge(I.'robert')

Bw=edge(I,'robert',thresh)

[BW,thresh]=edge(I,'roberts',…)

BW=edge(I,'robert')自动选择阈值使用Robert算子进行边缘检测。

BW=edge(I,'robert',thresh)根据所指定的敏感度阀值thresh用Robert算子进行边缘检测,它忽略了所有小于阀值的边缘。

当thresh为空([])时,自动选择阈值。

[BW,thresh]=edge(I,'robert',…)返回阀值。

edge函数对灰度图像I进行边缘检测,返回与I同样大的二值图像BW,其中1表示I中的边缘,0表非边缘,I是uint8型、uint16型.或double型,BW是uint8型的。

(2)Sobel算子

Sobel算子的两个卷积计算如图2所示.图像中的每个点部用这两个核做卷积,第一个核对垂直边缘响应最大,第二个核对水平边缘响应最大。

两个卷积的最大值作为该点的输出值,运算结果是一幅边缘幅度图像。

sobel算子对灰度渐变和噪声较多的图像处理得较好。

图2Sobel算子

edge函数实现的语法格式如下

Bw=edge(I,'sobel')

BW=edge(I,'sobel',thresh)

Bw=edge(I,'sobel',thresh,direction)

[BW,thresh]=edge(I,'sobel'…)

Bw=edge(I,'sobel')自动选择阀值用Sobel算子进行边缘检测:

BW=edge(I,'sobel',thresh)根据所指定的敏感度阀值thresh,用Sobel算子进行边缘检测,它忽略了所有小于阀值的边缘。

当thresh为空时,自动选择阀值。

Bw=edge(I,'sobel',thresh,direction)根据所指定的敏感度阔值thresh,在所指定的方向direction上,用Sobe]算子进行边缘枪测。

direction可取的字符串值为'horizontal'(水平方向)'vertical'(垂直方向)或'both'(两个方向)。

[BW,thresh=edge(I,'sobel'…)返回阀值。

(3)Prewitt算子

Prewitt算子的两个卷积计算核如图3所示,与使用Sobel算子的方法一样,图像中的每个点部用这两个核做卷积.取最大值作为输出Prewitt算子也产生一幅边缘幅度图像,也是对灰度渐变和噪声较多的图像处理得较办。

图3Prewitt算子

edge函数实现的语法格式如下:

BW=edge(I,'prewitt')

BW=edge(I,'prewitt',thresh)

BW=edge(I,'prewitt',thresh,direction)

[BW,thresh]=edge(I,'prewitt',…)

BW=edge(I,'prewitt')白动选择阈值用Prewitt算子进行边缘检测。

BW=edge(I,'prewitt',thresh)根据所指定的敏感度阈值thresh,用Prewitt算子进行边缘检测,忽略了所有小于阈值的边缘。

当thresh为空([])时,自动选择阈值。

BW=edge(I,'prewitt',thresh,direction)根据所指定的敏感度阈值thresh,在所指定的方向direction上,用prewitt算于进行边缘检测。

direction取的字符串值'horizontal',(水平方向)、'vertical'(垂直方向)或both(两个方向)。

[BW,thresh]=edge(I,'prewitt',…)返问阈值。

(4)LOG算子

拉普拉斯算于的卷积核如图4所示,它是一个二阶算子,将在边缘处产生一个陡峭的零交叉。

拉普拉斯算子是一个线性的、移不变的算子,它的传递函数在频域空间的原点是零,因此经拉普拉斯滤波过的图像具有零平均灰度。

LOG算子先用高斯低通滤波器将图像进行预先平滑,然后用拉普拉斯算子找出图像中的陡峭边缘,最后用零灰度值进行二值化产生闭合的、连通的轮廓,消除了所有内部点。

图4LOG算子

edge函数实现的语法格式如下:

BW=edge(I,'log')

BW=edge(I,'log',thresh)

BW=ed8e(I,'log',thresh,sigma)

[BW,threshold]=edge(I,'log',…)

BW=edge(I,'log')自动选择阐值用LoG算子进行边缘检测。

BW=edge(I,'log',thresh)根据所指定的敏感度阀值thresh,用LOG算子进行边缘检测,它忽略了所有小干阈值的边缘。

当thresh为空时,自动选样阈值。

当指定thresh为0时,输出图像具有闭合的轮廓,因为其中包含了输入图象总的所有零交叉点。

BW=edge(I,'log',thresh,sigma)根据所指定敏感度阈值thresh和标准偏差sigma.用LoG算子进行边缘检测,默认时sigma等于2,滤波器是n×n维的,其中n=ceil(sigma×3)×2+1

[BW,threshold]=edge(I,'log',…)返回阀值。

(5)Canny算子

canny算了检测边缘的方法是寻找图像梯度的局部极大值,梯度是用高斯滤波器的导数计算的。

canny方法使用两个阈值来分别检测强边缘和弱边缘,而且仅当弱边缘与强边缘相连的,弱边缘才会包含在输出中,因此,此方法不容易受噪声的干扰,能够检测到真正的弱边缘。

edge函数实现的语法格式如下:

BW=edge(I,'canny')

BW=edgc(I,'canny',thresh)

BW=edgc(I,'canny',thresh,sigma)

[BW,threshold]=edge(I,'canny',…)

BW=edge(I,'canny')自动选择阈值用Canny算子进行边缘检测。

BW=edge(I,'canny',thresh)根据所指定的敏感度阀值thresh,用canny算了进行边缘检测.thresh是—个含两个元素的大量,第一个元素是低阈值,第二个f元素是高阈值;如果只给thresh指定—个值,则此值作为高阈值,而0.4×thresh作为低阈值:

当thresh为空时.自动选择低阈值和高阈位。

BW=edgc(I,'canny',thresh,sigma)根据所指定的敏感度阈值BW=edgc(I,'canny',thresh,sigma)和标准偏差sigma,用canny算子进行边缘检测,默认时sigma等于1.滤波器的尺寸sigma根据自动选择[BW,threshold]=edge(I,'canny',…)返回含两个元素的阈值矢量。

(6)零交叉方法

零交叉方法先用指定的滤波器对图像进行滤波,然后寻找零交叉点作为边缘。

edge函数实现的语法格式如下:

BW=edge(I,'zerocross',thresh,h)

[BW,thresh]=edge(I,'zerocross',…)

BW=edge(I,'zerocross',thresh,h)根据所指定购敏感度阈值thresh利滤波器h,用零交叉方法进行边缘检测。

当thresh为空〔[])时,自动选择阈值;当指定thresh为0时,输出图像具有闭合的轮廓,因为其中包含了输入图像中的所有零交叉点。

[BW,thresh]=edge(I,'zerocross',…)返回阈值。

2、各种边缘检测算子的效果比较

I=imread('rice.tif');

BW1=edge(I,'sobel');

BW2=edge(I,'roberts');

BW3=edge(I,'prewitt');

BW4=edge(I,'log');

BW5=edge(I,'canny');

h=fspecial(‘gaussian’,5);

BW6=edge(I,'zerocross',[],h);

subplot(2,3,1),imshow(BW1)

subplot(2,3,2),imshow(BW2)

subplot(2,3,3),imshow(BW3)

subplot(2,3,4),imshow(BW4)

subplot(2,3,5),imshow(BW5)

subplot(2,3,6),imshow(BW6)

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1