数字图像处理实验报告全答案.docx
- 文档编号:5215725
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:26
- 大小:775.75KB
数字图像处理实验报告全答案.docx
《数字图像处理实验报告全答案.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验报告全答案.docx(26页珍藏版)》请在冰豆网上搜索。
数字图像处理实验报告全答案
实验一常用MATLAB图像处理命令
一、实验目的
1、熟悉并掌握MATLAB工具的使用;
2、实现图像的读取、显示、代数运算和简单变换。
二、实验环境
MATLAB以上版本、WINXP或WIN2000计算机
三、常用函数
●读写图像文件
1imread
imread函数用于读入各种图像文件,如:
a=imread('e:
\')
2imwrite
imwrite函数用于写入图像文件,如:
imwrite(a,'e:
\',’tif’)
3imfinfo
imfinfo函数用于读取图像文件的有关信息,如:
imfinfo('e:
\')
●图像的显示
1image
image函数是MATLAB提供的最原始的图像显示函数,如:
a=[1,2,3,4;4,5,6,7;8,9,10,11,12];
image(a);
2imshow
imshow函数用于图像文件的显示,如:
i=imread('e:
\');
imshow(i);
title(‘原图像’)%加上图像标题
3colorbar
colorbar函数用显示图像的颜色条,如:
i=imread('e:
\');
imshow(i);
colorbar;
4figure
figure函数用于设定图像显示窗口,如:
figure
(1);/figure
(2);
5subplot
把图形窗口分成多个矩形部分,每个部分可以分别用来进行显示。
Subplot(m,n,p)分成m*n个小窗口,在第p个窗口中创建坐标轴为当前坐标轴,用于显示图形。
6plot
绘制二维图形
plot(y)
Plot(x,y)xy可以是向量、矩阵。
●图像类型转换
1rgb2gray
N须是0,4,6,8.当N大于0时,圆盘形结构元素由一组N(或N+2)个周期线结构元素来近似。
当N等于0时,不使用近似,即结构元素的所有像素是由到中心像素距离小于等于R的像素组成。
N可以被忽略,此时缺省值是4。
注:
形态学操作在N>0情况下要快于N=0的情形。
如:
se1=strel('square',11)%11乘以11的正方形
4imerode
腐蚀图像
用法:
IM2=imerode(IM,SE)
腐蚀灰度、二进制或压缩二进制图像IM,返回腐蚀图像IM2。
参数SE是函数strel返回的一个结构元素体或是结构元素体阵列。
如:
使用一个盘状结构元素腐蚀一幅二进制图像。
originalBW=imread('');
se=strel('disk',11);
erodedBW=imerode(originalBW,se);
imshow(originalBW),figure,imshow(erodedBW)
5imdilate
膨胀图像
用法:
IM2=imdilate(IM,SE)
膨胀灰度图像、二值图像、或者打包的二值图像IM,返回膨胀图像M2。
变量SE是一个结构元素或者一个结构元素的数组,其是通过strel函数返回的。
如:
利用一个运行结构元素膨胀灰度图像。
I=imread('');
se=strel('ball',5,5);
I2=imdilate(I,se);
imshow(I),title('Original')
figure,imshow(I2),title('Dilated')
三、实验步骤
1、产生运动模糊图像,运用维纳滤波进行图像恢复,显示结果。
i=imread('f:
\')
I=rgb2gray(s)
I=im2double(I);
%模拟运动模糊
LEN=21;
THETA=11;
PSF=fspecial('motion',LEN,THETA);
blurred=imfilter(I,PSF,'conv','circular');
%恢复图像
wnr2=deconvwnr(blurred,PSF);
subplot(1,2,1);imshow(blurred);title('运动模糊图像')
subplot(1,2,2);imshow(wnr2);title('恢复图像')
2、采用三种不同算子检测图像边缘,显示结果。
i=imread('f:
\')
BW1=edge(I,'prewitt');
BW2=edge(I,'zerocross');
BW3=edge(I,'canny');
subplot(2,2,1);imshow(i);title('原图像')
subplot(2,2,2);imshow(BW1);title('prewitt边缘图')
subplot(2,2,3);imshow(BW2);title('zerocross边缘图')
subplot(2,2,4);imshow(BW3);title('canny边缘图')
3、对二值图像分别进行方形模板3*3和5*5的膨胀和腐蚀操作,显示结果。
a=imread('f:
\')
i=rgb2gray(a)
I=im2bw(a,
se3=strel('disk',3);
erodedBW1=imerode(I,se3);
se4=strel('disk',5);
erodedBW2=imerode(I,se4);
se1=strel('ball',3,3);
I1=imdilate(a,se1);
se2=strel('ball',5,5);
I2=imdilate(a,se2);
subplot(2,2,1);imshow(I1);title('3*3膨胀图像')
subplot(2,2,2);imshow(I2);title('5*5膨胀图像')
subplot(2,2,3);imshow(erodedBW1);title('3*3腐蚀图像')
subplot(2,2,4);imshow(erodedBW2);title('5*5腐蚀图像')
实验六图像处理实际应用
一、实验目的
1、熟悉并掌握MATLAB图像处理工具箱的使用;
2、理解并掌握常用的图像处理技术。
二、实验环境
MATLAB以上版本、WINXP或WIN2000计算机
三、实验内容
调试运行下列程序,分析程序,对每条语句给出注释,并显示最终执行结果。
总结算法思想及优缺点.
I=imread('');
[y,x,z]=size(I);
myI=double(I);
%%%%%%%%%%%RGBtoHSI%%%%%%%%
tic
%%%%%%%%Y方向%%%%%%%%%%
Blue_y=zeros(y,1);
fori=1:
y
forj=1:
x
if((myI(i,j,1)<=30)&&((myI(i,j,2)<=62)&&(myI(i,j,2)>=51))&&((myI(i,j,3)<=142)&&(myI(i,j,3)>=119)))%蓝色RGB的灰度范围
Blue_y(i,1)=Blue_y(i,1)+1;
end
end
end
[tempMaxY]=max(Blue_y);%Y方向车牌区域确定
PY1=MaxY;
while((Blue_y(PY1,1)>=5)&&(PY1>1))
PY1=PY1-1;
end
PY2=MaxY;
while((Blue_y(PY2,1)>=5)&&(PY2 PY2=PY2+1; end IY=I(PY1: PY2,: : ); %%%%%%%%X方向%%%%%%%%%% Blue_x=zeros(1,x); forj=1: x fori=PY1: PY2 if((myI(i,j,1)<=30)&&((myI(i,j,2)<=62)&&(myI(i,j,2)>=51))&&((myI(i,j,3)<=142)&&(myI(i,j,3)>=119))) Blue_x(1,j)=Blue_x(1,j)+1; end end end PX1=1; while((Blue_x(1,PX1)<3)&&(PX1 PX1=PX1+1; end PX2=x; while((Blue_x(1,PX2)<3)&&(PX2>PX1)) PX2=PX2-1; end PX1=PX1-2;%对车牌区域的修正 PX2=PX2+2; Plate=I(PY1: PY2,PX1-2: PX2,: ); t=toc%读取计时 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% figure,imshow(I); figure,plot(Blue_y);grid figure,plot(Blue_x);grid figure,imshow(IY); 添加注释和改正后的程序: I=imread('f: \');%读取图片 [y,x,z]=size(I);%给定图片大小 myI=double(I);%返回双精度值 %%%%%%%%%%%RGBtoHSI%%%%%%%% tic%计时开始 %%%%%%%%Y方向%%%%%%%%%% Blue_y=zeros(y,1);%一列全零矩阵 fori=1: y%给定i的范围 forj=1: x%给定j的范围 if((myI(i,j,1)<=30)&&((myI(i,j,2)<=62)&&(myI(i,j,2)>=51))&&((myI(i,j,3)<=142)&&(myI(i,j,3)>=119)))%蓝色RGB的灰度范围 Blue_y(i,1)=Blue_y(i,1)+1;%y矩阵加一 end end end [tempMaxY]=max(Blue_y);%Y方向车牌区域确定 PY1=MaxY;%y矩阵的最大元素 while((Blue_y(PY1,1)>=5)&&(PY1>1))%确定蓝色RGBBlue_y所在位置 PY1=PY1-1;%对车牌区域的修正,向上调整 end PY2=MaxY;%y矩阵的最大元素 while((Blue_y(PY2,1)>=5)&&(PY2 PY2=PY2+1;%对车牌区域的修正向下调整 end IY=I(PY1: PY2,: : );%行的范围 %%%%%%%%X方向%%%%%%%%%% Blue_x=zeros(1,x);%一行全一矩阵 forj=1: x%给定j的取值范围 fori=PY1: PY2%给定i的取值范围 if((myI(i,j,1)<=30)&&((myI(i,j,2)<=62)&&(myI(i,j,2)>=51))&&((myI(i,j,3)<=142)&&(myI(i,j,3)>=119)))%调整I中的范围 Blue_x(1,j)=Blue_x(1,j)+1;%Blue_x的矩阵加一 end end end PX1=1;%当PX1等于1时 while((Blue_x(1,PX1)<3)&&(PX1 PX1=PX1+1;%对车牌区域的修正向下调整 end PX2=x;%当PX2等于x时 while((Blue_x(1,PX2)<3)&&(PX2>PX1))%确定蓝色RGBBlue_x的位置 PX2=PX2-1;%对车牌区域的修正向下调整 end PX1=PX1-2;%对车牌区域的修正 PX2=PX2+2;%对车牌区域的修正 Plate=I(PY1: PY2,PX1-2: PX2,: );%矩阵行列的范围 t=toc%读取计时 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% figure,imshow(I);%创建图像窗口,显示图像I figure,plot(Blue_y);grid%创建图像窗口,绘制Blue_y图像,画出网格线 figure,plot(Blue_x);grid%创建图像窗口,绘制Blue_x图像,画出网格线 figure,imshow(Plate);%创建图像窗口,显示图像Plate t= 实验二图像基本操作 一、实验目的 1、熟悉及掌握图像的采样原理,实现图像的采样过程,进行图像的灰度转换。 2、理解直方图的概念及应用,实现图像直方图的显示,及通过直方图均衡和直方图规定化方法对图像进行修正。 二、实验环境 MATLAB以上版本、WINXP或WIN2000计算机 三、相关函数 ●图像的增强 1、直方图 imhist函数用于数字图像的直方图计算或显示, imhist(I, n)计算和显示图像I的直方图,n为指定的灰度级数目,默认为256。 如果I是二值图像,那么n仅有两个值。 [counts,x] = imhist(...)返回直方图数据向量counts,相应的色彩值向量x。 如: i=imread('e: \'); imhist(i); 2、直方图均衡化 histeq函数用于数字图像的直方图均衡化, J=histeq(I,n) 均衡化后的级数n,缺省值为64。 J=histeq(I,hgram)"直方图规定化",即将原是图象I的直方图变换成用户指定的向量hgram(即指定另一幅图像的直方图数据向量)。 如: i=imread('e: \'); 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。 它们都可以使用空的矩阵[],默认值是[01]。 如: i=imread('e: \'); j=imadjust(i,[,],[]);将图像i转换为j,使灰度值从~与缺省值0~1相匹配 ●运算函数 1、Zeros生成全0数组或矩阵 如B=zeros(m,n)orB=zeros([mn])返回一个m*n全0矩阵 2、取整函数 floor最小取整函数 round四舍五入取整函数 ceil最大取整函数 如a=[,,,,,+] I=round(a) I=[-203672+4i] 四、实验内容 1、对一幅图像进行2倍、4倍、8倍和16倍减采样,显示结果。 a=imread('f: /'); b=rgb2gray(a); form=1: 4 figure [width,height]=size(b); quartimage=zeros(floor(width/(m)),floor(height/(2*m))); k=1; n=1; fori=1: (m): width forj=1: (2*m): height quartimage(k,n)=b(i,j); n=n+1; end k=k+1; n=1; end imshow(uint8(quartimage)); End 2、显示一幅灰度图像a,改变图像亮度使其整体变暗得到图像b,显示两幅图像的直方图。 a=imread('f: \') c=rgb2gray(a) b=c-46 subplot(2,1,1);imhist(c);title('原图像') subplot(2,1,2);imhist(b);title('变暗后的图像') 3、对图像b进行直方图均衡化,显示结果图像和对应直方图。 b=imread('f: \') c=rgb2gray(b) j=histeq(c) subplot(2,2,1),imshow(c) subplot(2,2,2),imshow(j) subplot(2,2,3),imhist(c)%显示原始图像直方图 subplot(2,2,4),imhist(j)%显示均衡化后图像的直方图 4、读入图像c,执行直方图规定化,使图像a的灰度分布与c大致相同,显示变换后图像及对应直方图。 I=imread('f: \'); >>J=histeq(I,64);%均衡化成32个灰度级的直方图 >>[counts,x]=imhist(J);%返回直方图图像向量counts b=imread('f: \') Q=rgb2gray(b) >>M=histeq(Q,counts);%将原始图像Q的直方图变成指定向量counts >>figure, >>subplot(3,2,1),imshow(I); >>subplot(3,2,2),imshow(Q); >>subplot(3,2,3),imhist(I); >>subplot(3,2,4),imhist(Q) >>subplot(3,2,5),imhist(J); >>subplot(3,2,6),imhist(M); 实验三图像变换 一、实验目的 1、熟悉及掌握图像的变换原理及性质,实现图像的傅里叶变换。 二、实验环境 MATLAB以上版本、WINXP或WIN2000计算机 三、相关函数 ●图像的变换 1fft2 fft2函数用于数字图像的二维傅立叶变换,如: i=imread('e: \'); j=fft2(i); 由于MATLAB无法显示复数图像,因此变换后的结果还需进行求模运算,即调用abs函数。 之后常常还进行对数变换,即调用log函数,以减缓傅里叶谱的快速衰减,更好地显示高频信息。 2ifft2 ifft2函数用于数字图像的二维傅立叶反变换,如: i=imread('e: \'); j=fft2(i); k=ifft2(j); 3fftshift 用于将变换后图像频谱中心从矩阵的原点移动到矩阵的中心 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、对一幅图像进行平移,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系。 s=imread('f: \');%读入原图像 i=rgb2gray(s) i=double(i) j=fft2(i);%傅里叶变换 k=fftshift(j);%直流分量移到频谱中心 l=log(abs(k));%对数变换 m=fftshift(j);%直流分量移到频谱中心 RR=real(m);%取傅里叶变换的实部 II=imag(m);%取傅里叶变换的虚部 A=sqrt(RR.^2+II.^2);%计算频谱府幅值 A=(A-min(min(A)))/(max(max(A)))*255;%归一化 b=circshift(s,[800450]);%对图像矩阵im中的数据进行移位操作 b=rgb2gray(b) b=double(b) c=fft2(b);%傅里叶变换 e=fftshift(c);%直流分量移到频谱中心 l=log(abs(e));%对数变换 f=fftshift(c);%直流分量移到频谱中心 WW=real(f);%取傅里叶变换的实部B ZZ=imag(f);%取傅里叶变换的虚部 B=sqrt(WW.^2+ZZ.^2);%计算频谱府幅值 B=(B-min(min(B)))/(max(max(B)))*255;%归一化 subplot(2,2,1);imshow(s);title('原图像') subplot(2,2,2);imshow(uint8(b));;title('平移图像') subplot(2,2,3);imshow(A);title('离散傅里叶频谱'); subplot(2,2,4);imshow(B);title('平移图像离散傅里叶频谱') 2、对一幅图像进行旋转,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与旋转后傅里叶频谱的对应关系。 s=imread('f: \');%读入原图像 i=rgb2gray(s) i=double(i) j=fft2(i);%傅里叶变换 k=fftshift(j);%直流分量移到频谱中心 l=log(abs(k));%对数变换 m=fftshift(j);%直流分量移到频谱中心 RR=real(m);%取傅里叶变换的实部 II=imag(m);%取傅里叶变换的虚部 A=sqrt(RR.^2+II.^2);%计算频谱府幅值 A=(A-min(min(A)))/(max(max(A)))*255;%归一化 b=imrotate(s,-90);%对图像矩阵im中的数据进行移位操作 b=rgb2gray(b) b=double(b) c=fft2(b);%傅里叶变换 e=fftshift(c);%直流分量移到频谱中心 l=log(abs(e));%对数变换 f=fftshift(c);%直流分量移到频谱中心 WW=real(f);%取傅里叶变换的实部B ZZ=imag(f);%取傅里叶变换的虚部 B=sqrt(WW.^2+ZZ.^2);%计算频谱府幅值 B=(B-min(min(B)))/(max(max(B)))*255;%归一化 subplot(2,2,1);imshow(s);title('原图像') subplot(2,2,2);imshow(uint8(b));;title('平移图像') subplot(2,2,3);imshow(A);title('离散傅里叶频谱'); subplot(2,2,4);ims
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 处理 实验 报告 答案