《数字图像处理》.docx
《《数字图像处理》.docx》由会员分享,可在线阅读,更多相关《《数字图像处理》.docx(44页珍藏版)》请在冰豆网上搜索。
《数字图像处理》
实验一图像增强与平滑
一.实验目的及要求
1.了解MATLAB的操作环境和基本功能。
2.掌握MATLAB中图像增强与平滑的函数的使用方法。
3.加深理解图像增强与平滑的算法原理。
二、实验内容
(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。
熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。
1.直方图均衡化
clearall;closeall%CleartheMATLABworkspaceofanyvariables
%andcloseopenfigurewindows.
I=imread('pout.tif');%Readsthesampleimages‘pout.tif’,andstoresitin
imshow(I)%anarraynamedI.displaytheimage
figure,imhist(I)%Createahistogramoftheimageanddisplayitin
%anewfigurewindow.
[I2,T]=histeq(I);%Histogramequalization.
figure,imshow(I2)%Displaythenewequalizedimage,I2,inanewfigurewindow.
figure,imhist(I2)%CreateahistogramoftheequalizedimageI2.
figure,plot((0:
255)/255,T);%plotthetransformationcurve.
imwrite(I2,'pout2.png');%WritethenewlyadjustedimageI2toadiskfilenamed
%‘pout2.png’.
imfinfo('pout2.png')%Checkthecontentsofthenewlywrittenfile
均衡化的结果是使弧度范围变的变广,均衡化后的图象对比度变强。
注意:
imadjust()
功能:
调整图像灰度值或颜色映像表,也可实现伽马校正。
语法:
J=imadjust(I,[low_inhigh_in],[low_outhigh_out],gamma)
newmap=imadjust(map,[low_inhigh_in],[low_outhigh_out],gamma)
RGB2=imadjust(RGB1,...)
2.直接灰度变换
clearall;closeall
I=imread('cameraman.tif');
J=imadjust(I,[00.2],[0.51]);
imshow(I)
figure,imshow(J)
[X,map]=imread('forest.tif');
figure,imshow(X,map)
I2=ind2gray(X,map);
J2=imadjust(I2,[],[],0.5);
figure,imshow(I2)
figure,imshow(J2)
J3=imadjust(I2,[],[],1.5);
figure,imshow(J3)
helpimadjust%Displaytheimadjust()functioninformation.
3.空域平滑滤波(模糊、去噪)
clearall;closeall
I=imread('eight.tif');
h1=ones(3,3)/9;
h2=ones(5,5)/25;
I1=imfilter(I,h1);
I2=imfilter(I,h2);
figure
(1),imshow(I),title('OriginalImage');
figure
(2),imshow(I1),title('FilteredImageWith3*3')
figure(3),imshow(I2),title('FilteredImageWith5*5')
%加入Gaussian噪声
J1=imnoise(I,'gaussian',0,0.005);
%加入椒盐噪声
J2=imnoise(I,'salt&pepper',0.02);
%对J1、J2进行平均值平滑滤波
K1=imfilter(J1,fspecial('average',3));
K2=imfilter(J2,fspecial('average',3));
figure(4);
subplot(2,2,1),imshow(J1),title('gaussian');
subplot(2,2,2),imshow(J2),title('salt&pepper');
subplot(2,2,3),imshow(K1),title('average');
subplot(2,2,4),imshow(K2);
%对J1、J2进行中值滤波
K3=medfilt2(J1,[33]);
K4=medfilt2(J2,[33]);
figure(5);
subplot(2,2,1),imshow(J1),title('gaussian');
subplot(2,2,2),imshow(J2),title('salt&pepper');
subplot(2,2,3),imshow(K3),title('Medianfiltering');
subplot(2,2,4),imshow(K4)
4.空域锐化滤波
clearall;closeall
I=imread('moon.tif');
w=fspecial('laplacian',0.2)
w8=[1,1,1;1,-8,1;1,1,1]
I1=imfilter(I,w,'replicate');
figure
(1);imshow(I),title('OriginalImage');
figure
(2),imshow(I1),title('LaplacianImage');
f=im2double(I);
f1=imfilter(f,w,'replicate');
figure(3),imshow(f1,[]),title('LaplacianImage');
f2=imfilter(f,w8,'replicate');
f4=f-f1;
f8=f-f2;
figure(4),imshow(f4);
figure(5),imshow(f8);
w=0.16670.66670.1667
0.6667-3.33330.6667
0.16670.66670.1667
w8=111
1-81
111
5.图像的伪彩色处理—密度分割
clearall,closeall
I=imread('ngc4024m.tif');
X=grayslice(I,16);
imshow(I),title('OriginalImage')
figure,imshow(X,jet(16)),title('IndexColorImage')
(二)采用MATLAB底层函数编程实现以下灰度线性变换
假定原图像f(x,y)的灰度范围为[a,b],希望变换后图像g(x,y)的灰度范围扩展至[c,d],则线性变换可表示为:
用MATLAB底层函数编程实现上述变换函数。
观察图像‘pout.tif’的灰度直方图,选择合适的参数[a,b]、[c,d]对图像‘pout.tif’进行灰度变换,以获得满意的视觉效果。
三、实验设备
1.PIII以上微机;
2.MATLAB6.5;
实验二图像分割与边缘检测
一.实验目的及要求
1.利用MATLAB研究图像分割与边缘检测的常用算法原理;
2.掌握MATLAB图像域值分割与边缘检测函数的使用方法;
3.了解边缘检测的算法和用途,比较Sobel、Prewitt、Canny等算子边缘检测的差异。
二、实验内容
(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。
熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。
1.图像阈值分割
clearall,closeall;
I=imread('rice.tif');
figure
(1),imshow(I)
figure
(2);imhist(I)
T=120/255;
Ibw1=im2bw(I,T);%选择阈值T=120/255对图像二值化;
figure(3);
subplot(1,2,1),imshow(Ibw1);
T=graythresh(I);%采用Otsu方法计算最优阈值T对图像二值化;
L=uint8(T*255)
Ibw2=im2bw(I,T);
subplot(1,2,2),imshow(Ibw2);
helpim2bw;
helpgraythresh;
L=125
将T改为60/255后的结果是:
2.边缘检测
clearall,closeall;
I=imread('rice.tif');
BW1=edge(I,'sobel');
BW2=edge(I,'canny');
BW3=edge(I,'prewitt');
BW4=edge(I,'roberts');
BW5=edge(I,'log');
figure
(1),imshow(I),title('OriginalImage');
figure
(2),imshow(BW1),title('sobel');
figure(3),imshow(BW2),title('canny');
figure(4),imshow(BW3),title('prewitt');
figure(5),imshow(BW4),title('roberts');
figure(6),imshow(BW5),title('log');
%在完成上述试验后,查看函数edge()使用说明。
helpedge
%仔细阅读函数edge()使用说明后,研究IPT提供的边缘检测演示程序。
edgedemo
分别用不同的算子对图象进行边缘检测,相比之下,canny算子的检测结果是最好的,边缘清晰且完整;roberts算子只能检测出少数一部分边缘;其他算子均存在或多或少的边缘不完整现象。
由图可知边缘被比较完整的检测出来,不过存在少部分的粘连现象。
(二)利用MATLAB熟悉并验证其它图像分割方法
(三)采用MATLAB编程实现自动全局阈值算法,对图像'rice.tif'进行二值化分割
算法步骤:
1)选取一个的初始估计值T;
2)用T分割图像。
这样便会生成两组像素集合:
G1由所有灰度值大于T的像素组成,而G2由所有灰度值小于或等于T的像素组成。
3)对G1和G2中所有像素计算平均灰度值1和2。
4)计算新的阈值:
T=(1+2)/2
5)重复步骤
(2)到(4),直到逐次迭代所得到的T值之差小于一个事先定义的参数To,即,如果|Tn–Tn-1|三、实验设备
1.PIII以上微机;
2.MATLAB6.5;
实验三图像的几何变换
一.实验目的及要求
掌握图像几何变换的基本原理,熟练掌握数字图像的缩放、旋转、平移、镜像和转置的基本原理及其MATLAB编程实现方法。
二、实验内容
(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。
熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。
1.图像缩放
clearall,closeall
I=imread('cameraman.tif');
Scale=1.35;%将图像放大1.35倍
J1=imresize(I,Scale,'nearest');%usingthenearestneighborinterpolation
J2=imresize(I,Scale,'bilinear');%usingthebilinearinterpolation
imshow(I),title('OriginalImage');
figure,imshow(J1),title('ResizedImage--usingthenearestneighborinterpolation');
figure,imshow(J2),title('ResizedImage--usingthebilinearinterpolation');
%查看imresize使用帮助
helpimresize
可见第一幅图存在一定的可明显观察到的失真现象,这是放大过程中采用的填充算法的缺陷所至。
将Scale改为6,即放大6倍:
结果如下图所示
图像旋转
clearall,closeall
I=imread('cameraman.tif');
Theta=45;%将图像逆时针旋转45。
J1=imrotate(I,Theta,'nearest');%usingthenearestneighborinterpolation
%andenlargetheoutputimage
Theta=-45;%将图像顺时针旋转45。
J2=imrotate(I,Theta,'bilinear','crop');%usingthebilinearinterpolation
%andcropstheoutputimage
imshow(I),title('OriginalImage');
figure,imshow(J1),title('RotatedImage--usingthenearestneighborinterpolation');
figure,imshow(J2),title('RotatedImage--usingthebilinearinterpolation');
%查看imrotate使用帮助
helpimrotate
原始图象同上
分别将图像逆时针旋转90,顺时针旋转90。
原始图象同上。
3.图像水平镜象
clearall,closeall
I=imread('cameraman.tif');
I1=flipdim(I,2);
I2=flipdim(I,1);
figure
(1),subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(I1);
figure
(2),subplot(2,1,1),imshow(I);
subplot(2,1,2),imshow(I2);
(二)用MATLAB编程实现以下图像几何变换
1.图像平移
2.图像转置
图像的转置是将给定图像像素的x坐标和y坐标互换的几何变换,设点P0(x0,y0)转置后的对应点为P(x,y),转置变换可表述为:
或
,对应的逆变换为:
或
转置后图像的宽、高发生改变,即输出图像的高度为原始图像的宽度,输出图像的宽度为原始图像的高度。
三、实验设备
1.PIII以上微机;
2.MATLAB6.5;
实验四图像形态学处理
一.实验目的及要求
1.利用MATLAB研究二值形态学图像处理常用算法;
2.掌握MATLAB形态学图像处理基本操作函数的使用方法;
3.了了解形态学的基本应用。
二、实验内容
(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。
熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。
1.膨胀与腐蚀(DilationandErosion)
(1)对简单二值图像进行膨胀与腐蚀
clearall,closeall
BW=zeros(9,10);
BW(4:
6,4:
7)=1;
BW
SE=strel('square',3)
BW1=imdilate(BW,SE)
BW2=imerode(BW,SE)
figure
(1),
subplot(1,2,1),imshow(BW,'notruesize'),title('OriginalImage');
subplot(1,2,2),imshow(BW1,'notruesize'),title('DilatedImage');
figure
(2),
subplot(1,2,1),imshow(BW,'notruesize'),title('OriginalImage');
subplot(1,2,2),imshow(BW2,'notruesize'),title('ErodedImage');
(2)对文本图像进行膨胀与腐蚀
clearall,closeall
I=imread('text.tif');
SE=[0,1,0;1,1,1;0,1,0]
BW1=imdilate(I,SE);
BW2=imerode(I,SE);
figure
(1),
subplot(1,2,1),imshow(I,'notruesize'),title('OriginalImage');
subplot(1,2,2),imshow(BW1,'notruesize'),title('DilatedImage');
figure
(2),
subplot(1,2,1),imshow(I,'notruesize'),title('OriginalImage');
subplot(1,2,2),imshow(BW2,'notruesize'),title('ErodedImage');
膨胀的结果是使图象依据对象元素的形状向外扩充,腐蚀的结果是使图象依据对象元素的形状向内削减,由于本实验使用的对象元素过大导致腐蚀后的结果完全表现不出原始图象中的内容。
2.开、闭运算(OpenandClose)
clearall,closeall
I=imread('nodules1.tif');
bw=~im2bw(I,graythresh(I));
se=strel('disk',5);
bw2=imopen(bw,se);
subplot(1,2,1),imshow(bw),title('ThresholdedImage')
subplot(1,2,2),imshow(bw2),title('Afteropening')
bw3=imclose(bw,se);
figure;
subplot(1,2,1),imshow(bw,'truesize'),title('ThresholdedImage')
subplot(1,2,2),imshow(bw3,'truesize'),title('AfterClosing')
由实验结果分析可得:
开运算是使图象去噪声,图象边缘更圆滑;而闭运算的作用是突出放大了原始图象的小范围粘连。
改变结构元素大小,重做上述实验结果如下图:
由上实验结果分析:
由于对象元素选取的过大,大于前景的最大图象,所以开运算的结果使图象的前景元素完全消失了;闭运算也出现了严重的失真现象。
所以在对图象进行开闭运算时,应注意对象元素的选择。
3.击中/击不中变换(hit-and-missoperation)
clearall,closeall
bw=[000000
001100
011110
011110
001100
001000]
interval=[0-1-1
11-1
010]
bw2=bwhitmiss(bw,interval)
subplot(1,3,1),imshow(bw,'notruesize'),title('OriginalImage');
subplot(1,3,2),imshow(interval,'truesize'),title('IntervalImage');
subplot(1,3,3),imshow(bw2,'notruesize'),title('afterhit/misstransformation');
4.细化与骨架抽取
clearall,closeall
BW=~imread('logo.tif');
BW1=bwmorph(BW,'thin',Inf);
BW2=bwmorph(BW,'skel',Inf);
subplot(1,3,1),imshow(BW),title('OriginalImage');
subplot(1,3,2),imshow(BW1),title('ThinnedImage');
subplot(1,3,3),imshow(BW2),title('Imageskeleton');
%查看bwmorph函数使用说明
helpbwmorph
(二)用MATLAB二值数学形态学函数编程提取’rice.tif’图像中的物体边界。
三、实验设备
1.PIII以上微机;
2.MATLAB6.5;
实验五频域变换
一.实验目的及要求
1.利用MATLAB研究数字图像的傅立叶变换、离散余弦变换等频域变换算法;
2.掌握MATLAB频域变换函数的使用方法;
3.了频域变换的基本应用。
二、实验内容
(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。
熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。
1.傅立叶变换
(1)简单人工二值图像
clearall,closeall
f=zeros(50,50);
f(15:
35,23:
28)=1;
figure
(1),imshow(f,'notruesize')
F=fft2(f,128,128);
F1=fftshift(F);
figure
(2),imshow(log(abs(F1)),[-15]);colormap(gray)