武汉科技大学图像处理实验报告.docx
《武汉科技大学图像处理实验报告.docx》由会员分享,可在线阅读,更多相关《武汉科技大学图像处理实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
武汉科技大学图像处理实验报告
实验报告要求
每个程序给出图像效果,每个子图像上方标注该图像简要注释。
程序代码进行必要的修改完善。
第一次实验报告内容如下:
实验一:
图像直方图均衡化与图像滤波
【实验目的】
1、了解图像直方图的基本数学原理,会编写相应的m函数文件;
2、掌握matlab图像直方图均衡化、规定化函数.理解图像直方图处理的意义;
3、掌握噪声模拟和图像滤波函数的使用方法;
4、理解图像均值滤波、中值滤波的基本原理,掌握Matlab图像滤波基本函数的使用方法。
【实验内容】
1、自己编写m文件代码,实现求灰度图像的灰度直方图,并与imhist函数的结果比较。
I=imread('rice.bmp');
imshow(I)
figure,imhist(I,64)
figure,imhist(I,128)
2、自己编写m文件代码,实现某幅图像的3*3的均值滤波。
I=imread('eight.tif');
J=imnoise(I,'salt&pepper',0.02);%对指定的图像加入椒盐噪声
subplot(1,2,1),imshow(J);title('含噪声的图像');
K1=filter2(fspecial('average',3),J)/255;%进行3*3模板的均值滤波
subplot(1,2,2),imshow(K1);title('3*3模板的均值滤波后的图像');
3、读入一张常见的图象处理图像(譬如:
Lena,house等图像),应用IPT的函数对图像作模糊化和添加噪声处理;然后,参照课本和课堂讲解的例题中的方法对退化的图像进行复原。
请写下实验程序代码和必要的代码注释,整理实验报告.
K1=imread('rice.bmp');
K2=filter2(fspecial('average',3),K1)/255;%进行3*3模板的均值滤波
K3=imnoise(K2,'salt&pepper',0.02);%对指定的图像加入椒盐噪声
K4=medfilt2(K3,[33]);%进行3*3模板的中值滤波
subplot(2,2,1),imshow(K1);title('原图像');
subplot(2,2,2),imshow(K2);title('3*3均值滤波后的图像,模糊化');
subplot(2,2,3),imshow(K3);title('加入椒盐噪声后的图像');
subplot(2,2,4),imshow(K4);title('进行3*3模板的中值滤波后的图像');
第二次实验报告内容如下:
实验二:
图像频域变换及应用
【实验目的】
1、了解傅立叶变换、离散余弦变换及Radon变换在图像处理中的应用;
2、掌握Matlab图像频域变换的基本函数的使用;
3、理解图像频域变换的意义;
【实验内容】
1绘制一个二值图像矩阵,并将其傅里叶函数可视化。
说明:
这个例子将创建一个矩阵,然后用一个二进制图像显示。
再对这个图像矩阵做傅里叶变换,显示其幅值。
%创建矩阵
f=zeros(40,40);
f(5:
24,13:
17)=1;
subplot(1,2,1),imshow(f);title('矩阵的显示');
%进行图像f的傅里叶变换
F=fft2(f);
%对幅值取对数
F2=log(abs(F));
subplot(1,2,2),imshow(F2,[-15],'notruesize');title('傅里叶变换显示');
2调试如下程序。
分析该程序的功能,写上必要注释。
figure
(1);
f=imread('room.bmp');
f=rgb2gray(f);
subplot(2,2,1),imshow(f);title('原图像');
F=fft2(f);
S=fftshift(log(1+abs(F)));
S=gscale(S);
subplot(2,2,2),imshow(S);title('图像1');
h=fspecial('sobel')';
PQ=paddedsize(size(f));
H=freqz2(h,PQ
(1),PQ
(2));
H1=double(ifftshift(H));
subplot(2,2,3),imshow(abs(H),[]);title('图像2');
subplot(2,2,4),imshow(abs(H1),[]);title('图像3');
gs=imfilter(double(f),h);%generatethefilteredimagesinthespatialdomain.
gf=dftfilt(f,H1);%generatethefilteredimagesinthespatialdomain.
figure
(2);
subplot(3,2,1),imshow(gs,[]);title('image1');
subplot(3,2,2),imshow(gf,[]);title('image2');
subplot(3,2,3),imshow(abs(gs),[]);title('image3');
subplot(3,2,4),imshow(abs(gf),[]);title('image4');
subplot(3,2,5),imshow(abs(gs)>0.2*abs(max(gs(:
))));title('image5');
subplot(3,2,6),imshow(abs(gf)>0.2*abs(max(gs(:
))));title('image6');
3对图像autumn.tif进行离散余弦变换,并对处理后图像进行简单分析。
RGB=imread('autumn.tif');
%将彩色图像转换为灰度图像
I=rgb2gray(RGB);
subplot(1,3,1),imshow(I);;title('灰度化');
subplot(1,3,2),imshow(RGB);;title('原彩色图');
%进行离散余弦变换
J=dct2(I);
subplot(1,3,3),imshow(log(abs(J)),[]);
title('DCT结果')
从显示结果可以看出,图像的能量很大一部分在变换矩阵的左上角。
第三次实验报告内容如下:
实验三:
图像形态学操作及其应用
【实验目的】
1、掌握图像二值形态学基本运算;
2、掌握MATLAB图像膨胀、腐蚀、开启、闭合等形态学操作函数的使用;
3、了解二进制图像的形态学应用;
4、了解空间变换函数及图像匹配方法;
5、理解图像对象标记的原理,理解图像形态学操作在目标特征提取中的意义;
【实验内容】
8.1用形态学算子去掉图像circles.tif的内点,抽取骨架和细化。
BW1=imread('D:
\MATLAB6p5\toolbox\images\imdemos\circles.tif');
imshow(BW1);
%用形态学算子去除图像的内点
BW2=bwmorph(BW1,'remove');
%用形态学算子抽取图像的骨架
BW3=bwmorph(BW1,'skel',Inf);
%用形态学算子细化图像
BW4=bwmorph(BW1,'thin',Inf);
subplot(2,2,1);
imshow(BW1);title('原图像');
subplot(2,2,2);
imshow(BW2);title('去除内点的图像');
subplot(2,2,3);
imshow(BW3);title('抽取骨架图像');
subplot(2,2,4);
imshow(BW4);title('细化图像');
8.2标记一幅自定义二值图像,统计目标的个数。
BW=imread('F:
\双语教学\2007双语课件\程序\targets.jpeg');
BW1=im2bw(BW);
BW1=~BW1;
L=bwlabel(BW1,8);
[m,n]=size(L);
k=0;
fori=1:
m
forj=1:
n
ifL(i,j)>k
k=L(i,j);
end
end
end
k%目标有k个。
subplot(1,2,1);
imshow(BW);title('原图像');
subplot(1,2,2);
imshow(BW1);title('二值化取反后的图像');
第四次实验报告内容如下:
实验四:
图像分割、图像边缘检测
【实验目的】
1、理解图像边缘检测sobel算子、roberts算子和prewitt算子的基本原理,掌握边缘检测的Matlab实现方法;
2、图像二值化阈值选择的方法;
3、了解用四叉数分解函数进行区域分割的方法;
4、掌握Matlab图像分割、图像边缘检测的基本函数;理解图像分割阈值选取的原理;
【实验内容】
1、使用edge函数对图像‘rice.tif’进行边缘检测。
同时比较'roberts','sobel','prewitt','canny','log'算子的检测效果。
edge函数提供的最有效的边缘检测方法是canny方法。
其优点如下:
使用两种不同的阈值分别检测强、弱边缘,并且仅当弱边缘与强边缘相连时,才将弱边缘包含在输出图像中。
该方法不易受噪声干扰,能够在噪声和边缘间取得较好的平衡,检测到真正的弱边缘。
说明:
在这里用edge函数调用不同的算子模板提取边缘。
I=imread('rice.tif');
imshow(I)
bw1=edge(I,'roberts');
bw2=edge(I,'sobel');
bw3=edge(I,'prewitt');
bw4=edge(I,'canny');
bw5=edge(I,'log');
figure,imshow(bw1)
figure,imshow(bw2)
figure,imshow(bw3)
figure,imshow(bw4)
figure,imshow(bw5)
从提取图像可以看到,边缘的检测并不是十分准确。
在对图像进行边缘检侧时,由于灰度的变换并不是十分陡峭,或着由于噪声的干扰,会出现提取出错误的情况。
所以如果在处理前(滤波)或处理后(连接)做一些工作,可以更加精确地检测边缘。
2、区域操作
2.1区域选取
使用区域选择函数roicolor,区域滤波函数roifilt2和区域填充函数roifilld对图像‘pout.tif’或‘eight.tif’进行区域操作。
I=imread('pout.tif');
imshow(I)
BW=roipoly;
figure,imshow(BW)
h=fspecial('unsharp');
I2=roifilt2(h,I,BW);
figure,imshow(I2)
I3=roifill;
figure,imshow(I3);
I=imread('eight.tif');
imshow(I)
c=[222272300270221194];
r=[21217512112175];
BW=roipoly(I,c,r);
figure,imshow(BW)
H=fspecial('unsharp');
J1=roifilt2(H,I,BW);
figure,imshow(J1)
J2=roifill(I,c,r);
figure,imshow(J2)
4、将标签图像4-11.jpg分为文字和非文字的两个区域。
显示其RGB灰度直方图及分割结果。
图4-11.jpg
I=imread('4-11.jpg');%读取彩色书标签图像
I1=I(:
:
1);
I2=I(:
:
2);
I3=I(:
:
3);
[y,x,z]=size(I);
d1=zeros(y,x);
d2=d1;
myI=double(I);
I0=zeros(y,x);
fori=1:
x
forj=1:
y
%欧式聚类
d1(j,i)=sqrt((myI(j,i,1)-180)^2+(myI(j,i,2)-180)^2+(myI(j,i,3)-180)^2);
d2(j,i)=sqrt((myI(j,i,1)-200)^2+(myI(j,i,2)-200)^2+(myI(j,i,3)-200)^2);
if(d1(j,i)>=d2(j,i))
I0(j,i)=1;
end
end
end
figure
(1);
imshow(I);
%显示RGB空间的灰度直方图,确定两个聚类中心(180,180,180)和(200,200,200)
figure
(2);
subplot(1,3,1);
imhist(I1);
subplot(1,3,2);
imhist(I2);
subplot(1,3,3);
imhist(I3);
figure(4);
imshow(I0);
本程序先通过观察灰度直方图,确定文字和非文字的聚类中心,然后利用欧式距离进行判断聚类。
由于图像分割目标简单,不需要进行动态的C-均值聚类。