数字图像处理上机报告.docx
《数字图像处理上机报告.docx》由会员分享,可在线阅读,更多相关《数字图像处理上机报告.docx(20页珍藏版)》请在冰豆网上搜索。
数字图像处理上机报告
数字图像处理上机报告
时间:
2020年08月02日编稿:
作者四
第一篇:
数字图像处理上机报告
练习一常用MATLAB图像处理命令
一、练习目的
1、熟悉并掌握MATLAB工具的使用;
2、实现图像的读取、显示、代数运算和简单变换。
二、练习环境
Windows操作系统
Matlab6.5或以上应用软件
三、练习内容
1、图像文件的读写
(1)imread函数用来实现图像文件的读取。
输入以下程序:
A=imread('文件名.扩展名');%用imread函数来读入图像注:
设置路径imshow(A);%用imshow函数来显示图像得到的结果如图:
(2)imfinfo函数用来查询图像文件信息。
输入以下程序:
info=imfinfo('文件名.扩展名');%用imfinfo函数查询图像文件信息得到:
info=
Filename:
'文件名.扩展名'
(4)imshow函数用来显示图像。
刚才介绍imread函数时已使用此函数。
(5)colorbar函数将颜色条添加到坐标轴对象中。
输入以下程序:
RGB=imread('***');%图像读入
I=rgb2gray(RGB);%把RGB图像转换成灰度图像
imshow(I),colorbar('vert')%将颜色条添加到坐标轴对象中
得到如图:
2、图像处理的基本操作
一、图像代数运算
(1)imadd函数实现两幅图像的相加或者给一幅图像加上一个常数。
给图像每个像素都增加亮度的程序如下:
I=imread('***');J=imadd(I,100);%给图像增加亮度subplot(1,2,1),imshow(I)%填充subplot(1,2,2),imshow(J)结果如图5。
(2)imsubtract函数实现从一幅图像中减去一个常数。
输入以下程序实现从一幅图像中减去一个常数:
(3)immultiply实现两幅图像的相乘或者一幅图像的亮度缩放(图像乘以小于1或大于1的参数,比较效果)。
输入以下程序:
(4)imdivide函数实现两幅图像的除法或一幅图像的亮度缩放。
输入以下程序:
二、图像的空间域操作
(1)imrotate函数实现图像的旋转。
输入以下程序:
I=imread('***');J=imrotate(I,45);%对图像举行旋转subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);得到图:
练习二数字图像处理的基本操作
一、练习目的
1、练习使用MATLAB工具举行数字图像处理;
2、实现图像的边缘提取、滤波、直方图修正等操作。
二、练习环境
Windows操作系统
Matlab6.5或以上应用软件
三、练习内容
(1)imresize函数实现图像的缩放。
输入以下程序:
J=imread('文件名.扩展名');X1=imresize(J,2);%对图像举行缩放figure,imshow(J)结果如图
(2)imcrop函数实现图像的剪切。
输入以下程序:
I=imread('***');I2=imcrop(I);%对图像举行剪切subplot(填充),imshow(填充);subplot(填充),imshow(填充);如图:
图像变换
(1)fft2函数和ifft2函数分别是计算二维的FFT和反变换。
输入以下程序:
f=zeros(100,100);f(20:
70,40:
60)=1;imshow(f);F=fft2(f);%计算二维的FFTF2=log(abs(F));%对幅值取对数imshow(F2),colorbar
(2)dct2函数采纳基于FFT的算法,用于实现较大输入矩阵的离散余弦变换。
与之对应,idct2函数实现图像的二维逆离散余弦变换输入以下程序:
RGB=imread('***');I=rgb2gray(RGB);J=dct2(I);%对I举行离散余弦变换imshow(log(abs(J))),colorbarJ(abs(J)(3)edge函数用于提取图像的边缘。
输入以下程序:
RGB=imread('drum.bmp');I=rgb2gray(RGB);BW=edge(I);%提取图像的边缘imshow(I),figure,imshow(BW);得到图
图像增强、分割和编码
(1)imhist函数产生图像的直方图。
A=imread('drum.bmp');%读入图像
B=rgb2gray(A);%把RGB图像转化成灰度图像imshow(B);%显示灰度图像
imhist(B)%显示灰度图像的直方图得到图
(2)histeq函数用于对图像的直方图均衡化。
接上面程序:
C=histeq(B);%对图像B举行均衡化imshow(C);%显示图像
imhist(C);%得到均衡化后的灰度直方图得到如图
filter2函数实现均值滤波。
输入以下程序:
a=imread('noise.drum.jpg');I=rgb2gray(a);imshow(I);K1=filter2(fspecial('average',3),I)/255;%33的均值滤波K2=补充;
%55的均值滤波K3=补充;
%77的均值滤波figure,imshow(K1);figure,imshow(K2);figure,imshow(K3);得到图
(5)medfilt2函数实现中值滤波。
输入以下程序:
自查函数如何使用,并编程:
结果如图:
练习三
图像采样及图像类型转换
一、练习目的
1、熟悉并掌握MATLAB图像处理工具箱的使用;
2、试对自选图像分别举行4和16倍剪采样,查看其剪采样效果
3、将所给图,转换成256级灰度图像,8级灰度图像和2值图像
二、练习环境
MATLAB6.5或以上版本、WINXP或以上计算机
三、练习内容
使用MATLAB,对图像举行减采样。
a=imread('***.JPG');b=rgb2gray(a);[wid,hei]=size(b);%4倍减抽样
quartimg=zeros(wid/2+1,hei/2+1);i1=1;j1=1;fori=1:
2:
wid
forj=1:
2:
hei
quartimg(i1,j1)=b(i,j);
j1=j1+1;
endi1=i1+1;j1=1;endfigure
imshow(uint8(quartimg))练习结果如图
%16倍减抽样
编程并运行显示图像结果:
图像类型
1、练习内容
试将自选图,转换成256级灰度图像,8级灰度图像和2值图像
2、练习办法及程序
使用MATLAB,举行图像类型变换。
a=imread('***.jpg');b=rgb2gray(a);
figureimshow(b)[wid,hei]=size(b);img8=zeros(wid,hei);img2=zeros(wid,hei);fori=1:
wid
forj=1:
hei
img8(i,j)=floor(b(i,j)/32);%得到8级灰度图像
endendfigure
imshow(uint8(img8),[0,7])fori=1:
wid
forj=1:
hei
补充;endendfigure
imshow(uint8(img8),[0,2])%得到2值图像
练习结果如图
练习四
数字图像的空间域处理
一、练习目的
1、熟悉并掌握MATLAB图像处理工具箱的使用;
2、熟悉图像相加的办法及效果
3、熟悉图像灰度扩展的办法及效果
4、熟悉图像缩放、旋转的办法及效果
二、练习环境
MATLAB6.5或以上版本、WINXP或以上计算机
三、练习内容Part1
(1)挑选一幅图像***.jpg,设置输入输出变换的灰度级范围,a=0.3,b=0.6,c=0.1,d=0.9;
(2)设置非线性扩展函数的参数c=2;
(3)采纳灰度倒置变换函数s=255-r举行图像变换;
(4)设置二值化图像的阈值,分别为level=0.4,level=0.7参考程序如下:
I=imread('***.jpg');figure;subplot(1,3,1);imshow(I);title('原图');J=imadjust(I,[0.3;0.6],[0.1;0.9]);%设置灰度变换的范围subplot(1,3,2);imshow(J);title('线性扩展');I1=double(I);%将图像转换为double类型I2=I1/255;%归一化此图像C=2;K=C*log(1+I2);%求图像的对数变换subplot(1,3,3);imshow(K);title('非线性扩展');M=255-I;%将此图像取反figure;subplot(1,3,1);imshow(M);title('灰度倒置');N1=im2bw(I,0.4);%将此图像二值化,阈值为0.4N2=im2bw(I,0.7);%将此图像二值化,阈值为0.7subplot(1,3,2);imshow(N1);title('二值化阈值0.4');subplot(1,3,3);imshow(N2);title('二值化阈值0.7');练习结果与分析
(1)练习结果如图3.7所示。
Part2读取一幅图片,如***.jpg,设置图像旋转的角度分别为450和900,采纳图形旋转函数imrotate对图像举行旋转。
程序如下,结果如图3.10。
I=imread('i_lena.jpg');J=imrotate(I,45);%图像举行逆时针旋转,默认采纳最近邻法举行插值处理K=imrotate(I,90);%默认旋转出界的部分不被截出subplot(1,3,1);imshow(I);subplot(1,3,2);imshow(J);subplot(1,3,3);imshow(K);练习结果与分析
(1)练习结果如图3.10所示。
练习五数字图像的频域处理
一、练习目的
1、熟悉并掌握MATLAB工具的使用;
2、实现图像离散傅里叶变换并观看效果
3、实现图像离散余弦变换并观看效果
二、练习环境
Windows操作系统Matlab6.5或以上应用软件
三、练习内容Part1选取一幅图像,举行离散傅里叶变换,再对其分别举行X轴与Y轴上的平移,得其离散傅里叶变换,观看三幅结果图。
I=imread('1.bmp');figure
(1)imshow(real(I));I=I(:
:
3);fftI=fft2(I);sfftI=fftshift(fftI);%求离散傅里叶频谱
%对原始图像举行二维傅里叶变换,并将其坐标原点移到频谱图中央位置
RRfdp1=real(sfftI);IIfdp1=imag(sfftI);a=sqrt(RRfdp1.^2+IIfdp1.^2);a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;
figure
(2)imshow(real(a));练习结果与分析
Part2选取一幅图像,举行离散傅里叶变换,再对其举行一定角度的旋转,举行离散傅里叶变换。
%构造原始图像
I=zeros(256,256);
I(88:
168,124:
132)=1;%图像范围是256*256,前一值是纵向比,后一值是横向比imshow(I)
%求原始图像的傅里叶频谱
J=fft2(I);F=abs(J);J1=fftshift(F);figureimshow(J1,[550])
%对原始图像举行旋转
J=imrotate(I,90,'bilinear','crop');figureimshow(J)%求旋转后图像的傅里叶频谱
J1=fft2(J);F=abs(J1);J2=fftshift(F);figureimshow(J2,[550])练习结果与分析
1)练习结果如图4.4所示.
Part3选取一幅图像,举行离散余弦变换,并对其举行离散余弦反变换,观看其结果。
%对***.jpg文件计算二维DCT变换RGB=imread('***.jpg');figure
(1)imshow(RGB)I=rgb2gray(RGB);%真彩色图像转换成灰度图像J=dct2(I);%计算二维DCT变换figure
(2)imshow(log(abs(J)),[])%图像大部分能量集中在上左角处figure(3);J(abs(J)第二篇:
数字图像处理上机实验(02091008)
数字图像处理上机作业
数字图像处理上机作业
1.产生右图所示亮块图像f1(x,y)(128×128大小,暗处=0,亮处=255),对其举行FFT:
(1)同屏显示原图f1和FFT(f1)的幅度谱图;
图像:
(2)若令f2(x,y)=(-1)f1(x,y),重复以上过程,比较二者幅度谱的异同,简述理由;(3)若将f2(x,y)顺时针旋转45度得到f3(x,y),试显示FFT(f3)的幅度谱,并与FFT(f2)的幅度谱举行比较。
x+y
结论:
不同点:
f2的频谱是对f1频谱的移位,它时f1的频谱从原点(0,0)移到了中心(64,64),而得到了一个完整的频谱。
相同点:
频谱的实质没有改变,幅度等都没有发生变化。
(3)若将f2(x,y)顺时针旋转45度得到f3(x,y),试显示FFT(f3)的幅度谱,并与FFT(f2)的幅度谱举行比较。
源程序:
f1=zeros(128,128);fori=38:
1:
90forj=58:
1:
70f1(i,j)=255;endendfigure
(1)subplot(1,2,1);imshow(f1);subplot(1,2,2);imshow(fft2(f1));%f2(x,y)=(-1)^(x+y)*f1(x,y)fori=1:
1:
128forj=1:
1:
128f2(i,j)=(-1)^(i+j)*f1(i,j);endendfigure
(2);subplot(1,3,1);imshow(f2);f3=imrotate(f2,-45,'bilinear');%将f2顺时针旋转45度subplot(1,3,2);imshow(fft2(f2));%显示f2的频谱subplot(1,3,3);imshow(fft2(f3));%显示f3的频谱
结论:
均衡化后的直方图并非完全均匀分布的原因:
因为图像的像素个数和灰度等级均为离散值,而且均衡化后使灰度级并归。
2.对256256大小、256级灰度的数字图像lena举行频域的理想低通、高通滤波,同屏显示原图、幅度谱图和低通、高通滤波的结果图。
源代码:
figure
(1);fid=fopen('d:
\img\lena.img','r');data=(fread(fid,[256,256],'uint8'))';subplot(2,2,1)imagesc(data);colormap(gray);title('LENA','Color','r');subplot(2,2,2);imshow(fft2(data));s=fftshift(fft2(data));[M,N]=size(s);%分别返回s的行数到M中,列数到N中n=2;%对n赋初值%GLPF滤波,d0=5,15,30(程序中以d0=30为例)d0=30;%初始化d0n1=floor(M/2);%对M/2举行取整n2=floor(N/2);%对N/2举行取整fori=1:
Mforj=1:
Nd=sqrt((i-n1)^2+(j-n2)^2);%点(i,j)到傅立叶变换中心的距离h=1*exp(-1/2*(d^2/d0^2));%GLPF滤波函数
s(i,j)=h*s(i,j);%GLPF滤波后的频域表示endends=ifftshift(s);%对s举行反FFT挪移
%对s举行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数s=uint8(real(ifft2(s)));subplot(2,2,3);%创建图形图像对象imshow(s);p=fftshift(fft2(data));[M,N]=size(p);%分别返回p的行数到M中,列数到N中n=2;%对n赋初值%GLPF滤波d1=30d1=30;%初始化d1n3=floor(M/2);%对M/2举行取整n4=floor(N/2);%对N/2举行取整fori=1:
Mforj=1:
Ndd=sqrt((i-n3)^2+(j-n4)^2);%点(i,j)到傅立叶变换中心的距离h1=1-exp(-1/2*(dd^2/d1^2));%GHPF滤波函数
p(i,j)=h1*p(i,j);%GHPF滤波后的频域表示endendp=ifftshift(p);%对p举行反FFT挪移
%对s举行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数p=uint8(real(ifft2(p)));subplot(2,2,4);%创建图形图像对象imshow(p);
3.对给定的两种1281
28、256级灰度的数字图像(图像磁盘文件名分别为Fing_128.img(指纹图)和Cell_128.img(显微医学图像)举行如下处理:
(1)对原图像举行直方图均衡化处理,同屏显示处理前后图像及其直方图,比较异同,并回答为什么数字图像均衡化后其直方图并非完全均匀分布。
异同:
由于原图像中目标物的灰度主要集中于低亮度部分,而且象素总数比较多,经过直方图均衡后,目标物的所占的灰度等级得到扩展,对照度加强,使整个图像得到增强。
数字图像均衡化后其直方图并非完全均匀分布的原因:
由于原图像中目标物的灰度主要集中于低亮度部分,而且象素总数比较少,而所占的灰度等级比较多,因此图像的对照度比较好,亮度比较大,整体图像清楚。
经过直方图均衡后,目标物的所占的灰度等级被压缩,对照度减弱,反而使目标物变的难以辨认。
数字图像均衡化后,其直方图并非完全均匀分布,这是因为图像的象素个数和灰度等级均为离散值;而且均衡化使灰度级并归,因此,均衡化后,其直方图并非完全均匀分布。
源代码:
figure
(1);fid=fopen('D:
\img\cell_128.img','r');
%打开无格式文件data1=(fread(fid,[128,128],'uint8'))';%将打开的文件读入到data1subplot(4,2,1);
%将figure
(1)分成4*2的8个子窗口,data11=uint8(data1);imshow(data11);%图象显示
title('CELL','Color','b');
%加标题subplot(4,2,2);title('原图像直方图');imhist(data11);subplot(4,2,3);
%取第二个子窗口
data2=uint8(data1);%将灰度图象转换成uint8格式b=histeq(data2);
%直方图均衡化
imshow(b,256);
%显示均衡化图象,256可缺省title('均衡化','Color','b');
subplot(4,2,4);imhist(b);title('均衡化后图像直方图');subplot(4,2,5)fid=fopen('d:
\img\fing_128.img','r');%打开无格式文件
data3=(fread(fid,[128,128],'uint8'))';%将打开的文件读入到data3data31=uint8(data3);
%将灰度图象转换成uint8格式imshow(data31);
%显示灰度图象title('FING','Color','b');subplot(4,2,6)imhist(data31);title('原图像直方图');subplot(4,2,7);
data4=uint8(data3);%将灰度图象转换成uint8格式d=histeq(data4);
%直方图均衡化
imshow(d,256);
%显示均衡化图象,256可缺省title('均衡化','Color','b');
subplot(4,2,8);imhist(d);title('均衡化后原图像直方图');
(2)对原图像加入高斯噪声,用4-邻域平均法平滑加噪声图像(图像四周边界不处理,下同),同屏显示原图像、加噪图像和处理后的图像。
①不加门限;
②加门限T2f(m,n),(其中f(m,n)
1N2f(i,j))
ij
源代码:
%CELLfigure
(2);fid=fopen('D:
\img\cell_128.img','r');
%打开无格式文件
data1=(fread(fid,[128,128],'uint8'))';%将打开的文件读入到data1I=uint8(data1);I1=imnoise(I,'gaussian');%加乘性噪声H1=[010;101;010]/4;%4×4领域模板J=imfilter(I,H1);%领域平均
subplot(2,4,1),imshow(I);%显示图像Ititle('原图像');subplot(2,4,2),imshow(I1);title('加噪声后图像');subplot(2,4,3),imshow(J);
%不加门限平滑title('不加门限平滑后图像');%加门限后滤波
T=2*sum(I1(:
))/128^2;im_T=zeros(128,128);fori=1:
128
forj=1:
128
ifabs(I1(i,j)J(i,j))>T
im_T(i,j)=J(i,j);
else
im_T(i,j)=I1(i,j);
end
endendsubplot(2,4,8);imshow(im