数字图象处理实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理课程
实
验
报
告
班级
学号
姓名
实验一常用MATLAB图像处理命令
一、实验目的
1、熟悉并掌握MATLAB工具的使用;
2、实现图像的读取、显示、代数运算和简单变换。
二、实验环境
MATLAB 6.5以上版本、WIN XP或WIN2000计算机
三、常用函数
●读写图像文件
1、imread
imread函数用于读入各种图像文件,如:a=imread('e:\w01.tif')
2、imwrite
imwrite函数用于写入图像文件,如:imwrite(a,'e:\w02.tif',‟tif‟)
3、imfinfo
imfinfo函数用于读取图像文件的有关信息,如:imfinfo('e:\w01.tif')
●图像的显示
1、image
image函数是MATLAB提供的最原始的图像显示函数,如:
a=[1,2,3,4;4,5,6,7;8,9,10,11,12];
image(a);
2、imshow
imshow函数用于图像文件的显示,如:
i=imread('e:\w01.tif');
imshow(i);
title(…原图像‟)%加上图像标题
3、colorbar
colorbar函数用显示图像的颜色条,如:
i=imread('e:\w01.tif');
imshow(i);
colorbar;
4、figure
figure函数用于设定图像显示窗口,如:figure(1);/figure(2);
5、subplot
把图形窗口分成多个矩形部分,每个部分可以分别用来进行显示。
Subplot(m,n,p)分成m*n个小窗口,在第p个窗口中创建坐标轴为当前坐标轴,用于显示图形。
6 、plot
绘制二维图形
plot(y)
Plot(x,y)xy可以是向量、矩阵。
图像类型转换
1、rgb2gray
把真彩图像转换为灰度图像
i=rgb2gray(j)
2、im2bw
通过阈值化方法把图像转换为二值图像
I=im2bw(j,level)
Level表示灰度阈值,取值范围0~1(即0.n),表示阈值取自原图像灰度范围的n%
3、imresize
改变图像的大小
I=imresize(j,[m n])将图像j大小调整为m行n列
图像运算
1、imadd
两幅图像相加,要求同样大小,同种数据类型
Z=imadd(x,y)表示图像x+y
2、imsubtract
两幅图像相减,要求同样大小,同种数据类型
Z=imsubtract(x,y)表示图像x-y
3、immultiply
Z=immultiply(x,y)表示图像x*y
4、imdivide
Z=imdivide(x,y)表示图像x/y
四、实验内容
1、读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。
>> x=imread('e:\图片\1.jpg');
>> subplot(2,2,1);
>> y=imshow(x);
>> title('原图像');
>> subplot(2,2,2);
>> t=rgb2gray(x);
>> imshow(t);
>> title('灰度图像');
>> subplot(2,1,2);
>> m=im2bw(x,0.5);
>> imshow(m);
>> title('二值图像');
2、对两幅不同图像执行加、减、乘、除操作,在多个窗口内分别显示,注上文字标题。
>> x=imread('e:\图片\1.jpg');
>> y=imread('e:\图片\1F.jpg');
>> subplot(3,2,1);
>> imshow(x);
>> title('图像x');
>> subplot(3,2,2);
>> imshow(y);
>> title('图像y');
>> subplot(3,2,3);
>> z=imadd(x,y);
>> imshow(z);
>> title('x+y');
>> subplot(3,2,4);
>> t=imsubtract(x,y);
>> imshow(t);
>> title('x-y');
>> subplot(3,2,5);
>> m=immultiply(x,y);
>> imshow(m);
>> title('x*y');
>> subplot(3,2,6);
>> n=imdivide(x,y);
>> imshow(n);
>> title('x/y');
3、对一幅图像进行灰度变化,实现图像变亮、变暗和负片效果,在多个窗口内分别显示,注上文字标题。
>> x=imread('e:\图片\4.jpg');
>> subplot(2,2,1);
>> imshow(x);
>> title('原图像');
>> subplot(2,2,2);
>> y=imadjust(x,[0.1,0.2],[0,1]);
>> imshow(y);
>> title('原图像变亮');
>> subplot(2,2,3);
>> z=imadjust(x,[0.8,0.9],[]);
>> imshow(z);
>> title('变暗');
>> subplot(2,2,4);
>> c=255-x;
>> imshow(c);
>> title('负片');
4、熟悉数字图像处理常用函数的使用,调出帮助文档查看其各种不同用法。
方法:选择函数(函数所在区变暗),点右键弹出菜单,选择“Help on Selection”
五、实验总结
分析图像的代数运算结果,分别陈述图像的加、减、乘、除运算可能的应用领域。
实验二图像基本操作
一、实验目的
1、熟悉及掌握图像的采样原理,实现图像的采样过程,进行图像的灰度转换。
2、理解直方图的概念及应用,实现图像直方图的显示,及通过直方图均衡和直方图规定化方法对图像进行修正。
二、实验环境
MATLAB 6.5以上版本、WIN XP或WIN2000计算机
三、相关函数
图像的增强
1、直方图
imhist函数用于数字图像的直方图计算或显示,
imhist(I, n)计算和显示图像I的直方图,n为指定的灰度级数目,默认为256。
如果I是二值图像,那么n仅有两个值。
[hgram,x] = imhist(...)返回直方图数据向量hgram,相应的色彩值向量x。
如:
i=imread('e:\w01.tif');
imhist(i);
2 、直方图均衡化
histeq函数用于数字图像的直方图均衡化,
J = histeq(I, n) 均衡化后的级数n,缺省值为64。
J = histeq(I, hgram) "直方图规定化",即将原是图象I 的直方图变换成用户指定的向量hgram (即指定另一幅图像的直方图数据向量)。
如:
i=imread('e:\w01.tif');
j=histeq(i,N);对图像i执行均衡化,得到具有N个灰度级的灰度图像j,N 缺省值为64
3、灰度调整
imadjust函数用于数字图像的灰度或颜色调整,
J = imadjust(I) 将灰度图像I 中的亮度值映射到J 中的新值并使1%的数据是在低高强度和饱和,这增加了输出图像J 的对比度值。
J = imadjust(I,[low_in; high_in],[low_out; high_out])
将图像I中的亮度值映射到J中的新值,即将low_in至high_in之间的值映射到low_out至high_out之间的值。
low_in 以下与high_in 以上的值被剪切掉了,也就是说,low_in 以下的值映射到low_out,high_in 以上的值映射到high_out。
它们都可以使用空的矩阵[],默认值是[0 1]。
如:
i=imread('e:\w01.tif');
j=imadjust(i,[0.3,0.7],[]);将图像i转换为j,使灰度值从0.3~0.7与缺省值0~1相匹配
运算函数
1、Zeros生成全0数组或矩阵
如B = zeros(m,n) or B = zeros([m n]) 返回一个m*n 全0矩阵
2、取整函数
floor最小取整函数
round四舍五入取整函数
ceil最大取整函数
如a = [-1.9, -0.2, 3.4, 5.6, 7.0, 2.4+3.6i]
I=round(a)
I =[ -2 0 3 6 7 2+ 4i]
四、实验内容
1、调试运行8倍减采样程序,分析程序,对每条语句给出注释,并显示最终执行结果。
a=imread(…e:\i_lena.JPG‟);
b=rgb2gray(a);
[wid,hei]=size(b);
quartimg=zeros(wid/2+1,hei/2+1);
i1=1;
j1=1;
for i=1:2:wid
for j=1:2:hei
quartimg(i1,j1)=b(i,j) ;
j1=j1+1;
end
i1=i1+1;
j1=1;
end
figure
imshow(uint8(quartimg))2、显示一幅灰度图像a,改变图像亮度使其整体变暗得到图像b,显示两幅图像的直方图。
3、对图像b进行直方图均衡化,显示结果图像和对应直方图。
4、读入图像c,执行直方图规定化,使图像a的灰度分布与c大致相同,显示变换后图像及对应直方图。
实验三图像变换
一、实验目的
1、熟悉及掌握图像的变换原理及性质,实现图像的傅里叶变换。
二、实验环境
MATLAB 6.5以上版本、WIN XP或WIN2000计算机
三、相关函数
●图像的空间域操作
1、imrotate
用于图像旋转
用法:
B = imrotate(A,angle,method)
将图像A(图像的数据矩阵)绕图像的中心点旋转angle度,正数表示逆时针旋转,负数表示顺时针旋转。
返回旋转后的图像矩阵。
method参数表是插值算法,Method省略默认采用最近邻线性插值,旋转后的图像超出的部分填充0(黑色)。
method参数可以为下面这三个值:
'nearest':最邻近线性插值
'bilinear':双线性插值
'bicubic':双三次插值(或叫做双立方插值)
如:
i=imread('e:\w01.tif');
j=imrotate(i,45,‟bilinear‟); %图像采用双线性插值法逆时针旋转45度
●图像的变换
1、fft2
fft2函数用于数字图像的二维傅立叶变换,如:
i=imread('e:\w01.tif');
j=fft2(i);
由于MATLAB无法显示复数图像,因此变换后的结果还需进行求模运算,即调用abs函数。
之后常常还进行对数变换,即调用log函数,以减缓傅里叶谱的快速衰减,更好地显示高频信息。
2、ifft2
ifft2函数用于数字图像的二维傅立叶反变换,如:
i=imread('e:\w01.tif');
j=fft2(i);
k=ifft2(j);
3、fftshift
用于将变换后图像频谱中心从矩阵的原点移动到矩阵的中心
B=fftshift(i)
4、利用fft2计算二维卷积
利用fft2函数可以计算二维卷积,如:
a=[8,1,6;3,5,7;4,9,2];
b=[1,1,1;1,1,1;1,1,1];
a(8,8)=0;
b(8,8)=0;
c=ifft2(fft2(a).*fft2(b));
c=c(1:5,1:5);
利用conv2(二维卷积函数)校验, 如:
a=[8,1,6;3,5,7;4,9,2];
b=[1,1,1;1,1,1;1,1,1];
c=conv2(a,b);
四、实验内容
1、对一幅图像进行缩小,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系。
2、对一幅图像进行旋转,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与旋转后傅里叶频谱的对应关系。
实验四常用图像增强方法
一、实验目的
1、熟悉并掌握MATLAB图像处理工具箱的使用;
2、理解并掌握常用的图像的增强技术。
二、实验环境
MATLAB 6.5以上版本、WIN XP或WIN2000计算机
三、相关知识
1、imnoise
imnoise函数用于对图像生成模拟噪声,如:
i=imread('e:\w01.tif');
j=imnoise(i,'gaussian',0,0.02);模拟均值为0方差为0.02的高斯噪声,
j=imnoise(i,'salt & pepper', 0.04) 模拟叠加密度为0.04的椒盐噪声
2、fspecial
fspecial函数用于产生预定义滤波器,如:
h=fspecial('sobel');%sobel水平边缘增强滤波器
h=fspecial('gaussian');%高斯低通滤波器
h=fspecial('laplacian');%拉普拉斯滤波器
h=fspecial('log');%高斯拉普拉斯(LoG)滤波器
h=fspecial('average');%均值滤波器
3、基于卷积的图像滤波函数
imfilter函数,filter2函数,二维卷积conv2滤波,都可用于图像滤波,用法类似,如:
i=imread('e:\w01.tif');
h=[1,2,1;0,0,0;-1,-2,-1];%产生Sobel算子的水平方向模板
j=filter2(h,i);
或者:
h = fspecial(…prewitt‟)
I = imread('cameraman.tif');
imshow(I);
H = fspecial('prewitt…); %预定义滤波器
M = imfilter(I,H);
imshow(M)
或者:
i=imread('e:\w01.tif');
h=[1,1,1;1,1,1;1,1,1];
h=h/9;
j=conv2(i,h);
4、其他常用滤波举例
(1)中值滤波
medfilt2函数用于图像的中值滤波,如:
i=imread('e:\w01.tif');
j=medfilt2(i,[M N]);对矩阵i进行二维中值滤波,领域为M*N,缺省值为3*3
(2)利用拉氏算子锐化图像, 如:
i=imread('e:\w01.tif');
j=double(i);
h=[0,1,0;1,-4,0;0,1,0];%拉氏算子
k=conv2(j,h,'same');
四、实验步骤
1、采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波,窗口分别采用3*3,5*5,7*7
2、采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波
3、采用三种不同算子对图像进行锐化处理。
五、实验总结
1、比较不同平滑滤波器的处理效果,分析其优缺点
2、比较不同锐化滤波器的处理效果,分析其优缺点。