资源描述
数字图像处理实验讲义16学时2011年版
———————————————————————————————— 作者:
———————————————————————————————— 日期:
2
个人收集整理 勿做商业用途
实验1 图像基本操作
1. 实验要求
在MATLAB环境下完成下列操作:
读入图像;
保存图像;
图像的显示方法
2. 实验类型 验证型
3. 实验时间 2学时
4. 实验方法
使用函数imread可以将图像读入MATLAB环境,imread的语法为
imread( ‘filename’ )
imread所支持的文件格式包括:
TIFF—-—--—---- 。tif .tiff
JPEG--—-——-- .jpg 。jpeg
GIF—---———--—— .gif
BMP——---—--- .bmp
PNG———---——- .png
XWD-—-————-- 。xwd
使用函数imwrite可以将图像保存在磁盘上,imwrite的语法为
imwrite( f, ‘filename' )
使用函数size可以察看图像大小,size的语法为
size( )
使用函数imfinfo可以察看图像信息,imfinfo的语法为
imfinfo filename
使用函数imshow可以显示图像缩略图,imshow的语法为
imshow ( )
使用函数imview可以显示图像原图,imview的语法为,不同的是imview是一个工具,可以完成一些基本的图像操作
imview ( )
使用函数figure可以开辟一个新的窗口,figure的语法为
figure, imshow ( )
figure, imview ( )
figure, plot ( )
…………………
使用数据类型转换函数可以转换图像数据类型,如
im2uint8 ( ) --—-—-------—-—-—- convert image to uint8
im2uint16 ( ) -----———--——-—-- convert image to uint16
mat2gray ( ) —---—---—-—-—---- convert image to double, range[0 , 1]
im2double ( ) ---—--—-—-—-—-—- convert image to double
im2bw ( ) ——-——---———--——-—-——- convert image to logical
5. 实验过程
使用函数imread打开一幅灰度图像(fig0309abc.jpg),使用函数imwrite将图像另存为不同的文件名;在此过程中观察图像矩阵的形式,并用图像矩阵的索引法,观察并记录5×5的矩阵片断;
使用函数size察看图像大小,使用函数imfinfo察看图像信息;记录图像信息;
分别使用函数imshow和函数imview显示图像;记录两种方式的区别;
使用函数imread打开一幅彩色图像(start。jpg),观察图像矩阵的形式;并分别观察和记录RGB三色5×5的矩阵片断;
使用函数rgb2gray将彩色图像转换为灰度图像;
使用im2uint8和im2double转换图像的数据类型,记录5×5矩阵片断在转换前后的变化。
实验2 图像点运算
1. 实验要求
在MATLAB环境下完成下列操作:
读入图像;
图像灰度变换方法;
灰度的对数扩展法;
绘制灰度直方图;
直方图均衡法;
任意灰度变换实现;
2. 实验类型 验证型
3. 实验时间 2学时
4. 实验方法
使用函数imadjust可以实现图像灰度变换,imadjust的语法为
imadjust ( f, [ low_in high_in ], [ low_out high_out ], gamma )
gamma所表示的意义:
>1 --—--———-— 凹曲线
<1 ——-————--- 凸曲线
=1 -——--——-—- 直线
灰度的对数扩展法 g = c*log( 1+ double( f ) )
目的是使亮区域得到抑制,暗区域灰度得到均匀增强
使用语句
im2uint8(mat2gray( log( 1+ double (f) ) ) )
其中系数c通过mat2gray函数自动调整
灰度直方图反映图像的灰度分布情况,即亮度分布情况;
它说明不同灰度的像素个数或分布概率
使用函数imhist绘制灰度直方图,imhist的语法为
h = imhist( f );
figure, imhist( f );
figure, plot( h );
figure, stem( h );
figure, bar( h );
由于拍摄和处理的原因,导致图像的灰度分布范围过小;
最大熵原理指出:数据满足均匀分布时,信息量最大;
依据这个原理,通过灰度直方图均衡化将图像灰度分布扩展到整个灰度分布范围,可以使图形信息量最大,即使使得图像对比度增强。
使用函数histeq对图像进行直方图均衡,histeq的语法为
g = histeq( f, nlev ); % nlev为输出的灰度级数,通常取256,默认64
figure, imhist(g);
图1
任意灰度变换需要进行分段计算,如图1
α*f , 0≤f<a ;
g = β*(f-a)+ga , a≤f<b ;
γ*(f-b)+gb , b≤f≤c ;
5. 实验过程
使用函数imread打开一幅灰度图像(fig0222b。jpg),使用函数imadjust实现图像灰度变换;
分别使用:
g1= imadjust ( f, [ 20 255 ], [ 0 255 ], 0.5 );
g2= imadjust ( f, [ 20 255 ], [ 0 255 ], 1 );
g3= imadjust ( f, [ 20 255 ], [ 0 255 ], 2 );
g4= imadjust ( f, [ 0 255 ], [ 255 05 ], 1 );
figure, imshow(g1);
figure, imshow(g2);
figure, imshow(g3);
figure, imshow(g4);
观察并记录四种变换差别。(注意:请将方括号内的整数需要手工折算成浮点数)
使用函数imread打开一幅灰度图像(fig0305.tif),使用如下语句进行对数扩展
figure, imshow(f2);
g5= im2uint8(mat2gray(log(1+double (f2))));
figure, imshow(g5);
观察并记录均衡前后的差别。
使用函数imread打开一幅灰度图像(fig0222b.jpg),使用函数imhist绘制灰度直方图,直方图有四种表现形式
h = imhist( f3 );
figure, imhist( f3 );
figure, plot( h );
figure, stem( h );
figure, bar( h );
观察四种直方图的差别.
使用函数imread打开一幅灰度图像(fig0308。tif),说明这幅图像直方图存在的问题.使用函数histeq对图像进行直方图均衡,比较并记录均衡前后图像的变化
h1 = histeq( f3, 256 );
figure, imhist( h1 );
figure, imshow( f3 );
figure, imshow( h1 );
打开一幅灰度图像(fig0309abc.jpg),编写一个m文件完成图2的灰度变换功能,观察并记录图像变换前后的区别,将程序记录
图2
实验3 图像间的运算
1. 实验要求
在MATLAB环境下完成下列操作:
图像加法;
图像减法;
图像乘法;
图像除法;
图像与或非等逻辑运算;
2. 实验类型 验证型
3. 实验时间 2学时
4. 实验方法
图像加法是把图像叠加在一起的操作,使用函数imadd将两幅图像相加.
f1=imread(’Fig0206a。tif'); %读入图像
f2=imread(’Fig0207.tif ’); %读入图像
f3=imadd(f1,f2);
figure,imshow(f3);
图像减法是从一幅图像中减去另一幅图像,经常被用作检测两幅图像的差别,使用函数imsubtract将两幅图像相减。下面的操作是根据一幅原始图像,生成其背景亮度图像,然后再从原图像中减去背景亮度图像,从而得到结果。
f4=imread('Fig0404.jpg’); %读入图像
bkgrd=imopen(f4,strel('disk’,15));
f5=imsubtract(f4, bkgrd);
figure,subplot(1,2,1),imshow(f4);
subplot(1,2,2),imshow(f5);
图像乘法将两幅图像对应点的像素进行相乘操作(MATLAB的点乘),使用函数immultiply对两幅图像进行乘法操作,并将相乘的结果作为输出图像对应点的像素值。
f6=imread('Fig0206a.tif’); %读入图像
f7=imread(' Fig0207.tif '); %读入图像
f8=immultiply(f6,f7); %两幅图像相乘
f9=immultiply(f6,1。2); %图像和一个系数相乘,等于将灰度乘以一个系数
figure,subplot(2,2,1),imshow(f6);
subplot(2,2,2),imshow(f7);
subplot(2,2,3),imshow(f8);
subplot(2,2,4),imshow(f9);
图像除法将两幅图像对应点的像素进行相除操作(MATLAB的点除),使用函数imdivide对两幅图像进行除法操作,并将相除的结果作为输出图像对应点的像素值.
f10=imread(’ Fig0206a.tif ’); %读入图像
f11=imread(' Fig0207。tif ’); %读入图像
f12=double(f11);
f13=f12*0。2+50;
f14=uint8(f13);
f15=imdivide (f10,f14);
figure,imshow(f15);
图像间的逻辑运算主要有“与”、“或”、“非”等,把它们组合起来可以构成其他逻辑运算。当我们对灰度级进行逻辑操作时,像素值作为一个二进制数来处理,逻辑操作按位进行。
“与"和“或”运算通常用作模板,即通过这些操作可以从一幅图像中提取子图像,更加突出子图像的内容.下面的“与"和“或"运算通过逐点进行。
f=imread(’fig0222b。jpg'); %读入图像
[m,n]=size(f);
figure,subplot(2,3,1),imshow(f);
f1=zeros(m,n);
f1(20:150,70:170)=255;
f1=uint8(f1);
subplot(2,3,2),imshow(f1);
for i=1:m
for j=1:n
f2(i,j)=bitand(f(i,j),f1(i,j));
end
end
subplot(2,3,3),imshow(f2); %显示“与”的结果
f3=ones(m,n)*255;
f3(20:150,70:170)=0;
f3=uint8(f3);
subplot(2,3,5),imshow(f3);
for i=1:m
for j=1:n
f4(i,j)=bitor(f(i,j),f3(i,j));
end
end
subplot(2,3,6),imshow(f4); %显示“或”的结果
for i=1:m
for j=1:n
f5(i,j)=bitxor(f(i,j),255); %和1取异或等于求反
end
end
subplot(2,3,4),imshow(f5); %显示“非”的结果
5. 实验过程
使用函数imadd将两幅图像相加 ('Fig0206a.tif') ('Fig0207。tif ’),观察并记录结果。
使用函数imsubtract将两幅图像相减(’Fig0404。jpg’),观察并记录结果。
使用函数immultiply对两幅图像进行乘法操作(’Fig0206a。tif') (’Fig0207。tif ’),并将相乘的结果作为输出图像对应点的像素值,观察并记录结果。
使用函数imdivide对两幅图像进行除法操作('Fig0206a.tif') ('Fig0207。tif ’),并将相除的结果作为输出图像对应点的像素值,观察并记录结果。
使用点运算进行图像“与”、“或”、“非”操作('fig0222b。jpg'),观察并记录结果.
实验4 图像空间运算
1. 实验要求
在MATLAB环境下完成下列操作:
均值滤波方法;
中值滤波方法;
边缘检测;
基于边缘检测的图像增强法;
采用边缘检测和灰度变换结合图像增强法;
2. 实验类型 验证型
3. 实验时间 2学时
4. 实验方法
图像的空间滤波使用函数imfilter实现,imfilter的语法为
imfilter ( f, w, { filtering_mode }, { boundary_option }, { size_option } )
f —--——--— image matrix
w -———--— image mask
{ }为可选项
均值滤波的掩模 ,,等
中值滤波的函数medfilt2()
边缘检测的算子,,,
,,,,
,等
基于边缘检测的图像增强算子,,,
,,,,
,等
采用边缘检测和灰度变换结合图像增强法
设是图像经过一阶梯度运算的结果
1.
2.
3.
4.
5. 实验过程
使用函数imread打开一幅有噪声的灰度图像(fig0318.tif);
分别使用:
均值滤波的各种掩模过滤噪声,观察并记录各种掩模处理结果的差异,注意掩模的系数
中值滤波观察并记录和中值滤波相比的结果差异
使用函数imread打开一幅灰度图像(fig0316.tif);
分别使用:
使用各种边缘检测的算子检测边缘,观察并记录各种算子处理结果的差异.
使用各种边缘增强的算子处理图像,观察并记录各种算子处理结果的差异.
打开一幅灰度图像(fig0413。tif),编程实现四种采用边缘检测和灰度变换结合图像增强法
设门限T=210,LG=230,LB=50,(这是参考数值,请根据实际情况调整)
记录程序,并且比较四种处理结果的差异
实验5 图像频域运算
1. 实验要求
在MATLAB环境下完成下列操作:
掌握图像进行二维DFT的方法;
完成简单的图像频域滤波;
采用频域处理对图像增强法;
2. 实验类型 验证型
3. 实验时间 2学时
4. 实验方法
图像的图像进行二维DFT使用函数fft2()实现,fft2()的语法为
F=fft2(f);
为了显示频谱的实部使用
S=abs(F);
figure,imshow(S,[ ]);
为了将频谱居中显示,使用函数fftshift()搬移,fftshift()的语法为
Fc=fftshift(F);
figure,imshow(Fc,[ ]);
为了使频谱的对比度增强,采用对数增强法
S2=log(1+abs(Fc));
figure,imshow(S2,[ ])
将图像进行IDFT之前,使用函数ifftshift()将频谱反向搬移,然后使用函数ifft2()进行IDFT
生成低通滤波使用函数lpfilter(),生成高通滤波使用函数hpfilter(),(参考函数部分)
H1=lpfilter(‘ideal',M,N,D0);
H2=hpfilter(‘ideal’,M,N,D0);
对图像进行频域滤波使用函数dftfilt(),(参考函数部分)
G1=dftfilt(f,H1);
G2=dftfilt(f,H2);
figure,imshow(G1,[ ]);
figure,imshow(G2,[ ]);
对图像进行高频强调增强,是在保持图像特征的基础上,对高频部分进行一定提升
H3=0。5+2*H2;
G3=dftfilt(f,H3);
figure,imshow(G3,[ ]);
5. 实验过程
使用函数imread打开一幅图像(fig0403.tif),对图像进行DFT,频谱搬移,反搬移,和IDFT
使用函数imread打开一幅灰度图像(fig0413。tif),对图像进行低通滤波,高通滤波,和高频增强
设计一种频域图像增强方法对图像fig0419。tif进行增强,同时采用空间增强方法对结果进行比较
实验6 图像退化和复原
1. 实验要求
在MATLAB环境下完成下列操作:
完成图像运动模糊退化;
完成有约束的最小二乘方滤波;
完成图像维纳滤波;
完成图像逆滤波;
比较各种方法的优缺点;
2. 实验类型 验证型
3. 实验时间 2学时
4. 实验方法
创建一个运动模糊退化滤波器(退化滤波器PSF),使用函数fspecial创建退化滤波器PSF,然后调用imfilter对图像进行卷积运算,就可以得到一幅运动退化图像。
I=imread(’fig0222b。jpg'); %读入图像
figure,subplot(1,2,1),imshow(I);
LEN=31;
THETA=11;
PSF=fspecial('motion',LEN,THETA); %生成退化函数
blurred=imfilter(I,PSF, 'circular', 'conv’);
subplot(1,2,2),imshow(Blurred);
然后使用imnoise函数对图像添加随机噪声。
fnblurred =imnoise( blurred, ’gaussian',0,0。001); %产生随机噪声图像
figure, imshow(fnblurred);
下面,使用函数deconvwnr对无噪声的运动模糊图像进行复原,这里假设退化函数PSF已知
LEN=31;
THETA=11;
PSF=fspecial('motion’,LEN,THETA);
wnr1=deconvwnr(blurred,PSF);
figure,imshow(wnr1);
然而,实际情况是退化函数PSF是未知的,只能通过一些先验参数进行复原,所以,这里采用不同的LEN和THETA参数,进行实验,体会一下退化函数PSF的重要性.
wnr2=deconvwnr(blurred, fspecial(’motion’,2*LEN,THETA));
figure,subplot(1,2,1),imshow(wnr2);
wnr3=deconvwnr(blurred, fspecial('motion’, LEN, 2*THETA));
subplot(1,2,2),imshow(wnr3);
接下来,使用函数deconvwnr对一幅有噪声的运动模糊图像进行维纳滤波复原。
wnr4=deconvwnr(fnblurred,PSF);
figure,imshow(wnr4);
从结果中可以看出,复原效果不是很好,这是由于维纳滤波器设计不合适所导致的.
为了使维纳滤波复原的效果变好,必须使用deconvwnr函数的可选参数NSR、NCORR和ICORR,通过改变参数获得不同的复原效果。
pnoise=imnoise(zeros(size(f)),’gaussian’,0,0.001);
NSR=sum(pnoise(:)。^2) /sum(im2double(fnblurred(:)).^2); %使用信噪比作为约束条件
wnr5= deconvwnr(fnblurred,PSF,NSR);
NP=abs(fftn(pnoise))。^2;
NCORR=fftshift(real(ifftn(NP))); %使用噪声自相关函数
IP= abs(fftn(im2double(fnblurred)))。^2;
ICORR=fftshift(real(ifftn(IP))); %使用图像自相关函数
wnr6= deconvwnr(fnblurred,PSF, NCORR, ICORR);
figure,imshow(wnr6);
盲目去卷积法可在对退化情况完全不知情的下(忽略噪声影响)进行逆滤波操作。可以使用deconvblind函数进行盲目去卷积。
PSF=fspecial(’gaussian',7,10);
blurred01=imfilter(I,PSF, 'circular', 'conv’);
figure, imshow(blurred01);
UNDERPSF=ones(size(PSF)—4);
[J1 P1]= deconvblind(blurred01, UNDERPSF); % 使用较小的PSF进行逆滤波
figure, imshow(J1);
OVERPSF=padarray(UNDERPSF,[4 4], 'replicate’, ’both');
[J2 P2]= deconvblind(blurred01, OVERPSF); % 使用较大的PSF进行逆滤波
figure, imshow(J2);
INITPSF=padarray(UNDERPSF,[2 2], ’replicate’, ’both');
[J3 P3]= deconvblind(blurred01, INITPSF); % 使用真实的PSF进行逆滤波
figure, imshow(J3);
从结果中可以发现,退化函数PSF对图像复原质量有着非常重要的影响,实际应用中可以通过分析,使用不同大小的PSF对图像进行复原,从中选择一个最合适的PSF使用。
5. 实验过程
使用函数fspecial创建退化滤波器PSF,然后调用imfilter对图像进行卷积运算,就可以得到一幅运动退化图像,观察并记录结果.
使用imnoise函数对图像添加随机噪声,观察并记录结果。
使用函数deconvwnr对无噪声的运动模糊图像进行复原,观察并记录结果.同时采用不同的LEN和THETA参数,进行实验,体会一下退化函数PSF的重要性,观察并记录结果.
使用函数deconvwnr对一幅有噪声的运动模糊图像进行维纳滤波复原,观察并记录结果。为了使维纳滤波复原的效果变好,必须使用deconvwnr函数的可选参数NSR、NCORR和ICORR,通过改变参数获得不同的复原效果,观察并记录结果。
使用deconvblind函数进行盲目去卷积,采用不同的退化函数,观察并记录结果。
实验7 彩色图像处理
1. 实验要求
在MATLAB环境下完成下列操作:
学习MATLAB中彩色图像的表示方法
掌握彩色图像空间的转换方法
掌握彩色图像平滑滤波和锐化的方法
2. 实验类型 验证型
3. 实验时间 2学时
4. 实验方法
令fr, fg , fb分别代表RGB彩色图像的三个色彩分量,一幅RGB图像利用cat( )函数将三个分量合成为一幅RGB图像,语法为
rgb_image = cat (3, fr, fg, fb)
其中rgb_image为已经读入的彩色图像矩阵
使用函数rgb2gray可以将彩色图像转换为灰度图像,rgb2gray的语法为
rgb2gray ( )
也可以直接提取RGB彩色图像的三个色彩分量,语法为
fr = rgb_image (:, :, 1)
fg = rgb_image (:, :, 2)
fb = rgb_image (:, :, 3)
在MATLAB中,可以将彩色图像在各个色彩空间中相互转换,语法为
rgb空间和YCrCb空间的转换
ycbcr_image = rgb2ycbcr(rgb_image)
彩色图像由于还有色彩信息,因此它的平滑和锐化,必须在每个色彩分量中分别进行
5. 实验过程
使用函数imread打开一幅彩色图像(start.jpg);
观察RGB三个分量的值,将三个分量显示出来,观察其中差异
将一幅彩色图像(start.jpg)分别转换到YCrCb,CMYK空间,将四个空间的图像显示出来,观察其中差异
使用函数imread打开一幅彩色图像(fig0618.tif),提取三个分量,用矩阵,对图像在三个分量进行平滑,分别观察三个分量平滑结果以及合成彩色图像后的平滑结果
将图像fig0618。tif转换到YCrCb空间,提取三个分量,用矩阵,对图像在三个分量进行平滑,分别观察三个分量平滑结果以及合成彩色图像后的平滑结果
请比较分别比较在RGB空间和YCrCb空间进行平滑的效果
使用函数imread打开一幅彩色图像(fig0618.tif),提取三个分量,用拉普拉斯算子,对图像在三个分量进行锐化,分别观察三个分量锐化结果以及合成彩色图像后的锐化结果
将图像fig0618。tif转换到YCrCb空间,提取三个分量,用拉普拉斯算子,对图像在三个分量进行锐化,分别观察三个分量锐化结果以及合成彩色图像后的锐化结果
请比较分别比较在RGB空间和YCrCb空间进行锐化的效果
实验8 图像形态学操作
1. 实验要求
在MATLAB环境下完成下列操作:
学习图像形态学的基本原理和方法
掌握图像形态学操作的一般方法;
完成简单的图像形态操作;
设计简单的形态操作方案;
2. 实验类型 验证型
3. 实验时间 2学时
4. 实验方法
图像进行膨胀使用函数imdilate()实现,imdilate()的语法为
F=imdilate (f,B);
其中B是结构元素
图像进行腐蚀使用函数imerode()实现,imerode ()的语法为
F=imerode (f,B);
其中B是结构元素
图像进行开运算使用函数imopen()实现,imopen ()的语法为
F=imopen (f,B);
其中B是结构元素
图像进行闭运算使用函数imclose()实现,imclose ()的语法为
F=imclose (f,B);
其中B是结构元素
图像的结构元素B可以手工输入,也可以程序生成
生成结构元素使用函数 strel()实现,strel ()的语法为
B = strel(shape,parameters)
函数strel()的使用说明参考matlab帮助
图像的贴标签操作使用函数 bwlabel()实现,bwlabel ()的语法为
[L, n] = bwlabel(f,conn)
其中,conn是联接数,L是贴过标签的图像,n是最大的标签数
5. 实验过程
使用函数imread打开一幅灰度图像(fig0906。tif);
对图像进行膨胀运算,分别使用半径为5的结构元素
或B=ones(5)
或B=strel(‘rectangle’,[5 5])
使用函数imread打开一幅灰度图像(fig0908.tif);
对图像进行腐蚀运算,分别使用半径为5,10,20的结构元素,观察三种的结果的差异;
使用函数imread打开一幅灰度图像(fig0910.tif);
使用半径为10的结构元素,分别对图像进行开运算和闭运算,观察两种运算结果之间的差异;
使用函数imread打开一幅灰度图像(fig0926bw。tif);
这是一张米粒的照片,设计一种方法,使用前面介绍的函数计算米粒的个数(提示:可使用函数bwlable计算单联通域的个数)
附录:IPT图像处理函数列表
Geometric transformations。
pixeldup — Duplicate pixels of an image in both directions.
vistformfwd — Visualize forward geometric transformation.
Pixel values and statistics。
covmatrix - Covariance matrix of vector population。
statmoments - Statistical central moments of image histogram。
Image analysis, including segmentation, description, recognition.
bayesgauss - Bayes classifier for Gaussian patterns。
bound2eight — Convert 4—connected boundary to 8-connected。
bound2four - Convert 8-connected boundary to 4—connected.
bound2im - Convert boundary to image。
boundaries — Trace region boundaries。
bsubsamp — Subsample a boundary.
colorgrad — Vector gradient of RGB image.
colorseg - Segment a color image.
connectpoly — Connect vertices of polygon.
diameter - Measure diameter of image regions。
fchcode - Freeman chain code of boundary。
frdescp — Fourier descriptors。
hough — Hough transform.
houghlines — Extract line segments using Hough transform。
houghpeaks - Detect peaks in Hough transform.
houghpixels - Image pixels associated with Hough transform bin。
ifrdescp — Inverse Fourier descriptors。
imstack2vectors - Extract vectors from image stack。
invmoments - Invariant moments of image。
mahalanobis - Mahalanobis distance.
minperpoly - Minimum perimeter polygon。
polyangles — Internal angles of polygon vertices。
princomp — Principal-component vectors.
randvertex — Randomly perturb polygon vertices.
regiongrow - Segmentation by region growing.
signature - Signature of boundary.
specxture — Spectral texture of image.
splitmerge — Segment image using split—and-merge.
statxture — Statistical texture measures of image.
strsimilarity - Similarity measurement
展开阅读全文